package main
import (
"fmt"
"math"
)
/*
记录个笔记,关于接口内的方法,返回值包含接口。
首先如下:
我定义了 Shape 接口,该接口有 Round() 方法,返回值为 float64,
又定义了 Value 接口,该接口有 Calculate() 方法,但是其返回值为 Shape 接口类型!
首先,我定义了 Circle 结构体,用来实现 Round() 方法,根据接口的实现的定义 "一个结构体,实现了接口的所有方法,他就实现了这个接口!",
可以看出,Circle 结构体已经实现了 Shape 接口!
然后,我定义了 Str 结构体,实现了 Value 接口。
关键点在于:
在 Value 接口的 Calculate() 方法中,我的返回值,实际上是指针型的 Circle 结构体!!!
也就是说,虽然 Calculate() 要返回的是 Shape 接口类型,但实际上,需要的是实现 Shape 接口的结构体!
并不是要返回某个接口!这一点,困扰了我两天,希望以后看到笔记,能有所领会!
此外!!
error 其实也是一个接口类型,无形之中我已经做了很多次方法返回接口类型参数的实例,
然而处于一种 "知其然不知其所以然" 的状态!
小师傅说过,多学原理,长点心吧!
PS: 终于领会到了一句话 "只可意会不可言传"!!
*/
type Shape interface {
Round() float64
}
type Value interface {
Calculate() Shape
}
type Circle struct {
radius float64
}
type Str struct {
}
func (str *Str) Calculate() Shape {
cir := &Circle{
radius:0.5,
}
res2 := Shape(cir).Round()
fmt.Println(cir.radius)
fmt.Println(res2)
return cir
}
func (cir *Circle) Round() float64 {
//cir.radius = a
fmt.Println(">>>>>",cir.radius)
round := cir.radius * math.Pi * 2
return round
}
func main() {
str := &Str{}
res1 := Value(str).Calculate()
fmt.Println(res1)
}
热门评论
好