我对外部Go库的包命名有一些疑问。
如果使用" text
"等通用名称,我感兴趣被认为是一种好习惯?请记住,我不能声明一个"嵌套包"并且我正在构建的库处理文本处理,是否可以使用名为" text
"的包。或者我是否应该将库名称作为包名称?
我正在构建一组库(不同的项目),我想将它们组合在同一个包中。这也有问题吗?我是Go社区的新手,我仍然不确定包装污染是否存在问题(只要我在代码中导入少量包装,我就不会发现问题。)
答案 0 :(得分:7)
该命名主题的引用是" blog: Package names"
它包括:
避免不必要的包名冲突 虽然不同目录中的包可能具有相同的名称,但经常一起使用的包应具有不同的名称。这减少了混淆以及客户端代码中本地重命名的需要。出于同样的原因,请避免使用与io或http等流行标准软件包相同的名称。
同时检查您的package publishing practice,因为这有助于明确您的{" text
"来自其他人的包裹。
如" An Introduction to Programming in Go / Packages":
所示
math
是Go的标准发行版中包的名称,但由于Go包可以是分层的,因此我们可以安全地为我们的包使用相同的名称。 (真正的数学包只是数学,我们的是golang-book/chapter11/math
)当我们导入
math
库时,我们使用其全名(import "golang-book/chapter11/math"
),但在math.go
文件中我们只使用名称的最后一部分({{1} })。当我们从库中引用函数时,我们也只使用短名称数学。如果我们想在同一个程序中使用这两个库,Go允许我们使用别名:
package math
import m "golang-book/chapter11/math" func main() { xs := []float64{1,2,3,4} avg := m.Average(xs) fmt.Println(avg) }
是别名。
mentioned in the comments elithrar Dave Cheney additional tips feature of go get
有一些AlexW:
在其他语言中,通过在其前面添加公司名称(例如
m
)来确保您的包具有唯一的命名空间是很常见的。
如果每个人只编写与他们控制的域相对应的包,则几乎不可能发生冲突。在Go中,惯例是在源代码的导入路径中包含源代码的位置,即
com.sun.misc.Unsafe
这不是语言所必需的,只是here。