Golang基础 变量与常量

2023-11-02

01 变量声明

变量就是内存堆栈区的一块地址空间用于存储数据,Go语言在使用变量时需要先声明变量,常用的声明方式有两种:

  1. 使用var关键字声明

使用关键字var声明变量的格式如下所示,以关键字var开头,被声明的变量放在数据类型之前(与其他语言形式上有较大区别)。(这种声明方式通常用于全局变量的声明)

var 变量名称 数据类型

// example:
var age int
var score float32
var qualified bool
var name string

当你需要一口气声明多个变量时,Go也提供了简洁的声明方式,仅使用一个var关键字,将多个变量名称及其数据类型放在该关键字后的括号中。

var (
  变量名称 数据类型
  ...
)

// example:
var (
    age int
    score float32
    qualified bool
    name string
)
  1. 使用:=符号声明短变量

短变量声明也是Go语言中一种特殊的变量声明方式,类似于=赋值运算符的使用方式,使用:=连接变量名称和变量值两个部分声明用于函数体内的变量。(这种声明方式通常用于函数内局部变量的声明)

变量名称 := 变量值

// example:
func (){
    name := "Jack"
    age := 10
    score := 99.6
}

=:=的区别:前者是赋值运算符,仅将右值赋给左侧变量;后者用于短变量声明,完成变量声明变量初始化赋值两个任务,要注意的是变量仅能被声明一次,不能在同一作用域内使用:=多次声明同名短变量,但是可以用=多次赋值短变量。

02 常量声明

常量是一种恒定不变的数值或者数据项。常量多用于定义程序运行期间不随时间变化的某些量和信息,也可以是表示某一数值的字符或字符串,常被用来标识、测量和比较。

常量的声明使用const关键字声明,在常量声明时必须被赋值初始化且在整个程序运行期间都不能再改变。

const 常量名称 = 常量值

// example-1:
const pi = 3.1415926
const e = 2.7182

// example-2:
const (
    pi = 3.1415926
    e = 2.7182
)

03 变量初始化

Go语言编译器在声明变量时,如果没有显式地初始化,则会根据变量的数据类型用默认值对其进行初始化。显示表达式初始化变量的格式如下所示:

var 变量名称 数据类型 = 表达式

// example:
var name string = "Jack"
var age int = 18

类型自动推导:在显示初始化变量时,可以省略变量的数据类型,编译器自动根据赋值运算符右值来自动推导出变量的数据类型完成初始化。

多变量初始化:Go语言中可以用一个赋值运算符一次性初始化多个变量,这是Go语言赋值运算符的一大特点。

var 变量名称 = 表达式


// example-1:
var name = "Jack"
var age = 18

// example-2:
var (
    name = "Jack"
    age = 18
)

// example-3:
var name, age = "Jack", 18

匿名变量:在多重赋值时,用下划线_占位,表示忽略值,这也是Go语言的一语法特点,匿名变量不占用命名空间,不会分配内存,所以也不存在重复声明。

// example:
func foo() (string, int){
	return "Jack", 18
}

func main(){
	name, _ := foo()
	_, age := foo()
	fmt.Println("name: ", name)
	fmt.Println("age: ", age)
}

04 常量初始化

常量在定义时必须被初始化,变量的初始化方式都适用于常量,将var关键字替换成const即可。

同值多常量省略初始化:但在声明多个常量时,可以通过省略值的方式初始化值相同的常量,如果省略了值则表示该常量的值与其上一行的常量值相同,这是变量中无法实现的初始化方式。

// example: num1,num2,num3三个常量的值都被初始化
const (
	num1 = 100
	num2 
	num3
)

iota常量计数器实现枚举:iota智能用于常量表达式中,在const关键字出现是被置为0,每新增一行常量声明将被iota计数一次。

// example-1: 一般情况
const (
    num1 = iota // 0
    num2        // 1
    num3        // 2
)

// example-2: 中间插队恢复
const (
    num1 = iota // 0
    other = 100 
    num2 = iota // 2
    num3        // 3
)

// example-3: 插队导致 iota 失效
const (
    num1 = iota // 0
    other = 100 
    num2        // 100
    num3        // 100
)

iota的使用技巧:iota可以被用于表达式中,也可以将多个iota定义在一行枚举多个变量

1. iota用于表达式

iota结合表达式构成更加赋值的枚举

