go 函数可返回多个值(如响应和错误),但赋值时必须严格匹配数量;不可用单变量接收双返回值,而应使用多变量或空白标识符(_)忽略部分值,但忽略错误需谨慎。
go 函数可返回多个值(如响应和错误),但赋值时必须严格匹配数量;不可用单变量接收双返回值,而应使用多变量或空白标识符(_)忽略部分值,但忽略错误需谨慎。
在 Go 语言中,函数支持多返回值——这是其核心设计特性之一,尤其常见于标准库(如 http.Get 返回 (*http.Response, error))。然而,Go 的赋值语句要求左侧变量数量必须与右侧函数返回值数量完全一致。因此,以下写法是非法的:
resp := http.Get("http://www.google.com/") // ❌ 编译错误:expected 2 variables on left side of :=, but 1 provided
正确做法是显式声明两个变量接收:
resp, err := http.Get("http://www.google.com/") // ✅ 正确:两个变量对应两个返回值
if err != nil {
log.Fatal("HTTP request failed:", err)
}
defer resp.Body.Close()
// 继续处理 resp...
若你明确决定忽略某个返回值(例如暂不处理错误),可使用 Go 的空白标识符 _ 占位:
resp, _ := http.Get("http://www.google.com/") // ✅ 语法合法,但…
⚠️ 重要提醒:对 error 使用 _ 忽略属于高风险实践。http.Get 可能因网络超时、DNS 失败、TLS 握手错误等返回非 nil 错误,忽略它将导致程序在静默失败状态下继续执行(如对 nil resp 调用 .Body 引发 panic)。生产代码中应始终检查错误,至少进行日志记录或优雅降级。
✅ 推荐模式:
- 永远优先显式接收并处理 error;
- 若确需忽略(如测试场景中已确保调用必成功),请添加清晰注释说明理由;
- 利用 errors.Is 或类型断言对错误做精细化判断,而非一概忽略。
总之,Go 的多返回值机制强调“显式优于隐式”,单变量接收双返回值违反语言规则;合理利用多变量赋值与空白标识符,同时坚守错误处理契约,才是健壮 Go 代码的基石。











