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

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


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


这是树:


./|

  |- go.mod

  |-src

     |- main

     |   | - main.go

     |

     |- api

         | - api.go


文件内容:


go.mod


module tatata


go 1.13

main.go


package main


import "fmt"

import "tatata/api"


func main() {

  fmt.Println("Hello world")

  api.Test1()

}

api.go


package api


import "fmt"

func Test1() {

   fmt.Println("Testing API")

}

当我尝试构建时,我发出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 模块和模块中的多个包的构建设置的工作示例?


幕布斯6054654
浏览 208回答 3
3回答

MM们

我可以在一个 go 模块中包含多个包吗?是的当然。如何?你什么都不用做,它就可以工作。(您的问题是:您尝试以错误的名称导入您的 api 包。模块内的导入路径为格式<modulename>/<relative-filepath-from-module-root>。)

潇湘沐

您可以在单个模块中拥有任意数量的包,请看这里:https ://github.com/alessiosavi/GoGPUtils/唯一的限制是每个文件夹只能有一个包。

慕无忌1623718

我发现了问题。该go.mod文件必须位于包含包的文件夹中。就我而言,它位于该文件夹的父级中。工作中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go