21 Golang中的接口(一)


本文摘自网络,作者,侵删。

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中的接口(一)

相关阅读 >>

Golang如何做一个服务器?

数据结构6:栈、队列、堆

理解 Go 1.13 中 sync.pool 的设计与实现

Golang flag是什么

kubeedge v1.3部署指南

手撸Golang 基本数据结构与算法 哈希表

Golang字符串国际化

详解Golang数组的传递

Golang定时任务解决方案

[系列] - Go-gin-api 规划目录和参数验证(二)

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...