You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 18:10:31