假設我有connection := pool.GetConnection().(*DummyConnection)在哪里pool.GetConnection返回interface{},我想將它轉換為DummyConnection.我想更改 GetConnection 接口以返回錯誤。代碼開始看起來像這樣:connectionInterface, err := pool.GetConnection()connection := connectionInterface.(*DummyConnection)我想知道,我可以避免使用輔助變量并將它們放在一行上嗎?
2 回答

MM們
TA貢獻1886條經驗 獲得超2個贊
某種解決方案。不是減少代碼,而是通過將其移動到匿名內部函數來減少函數范圍內的變量。
package main
import "fmt"
type t struct{}
func foo()(interface{},error){
return &t{},nil
}
func main() {
var myT *t
myT, err := func() (*t,error){
i,e:=foo()
return i.(*t),e
}()
fmt.Println(myT,err)
}

開心每一天1111
TA貢獻1836條經驗 獲得超13個贊
您不能將這兩個語句組合起來,因為該函數返回一對值,并且無法說明您希望對其中的哪一個進行類型斷言。通過賦值,它可以工作,因為標識符是按返回值排序的,但是您希望編譯器如何推斷您希望在哪個值上執行類型斷言?
我不建議嘗試在 Go 中過多地減少代碼。這與語言的設計方式并不完全一致,我相信這是故意的。哲學是這更容易閱讀,因為沒有太多抽象,也因為你沒有太多選擇來實現相同的結果。無論如何,使用該類型斷言并不會真正節省太多,并且像這樣的任何函數調用都需要幾行額外的代碼來處理錯誤。這幾乎是 Go 中的常態。
- 2 回答
- 0 關注
- 160 瀏覽
添加回答
舉報
0/150
提交
取消