【Go专家编程——语法糖】

语法糖

语法糖表示编程语言中特定类型的语法,这些语法对语言的功能没有影响,但是更方便程序员使用。

1.语法糖:=

1.1 规则一:多变量复制可能会重新声明

我们知道可以使用“:=”可以同时声明多个变量

field1, offset := nextField(str,0)
field2, offset := nextField(str, offset)

在上述代码中offset会被重新声明

  • 当“:=”左侧存在新变量时,已声明的变量(如offset)会被重新声明
  • 当“:=”左侧不存在新变量时是不被允许的

重新声明不会引入问题要满足一个前提,那就上变量声明要在同一个作用域中出现。出现在不同的作用域中,则很可能创建了新的同名变量,同一函数不同作用域的同名变量往往不是预期做法,很容易引入缺陷。

1.1.1 同作用域

func nextField(num1, num2 int) (int, int) {
	return num1, num2
}

func main() {
	num1 := 1
	num2 := 2
	fmt.Println(&num1)
	fmt.Println(&num2)
	num1, num3 := nextField(num1, num2)
	fmt.Println(&num1)
	fmt.Println(&num3)
}

在这里插入图片描述

1.1.2 不同作用域

func nextField(num1, num2 int) (int, int) {
	return num1, num2
}

func main() {
	num1 := 1
	num2 := 2
	fmt.Println(&num1)
	fmt.Println(&num2)
	go func() {
		num1, num3 := nextField(num1, num2)
		fmt.Println(&num1)
		fmt.Println(&num3)
	}()
	time.Sleep(3 * time.Second)
}

在这里插入图片描述

1.2 规则二: 不用用于函数外部

简短变量声明符只能用于函数中,使用“:=”来声明和初始化全局变量是行不通的。

我们可以理解成“:=”实际上会拆分成两个语句,即声明和赋值。赋值语句不能出现在函数外部。

1.3 变量作用域问题

如果使用“:=”过于随意,那么有可能在多个作用域中声明了同名变量而不自知,从而引发故障

func main() {
	num1, num2 := nextField(1, 2)
	if num1 == 1 {
		num1, num2 := nextField(3, 4)
		fmt.Println(num1)
		fmt.Println(num2)
	}
	fmt.Println(num1)
	fmt.Println(num2)
}

代码输出如下:在这里插入图片描述

2.语法糖…

可变参函数是指函数的某个参数可有可无,即这个参数的个数可以是0或多个。声明可变参数函数的方式是在参数类型前加上“…”前缀。

可变函数的特征:

  • 可变参数必须在函数参数列表的尾部,即最后一个(放在前面会引起编译时歧义)
  • 可变参数在函数内部是作为切片来解析的(可以使用range遍历)
  • 可变参数可以不填,不填时函数内部当做nil切片处理
  • 可变参数必须是相同的类型(如果需要是不同的类型则可以定义为interface{}类型)
  • 可变参数部分可以直接传入一个切片,传入的方式为slice…

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

重新安装VmWare的tools

原因: 因为一些原因,我需要重新安装VmWare tools,比如我升级到了win11,但是Vmware16.0已经不能使用,所以我升级了Vmware到16.2,这时候就需要升级VmWare tools。但是升级以后,会有一些小问题&…

MongoDB环境搭建

一.下载安装包 Download MongoDB Community Server | MongoDB 二、双击下载完成后的安装包开始安装,除了以下两个部分需要注意操作,其他直接next就行 三.可视化界面安装 下载MongoDB-compass,地址如下 MongoDB Compass Download (GUI) | M…

LabVIEW动态力传感器校准系统

LabVIEW动态力传感器校准系统 开发了一种基于LabVIEW的动态力传感器校准系统。系统主要用于动态力的测量和校准,通过高度集成化和自动化的设计,显著提升校准的效率和精确度。系统采用冲击法进行动态校准,涵盖了完整的硬件设计和软件开发流程…

SparkML

SparkML 一、介绍二、模型开发流程1、dataframe数据模型2、transformer转换器3、estimators模型学习器4、pipeline管道 三、示例:基于随机森林的新闻分类任务1、引入相关包2、初始化spark3、读取数据4、查看数据情况5、数据处理1、分词2、类别编码3、去除停用词4、b…

Python GNN图神经网络代码实战;GAT代码模版,简单套用,易于修改和提升,图注意力机制代码实战

1.GAT简介 GAT(Graph Attention Network)模型是一种用于图数据的深度学习模型,由Veličković等人在2018年提出。它通过自适应地在图中计算节点之间的注意力来学习节点之间的关系,并在节点表示中捕捉全局和局部信息。 GAT模型的核…

