《Go 语言第一课》课程学习笔记(六)

变量声明:静态语言有别于动态语言的重要特征

  • 变量所绑定的内存区域是要有一个明确的边界的。也就是说,通过这样一个变量,我们究竟可以操作 4 个字节内存还是 8 个字节内存,又或是 256 个字节内存,编程语言的编译器或解释器需要明确地知道。
    • 动态语言(比如 Python、Ruby 等)的解释器可以在运行时通过对变量赋值的分析,自动确定变量的边界。并且在动态语言中,一个变量可以在运行时被赋予大小不同的边界。
    • 静态类型语言编译器必须明确知道一个变量的边界才允许使用这个变量,但静态语言编译器又没能力自动提供这个信息,这个边界信息必须由这门语言的使用者提供,于是就有了“变量声明”。
      • 通过变量声明,语言使用者可以显式告知编译器一个变量的边界信息。
      • 在具体实现层面呢,这个边界信息由变量的类型属性赋予。
  • 作为身处静态编程语言阵营的 Go 语言,它沿袭了静态语言的这一要求:使用变量之前需要先进行变量声明。

Go 语言的变量声明方法

  • 在 Go 语言中,如果你没有显式为变量赋予初值,Go 编译器会为变量赋予这个类型的零值,通用的变量声明方法是这样的:在这里插入图片描述
    在这里插入图片描述
  • 除了单独声明每个变量外,Go 语言还提供了变量声明块(block)的语法形式,可以用一个 var 关键字将多个变量声明放在一起:
    var (a int = 128b int8 = 6s string = "hello"c rune = 'A't bool = true
    )
    
  • Go 语言还支持在一行变量声明中同时声明多个变量:var a, b, c int = 5, 6, 7
  • 这样的多变量声明同样也可以用在变量声明块中:
    var (a, b, c int = 5, 6, 7c, d, e rune = 'C', 'D', 'E'
    )
    
  • 为了给开发者带来更好的使用体验,Go 语言还提供了两种变量声明的“语法糖”:
    • 省略类型信息的声明
      • 在通用的变量声明的基础上,Go 编译器允许我们省略变量声明中的类型信息,它的标准范式是“var varName = initExpression”。
      • Go 编译器会根据右侧变量初值自动推导出变量的类型,并给这个变量赋予初值所对应的默认类型。
      • 结合多变量声明,我们可以使用这种变量声明“语法糖”声明多个不同类型的变量。
    • 短变量声明
    • 使用短变量声明时,我们甚至可以省去 var 关键字以及类型信息,它的标准范式是“varName := initExpression”。
    • 这个原理和上一种省略类型信息的声明语法糖一样,短变量声明中的变量类型也是由 Go 编译器自动推导出来的。
    • 短变量声明也支持一次声明多个变量,而且形式更为简洁:a, b, c := 12, 'A', "hello"
  • Go 语言的变量可以分为两类:一类称为包级变量 (package varible),也就是在包级别可见的变量。如果是导出变量(大写字母开头),那么这个包级变量也可以被视为全局变量;另一类则是局部变量 (local varible),也就是 Go 函数或方法体内声明的变量,仅在函数或方法体内可见。

包级变量的声明形式

  • 包级变量只能使用带有 var 关键字的变量声明形式,不能使用短变量声明形式,但在形式细节上可以有一定灵活度。
    • 第一类:声明并同时显式初始化。
      • 在 Go 标准库中,对于变量声明的同时进行显式初始化的这类包级变量,实践中多使用省略类型信息的“语法糖”格式。
    • 第二类:声明但延迟初始化。
      • 对于声明时并不立即显式初始化的包级变量,我们可以使用下面这种通用变量声明形式:var a int32
  • Go 语言提供了变量声明块用来把多个的变量声明放在一起,并且在语法上也不会限制放置在 var 块中的声明类型,那我们就应该学会充分利用 var 变量声明块,让我们变量声明更规整,更具可读性。
  • 通常,我们会将同一类的变量声明放在一个 var 变量声明块中,不同类的声明放在不同的 var 声明块中。
  • 变量声明最佳实践中还有一条:就近原则。也就是说我们尽可能在靠近第一次使用变量的位置声明这个变量。就近原则实际上也是对变量的作用域最小化的一种实现手段。

