go mod 怎么导入本地其它项目的包
http://www.jquerycn.cn/a_41480
https://www.cnblogs.com/wind-zhou/p/12824857.html
此处的 replac稍微介绍下,之所以要是 github.com/model 的格式,是因为在 go1.13 中, go module 名称规范要求路径的第一部分必须满足域名规范,否则可能汇报类似 malformed module path “model”: missing dot in first path element 这样的错误。当然,在 go1.12 不会有报这个错误。建议的话,如果是公司内部使用,可以替换成公司内部域名。
引入上面的replace内容侯,再次运行hellodemo.go,就会自动生成上面的require内容
replace 的第二个参数指定了不从远程获取,而是本地某个路径下的模块替换 github.com/model。
1、model -> mymodel.go
package model
func Hello() string {
return "Hello"
}
2、model -> go.mod
module Demo/model
go 1.14
3、helloDemo -> hellodemo.go
package main
import (
"fmt"
"github.com/model"
)
func main() {
fmt.Println("Hello")
fmt.Println(model.Hello())
}
4、helloDemo -> go.mod
module Demo/modelDemo
go 1.14
require github.com/model v0.0.0-00010101000000-000000000000 // indirect
replace github.com/model => ../model
举个例子
最后我们再举个例子巩固下上面的内容。
我们现在有文件目录结构如下:
├── p1
│ ├── go.mod
│ └── main.go
└── p2
├── go.mod
└── p2.go
p1/main.go中想要导入p2.go中定义的函数。
p2/go.mod内容如下:
module liwenzhou.com/q1mi/p2
go 1.14
p1/main.go中按如下方式导入
import (
"fmt"
"liwenzhou.com/q1mi/p2"
)
func main() {
p2.New()
fmt.Println("main")
}
因为我并没有把liwenzhou.com/q1mi/p2这个包上传到liwenzhou.com这个网站,我们只是想导入本地的包,这个时候就需要用到replace这个指令了。
p1/go.mod内容如下:
module github.com/q1mi/p1
go 1.14
require "liwenzhou.com/q1mi/p2" v0.0.0
replace "liwenzhou.com/q1mi/p2" => "../p2"
此时,我们就可以正常编译p1这个项目了。