Go语言程序设计(二)常量、变量、布尔类型与运算符

news2024/11/24 4:08:40

一、常量、变量与命名规则

        常量使用关键字const声明;变量可以使用关键字var声明,也可以使用快捷变量声明语法。Go语言可以自动推断出所声明变量的类型,但是如果需要显式指定其类型也是合法的,比如声明一种与Go语言的常规推断不同的类型。下面是一些声明的例子:

        对于整型字面量Go语言推断其类型为int,对于浮点型字面量Go语言推断其类型为float64,对于复数字面量Go语言推断其类型为complex128 (名字上的数字代表它们所占的位数)。通常的做法是不去显式地声明其类型,除非我们需要使用一个Go语言无法推断的特殊类型。指定类型的数值常量(即这里的top)只可用于别的数值类型相同的表达式中(除非经过转换)。未指定类型的数值常量可用于别的数值类型为任何内置类型的表达式中(例如,常量limit可以用于包含整型或者浮点型数值的表达式中)。
        变量i并没有显式的初始化。这在Go语言中非常安全,因为如果没有显式初始化,Go语言总是会将零值赋值给该变量。这意味着每一个数值变量的默认值都保证为0,而每个字符串都默认为空。这可以保证Go程序避免遭受其他语言中的未初始化的垃圾值之灾。

枚举

        需要设置多个常量的时候,我们不必重复使用const关键字,只需使用const关键字一次就可以将所有常量声明组合在一起。(该语法也可以用于使用var关键字来声明一组变量.)如果我们只希望所声明的常量值不同,并不关心其值是多少,那么可以使用Go语言中相对比较简陋的枚举语法。

        这3个代码片段的作用完全一样。声明一组常量的方式是,如果第一个常量的值没有被显式设置(设为一个值或者是iota),则它的值为零值,第二个以及随后的常量值则设为前面一个常量的值,或者如果前面常量的值为iota,则将其后续值也设为iota.后续的每一个iota值都比前面的iota值大1。
        更正式的,使用iota预定义的标识符表示连续的无类型整数常量。每次关键字const出现时,它的值重设为零值(因此,每次都会定义一组新的常量),而每个常量的声明的增量为1。因此在最右边的代码片段中,所有常量(指Magenta和Yellow)都被设为iota值。由于Cyan紧跟着一个const关键字,其iota值重设为0,即Cyan的值。Magenta 的值也设为iota,但是这里iota的值为1。类似地,Yellow的值也是iota,它的值为2。而且,如果我们在其末尾再添加一个Black (在const组内部),它的值就被隐式地设为iota,这时它的值就是3。
        另一方面,如果最右边的代码片段中没有iota标识符, Cyan就会被设为0,而Magenta的值则会设为Cyan的值, Yellow的值则被设为Magenta的值,因此最后它们都被设为零值。类似的,如果Cyan被设为9,那么随后的值也会被设为9。或者,如果Magenta的值设为5,Cyan的值就被设为0 (因为是组中的第一一个值,并且没有被设为一一个显式的值或者iota), Magenta的值就是5 (显式地设置),而Yellow的值也是5 (前一个常量的值)。

常量声明过程中的注意事项。在Go语言中声明和使用常量时,应注意以下事项:

  • 常量的值在编译时就已经确定,在运行时不能改变常量的值;
  • 常量的定义格式与变量基本相同,可以单个定义,也可以多个定义,比如常量组,这在后面的内容中会讲到;
  • 等号右侧必须是常量或者常量表达式,因为只有常量表达式的值在编译时才是确定的,如果是运行时才给常量赋值,编译时就会报错;
  • 常量表达式中的函数必须是Go语言内置函数,不能是用户自定义函数,或是从其他包中导入的函数,因为只有内置函数在编译之前才是确定的。

Go语言使用关键字“const”声明常量,需要指定常量名称和常量数据类型,常量一般声明格式如下:

const < constName> [ constType] = <赋值表达式>

Go语言使用关键字“var”来声明变量,需要指定变量名称和变量数据类型,变量一般声明格式如下。

var < variableName> [ variableType]

标识符

        和其他程序设计语言一样,Go语言中用来对符号常量、变量、函数、数组、切片、通道等数据对象命名的有效字符序列统称为标识符(Identifier)。简单来说,标识符就是数据对象的名字。

