结构体 | 青训营笔记

119 阅读2分钟

结构体成员称为字段,字段拥有自己的值和类型,且字段名字唯一,字段的类型也可以是结构体,甚至是字段所在结构体的类型

结构体定义格式:

type 类型名 struct{         

字段1 类型       字段名大写开头表示公开访问

字段2 类型        字段名小写开头表示私有,仅在当前结构体中可以访问

}

type Point struct {

X int

Y int

}

可以直接Point.X=1进行赋值

结构体实例化

1.       var p Point  p.X/p.Y

2.       p := new(Point)

3.       p := &Point{}

2,3是创建指针类型的结构体

匿名结构体定义

1.    msg := &struct { // 定义部分

id int

data string

}{ // 值初始化部分

1024,

"hello",

}

2.    var msg struct{

id int;

data string

}//赋值

msg.id = 11

msg.data = "adw

结构体构造函数

typeTeststruct{

a,b,c,dint

}

funcnewTest(a,b,c,dint)*Test{

return&Test{

a:a,

b:b,

c:c,

 

d:d,

}

}

funcmain(){

n:=newTest(1,2,3,4)

fmt.Println(*n)

}

 

结构体的方法(任何类型都可以有方法)

func (接收者 接收者类型) 方法(参数列表)(返回值){

函数体

}

funcnewPerson(namestring,ageint)*Person{

return&Person{

name:name,

age:age,

接收者

指针类型的接收者:接收者类型是一个指针时可以修改结构体中的成员变量的值。

什么时候应该使用指针类型接收者

1.   需要修改接收者中的值

2.    接收者是拷贝代价比较大的大对象

3.    保证一致性,如果有某个方法使用了指针接收者,那么其他的方法也应该使用指针接收者。

结构体的匿名字段:只有类型,没有字段名

type Person struct(

int

string

)

结构体与json序列化

结构体- ->json格式字符串

data, err := json.Marshal(c)        json.Marshal(c)可以将结构体(可以是结构体指针也可以是结构体)转换为json格式的字符串

json格式字符串- ->结构体                                                              *****(c1必须是指针类型)

err = json.Unmarshal([ ]byte(str), c1)   json.Unmarshal([ ]byte(str), c1)将字符串str转换为结构体数据

 

标签:Tag在结构体字段的后方定义,由一对反引号包裹起来,具体的格式如下:  key1:"value1" key2:"value2" 使用键值对初始化结构体(赋值!=初始化)

ins := 结构体类型名{   /ins := &结构体类型名(对结构体指针初始化)

    字段1: 字段1的值,

    字段2: 字段2的值,

    …

}

typePeoplestruct{

namestring

child*People        结构体成员中只能包含结构体的指针类型

}

relation:=&People{

name:"爷爷",

child:&People{

name:"爸爸",

child:&People{

name:"我",   结构体初始化时每行的结尾都要加逗号

},  复合文字的换行符要加“,”

},

}