zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    使用 Hibernate 完成 HibernateUtils 类 (适用于单独使用Hibernate或Struts+Hibernate)
    python 面向对象(成员,静态,类)的(变量,方法)区别
    python 2.7 字符串处理
    python 2 range, list, and set
    python debug小技巧&&工程能力的几点建议
    python 数据类型转换
    python 2 控制台传参,解包,编码问题初探
    带搜索图标的文本框
    Jquery 实现标签切换效果
    javascript 获取当前日期 月份 时间
  • 原文地址:https://www.cnblogs.com/staff/p/13226479.html
Copyright © 2011-2022 走看看