框架基础
go.mod 用来存储包的require描述。
go.sum 用来存储依赖包特定版本的加密校验和 (go会在go module启用时在本地建立一个go.sum文件)
go命令: go module / go run / go build /go test / go env /go mod tidy
在go 1.16之前的版本中,运行go命令(如go run, go build , go test)时, go会通过以下规则自动解析并下载包:1、添加特定版本的包:要import的包在go.mod文件中有对应的的require描述,则按对应描述的版本下载。 2、添加最新版本的包:要import的包 在go.mod中没有require描述,则按最新版本下载该包,同时将该包加入到go.mod中。
在go 1.16版本中,运行go命令(go run, go build,go test)时,如果import的依赖在go.mod文件中没有,不会再自动下载并修改go.mod和go.sum文件,而会提示错误,并需要手动执行 go get命令下载对应的包。
原因是自动修复的方式不是在任何场景下都适用:如果导入的包在没有提供任何依赖的情况自动添加新依赖,则可能会引起公共依赖包的升级等。
基于以上信息,Go 1.16 中的依赖需要进行如下处理:
通过在代码中修改 import 语句,来修改 go.mod:
可用于添加新模块;
删除掉无用的模块;
将未导入的模块写入 go.mod:
go get [@];
go mod tidy也可以;
手动编辑;
通配符
“…” 是通配符,如果导入路径包含一个或多个“…”通配符,则它是一个模式,每个通配符都可以匹配任何字符串,包括空字符串和包含斜杠的字符串。
1、/… 在pattern的最后可以匹配任意空字符串,因此,net/… 将同时匹配net以及它子目录下的package,比如net/http。
2、任何包含通配符的斜线分隔的pattern都不会参与自动提供的包路径中“vendor”元素的匹配,因此 ./… 不会匹配子目录下的./vendor包或者./mycode/vendor,但是./vendor/… 和./mycode/vendor将会包含。
# 语法基础