天天看點

關于golang中下劃線(_)的語義說明

在閱讀k8s代碼的過程中,經常可以看到下劃線出現在不同的地方,有時候我們并不清楚下劃線代表的具體含義是什麼,有什麼作用,但是又會經常選擇性的忽略這些細節,實際上卻非常重要。

下面我來總結一下下劃線(_)出現的三種場合

這個應該是最簡單的用途,比如某個函數傳回三個參數,但是我們隻需要其中的兩個,另外一個參數可以忽略,這樣的話代碼可以這樣寫:

例如我們定義了一個接口(interface):

然後定義了一個結構體(struct)

然後我們希望在代碼中判斷dog這個struct是否實作了foo這個interface

上面用來判斷dog是否實作了foo, 用作類型斷言,如果dog沒有實作foo,則會報編譯錯誤

假設我們在代碼的import中這樣引入package:

這表示呢在執行本段代碼之前會先調用test/foo中的初始化函數(init),這種使用方式僅讓導入的包做初始化,而不使用包中其他功能

例如我們定義了一個foo struct,然後對它進行初始化

然後在main函數裡面引入test/foo

運作結果如下

我們可以看到:在main函數輸出"hello world"之前就已經對foo對象進行初始化了!