有没有一种有效的方法来共享golang包之间的结构?

Eli*_*Lie 13 packages structure go

我在Go中有一个简短的程序,其中包含以下文件.程序目录结构:

myprogram/
    main.go
    server.go
    routines.go
    structs.go
Run Code Online (Sandbox Code Playgroud)

这些不同的文件包含不同的功能 该structs.go文件包含一个定义的结构类型列表,并在我的程序的几个文件中使用.我想要做的,现在是将我的程序拆分为包,如下例所示:

main/
    main.go // the main program
server/
    server.go // a package imported in main
routines/
    routines.go // a package imported in main
Run Code Online (Sandbox Code Playgroud)

我的问题是,我不知道放在哪里,structs.go因为它包含在几个包中使用的结构,如'main.go'代码.

如何有效地分享这个structs.go文件?我应该包括它(通过一个符号链接到文件)在每个I中定义的包,即,serverroutines以及在主?

我的方法可能很尴尬,因为我是Go的初学者,一般是编程.

icz*_*cza 13

不要跨包来链接文件,这是不好的做法.首先,代码将被复制.另一方面,标识符将被复制,意味着表示相同的实体(例如类型或功能),但它们将是不同的.例如,如果链接并且structs.go将包含type Response定义,您将有2种不同的类型server.Response并且routines.Response给出更多的混淆.

一种解决方案是放入structs.go自己的包中,例如model,依赖它的所有其他包可以导入它(例如你的main,serverroutines).

在一个理论示例中:如果包A导入包B并且structs.go两者都需要,那么它也可以添加到包中B.如果C只需要一个软件包structs.go,那么创建自己的软件包会更明智model(因此软件包C不需要导入/了解软件包B,只需要新model软件包).

此外,如果没有其他人将使用您的包,并且它不是太复杂,可能不值得麻烦将其组织到多个包中.

  • 据我所知(并且在 IRC 上被告知),go 不鼓励创建模型包。请参阅:https://medium.com/@benbjohnson/standard-package-layout-7cdbc8391fc1 和 https://rakyll.org/style-packages/ 仅举两个示例 (4认同)