Go 导入包名与文件名不同的本地包

Go 导入包名与文件名不同的本地包,go,visual-studio-code,package,windows-subsystem-for-linux,Go,Visual Studio Code,Package,Windows Subsystem For Linux,我有一个这样结构的围棋项目 src/ main.go (package main.go) www/ api.go (package apictrl) url_mapping.go (package apictrl) core/ model.go (package mlsnd) 当我将Visual Studio代码与WSL Debian一起使用来编码时,当我在main.go文件中写入apictrl.StartRouter()

我有一个这样结构的围棋项目

src/
    main.go (package main.go)
    www/
        api.go (package apictrl)
        url_mapping.go (package apictrl)
    core/
        model.go (package mlsnd)
当我将Visual Studio代码与WSL Debian一起使用来编码时,当我在main.go文件中写入apictrl.StartRouter()时,会出现错误undefined:apictrl

我尝试了以下方法:


正如我在这篇文章中看到的,但它们都不起作用。

正如评论所指出的,我找到了解决方案:

首先,我必须重命名所有文件夹,使其具有包含的包的名称

src/
    main/
        main.go (package main)
    apictrl/
        api.go (package apictrl)
    mlsnd/
        model.go (package mlsnd)
在main.go中,我必须使用go.mod(使用
go mod init package.name
创建)中为模块指定的名称导入想要的包


您的每个导入示例都是无效的<代码>。/www是无效的导入路径。以
/mnt
开头的路径不起作用,因为Go需要以主机名而不是文件路径开头的导入路径。请阅读您问题的标题,这似乎是一种误导。包的名称与文件名完全无关。按照惯例,包的名称与包含它的目录的名称相同,但这不是一条硬性规定。GitHub/GitLab是入门的简单方法。但是你可以把它放在任何地方,也可以不放在任何地方。如果您不在任何地方托管它,您只能从同一个项目中使用它(在许多情况下非常好),但是您仍然需要在
go.mod
中为它指定一个合适的名称。如果您确定永远不会在某个地方托管代码,则可以使用类似于
local.local
的主机名。“请注意,在构建代码之前,您不需要将代码发布到远程存储库。模块可以在本地定义,而不属于存储库。但是,组织代码是一个好习惯,就好像您有一天会发布代码一样。”“如何编写Go代码”的前几段之一。真的,读一下。
  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"
  )
src/
    main/
        main.go (package main)
    apictrl/
        api.go (package apictrl)
    mlsnd/
        model.go (package mlsnd)
import (
    "package.name/src/apictrl"
)