报错package xxx is not in GOROOT or GOPATH

添加链接描述

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这个项目了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值