[GO]匿名字段的同名字段操作

Posted baylorqu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[GO]匿名字段的同名字段操作相关的知识,希望对你有一定的参考价值。

package main

import (
    "fmt"
)

type Person struct {
    name string
    sex byte
    age int
}

type Student struct {
    Person    //只有名字,没有字段,这里student相当于继承了person的所有字段,就有点像是继承了
    id int
    addr string
    name string //这里跟person里的字段同名了,那么被使用的时候,操作是studnet还是persion里的name ?
                //这里也是遵守作用域的就近规则
}

func main() {
    var s Student
    s.name = "mike"
    fmt.Printf("s = %+v
", s)//通过打印就可以知道它操作的是student里的name,同样适用作用域的就近规则,如果没有找到,则找继承
    //那么如果就是想操作person里的name呢?
    s.Person.name = "baylor"
    fmt.Printf("s = %+v
", s)
}

扫行的结果为

s = {Person:{name: sex:0 age:0} id:0 addr: name:mike}
s = {Person:{name:baylor sex:0 age:0} id:0 addr: name:mike}

以上是关于[GO]匿名字段的同名字段操作的主要内容,如果未能解决你的问题,请参考以下文章

Go语言学习——结构体的匿名字段嵌套结构体结构体的“继承”

Go语言方法应用

Go中的"继承"之struct的匿名字段

Go中匿名字段的方法继承与方法重写

入门Go语言面向对象

go与C#的匿名类型判断比较