第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

Go 類型推斷和命名返回變量

Go 類型推斷和命名返回變量

Go
胡說叔叔 2021-09-13 15:26:40
在 Go 中,如果你給返回變量命名,當(dāng)函數(shù)開始時,它們會被初始化為零值。我在下面將這個功能與err行上的變量一起使用usr, err = user.Current()。是否可以對usr變量而不是變量使用類型推斷err?我真的不想聲明var usr *user.user我更愿意在這里使用類型推斷。func getConfigFilepath(userSuppliedFilepath string) (filepath string, err error) {    if userSuppliedFilepath == "" {        usr, err = user.Current()        filepath = path.Join(usr.HomeDir, ".myprogram.config.json")    }    return}
查看完整描述

2 回答

?
泛舟湖上清波郎朗

TA貢獻(xiàn)1818條經(jīng)驗 獲得超3個贊

不,你不能做你想做的事。


你的選擇是不使用命名返回,或者像你說的那樣聲明


var usr *user.User 

usr, err = user.Current()

在某些情況下,您可以這樣做,但在您的情況下,您正在創(chuàng)建一個 new ,err因為您在 if 塊中,并且它正在對 new 進(jìn)行本地范圍的引用err。


查看完整回答
反對 回復(fù) 2021-09-13
?
滄海一幻覺

TA貢獻(xiàn)1824條經(jīng)驗 獲得超5個贊

如果您稍微重構(gòu)代碼并且不將user.Current()調(diào)用放在另一個塊中(if在您的情況下),則可以使用:= Short 變量聲明:


func getConfigFilepath(userSuppliedFilepath string) (filepath string, err error) {

    if userSuppliedFilepath != "" {

        return userSuppliedFilepath, nil

    }


    usr, err := user.Current()

    filepath = path.Join(usr.HomeDir, ".myprogram.config.json")

    return

}

編輯:


你可能會說這個代碼比起原來的更長,但請注意,您原來的代碼是沒有有效的,也是不完整的,因為當(dāng)它不處理的情況下userSuppliedFilepath提供。您應(yīng)該將建議的代碼與以下代碼的完整有效版本進(jìn)行比較:


func getConfigFilepath(userSuppliedFilepath string) (filepath string, err error) {

    if userSuppliedFilepath == "" {

        var usr *user.User

        usr, err = user.Current()

        filepath = path.Join(usr.HomeDir, ".myprogram.config.json")

    } else {

        filepath = userSuppliedFilepath

    }


    return

}

現(xiàn)在提議的代碼不再長(相反,它更短了一點(diǎn))。


查看完整回答
反對 回復(fù) 2021-09-13
  • 2 回答
  • 0 關(guān)注
  • 225 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號