1. 结构体的定义格式
在go语言中结果的定义格式如下:
1 2 3
| type structName struct { filedList }
|
列子如下:
1 2 3 4
| type Person struct { Name string age int }
|
对上上述这种方式定义的结构体有如下几种初始化的方式
默认的方式, 这种方式也是零值初始化方式
使用字面量进行初始化
1 2
| p := Person{"Joe", 19} pp := Person{age: 19, Name: "Joe"}
|
2. 匿名结构体的使用
对于匿名结构体,可以在初始化变量的时定义,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| func main() { user := struct { Name string Age int } {Name: "joe", Age: 19 } fmt.Println(user) }
或 user := struct { Name string Age int }{"jor", 10}
|
同样在定义结构体时,也可以使用匿名结构体, 如下:
1 2 3 4 5 6 7 8
| type User struct { Name string Age int Content struct { Tel string Email string } }
|
对于在结构体中的匿名结构体,在初始化的时候,需要如下操作:
1 2 3 4 5 6 7
| func main(){ user := {Name: 大专栏 6. Go 语言中结构体的使用"joe", Age: 10} user.Content.Tel = "12306" user.Content.Email = "214639811@qq.com" }
|
注意:在GO中结构体,就是某些字段的集合,是值类型的,可以进行 ==
比较的,注意必须是相同类型的结构体。
3. 结构体中的匿名字段
结构体中的匿名字段,可以是GO语言内置的,也可以是自定义的类型。GO内置的类型,例子如下:
1 2 3 4
| type Person struct{ string int }
|
对于这种结构体,必须按照顺序进行初始化。
1 2 3 4
| func main() { p := Person{"joe", 10} fmt.Println(p) }
|
在go中没有继承机制,自定义类型的匿名字段在go中叫做组合继承,如下
1 2 3 4 5 6 7 8 9
| type human struct{ Sex string }
type Person struct{ human Name string Age int }
|
对于这种结构体的初始化,按照顺序初始化,如下
1 2 3 4
| func main() { p := Person{human{Sex: "f"}, "joe", 20} fmt.Println(p) }
|
指定字段名进行初始化
1 2 3 4 5 6 7 8 9
| func main() { p := Person{Name: "joe", Age: 10, human: human{Sex: "f"}} p := Person{Name: "joe", Age: 10, human: human{Sex: "f"}} p.Sex = 'm' p.human.Sex = 'f' }
|
对于结构体指着的使用,就不在啰嗦了。
6. Go 语言中结构体的使用
原文:https://www.cnblogs.com/lijianming180/p/12041221.html