第7课 Go结构struct

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
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值