dongnianwo8289 2015-05-23 15:45
浏览 31
已采纳

从函数返回多个值

I have this function:

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

I've had to declare that the function will return a string and an error but in reality it will return one or the other. If the BasicAuth function wasn't ok then I have no string to return so what do I do here - just send an empty string? This seems weird!

  • 写回答

1条回答 默认 最新

  • douguabu8960 2015-05-23 16:55
    关注

    Unless documented otherwise (e.g. io.Reader), it's normal for Go functions/methods returning a, b, c, …, error to expect that if err != nil that all other returned values are undefined and should not be used/examined. It's usual (but not required) that when returning an error the function/method uses whatever the zero value is for those other return values.

    As mentioned, some functions/methods such as an io.Reader's Read(p []byte) (n int, err error) explicitly state other behaviour:

    Callers should always process the n > 0 bytes returned before considering the error err.

    And any functions/methods you create that return useful values even in the case of (some) errors should probably explicitly state that.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 有偿四位数,节约算法和扫描算法
  • ¥15 VUE项目怎么运行,系统打不开
  • ¥50 pointpillars等目标检测算法怎么融合注意力机制
  • ¥20 Vs code Mac系统 PHP Debug调试环境配置
  • ¥60 大一项目课,微信小程序
  • ¥15 求视频摘要youtube和ovp数据集