go - Golang 包导入周期不允许
问题描述
我有这个简单的项目结构
~/project/
|--my.corp
| |--a.go
|
|--main.go
|--go.mod
a.go 的内容是
package a
// Add is cool
func Add(a int, b int) int {
return a + b
}
main.go 的内容
package main
import (
"fmt"
"my.corp/a"
)
func main() {
fmt.Println("test")
fmt.Println(a.Add(5, 4))
}
go.mod 的内容是
module my.corp/a
go 1.13
但是当我尝试go run main.go
在 ~/project 中使用时,我得到了这个:
import cycle not allowed
package main
imports my.corp/a
imports my.corp/a
我错过了什么?
解决方案
my.corp/a
文件 main.go 被同一目录下的 go.mod 文件声明为在包中。文件 main.go 导入my.corp/a
,包含 main.go 的包。这是一个循环引用。
请注意,包含 a.go 的包的导入路径是my.corp/a/mycorp
.
使用此结构进行修复:
~/project/
|--a
| |--a.go
|
|--main.go
|--go.mod
有了这个 go.mod:
module my.corp
go 1.13
通过此更改,包含 main.go 的包具有导入路径my.corp
,包含 a.go 的包具有导入路径my.corp/a
。
推荐阅读
- docker - Kubernetes:使用 kubeadm 构建集群后,节点/Pods 未使用 kubectl 显示
- http - 为什么我不能在 Wireshark 中过滤 http?
- python - 为什么在将漂亮的数据切片转换为 png 图像时会得到完全黑色的标签?
- c++ - 如何移动变体的值
变成一个变种 ? - django - 尽管有 --schedulers 标志,但 django-celery-beat 的权限被拒绝错误
- opengl - 为什么统一变量在 GLSL 中不起作用?
- swift - 导航栏的标题文本属性不起作用。迅速
- php - 使用 Facebook 登录停止在 Laravel 6 中处理回调方法
- typescript - 如何期望字符串以指定的变量开头
- python - 错误:安装 pyaudio 时命令出错,退出状态为 1