
在 Go 语言中,若函数返回多个值但你仅需其中部分(如 sql.Result),可使用空白标识符 _ 忽略不需要的变量,从而避免“unused variable”编译错误。
在 go 语言中,若函数返回多个值但你仅需其中部分(如 `sql.result`),可使用空白标识符 `_` 忽略不需要的变量,从而避免“unused variable”编译错误。
在 Go 的强类型与显式错误处理设计中,database/sql 包的 Exec() 方法始终返回两个值:sql.Result 和 error。即使你只关心执行是否成功(即只需检查 err),也必须处理所有返回值——Go 不允许丢弃任意一个,否则会触发编译错误:sqlRes declared and not used。
正确做法是使用空白标识符 _ 替代无需使用的变量名。它不是占位符,而是 Go 语言中专门用于“明确忽略值”的语法特性,既满足类型系统要求,又清晰表达开发意图。
✅ 正确写法如下:
stmt, err := db.Prepare("INSERT INTO person (name) VALUES (?)")
if err != nil {
log.Fatal(err)
}
defer stmt.Close()
// 使用 _ 忽略 sql.Result,仅保留 err 进行错误检查
_, err = stmt.Exec(person.Name)
if err != nil {
log.Printf("Failed to insert person: %v", err)
return err
}
⚠️ 注意事项:
- 不可重复声明同名变量(如原代码中两次使用 := 声明 err),会导致编译错误 no new variables on left side of :=。应改用 = 赋值(如 _, err = stmt.Exec(...));
- 若完全不需要 sql.Result,切勿用无意义变量名(如 res, r, x)临时占位——这会降低代码可读性,且仍需声明/维护该变量;
- 空白标识符只能用于赋值语句左侧,不可用于函数参数、结构体字段或类型定义等上下文;
- 对于批量操作(如 Exec() 多次调用),建议复用 stmt 并统一处理错误,以提升性能与一致性。
总结:Go 强制显式处理所有返回值,而 _ 是符合语言哲学的优雅解法——它不参与运行时逻辑,却有力传达“此处有意忽略”的语义,是编写健壮、清晰 SQL 操作代码的关键实践之一。











