第7课 Go结构struct

来源:互联网 发布:哪个基金软件好 编辑:程序博客网 时间:2024/06/06 09:03
package mainimport "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 mainimport "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 mainimport (    "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