我正在创建三个非常相似的应用程序,但每个应用程序将应用不同的逻辑.我不知道如何最好地构建它以避免重复代码.
所有应用程序都有以下共同点: - 读取和解析配置 - 设置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)
}
Run Code Online (Sandbox Code Playgroud)
app1.go:
func processLine(line string) {
// logic for app 1
}
Run Code Online (Sandbox Code Playgroud)
app2.go:
func processLine(line string) {
// logic for app 2
}
Run Code Online (Sandbox Code Playgroud)
等等
以下文件夹结构用于许多流行的go项目中,例如helm,kubicorn等。
goproject/
??? bin
??? cmd
??? pkg
??? Makefile
Run Code Online (Sandbox Code Playgroud)
该cmd目录将包含不同的二进制文件,并按目录分开。
cmd/
??? bin1
? ??? main.go
??? bin2
? ??? main.go
??? bin3
??? main.go
Run Code Online (Sandbox Code Playgroud)
pkg目录将包含所有可重复使用的软件包。在您的情况下,不同二进制文件使用的通用代码。这个目录也可以命名internal,在这里了解更多。
pkg
??? reusablepackage1
??? reusablepackage2
Run Code Online (Sandbox Code Playgroud)
该bin目录是可选的,可用于存储生成的二进制文件。如果您要生成二进制文件,$GOBIN则可以省略。
bin/
??? bin1
??? bin2
??? bin3
Run Code Online (Sandbox Code Playgroud)
该Makefile可用于编写有用的脚本,如运行测试套件等,你可以有命令,如生成的二进制文件
make bin1,make bin2etc.This是可选的,但我强烈推荐这个。因为它使我免于一遍又一遍地写冗长的构建命令。
这些项目的常用目录结构如下所示:
cmd/
a/
main.go
b/
main.go
Run Code Online (Sandbox Code Playgroud)
要构建可执行文件运行
go build ./cmd/a
go build ./cmd/b
Run Code Online (Sandbox Code Playgroud)
例子
| 归档时间: |
|
| 查看次数: |
2169 次 |
| 最近记录: |