Go语言命名规则

在Go语言中,不管是常量的命名还是变量的命名,都要遵循标识符命名规则:

  • (1)变量名必须以字母或下划线开始。
  • (2)必须使用英文字母、数字、下划线组成,不能出现空格或制表符。
  • (3)不能使用Go语言内置关键字与保留字,如go、goto、break等。
  • (4)大小写敏感,比如x和X是两个不一样的标识符。

二、数据类型

1、布尔型数据

        Go语言的布尔型数据(Boolean)和其他编程语言一样,使用关键字“bool”定义。布尔型数据在内存中的字节长度为1,取值只能是“true”和“false",这和其他编程语言有所不同。比如有些编程语言可以用“零”来代替“false" ,用“非零”代替“true",Go语言则不允许这么做。

在使用布尔型数据时,需要注意以下两点。
(1)布尔类型不接受其他数据类型赋值,如让b1=1;b2=0,编译时会出现错误提示:
cannot use 1 (type int) as type bool in ass ignment
(2)布尔类型不能进行强制类型转换,比如bl= bool(1),编译时会出现错误提示:
cannot convert 1 (type int) to type bool

2、数值类型

整型

        Go语言提供了11种整型,包括5种有符号的和5种无符号的,再加上1种用于存储指针的整
型类型。它们的名字和值在表2-5中给出。另外, Go语言允许使用byte来作为无符号uint8类型的同义词,并且使用单个字符(即Unicode码点)的时候提倡使用rune来代替int32.大多数情况下,我们只需要一种整型,即int.它可以用于循环计数器、数组和切片索引,以及任何通用目的的整型运算符。通常,该类型的处理速度也是最快的。

        Go语言的整型支持表2-4中所列的所有算术运算,同时它们也支持表2-6中所列出的算术和
位运算。所有这些操作的行为都是可预期的。

        将一个更小类型的整数转换成一个更大类型的整数总是安全的(例如,从int16转换成int32 ),但是如果向下转换一个太大的整数到一个目标类型或者将一个负整数转换成一个无符号整数,则会产生无声的截断或者一个不可预期的值。这种情况下最好使用一个自定义的向下转换函数。

浮点类型

        Go语言提供了两种类型的浮点类型和两种类型的复数类型,它们的名字及相应的范围在表2-7中给出。

        Go语言的浮点数支持表2-4中所有的算术运算。math包中的大多数常量以及所有函数都在表2-8和表2-10中列出。

 复数类型

复数(Complex number)是指能写成a+ bi形式的数,这里a和b是实数,i是虚数单位(即-1开根)。
在Go语言中,复数实际上由两个浮点数构成,一个表示实部(real),一个表示虚部(imag),这和数学上的复数表示形式基本一致。
Go语言定义了两种复数类型:complex64和complex128,如表2-3所示。

 

 三、运算符

1、算术运算符

        Go语言的算术运算符共有5种,且都是二元运算符,如表2-4所示。由算术运算符和操作数组成的式子叫算术表达式。

 使用算术运算符要注意以下两点:

  • 乘除法优先级高于加减法,即先乘除,后加减。
  • 在Go语言中++和 - - 是语句而非表达式。

 2、关系运算符

        Go语言关系运算符共有6种,都是二元运算符,如表2-5所示。由关系运算符和操作数组成的式子叫关系表达式。

3、逻辑运算符

        逻辑运算符用来对操作数进行基本逻辑运算,逻辑运算包括“与”、“或”、“非”,Go语言提供了三种逻辑运算符,如表2-6所示。

        逻辑运算的操作数是bool型,逻辑运算的结果也是bool型。表2-7是逻辑运算的“真值表”,表中a、b为两个操作数,其值都是bool型的。

 4、位运算符

        位运算符用来对操作数的二进制位进行按位操作,Go语言共提供了6种位运算符,如表2-8所示。位运算的操作数是整型或byte型,其结果也是整型或byte型。

 5、通道运算符

通道(Channel),是Go语言提供的消息通信机制,它类似于单双向数据管道(Pipe),用户可以使用通道在两个或多个Goroutine之间传递消息,通道使用运算符“<-”接收或者发送数据。
通道接收数据的格式如下:

ch <- value

通道发送数据的格式如下:

value =<- ch

