如何在 Golang 中拥有具有相同成员但不同 JSON 标签的开发结构和生产结构?
php小编苹果在Golang开发中,我们经常遇到需要在开发结构和生产结构中使用相同的成员,但却需要不同的JSON标签的情况。这种情况下,我们需要找到一种灵活的解决方案,以便在编写代码时能够方便地切换不同的标签。本文将介绍如何在Golang中实现这一需求,让开发过程更加高效和灵活。
问题内容
第一次提问! 我正在尝试将使用相同结构的开发和生产分开。
我正在使用 airtable,它将记录作为 json 发送,并带有我们在解组时使用的 fld 标签。
type airtablerecord struct { name *string `json:"fldaaaa,omitempty"` }
我有 2 个独立的 airtable:
- 用于开发
- 用于生产
它们是相同的,只是由于 airtable 的工作方式,字段被赋予了不同的 fld 标签
我的 airtable 场地的图片
现在要将开发环境与生产环境分开,我必须根据我指向的 airtable 取消注释正确的成员。
type airtablerecord struct { // development name *string `json:"fldaaaa,omitempty"` // production //name *string `json:"fldbbbb,omitempty"` }
我将此类型保留在它自己的 model.go 文件中,供其他包使用。
我调查过:
- 一行中有多个 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"` }
- 研究过使用重新标记,但他们给出的示例看起来不像我正在寻找的
- 重新标记链接:https://pkg.go.dev/github.com/sevlyar/[电子邮件受保护]
我想根据我是在开发模式还是生产模式下运行来动态更改此成员的标签。
任何及所有帮助将不胜感激!
解决方法
如果您在此块中收到 redeclared 使用构建标记的
编译错误,请在 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
但也应该与旧的一起使用。
以上是如何在 Golang 中拥有具有相同成员但不同 JSON 标签的开发结构和生产结构?的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Notepad++ 本身不能运行 C 语言程序,需要一个外部编译器来编译和执行代码。为了使用外部编译器,可以按以下步骤进行设置:1. 下载并安装 C 语言编译器;2. 在 Notepad++ 中创建自定义工具,将编译器可执行文件路径和参数配置好;3. 创建 C 语言程序并保存为 .c 文件扩展名;4. 选择 C 语言程序文件,从“运行”菜单中选择自定义工具进行编译;5. 查看编译结果,输出编译错误或成功消息。如果编译成功,将生成可执行文件。

在函数继承中,使用“基类指针”和“派生类指针”来理解继承机制:基类指针指向派生类对象时,执行向上转型,只访问基类成员。派生类指针指向基类对象时,执行向下转型(不安全),必须谨慎使用。

在 Sublime Text 中运行 Python 代码的快捷键为:Windows 和 Linux: Ctrl + BMac: Cmd + B将光标放置在代码中。按下快捷键。代码将使用系统默认的 Python 解释器运行。

Java 中的 val 关键字用于声明不可变的局部变量,即一旦赋值后无法更改其值。特点有:不可变性:一旦初始化,val 变量不能重新赋值。局部作用域:val 变量仅在声明它们的代码块内可见。类型推断:Java 编译器会根据赋值的表达式推断 val 变量的类型。仅限局部变量:val 只能用于声明局部变量,不能用于类字段或方法参数。

const 修饰符表示常量,值不可修改;static 修饰符指示变量的生存期和作用域。const 修饰的数据成员在初始化后不可修改,static 修饰的变量在程序启动时初始化,在程序结束时销毁,即使没有活动对象也会存在,并且可以跨函数访问。const 修饰局部变量必须声明时初始化,static 修饰的局部变量可以稍后初始化。const 修饰类成员变量必须在构造函数或初始化列表中初始化,static 修饰的类成员变量可以在类外部初始化。

Java 编程语言中的 "=" 操作符用于给变量赋值,将表达式右侧的值存储在左侧变量中。用法:变量 = 表达式,其中变量是接收赋值的变量名称,表达式是计算或返回值的代码段。

编译器区分重载函数的方法:通过签名,即每个函数参数的类型。即使函数名称和参数数量相同,只要参数类型不同,编译器就能区分开来。

C++ 中的 min() 函数返回两个或更多值中的最小值,它是一个泛型函数,可以比较不同类型的值。用法如下:比较两个值:min(a, b)比较多个值:min(a, b, c)比较不同类型的值:min(a, b, c)(需显式指定类型)适用于数组和容器中的元素比较
