Go语言圣经 .6.接口
接口
接口即约定
接口类型
一个接口类型定义了一套方法,如果一个具体类型要实现该接口,那么必须实现接口类型定义中的所有方法。
例如:
package io |
实现接口
如果一个类型实现了一个接口要求的所有方法,那么这个类型实现了这个接口。
接口的赋值规则:仅当一个表达式实现了一个接口时,这个表达式才可以赋值给该接口
var w io.Writer |
空接口类型inferface{}
,可以将任何值赋给它。
使用flag.Value来解析参数
package main |
❯ go run .\sleep.go |
接口值
从概念上讲,一个接口类型的值(简称接口值)其实有两个部分:一个具体类型和该类型的一个值。称为接口的动态类型和动态值。
Go语言中,变量总是初始化一个特定的值,接口也不例外。接口的零值就是把它的动态类型和动态值都设置为nil。
使用sort.Interface来排序
http.Handler接口
error接口
示例:表达式求值器
类型断言
类型断言是一种作用在接口值上的操作,写出来类似于x.(T)
,其中x是一个接口类型的表达式,而T是一个类型(称为断言类型)。类型断言会检查作为操作数的动态类型是否满足指定的断言类型。
类型断言有两种情况,
- 断言类型T是具体的类型:检查x的动态类型是否就是T
- 成功:返回x的动态值, 换句话说,具体类型的类型断言从它的操作对象中获得具体的值
- 失败:panic
- 断言类型是一个接口类型:检查x的动态类型是否满足T