对Golang interface的理解

栏目: Go · 发布时间: 5年前

内容简介:interface是一组method(方法)的组合,我们通过interface来定义对象的一组行为。interface类型定义了一组方法,如果某个对象实现了某个接口的所有方法,则此对象就实现了此接口。(如果给鸭子模型定义划水的方法,当我再新建立一个鸟的对象,让它实现划水的方法,这时我可以认为鸟也是鸭子)

什么是interface

interface是一组method(方法)的组合,我们通过interface来定义对象的一组行为。

interface类型

interface类型定义了一组方法,如果某个对象实现了某个接口的所有方法,则此对象就实现了此接口。

(如果给鸭子模型定义划水的方法,当我再新建立一个鸟的对象,让它实现划水的方法,这时我可以认为鸟也是鸭子)

一个例子:

type Human struct {

    name string

    age int

    phone string

}

type Student struct {

    Human //匿名字段Human

    school string

    loan float32

}

type Employee struct {

    Human //匿名字段Human

    company string

    money float32

}

//Human对象实现Sayhi方法

func (h *Human) SayHi() {

    fmt.Printf("Hi, I am %s you can call me on %s\n", h.name, h.phone)

}

// Human对象实现Sing方法

func (h *Human) Sing(lyrics string) {

    fmt.Println("La la, la la la, la la la la la...", lyrics)

}

//Human对象实现Guzzle方法

func (h *Human) Guzzle(beerStein string) {

    fmt.Println("Guzzle Guzzle Guzzle...", beerStein)

}

// Employee重载Human的Sayhi方法

func (e *Employee) SayHi() {

    fmt.Printf("Hi, I am %s, I work at %s. Call me on %s\n", e.name,

        e.company, e.phone) //此句可以分成多行

}

//Student实现BorrowMoney方法

func (s *Student) BorrowMoney(amount float32) {

    s.loan += amount // (again and again and...)

}

//Employee实现SpendSalary方法

func (e *Employee) SpendSalary(amount float32) {

    e.money -= amount // More vodka please!!! Get me through the day!

}

// 定义interface

type Men interface {

    SayHi()

    Sing(lyrics string)

    Guzzle(beerStein string)

}

type YoungChap interface {

    SayHi()

    Sing(song string)

    BorrowMoney(amount float32)

}

type ElderlyGent interface {

    SayHi()

    Sing(song string)

    SpendSalary(amount float32)

}

通过上面的代码我们可以知道

  • interface可以被任意对象调用和实现。

  • 一个对象可以实现任意多个interface。

形象的比喻:每个物种都是一个类,我们给这个类定义一系列的行为,例如给鸟类定义可以飞行的行为,给狗定义可以“汪汪”的声音,给人类定义可以说话可以跑步的行为,那么当你和我都实现了说话和跑步的行为,你我都属于人类,你和我都实现了飞行的行为,你我都属于鸟类,以此类推。这么做的意义在于,实现代码的高度使用。

思考:errors 这个 package 里面的 errors.New 到底是做什么的?

errors 包实现了创建错误值的函数。

func New(text string) error

使用字符串创建一个错误,可以类比fmt包的Errorf方法,差不多可以认为是New(fmt.Sprintf(...))。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Beginning XSLT 2.0

Beginning XSLT 2.0

Jeni Tennison / Apress / 2005-07-22 / USD 49.99

This is an updated revision of Tennison's "Beginning XSLT", updated for the new revision of the XSLT standard. XSLT is a technology used to transform an XML document with one structure into another ......一起来看看 《Beginning XSLT 2.0》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具