第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Golang 接口學(xué)習(xí)心得(一)

標(biāo)簽:
Go
package main

import "math"
import "fmt"

/*

一直对接口和结构体以及成员方法之间的联系很难确定,今天终于对接口有了新的认识,笔记如下

定义了一个 Shape 接口,

该接口有两个方法,Area和Perimeter,并且分别写了两个Get方法,用来分别计算面积和周长(这一步其实是没用的)

随后,

分别定义了长方形和圆形的结构体,并且分别实现了 Shape 接口.

在 func main() {} 中,

分别用了 Get 方法和调用 interface 成员方法去计算周长和面积,可以看出,

接口的作用就在于去作为"中间体"去调用结构体的成员方法

没有必要再去对借口内部的方法进行重新定义!!

Shit !!! 拨开乌云见日月了

按照这个思路,可以用自己的思路去重写刘坚君老师布置的 "software_company" 作业了,

再也不用拘束在老师定义的结构体成员方法和接口内了



补充说明:

之后我又定义了一个"正方形"的结构体,但是仅实现计算面积的成员方法,

在 main 方法中通过 Shape 接口去计算正方形的面积会怎么样呢?

结果如下:

cannot convert &square (type Square) to type Shape: Square does not implement Shape (missing perimeter method)

提示 "正方形" 这个结构体没有实现 "perimeter" 这个方法,

添加 "perimeter" 方法后即可计算正方形面积

这就是所谓的 "只要结构体实现了接口的所有方法,它就实现了这个接口!"

虽然就是这么回事,但是理解和不理解之间,写 interface 的感觉是不一样的.现在我可以按照自己的想法去定义接口里面的方法了,

虽然不一定是最合理的,但是一定是有一定意义的.



—— END
*/

//------------接口------------//

type Shape interface {
    area() float64      // 计算面积
    perimeter() float64 // 计算周长
}

func GetArea(shape Shape) float64 {
    return shape.area()
}

func GetPeri(shape Shape) float64 {
    return shape.perimeter()
}

//------------矩形------------//

type Rect struct {
    width, height float64
}

func (r *Rect) area() float64 {
    return r.width * r.height
}

func (r *Rect) perimeter() float64 {
    return (r.height + r.width) * 2
}

//------------圆形------------//

type Circle struct {
    radius float64
}

func (c *Circle) area() float64 {
    return math.Pi * c.radius * c.radius
}

func (c *Circle) perimeter() float64 {
    return 2 * math.Pi * c.radius
}

//------------方形------------//

type Square struct {
    side float64
}

func (s *Square) area() float64 {
    return s.side * s.side
}

func (s *Square) perimeter() float64 {
    return s.side * 4
}

/ =========================================================== /

func main() {
    rect := Rect{
        width:  0.5,
        height: 1.5,
    }
    fmt.Println("矩形的周长是:", GetPeri(&rect))
    fmt.Println("矩形的面积是:", GetArea(&rect))

    circle := Circle{
        radius: 1,
    }
    fmt.Println("圆形的周长是:", Shape(&circle).perimeter())
    fmt.Println("圆形的面积是:", Shape(&circle).area())

    square := Square{
        side: 0.5,
    }
    fmt.Println("正方形的面积是:", Shape(&square).area())
}
點(diǎn)擊查看更多內(nèi)容
9人點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
JAVA開(kāi)發(fā)工程師
手記
粉絲
0
獲贊與收藏
35

關(guān)注作者,訂閱最新文章

閱讀免費(fèi)教程

感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專(zhuān)欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消