go mod:找不到提供包的模块

新手上路,请多包涵

我正在创建一个版本为 1.12.1 的 go 项目。如果我运行 GOPATH="$(pwd)/vendor:$(pwd)" GOBIN="$(pwd)/bin" go clean 我收到以下错误:

 can't load package: package github.com/marvincaspar/go-example: unknown import path "github.com/marvincaspar/go-example": cannot find module providing package github.com/marvincaspar/go-example

这仅适用于 go cleango rungo build 工作正常。

这是主要代码的文件夹结构:

 .
├── Makefile
├── cmd
│   └── server
│       └── main.go
├── go.mod
├── go.sum
└── pkg
    └── storage
        └── mysql
            └── storage.go

这是 go.mod 文件的样子:

 module github.com/marvincaspar/go-example
go 1.12

require (
    github.com/go-sql-driver/mysql v1.4.1
)

最后是 main.go 文件:

 package main

import (
    "fmt"
    "os"

    "github.com/marvincaspar/go-example/pkg/storage/mysql"
)

func main() {
    if err := run(); err != nil {
        fmt.Fprintf(os.Stderr, "%v", err)
        os.Exit(1)
    }
}

func run() error {
    // init storage
    s := mysql.NewStorage()
    // do some other stuff...
}

知道我做错了什么吗?

原文由 Marvin Caspar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

Go build/install 试图在你的根目录中找到主包,它不会检查你的子目录(cmd/server)。因此,您收到未找到包的错误。

要正确构建代码,您可以运行:

 go build github.com/marvincaspar/go-example/cmd/server

同样,要运行您的项目,您必须提供模块名称/主包路径:

 go run github.com/marvincaspar/go-example/cmd/server

Go clean 可以通过提供 module-name/path-with-main-package 以相同的方式执行

go clean github.com/marvincaspar/go-example/cmd/server

或者

GOPATH="$(pwd)/vendor:$(pwd)" GOBIN="$(pwd)/bin" go clean github.com/marvincaspar/go-example/cmd/server

但是,根据 https://blog.learngoprogramming.com/code-organization-tips-with-packages-d30de0d11f46 ,只需将源文件放入项目的根目录即可。那样比较好。

原文由 ShailyAggarwal 发布,翻译遵循 CC BY-SA 4.0 许可协议

我通常使用 go get 和 go mod tidy。它一直有效。

 go mod tidy

原文由 BITSSANDESH 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题