21 Golang中的接口(一)

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

Golang中接口定义了对象的行为规范,只定义规范不实现。接口中定义的规范由具体的对象来实现。

每个接口由数个方法组成,接口的定义格式如下:

type 接口名 interface {
    方法名1 (参数列表1) 返回值列表1
    方法名2 (参数列表2) 返回值列表2
    ……
}
  1. 接口名:使用type将接口定义为自定义的类型名。Go语言的接口在命名时,一般会在单词后加er,eg:写操作的接口叫Writer,有字符串功能的接口叫Stringer等。
  • demo

如果接口中有方法,必须要通过结构体或者通过自定类型实现这个接口

package main

import "fmt"

type Usber interface {
    start()
    stop()
}

type Phone struct {
    Name string
}

type Camera struct {
    Name string
}

func (p Phone) start() { 
    fmt.Println(p.Name, "启动")
}

func (p Phone) stop() {
    fmt.Println(p.Name, "关机")
}

func (p Camera) start() {
    fmt.Println(p.Name, "启动")
}

func (p Camera) stop() {
    fmt.Println(p.Name, "关机")
}

func (p Camera) takePhoto() {
    fmt.Println(p.Name, "在拍照")
}


func main() {
    p := Phone {
        Name : "Huawei",
    }
    p.start()
    //Huawei 启动
    var p1 Usber
    p1 = p //手机实现了Usb接口
    p1.stop()
    //Huawei 关机
    
    c := Camera {
        Name : "Canon",
    }
    
    var c1 Usber = c //表示相机实现了Usb接口
    c1.start()
    //c1.takePhoto()//type Usber has no field or method takePhoto
    c.takePhoto()
    //Canon 在拍照
}
  • demo2
package main

import "fmt"

type Usber interface {
    start()
    stop()
}

// 电脑
type Computer struct {
}

func (c Computer) work (usb Usber) {
    usb.start()
    usb.stop()
}

//手机
type Phone struct  {
    Name string
}

type Camera struct {
}

func (p Phone) start() {
    fmt.Println(p.Name, "启动")
}

func (p Phone) stop(){
    fmt.Println(p.Name, "关机")
}

func (p Camera) start() {
    fmt.Println("相机启动")
}

func (p Camera) stop() {
    fmt.Println("相机关机")
}

func main() {
    var computer = Computer{}
    var phone = Phone{
        Name:"Xiaomi",
    }
    computer.work(phone)
    //Xiaomi 启动
    //Xiaomi 关机
    var camera = Camera{}
    computer.work(camera)
    //相机启动
    //相机关机
}

注意,当注释掉上面Camerastartstop方法时,执行Computer.work(camera)时就会报错,因为传入的camera没有实现usb接口的方法


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

本文来自:简书

感谢作者:learninginto

查看原文:21 Golang中的接口(一)

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

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