我在 Go 中有一个简短的程序,其中包含以下文件。 程序目录结构:
myprogram/
main.go
server.go
routines.go
structs.go
这些不同的文件包含不同的功能。 structs.go
文件包含定义的结构类型列表,并在我的程序的多个文件中使用。我现在要做的是将我的程序拆分成包,如下例所示:
main/
main.go // the main program
server/
server.go // a package imported in main
routines/
routines.go // a package imported in main
我的问题是,我不知道将 structs.go
放在哪里,因为它包含在多个包中使用的结构,如“main.go”代码中。
如何有效地分享这个 structs.go
文件?我是否应该将它(通过文件的符号链接(symbolic link))包含在我定义的每个包中,即 server
和 routines
以及 main 中?
我的方法可能很笨拙,因为我是 Go 的初学者,而且一般是编程。
最佳答案
不要跨包链接文件,这是不好的做法。一方面,代码将被复制。另一方面,标识符将重复,表示相同的实体(例如类型或函数),但它们将是不同的。例如。如果链接和 structs.go
将包含 type Response
定义,您将有 2 个不同的类型 server.Response
和 routines.Response
只会造成更多困惑。
一种解决方案是将 structs.go
放入自己的包中,例如model
,所有其他依赖它的包都可以导入它(例如你的main
、server
和routines
)。
在一个理论示例中:如果包 A
导入包 B
和 structs.go
两者都需要,那么它也可能是添加到包B
。如果有一个包 C
只需要 structs.go
,那么再次创建自己的包 model
会更明智(所以 package C
不需要导入/了解包 B
,只需要新的 model
包。
此外,如果没有其他人会使用您的包并且它不是太复杂,那么将它组织成多个包可能不值得。
关于go - 有没有一种在 golang 包之间共享结构的有效方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35576337/