分享
  1. 首页
  2. 文章

【Go】基础语法之接口

puyangsky · · 1629 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

接口定义:

利用关键字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结构体的对象,而不能接受其他结构体的对象。

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

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


有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:puyangsky

查看原文:【Go】基础语法之接口

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
1629 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