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

来源:18-9 使用连接池链接爬虫集群

拧壶冲

2020-10-12

我有注意到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,或者都一次启动?
写回答

1回答

ccmouse

2020-10-13

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

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

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

0
1
拧壶冲
非常感谢!
2020-10-20
共1条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1908 问题

查看课程