Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pointers 如何访问本身是指针的结构内部的指针结构字段_Pointers_Go_Slice - Fatal编程技术网

Pointers 如何访问本身是指针的结构内部的指针结构字段

Pointers 如何访问本身是指针的结构内部的指针结构字段,pointers,go,slice,Pointers,Go,Slice,在我下面的代码中,为什么*bikeSlice[0]。键入会将键入字段的值而不是内存地址返回给我?为什么*bikeSlice[0]返回{Type:0xc0000641c0}尽管*bikeSlice[0]。Type似乎会自动取消引用Type字段 package main import "fmt" type Bike struct { Type *string } func main() { type1 := "road" bike1 := Bike{

在我下面的代码中,为什么
*bikeSlice[0]。键入
会将
键入
字段的值而不是内存地址返回给我?为什么
*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)
}
游乐场:

输出:

{Type:0x40e128}
road

是的,我想它会自动取消引用。看

我认为第三条规则就是你想要的:

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