第7课 Go结构struct

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lhdalhd1996/article/details/52122793
package main

import "fmt"

/*
结构struct
-Go中的struct与C中的struct非常相似,并且Go没有class
-使用type <Name> struct{}定义结构,名称遵循可见性规则
-支持指向自身的指针类型成员
-支持匿名结构,可用作成员定义成员变量
-匿名结构也可以用于map的值
-可以使用字面值对结构进行初始化
-允许直接通过指针来读写结构成员
-相同类型的成员可进行直接拷贝复制
-支持==与!=运算符,但不支持> 或 <
-支持你名字段,本质上是定义了以某个类型名为名称的字段
-嵌入结构作为你名字段看起来像继承,但不是继承
-可以使用你名字段指针
*/

type person struct {
    Name string
    Age  int
}
type person_temp struct {
    Name    string
    Age     int
    Contact struct {
        Phone, City string
    } //嵌套匿名结构
}

func main() {
    a := person{}
    a.Age = 13
    a.Name = "joe"
    b := person{
        Name: "joe",
        Age:  19,
    } //字面值的初始化
    A(&a)
    fmt.Println("------")
    fmt.Println(b)
    fmt.Println("------")
    c := person_temp{}
    c.Age = 20
    c.Name = "Lihuidi"
    c.Contact.City = "邯郸"
    c.Contact.Phone = "15684505257" //对嵌套匿名结构的结构的初始化方法
    fmt.Println(c)
    fmt.Println("------")
    fmt.Println(a == b) //判断a和b是否相等
}

func A(per *person) {
    fmt.Println("A", per)
}

//结构支持匿名结构
package main

import "fmt"

type human struct {
    Sex int
}
type teacher struct {
    human
    Name string
    Age  int
}
type student struct {
    human //本质上把结构名称作为字段名称
    Name  string
    Age   int
}

//结构的嵌入
func main() {
    a := teacher{Name: "joe", Age: 19, human: human{Sex: 1}} //操作方法!
    b := student{Name: "joe", Age: 20, human: human{Sex: 0}} //请记住这个操作方法!
    a.Name = "joe2"
    a.Age = 21
    a.Sex = 0 //可见,嵌入之后所有的变量都属于新的结构了
    fmt.Println(a, b)
}
package main

import (
    "fmt"
)

type A struct {
    B
    Name string
}
type B struct {
    Name string
}

func main() {
    a := A{Name: "A", B: B{Name: "B"}}
    fmt.Println(a.Name, a.B.Name) //成功取到了同名字段,如果最高级不存在Name,会自动往下找,知道找到Name
}

猜你喜欢

转载自blog.csdn.net/lhdalhd1996/article/details/52122793