首页 > 解决方案 > 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

我错过了什么?

标签: go

解决方案


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

在操场上跑


推荐阅读