导入特定包

时间:2017-06-24 17:04:47

标签: go interface package

我正在尝试解决依赖问题:假设我想保持main.go中的代码完全与我的数据库分离,我为此创建了2个包:dummy& Postgres的。

/app/
-- main.go

/dummy/
-- dummy.go

/postgres/
-- postgres.go

一切都运行正常,我只需要在我的main.go中选择我要导入的包以获取行为或其他...但是当构建 main.go?

如果有一种更惯用的方式来实现这一点,我当然非常感兴趣!

1 个答案:

答案 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