有没有一种在 golang 包之间共享结构的有效方法?
Is there an efficient way to share structure between golang packages?
我在 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
文件?我是否应该将它(通过文件的符号链接)包含在我定义的每个包中,即 server
和 routines
以及 main 中?
我的方法可能很笨拙,因为我是 Go 的初学者,而且通常是编程方面的初学者。
不要 link 跨包文件,这是不好的做法。其一,代码将被复制。另一方面,标识符将重复意味着表示相同的实体(例如类型或功能),但它们将是不同的。例如。如果 linked 和 structs.go
将包含一个 type Response
定义,您将有 2 种不同的类型 server.Response
和 routines.Response
只会更加混乱。
一个解决方案是将 structs.go
放入它自己的包中,例如model
,所有其他依赖它的包都可以导入它(例如你的 main
、server
和 routines
)。
理论上的例子:如果包 A
导入包 B
和 structs.go
两者都需要,那么它也可以添加到包 B
中。如果有一个包 C
只需要 structs.go
,那么再一次创建它自己的包 model
会更明智(所以包 C
不需要导入 /知道包 B
,只知道新的 model
包)。
此外,如果没有其他人会使用您的包并且它不是太复杂,那么将它组织成多个包可能不值得麻烦。
可以只在一个包中定义一个类型,然后以这种方式在其他包中使用它:
package one
type A struct{ B int }
变体 1:
package two
. import "one"
var name A
变体 2:
package two
import "one"
type A = one.A
var name A
我更喜欢变体 2。
我在 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
文件?我是否应该将它(通过文件的符号链接)包含在我定义的每个包中,即 server
和 routines
以及 main 中?
我的方法可能很笨拙,因为我是 Go 的初学者,而且通常是编程方面的初学者。
不要 link 跨包文件,这是不好的做法。其一,代码将被复制。另一方面,标识符将重复意味着表示相同的实体(例如类型或功能),但它们将是不同的。例如。如果 linked 和 structs.go
将包含一个 type Response
定义,您将有 2 种不同的类型 server.Response
和 routines.Response
只会更加混乱。
一个解决方案是将 structs.go
放入它自己的包中,例如model
,所有其他依赖它的包都可以导入它(例如你的 main
、server
和 routines
)。
理论上的例子:如果包 A
导入包 B
和 structs.go
两者都需要,那么它也可以添加到包 B
中。如果有一个包 C
只需要 structs.go
,那么再一次创建它自己的包 model
会更明智(所以包 C
不需要导入 /知道包 B
,只知道新的 model
包)。
此外,如果没有其他人会使用您的包并且它不是太复杂,那么将它组织成多个包可能不值得麻烦。
可以只在一个包中定义一个类型,然后以这种方式在其他包中使用它:
package one
type A struct{ B int }
变体 1:
package two
. import "one"
var name A
变体 2:
package two
import "one"
type A = one.A
var name A
我更喜欢变体 2。