Golang 中的匿名变量详解

在 Golang 中,可以使用匿名变量来忽略不需要的返回值或占位符。匿名变量是一种特殊类型的变量,可以简化代码并提高可读性。本文将详细介绍匿名变量的定义、特性和使用方法。

什么是匿名变量?

在 Golang 中,匿名变量是一种没有显式声明名称的变量,通常用于在需要临时存储值但不需要在后续代码中使用该值的情况。匿名变量的声明方式是使用下划线“_”作为变量名。看个示例:

_ = functionName(arg1, arg2, ...)

其中,functionName 是要调用的函数名,arg1, arg2, ... 是传递给该函数的参数列表。在这个语法结构中,使用下划线作为变量名,表示不关心该函数的返回值。通过这种方式可以将函数调用的结果直接丢弃,从而达到忽略的目的。再看几个不同的示例:

package mainimport "fmt"func main() {// 声明一个匿名变量并初始化为10_ = 10// 声明一个匿名变量并将一个函数的返回值赋值给它_, _ = fmt.Println("Hello, World!")// 可以在同一个语句中声明多个匿名变量_, _ = 10, 20// 可以在函数返回多个值的情况下使用匿名变量来忽略某些返回值_, ignoredValue := someFunction()fmt.Println(ignoredValue)
}func someFunction() (int, string) {return 10, "路多辛的博客"
}

在上面的示例中,使用匿名变量来忽略函数的返回值、临时存储值,以及在需要忽略某些返回值的情况下使用。请注意,匿名变量不能被重新赋值或在其他地方使用,作用仅限于被声明的位置。

在导包中的作用

匿名变量在 Golang 中的一个常见用途是在需要导入一个包但不使用其可导出函数、类型、变量等(或者只是使用 init 函数的情况下),可以使用匿名变量来导入该包。例如:

package main  import (  _ "fmt"  
)  func main() {  // 在这里可以使用 fmt 包的功能,但不会引入其公共接口  
}

在这个示例中,使用匿名变量来导入 fmt 包,避免使用这个包中的可导出的变量、类型、函数等。

在实现接口中的作用

先看一个例子,https://github.com/open-telemetry/opentelemetry-go/blob/exporters/trace/zipkin/v0.20.1/exporters/trace/zipkin/zipkin.go 这个文件中有如下一行代码:

var (_ sdktrace.SpanExporter = &Exporter{}
)

这行代码创建了一个匿名变量(名称为 _),并尝试将 &Exporter{} 赋值给它。因为 _ 的类型是 sdktrace.SpanExporter,所以如果 Exporter 没有实现 sdktrace.SpanExporter 接口的所有方法,这行代码就会在编译时失败,从而提供了一种静态的类型检查机制,用于在编译时检查 Exporter 是否实现了 sdktrace.SpanExporter 接口。

这是一种常见的模式,尤其在处理接口和类型时,可以确保你的类型实现了你期望的接口。这种方式的好处是不会引入额外的运行时开销,因为 _ 变量在 Go 中是一个特殊的标识符,不会引用或分配内存。这种模式并不会创建或使用任何实际的变量,只是在编译时进行检查,所以不需要担心会对程序的运行时性能产生影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/78009.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【基于Cocos Creator 3.5的赛车游戏】8.引入触摸屏幕事件并简单的控制小车

转载知识星球 | 深度连接铁杆粉丝,运营高品质社群,知识变现的工具 项目地址:赛车小游戏-基于Cocos Creator 3.5版本实现: 课程的源码,基于Cocos Creator 3.5版本实现 上一张您已经对Cocos的坐标系有了了解。这一章我们将让小车能…

【经典小练习】JavaSE—拷贝文件夹

🎊专栏【Java小练习】 🍔喜欢的诗句:天行健,君子以自强不息。 🎆音乐分享【如愿】 🎄欢迎并且感谢大家指出小吉的问题🥰 文章目录 🎄效果🌺代码🛸讲解&#x…

【SA8295P 源码分析】96 - QNX AIS Camera 目录介绍 及 AIS Camera 框架介绍

【SA8295P 源码分析】96 - QNX AIS Camera 目录介绍 一、QNX AIS Camera 源码目录结构介绍1.1 AMSS/multimedia/camera/ais 目录介绍1.2 AMSS/multimedia/camera/build 目录介绍1.3 ais_server 可执行程序 包含哪些库?1.4 ais_be_server 可执行程序 包含哪些库?1.5 qcarcam_t…

【深入浅出C#】章节10: 最佳实践和性能优化:内存管理和资源释放

一、 内存管理基础 1.1 垃圾回收机制 垃圾回收概述 垃圾回收(Garbage Collection)是一种计算机科学和编程领域的重要概念,它主要用于自动管理计算机程序中的内存分配和释放。垃圾回收的目标是识别和回收不再被程序使用的内存,以…

高通胀加大英国债务负担

9月5日,英国伯明翰地方政府由于无力偿债宣布破产。一周后,该消息仍在市场持续发酵。越来越多的经济学家担忧,在伯明翰“倒下”之后,下一个宣布破产的英国城市会是哪个?作为仅次于伦敦的英国第二大城市,伯明…

