go学习笔记4 struct
是一种数据类型—类型定义(地位等价于int byte bool…)通常放在全局位置
普通变量定义和初始化:
- 顺序初始化:一次将结构体内部所有成员初始化
type Person struct{
name string
sex byte
age int
}
var man Person = Person{"h","m",18}
- 指定成员初始化
type Person struct{
name string
sex byte
age int
}
var man Person = Person{
name:"h",
age:"18"
}
普通变量的赋值使用:
使用“.”所以成员变量
type Person struct{
name string
sex byte
age int
}
var man Person = Person{
name:"h",
age:"18"
}
man.name = "hh"
结构体变量的比较和赋值:
比较:只能使用== 或!= 不能比较大小
结构体传参
将结构体变量的值拷贝一份 传递 ----几乎不用 内存消耗大,效率低。
指针变量定义和初始化:
type person struct {
Name string
Age int
}
var sc1 *person = &person{
Name: "jon",
Age: 13,
}
结构体地址:
结构体指针变量的地址 == 结构体首个元素的地址
type person struct {
Name string
Age int
}
var sc1 *person = &person{
Name: "jon",
Age: 13,
}
fmt.Printf("%p\n", sc1)
fmt.Printf("%p\n", &sc1.Name)
fmt.Printf("%p", &sc1.Age)
// 0xc00000c080
// 0xc00000c080
// 0xc0000a6030
结构体指针作为参数传参
将结构体变量地址传递(传引用)使用频率非常高!!!!
结构体指针做函数返回值:
不能返回局部变量的地址值。局部变量保存栈帧上,函数调用结束后,栈帧释放局部变量的地址,不再受系统保护,随时可能分配给其他程序。