Golang中没有“类”的概念,Golang中的结构体struct和其他语言中的类有点相似。和其他面向对象语言中的类相比,Golang中的结构体具有更高的扩展性和灵活性。
结构体的定义
type 类型名 struct {
字段名 字段类型
字段名 字段类型
}
字段名:表示结构体字段名,必须唯一
类型名:表示结构体字段名,在同一个包内不能重复
结构体的实例化
- 方式一
var 结构体实例 结构体类型
type Person struct {
name string
age int
sex string
}
func main() {
var p1 Person
p1.name = "张三"
p1.sex = "男"
p1.age = 20
fmt.Printf("值:%v 类型%T\n", p1, p1)
//值:{张三 20 男} 类型main.Person
}
在Golang中支持对结构体指针直接使用
.
来访问结构体成员。p2.name = "张三"
,其实在底层是(*p2).name = "张三"
- 方式二
type Person struct {
name string
age int
sex string
}
func main() {
var p2 = new(Person)
p2.name = "李四"
p2.age = 20
p2.sex = "男"
(*p2).name = "王五"
fmt.Printf("值:%v 类型:%T", p2, p2)
//值:&{王五 20 男} 类型:*main.Person
}
- 方式三(&)
type Person struct {
name string
age int
sex string
}
func main(){
var p3 = &Person{}//把Person结构体的地址,赋值给指针p3
p3.name = "赵六"
p3.age = 23
p3.sex = "男"
fmt.Printf("值:%v 类型:%T\n", p3, p3)
//值:&{赵六 23 男} 类型:*main.Person
}
- 方式四(键值对)
type Person struct {
name string
age int
sex string
}
func main(){
var p4 = Person {
name : "哈哈",
age : 6,
sex : "男",
}
fmt.Printf("值:%v 类型:%T\n", p4, p4)
//值:{哈哈 6 男} 类型:main.Person
}
- 方式五
有的字段可以不去赋值
type Person struct {
name string
age int
sex string
}
func main(){
var p5 = &Person {
name : "嘎嘎",
age : 6,
}
fmt.Printf("值:%v 类型:%T\n", p5, p5)
//值:&{嘎嘎 6} 类型:*main.Person
}
- 方式六(省略key)
注意:使用这种方法需要将值一一对应
type Person struct {
name string
age int
sex string
}
func main(){
var p6 = &Person {
"尼古拉",
29,
"男",
}
fmt.Printf("值:%v 类型:%T\n", p6, p6)
//值:&{尼古拉 29 男} 类型:*main.Person
}
网友评论