golang语法-----变量、常量

变量

1、声明与初始化

(1)标准声明 (先声明,后赋值)

var age int       // 声明一个 int 类型的变量 age,此时 age 的值是 0
fmt.Println(age)  // 输出: 0age = 30          // 给 age 赋值
fmt.Println(age)  // 输出: 30//int 的零值是 0
//float 的零值是 0.0
//bool 的零值是 false
//string 的零值是 "" (空字符串)
//指针、切片、map、channel、函数等引用类型的零值是 nil

(2)声明的同时初始化(最常用)

var name string = "张三"
var height float64 = 1.75

(3)类型推断

var name = "李四"      // 编译器自动推断 name 是 string 类型
var isStudent = true   // 编译器自动推断 isStudent 是 bool 类型

(4)短变量声明 := (只可以在函数内部使用)

func main() {// 不能在函数外使用 a := 10// 声明并初始化city := "北京" // 等价于 var city string = "北京"count := 100   // 等价于 var count int = 100// 重复声明会报错// count := 200 // 编译错误: no new variables on left side of :=// 但如果左侧有新变量,就可以对已有变量重新赋值count, err := doSomething() // 这是合法的,因为 err 是新变量
}

(5)分组声明

// 包级别变量分组,这是类型推断
var (AppName    = "MyApp"AppVersion = "1.0.0"Author     string
)func main() {// 函数内局部变量分组,这是标准声明var (user  stringid    inttoken string)user, id, token = "admin", 1, "xyz-abc"
}

注意:

空白标识符 _ 被称为匿名变量,主要用于忽略函数返回的不需要的值

比如:

// io.WriteString 返回写入的字节数和一个错误
// 我只关心错误,不关心写入了多少字节,所以用 _ 忽略第一个返回值
_, err := io.WriteString(file, "hello")

常量

1、声明与初始化

(1)单个声明

和变量类似,同样支持类型推断。

const Pi float64 = 3.14159
const AppTitle = "我的应用" // 自动推断为 string

(2)分组声明

定义多个相关常量的推荐方式。

const (StatusOK      = 200StatusNotFound  = 404
)

2、常量的核心特性

(1)不可变性:一旦声明,不可改变

(2)编译时确定:常量的值必须是在编译期间就能计算出来的表达式。不能是函数调用(运行时)的结果。

const a = 10 + 20       // 合法,编译时可以计算
const b = len("hello")  // 合法,len() 是内置函数,编译时可确定// const randNum = rand.Intn(100) // 编译错误,rand.Intn() 是运行时函数

(3)特殊常量iota

iota 是 Go 语言常量组中的一个非常有用的工具,它是一个可以被编译器修改的常量。

  • iota 只能在 const 声明块中使用。
  • 每个 const 块开始时,iota 的值被重置为 0
  • 在 const 块中,每新增一行常量声明,iota 的值会自动递增 1

iota 非常适合用来定义一组连续的整数,比如枚举、状态码、星期等。

const (Sunday = iota  // 0Monday         // 1 (自动继承上一行的表达式,iota 递增)Tuesday        // 2Wednesday      // 3
)
const (_ = iota // iota = 0, 忽略 0KB = 1 << (10 * iota) // iota = 1,  1 << (10*1) = 1024MB = 1 << (10 * iota) // iota = 2,  1 << (10*2) = 1048576GB = 1 << (10 * iota) // iota = 3TB = 1 << (10 * iota) // iota = 4
)
// `const` 块在这里结束,iota "消失"了。

注意:

无法在 const 代码块的外面打印 iota 的值iota 并不是一个普通的变量,它是一个特殊的标识符,只在 const 声明块内部有效

可以把 iota 想象成一个只在 const 工厂里工作的“临时计数器”

  1. 生命周期:当 Go 编译器遇到 const ( 时,这个计数器就被创建并重置为 0
  2. 工作内容:在 const 代码块内,每定义一个新常量(每换一行),这个计数器就自动加 1
  3. 结束:当 const 代码块结束时(遇到 )),这个“临时计数器”就被销毁了

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

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

相关文章

Jenkins+Docker(docker-compose、Dockerfile)+Gitee实现自动化部署

