【问题标题】:How to access struct field which is a pointer inside of a struct which is itself a pointer如何访问本身是指针的结构内部的指针结构字段
【发布时间】:2019-07-10 17:25:28
【问题描述】:

在我下面的代码中,为什么*bikeSlice[0].TypeType 字段的值而不是内存地址返回给我?为什么*bikeSlice[0] 返回{Type:0xc0000641c0} 虽然*bikeSlice[0].Type 似乎自动取消引用Type 字段?

package main

import "fmt"

type Bike struct {
    Type *string
}

func main() {
    type1 := "road"

    bike1 := Bike{
        Type: &type1,
    }

    type2 := "mountain"

    bike2 := Bike{
        Type: &type2,
    }

    var bikeSlice []*Bike

    bikeSlice = append(bikeSlice, &bike1)
    bikeSlice = append(bikeSlice, &bike2)

    fmt.Printf("%+v\n", *bikeSlice[0])
    fmt.Printf("%+v", *bikeSlice[0].Type)
}

游乐场:https://play.golang.org/p/2Q4Bt60SUdW

输出:

{Type:0x40e128}
road

【问题讨论】:

    标签: pointers go slice


    【解决方案1】:

    是的,我认为它会自动取消引用。见https://golang.org/ref/spec#Selectors

    我认为第 3 条规则就是您要寻找的规则:

    作为一个例外,如果 x 的类型是已定义的指针类型并且 (*x).f 是表示字段(但不是方法)的有效选择器表达式,则 xf 是 (*x).f 的简写。

    【讨论】:

      猜你喜欢
      • 2016-09-10
      • 2014-11-03
      • 2014-06-09
      • 1970-01-01
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      相关资源
      最近更新 更多