码迷,mamicode.com
首页 > 其他好文 > 详细

Go 接口

时间:2020-07-02 19:58:47      阅读:52      评论:0      收藏:0      [点我收藏+]

标签:back   iter   amp   返回值   block   lse   tin   种类型   方法   

接口是一种类型

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

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

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

例子:定义一个接口

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

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

值接收者实现接口:可以把值或者指针赋给接口类型变量
func (a a1)Run{...}
需要 var b writer = a1(...)
或 var b writer = &a1(...)


指针接收者实现接口: 只能把指针赋给接口类型变量
func (a *a1)Run{...}
只能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\n", a, a)
}

 

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

 

Go 接口

标签:back   iter   amp   返回值   block   lse   tin   种类型   方法   

原文地址:https://www.cnblogs.com/staff/p/13226479.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!