为了账号安全,请及时绑定邮箱和手机立即绑定

解组为指针与值接收器字段

解组为指针与值接收器字段

Go
动漫人物 2022-05-10 16:12:26
我最近在学习 Golang。我知道指针和值接收器通常是如何工作的。当 Unmarshal JSON string like following 2示例时,我觉得第一个(指针接收器)更有效地使用内存。但是我看到很多例子和文章没有使用这种方式。这有什么原因吗?它们的用例是什么?package mainimport (    "encoding/json"    "fmt")type Outer struct {    ID           int          `json:"id"`    PointerValue *string      `json:"pointer_str"`    Inner        *Inner `json:"inner"`}type Inner struct {    Value string `json:"value"`}func main() {    testJson := `{            "id": 1,            "pointer_str": "example-value",            "inner": {                "value": "some-value"            }        }`    testStruct := &Outer{}    json.Unmarshal([]byte(testJson), testStruct)    fmt.Printf("%+v\n", testStruct)    fmt.Printf("%+v\n", *testStruct.PointerValue)    fmt.Printf("%+v\n", testStruct.Inner)}输出:&{ID:1 PointerValue:0x40c250 Inner:0x40c258}example-value&{Value:some-value}或者package mainimport (    "encoding/json"    "fmt")type Outer struct {    ID           int          `json:"id"`    PointerValue string      `json:"pointer_str"`    Inner        Inner `json:"inner"`}type Inner struct {    Value string `json:"value"`}func main() {    testJson := `{            "id": 1,            "pointer_str": "example-value",            "inner": {                "value": "some-value"            }        }`    testStruct := &Outer{}    json.Unmarshal([]byte(testJson), testStruct)    fmt.Printf("%+v\n", testStruct)    fmt.Printf("%+v\n", testStruct.Inner)}输出:&{ID:1 PointerValue:example-value Inner:{Value:some-value}}{Value:some-value}更新:我对效率的含义是“使用内存的有效方式”
查看完整描述

1 回答

?
Helenr

TA贡献1780条经验 获得超4个赞

认为它更有效的假设是错误的。没有指针的那个效率更高,因为不需要间接,并且该值与 的其他值一起在内存缓存中Outer。访问会更快。

当内部值是可选的时使用指针。nil当该值不存在时,它将具有一个值。否则使用没有指针的表格。如果 JSON 字符串中的 Inner 的值可能是 ,您也可以使用指针null


查看完整回答
反对 回复 2022-05-10
  • 1 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信