提问人:ZottoSL 提问时间:1/12/2023 更新时间:1/12/2023 访问量:215
将 int64 值设置为 *int64 指针 [duplicate]
Set int64 value to *int64 pointer [duplicate]
问:
我需要映射结构来创建JSON结构。JSON 中的 collector_id 属性应该能够接受 null value 或 int value。 我有以下代码:
type purchaseInfo struct {
CollectorID *int64 `json:"collector_id"`
}
func mapPurchaseInfo(collectorID int64) purchaseInfo {
var collectorIDToSend *int64
if collectorID < 0 {
collectorIDToSend = nil
} else {
collectorIDToSend = collectorID
}
return purchaseInfo{
CollectorID: collectorIDToSend,
}
}
此代码无法编译,无法将 collectorID 分配给 collectorIDToSend。 有没有办法做到这一点?
谢谢!
答:
2赞
Lab210
1/12/2023
#1
- 在 mapPurchaseInfo 函数的声明中,要正确地将参数中传递的值分配给 collectorIDToSend,必须使用 & 运算符来检索 collectorID 的内存地址。
- 在构造 purchaseInfo 返回变量时,可以直接放置结构的字段,如示例所示。
type purchaseInfo struct {
CollectorID *int64 `json:"collector_id"`
}
func mapPurchaseInfo(collectorID int64) purchaseInfo {
var collectorIDToSend *int64
if collectorID < 0 {
collectorIDToSend = nil
} else {
collectorIDToSend = &collectorID
}
return purchaseInfo{
CollectorID: collectorIDToSend,
}
}
评论
0赞
ZottoSL
1/12/2023
你好!如果我这样做,CollectorID 值不会采用地址而不是 int 值吗?
0赞
Lab210
1/12/2023
是的,没错!collectorIDToSend 是一个指针变量,它会指向 collectorID 变量所在的内存地址,存储在内存地址中的值将是 collectorID 的 int 值,而不是它自己的地址。当返回 purchaseInfo 结构时,struct 的 CollectorID 字段将被分配 collectorIDToSend 的值,因此 CollectorID 将取 collectorID 值存储的地址,而不是它自己的值。
0赞
Lab210
1/12/2023
可以使用 * 运算符获取存储在指针变量指向的内存地址处的值。因此,您可以使用 *collectorIDToSend 来获取 collectorID 的值。
-2赞
onepice
1/12/2023
#2
type purchaseInfo struct {
CollectorID *int64 `json:"collector_id"`
}
func mapPurchaseInfo(collectorID *int64) purchaseInfo {
if *collectorID < 0 {
return purchaseInfo{CollectorID: nil}
}
return purchaseInfo{
CollectorID: collectorID,
}
}
评论
collectorID
collectorIDToSend = &collectorID
func mapPurchaseInfo(collectorID int64) (r purchaseInfo) { if collectorID >= 0 { r.CollectorID = &collectorID }; return }