如何在Golang中具有相同成员但不同JSON标签的开发结构和生产结构?



第一次提问!我想把我的开发和生产分开,使用相同的结构。


我正在使用Airtable,它将记录作为具有字段的JSON发送。反编组时使用的标记。

type AirtableRecord struct {
Name   *string  `json:"fldAAAA,omitempty"`
}

我有2个独立的Airtables:

发展
  1. 生产

它们是相同的,只是由于Airtable的工作方式不同,字段被赋予了不同的字段标签

我的Airtable字段图像


现在要将开发环境与生产环境分开,我必须根据我指向的Airtable取消正确成员的注释。

type AirtableRecord struct {
// Development
Name   *string  `json:"fldAAAA,omitempty"`
// Production
//Name   *string  `json:"fldBBBB,omitempty"`
}

我将这个类型保留在它自己的模型中。Go文件,其他包使用。

I have look into:

  • 在一行中有多个JSON标签,Golang不这样做
type AirtableRecord struct {
// Development or Production
Name   *string  `json:"fldAAAA,fldBBBB,omitempty"`
}
  • 使用构建标签分离我的文件,也许这是有效的,但我做错了
  • 文件1:

// +build dev
type AirtableRecord struct {
// Development
Name   *string  `json:"fldAAAA,omitempty"`
}

文件2:

type AirtableRecord struct {
// Production
Name   *string  `json:"fldBBBB,omitempty"`
}
  • 研究使用retag,但他们给出的例子看起来不像我想要的
    • 链接到重新标签:https://pkg.go.dev/github.com/sevlyar/retag@v0.0.0-20190429052747-c3f10e304082

我想根据我是在开发模式还是生产模式下运行,动态地改变这个成员的标签。

任何和所有的帮助将不胜感激!

如果你得到redeclared in this block编译错误与构建标签,然后指定一个不'ed标签在prod文件,以避免它。

Dev文件
// +build dev
type AirtableRecord struct {
// Development
Name   *string  `json:"fldAAAA,omitempty"`
}

戳文件

// +build !dev
type AirtableRecord struct {
// Development
Name   *string  `json:"fldAAAA,omitempty"`
}

与构建

# for dev
go build -tags=dev -o devrel
# For prod
go build -tags=prod -o prodrel  
Or no tags for prod

自1.17以来,构建标签的格式也发生了变化,所以在您的情况下,它将是,

//go:build dev

但也可以用旧的

相关内容

  • 没有找到相关文章

最新更新