美文网首页
13.手撕Go语言-接口

13.手撕Go语言-接口

作者: imsilence | 来源:发表于2019-06-26 23:10 被阅读0次

    接口是自定义类型,是对是其他类型行为的抽象

    定义

    接口定义使用interface标识,声明了一系列的函数签名
    (函数名、函数参数、函数返回值),在定义接口时可以指定接口名称,在后续声明接口变量时使用

    13.01.png

    声明

    声明接口变量只需要定义变量类型为接口名,此时变量被初始化为nil

    13.02.png

    赋值

    类型对象

    当自定义类型实现了接口类型中声明的所有函数时,则该类型的对象可以赋值给接口变量,并使用接口变量调用实现的接口

    1. 方法接收者全为值类型的方法

      13.03.png 13.04.png
    2. 方法接收者全为指针类型的

      13.05.png 13.06.png
    3. 方法接收者既有值类型又有指针类型的

      13.07.png

      赋值应该使用哪一个?原因?

      13.08.png 13.09.png
    4. 问题

      13.10.png

    接口对象

    当接口(A)包含另外一个接口(B)中声明的所有函数时(A接口函数时B接口函数的父集,B时A的子集),则接口(A)的对象也可以赋值给其子集的接口(B)变量

    13.11.png 13.12.png

    若两个接口声明同样的函数签名,则者两个接口完全等价

    当类型和父集接口赋值给接口变量口,只能调用接口变量定义接口中声明的函数(方法)

    类型断言&查询

    当父集接口或者类型对象赋值给接口变量后,需要将接口变量重新转换为原来的类型,需要使用类型断言/查询

    断言

    语法: 接口变量.(Type)

    13.13.png

    查询

    可以通过switch-case+接口变量.(type)查询变量类型,并选择对应的分支块

    13.14.png

    接口匿名嵌入

    接口之中也可以嵌入已存在的接口,从而实现接口的扩展

    定义

    13.15.png

    实现

    13.16.png

    使用

    13.17.png

    匿名接口

    在定义变量时将类型指定为接口的函数签名的接口,此时叫匿名接口。匿名接口常用于初始化一次接口变量的场景

    13.18.png

    空接口

    不包含任何函数签名的接口叫空接口,空接口声明的变量可以赋值为任何类型的变量(任意接口)

    定义

    语法: interface{}

    13.19.png

    使用场景

    常声明函数参数类型为interface{},用于接收任意类型的变量

    13.20.png 13.21.png

    相关文章

      网友评论

          本文标题:13.手撕Go语言-接口

          本文链接:https://www.haomeiwen.com/subject/qdrkcctx.html