interface{}称之为空接口,可以用来接受任何类型的值。由于interface{}不需要实现任何方法,故所有的类型都满足它。
下面我们看一个简单空接口例子:
package main
import "fmt"
func printAnything(thing interface{}){
fmt.Println(thing)
}
func main() {
printAnything(1)
printAnything("Hello")
printAnything(true)
}
//结果
1
Hello
true
想调用空接口上的方法,就需要使用到类型断言,将空接口转换成具体的类型后,再进行调用,例如:
package main
import "fmt"
type Singer string
func(w Singer) Sing(){
fmt.Println(string(w))
}
func MakeSound(thing interface{}) {
//使用类型断言,将空接口转换成具体类型
singer,ok :=thing.(Singer)
if ok {
singer.Sing()
}
}
func main() {
MakeSound(Singer("Go Away"))
}
//结果
Go Away