首先澄清一下標題,我知道 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有人可以解釋一下嗎?謝謝
1 回答

大話西游666
TA貢獻1817條經驗 獲得超14個贊
您是正確的,這會創建一個切片:
clientOptions := []grpc.DialOption{grpc.WithInsecure()}
但是我認為您誤解了哪種語法可以做什么。這將是一個空切片文字:
clientOptions := []grpc.DialOption{}
這將是單個值,而不是切片:
clientOptions := grpc.WithInsecure()
作為參考,此語法包含在Tour of Go中。
- 1 回答
- 0 關注
- 91 瀏覽
添加回答
舉報
0/150
提交
取消