微信管理系统在教育行业中的应用

随着教育行业越来越注重科技创新,对微信scrm工具的需求也会越来越大,微信scrm工具在教育行业的市场前景非常广阔,也为教育行业带来更多的发展机遇。 微信SCRM系统由监管、运营两大核心应用组成。能帮助培训机构实现从招生引流、销售管理、再…

【Android知识笔记】UI体系(四)

事件分发原理 屏幕事件会由Linux通过JNI传给WMS(WindowManagerService),然后由WMS传给Activity,最终经过PhoneWindow->DecorView开始往下分发。 View的事件分发 View的事件分发核心源码为 dispatchTouchEvent() 方法: public boolean dispatchTouchEvent(MotionEvent …

Spring Boot 集成 Redis

Spring-data-redis 在 Spring 中整合 Redis jedis : 采用的直连,多个线程操作的话,是不安全的,如果想要避免不安全的,使用 jedis pool 连接池 lettuce : 采用netty,实例可以再多个线程中进行共享,不存在…

导数的应用、单调性、极值、最大最小值

函数的单调性 函数的单调性是一个重要的性质,它描述了函数在某个区间上的变化趋势。如果函数在某个区间上单调递增,那么在这个区间上,随着自变量的增大,函数值也会增大;反之,如果函数在某个区间上单调递减&…

【halcon】halcon字符识别——OCR

前言 OCR(Optical Character Recongnition)光学字符识别。 halcon 的OCR,提供了几种方式,我们应该如何选择? 自动文本阅读器(find_text)手动文本阅读器(find_text)自己…

数据结构基础7:二叉树【链式结构】实现和递归思想。

二叉树的链式结构实现 一.二叉树链式结构的实现:1.前置说明:1.创建二叉树:2.二叉树的结构: 2.二叉树的遍历:1.二叉树的前中后序遍历:2.内容拓展: 二.二叉树链式(题目)题目一:计算节点…

【Axure高保真原型】日历日期原型模板

今天和大家分享日历日期的原型模板,包括月计划、周计划、日计划的原型案例,以及日期、时间、月份、区间选择器……具体效果可以点击下方视频观看 【原型预览及下载地址】 Axure 原型 备用地址:Untitled Document 【原型效果】 【原型效果…

2.k8s账号密码登录设置

文章目录 前言一、启动脚本二、配置账号密码登录2.1.在hadoop1,也就是集群主节点2.2.在master的apiserver启动文件添加一行配置2.3 绑定admin2.4 修改recommended.yaml2.5 重启dashboard2.6 登录dashboard 总结 前言 前面已经搭建好了k8s集群,现在设置下…

保姆级教程 --redis启动命令

1、在redis目录 打开命令 windowr 输入cmd 2、输入 redis-server.exe redis.windows.conf 启动redis命令,看是否成功 3、可能会启动失败,报28 Nov 09:30:50.919 # Creating Server TCP listening socket 127.0.0.1:6379: bind: No error 4、报错后&am…

【AI】《动手学-深度学习-PyTorch版》笔记(二十二):单发多框检测(SSD)

AI学习目录汇总 1、介绍 SSD(Single Shot MultiBox Detector)单发多框检测。“Single shot”说明SSD算法属于one-stage(一段式)方法,“MultiBox”说明SSD是多框预测(多尺度锚框/特征图)。 SSD和YOLO一样都是采用CNN网络执行one-stage(一段式)检测,区别是: YOLO速…

3D异常检测论文笔记 | Shape-Guided Dual-Memory Learning for 3D Anomaly Detection

参考:https://paperswithcode.com/sota/3d-anomaly-detection-and-segmentation-on 论文:https://openreview.net/pdf?idIkSGn9fcPz code:https://github.com/jayliu0313/Shape-Guided 文章目录 摘要一、介绍三、方法3.1. 形状引导专家学习3…

Linux下systemd深入指南:如何优化Java服务管理与开机自启配置

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

【Apollo学习笔记】——规划模块TASK之PIECEWISE_JERK_NONLINEAR_SPEED_OPTIMIZER(二)

文章目录 TASK系列解析文章OptimizeByNLP1.get_nlp_info()定义问题规模2.get_bounds_info()定义约束边界约束3.get_starting_point()定义初值4.eval_f()求解目标函数5.eval_grad_f()求解梯度6.eval_g()求解约束函数7.eval_jac_g()求解约束雅可比矩阵8.eval_h()求解黑塞矩阵9. f…

【人工智能 》机器学习》深度学习】

原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言人工智能(求解、规划、感知)机器学习(分类、回归、关联)K-meansNLPCNNLTSMKNN 深度学习&a…

碎片笔记 | 大模型攻防简报

前言:与传统的AI攻防(后门攻击、对抗样本、投毒攻击等)不同,如今的大模型攻防涉及以下多个方面的内容: 目录 一、大模型的可信问题1.1 虚假内容生成1.2 隐私泄露 二、大模型的模型安全问题(传统AI攻防&…