让咱们一块儿Go(十三)

前言:

上篇,咱们了解了Go语言接口的一些知识,在这篇中,咱们将继续聊聊接口这东西。数组

 

Go语言空接口

Go语言中定义一个空接口,也就是没有任何函数须要实现的接口就是一个空接口,做为一个空接口,由于对象无需实现它的函数,因此它能够指向任何对象,看下面的示例:

上面的empty接口变量分别能够被赋值为int类型,string类型,结构类型和数组类型等等。最后,使用Println打印出相应的内容。那么,fmt包的Println函数又是如何知道这个要打印的变量是什么类型的呢?这就须要用到接口的类型断言了。函数

类型断言

什么是类型断言呢?类型断言是在运行时才会起推断做用的,既然是类型断言,固然是对变量是什么类型进行判断了。如上面的例子,最后说的Println函数,其实它的函数参数是这样的:

经过以前的学习,咱们知道这是一个可变参数,并且类型是一个空接口,空接口是能够指向任何对象的,继续翻出Fprintln函数,而后继续往下翻,最终会查看该类型是否实现了String()方法,有的话就直接反射来变量成员。对于内置类型则以下:

未把所有代码展现出来,可是咱们已经看到了类型断言的用法了。断言出类型后,就会经过switch case去匹配类型,若是匹配到就执行相应的操做。知道了用法,咱们也来试试吧:

这样在运行时,Go语言断言了i的类型,并执行了相应操做。为了证实这是在运行时发生的,咱们再来看一个例子:

完成后,咱们能够顺利的完成编译,可是运行后会有一个panic:

告诉咱们原来是没有实现Testone的方法。学习

本篇小结:

今天就到这里,关于类型断言今天就有个认识就能够了,之后咱们会用它解决更实际的东西。spa