我可以在一个 go 模块中包含多个包吗?如何?

Jos*_*ose -1 go go-modules

我有一个名为“tatata”的 Go 模块。它仅在我的机器上开发,因此它不包含模块名称中任何 URL 的任何路径。

如果main我的模块中只有一个包,它可以正常工作。但是,如果我在模块中创建两个包,就会遇到一些问题。

这是树:

./|
  |- go.mod
  |-src
     |- main
     |   | - main.go
     |
     |- api
         | - api.go

Run Code Online (Sandbox Code Playgroud)

文件内容:

go.mod

module tatata

go 1.13
Run Code Online (Sandbox Code Playgroud)

main.go

package main

import "fmt"
import "tatata/api"

func main() {
  fmt.Println("Hello world")
  api.Test1()
}
Run Code Online (Sandbox Code Playgroud)

api.go

package api

import "fmt"
func Test1() {
   fmt.Println("Testing API")
}
Run Code Online (Sandbox Code Playgroud)

当我尝试构建时,我发出go build ./src/main并收到以下错误: build tatata/src/main: cannot load tatata/api: malformed module path "tatata/api": missing dot in first path element

现在,如果我尝试放置一个虚拟点,例如将模块重命名为tatata.com我会收到错误,build tatata.com/src/main: cannot load tatata.com/api: cannot find module providing package tatata.com/api因为显然我的包/模块在该 URL 中不可用。

GOPATH 为空,即未设置。

问题:

a) 什么是正确的方法,即在单个 Go 模块中使用多个包时命名模块和导入?

b) Go 模块的名称中没有点是不可能的吗?!

c) 您能否指出任何具有构建设置的工作示例,其中包含单个 go 模块和模块中的多个包?

Vol*_*ker 6

我可以在一个 go 模块中包含多个包吗?

是的当然。

如何?

你什么都不用做,它就是有效的。

(您的问题是:您尝试以错误的名称导入 api 包。模块内的导入路径的形式为<modulename>/<relative-filepath-from-module-root>。)