第一次提问!我想把我的开发和生产分开,使用相同的结构。
我正在使用Airtable,它将记录作为具有字段的JSON发送。反编组时使用的标记。
type AirtableRecord struct {
Name *string `json:"fldAAAA,omitempty"`
}
我有2个独立的Airtables:
发展- 生产
它们是相同的,只是由于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文件,以避免它。
// +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
但也可以用旧的