编程笔记 Golang基础 018 常量与变量
编程笔记 Golang基础 018 常量与变量
- 一、常量
- 常量的定义
- iota
- 特性
- 二、变量
- 变量定义
- 变量作用域
- 零值与初始化
- 类型转换
- 注意事项
- 三、重要性
常量,就是在程序编译阶段就确定下来的值,而程序在运行时则无法改变该值。变量是程序的基本组成单位,用于存储和表示可变的数据。
一、常量
常量,就是在程序编译阶段就确定下来的值,而程序在运行时则无法改变该值。在Go程序中,常量可以是数值类型(包括整型、浮点型和复数类型)、布尔类型、字符串类型等。
常量的定义
常量的定义格式如下:
Go
const identifier [type] = value
identifier 是你为常量指定的名字。
[type] 是可选的,用于显式指定常量的数据类型。如果不提供类型,则编译器会根据 value 的初始值自动推断出类型。
value 是常量的值,它可以是布尔型、数字型(包括整数、浮点数和复数)、字符串或其他常量表达式的结果。
实例
package mainfunc main() {const PI float64 = 3.14const PI2 = 3.1415 // 可以省略类型const (width = 100height = 200)const i, j = 1, 2 // 多重赋值const a, b, c = 1, 2, "foo"
}
const同时声明多个常量时,如果省略了值则表示和上面一行的值相同
package mainimport "fmt"func main() {const (a1 = 100a2a3)fmt.Printf("a1: %v\n", a1)fmt.Printf("a2: %v\n", a2)fmt.Printf("a3: %v\n", a3)
}
运行结果
a1: 100
a2: 100
a3: 100
iota
iota 比较特殊,可以被认为是一个可被编译器修改的常量,它默认开始值是0,每调用一次加1。遇到 const 关键字时被重置为 0。
实例
package mainimport "fmt"func main() {const (a1 = iotaa2 = iotaa3 = iota)fmt.Printf("a1: %v\n", a1)fmt.Printf("a2: %v\n", a2)fmt.Printf("a3: %v\n", a3)
}
运行结果
a1: 0
a2: 1
a3: 2
使用_跳过某些值
package mainimport "fmt"func main() {const (a1 = iota_a2 = iota)fmt.Printf("a1: %v\n", a1)fmt.Printf("a2: %v\n", a2)
}
运行结果
a1: 0
a2: 2
iota声明中间插队
package mainimport "fmt"func main() {const (a1 = iotaa2 = 100a3 = iota)fmt.Printf("a1: %v\n", a1)fmt.Printf("a2: %v\n", a2)fmt.Printf("a3: %v\n", a3)
}
运行结果
a1: 0
a2: 100
a3: 2
特性
不可变性:一旦定义,常量的值就不能被更改。
类型安全:每个常量都有明确的类型,不能进行不兼容类型的隐式转换。
编译期确定:常量表达式的值在编译阶段就已经计算出来,而非运行时。
通过以上介绍,可以看出Go语言中的常量提供了简洁的方式来定义程序中不变的值,并且通过类型检查确保了程序的健壮性和可预测性。
二、变量
在Go语言中,变量是程序的基本组成单位,用于存储和表示可变的数据。以下是Go语言中关于变量的详解:
变量定义
-
基本格式:
var identifier type = value其中
identifier是变量名,type是变量的类型(如 int、string、float64 等),value是初始值。例如:var name string = "Alice" var age int = 25 -
简写形式:
如果初始化时明确给出了变量的值,可以省略变量类型的声明,Go编译器会根据赋值表达式的类型自动推断变量类型。var name = "Bob" // 编译器推断name为string类型 var age = 30 // 编译器推断age为int类型 -
同时声明多个变量:
同一行内可以声明多个同类型变量,用逗号分隔。var a, b, c int = 1, 2, 3 -
短变量声明:
在函数内部,还可以使用简化的变量声明方式,即:=操作符来同时声明并初始化变量,无需使用var关键字。此方式只适用于局部变量。func main() {x, y := 10, 20 // 声明并初始化x和y } -
匿名变量(Blank Identifier):
使用下划线_作为变量名时,表示该变量被声明但不使用,主要用于忽略函数返回的多余值。_, err := someFunctionReturningMultipleValues()
变量作用域
- 在函数外部声明的变量具有包级作用域,在整个包文件内可见,如果不加访问修饰符(如
var variableName),默认为包私有(不可从其他包直接访问)。 - 在函数内部声明的变量具有局部作用域,仅在该函数内部可见。
零值与初始化
- 如果没有显式初始化,变量将被赋予其类型的零值。比如整型为0,字符串为
""(空字符串),布尔型为false等。 - Go语言强烈鼓励显式初始化变量以提高代码可读性和减少未初始化变量的使用错误。
类型转换
虽然Go是静态类型语言,但在必要时可以通过显式转换操作将一种类型转换为另一种类型。
注意事项
- 变量名必须遵循标识符命名规则,首字符不能是数字,可以包含字母(大小写敏感)、数字和下划线。
- Go语言是静态类型语言,因此每个变量都具有固定的类型,并且编译器会在编译阶段检查类型一致性。
三、重要性
在程序设计中,常量(Constants)和变量(Variables)扮演着至关重要的角色,它们都是存储数据的基本元素,但各自的特性和使用场景各有不同:
-
常量的重要性:
- 不变性与可靠性:常量的值一旦定义就不能改变,这为程序提供了确定性和稳定性。例如,在计算圆周率、物理常数或配置固定的错误代码时,使用常量可以确保这些数值在整个程序运行期间始终保持不变。
- 提高可读性:通过命名良好的常量,可以增强代码的自解释性。比如,用
PI替代具体的浮点数,使其他开发者更容易理解代码意图,减少阅读难度。 - 防止意外修改:由于常量不可变,因此避免了因意外操作导致重要数据被修改的风险。
- 编译时优化:编译器可以在编译阶段就对常量进行求值,并可能将常量直接内嵌到指令中,从而提高程序执行效率。
-
变量的重要性:
- 动态数据处理:变量是程序中必不可少的数据容器,其值可以根据程序逻辑随时更改,用于存储用户输入、计算结果、状态标志等临时或变化的数据。
- 灵活性:变量的存在使得程序能够响应不同的输入和条件,执行不同的操作,从而使程序具有适应性。
- 内存管理:变量占用内存空间并允许程序分配和释放资源,这对于实现复杂算法和数据结构至关重要。
- 控制流:循环变量、条件语句中的测试变量等都在程序流程控制中起到关键作用。
综上所述,常量和变量在程序设计中共同构建了一个灵活且可靠的数据模型,保证了程序既能够在必要时持有静态不变的数据,又能够根据需要处理动态变化的信息。同时,恰当的使用两者还能促进代码的清晰度、健壮性和性能优化。
相关文章:
编程笔记 Golang基础 018 常量与变量
编程笔记 Golang基础 018 常量与变量 一、常量常量的定义iota特性 二、变量变量定义变量作用域零值与初始化类型转换注意事项 三、重要性 常量,就是在程序编译阶段就确定下来的值,而程序在运行时则无法改变该值。变量是程序的基本组成单位,用…...
如何使用Douglas-042为威胁搜索和事件应急响应提速
关于Douglas-042 Douglas-042是一款功能强大的PowerShell脚本,该脚本可以提升数据分类的速度,并辅助广大研究人员迅速从取证数据中筛选和提取出关键数据。 该工具能够搜索和识别Windows生态系统中潜在的安全漏洞,Douglas-042会将注意力放在…...
华为配置WLAN AC和AP之间VPN穿越示例
配置WLAN AC和AP之间VPN穿越示例 组网图形 图1 配置WLAN AC和AP之间VPN穿越示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 企业用户接入WLAN网络,以满足移动办公的最基本需求。且在覆盖区域内移动发生漫游时,不影响…...
跨语言的序列化与反序列化
在Java中实现跨语言的序列化与反序列化通常可以采用以下几种方式 使用标准的跨语言序列化格式 可以选择使用一些标准的跨语言序列化格式,例如JSON、XML、Protocol Buffers(ProtoBuf)等。这些格式都是跨语言的,可以方便地在不同的编程语言之间进行数据交换。在Java中,可以…...
软考-中级-系统集成2023年综合知识(三)
🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 软考中级专栏回顾 专栏…...
五、使用脚手架
五、使用脚手架 5.1 简单的实现 创建一个 School 组件 <template> <div><h2>学校名称:{{name}}</h2><h2>学校地址:{{address}}</h2> </div> </template><script> export default {name: "S…...
抛弃chatgpt,使用微软的Cursor提升coding效率
Whats Cursor? Cursor编辑器是一个基于GPT-4的代码编辑器,它可以根据用户的自然语言指令或者正在编辑的代码上下文为用户提供代码建议,支持多种编程语言,如Python、Java、C/C#、go等。Cursor编辑器还可以帮助用户重构、理解和优化代码&…...
uniapp插件uViewplus的使用(涉及TS下的问题)
在技术选型后最后定了使用有团队维护的uview-plus3.0,官方文档 配置参考:https://juejin.cn/post/7169875753100640270 ts配置参考:https://blog.csdn.net/m0_70027114/article/details/132957426 引入 在项目文件的pages.json中的"easycom"…...
google浏览器chrome无法访问localhost等本地虚拟域名的解决方法
场景一: 谷歌浏览器访问出现:forbbiden 403 问题,或者直接跳转到正式域名(非本地虚拟域名) 访问本地的虚拟域名http://www.hd.com/phpinfo.php?p1发生了302 条状 火狐浏览器正常访问; 解决方法: 方法1:在谷歌浏览器…...
(2.2w字)前端单元测试之Jest详解篇
Jest Jest 概述 Jest是一个领先的JavaScript测试框架,特别适用于React和Node.js环境。由Facebook开发,它以简单的配置、高效的性能和易用性而闻名。Jest支持多种类型的测试,包括单元测试、集成测试和快照测试,后者用于捕获组件或…...
【C++私房菜】面向对象中的多态
文章目录 一、多态二、对象的静态类型和动态类型三、虚函数和纯虚函数1、虚函数2、虚析构函数3、抽象基类和纯虚函数4、多态的原理 四、重载、覆盖(重写)、隐藏(重定义)的对比 一、多态 OOP的核心思想是多态性(polymorphism)。多态性这个词源自希腊语,其含义是“多…...
(done) 什么是特征值和特征向量?如何求特征值的特征向量 ?如何判断一个矩阵能否相似对角化?
什么是齐次方程? https://blog.csdn.net/shimly123456/article/details/136198159 行列式和是否有解的关系? https://blog.csdn.net/shimly123456/article/details/136198215 特征值和特征向量 参考视频:https://www.bilibili.com/video/BV…...
[rust] 11 所有权
文章目录 一 背景二 Stack 和 Heap2.1 Stack2.2 Heap2.3 性能区别2.4 所有权和堆栈 三 所有权原则3.1 变量作用域3.2 String 类型示例 四 变量绑定背后的数据交互4.1 所有权转移4.1.1 基本类型: 拷贝, 不转移所有权4.1.2 分配在 Heap 的类型: 转移所有权 4.2 Clone(深拷贝)4.3 …...
MySQL安装
文章目录 MYSQL安装一、下载二、解压三、配置1. 添加环境变量2. 初始化MySQL3. 注册MySQL服务4. 启动MySQL服务5. 修改默认账户密码 四、登录MySQL五、卸载MySQL MYSQL安装 一、下载 点开下面的链接:https://dev.mysql.com/downloads/mysql/ 点击Download 就可以下…...
AI时代显卡如何选择,B100、H200、L40S、A100、H100、V100 含架构技术和性能对比
AI时代显卡如何选择,B100、H200、L40S、A100、H100、V100 含架构技术和性能对比。 英伟达系列显卡大解析B100、H200、L40S、A100、A800、H100、H800、V100如何选择,含架构技术和性能对比带你解决疑惑。 近期,AIGC领域呈现出一片繁荣景象&a…...
R语言入门笔记2.5
数据预处理 R语言处理的数据多以数据框的形式出现。 预备操作 数据查看 > dim(x) [1] 16 3 #数据框有16行3列 > names(x) #查看数据框的变量名 [1] "X" "Z" "Y" > head(x,3) #查看前3行,若为-3则是查看后三行之…...
命令记录学习
1. 查看当前用户 cat /etc/passwd 添加test用户 useradd test -G root 查看test用户状态 id test 查看用户adaminstrator passwd -S adaminstrator 禁用用户adaminstrator passwd -l adaminstrator 密码策略设置文件地址 vi /etc/pam.d/system-auth 设…...
Python3 TCP 客户端
下面是一个简单的 Python TCP 客户端示例代码,用于与之前提到的 EchoServer 进行通信: import socketserver_address (localhost, 8888)# 创建 TCP 客户端套接字 client_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)try:# 连接到服务器…...
图论(算法竞赛、蓝桥杯)--拓扑排序
1、B站视频链接:D01 拓扑排序_哔哩哔哩_bilibili #include <bits/stdc.h> using namespace std; const int N100010; int n,m,a,b; vector<int> e[N],tp; int din[N]; bool topsort(){queue<int> q;for(int i1;i<n;i){if(din[i]0)q.push(i);}…...
内网穿透(docker部署frp)
文章目录 内网穿透实现内网穿透的常见方法 frpfrp的实现原理frps服务端应用部署配置文件部署参数配置 frpc客户端部署 内网穿透 内网穿透是指在内部网络(内网)中实现穿透外网(公网)的通信。内网通常是指公司、组织或家庭等内部网…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
