我正在尝试解决依赖问题:假设我想保持main.go中的代码完全与我的数据库分离,我为此创建了2个包:dummy& Postgres的。
/app/
-- main.go
/dummy/
-- dummy.go
/postgres/
-- postgres.go
一切都运行正常,我只需要在我的main.go中选择我要导入的包以获取行为或其他...但是当构建 main.go?
如果有一种更惯用的方式来实现这一点,我当然非常感兴趣!
答案 0 :(得分:0)
您可以通过构建标记使用Go条件构建,并定位main.go的编译。
请参阅此article并将您的想法付诸行动。
例如:
目录结构
build-tags
├── build-tags
├── dummy
│ └── dummy.go
├── main_dummy.go
├── main_postgres.go
└── postgres
└── postgres.go
示例实施:
虚设/ dummy.go
package dummy
import "fmt"
func PrintName() {
fmt.Println("My name is dummy package")
}
postgres的/ postgres.go
package postgres
import "fmt"
func PrintName() {
fmt.Println("My name is postgres package")
}
main_dummy.go
// +build dummy
package main
import "build-tags/dummy"
func main() {
dummy.PrintName()
}
postgres.go
// +build postgres
package main
import "build-tags/postgres"
func main() {
postgres.PrintName()
}
现在让我们构建定位dummy
代码,与postgres
代码相同。
go build --tags="dummy"
# run the program
./build-tags
My name is dummy package