为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 接口学习心得(二)

标签:
Go
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)
}
点击查看更多内容
6人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
0
获赞与收藏
35

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消