我正在尝试导入本地模块,但无法使用go mod
导入它。我最初使用go mod int github.com/AP/Ch2-GOMS
生成项目
注意,我的环境是go1.14
,我使用VSCode作为我的编辑器。
这是我的文件夹结构
Ch2-GOMS
│ ├── go.mod
│ ├── handlers
│ │ └── hello.go
│ └── main.go
我的main.go
代码:
package main
import (
"log"
"net/http"
"os"
"github.com/AP/Ch2-GOMS/handlers" // This gives "could not import github.com/AP/Ch2-GOMS/handlers" lint error
)
func main() {
l := log.New(os.Stdout, "product-api", log.LstdFlags)
hh := handlers.NewHello(l)
sm := http.NewServeMux()
sm.Handle("/", hh)
http.ListenAndServe(":9090", nil)
}
我看不到本地模块(如handlers.NewHello
)的自动完成。go build
生成的go.mod
内容:
module github.com/AP/Ch2-GOMS
go 1.14
我还得到***你既不在模块中也不在GOPATH中。请查看https://github.com/golang/go/wiki/Modules以了解如何设置Go项目。***在VScode中的警告,尽管我已经在~/.bashrc
文件中设置了GO111MODULE=on
5条答案
按热度按时间brgchamk1#
阅读:Ian Lance Taylor的评论(围棋核心团队)
我知道有三种方法:
*方法1(最佳方法):
你一定是做错了什么,这就是为什么它不工作。
*方法2(好方法):
在Ch 2-GOMS/go.mod中添加以下行:
1.方法3(非常快速的黑客方式为不耐烦):
1.关闭Go模块
GO111MODULE=off
1.删除
go.mod
文件原因:在构建期间,编译器首先查找供应商,然后查找GOPATH,然后查找GOROOT。因此,由于符号链接,VSCode的go相关工具也将正常工作,因为它依赖于GOPATH(它们在GOPATH之外不工作)
9rygscc12#
具体步骤如下:
在执行上述步骤之前,您的项目路径应为
沿着,还应有2个与src文件夹平行的文件夹
当你安装任何软件包,它应该是去里面的pkg文件夹,并在做了去国防部整洁,应该有一个文件生成
njthzxwz3#
go mod tidy
单独在根文件夹为我做的zwghvu4y4#
如果要导入本地模块,则需要Map模块路径,以便它可以在本地文件系统中找到代码。
首先使用gomodedit命令将模块的任何导入替换为本地文件
该命令指定example.com/greetings应替换为../greetings,以便查找依赖项。运行该命令后,当前目录中的go.mod文件应在其mod文件中包含replace指令
之后,使用gomodtidy命令同步依赖项,添加那些已导入但当前模块尚未跟踪的代码所需的依赖项
引用自official documentation
ftf50wuq5#
我发现包声明的值必须与文件夹的名称相匹配,否则导入将失败。这是一个低级错误,但我希望它能帮助那些犯了和我一样错误的人。
在我的示例中,我在hello.go中声明的包值是hello,而不是handlers,这导致了我的导入失败。