【发布时间】:2021-05-15 02:29:13
【问题描述】:
我有一个具有这种结构的 Go 项目
src/
main.go (package main.go)
www/
api.go (package apictrl)
url_mapping.go (package apictrl)
core/
model.go (package mlsnd)
当我使用 Visual Studio Code 和 WSL Debian 进行编码时,我在 main.go 文件中写入 apictrl.StartRouter() 时收到错误 undefined: apictrl。
我尝试了以下方法:
-
import ( "../www" ) -
import ( "../www/apictrl" ) -
import ( "../apictrl" ) -
import ( "/mnt/c/Users/myusername/path/toproject/src/apictrl" ) -
import ( "/mnt/c/Users/myusername/path/toproject/src/www/apictrl" ) -
import ( "/mnt/c/Users/myusername/path/toproject/src/www" )
正如我在这篇帖子中看到的 Import package & type 但它们都不起作用。
【问题讨论】:
-
您的每一个导入示例都是无效的。
../www是无效的导入路径。 Go does not support relative imports。以/mnt开头的路径不起作用,因为 Go 需要一个以主机名开头的导入路径,而不是文件路径。 -
关于你的问题的标题,这似乎是一个红鲱鱼。包的名称与文件名完全无关。按照惯例,包的名称与包含它的目录的名称相同,但这不是硬性规定。
-
GitHub/GitLab 是入门的简单方法。但是您可以在任何地方托管它 - 或不去任何地方。如果您无处托管它,您将只能在同一个项目中使用它(在许多情况下完全可以),但您仍然需要在您的
go.mod中给它一个适当的名称。如果您确定永远不会在某个地方托管它,您可以使用像local.local这样的主机名。 -
"请注意,您无需将代码发布到远程存储库即可构建它。模块可以在本地定义而不属于存储库。但是,组织是一个好习惯你的代码就像你有一天会发布一样。” “如何编写 Go 代码”的第一段之一。真的,读它。
标签: go visual-studio-code package windows-subsystem-for-linux