1、结构体的嵌套一
package main
import "fmt"
type Person struct {
name string
}
type Student struct {
class int
person Person //定义person 类型为Person
}
func main(){
s := Student{1,Person{"xiaoming"}}
fmt.Println("name :",s.person.name) //访问嵌入结构体的变量
}
//执行结果:
//name : xiaoming
2、结构体的嵌套二
package main
import "fmt"
type Person struct {
name string
}
type Student struct {
class int
Person //我们直接将Person引入到Student
}
func main(){
s := Student{1,Person{"xiaoming"}}
fmt.Println("name :",s.name) //访问时可以直接访问s.name 而不需要s.person.name
}
//执行结果:
//name: xiaoming
3、接口嵌套(定义)
定义接口,在go语言中,接口是定义了类型一系列方法的列表,如果一个类型实现了该接口所有的方法,那么该类型就符合该接口
package main
import "fmt"
import "math"
type Shape interface {
area() float64
}
type Rectangle struct {
width float64
height float64
}
type Circle struct {
radius float64
}
func (r Rectangle) area() float64 {
return r.height * r.width
}
func (c Circle) area() float64 {
return math.Pi * math.Pow(c.radius,2)
}
func getArea(shape Shape) float64 {
return shape.area()
}
func main(){
r := Rectangle{20,10}
c := Circle{4}
fmt.Println("Rectangle Area =",getArea(r))
fmt.Println("Circle Area =",getArea(c))
}
//执行结果:
//Rectangle Area = 200
//Circle Area = 50.26548245743669
4、接口嵌套
package main
import "fmt"
import "math"
type Shape interface {
area() float64
}
type MultiShape interface {
Shape //嵌入式
}
type Rectangle struct {
width float64
height float64
}
type Circle struct {
radius float64
}
func (r Rectangle) area() float64 {
return r.height * r.width
}
func (c Circle) area() float64 {
return math.Pi * math.Pow(c.radius,2)
}
func getArea(shape MultiShape) float64 { //改为MultiShape
return shape.area()
}
func main(){
r := Rectangle{20,10}
c := Circle{4}
fmt.Println("Rectangle Area =",getArea(r))
fmt.Println("Circle Area =",getArea(c))
}
//执行结果:
//Rectangle Area = 200
//Circle Area = 50.26548245743669 //执行结果一致