亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

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下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消