golang 入门(五) 常用数据结构struct结构体
原创
©著作权归作者所有:来自51CTO博客作者hellowgw的原创作品,请联系作者获取转载授权,否则将追究法律责任
如前文所述,Python中的kv数据结构只有dict字段一种类型。但是golang中除了上文提到过的map映射外,还有一种数据类型是struct结构体,它也算是被用来存储kv类型的数据。struct的value数据类型没有map那么严格,可以是任意数据类型。
package main
import "fmt"
// 定义结构体的中字段及类型
type Student struct {
Name string
Age int
}
func main() {
// 实例化结构体并为字段赋值
var s1 Student
s1.Name = "wgw"
s1.Age = 18
// 快捷赋值方式
s2 := Student{"wgw2", 20}
fmt.Println(s1.Name)
fmt.Println(s2.Age)
}
运行结果
结构体中的字段名称、数量、类型在声明的时候就已经确定,实例化阶段只能对字段进行赋值。不支持对字段的增删操作,这点与map完全不同。
把定义好的struct作为函数的参数使用
package main
import "fmt"
// 定义结构体的中字段类型
type Student struct {
Name string
Age int
}
func Info(s Student) (string, int) {
var msg string
if s.Age > 19 {
msg = "你超过19岁了哦"
} else {
msg = "你不到19岁哦"
}
return msg, s.Age
}
func main() {
// 实例化结构体并为字段赋值
var s1 Student
s1.Name = "wgw"
s1.Age = 18
s2 := Student{"wgw2", 20}
ret, age := Info(s1)
fmt.Println(ret, age)
fmt.Println("-----")
ret, age = Info(s2)
fmt.Println(ret, age)
}
运行结果
% go run main.go
你不到19岁哦 18
-----
你超过19岁了哦 20
结构体的操作就这么一点点,其实操作还是非常简单的。最后就是演示一下结构体的嵌套。在上文的结构体再嵌入一个声明宠物puppet信息的结构体(显式调用)。
package main
import "fmt"
// 定义结构体的中字段类型
type Puppet struct {
Name string
Animal string
}
type Student struct {
Name string
Age int
// 显式调用,明确的为字段声明一个名字 并注明数据类型是上面定义的结构体类型
Pupe Puppet
}
func Info(s Student) (string, int, string) {
var msg string
if s.Age > 19 {
msg = "你超过19岁了哦"
} else {
msg = "你不到19岁哦"
}
return msg, s.Age, s.Pupe.Animal
}
func main() {
// 实例化结构体并为字段赋值
var s1 Student
s1.Name = "wgw"
s1.Age = 18
s1.Pupe.Name = "haha"
s1.Pupe.Animal = "dog"
s2 := Student{"wgw2", 20, Puppet{"hoho", "cat"}}
ret, age, animal := Info(s1)
fmt.Println(ret, age, animal)
fmt.Println("-----")
ret, age, animal = Info(s2)
fmt.Println(ret, age)
}
运行结果
% go run main.go
你不到19岁哦 18 dog
-----
你超过19岁了哦 20 cat