亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang:我可以將輔助函數應用于返回的參數之一嗎

golang:我可以將輔助函數應用于返回的參數之一嗎

Go
HUH函數 2022-01-10 17:13:10
假設我有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)

}


查看完整回答
反對 回復 2022-01-10
?
開心每一天1111

TA貢獻1836條經驗 獲得超13個贊

您不能將這兩個語句組合起來,因為該函數返回一對值,并且無法說明您希望對其中的哪一個進行類型斷言。通過賦值,它可以工作,因為標識符是按返回值排序的,但是您希望編譯器如何推斷您希望在哪個值上執行類型斷言?

我不建議嘗試在 Go 中過多地減少代碼。這與語言的設計方式并不完全一致,我相信這是故意的。哲學是這更容易閱讀,因為沒有太多抽象,也因為你沒有太多選擇來實現相同的結果。無論如何,使用該類型斷言并不會真正節省太多,并且像這樣的任何函數調用都需要幾行額外的代碼來處理錯誤。這幾乎是 Go 中的常態。


查看完整回答
反對 回復 2022-01-10
  • 2 回答
  • 0 關注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號