Go 在同一目录下的不同目录中找不到函数
我只有一个包Go 在同一目录下的不同目录中找不到函数,go,Go,我只有一个包main,但我正在构建多个二进制文件: --cmd --program1 --main.go --program2 --main.go --xxx.go --yyy.go --zzz.go 我想在program1/main.go中调用xxx.go中的函数。编者说未声明的名称: 我认为我不应该导入该函数,因为它们都在同一个包main中。要执行所需操作,需要将xxx.go、yyy.go和zzz.go文件放入一个内部包中 这是您应该具有的目录布局: --
main
,但我正在构建多个二进制文件:
--cmd
--program1
--main.go
--program2
--main.go
--xxx.go
--yyy.go
--zzz.go
我想在program1/main.go
中调用xxx.go中的函数。编者说未声明的名称:
我认为我不应该导入该函数,因为它们都在同一个包main
中。要执行所需操作,需要将xxx.go、yyy.go和zzz.go文件放入一个内部包中
这是您应该具有的目录布局:
--cmd
--program1
--main.go
--program2
--main.go
--internal
--shared
--xxx.go
--yyy.go
--zzz.go
在xxx.go、yyy.go和zzz.go文件中,您应该在文件开头共享包
在文件main.go中,您应该有import./../internal/shared“
。如果您有一个具有完全限定模块名的go.mod文件(例如github.com/me/project),那么您可以导入“github.com/me/project/internal/shared”
一旦你有了这个,你可以调用共享包的导出函数,因此从xxx.go文件,从程序的主文件。请注意,当函数名的第一个字母是大写字母时,将导出函数 不同的包路径=不同的包,与包的名称无关。此外,主程序包不打算被导入,如果您需要在与主程序包分开的程序包中声明函数,那么也不要将新的程序包命名为主程序包,您只会遇到问题。只有相邻的文件构成一个程序包,文件位于不同的目录中(无论是否嵌套,都无所谓)是一个独立的包。Go在包上工作,而不是在文件上(这不是100.0%准确,但它是思考这些事情最有用的方式)。因此,您不会从xxx.go调用函数,而是从xxx.go所属的包调用函数。您也不导入函数,而是导入包。您要使用的每个软件包都必须导入。包源存储在文件系统的何处并不重要:如果要使用包-->必须导入它。您显然有三个包,分别位于cmd、cmd/program1和cmd/program2中。