如何return golang中的错误?

How to return the errors in golang?

在这段代码中,我从环境变量中获取数据并使用它来将电子邮件发送到给定的地址。仅当我从代码中排除错误时它才有效。我 return 编辑了错误并在中间件中使用了它们,因为我不想每次都使用 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
}

use this to check error

   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
    }

首先,对于错误处理,在 returning!

之前检查 err 是否为 nil

所以不是:

myEmail, err := LoadEnvVariable("EMAIL")
return "", err

而是:

myEmail, err := LoadEnvVariable("EMAIL")
if err != nil {
    return "", err
}

其次,单个字符串类型 "" 兼容 [4]string 的固定数组大小。使用命名 return 变量可能会让您的生活更轻松,因此您无需在发生错误时传递明确的“零”值。所以像这样定义你的函数签名:

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'
}