【go】go mod怎么引用同一个项目下面的子目录
怎么在go的子路吗下面引用子包下面的函数
我引用子包出现了 build command-line-arguments: cannot load blog/controller/home: malformed module path "blog/controller/home": missing dot in first path element
相关代码
- 目录结构
srcblog
controller
home
IndexController.go
main.go
- 下面是我的main包里面的代码
package mainimport (
"blog/controller/home" // 这里在goland编辑器编译的时候提升错了
"github.com/kataras/iris"
"github.com/kataras/iris/middleware/logger"
"github.com/kataras/iris/middleware/recover"
"log"
)
func main() {
app := iris.New()
app.Logger().SetLevel("debug")
app.Use(recover.New())
app.Use(logger.New())
app.Get("/", home.Index)
log.Fatal(app.Run(iris.Addr(":8089")))
}
- go.mod
module bloggo 1.13
require (
github.com/CloudyKit/fastprinter v0.0.0-20170127035650-74b38d55f37a // indirect
github.com/ajg/form v1.5.1 // indirect
github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072 // indirect
github.com/google/go-querystring v1.0.0 // indirect
github.com/imkira/go-interpol v1.1.0 // indirect
github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88 // indirect
github.com/kataras/iris v0.0.0-20190916050704-df882273e219
github.com/klauspost/compress v1.8.5 // indirect
github.com/mattn/go-colorable v0.1.4 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.1 // indirect
github.com/moul/http2curl v1.0.0 // indirect
github.com/onsi/ginkgo v1.10.2 // indirect
github.com/onsi/gomega v1.7.0 // indirect
github.com/sergi/go-diff v1.0.0 // indirect
github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect
github.com/smartystreets/goconvey v0.0.0-20190731233626-505e41936337 // indirect
github.com/valyala/fasthttp v1.5.0 // indirect
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
github.com/xeipuuv/gojsonschema v1.1.0 // indirect
github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0 // indirect
github.com/yudai/gojsondiff v1.0.0 // indirect
github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 // indirect
github.com/yudai/pp v2.0.1+incompatible // indirect
)
我的go环境都在同一个目录环境下,为什么还报这个错误呢,我的go版本是 go version go1.13.1 darwin/amd64
提示的错误信息是
go: finding github.com/Shopify/goreferrer latestgo: finding github.com/eknkc/amber latest
go: finding github.com/flosch/pongo2 latest
go: finding github.com/kataras/golog latest
go: finding golang.org/x/crypto latest
go: finding github.com/kataras/pio latest
build command-line-arguments: cannot load blog/controller/home: malformed module path "blog/controller/home": missing dot in first path element
请问各位大佬们我哪里写错了呀
回答
这个是ide的问题,或者是可以配置一下idea,可以在项目的左边点击左侧run project,目前我是直接项目左侧目录单独点击run 或者你们也可以修改一下右上角的配置也可以
我是从java转go,新学的,也遇到了该错误,最后经过试验,给出如下结论:
import语句的含义是 import $module/$directory
如,针对oop项目,
oop ├── employee11
│ └── employee456.go
├── go.mod
└── main.go
go moid init $module
, 后面跟的是module名称,这里就代表生成哪个module,可以不是文件夹名称,这里我用的是myoop
,即go mod init myoop
, 最后 cat go.mod
如下
module myoopgo 1.13
在main.go
中,内容如下, 注意import语句
package mainimport em "myoop/employee11"
func main() {
e := em.Employee {
FirstName: "Sam",
LastName: "Adolf",
TotalLeaves: 30,
LeavesTaken: 20,
}
e.LeavesRemaining()
}
最后附employee456.go
代码,最终希望大家能理解背后的含义:
package employee123import "fmt"
type Employee struct {
FirstName string
LastName string
TotalLeaves int
LeavesTaken int
}
func (e Employee) LeavesRemaining() {
fmt.Printf("%s %s has %d leaves remaining\n", e.FirstName, e.LastName, e.TotalLeaves - e.LeavesTaken)
}
写法是没错的。这个错误很多情况下会发生。
其中之一可能是 GOROOT 设置错误了。go env 确认下 GOROOT 的设置,不正确的话,重新设置下。
其实,近期的 Go 版本中,GOROOT 已经不用设置了,默认会根据 go 命令自动确认 GOROOT 的位置。所以,如果想快速检查是不是这个问题,直接 unset GOROOT 就好了,相当于取消了你的手动配置,使用了默认的 GOROOT。
被人踩了,本来没准备补充,再来解释下吧。
这个错误有很多情况可能发生,如果手动设置了 goroot,并且设置错了,也可能这个错误,还是其他的,比如在 go1.13 上,引入 mod 的名称不是标准的域名也会报错,还有如果引入的 mod 下的包不存在也可能报这个错误,比如 blog/controller/home 不存在的话,可能会报这个错。
上面说的 goroot 只是一种情况,并非是所有情况。反正就是,情况比较多,因为这个错误提示的不够好,Go 的作者也在优化这个提示。
而且,现在看来题主的这个问题,我觉得是 goroot 设置的可能性更大些。其他的回答,之所以解决了问题,可能是 IDE 和手动运行的环境变量不同,所以通过 idea 可以执行。但并没有了解到问题的本质。
你可以测试下 goroot 设置错误的情况,是否会报这个错误,用题目中的目录结构和指定的 Go 版本。
我不知道这算不算误导别人,只是后来没有重新修改这个答案,而且大部分人包这个错误,并非这种情况
另外一个相关回答,可以看看:https://segmentfault.com/q/10...
关于 GOROOT,我曾经写过一篇文章,有一部分提到过这个问题,详细聊聊如何安装 Go,有兴趣可以看看。
IDE设置Go Modules,如下图
请补充go.mod
的文件内容
设置环境变量GO111MODULE=on
应该就可以了
本地包也声明下吧,https://blog.csdn.net/zhouzme...
所以楼主解决了么,答案是什么?
楼主解决问题没,我也遇到了相同的问题,还没解决,所以想寻求答案
遇到同样的问题了,有人解决了吗?
你的 go.mod 是在 blog 目录下吗?
src
blog controller
home
IndexController.go
main.go
go.mod
遇到了同样的问题,等大神分享下方法。
go mod init "当前文件夹名"
举一个例子;go项目目录:
oop ├── server.go
├── go.mod
└── main.go
我在main.go在里面怎么引用server.go这个文件呢?
难道我sever.go的package要和main.go一样?
也不行。
然后我就改成了:
oop ├── server
│ └── server.go
├── go.mod
└── main.go
加个文件夹。
然后go mod init oop;
在main.go里引用server就改成了
import ( server "oop/server"
)
加了个文件夹。
然后在文件夹里,package就要一样了,你在这里可以拆分多个文件,写多个函数。
拜拜┏(^0^)┛
以上是 【go】go mod怎么引用同一个项目下面的子目录 的全部内容, 来源链接: utcz.com/a/106993.html