【问题标题】:golang cannot find module for local path [duplicate]golang找不到本地路径的模块[重复]
【发布时间】:2020-04-13 16:18:29
【问题描述】:

我想推出一些 API,从主包到单独的包中:

myapp/
    main.go
    myapi/
        myapi.go

main.go我有

package main

import "./myapi"

...

myapi.go 的开头是:

package myapi

...

当我尝试运行 main 时,它似乎找不到我的 myapi #include。它给了我以下错误:

D:\go\myapp> go run .
build _/D_/go/myapp/myapi: cannot find module for path _/D_/go/myapp/myapi

我来自 C/C++ 世界,如何从 golang 的子文件夹中包含它非常不明显。你能帮我解决这个问题吗?

【问题讨论】:

  • 您可以使用一个模块文件来定义您的模块及其子模块的名称
  • @xarantolus 怎么样?鉴于上述示例程序,我应该执行哪些操作?
  • @xakepp35:什么是无意义的?按预期使用 Go?
  • @xakepp35 你应该在你的包根目录(myapp)中运行go mod init your.domain/somename,它将创建一个名为go.mod的文件。现在您可以导入 your.domain/somename/myapi 来访问您的包。当您将根文件夹移动到其他位置时,您仍然可以构建它。你甚至可以通过vendoring your dependencies 在另一台电脑上下载软件包而不用构建它

标签: go import package


【解决方案1】:

Go 使用称为模块路径的东西。这些是标识您的包的路径。它们不一定与文件系统相关。

模块路径的示例是github.com/hajimehoshi/ebiten

如果你使用 Go 模块,这也是 Go 自动下载它的路径。

如果您使用 $GOPATH,则到模块源的路径将是 go/src/github.com/hajimehoshi/ebiten

使用go mod init <module path> 使用新的模块路径初始化您的模块。通常这将是您的 GitHub 存储库,没有 https://。这将允许您和其他人的代码都可以使用该模块路径进行访问。然后应该可以通过import "github.com/username/repo/myapi" 访问myapi

如果您仍希望使用旧的 $GOPATH 方法,只需将您的代码放在 go/src/<module path> 中即可。访问myapi的方法是等价的。

阅读Using Go ModulesHow to write Go code 了解更多信息。

【讨论】:

  • 感谢您的解释,我支持您的努力。对我来说,作为一个有 20 年编程经验的人,golang 就像 C 一样,受到了一些影响。就像 Borland 的一个(目前是 Embarcadero)模块体验一样。还有 C.. 但这确实是一件好事(如果您曾经了解过 Delphi 7 或后来的 RAD 之类的东西)——这让我们不必为全局的东西而烦恼。就像您可以定义一些本地模块,就在您的子文件夹中,并轻松使用它。
  • 如果您在核战争中幸存下来,并且正在使用 Go,那么您仍然会按照设计使用 Go。
猜你喜欢
  • 2018-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
  • 2023-04-01
  • 2018-05-16
相关资源
最近更新 更多