我试图让 Go 模块在不涉及远程存储库的情况下工作。
src是一个本地目录,其中包含我所有的项目,以及用 Go 以外的其他语言编写的项目。为简单起见,我只显示了与我的问题相关的两个目录:
src
??? client
? ??? go.mod
? ??? main.go
??? lib
??? go.mod
??? lib.go
Run Code Online (Sandbox Code Playgroud)
这些go.mod文件是通过go mod init client在src/client和go mod init libin 中运行命令来创建的src/lib。
源代码/客户端/main.go:
package main
import "lib"
func main() {
lib.Hello()
}
Run Code Online (Sandbox Code Playgroud)
src/lib/lib.go:
package lib
import "fmt"
func Hello() {
fmt.Println("Hello World")
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是在我的 main.go 中使用库 lib.go,但无论我在导入路径中放什么,都会显示此错误:
main.go:3:8: package lib is not in GOROOT (/usr/lib/go/src/lib)
Run Code Online (Sandbox Code Playgroud)
转到版本是 go1.14.3
如何从本地文件夹正确导入 Go 代码?
您可以使用replace指令。
项目结构:
root
??? client
? ??? go.mod
? ??? main.go
??? lib
??? go.mod
??? lib.go
Run Code Online (Sandbox Code Playgroud)
go.mod的root/lib模块:
module github.com/owner/root/lib
go 1.13
Run Code Online (Sandbox Code Playgroud)
go.mod的root/client模块:
module github.com/owner/root/client
go 1.13
require github.com/owner/root/lib v0.0.0
replace github.com/owner/root/lib => ../lib
Run Code Online (Sandbox Code Playgroud)
这太可怕了,如果没有 VCS,您真的必须为每次导入都这样做吗?
否。replace指令替换模块特定版本的内容,并包含属于替代模块的包。
root
??? client
? ??? go.mod
? ??? main.go
??? lib
??? utils
? ??? util.go
??? libs
? ??? lib.go
??? go.mod
Run Code Online (Sandbox Code Playgroud)
package main
import (
"github.com/owner/root/lib/utils"
"github.com/owner/root/lib/libs"
)
func main() {
//...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1877 次 |
| 最近记录: |