gpt4 book ai didi

go - 地道的 Go 代码组织

转载 作者:IT王子 更新时间:2023-10-29 00:46:28 24 4
gpt4 key购买 nike

注意:我看到过与此主题相关的其他问题,但没有一个解决手头的问题。

我正在努力组织我的 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,将 server.go 放在那里,然后将其更改为 package server。这里的问题是我似乎无法在 main 和 server 包之间共享 common.go 。我明白为什么,这似乎也不是一个好主意。

所以我在这里遗漏了一些简单的东西并使它变得更复杂?

谢谢!

最佳答案

我认为可以合理假设您希望在项目中使用一些通用方法。与您分离服务器的方式相同,您应该使用通用方法分离包。尽管以某种逻辑方式思考和组织它可能比调用包 toolsmisc 等更好。

我倾向于将东西拆分成包,这样它们就可以在其他地方使用,而主包将只是标记解析和调用库方法,例如 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 中,您使用绝对路径包含您的包,因此您可以在项目的任何地方保留您的“通用”内容,或者如果您认为它本身有用,只需发布​​一个单独的独立项目。

关于go - 地道的 Go 代码组织,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29778778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com