【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

相关代码

  • 目录结构

src

blog

controller

home

IndexController.go

main.go

  • 下面是我的main包里面的代码

package main

import (

"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 blog

go 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 latest

go: 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 myoop

go 1.13

main.go中,内容如下, 注意import语句

package main

import em "myoop/employee11"

func main() {

e := em.Employee {

FirstName: "Sam",

LastName: "Adolf",

TotalLeaves: 30,

LeavesTaken: 20,

}

e.LeavesRemaining()

}

最后附employee456.go代码,最终希望大家能理解背后的含义:

package employee123

import "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】go mod怎么引用同一个项目下面的子目录

请补充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

回到顶部