请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

多个main.go在一个项目里面

回答1 浏览140 2020-10-12 08:43:14

我有注意到main.go 在一个项目里面的不同目录都多次出现,在worker/server/main.go, worker/client/main.go, itemsaver/main.go
在不同的目录启动了不同的main.go,他们可以共享一套代码。

  1. 是不是在go的一个项目中(mod创建的),可以有0个或者多个main.go,只有有main.go的地方就是可执行的。如果没有main.go就是package,可以放到别的地方执行?
  2. 另外有注意到有些项目源码中,有专门的cmd目录,cmd里面放的都是不同的package的可执行mian.go,不散落在不同的package里面,方便查找方便阅读,一目了然知道有那些可执行的,是不是这样的cmd目录的设计,就是在专门的目录存放我们当前crawler项目中的worker/server/main.go, worker/client/main.go, itemsaver/main.go?
    2.1 这样的好处,可以一套代码,然后可执行就可以分为scheduler的可执行和分布式的可执行
    2.2 另外放到cmd下面,是不是可以更方便做容器的部署,在项目根目录可以根据需要启动不同的cmd,或者都一次启动?

添加回答

已采纳回答

这个关键不是cmd目录,而是每个包含main函数的文件都需要在自己独立的目录里。因此cmd目录下开很多子目录成了一种普遍的选择。

但另一方面,我们的代码要根据自身的模块进行划分,离自身的模块越近越好,全都放在cmd里,会导致main函数和自己的业务逻辑,比如我这里的worker/server, worker/client, itemsaver距离过远。

这边权衡的点在于我们认为worker/server, worker/client和itemsaver是一个项目的三个模块,还是三个项目。我这里显然是把它们当作三个项目来处理。

2020-10-13 17:42:58
  • 提问者 拧壶冲 #1
    非常感谢!
    2020-10-20 16:56:58

Google资深工程师深度讲解Go语言

难度中级
时长24小时20分钟
人数4417
好评度99.8%

语法+分布式爬虫实战 为转型工程师量身打造,让你彻底掌握go语言

讲师

ccmouse 全栈工程师

讲师曾任职于Google,担任高级软件工程师,Tech Leader,拥有十余年后端开发经验,精通C ,Java,Go,分布式系统开发等,精通分布式系统设计,从Go语言早期就开始关注和使用Go语言,对Go语言背后的实现及设计理念有独到的见解。

意见反馈 帮助中心 APP下载
官方微信