让我们一起Go(十三)
前言:
上篇,我們了解了Go語言接口的一些知識,在這篇中,我們將繼續聊聊接口這東西。
?
Go語言空接口
Go語言中定義一個空接口,也就是沒有任何函數需要實現的接口就是一個空接口,作為一個空接口,因為對象無需實現它的函數,所以它可以指向任何對象,看下面的示例:
上面的empty接口變量分別可以被賦值為int類型,string類型,結構類型和數組類型等等。最后,使用Println打印出相應的內容。那么,fmt包的Println函數又是如何知道這個要打印的變量是什么類型的呢?這就需要用到接口的類型斷言了。
類型斷言
什么是類型斷言呢?類型斷言是在運行時才會起推斷作用的,既然是類型斷言,當然是對變量是什么類型進行判斷了。如上面的例子,最后說的Println函數,其實它的函數參數是這樣的:
通過之前的學習,我們知道這是一個可變參數,而且類型是一個空接口,空接口是可以指向任何對象的,繼續翻出Fprintln函數,然后繼續往下翻,最終會查看該類型是否實現了String()方法,有的話就直接反射來變量成員。對于內置類型則如下:
未把全部代碼展示出來,但是我們已經看到了類型斷言的用法了。斷言出類型后,就會通過switch case去匹配類型,如果匹配到就執行相應的操作。知道了用法,我們也來試試吧:
這樣在運行時,Go語言斷言了i的類型,并執行了相應操作。為了證明這是在運行時發生的,我們再來看一個例子:
完成后,我們可以順利的完成編譯,但是運行后會有一個panic:
告訴我們原來是沒有實現Testone的方法。
本篇小結:
今天就到這里,關于類型斷言今天就有個認識就可以了,以后我們會用它解決更實際的東西。
轉載于:https://www.cnblogs.com/vimsk/p/3273369.html
總結
以上是生活随笔為你收集整理的让我们一起Go(十三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android AIDL服务
- 下一篇: 无法识别的属性 configProtec