实现spring配置bean类机制

大家好,这里是教授.F 流程说明: 我们自己实现spring配置bean类的机制,要先了解原本是怎么实现的。 原本的机制就是有一个bean配置文件,还有一个ApplicationContext spring文件。bean类写着要扫描的文件信息,spring文…

vscode编译c/c++找不到jni.h文件

解决办法: 一、下载JDK 访问Oracle官网的Java下载页面:Java Downloads | Oracle 选择适合您操作系统的JDK版本: 对于Windows,选择“Windows x64”或“Windows x86”(取决于您的系统是64位还是32位)。对于Linux&#…

扩散世界模型已训练出赶超人类的智能体?

论文标题: Diffusion for World Modeling:Visual Details Matter in Atari 论文作者: Eloi Alonso, Adam Jelley, Vincent Micheli, Anssi Kanervisto, Amos Storkey, Tim Pearce, Franois Fleuret 项目地址: https://github.com/eloial…

封装了一个使用UICollectionViewLayout 实现的吸附居左banner图

首先查看效果图 实现的原理就是通过自定义UICollectionView layout,然后 设置减速速率是快速就可以达到吸附的效果 _collectionView.decelerationRate UIScrollViewDecelerationRateFast; 下面贴出所有代码 这里是.h // // LBMiddleExpandLayout.h // Liubo…

Java零基础-顺序结构

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

10 个最佳 MP4 转换器,可帮助您将视频转换为 MP4

许多人正在寻找一种强大的工具将视频转换为 MP4。网上有很多 MP4 转换器,但只有少数能够有效地将视频转换为 MP4。我们根据实验室测试和用户报告确定了前 10 名 MP4 转换器。在这篇文章中,我们将向您展示这些 MP4 转换器具有哪些功能以及如何使用它们。 …

【Python】 Python中的`mkdir -p`功能解析与应用

基本原理 在Linux系统中,mkdir -p是一个常用的命令,用于创建目录。这个命令的特点是,如果目标目录已经存在,它不会报错,而是直接跳过;如果目标目录不存在,它会创建整个目录路径中所需的所有目录…

166.二叉树:相同的树(力扣)

代码解决 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* Tre…

无线麦克风哪个品牌音质最好?最好的无线麦克风品牌排行推荐

xx 虽然Vlog随手就能拍,不过Vlog不仅要记录画面,还要记录声音,毕竟一段声色俱全的视频要比一张照片有意义得多。把镜头擦拭干净可以留下清晰明朗的画面,但是在户外参杂了各种嘈杂的声音手机很难收录清晰的人声,所以一…

一点连接千家银行,YonSuite让“银行回单”一键获取

在当今日益复杂多变的商业环境中,企业的资金管理变得尤为重要。传统的银行回单管理方式,如手动登录网银、逐一下载回单、核对信息等,不仅效率低下,而且容易出错,给企业的财务管理带来了极大的挑战。 然而,…

OBC充电机的基础认识

OBC是电动汽车上的充电设备,主要用于将外部交流电源转换为直流电源,为电动汽车的动力电池组充电。OBC是电动汽车的重要组成部分,其性能直接影响到电动汽车的续航里程和充电效率。 OBC的主要功能包括:将交流电转换为直流电&#xf…

C++设计模式|结构型 代理模式

1.什么是代理模式? 代理模式Proxy Pattern是一种结构型设计模式,用于控制对其他对象的访问。 在代理模式中,允许一个对象(代理)充当另一个对象(真实对象)的接口,以控制对这个对象的…

《论文阅读》具有人格自适应注意的个性化对话生成 AAAI 2023

《论文阅读》具有人格自适应注意的个性化对话生成 AAAI 2023 前言 简介挑战与机遇任务定义模型架构Context EncoderPersona EncoderDialog DecoderPersona-Adaptive Attention损失函数实验结果 前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论…

Linux 服务查询命令(包括 服务器、cpu、数据库、中间件)

Linux 服务查询命令(包括 服务器、cpu、数据库、中间件) Linux获取当前服务器ipLinux使用的是麒麟版本还是cenos版本Linux获取系统信息Linux查询nignx版本 Linux获取当前服务器ip hostname -ILinux使用的是麒麟版本还是cenos版本 这个文件通常包含有关L…

社交媒体数据恢复:易信

我们可以参考其他类似软件的数据恢复方法尝试解决问题。 检查备份:首先,检查您是否在易信或其他云服务中备份了数据。如果有备份,您可以尝试从备份中恢复数据。 联系易信客服:如果找不到备份,您可以联系易信的客户服务…