从函数返回多个值

时间:2015-05-23 15:45:19

标签: go

我有这个功能:

func GetBasicAuth(w http.ResponseWriter, r *http.Request) (string, error) {
    secret, _, ok := r.BasicAuth()
    if !ok {
        return "", err //is this right?
    }
    return secret, nil
}

我必须声明该函数将返回一个字符串和错误,但实际上它将返回一个或另一个。如果BasicAuth函数不是ok,那么我没有要返回的字符串,所以我在这里做什么 - 只发送一个空字符串?这看起来很奇怪!

1 个答案:

答案 0 :(得分:2)

除非另有说明(例如io.Reader), 如果a, b, c, …, error所有其他返回值未定义且不应使用/检查,则返回err != nil的Go函数/方法是正常的。 返回错误时通常(但不是必需的) 函数/方法使用the zero value用于其他返回值的任何内容。

如上所述,某些功能/方法(如io.Reader'} Read(p []byte) (n int, err error)明确说明了其他行为:

  

来电者应始终处理n>之前返回0个字节   考虑到错误错误。

即使在(某些)错误的情况下,您创建的任何返回有用值的函数/方法也应该明确说明。