当前位置: 首页 > news >正文

【go入门】常量

目录

  • 定义
  • 枚举
  • iota
  • 思考题

定义

go语言常量的定义和其他语言类似,常量中的数据类型只能是布尔型,数字型(整型、浮点型、复数)和字符串型
常量的定义方式和变量一样,只不过变量定义使用 var 关键字,而常量定义是使用 const 关键字:

//常量的定义方式
const a string = "hello"

同样,类型也可以省略,编译器会根据值来判断类型:

const a = "hello"

多个相同类型的常量声明:

const a, b = 1, 2

枚举

在C++中,由专门的枚举类型关键字enum,在go语言中则用常量表示枚举:

const (fruit = 0vegetable = 1
)

数字 0 代表水果,数字 1 代表蔬菜

//demo1
package mainimport ("fmt""unsafe" 
)const (a = "hello"b = len(a) //长度c = unsafe.Sizeof(a) //字节数
)func main() {fmt.Println(a, b, c)
}

结果是:

hello 5 16

为什么 unsafe.Sizeof() 是 16 呢?
实际上,只要是字符串类型它都是 16。
因为字符串类型对应一个结构体,该结构体有两个域,一个是指向字符串的指针,一个是字符串的长度,每个域都占 8 个字节,但是不包含指针指向的字符串的内容,也就是说字符串里你放 3 个字符和 5 个字符最终都占 16 个字节。
把上面说的结构体可以看成:

typedef struct {char* buffer; //指向该字符串的指针占 8 个字节size_tlen; //字符串的长度占 8 个字节
} String;

第二个域字符串的长度占 8 个字节,哪怕这个字符串的长度是 0,它也占 8 个字节。可以想象一下,假设一个教室里面有 n 个座位,这 n 个座位不管坐多少个人,哪怕没有一个人,这些座位仍然把教室的空间占着。除非把教室拆了,同理创建字符串的时候空间已经占用了,无论里面有没有东西。

iota

iota 是一个特殊常量。可以认为是一个能被编译器修改的常量
iota 在 const 关键字出现时将被重置为 0,const 中每新增一行常量声明将使 iota 增加 1。

const (a = iotab = iotac = iota
)

第一个 iota 为 0,当 iota 在新的一行被使用时,它的值会自动加 1,所以可以简写:

