如何将int64值赋值给*int64指针以生成支持null的JSON字段?
解决Go结构体指针字段赋值编译错误的问题
这个编译错误的核心原因很清晰:你试图把int64值类型直接赋值给*int64指针类型变量,Go的强类型系统不允许这种隐式的类型转换。collectorID是函数接收的int64值,而collectorIDToSend是*int64指针,两者类型不匹配,所以编译失败。
修正后的基础版本代码
只需要在else分支里取collectorID的地址(用&操作符),就能得到符合类型要求的*int64指针:
type purchaseInfo struct { CollectorID *int64 `json:"collector_id"` } func mapPurchaseInfo(collectorID int64) purchaseInfo { var collectorIDToSend *int64 if collectorID < 0 { collectorIDToSend = nil } else { // 取collectorID的地址,赋值给指针变量 collectorIDToSend = &collectorID } return purchaseInfo{ CollectorID: collectorIDToSend, } }
更简洁的优化写法
其实你可以省略中间变量collectorIDToSend,直接初始化结构体并处理字段,让代码更紧凑:
func mapPurchaseInfo(collectorID int64) purchaseInfo { pi := purchaseInfo{} // 仅当collectorID合法时,赋值指针;否则字段默认是nil if collectorID >= 0 { pi.CollectorID = &collectorID } return pi }
效果说明
这样修改后完全符合你的需求:
- 当
collectorID < 0时,CollectorID字段为nil,JSON序列化后collector_id会是null - 当
collectorID >= 0时,CollectorID指向该整数值,JSON序列化后会输出对应的数字
内容的提问来源于stack exchange,提问作者ZottoSL
相关产品推荐
相关产品推荐

