关于切片结构体传值| go基础语法

1、先看代码

package main

import "fmt"

type Student struct {
    age  int
    Name string
}

func main() {
    ss := []Student{
        {
            Name: "xyy",
            age:  18,
        },
        {
            Name: "xss",
            age:  20,
        },
    }

    stu := []*Student{}
    for _, r := range ss {
        stu = append(stu, &r)
    }

    for _, tt := range stu {
        fmt.Println(tt.Name)
    }
}

2、结果

xss
xss

3、原因
从stu := []*Student{}可以看出 ,stu是一个存放类型是结构体指针的切片,存放的数据类型是结构体指针,r的地址即&r不变,变的是&r指向的值,最后 *(&r)是ss[1]。

4、图解
关于切片结构体传值| go基础语法_第1张图片

你可能感兴趣的:(golang)