接口
声明
允许定义能够保存任何类型的变量和函数参数,前提是它定义了特定的方法。
使用interface关键字定义一个接口类型,后面跟着一个花括号,内部含有一组方法,以及方法期望的参数和返回值。
如果一个类型包含接口中声明的所有方法,那么它可以在任何需要接口的地方使用,而不需要更多的声明。
测试
package main type myInterface interface { printf() close() } type myInt int64 func (m *myInt)printf() { println("myInt:",*m) } func (m *myInt)close() { println("myInt:Close") } func main() { m:=myInt(1) var a myInterface = &m a.printf() a.close() }
类型断言
当你将一个具体类型的值赋给一个接口类型的变量时,类型断言让你能取回具体类型。这像一种形式的类型转换。它的语法甚至像函数调用和类型转换的合体。在一个接口值之后,你输入一个点,后面接着一对括号括起来的具体类型(或者,你想要断言的值的具体类型)。
一旦你使用类型断言来取回具体类型的值,你可以调用那个类型上的方法,但这方法并不属于接口。
package main type myInterface interface { printf() close() } type myInt int64 func (m *myInt)printf() { println("myInt:",*m) } func (m *myInt)close() { println("myInt:Close") } func (m *myInt)make() { print("make") } func main() { m:=myInt(1) var a myInterface = &m a.printf() a.close() a1 ,a2 := interface{}(a).(myInt) println(a1,a2) a1.make() }
- 在这里只要是在声明时或函数传进来的参数不是interface类型那么做类型断言都是回报 non-interface的错误的
- 所以我们只能通过将s作为一个interface{}的方法来进行类型断言
空接口
Interface{}类型称为空接口,用来接收任何类型的值。不需要实现任何方法来满足空接口,所以所有的类型都满足它。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!




