记录项目迁移到 go mod 里面的一些坑
下面聊的一些坑都是在模拟环境上说的,除非想要 n+1,就不露真实目录结构了。一开始项目的目录结构是 src 风格,和现在的 github 风格很不一样,记录下迁移遇到的问题。
模拟环境
目录结构
.
└── src
├── main.go
└── nocode
└── nocode.go
main.go 内容
package main
import (
"fmt"
"nocode"
)
func main() {
nocode.NoCode()
fmt.Println("vim-go")
}
nocode.go
package nocode
import (
"fmt"
)
func NoCode() {
fmt.Printf("no code\n")
}
迁移过程
- 直接编译看下错误
src/main.go:5:2: cannot find package "nocode" in any of:
/home/guo/go-version/go1.13.1/src/nocode (from $GOROOT)
/home/guo/go/src/nocode (from $GOPATH)
- 先构造 go.mod(第一步)
go mod init main
- go build src/main.go
build command-line-arguments: cannot load nocode: malformed module path "nocode": missing dot in first path element
- 需要解决本地包,修改 go.mod 文件(使用 replace 指令)
module main
replace nocode => ./src/nocode
go 1.13
- go run src/main.go
go: nocode: parsing src/nocode/go.mod: open /home/guo/talk_go_mod/src/nocode/go.mod: no such file or directory
-
cd src/nocode/ && go mod init nocode
-
go run src/main.go
no code
vim-go
重点总结
- 使用 replace 指令 重定向本地包的位置
- 本地包没有 go.mod 会报错