【问题标题】:Import specific package导入特定包
【发布时间】:2017-06-24 17:04:46
【问题描述】:

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

/app/
-- main.go

/dummy/
-- dummy.go

/postgres/
-- postgres.go

一切正常,我只需要在我的 main.go 中选择我想导入哪个包以获得行为或其他...但是有没有办法在 构建时选择它 main.go ?

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

【问题讨论】:

标签: go interface package


【解决方案1】:

您可以通过构建标签利用 Go 条件构建并针对您的 main.go 编译。

参考此article 并将您的想法付诸实践。

例如:

目录结构

build-tags
├── build-tags
├── dummy
│   └── dummy.go
├── main_dummy.go
├── main_postgres.go
└── postgres
    └── postgres.go

示例实现:

dummy/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

【讨论】:

    猜你喜欢
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    相关资源
    最近更新 更多