局部变量的声明形式

  • 和包级变量相比,局部变量又多了一种短变量声明形式,这是局部变量特有的一种变量声明形式,也是局部变量采用最多的一种声明形式。
    • 第一类:对于延迟初始化的局部变量声明,我们采用通用的变量声明形式。
    • 第二类:对于声明且显式初始化的局部变量,建议使用短变量声明形式。
    • 尽量在分支控制时使用短变量声明形式。

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

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

相关文章

知虾|Shopee数据分析工具是什么?Shopee虾皮卖家必备工具

知虾|Shopee数据分析工具是什么?Shopee虾皮卖家必备工具 在当今竞争激烈的电商行业,拥有准确的市场洞察和数据驱动的决策是成功的关键。Shopee作为全球领先的电商平台之一,市场也出现很多为商家提供了一系列强大的工具和功能,其中…

计算机网络-物理层(三)编码与调制

计算机网络-物理层(三)编码与调制 在计算机网络中,计算机需要处理和传输用户的文字、图片、音频和视频,它们可以统称为消息 数据是运输信息的实体,计算机只能处理二进制数据,也就是比特0和比特1。计算机中…

AIR001开箱测试

最近,合宙的动作还是挺大的,又出了两款AIR001和RP2040,而且前段时间还出了AIR32F103系列,记的21年要采购STM32F1103的时候,1片的价格从开发时的5块涨到了生产阶段的100多,即使最后无奈采用了别的芯片&#…

融云深度参与「新加坡 GTLC 大会」,连接亚太机遇、开拓国际市场

8 月 18 日,由 TGO 鲲鹏会主办的新加坡 GTLC(Global Tech Leadership Conference,全球技术领导力大会)圆满收官,融云作为共创伙伴深度参与了大会。关注【融云全球互联网通信云】了解更多 本次大会以“Connecting Asia…

Python批量爬虫下载文件——把Excel中的超链接快速变成网址

本文的背景是:大学关系很好的老师问我能不能把Excel中1000个超链接网址对应的pdf文档下载下来。虽然可以手动一个一个点击下载,但是这样太费人力和时间了。我想起了之前的爬虫经验,给老师分析了一下可行性,就动手实践了。    没…

数学建模及数据分析 || 4. 深度学习应用案例分享

PyTorch 深度学习全连接网络分类 文章目录 PyTorch 深度学习全连接网络分类1. 非线性二分类2. 泰坦尼克号数据分类2.1 数据的准备工作2.2 全连接网络的搭建2.3 结果的可视化 1. 非线性二分类 import sklearn.datasets #数据集 import numpy as np import matplotlib.pyplot as…

Web 3.0 安全风险,您需要了解这些内容

随着技术的不断发展,Web 3.0 正在逐渐成为现实,为我们带来了许多新的机遇和挑战。然而,与任何新技术一样,Web 3.0 也伴随着一系列安全风险,这些风险需要被认真对待。在这篇文章中,我们将探讨一些与Web 3.0 …

Excel/PowerPoint柱状图条形图负值设置补色

原始数据: 列1系列 1类别 14.3类别 2-2.5类别 33.5类别 44.5 默认作图 解决方案 1、选中柱子,双击,按如下顺序操作 2、这时候颜色会由一个变成两个 3、对第二个颜色进行设置,即为负值的颜色 条形图的设置方法相同

【STM32】FreeRTOS软件定时器学习

软件定时器 FreeRTOS提供了现成的软件定时器功能,可以一定程度上替代硬件定时器,但精度不高。 实验:创建一个任务,两个定时器,按键开启定时器,一个500ms打印一次,一个1000ms打印一次。 实现&…

