struct

-使用type<Name>struct{}定义结构,名称遵循可见性规则

-支持指向自身的指针类型成员

-支持匿名结构、可作用成员或定义成员变量

-匿名结构也可以用于MAP的值

-可以使用字面值对结构进行初始化

-允许值通过指针来读写结构成员

-相同类型的成员可进行直接拷贝赋值

-支持==与!=比较运算符,不支持>或<

-支持匿名字段,本质上是定义了以某个类型名称的字段

-嵌入结构作为匿名字段看起来像继承、但不是继承

-可以使用匿名字段的指针

package main

import "fmt"

type test struct{}


func main(){

a :=test{}

fmt.Println(a)


}


packagemain

import"fmt"

typeteststruct{

Namestring

Ageint

Addressstring

}

funcmain(){

a:=test{}

a.Name="YH"//值初始化,与其他语言的class类似,GO语言没有指针运算,

a.Age=18

fmt.Printf("我叫%s,今年年方%d\n",a.Name,a.Age)

b:=test{

Name:"YH",

Age:19,

Address:"Japan",

}

fmt.Printf("我叫%s,今年年方%d,我是%s\n人",b.Name,b.Age,b.Address)

}


//匿名结构

packagemain

import"fmt"

typeteststruct{

Namestring

Ageint

Addressstring

Contactstruct{

User_phontstring

Citystring

}

}

funcmain(){

a:=test{Name:"yh",Age:19,Address:"Bj"}

a.Contact.User_phont="1234567890"

a.Contact.City="haidian"

fmt.Println(a)

}




package main

import "fmt"

func main() {

a := struct {

Name string

Age int

}{

Name: "aa",

Age: 19,

}

fmt.Println(a)

}


package main

import "fmt"

type test struct{

Name string

Age int

}


func main(){

a :=test{

Name:"coolqi", //设置字面值初始化

}

a.Age=19//

fmt.Println(a)


}



package main

import "fmt"

type humen struct{

Sex int

}


type Teacher struct{

humen

Name string

Age int



}

type Student struct{

humen //这里的嵌入式是一个匿名的字段,本质上是将结构的名称作为字段名称,若需要作为字面值初始化,需要做humen:humen{Sex:1}

Name string

Age int

}

func main(){

a :=Teacher{Name:"joe",Age:19,humen:humen{Sex:1}}//在嵌入式结构中,

fmt.Println(a)


}