.
├── conf
│ ├── dev.ini
│ └── prod.ini
├── controller
│ ├── dir.go
│ ├── go.mod
│ └── go.sum
├── docs
├── go.mod
├── go.sum
├── main.go
├── pkg
│ ├── config
│ │ ├── config.go
│ │ ├── go.mod
│ │ └── go.sum
│ ├── ecode
│ │ ├── code.go
│ │ ├── ecode.go
│ │ ├── go.mod
│ │ └── msg.go
│ ├── os
│ │ ├── go.mod
│ │ └── path.go
│ └── response
│ ├── go.mod
│ ├── go.sum
│ └── response.go
├── routers
│ ├── go.mod
│ ├── go.sum
│ └── routers.go
一个测试项目的目录,有一些问题想要请教一下:
controller/dir.go
中引入example.com/os
,那么在controller/go.mod
中需要指明replace example.com/os => ../pkg/os
,相应的如果该项目的很多包就需要 replace 多次。1
,现在在main.go
中引入example.com/controller
包,则在go.mod
不仅仅需要replace example.com/controller => ./controller
,还需要replace example.com/os => ./pkg/os
,一旦controller
引入了多个,在此也需要引入多个包,感觉很麻烦,总感觉自己的姿势不对,但是查阅了资料除了将项目移到$GOPATH/src/
或者使用$GOPATH
以外,只能将代码上传到类似github.com
的仓库上然后直接go get
?刚接触 Go,包管理问题确实有被困扰到,想要探究一下究竟是怎么回事 :)
1
bbao 2020-11-10 10:35:04 +08:00
你只需要引用 go.mod 文件里面 module 的命名就行,该包下面的除了 internal 的内容,就都可以引用 了
|
2
bbao 2020-11-10 10:37:33 +08:00
A go.mod
module git.github.com/business/server B go.mod module git.github.com/example/server replace git.github.com/example/server => /project/path |
3
iFurySt OP ```
. ├── conf │ ├── dev.ini │ └── prod.ini ├── controller │ └── dir.go ├── docs ├── go.mod ├── go.sum ├── main.go ├── pkg │ ├── config │ │ └── config.go │ ├── ecode │ │ ├── code.go │ │ ├── ecode.go │ │ └── msg.go │ ├── os │ │ └── path.go │ └── response │ └── response.go ├── routers │ └── routers.go ``` 刚刚尝试了一下,有一个自我认为比较方便的解决办法,`go.mod`中声明为`module example.com/demo`,然后删掉所有子目录里的`go.mod`,现在不管是在哪里使用,只需要使用诸如`import "example.com/demo/os"`,`import "example.com/demo/pkg/config"`这样就很便捷了。希望得到其他人的建议,我再综合一下 |
4
AmrtaShiva 2020-11-10 11:01:37 +08:00
go mod 的本地引用确实挺蛋疼的 目前用的就是 replace 很不方便
|
6
sxfscool 2020-11-11 08:52:31 +08:00
为啥每个文件夹下都要建 go.mod, 把能公用的提出来就行了,不能公用没必要建 go.mod
|