const (a = iotabc
)
//demo2
package mainimport "fmt"func main() {const (a = iota    //开始计数,从 0 开始b           //1c           //2d = "hello" //3,helloe           //4,相当于 e = "hello"f           //5,相当于 f = "hello"g = 1       //6,1h           //7,相当于 h = 1i           //8,相当于 i = 1j = iota    // 恢复计数,9k           //10l           //11)fmt.Println(a, b, c, d, e, f, g, h, i, j, k, l)
}

输出结果是:

0 1 2 hello hello hello 1 1 1 9 10 11

那么 iota 在 const 关键字出现时将被重置为 0 怎么理解呢?先看这段代码:

//demo3
package mainfunc main() {const (a = iotabcdef)println(a, b, c, d, e, f)
}

输出结果是:

0 1 2 3 4 5

再看这段代码:

//demo4
package mainfunc main() {const (a = iotabc)println(a, b, c)const (d = iotaef)println(d, e, f)
}

输出结果是:

0 1 2
0 1 2

稍微琢磨一下上述两段代码,就会很容易理解 iota 在 const 关键字出现时将被重置为 0 的含义了。

思考题

//demo5
package mainimport "fmt"func main() {const (a = 1 << iota //第一行b = 3 << iota //第二行c             //第三行d             //第四行)fmt.Println(a, b, c, d)
}

这段代码的结果是多少?
首先 << 表示左移。

  • 先来看第一行,iota 为 0,因为这个 iota 是在 const 关键字刚出现,那么第一行就可以表示成:
a = 1 << 0

左移 0 位,那就是没有变化。

  • 再来看第二行,此时 iota 为 1,那么第二行就可以表示成:
b = 3 << 1

3 的二进制是 0000 0011(为了看着方便,我用八位二进制表示),左移 1 位就变成了 0000 0110,它的值是 2 ^ 2 + 2 ^ 1 = 6

  • 再看第三行,有了前面的 iota 的知识,我们知道第三行本质上就是:
c = 3 << iota

此时 iota 已经变成 2 了。那么实际上第三行是:

c = 3 << 2 

3 的二进制是 0000 0011,左移两位变成了 0000 1100,它的值是 2 ^ 3 + 2 ^ 2 = 12

  • 再看第四行,和第三行的区别在于 iota 变成了 3,所以实际上第四行是:
d = 3 << 3

将 0000 0011 左移 3 位变成了 0001 1000,它的值是 2 ^ 4 + 2 ^ 3 = 24。

所以整段代码最终的输出结果是:

1 6 12 24

对于左移操作,有简便算法,左移一位表示乘以 2,左移 n 位表示该数乘以 2 ^ n(2的n次方),所以左移一位其实是乘以 2 的一次方,左移零位也是一样。可以用这种方法再算一遍,看和上述结果是否一致。而右移和左移的唯一区别就是左移是乘以,右移是除以。

相关文章:

【go入门】常量

目录 定义枚举iota思考题 定义 go语言常量的定义和其他语言类似&#xff0c;常量中的数据类型只能是布尔型&#xff0c;数字型&#xff08;整型、浮点型、复数&#xff09;和字符串型 常量的定义方式和变量一样&#xff0c;只不过变量定义使用 var 关键字&#xff0c;而常量定…...

2.1 HuggingFists系统架构(二)

部署架构 上图为HuggingFists的部署架构。从架构图可知&#xff0c;HuggingFists主要分为服务器(Server)、计算节点(Node)以及数据库(Storage)三部分。这三部分可以分别部署在不同的机器上&#xff0c;以满足系统的性能需求。为部署方便&#xff0c;HuggingFists社区版将这三部…...

工具类:JWT

工具类&#xff1a;JWT 依赖JwtUtil.java 依赖 <!-- 创建、解析 和 验证JSON Web Tokens (JWT)--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependenc…...

王道-计网

2 采用滑动窗口机制对两个相邻结点A(发送方)和B(接收方)的通信过程进行流量控制。假定帧的序号长度为3比特,发送窗口与接收窗口的大小均为7,当A发送了编号为0、1、2、3这4个帧后,而B接收了这4个帧,但仅应答了0、1两个帧,A继续发送4、5两个帧,且这两个帧已进入B的接收…...

【机器学习(十)】时间序列案例之月销量预测分析—Holt-Winters算法—Sentosa_DSML社区版

文章目录 一、Holt-Winters算法原理(一) 加法模型(二) 乘法模型(三) 阻尼趋势 二、Holt Winters算法优缺点优点缺点 三、Python代码和Sentosa_DSML社区版算法实现对比(一) 数据读入和统计分析(二) 数据预处理(三) 模型训练和模型评估(四) 模型可视化 四、总结 一、Holt-Winters…...

Webpack优化问题

目录 打包流程swcthread-loaderhash升级插件 打包流程 webpack 的打包流程大致可以分为以下几个步骤&#xff1a; 初始化&#xff1a;webpack 通过配置文件和 Shell 参数&#xff0c;初始化参数&#xff0c;确定入口文件、输出路径、加 载器、插件等信息。接下来读取配置文件…...

yjs10——pandas的基础操作

1.pandas读入文件——pd.read_cvs() data pd.read_csv("E:/机器学习/data/salary.csv") 注意&#xff1a;1.是pd.read_cvs&#xff0c;不要顺手写成np.read_cvs 2.路径的斜杠方向是/&#xff0c;不是\&#xff0c;如果直接从电脑粘贴路径&#xff0c;路径写法是\&am…...

Squaretest单元测试辅助工具使用

1、idea安装插件 Squaretest 然后关掉idea 2、安装字节码软件&#xff08;jclasslib&#xff09; 3、找到idea里面的Squaretest安装目录 找到包含TestStarter的jar包 4、打开 com.squaretest.c.f 打开后选择常量池 5、找到第16个修改 Long value值&#xff0c;修改的数字即为使…...

MFU简介

1、缩写 MFU - Mask Field Utilization&#xff08;光刻掩膜版有效利用比例&#xff09; GDPW - Gross Die Per Wafer&#xff0c;每张wafer上die的数量 2、什么是MASK 在光刻机中&#xff0c;光源&#xff08;紫外光、极紫外光&#xff09;透过mask曝光在晶圆上形成图…...

十分钟实现内网连接,配置frp

十分钟实现内网连接&#xff0c;配置frp 一.frp是什么&#xff1f;其实是一款实现外网连接内网的一个工具&#xff0c;个人理解&#xff0c;说白了就像是teamviwer一样&#xff0c;外网能访问内网。 利用处于内网或防火墙后的机器&#xff0c;对外网环境提供 http 或 https 服…...

解决MySQL命令行中出现乱码问题

在MySQL命令行中遇到乱码问题通常是由于字符编码设置不正确导致的。以下是一些解决步骤&#xff1a; 1. **检查和设置字符集**&#xff1a; 首先&#xff0c;您需要确保MySQL服务器、客户端和数据库使用的是正确的字符集。您可以通过执行以下命令来查看当前的字符集设置&…...

TS系列(7):知识点汇总

你好&#xff0c;我是沐爸&#xff0c;欢迎点赞、收藏、评论和关注。 一、TS是什么&#xff1f; TypeScript 由微软开发&#xff0c;是基于 JavaScript 的一个扩展语言。TypeScript 包含 JavaScript 的所有内容&#xff0c;是 JavaScript 的超集。TypeScript 增加了静态类型检…...

Unity 查看Inspectors组件时严重掉帧

遇到一个问题&#xff0c;就是运行一个脚本的时候&#xff0c;只要我查看它的Inspectors&#xff0c;就会严重掉帧。 原本是30fps&#xff0c;只要查看这个组件&#xff0c;就掉到5fps。 这还真有点像波粒二象性&#xff0c;一观察就会掉帧&#xff0c;不观察就正常。 using…...

golang学习笔记23-面向对象(五):多态与断言【重要】

本节也是GO核心部分&#xff0c;很重要。 注&#xff1a;由于导包语句已经在19讲&#xff08;笔记19&#xff1a;面向对象的引入&#xff09;展示过了&#xff0c;所以这里就不展示了。 一、多态&#xff08;Polymorphism&#xff09; 变量&#xff08;实例&#xff09;具有多…...

RabbitMQ基础知识

1.1 什么是MQ? 消息队列&#xff08;Message Queue&#xff09;&#xff0c;是基础数据结构中 “先进先出” 的一种数据结构。 一般用来解决应用解耦、异步消息、流量削峰等问题&#xff0c;实现高性能、高可用、可伸缩和最终一致性架构。 RabbitMQ可以理解为一个邮箱&#x…...

基于Python大数据的音乐推荐及数据分析可视化系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…...

安达发|太阳能设备行业APS计划排程软件能解决哪些问题

在当今快速发展的太阳能设备行业中&#xff0c;高级计划与排程&#xff08;APS&#xff09;软件成为了企业优化生产流程、提高生产效率和满足市场需求的关键工具。APS软件通过集成先进的算法和数据分析技术&#xff0c;为企业提供了一个全面的生产计划和排程解决方案。本文将探…...

CaChe的基本原理

目录 一、Cache的定义与结构 二、Cache的工作原理 三、Cache的映射与替换策略 四、Cache的写操作处理 Cache&#xff0c;即高速缓冲存储器&#xff0c;是计算机系统中位于CPU与主存之间的一种高速存储设备。它的主要作用是提高CPU对存储器的访问速度&#xff0c;从而优化系…...

数据结构-栈(理解版)

一、栈的定义 相信大家对于栈或多或少有一些了解&#xff0c;可能大多数人会告诉你栈是一种先进后出的数据结构。这其实说了跟没说一样(❁◡❁)&#xff01;当然&#xff08;last in&#xff0c;first out&#xff09;是栈最有特色的性质。 这里可以给大家一些比较好理解的例…...

NAND Flash虚拟层初始化

在整个NAND Flash初始化过程中,其主要过程由NAND_Init()函数来完成的,因此以下以NAND_Init()函数作为入口,对NAND Flash虚拟层初始化进行全面分析: NAND_Init()NAND_PhyInit()FMT_Init()FMT_FormatNand()LML_Init() NAND_Init()函数首先调用NAND_PhyInit()函数…...

zabbix7.0监控linux主机案例详解

前言 服务端配置 链接: rocky9.2部署zabbix服务端的详细过程 环境 主机ip应用zabbix-server192.168.10.11zabbix本体zabbix-client192.168.10.12zabbix-agent zabbix-server(服务端已配置) 具体实现过程 zabbix-client配置 安装zabbix-agent 添加扩展包 dnf -y instal…...

2024重生之回溯数据结构与算法系列学习(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】

欢迎各位彦祖与热巴畅游本人专栏与博客 你的三连是我最大的动力 以下图片仅代表专栏特色 专栏跑道一 ➡️ MYSQL REDIS Advance operation 专栏跑道二➡️ 24 Network Security -LJS ​ ​ ​ 专栏跑道三 ➡️HCIP&#xff1b;H3C-SE;CCIP——LJS[华为、华三、思科高级网络]…...

django drf 过滤器

排序 代码&#xff1a; from rest_framework.generics import ListAPIView from rest_framework.filters import OrderingFilterclass TestListAPIView(ListAPIView):queryset models.Course.objects.filter(is_deleteFalse).all()serializer_class serializers.TestModelS…...

蓝桥杯—STM32G431RBT6(RTC时钟获取时间和日期)

一、RTC是什么&#xff0c;有什么用&#xff1f; 在 STM32 中&#xff0c;RTC&#xff08;Real-Time Clock&#xff0c;实时时钟&#xff09;主要有以下作用&#xff1a; 时间保持&#xff1a;即使在系统断电情况下&#xff0c;也能持续记录时间。&#xff08;需要纽扣电池供电…...

DriveVLM 论文学习

论文链接&#xff1a;https://arxiv.org/abs/2402.12289 解决了什么问题&#xff1f; 自动驾驶对交通行业有着革命性的作用&#xff0c;实现 FSD 的一个主要障碍就是场景理解。场景理解涉及在复杂且不可预测的环境中进行导航&#xff0c;这些环境可能包括恶劣的天气条件、复杂…...

Unity3D 客户端多开

Unity3D 实现客户端多开 客户端多开 最近在做好友聊天系统&#xff0c;为了方便测试&#xff0c;需要再开一个客户端。 简单的方法&#xff0c;就是直接拷贝一个新的项目&#xff0c;但是需要很多时间和占用空间。 查阅了网络资料&#xff0c;发现有一种软链接&#xff0c;…...

使用代理IP数据采集都需要注意那些?

“在当今大数据时代&#xff0c;数据采集成为了企业决策和个人研究的重要依据。然而频繁访问目标网站往往会引发IP被封锁的风险&#xff0c;这时使用代理IP就显得尤为重要。但代理IP的使用并非毫无风险&#xff0c;以下是使用代理IP进行数据采集时需要注意的几个关键事项。” 一…...

城市大脑:智慧城市的神经中枢——典型实践与经验启示

随着信息技术的飞速发展&#xff0c;智慧城市已成为全球城市转型升级的重要方向。“城市大脑”作为智慧城市的核心引擎&#xff0c;正以其强大的数据处理能力、智能决策支持和跨领域协同优势&#xff0c;引领着城市管理与服务的深刻变革。本文将深入探讨几个具有代表性的“城市…...

嵌入式中CW32多功能测试笔实现

前言 起心动念 在日常的硬件调试工作中,我们最常使用的仪器仪表可能就是万用表了,虽然万用表号称“万用”,但大部分时候,我们需要使用到的功能无非是电压测量和通断测量。 作为调试的“得力干将”,万用表有时候也会存在存在一些缺点和局限性,比如:体积较大不便于携带…...

Python 时间占位符:毫秒的使用

Python 时间占位符&#xff1a;毫秒的使用 在 Python 中&#xff0c;处理时间和日期是一个非常常见的任务。在进行时间格式化时&#xff0c;使用占位符来表示特定的时间单位是非常重要的。特别是毫秒&#xff08;ms&#xff09;&#xff0c;它在许多应用中扮演着关键角色&…...

php源码建站 一品资源/手游推广平台代理

本文通过列举出一些常见的实例来分析Python3.0与2.X版本的区别&#xff0c;是作者经验的总结&#xff0c;对于Python程序设计人员来说有不错的参考价值。具体如下&#xff1a;做为一个前端开发的码农&#xff0c;最近通过阅读最新版的《A byte of Python》并与老版本的《A byte…...

网站建设收费标准市场/网站统计数据

原创!ngxtop-监控nginx的利器!!! 无论名称还是界面,ngxtop的灵感均源自大名鼎鼎的top命令.ngxtop的功能就是,分析Nginx访问日志文件&#xff08;以及其他日志文件,比如Apache2日志&#xff09;,并通过类似top的界面,实时显示分析后所得的结果.你可能吹嘘自己的综合监控工具拥有…...

百度推广 网站建设/seo网站关键词优化价格

sql中的取模,取整,字符串连接等操作:c a mod b ;//取模c trunc(a/b);//取整//连接两个字符串,sql中不能用号连接两个字符串c a || b;或c concat(a,b);----------------------------------------------------------关于Oracle取整的函数分别有以下几种:1.取整(大) select ce…...

php网站开发目录/如何优化推广中的关键词

TVS管和ESD管工作原理一样&#xff0c;功率和封装不一样&#xff1b; ESD体积比较小&#xff0c;主要是用来防静电&#xff0c;防静电就要求电容值低&#xff1b; TVS的电容值比较高&#xff0c;体积比较大&#xff0c;浪涌保护。 深圳市阿赛姆科技有限公司 专业做ESD防护 深…...

网站代码输入完成之后要怎么做/爱用建站

导读:本文是matlab类有关专科毕业论文范文与MATLAB方面专科毕业论文范文.周子健张飞【摘 要】论文前半部分根据相关理念和相关概念设计出了直流调压调速控制系统的各个环节之间的联系以及各个部分的原部件.随后对这些原部件的参数进行了精确的计算,设计出了各个部分应该采用的相…...

用什么做网站开发/win7优化软件

今天主要是寻找板卡问题然后维修&#xff0c;这次生产了600PCS板卡&#xff0c;第一次小批量生产。记得第一次打样是4PCS&#xff0c;很多问题都无法暴露出来&#xff0c;这次600PCS就暴露不少问题了。首先功耗问题就有两个&#xff0c;然后其他的小问题有几个&#xff0c;所以…...