package main
import"fmt"//结构体type person struct{
name string
age int
hobby []string}funcmain(){//声明person 类型的变量var lixiang person
//1.使用值列表的形式初始化,顺序与定义顺序一致
lixiang = person{"lixiang",10,[]string{"足球","双色球"},}
fmt.Println(lixiang)//打印变量
fmt.Println(lixiang.name)//2.使用 key-val形式初始化var xiaoming = person{
name:"ssss",
age:22,
hobby:[]string{"sss","sssss"},}
fmt.Println(xiaoming)//匿名结构体var s struct{
name string
age int}//3.通过字段分别单独赋值
s.name ="sssss"
s.age =10
fmt.Printf("匿名结构体s类型:%T\n", s)//struct { name string; age int } //new 返回的是对应的结构体的指针
dd :=new(person)
fmt.Println(dd)// &{ 0 []}}
构造函数
package main
import"fmt"//结构体type person struct{
name string
age int}//构造函数//返回值是结构体还是结构体指针//当结构体较大时,尽量使用结构体指针,减少内存开销funcnewPerson(name string, age int) person {return person{
name: name,
age: age,}}funcmain(){
p1 :=newPerson("元帅",18)
p2 :=newPerson("将军",900)
fmt.Println(p1, p2)}
函数、方法
package main
import"fmt"//Go中标识符 首字母大写表示外部可见(共有的)//结构体type dog struct{
name string}//构造函数//返回值是结构体还是结构体指针//当结构体较大时,尽量使用结构体指针,减少内存开销funcnewDog(name string) dog {return dog{
name: name,}}//这是函数,谁都能调用funcwang(){
fmt.Println("wangwangwang~~~")}//这是方法,只有dog可以调用func(d dog)wangwang(){
fmt.Printf("%s :wangwangwang", d.name)}funcmain(){//函数wang()//wangwangwang~~~
d1 :=newDog("旺财")//方法
d1.wangwang()//旺财 :wangwangwang}
匿名嵌套结构体
package main
import"fmt"//Go中标识符 首字母大写表示外部可见(共有的)type address struct{
province string
city string}type workPlace struct{
province string
city string}//结构体type person struct{string//结构体匿名字段int
address
}type company struct{
name string// provice string// city string// addr address//嵌套结构体
address //匿名嵌套结构体}funcmain(){
p1 := person{"周琳",90000,
address{
province:"HB",
city:"CD",},}
fmt.Println(p1)
fmt.Println(p1.string)//匿名字段用类型当变量名
fmt.Println(p1.city)//匿名嵌套结构体,不冲突可以直接访问嵌套的属性//匿名嵌套结构体,嵌套的属性重复,需指明 p1.address.city}
package mainimport "fmt"//结构体type person struct { name string age int hobby []string}func main() { //声明person 类型的变量 var lixiang person //1.使用值列表的形式初始化,顺序与定义顺序一致 lixiang = person{ "lixiang", 10, []string{"足球", "双色球"}, } fmt.Println