没有远程存储库的模块?

1 go multi-module go-modules

我试图让 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 clientsrc/clientgo 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 代码?

koz*_*zmo 5

您可以使用replace指令。

项目结构:

root
 ??? client
 ?   ??? go.mod
 ?   ??? main.go
 ??? lib
     ??? go.mod
     ??? lib.go
Run Code Online (Sandbox Code Playgroud)

go.modroot/lib模块:

module github.com/owner/root/lib

go 1.13
Run Code Online (Sandbox Code Playgroud)

go.modroot/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)