我相当不熟悉开发,尤其是模块。
要体验go模块,请将“ GO111MODULE”设置为“ on”。我在$ GOHOME / src下设置了一个名为“ practice”的目录,并将go库文件放入包名称为“ practice”的文件中。另外,在$ GOHOME / src下,我添加了另一个名为“ hello”的目录,其中包含一个hello.go文件,该文件导入了“ practice”包。但是,当我执行“ go run hello / hello.go”时,编译器会显示以下消息:
无法加载实践:格式错误的模块路径“实践”:第一个路径元素中缺少点
要解决此问题,一种方法是将软件包实际放入CVS存储库(类似“ github.com/username/practice”)。但是,这不是理想的。如果我对练习包进行了任何更改,则看不到影响,直到将更改推送到github.com并放手从github.com下载(并将其保存到$ GOHOME / pkg / mod / github中) / username / practice,其中go将读取代码)。
对我的原始问题的答复指出,我可以使用replace指令,如this post中所述。尽管它确实有效,但我仍然感到有些不便。
在现实生活中的开发环境中,可能会有很多git存储库,每个存储库都包含一个或多个项目(库或二进制目标)。单个更改列表可能涉及不同存储库中的文件,因此我希望能够在提交更改之前在本地测试更改。这意味着我将必须对所有模块使用replace指令(否则,go将在$ GOPATH / pkc / go中查找文件,直到我提交更改后,该文件才会反映出来)。
但是,go.mod文件也被检入到存储库中(它是代码的一部分)。这意味着替换指令中使用的路径对于每个人都必须相同。显然,它不是绝对路径。即使是相对路径,也要求每个人的工作区文件结构都相同。
好吧,在我以前的公司(包括Google)中,我们只使用一个源代码存储库,因此可以保证(例如,用于头文件和目标位置的每个路径都相对于google3目录)。但是现在,许多公司倾向于将源代码切割成可能相互依赖的多个存储库。因此,我们必须强制所有开发人员必须以某种方式安排目录才能使其与go模块一起使用?