首先澄清一下標題,我知道 Go 中沒有介面文字這樣的東西,但我無法為這個問題想出另一個名字。
我正在閱讀一些 Go 代碼并發現了一個奇怪的結構,如下所示:
clientOptions := []grpc.DialOption{grpc.WithInsecure()}
cc, err := grpc.Dial(l.Addr().String(), clientOptions...)
這里 grpc.DialOptions 是一個介面型別,而 grpc.WithInsecure() 回傳該型別。在這里引起我注意的是 clientOptions 是一個切片,這對我來說似乎是多余的。所以我嘗試像這樣洗掉大括號:
clientOptions := grpc.DialOption{grpc.WithInsecure()}
但我得到編譯錯誤:“無效的復合文字型別 grpc.DialOption”
我試圖在 go 操場上模擬這個,我得到了相同的結果。此代碼運行良好: https ://go.dev/play/p/QJQR9BDGN4a
但是這個版本失敗了,同樣的“無效的復合文字型別錯誤”: https ://go.dev/play/p/A0FasDybUg5
有人可以解釋一下嗎?謝謝
uj5u.com熱心網友回復:
您是正確的,這會創建一個切片:
clientOptions := []grpc.DialOption{grpc.WithInsecure()}
但是我認為您誤解了哪種語法可以做什么。這將是一個空切片文字:
clientOptions := []grpc.DialOption{}
這將是單個值,而不是切片:
clientOptions := grpc.WithInsecure()
作為參考,此語法包含在Tour of Go中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/429828.html
