我正在创建三个非常相似的应用程序,但每个应用程序将应用不同的逻辑。我不知道如何最好地构建它以避免重复代码。
所有申请都有以下共同点: - 读取和解析配置 - 设置SQL数据库连接 - 收集统计数据 - 从STDIN读取
每个应用程序将对从STDIN读取的数据应用不同的逻辑。
这会被认为是可以接受的吗?将所有常用代码放在main.go中,然后构建为“go build -o bin / app1 main.go app1.go”等等 - 仅为每个二进制文件提供特定于应用程序的逻辑来构建?
main.go:
func main() {
// db connection
// stats worker
// read from stdin
proccessLine(line)
}
app1.go:
func processLine(line string) {
// logic for app 1
}
app2.go:
func processLine(line string) {
// logic for app 2
}
等
答案 0 :(得分:6)
此类项目的常用目录结构如下:
cmd/
a/
main.go
b/
main.go
构建可执行文件
go build ./cmd/a
go build ./cmd/b
实施例
答案 1 :(得分:5)
以下文件夹结构用于许多热门go
项目,例如Friendly Enough Expression Language,helm等。
goproject/
├── bin
├── cmd
├── pkg
└── Makefile
cmd
目录将包含不同的二进制文件,在目录中分开。
cmd/
├── bin1
│ └── main.go
├── bin2
│ └── main.go
└── bin3
└── main.go
pkg
目录将包含所有可重用的包。在您的情况下,不同二进制文件使用的公共代码。此目录也可以命名为internal
,详细了解kubicorn。
pkg
├── reusablepackage1
└── reusablepackage2
bin
目录是可选的,可用于存储生成的二进制文件。如果您要生成$GOBIN
的二进制文件,则可以省略。
bin/
├── bin1
├── bin2
└── bin3
Makefile
可用于编写有用的脚本,例如生成运行测试套件等的二进制文件。您可以使用诸如
make bin1
,make bin2
等。这是可选的,但我强烈推荐这一点。因为它使我免于一遍又一遍地编写长构建命令。