go-结构体 发表于 2019-11-20 | 分类于 go 概念结构体是一种聚合的数据类型,有零个或多个任意类型的值聚合成的实体. 声明定义123456789101112131415161718//声明一个结构体类型type Employee struct { id int name string address string}//声明一个结构体类型的变量var aa Employee//访问aa.id//修改aa.id = 1//对成员取地址,通过指针访问name := &a.name*name = "edit" + *name 结构体嵌入和匿名成员嵌入1234567891011121314151617181920212223242526272829303132333435363738394041package main/**// 声明 circle 结构体type Circle struct { x,y,radius int}// 声明 wheel 结构体type Wheel struct { x,y,radius,spokes int}**///随着几何图形增多,结构体声明有许多重复定义,为了便于维护,将共同的属性独立出来type Point struct { x,y int}type Circle struct { Center Point Radius int}type Wheel struct { Circle Circle Spokes int}func main() { var w Wheel w.Circle.Center.y = 8 w.Circle.Center.x = 9 w.Spokes = 20} 嵌套匿名成员1234567891011121314151617181920212223242526272829303132333435363738394041//正常的嵌入结构体访问起来不是很方便,我们可以用go的匿名成员嵌套//Go语言有一个特性让我们只声明一个成员对应的数据类型而不指名成员的名字;这类成员就叫匿名成员。匿名成员的数据类型必须是命名的类型或指向一个命名的类型的指针package maintype Point struct { X,Y int}type Circle struct { Point Radius int}type Wheel struct { Circle Spokes int}func main() { var w Wheel w.X = 8 // 相当于 w.Circle.Point.X = 8 w.Y = 8 // 相当于 w.Circle.Point.Y = 8 w.Radius = 5 w.Spokes = 20 // w = Wheel{8,8,5,20} //结构体字面值没有简短表示匿名成员的方法 此方式不会编译通过 // w = Wheel{X: 8, Y: 8, Radius: 5, Spokes: 20} // compile error: unknown fields //以下两种赋值是都可以的 w = Wheel{ Circle:Circle{ Point:Point{X:8,Y:8}, Radius:5, }, Spokes:20, } w = Wheel{Circle{Point{8,8},5}, 20}}