我有这个功能:
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
,那么我没有要返回的字符串,所以我在这里做什么 - 只发送一个空字符串?这看起来很奇怪!
答案 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个字节 考虑到错误错误。
即使在(某些)错误的情况下,您创建的任何返回有用值的函数/方法也应该明确说明。