• Go 接口


    接口是一种类型

    (实现多态的特性),规定了其他类型的方法,接口既然是一种类型,那可以做为参数和返回值
    接口的保存分为两部分:动态类型动态值

    type 接口类型名 interface{
        方法名1( 参数列表1 ) 返回值列表1
        方法名2( 参数列表2 ) 返回值列表2
        …
    }

    接口没有指针接口这一说,只有实现接口的结构体有指针方法或实例方法

    只要实现了接口中所有的方法,都是该接口类型,“实现”是指,方法名和参数和返回值类型都一样。

    例子:定义一个接口

    type Runner interface {
        Run(int, int) (string, string)
        ...
    }

    值接收者 vs 指针接收者实现接口

    值接收者实现接口:可以把值或者指针赋给接口类型变量   writer 为接口  a1为实现了接口的
    func (a MyWriter)Run{...}       // MyWriter是实现Writer接口的结构体
    需要 var b Writer = a1(...)
    或 var b Writer = &a1(...)


    指针接收者实现接口: 只能把指针赋给接口类型变量   a1为接口
    func (a *MyWriter)Run{...}     // MyWriter是实现Writer接口的结构体
    只能var b Writer = &a1(...)

    多个类型可以实现同一个接口

    一个类型可以实现多个接口

    接口嵌套

    // Sayer 接口
    type Sayer interface {
        say()
    }

    // Mover 接口
    type Mover interface {
        move()
    }

    // 接口嵌套
    type animal interface {
        Sayer
        Mover
    }

    空接口

    type xx interface{}
    任何类型都实现了这个接口,任何类型变量都可以赋值给它,没有必要起名字,通常定义成
    interface {}

    // 空接口作为函数参数,可以接收任意类型的函数参数
    func show(a interface{}) {
        fmt.Printf("type:%T value:%v ", a, a)
    }

    // 空接口作为map值,实现value可以保存任意类型的字典。
    var studentInfo = make( map[string]interface{} )
    studentInfo["name"] = "你好"
    studentInfo["age"] = 18
    studentInfo["married"] = false
    fmt.Println(studentInfo)

  • 相关阅读:
    如何实现序列化为json
    unity中camera摄像头控制详解
    eclipse配置c开发环境
    uml和模式01
    angular2开发01
    微信公众平台开发01
    最新无线网卡驱动安装
    交换ctrl和caps_loack的新方法
    web.xml文件详解
    设计模式中的里氏代换原则
  • 原文地址:https://www.cnblogs.com/staff/p/13226479.html
Copyright © 2020-2023  润新知