// example:
const (
	_  = iota
	KB = 1 << (10 * iota)
	MB = 1 << (10 * iota)
	GB = 1 << (10 * iota)
	TB = 1 << (10 * iota)
	PB = 1 << (10 * iota)
)

定义数量级 (这里的<<表示左移操作,1<<10表示将1的二进制表示向左移10位,也就是由1变成了10000000000,也就是十进制的1024。同理2<<2表示将2的二进制表示向左移2位,也就是由10变成了1000,也就是十进制的8。)

2. 多个iota

将多个iota定义在一行枚举多个变量

// example:
const (
	c, d = iota, 2*iota // 0 0
	e, f                // 1 2
	_, _
	g, h                // 3 6
)

参考资料

变量和常量 · Go语言中文文档

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Golang基础 变量与常量 的相关文章

  • 权重实现随机抽奖

    一般抽奖是怎么实现的 在实习期间学会了一种通用的写法 在这里记录一下 最近在学Golang语法基础 这里就用Golang来写 package main import fmt time math rand func main r rand N
  • Golang连接Jenkins获取Job Build状态及相关信息

    文章目录 1 连接Jenkins 2 controller 3 module 4 router 5 效果展示 第三方包 gojenkins 方法文档 gojenkins docs 实现起来很简单 利用第三方库 连接jenkins 调用相关方
  • Kubernetes生产实践系列之三十一:Kubernetes基础技术之CPU资源的调度和管理(CFS)

    一 前言 在使用Kubernetes的过程中 我们看到过这样一个告警信息 K8S 告警主题 CPUThrottlingHigh 告警级别 warning 告警类型 CPUThrottlingHigh 故障实例 告警详情 27 throttl
  • 【踩坑日常】解决Eureka启动报错:Network level connection to peer localhost;retrying after delay

    项目场景 最近在使用Spring Cloud的Eureka服务时 遇到了一个线上问题 Eureka启动一直报错 提示 Network level connection to peer localhost retrying after del
  • 云原生之深入解析如何限制Kubernetes集群中文件描述符与线程数量

    一 背景 linux 中为了防止进程恶意使用资源 系统使用 ulimit 来限制进程的资源使用情况 包括文件描述符 线程数 内存大小等 同样地在容器化场景中 需要限制其系统资源的使用量 ulimit docker 默认支持 ulimit 设
  • go-zero开发入门之网关往rpc服务传递数据2

    go zero 的网关服务实际是个 go zero 的 API 服务 也就是一个 http 服务 或者说 rest 服务 http 转 grpc 使用了开源的 grpcurl 库 当网关需要往 rpc 服务传递额外的数据 比如鉴权数据的时候
  • go-zero开发入门-API网关鉴权开发示例

    本文是 go zero开发入门 API网关开发示例 一文的延伸 继续之前请先阅读此文 在项目根目录下创建子目录 middleware 在此目录下创建文件 auth go 内容如下 鉴权中间件 package middleware impor
  • 通过kubeadm方式安装k8s

    虚拟机最少是 2 core master内存最小3G node内存最小2G 要求的Docker版本是18 03 如果不是安装的docker ce 版本是过旧的 可以选择删除后重新安装 也可以重新创建一个虚拟机执行以下命令 简单方法 使用ma
  • GoLong的学习之路,进阶,Viper(yaml等配置文件的管理)

    本来有今天是继续接着上一章写微服务的 但是这几天有朋友说 再写Web框架的时候 遇到一个问题 就是很多的中间件 redis 微信 mysql mq 的配置信息写的太杂了 很不好管理 希望我能写一篇有管理配置文件的 所以这篇就放到今天写吧 微
  • 【golang】go执行shell命令行的方法( exec.Command )

    所需包 import os exec cmd 的用法 cmd exec Command ls lah ls是命令 后面是参数 e cmd Run 多个参数的要分开传入 如 ip link show bond0 cmd
  • 什么是微服务

    微服务是一种架构风格 它把一个大型的复杂软件应用划分为一系列小的服务 每个服务都具有单一的功能 运行在其自己的进程中 并通常基于不同的编程语言和框架 这些服务之间通过轻量级通信机制相互通信 这种通信机制基于HTTP协议 微服务架构风格使得系
  • 终于找到了最新版的Zookeeper入门级教程,建议收藏!

    小熊学Java https javaxiaobear cn 1 分布式一致性 1 CAP 理论 CAP 理论指出对于一个分布式计算系统来说 不可能同时满足以下三点 一致性 在分布式环境中 一致性是指数据在多个副本之间是否能够保持一致的特性
  • 【go语言】error错误机制及自定义错误返回类型

    简介 Go 语言通过内置的 error 接口来处理错误 该接口定义如下 type error interface Error string 这意味着任何实现了 Error 方法的类型都可以作为错误类型 在 Go 中 通常使用 errors
  • 【go语言】error错误机制及自定义错误返回类型

    简介 Go 语言通过内置的 error 接口来处理错误 该接口定义如下 type error interface Error string 这意味着任何实现了 Error 方法的类型都可以作为错误类型 在 Go 中 通常使用 errors
  • 微服务常见的配置中心简介

    微服务架构中 常见的配置中心包括以下几种 Spring Cloud Config Spring Cloud Config是官方推荐的配置中心解决方案 它支持将配置文件存储在Git SVN等版本控制系统中 通过提供RESTful API 各个
  • [每周一更]-(第55期):Go的interface

    参考地址 https juejin cn post 6978322067775029261 https gobyexample com interfaces https go dev tour methods 9 介绍下Go的interfa
  • promethues grafana 安装和使用

    文章目录 1 promethues安装 2 node exporter安装 3 grafana安装 4 配置promethues监控node节点 5 grafana操作 外传 Docker 镜像下载地址 https hub docker c
  • K8S中的Secret创建和使用

    天行健 君子以自强不息 地势坤 君子以厚德载物 每个人都有惰性 但不断学习是好好生活的根本 共勉 文章均为学习整理笔记 分享记录为主 如有错误请指正 共同学习进步 文章目录 创建secret 1 kubectl命令创建 2 yaml文件创建
  • Kubernetes (十二) 存储——Volumes配置管理

    一 卷的概念 官方地址 卷 Kubernetes https v1 24 docs kubernetes io zh cn docs concepts storage volumes 二 卷的类型及使用 emptyDir卷 1 创建编辑文件
  • 【go语言】AST抽象语法树详解&实践之扫描代码生成错误码文档

    背景 为了能识别出代码中抛出错误码的地址和具体的错误码值 再根据错误码文件获取到错误码的具体值和注释 方便后续的排错 这里使用AST进行语法分析获取到代码中的目标对象 一 编译过程 在开始解析代码之前先补充了解一下编译过程 编译过程是将高级

