type tester interface{ test() string() string } type data() func(*data)test() func(data)stirng(string){return "123"} func main(){ var d data // var t tester=d FIXME: 这个是不对的,因为data类型没有实现test和string,*data实现了 var t tester=&d t.test() fmt.Println(t.string() }
空接口可以被赋值为任何对象,默认值是nil 也可以在结构体里面写接口
7.1 定义
接口变量的默认值是nil
接口之间是可以进行是否相等的判断的
可以接口套接口
空接口可以实现任何接口,比如一个空接口叫test,然后另一个接口叫data,那么可以定义 var d data=&test 空接口可以被赋值为任何类型的对象
如果接口A实现了接口B的所有方法,那么可以直接赋值为 var b B=&A,然后可以通过b调用A实现的具体方法了
// A type, typically a collection, that satisfies sort.Interface can be // sorted by the routines in this package. The methods require that the // elements of the collection be enumerated by an integer index. type Interface interface { // Len is the number of elements in the collection. Len() int // Less reports whether the element with // index i should sort before the element with index j. Less(i, j int) bool // Swap swaps the elements with indexes i and j. Swap(i, j int) }
...
// Sort sorts data. // It makes one call to data.Len to determine n, and O(n*log(n)) calls to // data.Less and data.Swap. The sort is not guaranteed to be stable. funcSort(data Interface) { // Switch to heapsort if depth of 2*ceil(lg(n+1)) is reached. n := data.Len() maxDepth := 0 for i := n; i > 0; i >>= 1 { maxDepth++ } maxDepth *= 2 quickSort(data, 0, n, maxDepth) }