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

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

如何返回golang中的錯誤?

如何返回golang中的錯誤?

Go
尚方寶劍之說 2022-10-10 16:46:50
在這段代碼中,我從環境變量中獲取數據并使用它將電子郵件發送到給定地址。只有當我從代碼中排除錯誤時它才有效。我返回錯誤并在中間件中使用它們,因為我不想log.Fatal(err)每次都使用。但這給了我兩個錯誤。1.不能在return語句中使用“”(無類型字符串常量)作為[4]字符串值2.代碼無法執行無法到達的return語句func LoadEnvVariable(key string) (string, error) {    viper.SetConfigFile(".env")    err := viper.ReadInConfig()    return "", err    value, ok := viper.Get(key).(string)    if !ok {        return "", err    }    return value, nil}func Email(value [4]string) ([4]string, error) {    mail := gomail.NewMessage()    myEmail, err := LoadEnvVariable("EMAIL")    return "", err    appPassword, err := LoadEnvVariable("APP_PASSWORD")    return "", err    mail.SetHeader("From", myEmail)    mail.SetHeader("To", myEmail)    mail.SetHeader("Reply-To", value[1])    mail.SetHeader("subject", value[2])    mail.SetBody("text/plain", value[3])    a := gomail.NewDialer("smtp.gmail.com", 587, myEmail, appPassword)    err = a.DialAndSend(mail)    return "", err    return value, nil}
查看完整描述

2 回答

?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

首先,對于錯誤處理,err在返回之前檢查是否為nil!


所以不是:


myEmail, err := LoadEnvVariable("EMAIL")

return "", err

但反而:


myEmail, err := LoadEnvVariable("EMAIL")

if err != nil {

    return "", err

}

其次,單個字符串類型""與固定數組大小兼容[4]string。使用命名返回變量可能會讓您的生活更輕松,因此您不需要在發生錯誤時傳遞顯式的“零”值。所以像這樣定義你的函數簽名:


func Email(in [4]string) (out [4]string, err error) {


    myEmail, err := LoadEnvVariable("EMAIL")

    if err != nil {

        return // implicitly returns 'out' and 'err'

    }


    // ...


    out = in

    return  // implicitly returns 'out' and nil 'err'

}



查看完整回答
反對 回復 2022-10-10
?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

用它來檢查錯誤


   if err != nil {  

       return "", err 

    }

func LoadEnvVariable(key string) (string, error) {

        viper.SetConfigFile(".env")

        err := viper.ReadInConfig()

        if err != nil {

            return "", err

        }

    

        value, ok := viper.Get(key).(string)

        if !ok {

            return "", err

        }

        return value, nil

    }

    

    func Email(value [4]string) ([4]string, error) {

        mail := gomail.NewMessage()

    

        myEmail, err := LoadEnvVariable("EMAIL")

        if err != nil {

            return "", err

        }

    

        appPassword, err := LoadEnvVariable("APP_PASSWORD")

        if err != nil {

            return "", err

        }

    

        mail.SetHeader("From", myEmail)

        mail.SetHeader("To", myEmail)

        mail.SetHeader("Reply-To", value[1])

        mail.SetHeader("subject", value[2])

        mail.SetBody("text/plain", value[3])

    

        a := gomail.NewDialer("smtp.gmail.com", 587, myEmail, appPassword)

        err = a.DialAndSend(mail)

        if err != nil {

            return "", err

        }

    

        return value, nil

    }


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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