在上面的操作语句中,ch表示通道,value表示数据

6、运算符的优先级和结合性

        Go语言规定了运算符的优先级和结合性。运算符优先级共分为7级,由7→1优先级由高→低,如表2-9所示。

       Go语言运算表达式中规定全部运算符遵循“自左向右”的结合方向,比如表达式a-b+c,先执行a-b的运算,再执行加c的运算。

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

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

相关文章

途乐证券|沪指缩量跌0.69%,汽车等板块走弱,稀土概念逆市活跃

6日早盘&#xff0c;三大股指股指盘中震动回落&#xff0c;科创50指数逆市上扬&#xff1b;两市半日成交超5000亿元&#xff0c;北向资金小幅净流出。 到午间收盘&#xff0c;沪指跌0.53%报3205.97点&#xff0c;深成指跌0.39%&#xff0c;创业板指跌0.61%&#xff0c;科创50指…

新版 Alist + RaiDrive 挂载阿里云盘 Open 到本地,实现网盘本地化

新版 Alist RaiDrive 挂载阿里云盘 Open 到本地&#xff0c;实现网盘本地化 1. 下载 Alist 和 RaiDrive2. 配置 Alist3. 填写挂载路径和刷新令牌4. 获取刷新令牌5. 使用 RaiDrive 挂载 1. 下载 Alist 和 RaiDrive 下载地址&#xff1a;Alist RaiDrive 安装 提取码: qu38 Al…

XXX SAP系统中支持XX动力替代件功能(投稿数字化月报三)

XXX集团、XX动力、XXX汽车IT组成替代件开发小组&#xff0c;快速高效完成XX动力替代件业务需求。提供从XX动力的PLM系统中开发新增含有替代件功能的BOM物料清单、在XXX汽车SAP系统中启用替代件功能、再到现场替换件业务执行的全套解决方案。 在BOM上体现出物料的替换关系&#…

汽车电子—制作DBC文件

文章目录 一、前期准备二、新建DBC文件三、添加报文&#xff08;Msg&#xff09;四、添加信号4.1 大小端模式4.2 创建数值表4.3 添加信号 五、关联信号和报文六、设置报文发送类型和周期七、编辑通信矩阵 一、前期准备 首先需要安装制作DBC文件的软件&#xff0c;这里使用的是…

计算机网络概述(二)

计算机网络的定义 计算机网络并没有一个统一的定义&#xff0c;不同阶段是有不同的定义。 最简单的定义&#xff1a;计算机网络是一些互联的&#xff0c;自治的计算机集合。互联&#xff1a;指计算机之间可以通过有线或无线的方式进行数据通信&#xff1b;自治指的是独…

MySQL_01删除主键索引

文章目录 添加主键索引删除主键索引 添加主键索引 alter table 表名 add primary key(字段名)删除主键索引 -- 如果这个主键是自增的&#xff0c;先取消自增长 alter table 表名 modify 字段 int; alter table 表名 drop primary key;

消息队列 原理剖析

什么是消息队列&#xff1f; ​​消息队列是一种用来存储消息的队列。 消息队列能用来做什么&#xff1f; 1、消息或任务的延迟处理。 2、在复杂的业务场景下给系统减压。 3、提示用户体验感&#xff0c;增强用户体验。 4、敏感操作高安全环境处理。 场景举例1&#xff1a…

途乐证券|股票低开好还是高开好?股票低开高走再回落什么意思?

对于一向不涨的股票&#xff0c;出资者常常感到困惑和不安。那么一向不涨的股票要留吗&#xff1f;什么股票更简单上涨&#xff1f;为我们预备了相关内容&#xff0c;以供参阅。 一向不涨的股票要留吗&#xff1f; 一向不涨的股票要不要留没有一个绝对的答案&#xff0c;出资者…

Vue2.0-3.0 入门到实战 - 2 初始及插件安装

1 Vue 指令 v- 前缀的 特殊标签属性 1 v-html"表达式" 可以解析 文本html 类似 innerHtml 2 v-show 与 v-if v-show"表达式" true 表示 显示 false 标识隐藏 v-if"表达式" true 表示 显示 false 标识隐藏 区别 当v-show 的值…

青岛大学_王卓老师【数据结构与算法】Week04_05_双向链表的删除_学习笔记

