我正在尝试Go的新模块系统,并且无法访问本地软件包.以下项目位于我的gopath外部桌面上的文件夹中.
我的项目结构如下:
/
- /platform
- platform.go
- main.go
- go.mod
Run Code Online (Sandbox Code Playgroud)
// platform.go
package platform
import "fmt"
func Print() {
fmt.Println("Hi")
}
Run Code Online (Sandbox Code Playgroud)
// main.go
package main
import "platform"
func main() {
platform.Print()
}
Run Code Online (Sandbox Code Playgroud)
go build main.go
告诉我
cannot find module for path platform
Run Code Online (Sandbox Code Playgroud) 我得到我的手脏一起去,虽然我理解和欣赏的原理简单说离开是在建,我想把握原理背后放弃一个内置的包版本的方法,在他们的依赖性取工具go get
和该import
声明.
如果我理解正确,go get
并import
从中获取包HEAD
,他们无法引用分支或标记.虽然有像gopkg.in这样的工具来规避这种限制,官方工具链:
说实话,事情并不那么容易,因为软件包版本控制需要一个策略来处理冲突的传递依赖,例如X
取决于A
和B
,每个依赖于不同的版本C
.
来自Java背景,似乎这种限制带来了一些风险和问题,其中包括:
产品/包装的演变和第三方公共API的破坏是不可避免的,因此版本控制必须是工具链IMHO中的一等公民.
在Git的回购每版的政策是非常低效的:
企业采用可能会受到阻碍,开发团队可能会回避语言,因为:
HEAD
意味着他们无法控制或冻结他们的第三方代表,导致潜在的不可预测的最终产品.HEAD
(不是世界上每个公司都是谷歌:)).虽然我确实理解后一种风险可以 - 并且必须 - 通过持续集成来缓解,但它并不能解决问题的根本原因.
我错过了哪些信息?在人力有限的企业中部署Go时,如何处理包上游变更?
有些包在包语句之后有一个带注释的导入语句。这里有一个例子。
\n. . .\npackage truetype // import "github.com/golang/freetype/truetype"\n. . .\n\n
Run Code Online (Sandbox Code Playgroud)\n它似乎出现在模块内的包上。并非该包的所有文件都有此注释。
\n此评论的目的是什么?为什么它在那里?
\n我在 go 规范中没有\xe2\x80\x99 找到任何关于此的内容。
\n