我是Golang初学者,正在努力使用外部包中的函数
在这里,我有源代码,如下所示
-samplego
--pkg
--src
---github.com
----pkg1
-----a.go
-----pkg2
-------b.go
在 b.go 中,我想使用 a.go 中的函数,但编译器告诉我,即使我将函数声明为 public(第一个字符为大写字母(,该函数也是未定义的。
我想知道我是否必须在使用之前从 a.go 导入任何东西,但我想我会得到循环导入,因为在 a.go 中也使用 b.go 的功能。
谢谢。
也许,a.go 和 pkg2 是平面的,所以,你为什么不改变你的文件视图,比如:
-samplego
--pkg
--src
---github.com
----pkg1
-----a.go
-----b.go
如果你想保持你的文件结构,你应该使用mod,等我一段时间。
-samplego
--pkg
--src
---github.com
----pkg1
-----a.go
-----pkg2
-------b.go
命令如下:bash
cd $(SAMPLEGO_PATH) // change path to samplego exists
go mod init samplego
在 b.go 中,导入 "samplego/src/github.com/pkg1",然后通过 pkg1.function 从 a.go 导入函数; 在 a.go 中,导入 "samplego/src/github.com/pkg1/pkg2",然后通过 pkg2.function 从 b.go 导入函数;
不幸的是,在Go2之前不允许循环依赖。您正在尝试执行的操作可以使用当前的 Go 版本进行。您可以重构代码以创建包含必须导出的数据结构和方法的包 C。 请记住,您需要使用go mod init YOUR_MODEL_NAME
,然后您可以使用import YOUR_MODEL_NAME/package_name
从另一个文件调用该方法(请记住必须导出(。请记住,每个文件夹只能包含一个包。