我被迫使用一个API,它对同一个对象有两个不同的键或标识符,VAT - number。
在GET中,我必须使用这个结构体从json中解包/解码:
type SilverfinCompany struct {
ID int `json:"id"`
Name string `json:"name"`
Vat string `json:"vat"` // here
}
字符串
在POST和PATCH中,我可以使用这个结构体来将其编组为json:
type SilverfinCompany struct {
ID int `json:"id"`
Name string `json:"name"`
Vat string `json:"vat_identifier"` // here
}
型
显而易见的解决方案是有两个“不同”的结构体,它们具有相同的内容,但JSON键略有不同,以及两个转换函数。或者在结构体中有两个不同的字段:Vat和VatIdentifier。
问题是,它会给已经很复杂的代码增加额外的复杂性。
所以我想知道:
有没有一种方法(类似反射)可以根据情况改变结构中Vat字段的JSON键?
2条答案
按热度按时间flmtquvp1#
不能在运行时修改类型定义,包括结构标记。
只要字段类型和顺序(即内存布局)相同,您根本不需要任何转换函数,它们可以直接转换:https://go.dev/play/p/IhkVM-BMLiY
字符串
这是此类场景的常见解决方案。
bvuwiixz2#
你也可以在同一个结构中同时使用这两个字段,并为它们赋相同的值。目标API可以选择使用其中一个字段而忽略另一个字段。
字符串