3 回答

TA贡献1735条经验 获得超5个赞
在大多数情况下,使用指向该值的指针是有意义的。例如
type RabbitMessage struct { F1 *int `json:"f1"` }
这将如何工作的确切细节取决于您在通过 RabbitMQ 发送数据之前如何序列化数据。如果您使用的是 JSON,那么这应该没有问题,因为空值和省略的值都将在 Go 中表示为 。提供该值后,它将设置为您期望的值(它不会使用发件人的地址)。nil

TA贡献1797条经验 获得超6个赞
“我还有其他选择吗?”-- 是的,您可以定义一个自定义类型,类似于 sql。空因特64。
type OptionalInt struct {
Int int
IsValid bool
}
func NewOptionalInt(i int) OptionalInt {
return OptionalInt{Int: i, IsValid: true}
}
func (o *OptionalInt) UnmarshalJSON(data []byte) error {
if string(data) != "null" {
if err := json.Unmarshal(data, &o.Int); err != nil {
return err
}
o.IsValid = true
}
return nil
}
func (o OptionalInt) MarshalJSON() ([]byte, error) {
if o.IsValid {
return json.Marshal(o.Int)
}
return json.Marshal(nil)
}

TA贡献1820条经验 获得超10个赞
如果您只控制接收方程序,则 AFAICT 您无法区分已自动初始化为 by 的 int 和已由发送方设置为的 int。00
但是,如果您可以修改发送程序,则另一种方法是在int一起添加布尔字段,以判断int是否已设置。然后在接收端,您可以检查布尔值是否为真。
您还可以发送指向 int 的指针:
type Message struct {
Value *int `json:"value"`
}
message := Message{Value: 4}
但请注意,在取消编组时,您将获得一个int指针,您需要取消引用。
- 3 回答
- 0 关注
- 121 浏览
添加回答
举报