Interface类型可以定义一组方法,但是这些不需要实现。并且interface不能包含任何变量。
type example interface{ Method1(参数列表) 返回值列表 Method2(参数列表) 返回值列表 … var a example a.Method1() }
interface类型默认是一个指针
接口实现:
a. Golang中的接口,不需要显示的实现。只要一个变量,含有接口类型中的所有方法,那么这个变量就实现这个接口。因此,golang中没有implement类似的关键字
b. 如果一个变量含有了多个interface类型的方法,那么这个变量就实现了多个接口。
c.如果一个变量只含有了1个interface的方部分方法,那么这个变量没有实现这个接口。
接口嵌套
一个接口可以嵌套在另外的接口,如下所示
type ReadWrite interface { Read(b Buffer) bool Write(b Buffer) bool } type Lock interface { Lock() Unlock() } type File interface { ReadWrite Lock Close() }
实例:
package main import "fmt" type Reader interface { Read() } type Writer interface { Write() } type ReadWriter interface { Reader Writer } type File struct { } func (f *File) Read() { fmt.Println("read data") } func (f *File) Write() { fmt.Println("write data") } func Test(rw ReadWriter) { rw.Read() rw.Write() } func main() { var f *File Test(f) var b interface{} b = f v, ok := b.(ReadWriter) fmt.Println(v, ok) }
类型断言
由于接口是一般类型,不知道具体类型,如果要转成具体类型,可以采用以下方法进行转换:
/* var t int var x interface{} x = t y = x.(int) //转成int