使用type 和struct 关键字来定义结构体,是值类型
格式如下:
type 类型名 struct {
? ? ? ? 字段名 类型
? ? ? ? 字段名 类型
? ? ? ? ...
}
1、var 结构体实例 结构体类型? ? var p1 Person??
2、使用new关键字? ?var p2 = new(Person)
3、使用&对结构体进行取地址操作 p3:=&Person{}
第二种和第三种返回的是指针类型
4、键值对初始化
p4:= Person {
? ? ? ? name :"李四",
}
5、&取内存地址
p5:=&Person{
? ? ? ? name :"李四",
}
6、简写 不指名key 直接写value
p6:=&Person{
? ? ? ? "张三
"
}
?结构体首字母大写表示结构体共有,在其他包里可以使用。首字母小写表示结构体私有,只能在这个包里使用。
在golang中 支持对结构体指针直接使用.来访问结构体的成员? ?p2.name = "张三",其在底层是(*p2).name="张三"
结构体允许成员字段声明时没有字段名只有类型,这种没有名字的字段叫匿名字段。匿名字段默认采用类型名作为字段名,因此类型不能重复。
type Person {
? ? ? ? string
? ? ? ? int
}
当访问结构体成员时会先在结构体中查找该字段,找不到再去匿名结构体中查找、
type User struct {
Username string
Age int
Address Address
}
type Address struct {
Name string
phone string
}
func main() {
var u = new(User)
u.Username = "张三"
u.Age = 20
u.Address.Name = "不会"
u.Address.phone = "1233"
// fmt.Printf("%#v", u)
fmt.Println(&u.Address)
}
?golang中使用结构体嵌套来实现继承。