跟C语言或其它语言一样,也有结构体struct。C语言中用关键词typedef来给结构体定义,Go中用的都是type。
struct语法格式
type typeName struct {
...
}
例如:
type person struct {
name string
age int
}
struct声明
var P person
P.name = "Sun"
P.age = 30
//也可以
P := peron{"Sun", 30}
//通过 field:value 的方式初始化,这样可以任意顺序
P := person{age:29, name:"Sun"}
上面有三种声明的方法,其中第三种比较特殊,是Go独有的声明。
struct的匿名字段
匿名字段也称为嵌入字段,C语言中也有这个功能,但是再Go中它比C更强大,更自由。
package main
import "fmt"
type Course []string
type Student struct {
name string
age int32
grade string
}
type Class struct {
Student // 匿名字段,struct
Course // 匿名字段,自定义的类型
int32 // 内置类型作为匿名字段
teacher string
}
func main() {
stu1 := Class{Student: Student{"Rob", 10, "4年纪"}, teacher: "杰伦"}
//修改Course字段
stu1.Course = make([]string, 5)
stu1.Course[0] = "English"
stu1.Course = append(stu1.Course, "Chinsese")
//修改匿名内置类型字段
stu1.int32 = 4
fmt.Print(stu1)
}
输出:
{{Rob 10 4年纪} [English Chinsese] 4 杰伦}
上面的例子,可以看出Go中的struct不仅可以将struct作为匿名字段,用type自定的类型以及内置的类型都可以作为匿名字段。这点比C语言要强大自由多了。
有疑问加站长微信联系(非本文作者)