golang的包名在不同的地方作用不同,用途不同。 在我们通过pkg.go.dev发布自己的包的时候,了解这些包名和他们的用途就很有必要了。 下面我们以go语言中的pkg库 github.com/tekintian/strutils为例说明各种名称的区别和用途。
如何在pkg.go.dev发布golang软件包
要在pkg.go.dev发布自己的软件包,首先需要创建一个git仓库,然后通过 https://pkg.go.dev/{go软件包仓库地址} 访问后根据提示即可将你的软件包提交到golang的pkg公共仓库。
示例: 将git仓库https://github.com/tekintian/strutils发布到golang公共pkg仓库, 则pkg的发布地址为https://pkg.go.dev/github.com/tekintian/strutils访问后即可根据提示将git仓库的相关软件包发布到pkg仓库。
pkg包名
上面的 “github.com/tekintian/strutils” 就是我们要发布到 golang pkg仓库的pkg包名。 这个包名就是我们在go项目中安装的包名,即 go get github.com/tekintian/strutils
package包名
这个包名就是我们在每个xxx.go文件里面的包名, 他一般为当前项目或者文件夹的名称, 同一个文件夹下面的包名必须一致(xxx_test测试包名除外)。 注意这个package名称只能由字母数字和下划线组成,不能有其他的字符,如 - 是不被允许的。
这个包名也是我们发布pkg包后第三方调用当前库中的包名, 如:
import "github.com/tekintian/strutils" // 这里的strutils就是git仓库的名称
strutils.SnakeStr("UserName") // 调用pkg库里面的函数 这里的strutils 是项目中的package包名
strutils git仓库名称 和 strutils package包名 他们可以不一样。 git仓库名称只影响import导入时的包名,不会影响调用pkg包中的函数的名称,即不影响 strutils.xxx 名称 .
import包名
import包名 就是在第三方xxx.go文件里面调用的包名,这里的包名和pkg里面的包名一致。
git库名
这个名称就是你的git仓库的名称。 这个名称和pkg包名是一致的
go.mod module模块名称
这个名称就是项目的名称,这个名称非常重要,他是整个项目中的跟包名。
import导入包别名
所谓的别名, 即给导入的包起的名称, 通过它可直接调用包中的函数。 别名对应的是项目跟目录中的package包名, 别名在同一个项目中导入多个第三方项目,且第三方项目中的package包名相同时非常有用,他可以避免导入别名冲突问题。
pkg包名和package包名不一致是调用方法
如果上面的git仓库,pkg名,module名称为 go-str-utils 【即 github.com/tekintian/go-str-utils 】, 而package包名是 strutils , 则在导入时的pkg包名就是 import "github.com/tekintian/go-str-utils" 而调用包中的函数时使用的名称仍然是 strutils.Xxx() 。