• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

【Go】基础语法之接口

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

接口定义:

利用关键字interface来定义一个接口,接口是一组方法的集合。

例如:

type People interface {
    Show(name string, age int) (id int, err error)  
    Set(name string, age int)
}

接口的实现:

跟结构体的成员方法实现是一样的。

func (object of implement func) func_name (parameters) (return type){

    ....//func body

}

例如:

package main

import "fmt"
func main() {
    fmt.Println("=================Live interface===============")
    var live Live
    s := &Student{People{"puyangsky", 22, 007}, 0}
    live = s
    live.speak("I am happy")
    live.eat()
    fmt.Println("================Earn interface================")
    var earn Earn
    earn = &Worker{People{"humeiling", 22, 002}, 0}
    earn.eat()
    earn.work()
    earn.getMoney(100)
    fmt.Println("=====================End======================")
}


type People struct {
    name string
    age int32
    id int32
}

type Student struct{
    People
    grade float32
}

type Worker struct{
    People
    salary float32
}

type Live interface {
    eat()
    speak(something string)
}

type Earn interface {
    eat()
    work()
    getMoney(money int32)
}

func (s *Student) eat()  {
    fmt.Printf("%s is eating...\n", s.name)
}

func (s *Student) speak(something string) {
    fmt.Printf("%s is speaking: %s\n", s.name, something)
}

func (w *Worker) eat()  {
    fmt.Printf("%s is eating ...\n", w.name)
}

func (w *Worker) work()  {
    fmt.Printf("%s is working...\n", w.name)
}

func (w *Worker) getMoney(money int32) {
    fmt.Printf("%s earned %d money..\n", w.name, money)
}

结果如下:

 

接口的使用:

一个结构体必须实现了一个接口的所有方法,才能被一个接口对象接受。这一点和Java语言中的接口的要求是一样的。

例如上例中的Live接口的对象live,只能接受实现了Live接口所有方法的Student结构体的对象,而不能接受其他结构体的对象。

一个接口可以被多个结构体实现,一个结构体可以实现多个接口的方法,是多对多的关系。

使用方法:先定义一个接口的对象,用实现了该接口所有方法的结构体的对象来初始化该接口对象,然后就可以通过该接口对象来访问接口的方法。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
1个Fabric-sdk-go案例-访问yaml配置并创建SDK实例发布时间:2022-07-10
下一篇:
Julia : 如何在Atom中能用上go to definition?发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap