golang结构体的嵌入类型和接口-创新互联
结构体的嵌入类型

1、嵌入结构体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 : xiaoming2、嵌入结构体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接口
1、定义接口
在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.265482457436692、接口嵌入
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 //执行结果一致另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网站标题:golang结构体的嵌入类型和接口-创新互联
本文网址:http://www.scyingshan.cn/article/csioej.html


咨询
建站咨询
