本文视频地址
为什么要做这一节,有一些小伙伴,把一些代码给我看,说同时写了的代码,参数是 interface{} 空接口,看不懂,不晓得是做什么的,那么咱们上面就看看空接口当参数的是不是适合?
// $GOROOT/src/io/io.go
type Reader interface {Read(p []byte) (n int, err error)
}
Go 编译器通过剖析该接口定义失去接口的名称信息以及其办法信息,此接口类型参数赋值时,编译器会依据这些信息对实参进行查看。如果函数或办法的参数类型为空接口 interface{},那么,空接口不会提供任何信息给编译器。如果你在函数或办法中应用空接口类型,意味着你不想给编译器提供对于传入参数数据的任何信息,所以,将不会有动态类型语言类型安全检查的 –”保障”,你须要本人解决。
规范库里应用 interface{} 空接口作为参数类型的办法和函数非常少。应用 Interface{} 作为参数类型的函数和办法次要有两类:
1 容器算法类: sync.Map、list、sort、heap 等。
2 格式化日之类: fmt、log 等。
下面这些独特的特点就是他们面对的都是未知的类型的数据,所以应用了 interface{}, 就是 Go 语言还没有反对泛型的起因,集体认为就是长期计划,如果当前有了泛型,会应用泛型解决。