注意:我已经看到了与此主题相关的其他问题,但没有一个问题可以解决手头的问题.
我正在努力组织我的Go代码.我正在编写一个守护进程,我想在文件之间逻辑分割代码.
假设我有3个文件,main.go:
package main
func main() {
GlobalFunc()
commonFunc()
var svr server.Server
server.OtherFunc()
}
server.go:
package main
type Server struct {
name string
ip string
}
func GlobalFunc() {
}
func (s *Server) OtherFunc() {
commonFunc()
}
和common.go:
package main
func commonFunc() {
}
我希望能够将GlobalFunc()称为server.GlobalFunc(),以显示它是“服务器模块”的一部分.对于上面的例子,这似乎是不可能的.
我可以创建一个子服务器,将server.go放在那里,然后将其更改为包服务器.这里的问题是我似乎无法在主服务器和服务器包之间共享common.go.我理解为什么,它似乎也不是一个好主意.
所以我在这里错过了一些简单的东西并使其变得更加复杂?
谢谢!
最佳答案 我认为您可以在项目中使用一些常用方法,这是公平的假设.与分离服务器的方式相同,您应该使用常用方法分离包.尽管以某种合理的方式思考和组织它可能更好,而不是调用包工具,misc等.
我倾向于将东西分成包,所以它们可以在其他地方使用,而主包只是标记解析和调用库方法,例如server.Run().其他人喜欢将所有内容放入主项目中,如果您认为人们将您的项目用作命令行工具而不是包,那么这可能是正确的.
我会考虑:
deamon/
main.go
server/server.go
somelib/somelib.go -- to be included from main and server
如果您希望项目主要用作包,但仍包含一些命令行实用程序,您可以考虑:
deamon/
deamon.go -- package deamon
deamond/
main.go -- you may include the top level package as anyone else
我们需要记住,在Go中你包含了一个绝对路径的包,所以你可以在项目的任何地方保留你的“常见”东西,或者如果你认为它本身是有用的,只需发布一个单独的独立项目.