去库包名称

7 names package go

我对外部Go库的包命名有一些疑问.

如果使用像" text" 这样的通用名称被认为是一种好习惯,我感兴趣吗?考虑到我不能声明"嵌套包"并且我正在构建的库处理文本处理,是否可以使用名为" text" 的包,或者我是否应该将库名称作为包名称?

我正在构建一组库(不同的项目),我想将它们组合在同一个包中.这也有问题吗?我是Go社区的新手,我仍然不确定包装污染是否存在问题(只要我在代码中导入少量包,我就不会发现问题).

Von*_*onC 7

该命名主题的参考是" 博客:包名称 "

这包括:

避免不必要的包名冲突.
虽然不同目录中的包可能具有相同的名称,但经常一起使用的包应具有不同的名称.这减少了混淆以及客户端代码中本地重命名的需要.出于同样的原因,请避免使用与io或http等流行标准软件包相同的名称.

还要检查您的包裹发布实践,因为它有助于消除您text与其他人的歧视.

如" Go/Packages中的编程简介 "中所示:

math是Go的标准发行版中包的名称,但由于Go包可以是分层的,因此我们可以安全地为我们的包使用相同的名称.(真正的数学包只是数学,我们的是golang-book/chapter11/math)

当我们导入我们的math库时,我们使用它的全名(import "golang-book/chapter11/math"),但在math.go文件内部我们只使用名称的最后一部分(package math).

当我们从库中引用函数时,我们也只使用短名称数学.如果我们想在同一个程序中使用这两个库,Go允许我们使用别名:

import m "golang-book/chapter11/math"

func main() {
  xs := []float64{1,2,3,4}
  avg := m.Average(xs)
  fmt.Println(avg)
}
Run Code Online (Sandbox Code Playgroud)

m 是别名.


正如在评论中提到elithrar,戴夫·切尼有一些额外的提示:

在其他语言中,通过在其前面添加公司名称来确保您的包具有唯一的命名空间是很常见的com.sun.misc.Unsafe.
如果每个人只编写与他们控制的域相对应的包,则几乎不可能发生冲突.

在Go中,约定是将源代码的位置包含在包的导入路径中,即

$GOPATH/src/github.com/golang/glog
Run Code Online (Sandbox Code Playgroud)

这不是语言所必需的,它只是一个特征go get.