0

0

Go 中的下划线逗号(_,):空白标识符的用途与最佳实践

心靈之曲

心靈之曲

发布时间:2026-01-05 16:04:25

|

961人浏览过

|

来源于php中文网

原创

Go 中的下划线逗号(_,):空白标识符的用途与最佳实践

go 中,`_` 是空白标识符,用于丢弃不需要的返回值;`_, prs := m["example"]` 表示只关心 map 查找的第二个返回值(是否存在),而忽略第一个(实际值)。

Go 的 map 访问操作 m[key] 总是返回两个值

  • 第一个值是键对应的值(类型为 map 声明的 value 类型);
  • 第二个值是布尔类型 bool,表示该键是否存在于 map 中(常称 ok 或 present)。

因此,以下写法是非法的

prs := m["example"] // ❌ 编译错误:multiple-value m["example"] in single-value context

因为 m["example"] 返回两个值,而 := 左侧只声明了一个变量,Go 不允许丢弃返回值而不显式处理——这正是空白标识符 _ 的设计目的。

✅ 正确用法是使用 _ 显式忽略不需要的值:

AutoDraw
AutoDraw

AutoDraw是一个绘图工具,可以将草图转换成现成的模型图片

下载
_, prs := m["example"] // ✅ 只关心键是否存在,忽略实际值
if prs {
    fmt.Println("key exists")
}

这种模式广泛应用于:

  • Map 成员检测(推荐使用 ok 作为布尔变量名,更语义化):
    if _, ok := m["example"]; ok {
        fmt.Println("found")
    }
  • 多返回值函数中跳过中间值
    _, y, _ := get3DPoint() // get3DPoint() 返回 (x, y, z),只取 y
  • range 循环中忽略索引
    sum := 0
    for _, v := range []int{1, 2, 3} {
        sum += v // 仅需值,忽略索引
    }
  • 错误检查(常见于 I/O 操作)
    if _, err := os.Stat("/tmp/nonexistent"); os.IsNotExist(err) {
        log.Println("path does not exist")
    }

⚠️ 注意事项:

  • _ 不是普通变量,它不分配内存、不参与作用域、不可读取,多次赋值无副作用;
  • 它只能用于赋值语句左侧(如 := 或 =),不能用于右侧(x := _ 是非法的);
  • 虽然 _, prs 合法,但按 Go 社区惯例,布尔结果变量建议命名为 ok(如 v, ok := m[k]),提高可读性与一致性;
  • 空白标识符不可重复声明(如 _, _ := f() 合法,但 _, _ = x, y 在同一作用域内多次出现可能引发混淆,应避免)。

总结:_ 是 Go 强制显式性设计的关键体现——它不让开发者“悄悄忽略”值,而是要求你主动声明放弃。这提升了代码意图的清晰度与健壮性,也是 Go “explicit is better than implicit” 哲学的典型实践。

相关专题

更多
mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

179

2023.12.04

Python标识符有哪些
Python标识符有哪些

Python标识符有变量标识符、函数标识符、类标识符、模块标识符、下划线开头的标识符、双下划线开头、双下划线结尾的标识符、整型标识符、浮点型标识符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

276

2024.02.23

java标识符合集
java标识符合集

本专题整合了java标识符相关内容,想了解更多详细内容,请阅读下面的文章。

252

2025.06.11

c++标识符介绍
c++标识符介绍

本专题整合了c++标识符相关内容,阅读专题下面的文章了解更多详细内容。

121

2025.08.07

mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

179

2023.12.04

Python标识符有哪些
Python标识符有哪些

Python标识符有变量标识符、函数标识符、类标识符、模块标识符、下划线开头的标识符、双下划线开头、双下划线结尾的标识符、整型标识符、浮点型标识符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

276

2024.02.23

java标识符合集
java标识符合集

本专题整合了java标识符相关内容,想了解更多详细内容,请阅读下面的文章。

252

2025.06.11

c++标识符介绍
c++标识符介绍

本专题整合了c++标识符相关内容,阅读专题下面的文章了解更多详细内容。

121

2025.08.07

漫蛙2入口地址合集
漫蛙2入口地址合集

本专题整合了漫蛙2入口汇总,阅读专题下面的文章了解更多详细内容。

13

2026.01.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 3.4万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号