项目目录结构 project-root/ ├── pom.xml ├── docker │ ├── copy.sh │ ├── file │ │ ├── jar │ │ │ └── 存放执行copy.sh以后jar包的位置 │ │ └── Dockerfile │ └── docker-compose.yml ├── docker-only-test │ ├─…

TASK01【datawhale组队学习】地瓜机器人具身智能概述

https://github.com/datawhalechina/ai-hardware-robotics 参考资料地址 具身智能&#xff08;Embodied AI&#xff09; 具身智能 智能的大脑 行动的身体。 比例&#xff08;Proportional&#xff09;、积分&#xff08;Integral&#xff09;、微分&#xff08;Derivative&a…

uni-app 配置华为离线推送流程

1、首先需要创建一个华为开发者账号&#xff0c;我这个是个人开发账号 申请开发者账号 2、去AppGallery Connect登陆我们刚刚创建好的账号&#xff0c;点击页面的APP进入到如下3 AppGallery Connect ‎‎‎‎‎ ‎3、在AppGallery Connect 网站中创建一个 Android应用、点击…

当下主流摄像头及其核心参数详解

&#x1f4d6; 推荐阅读&#xff1a;《Yocto项目实战教程:高效定制嵌入式Linux系统》 &#x1f3a5; 更多学习视频请关注 B 站&#xff1a;嵌入式Jerry 当下主流摄像头及其核心参数详解 一、摄像头发展概述 摄像头作为现代智能设备&#xff08;如手机、安防、车载、工业等&am…

下载了docker但是VirtualBox突然启动不了了

今天下docker后发现 eNSP 路由器&#xff0c;防火墙启动不了了去virtualbox检查的时候发现无法启动&#xff1a;报错&#xff1a;不能为虚拟电脑 AR_Base 打开一个新任务.Raw-mode is unavailable courtesy of Hyper-V. (VERR_SUPDRV_NO_RAW_MODE_HYPER_V_ROOT).返回代码: E_F…

C++11之lambda表达式与包装器

lambda与包装器lambda语法捕捉列表lambda的应用lambda的原理包装器functionbindlambda语法 lambda 表达式本质是⼀个匿名函数对象&#xff0c;跟普通函数不同的是他可以定义在函数内部。 lambda 表达式语法使⽤层⽽⾔没有类型&#xff0c;所以我们⼀般是⽤auto或者模板参数定义…

有痛呻吟!!!

XiTuJueJin:YYDS 分盘 有些平台吃相太难看&#xff0c;同样的文章&#xff0c;我还先选择现在这里发布&#xff0c;TMD. 莫名其妙将我的文章设置为仅VIP可见&#xff0c;还是今天才发现&#xff0c;之前只是将一两篇设置为仅VIP可见&#xff0c;今天突然发现这种标识的都自动…

2025年7-9月高含金量数学建模竞赛清单

2025年7-9月高含金量数学建模竞赛 ——“高教社杯”国赛 & “华为杯”研赛作为过来人&#xff0c;真心觉得参加数学建模比赛是我本科阶段做的最值的事之一。 它锻炼的那种把实际问题转化成模型求解的思维&#xff0c;对做研究、写论文甚至以后工作都帮助很大。我当时就是靠…

SpringBoot为什么使用new RuntimeException() 来获取调用栈?

为什么不直接使用 Thread.currentThread().getStackTrace()&#xff1f;这确实看起来有点“奇怪”或者“绕”&#xff0c;但其实这是 Java 中一种非常常见、巧妙且合法的技巧&#xff0c;用于在运行时动态获取当前代码的调用栈信息。Spring 选择用 new RuntimeException().getS…

小白成长之路-haproxy负载均衡

文章目录一、概述1、HAProxy简介2、HAProxy特点和优点&#xff1a;3、HAProxy保持会话的三种解决方法4、HAProxy的balance 8种负载均衡算法1&#xff09;RR&#xff08;Round Robin&#xff09;2&#xff09;LC&#xff08;Least Connections&#xff09;3&#xff09;SH&#…

Kafka 与 RocketMQ 消息确认机制对比分析

