接口

关键字interface{}

空接口

可以将所有的类型变量赋值给空接口,空接口可以进行类型断言,再转换为具体的类型变量

定义空接口的格式:

var 变量名 interface{}

例子:空接口赋值与类型推断

package main

import (
	"fmt"
)

func main() {
	// 定义并赋值一个变量v1
	var v1 int = 54

	// 将变量赋值给一个空接口i1
	var i1 interface{} = v1

	// 定义一个变量v2
	var v2 int
	// 对空接口i1进行类型推断,推断成功的话会把值赋给变量v2
	v2, _ = i1.(int)

	fmt.Println(v2)
}

以上代码的运行结果:

类型接口

接口可用于定义一套标准的可操作行为规范,其中包含了各种方法的定义规范。与其他语言不同,golang的接口是一种非侵入式的接口,在类型定义的过程中中不需要知道接口的存在,只会在接口赋值时去判断类型与接口是否匹配。通过这种非侵入式的接口可以更进一步地对代码进行解耦。

定义接口的格式:

例子:接口调用

以上代码的执行结果:

可以这么理解,接口只关心类型能否去执行某个方法,而不会去关心类型中有什么值

类型推断

将接口类型变量转换成其它类型需要使用类型推断,有三种书写方式:

方式一

使用该方式需要确保推断类型是正确的,否则会引发panic错误

方式二

方式三

对于参数类型不确定的情况,推荐使用方式三

例子:通过类型推断对接口变量进行格式转换

最后更新于