本文是个人学习笔记&#xff0c;素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享&#xff0c;另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权&#xff0c;请留言作删文处理。 课程视频链接&#xff1a; 数据结构与算法基础–…

【CMake】构建类型详细解读

1. CMAKE_BUILD_TYPE官方资料 CMake可以配置构建类型&#xff0c;例如&#xff1a;Debug、Release等&#xff0c;控制生成构建系统使用的配置变量 是 CMAKE_BUILD_TYPE 。该变量默认为空&#xff0c;CMake识别的值为:Debug&#xff1a;用于在没有优化的情况下&#xff0c;使用带…

音频格式怎么转换成WAV?分享这三个WAV转换器!

随着数字时代的进步与发展&#xff0c;音频格式也变得越来越多样化。人们为了满足自己的需求&#xff0c;开始使用各种音频格式来存储和播放音乐。然而&#xff0c;不同的音频格式和不同的播放器之间常常存在兼容性问题&#xff0c;这就需要我们进行音频格式转换&#xff0c;以…

Spark SQL、DataFrame、DataSet是什么

在很多情况下&#xff0c;开发人员并不了解Scala语言&#xff0c;也不了解Spark常用的API&#xff0c;但又非常想要使用Spark框架提供的强大的数据分析能力。Spark的开发工程师们考虑到了这个问题&#xff0c;于是利用SQL语言的语法简洁、学习门槛低以及在编程语言中普及程度和…

开放式耳机推荐,盘点几款好用的开放式耳机

一款好的开放式蓝牙耳机不仅可以让我们缓解疲劳&#xff0c;还能更有动力&#xff0c;特别是音质的表现&#xff0c;如果一款开放式耳机的音质表现不好&#xff0c;那这款耳机也就没有多大意义了&#xff0c;还有就是佩戴舒适性&#xff0c;所以选择一款好的开放式蓝牙耳机也很…

vs2015调试时无法显示QT变量值

问题描述&#xff1a; vs2015调试时无法显示 QT变量值&#xff0c;只能显示地址&#xff0c;导致想要查看变量值的时候&#xff0c;只能想办法打印出来&#xff0c;非常麻烦。如下图&#xff1a; 问题解决&#xff1a; 调试 - 选项 - 调试 - 常规 - 去掉 使用本机兼容性模式&am…

压测性能调优之gateway网关

1、 压测资源和场景 &#xff08;1&#xff09;14个接口同时压测5000并发&#xff1b; &#xff08;2&#xff09;服务资源&#xff1a;采用k8s部署&#xff0c;总共25台8核64G阿里云机器&#xff0c;node节点个数22个&#xff0c;master3个&#xff0c;15个网关实例&#xf…

综合评价算法 | Matlab实现基于CRITIC法的综合评价算法

文章目录 效果一览文章概述研究内容源码设计参考资料效果一览 文章概述 综合评价算法 | Matlab实现基于CRITIC法的综合评价算法 研究内容 CRITIC法是一种比熵权法和标准离差法更好的客观赋权法。它是基于评价指标的对比强度和指标之间的冲突性来综合衡量指标的客观权重。考虑指…

【AttributeError: module ‘cv2‘ has no attribute ‘saliency‘】

AttributeError: module ‘cv2’ has no attribute ‘saliency’ 问题解析 已经成功安装cv2且import cv2成功的情况下&#xff08;如下图黄色框所示&#xff09;&#xff0c;在运行时报如下所示错误&#xff1a; AttributeError: module cv2 has no attribute saliency 这个错…

Guitar Pro8.1最新版吉他练习好助手

Guitar Pro研发团队深知「简谱」之于中国用户的重要性&#xff0c;在经过几个月的测试和开发&#xff0c;最新的Guitar Pro软件已全面支持简谱功能&#xff01;会带给您音乐学习和创作的极大便利。相信玩吉他的朋友多多少少都听说过Guitar Pro这款软件&#xff0c;那大家知道Gu…

stable diffusion 调试天坑 (setup.py)

第一次下载V1的stable diffusion (https://github.com/CompVis/stable-diffusion) 到本地调试&#xff0c;根据其要求创建了虚拟环境&#xff0c;自动运行了setup.py文件&#xff0c;长这样 from setuptools import setup, find_packagessetup(namelatent-diffusion,version0.…