随机推荐

  • 编码规范-枚举管理

    18 枚举 枚举值 一种采用连续序号 0 1 2 3 4 5 6 一种采用二进制位值 0 1 2 4 8 16 还有一种是不规则数字 如串口波特率 枚举值格式 枚举类型变量 枚举类型值 枚举类型说明 枚举值最后标明 默认值 最大值 最小值
  • python交互式解释器下载_python解释器的下载和安装

    1 python解释器的下载 python这样的语言 需要一个解释器 而且解释器还有多种语言的实现 我们介绍的是最常用的C语言的实现 称之为Cpython Python通过在各种操作系统上都有各自的解释器 通过各个操作系统上的解释器 pyt
  • 精选30道Java多线程面试题

    1 线程和进程的区别 2 实现线程有哪几种方式 3 线程有哪几种状态 它们之间如何流转的 4 线程中的start 和run 方法有什么区别 5 怎么终止一个线程 如何优雅地终止线程 6 ThreadLocal在多线程中扮演什么角色 7 线程
  • WEB API 中HTTP的get、post、put,delete 请求方式

    一 WEB API 中HTTP 请求方式的四个主要方法 GET PUT POST DELETE 按照下列方式映射为 CURD 操作 1 POST 用于新建资源 服务端在指定的URI 上创建一个新的对象 将新资源的地址作为响应消息的一部分返回
  • 空间转录组共定位分析的一种方法

    主要是利用了Seurat 里面AddModuleScore函数 View project A33 meta data AddModuleScore ILC1 feature lt list c IL7R CCR6 KLRB1 IFNG IF
  • Dataframe 多行合并为一行

    原表数据 最后4行合并为1行 def ab df return join df values df df groupby 股票代码 股票简称 所属概念 apply ab df df reset index 效果如下 转载于 https ww
  • Qt编译后添加依赖文件到输出目录

    QMAKE POST LINK cp rf PWD lab const 1 xml OUT PWD lab const 1 xml cp rf PWD experiment1 xml OUT PWD experiment1 xml 这个是L
  • Python爬虫必知必会:BeautifulSoup之find_all参数速览

    find all 方法搜索当前tag的所有tag子节点 并判断是否符合过滤器的条件 find all name attrs class recursive string kwargs name 标签名搜索 attrs class 属性 类名
  • *** FATAL ERROR L232: APPLICATION CONTAINS TOO MANY RECURSIONS错误的解决方案

    最近一直在用KEIL写一个单片机的程序 遇到了一个很棘手的无法正常链接的问题 FATAL ERROR L232 APPLICATION CONTAINS TOO MANY RECURSIONS 在网上搜索了大量的文章 以及网页也没找到什么有
  • Redis介绍与使用

    文章目录 一 概念 1 什么是NOSQL 1 1 NOSQL和关系型数据库比较 1 2 非关系型数据库的优势 1 3 关系型数据库的优势 1 4 小结 2 主流的NOSQL产品 3 什么是Redis redis的应用场景 二 下载安装 三
  • rosbag commandline常用命令之filter

    可以实现对已有rosbag文件中的某些topic去除或者保留 rosbag filter input bag output bag topic tf or topic tf and m transforms 0 header frame i
  • 详解.NET实现OAuth2.0四种模式(6)RefreshToken

    我们知道 为了安全起见 AccessToken的有效时间一般是比较短的 如30分钟 在AccessToken超出有效期之后 它就不能再用于访问资源 必须重新获得 但如果每30分钟 就要让用户登录一次 那必定会让用户感到厌烦 于是就产生了Re
  • 公共命名空间,于2022年底

    公共命名空间的想法出现自2019年 到现在有三年了 在2022年底 总结一下这三年来的想法 就像字符集 字体 公共命名空间 新编译原理也是这么一对儿 字符集用来收集所有符号 字体用来显示字符集中的符号 公共命名空间用来收集所有的句子 新编译
  • java里的输入与输出

    一 概述 输入输出可以说是计算机的基本功能 作为一种语言体系 java中主要按照流 stream 的模式来实现 其中数据的流向是按照计算机的方向确定的 流入计算机的数据流叫做输入流 inputStream 由计算机发出的数据流叫做输出流 o
  • 想了很久的算法

    文章目录 1 求字符串中不重复的最长子串 2 斐波那契数列多种实现方式 1 求字符串中不重复的最长子串 var lengthOfLongestSubstring function s let setArr new Set result ma
  • 贺中国信通院“星火·链网”数字原生资产(DNA)服务网络隆重发布

    5月20日 中国信通院 星火 链网 数字原生资产 DNA 服务网络发布会在云端圆满举办 中国信通院院长 中关村区块链产业联盟理事长余晓晖出席会议并为 星火 链网 数字原生资产 DNA 服务网络上线发表寄语 中国信通院总工程师敖立 新华网首席
  • 识别图像模板旋转角度_基于视觉的焊缝识别与定位技术

    为了实现焊前引导 必须首先通过视觉传感系统识别工件和焊缝 确定焊接的关键点位置 建立关键点的二维或三维坐标 发送给机器人 将机器人的末端执行器运动到焊接起始点 自动完成焊前导引 焊缝识别的准确率与识别精度直接影响焊缝跟踪的精度 因此 焊缝识
  • 通过nginx代理拦截请求,进行全局访问限制

    声明 本博文用于学习总结及工作心得 运行环境 Ubantu 14 0 tomcat7 nginx 1 4 6 更新后1 5 6 项目中经常会用到权限管理 必然的就会存在权限的设定和验证 对于登陆或者模块的权限设定验证 在项目中直接实现 那么
  • 地图服务标注显示乱码问题

    版本 ArcGIS 10 1 在Catalog中发布了一个地图服务 直接切了图 切图后发现标注有乱码 操作系统是win7 不会涉及Server对字体库的访问权限问题 排查了一下 发现了原因 标注字体不能使用不支持中文的英文或者其他非中文字体
  • Golang基础 变量与常量

    Golang基础 变量与常量 01 变量声明 02 常量声明 03 变量初始化 04 常量初始化 参考资料 01 变量声明 变量就是内存堆栈区的一块地址空间用于存储数据 Go语言在使用变量时需要先声明变量 常用的声明方式有两种 使用var关