Golang中如何从同一包导入依赖项
Golang中如何从同一包导入依赖项 即使我们在同一个包中但拥有不同的文件,我们是否需要将结构体、元素等设为公开?
例如:
core/utils/utils.go
package core
some code
core/strategies/fifo.go
package core
import core "imc/core"
等等
core/utils/utils.go 属于 core/utils/core 包
core/strategies/fifo.go 属于 core/strategies/core 包
虽然它们通常被简称为核心包,但实际上是两个不同的包,因此不存在共享一说。
更多关于Golang中如何从同一包导入依赖项的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
我认为你应该系统地学习Go的包管理系统。一般来说,同一个目录下的go文件属于同一个包,共享私有变量、函数等。嵌套的子目录或子目录中的go文件不算在内。跨包引用只能引用公开的函数、变量等,这些是暴露给包的,通常以大写字母开头。
所以看起来,当涉及到不同文件夹时,我们需要为每个 .go 文件提供唯一的包名吗?
如果我理解有误请纠正我 - “core/utils/utils.go” 应该有一个唯一的包名(例如 “utils”),然后我们需要为这个包提供导入语句?
在Go语言中,同一个包内的所有文件共享相同的包作用域,不需要导入。所有未导出的标识符(以小写字母开头)在同一个包内都是可见的。
示例:
core/utils/utils.go:
package core
// 未导出的结构体,同一包内可访问
type internalConfig struct {
timeout int
}
// 导出的函数,可被外部包访问
func ProcessData() {
c := internalConfig{timeout: 30}
c.process()
}
// 未导出的方法,同一包内可访问
func (c *internalConfig) process() {
// 实现细节
}
core/strategies/fifo.go:
package core
// 不需要导入core包,直接使用同一包内的标识符
func FIFOStrategy() {
// 直接使用utils.go中的未导出结构体
config := internalConfig{timeout: 60}
// 直接调用未导出的方法
config.process()
// 调用导出的函数
ProcessData()
}
关键点:
- 同一个包内的文件不需要相互导入
- 以小写字母开头的标识符在同一包内完全可见
- 只有需要被外部包访问的标识符才需要以大写字母开头
错误示例(不要这样做):
package core
// 错误:不需要导入自己的包
import core "imc/core" // 这是错误的
func SomeFunction() {
// 不需要这样使用
}
在您的示例中,core/utils/utils.go和core/strategies/fifo.go都属于core包,因此它们可以直接访问彼此的所有标识符(无论是否导出),无需任何导入语句。

