【发布时间】:2019-08-21 21:31:26
【问题描述】:
在$GOPATH 之外使用 Go 模块(go 版本 >= 1.11)时,我找不到将 main.go 中的一些代码分解到本地包中的方法。
我没有导入任何需要包含在go.mod中的外部依赖项,我只是想在本地组织这个Go模块的源代码。
文件main.go:
package main
// this import does not work
import "./stuff"
func main() {
stuff.PrintBaz()
}
文件./stuff/bar.go(伪装成本地包):
package stuff
import "log"
type Bar struct {
Baz int
}
func PrintBaz() {
baz := Bar{42}
log.Printf("Bar struct: %v", baz)
}
文件go.mod(命令go mod init foo):
module foo
go 1.12
执行go run main.go时:
- 如果我
import "./stuff",那么我看到build command-line-arguments: cannot find module for path _/home/<PATH_TO>/fooprj/stuff。 - 如果我
import "stuff",那么我看到build command-line-arguments: cannot load stuff: cannot find module providing package stuff。 - 如果我
import stuff "./stuff"带有包别名,那么我会再次看到:build command-line-arguments: cannot find module for path _/home/<PATH_TO>/fooprj/stuff。
我找不到让本地包与 go 模块一起使用的方法。
- 上面的代码有什么问题?
- 如何将本地包导入使用 Go 模块定义的项目中的其他 Go 代码(文件
go.mod)?
【问题讨论】:
-
如果你想在同一个项目中开发多个模块,你将不得不等待Go 1.18/1.19,以及Go workspace mode的概念。
标签: go go-modules go-packages