【问题标题】:"import cycle not allowed" with go installgo install “不允许导入周期”
【发布时间】:2018-10-12 00:58:06
【问题描述】:

伙计们-我无法理解这一点:

我的代码布局:

src/rtagent/rtagent.go(有主包)

src/simplerouter/simplerouter.go(有包simpleouter)

src/p4/p4runtime.pb.go(有包p4)

rtagent.go:

package main
import (
    "fmt"
    "golang.org/x/net/context"
    "google.golang.org/grpc"
    "google.golang.org/grpc/reflection"
    "io"
    "log"
    "net"
    "p4"
    "simplerouter"
    p4_config "p4/config"
)

simplerouter.go

package simplerouter
import (
    "encoding/binary"
    "errors"
    "fmt"
    "p4"
    "p4InfoUtils"
    "strings"
    "unsafe"
)

p4runtime.pb.go

package p4
import proto "github.com/golang/protobuf/proto"
import fmt "fmt"
import math "math"
import google_protobuf "github.com/golang/protobuf/ptypes/any"
import google_rpc "google.golang.org/genproto/googleapis/rpc/status"
import p4_config "p4/config"
import p41 "p4"
import (
    context "golang.org/x/net/context"
    grpc "google.golang.org/grpc"
)

我收到此错误:

go install rtagent
import cycle not allowed
package rtagent
        imports p4
        imports p4

有人可以帮忙吗?

【问题讨论】:

  • @aristofanio-garcia,添加了信息
  • 不要使用本地导入。死的简单。阅读如何编写 Go 代码和 stick to it word for _word。并停止重命名您的导入。
  • 请使用gofmt。您的代码很难阅读——尤其是由于混合了导入样式。
  • 我应该提到,p4runtime.pb.go 是 google protobuf 编译器生成的代码。这是为我从开源项目中获取的 .proto 文件生成的。我还在 .proto 文件中发现了这个问题。基本上,有 3 个 .proto 文件。 1.proto -> 包 a 2.proto,3.proto -> 包 b 1.proto 导入 2.proto,3.proto 导入 1.proto。这会导致循环。我已经针对该项目提交了一个错误以修复此循环。谢谢大家。

标签: go package cycle


【解决方案1】:

错误信息几乎说明了一切:

rtagent 导入 p4 进而导入 p4(本身)。这是不允许的。

您的代码也很明显:

package p4
// <snip>
import p41 "p4"  // <-- importing itself

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 2023-03-13
    • 1970-01-01
    相关资源
    最近更新 更多