第7课 Go结构struct

lhdalhd1996 · · 1276 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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
}

有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:lhdalhd1996

查看原文:第7课 Go结构struct

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1276 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传