如何访问struct字段,它是一个结构内部的指针,它本身就是一个指针

问题描述 投票:-1回答:1

在下面的代码中,为什么*bikeSlice[0].Type会返回Type字段的值而不是内存地址?为什么*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个回答
2
投票

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

我认为规则3是你正在寻找的那个:

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

© www.soinside.com 2019 - 2024. All rights reserved.