目录 生产者消息确认机制 Kafka 生产者 ACK 机制 RocketMQ 生产者确认机制 消费者消息确认机制 Kafka 消费者确认机制 RocketMQ 消费者确认机制 核心差异对比 选型建议 消息确认机制是分布式消息中间件的核心功能之一&#xff0c;它直接关系到消息传递的可靠性和系统性能…

C/C++---rdbuf()函数

在C中&#xff0c;rdbuf() 是I/O流库中的一个核心成员函数&#xff0c;主要用于访问和操作流对象的缓冲区。这个函数在底层数据处理、流重定向以及自定义流操作等场景中应用广泛。下面将从多个方面详细解析 rdbuf() 函数。 基本概念与函数原型 rdbuf() 是 std::basic_ios 类的成…

【LLM】从零到一构建一个小型LLM--MiniGPT

从零到一构建一个小型LLM (Small Language Model)暂时起名为MiniGPT。这个模型将专注于因果语言建模 (Causal Language Modeling)&#xff0c;这是许多现代LLM&#xff08;如GPT系列&#xff09;的核心预训练任务。模型设计&#xff1a; 我们设计的模型是一个仅包含解码器 (Dec…

网络安全威胁下的企业困境与破局技术实践

前言&#xff1a;网络安全威胁下的企业困境 在数字化转型的浪潮中&#xff0c;企业对信息技术的依赖程度日益加深&#xff0c;但随之而来的网络安全威胁也愈发严峻。据统计&#xff0c;全球每年因网络安全事件造成的经济损失高达数万亿美元&#xff0c;其中中小企业更是成为了网…

[RAG system] 信息检索器 | BM25 Vector | Pickle格式 | HybridRetriever重排序

第六章&#xff1a;信息检索器 在上一章中&#xff0c;我们成功完成了知识库摄入流程。这是巨大的进步~ 我们精心准备了文档"块"&#xff08;类似独立的索引卡&#xff09;&#xff0c;并将其存储在两套智能归档系统中&#xff1a;向量数据库&#xff08;用于基于含…

Android 高通平台修改音频参数效果文件-优化音频效果

Android 高通平台如何音频效果 修改音频参数效果文件-优化音频效果 按如下方式修改。 开发云 - 一站式云服务平台 diff --git a/vendor/qcom/proprietary/mm-audio/audcal/family-b/acdbdata//MTP/workspaceFile.qwsp b/vendor/qcom/proprietary/mm-audio/audcal/family-b/acdb…

Install Docker Engine on UbuntuMySQL

Install Docker Engine on Ubuntu&&MySQL安装docker安装mysql客户端连接数据库我真气鼠了&#xff0c;今天得到一个血泪的教训&#xff0c;以后一定看官方文档&#xff01;&#xff01;&#xff01;学的课用的centos&#xff0c;指令全是yum&#xff0c;我这边不通用&a…

智能人体感应模块HC-SR501应用指南---使用esp32

人体热释电探头红外感应模块 人体感应开关HC-SR501蓝板新款 绿板-淘宝网 HC-SR501 人体红外感应电子模块传感器热释电探头感应开关RD-624-tmall.com天猫 模块信息 HC-SR501人体感应开关是一种基于红外线技术的自动控制模块&#xff0c;广泛应用于安防、智能家居和自动控制等领…

加速度传感器方向校准方法

保持平板平放在桌面上&#xff0c;将后置摄像头保持在平板的左上后方&#xff0c;或者右上后方&#xff0c;此为机器的正方向 1、以一台重力方向正常的机器做测试&#xff0c;通过DeviceInfoHw这个软件的加速度测试功能【Accelerometer Test】我们可以知道 X方向数据测试&#…

【OpenHarmonyOS应用开发】

OpenHarmonyOS应用开发1.OpenHarmonyOS应用开发环境安装2.初始化项目3.连接润和软件的开发板套件1.OpenHarmonyOS应用开发环境安装 进入HarmonyOS下载鸿蒙应用开发工具DevEco Studio 5.0.7.200版本。 双击打开下载好的可执行文件&#xff0c;点击下一步。 如果已经安装过&am…