作者回复: 问题1: 像下面代码这样的包导入方式被称为“空导入”: import _ "foo" 空导入也是导入,意味着我们将依赖foo这个路径下的包。但由于是空导入,我们并没有显式使用这个包中的任何语法元素。那么空导入的意义是什么呢?由于依赖foo包,程序初始化的时候会沿着包的依赖链初始化foo包,我们在08里会讲到包的初始化会按照常量->变量->init函数的次序进行。通常实践中空导入意味着期望依赖包的init函数得到执行,这个init函数中有我们需要的逻辑。 问题2: 通常我们直接使用go module(非vendor)模式即可满足大部分需求。如果是那种开发环境受限,因无法访问外部代理而无法通过go命令自动解决依赖和下载依赖的环境下,我们通过vendor来辅助解决。
作者回复: 感谢提供不同平台的差异。
作者回复: 源码中必须要改,改为xxx/v2。这个要么手动改,要么使用IDE/编辑器提供的工具进行统一替换。
作者回复: 如果采用vendor模式,建议与项目代码同等对待,一并上传的代码仓库中。其他地方直接下载使用。
作者回复: 1. ...表示gotests下面的所有的包 2. go get会下载gotests下面所有的包,如果gotests是一个可执行文件的项目(带有main包main函数). go get会在下载包之后构建这个项目并把可执行文件放入$GOPATH/bin下。
作者回复: 目前私有代理做的比较好的有goproxy.io、goproxy.cn、athen等。我在后面的加餐中会聊到这个话题。
作者回复: 这个操作我觉得没啥最佳实践,我一般直接用vim打开go.mod文件,然后改就是了:)。
作者回复: 欢迎来到go世界。
作者回复: 👍。嗯嗯,尽量按顺序看。
作者回复: 一周三篇,已经很快了:)。写稿不易,欢迎继续、持续支持!