go mod go官方的module管理工具
用法:
go mod initexport GO111MODULE=on
go mod initpackage testgo get github.com/xxx/test
版本
go get github.com/xx/app
require github.com/coastroad/test v0.0.0-20190216094021-0555a706efff // indirect
v0.0.0-20190216094-55a706efff
module github.com/xxx/test/v2
也就是说你的包的名字还是test但是因为版本是v2.X 所以要在包名后面加入大版本号 /v2(一定是v+数字 比如 v2 v3 v4 v5不能改变写法也不能用v2.3这种写法)
然后 调用的时候是这样的
package dd import( "github.com/xxx/test/v2" ) func dd(){ test.Test() }
也就是说使用imprt的时候 也要加 v2大版本号,但是在函数内调用的时候 还是test 比如这个时候你的版本是v2.45
那么 你的mod文件里最后的标注就是v2.45
就算不是v2.45 不通过打tag的方式来发布 比如还是默认的数字,那么只要你在mod中指定是v2 你的版本大号就是v2
在import中引入还是需要加上v2 只是在mod中 显示的信息是你的最后编辑时间。
还有种写法是
module github.com/xx/app.v2
这种写法也是类似,只是官方不推荐这种写法。
综上:
// 你的包 go.mod 文件写法 : module github.com/xxx/test/v2 别人用你的包的写法 import( "github.com/xxx/test/v2" ) func dd(){ test.Test() }
包的存放位置
再使用了go mod后你的go path将没有用了,但是存放的包的位置还是在 老的go path 更明确来说是在 $gopath/src路径
这个路径会有两个文件 pkg bin 前面这个包是存放的非可执行的包 后面的bin放置的就是可执行的包,你可以把path指向这个bin即可。
go mod tidy
这个命令很有用 首先我们看看它的官方解释 tidy: add missing and remove unused modules
go mod tidy
我的包是可执行的文件,我发布到github上让人使用我的mod该怎么办
github.com/xxx/test
可执行文件的包没有go.mod也可以,你只需要在本地开发的时候有go.mod即可。然后这个go.mod 中的名称不跟package一样也可以
因为别人是不会再引用你的包的了。但是如果你的包有子包,那么你还是应该把你的包go.mod文件里的 module 后面规规矩矩的写例如
module github.com/XXX/add 然后别人引用的时候 import( "gitub.com/xxx/ddd/app" // app 是子包 即可。 )
我无法使用goalng.org/x的包我该怎么办
例如:
你本地的包要引入 golang.org/x/net/html
但是被封了,那么你可以使用github上的镜像包 例如说是 github.com/golang/x/net/html
在你的项目的go.mod 中 加入 replace golang.org/x/net/html => github.com/golang/x/net/html
但是一般你科学上网不就行了吗。。
我该怎么处理我的子包和我的包的关系
-
本地
在本地 比如说你的大包要引用子包的内容你可以go.mod 中使用replace,比如github.com/app/中
要引入 github.com/app/app的东西,你可以 在go.mod 中 用 replace github.com/app/app => ./app 即可
当,你发布的时候你把这个replace删掉即可。(仅限 *Unix系统,就是改变路径而已,win的同学自己看看咋弄就ok了,反正发布的时候要删除)
当我的文件夹的名称跟我的package写的包名不一样怎么办
要记得 一个文件夹(包)内的package 名称必须相同,但是可以不跟文件夹的名称一样,使用的时候其实很不爽就是了
不过也可以用 用法是
比如一个包 它的文件夹是 app 但是 package中的名称是 app1 那么可以这么用
imoirt "github.com/xxx/app" // 这个地方要跟文件夹的名称保持一致 其实就是跟路径保持一致 func dd(){ app1.xxx// 这里要跟真实的package保持一致 你看 得不偿失吧 所以 文件夹的名称要跟package的名称保持一致 }
注意
module github.com/app/appgo get github.com/app/app
:warning:
go help mod
The commands are: download download modules to local cache edit edit go.mod from tools or scripts graph print module requirement graph init initialize new module in current directory tidy add missing and remove unused modules vendor make vendored copy of dependencies verify verify dependencies have expected content why explain why packages or modules are needed