關於golang中下劃線(_)的語義說明
在閱讀k8s程式碼的過程中,經常可以看到下劃線出現在不同的地方,有時候我們並不清楚下劃線代表的具體含義是什麼,有什麼作用,但是又會經常選擇性的忽略這些細節,實際上卻非常重要。
下面我來總結一下下劃線(_)出現的三種場合
用在返回值
這個應該是最簡單的用途,比如某個函式返回三個引數,但是我們只需要其中的兩個,另外一個引數可以忽略,這樣的話程式碼可以這樣寫:
v1, v2, _ := function(...)
用在變數(特別是介面斷言)
例如我們定義了一個介面(interface):
type Foo interface {
Say()
}
然後定義了一個結構體(struct)
type Dog struct {
}
然後我們希望在程式碼中判斷Dog這個struct是否實現了Foo這個interface
var _ Foo = Dog{}
上面用來判斷Dog是否實現了Foo, 用作型別斷言,如果Dog沒有實現Foo,則會報編譯錯誤
用在import package
假設我們在程式碼的import中這樣引入package:
import _ "test/foo"
這表示呢在執行本段程式碼之前會先呼叫test/foo中的初始化函式(init),這種使用方式僅讓匯入的包做初始化,而不使用包中其他功能
例如我們定義了一個Foo struct,然後對它進行初始化
package foo
import "fmt"
type Foo struct {
Id int
Name string
}
func init() {
f := &Foo{Id: 123, Name: "abc"}
fmt.Printf("init foo object: %v
", f)
}
然後在main函式裡面引入test/foo
package main
import (
"fmt"
_ "test/foo"
)
func main() {
fmt.Printf("hello world
")
}
執行結果如下
init foo object: &{123 abc}
hello world
我們可以看到:在main函式輸出”hello world”之前就已經對foo物件進行初始化了!
相關文章
- Python中下劃線用法Python
- 關於GeoWebCache的部署說明Web
- 關於DOCTYPE的使用和說明
- 關於NTP SERVER的配置說明Server
- 關於DedeCMS版本號的說明
- MySQL:關於ICP特性的說明(未完)MySql
- 關於微信分享自定義標題,說明,圖示基於PHP的功能實現PHP
- 關於支援OPenACC的編譯器說明編譯
- java 關於操作Collection的一點說明Java
- 關於 RPM 命令的權威說明
- 關於事務的英文說明 Transaction OverviewView
- 關於SAP abap程式開發的說明
- 關於BUGZILLA的說明和安裝
- Oracle中關於PCTFREE和PCTUSED的說明Oracle
- 關於Numba的執行緒實現的說明執行緒
- httpd一之關於http工作模式的基本說明httpd模式
- 關於包(Package)應用規範的說明 (轉)Package
- keycloak~關於社群登入的過程說明
- 【AMM】關於ASM中AMM引數說明ASM
- Golang 系統訊號接收說明Golang
- GIT分支管理規劃說明Git
- 關於《自然語言處理入門》的反饋意見,作者何晗說明如下自然語言處理
- 關於執行計劃中的%CPU的含義
- 關於 UiPath Activities 中文手冊的一些說明UI
- 【FLASHBACK】關於閃回資料庫的一點說明資料庫
- 關於PGA_AGGREGATE_TARGET的引數說明
- 關於contraint_name的一點說明AI
- 關於AIX上VMO調整引數的若干說明AI
- java中關於如何執行jar格式程式的說明JavaJAR
- 前端元件wolfTable中關於表格凍結部分的說明前端元件
- 關於 線性規劃 非線性規劃 與 凸優化優化
- TCP連線時動態埠的相關問題說明TCP
- PhpCms自定義欄位的使用說明PHP
- 關於語義類標籤的新理解
- ORACLE執行計劃 explain說明OracleAI
- MySQL:關於排序order by limit值不穩定的說明(1)MySql排序MIT
- 關於第五章圖處理的補充說明
- 關於MySQL中的8個 character_set 變數說明MySql變數