golang循环导包问题(import cycle not allowed)解决方案_go import cycle not allowed-csdn博客


本站和网页 https://blog.csdn.net/jacky128256/article/details/116008008 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

golang循环导包问题(import cycle not allowed)解决方案_go import cycle not allowed-CSDN博客
golang循环导包问题(import cycle not allowed)解决方案
最新推荐文章于 2024-01-02 10:17:26 发布
唐墨123 阅读量1.5w 收藏 10 点赞数 6 分类专栏:
golang高性能服务器编程
版权声明:本文为博主原创文章,遵循
CC 4.0 BY
版权协议,转载请附上原文出处链接和本声明。
本文链接:
https://blog.csdn.net/jacky128256/article/details/116008008
版权
专栏收录该内容
94 篇文章
20 订阅
订阅专栏
本文章来为各位介绍关于golang不允许循环import问题(“import cycle not allowed”)问题的解决办法了,这个是语法问题各位可以来看看。
golang语法不允许循环import package,如果检测到import cycle 会在编译时报错,通常import cycle是因为设计错误或包的规划问题。
以下面的例子为例,package a依赖package b,同时package b依赖package a。
源码目录:
├── a
└── A.go
├── b
└── B.go
├── go.mod
├── go.sum
└── main.go
//A.go
package
import
"fmt"
"test/b"
type
struct
func
a A
PrintA
fmt
Println
NewA
:=
new
return
RequireB
NewB
PrintB
//B.go
"test/a"
b B
RequireA
//main.go
main
"<<<---"
//b.RequireA()
就会在编译时报错:
root@helmsman:~/go/src/github.com/test
# go build
test
imports test/a
imports test/b
imports test/a:
cycle not allowed
现在的问题就是:
A depends on B
B depends on A
像mutex死锁一样,陷入了死循环
那么如何避免?
引入interface,例如package i
├── i
└── api.go
├── main.go
└──
3 directories, 7 files
//api.go
Aprinter
interface
"i am PrintA()"
"i am package a, call PrintB()"
"test/i"
"i am PrintB()"
i i
"i am package b, call PrintA()"
o1
现在依赖关系如下:
a depends on b
b depends on I
main depends on a and a
编译执行:
root@helmsman:~/go/src/github.com/filecoin-project/test/t# go build
root@helmsman:~/go/src/github.com/filecoin-project/test/# ./test
i am package a, call PrintB()
i am PrintB() {}
i am package b, call PrintA()
i am PrintA() {}
root@helmsman:~/go/src/github.com/filecoin-project/test/#
优惠劵
关注
点赞
觉得还不错?
一键收藏
打赏
知道了
评论
本文章来为各位介绍关于golang不允许循环import问题(“import cycle not allowed”)问题的解决办法了,这个是语法问题各位可以来看看。golang语法不允许循环import package,如果检测到import cycle 会在编译时报错,通常import cycle是因为设计错误或包的规划问题。以下面的例子为例,package a依赖package b,同时package b依赖package a。源码目录:.├── a│
└── A.go├── b.
复制链接
扫一扫
专栏目录
Go语言:
cycle
not
allowed
报错
解决方案
ZST1158079421的博客
05-15
1万+
go语言中包的
循环
引用解决方法
在go语言中是不支持包与包之间互相引用的
详解
golang
避免
问题
(“
”)
09-20
主要给大家介绍了关于
中不允许
("
")的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
1 条评论
您还未登录,请先
登录
后发表或查看评论
解决的一种思路
解决的一种思路,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
dep:处理
Golang
中的依赖
06-21
深度
处理
Go 不允许发生导入
。 如果检测到任何导入
,则会引发编译时错误。 通常导入周期被认为是一个糟糕的设计。
当包“a”依赖于“b”而“b”又依赖于“a”时,会导致导入
。 下面的 Go 代码说明了导入
的经典
,也就是依赖
package a
"fmt"
"github.com/mantishK/dep/b"
type A struct {
func ( a A ) PrintA () {
fmt . Println ( a )
func NewA () * A {
a := new ( A )
return a
func RequireB () {
o := b . NewB ()
o . PrintB ()
package b
"fmt
go开发之防止
qq_44543317的博客
09-13
766
项目中出现
not allowe
,这是因为代码存在
导入
,即包之间的依赖关系形成了闭环。这通常是由于两个或多个包相互导入而导致的。
报“
”错误的2种解决方法
报"
"错误的2种解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以们下面随着小编来一起看看吧
中解决"
"的2种方法
热门推荐
光年遐想
08-12
6万+
Raft共识算法在很多分布式系统中都被广泛使用,例如Consul、Etcd、Docker Swarm等等
的解决方法
lanyanleio的专栏
10-25
2605
解决
依赖
的多个办法
空山新雨后,天气晚来秋
08-03
1635
的最佳解决办法
go-error-启动错误-
代码能让我保持心静,心静能让我保持动力
09-30
1035
今天在启动 go 项目时报出了下面的错误,导致启动失败:
根据字面意思猜测是导入出现了
,再查一下资料,确实是这个意思,
不允许
导包
, 如果检测到
,会在编译时报错。
仔细检查包之间的导入,去掉
导入就可以了。
比如有两个 package,下面两种情况会出现报错:
"package A"
"package B"
第一种:如果 package A 中已经导入 package B,而本
go 包
引用 (
DisMisPres的博客
01-19
7766
前言
在项目中,我们或多或少都会遇到go的包
引用的
,类似这样
这就让人很头疼,为什么在其他语言中都没见过这种错误呢?这我们就得来谈谈go的设计理念了。
go 为什么不允许
引用
曾经有人提议Go语言作者Rob Pike,想要在Go以后的版本去掉
引入;Rob Pike坚决不同意。Rob Pike觉得假如你两个包之间存在
引入的
,那一定是你在设计之初就没考虑好模块的划分。
加快编译速度
规范框架设计,使项目结构更加清晰明了
定位
如上图所示,想要定位到
引用的具体文件,具体的
LeetCode:Python和
中LeetCode
02-04
开启mod后
报红解决
11-07
报红解决 创建过程有
导致 注意创建完成时 创建go mod
解决无法找到go mod
编译失败:
最新发布
weixin_41692437的博客
01-02
772
将需要都用到的逻辑写在C包里面,然后,A包调用C包,B包调用C包,就不会报错了,这边不在详细说明,需要根据自己的具体业务,去调整代码。在开发
项目的时候,遇到了一个
,在编译的时候,报错。A包调用了B包,但是B包就不能再去调用A包了,这样就会报错。ginchat/models里面的
。而models包中又调用了utils包。utils不在去调用models即可。utils调用了models包。修改一下逻辑,尽量不让
调用。
rpc
唐顺才的博客
04-09
server端:
package main
"log"
"net"
"net/http"
"net/rpc"
"time"
type Req struct {
Data []byte
type Reply struct {
Success string
type DiskQueue int
func (t *DiskQueue
linux 根据pid查看占用端口,根据端口查看pid
07-09
查看pid
root@jacky-VirtualBox:~/test# pidof mongod
639
root@jacky-VirtualBox:~/test#
查看pid占用端口情况
root@jacky-VirtualBox:~/test# netstat -antup|grep 639
tcp
0 127.0.0.1:27017
0.0.0.0:*
LISTEN
639/mongod
centos8 ssh登录设置
02-27
7650
一般来说,从阿里云、centos官方下载的centos镜像都会预先打包好很多工具。像ssh登录这种服务已经做好,不需要用户去关注。但是也有一些小公司打包的镜像是相对纯净的发行包。
如果是已经可以用账户和密码登录,则无需查看本文内容亦可。
ssh(安全外壳协议)是一种加密通讯协议,主要用于安全登录服务。运行模式是c/s结构。
sshd是服务器,运行在linux服务器上面(一般安装后都是开机启动)...
开发环境(ide)比较
09-12
7369
大部分的
ide我都用过一段时间,因此可以比较一下。
LiteIDE 是用qt写的一款开源ide,因为是开源所以比较灵活,后续一定会发扬光大有可能超越vscode。现阶段适合初级选手。
goland 商业级ide工具,跳转,搜索,编译,调试,插件,主题都比较全,而且运行速度极快(通过预先在内存中解析tags来实现快速索引),不足之处是耗内存和cpu,需要收费。
破解版经常失效会让你重新破解(1个月内弹出来几次是正常的,很烦人)。
vscode 与goland几乎一样好用,各种插件,主题等.
package command-line-arguments
s github.com/eknkc/basex
s github.com/eknkc/basex:
.org/x/sys/windows: build constraints exclude all Go files in /root/go/pkg/mod/
.org/x/sys@v0.8.0/windows
06-01
这个错误信息是关于Go语言的包依赖
。其中第一个错误是基于github.com/eknkc/basex的
,这意味着包之间的相互依赖会导致无限
。第二个错误是基于
.org/x/sys/windows的构建约束
,这意味着此包在当前构建环境下不可用。您可能需要检查您的代码并解决这些依赖错误。
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
CSDN认证博客专家
CSDN认证企业博客
码龄6年
暂无认证
221
原创
2万+
周排名
9537
总排名
42万+
访问
等级
4316
积分
272
粉丝
获赞
138
571
私信
热门文章
golang rpc
18235
15136
robox虚拟化
14101
创建raid0矩阵的2个工具举例
12034
10797
分类专栏
linux 应用开发
付费
41篇
网络安全
3篇
94篇
模拟电路
2篇
新能源
1篇
K8s && dockr容器编排
16篇
Qt设计
6篇
c++
7篇
笔记
5篇
gluster
Fastdfs
音视频处理
4篇
python编程
minio
ipfs
最新评论
Android Studio控制台输出中文乱码问题
2401_84006989:
好文!我也写了一篇获取【大厂面试真题解析、核心开发学习笔记、最新全套讲解视频、实战项目源码讲义、学习路线简历模板】的文章
普通网友:
写的很好!我也写了一篇获取【大厂面试真题解析、核心开发学习笔记、最新全套讲解视频、实战项目源码讲义、学习路线简历模板】的文章
设计一个AOA蓝牙精准室内定位系统
kvhiuzdg:
也是蓝牙AOA室内定位,做毕业论文的
唐墨123:
各种型号的蓝牙芯片的sdk有很多,网上都能下载到。
你要做啥产品?
大佬,有木有蓝牙5.1协议的sdk资源呀?求链接~我自己找需要同意啥美国的出口标准
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
最新文章
安卓app之--计算器
《一个电子工程师的12年》
2024年
2023年
2022年
32篇
2021年
77篇
2020年
56篇
2019年
45篇
目录
评论 
被折叠的 
 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
红包个数最小为10个
红包总金额
红包金额最低5元
余额支付
当前余额
3.43
前往充值 >
需支付:
10.00
取消
确定
下一步
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom
发出的红包
打赏作者
你的鼓励将是我创作的最大动力
¥1
¥2
¥4
¥6
¥10
¥20
扫码支付:
获取中
扫码支付
您的余额不足,请更换扫码支付或
充值
实付
使用余额支付
点击重新获取
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值