023:vue中解决el-date-picker更改样式不生效问题

第023个 查看专栏目录: VUE ------ element UI 本文章目录 修改后的效果示例源代码(共52行)核心内容步骤:(1)更改样式(2)添加参数 专栏目标 在vue项目开发中,我们打算保持颜色的一致…

serve : 无法将“serve”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

1、在学习webpack打包的时候,需要 serve用来启动开发服务器来部署代码查看效果的。安装完之后运行出现以下错误: 2、使用命令查看安装目录: npm list -g我们已经安装过了 3、解决: 我们看到上图路径在:C:\Users\qiy…

微信小程序使用npm引入三方包详解

目录 1 前言2 微信小程序npm环境搭建2.1 创建package.json文件2.2 修改 project.config.json2.3 修改project.private.config.json配置2.4 构建 npm 包2.5 typescript 支持2.6 安装组件2.7 引入使用组件 1 前言 从小程序基础库版本 2.2.1 或以上、及开发者工具 1.02.1808300 或…

【PACS源码】认识PACS的架构和工作流程

(一)PACS系统的组成及架构 PACS系统的基本组成部分包括:数字影像采集、通讯和网络、医学影像存储、医学影像管理、各类工作站五个部分。 而目前PACS系统的软件架构选型上看,主要有C/S和B/S两种形式。 C/S架构,即Client…

Unity 变量修饰符 之protected ,internal,const , readonly, static

文章目录 protectedinternalconstreadonlystatic protected 当在Unity中使用C#编程时,protected是一种访问修饰符,用于控制类成员(字段、方法、属性等)的可见性和访问权限。protected修饰的成员可以在当前类内部、派生类&#xf…

构造函数内的方法 直接写在构造函数内部 与 写在prototype上 的区别

文章目录 前言区别总结 前言 以前没注意过, 去创建一个构造函数的时候, 方法都是直接写在函数内的. 在构造函数需要多次实例化的情况下有缺点, 不过幸好以前项目里的构造函数也不需要多次实例化, 缺点没有生效. 区别 为了比较, 先在构造函数内部直接书写方法, 查看实例化结果…

EasyExcel工具 Java导出Excel表数据

EasyExcel 优点坐标依赖读Excel最简单的读的对象写Excel最简单的写的对象最简单的读的监听器填充Excel简单填充(对象)复杂填充(对象和列表)官网:https://easyexcel.opensource.alibaba.com/ EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。…

使用ChatGPT进行创意写作的缺点

Open AI警告ChatGPT的使用者要明白此工具的局限性,更不应完全依赖。作为一位创作者,这一点非常重要,应尽可能地避免让版权问题或不必要的文体问题出现在自己的作品中。[1] 毕竟使用ChatGPT进行创意写作目前还有以下种种局限或缺点[2]&#xf…

Nginx高可用集群

目录 一.简介二.案例1.实现思路2.配置文件修改3.实现效果故障转移机制 一.简介 以提高应用系统的可靠性,尽可能地减少中断时间为目标,确保服务的连续性,达到高可用的容错效果。例如“故障切换”、“双机热备”、“多机热备”等都属于高可用集…

蓝凌OA custom.jsp 任意文件读取

​曾子曰:“慎终追远,民德归厚矣。” 漏洞复现 访问漏洞url: 出现漏洞的文件为 custom.jsp,构造payload: /sys/ui/extend/varkind/custom.jsp var{"body":{"file":"file:///etc/passwd&q…

圆的反演 hdu 6097

欢迎关注更多精彩 关注我,学习常用算法与数据结构,一题多解,降维打击。 题目大意 http://acm.hdu.edu.cn/showproblem.php?pid6097 有一个圆C,它的圆心是O(0,0), 半径是r。 在C内部或边界上有两点P和Q,OPOQ。 求解…