Go学习笔记-变量

简介: Go学习笔记-变量

Go学习笔记-变量


在数学概念中,变量(variable)表示没有固定值且可改变的数。但从计算机系统实现角度来看,变量是一段或多段用来存储数据的内存。

Go是一门很有意思的编程语言。虽算不得优雅,但也不浅薄。自C一脉相承,又吸收了些时髦的东西。最重要的是,它依旧简单。我喜欢简单,平日里也是竭尽所能将复杂的东西简单化。

有关Go的宣传语已经太多,优点或缺点都能罗列出长长的清单。我甚至不知道该如何做才能堆砌出本章内容,所以一直拖到全书的最后才去完成。

作为静态类型语言,Go变量总是有固定的数据类型,类型决定了变量内存的长度和存储格式。我们只能修改变量值,无法改变类型。

通过类型转换或指针操作,我们可用不同方式修改变量值,但这并不意味着改变了变量类型。

因为内存分配发生在运行期,所以在编码阶段我们用一个易于阅读的名字来表示这段内存。实际上,编译后的机器码从不使用变量名,而是直接通过内存地址来访问目标数据。保存在符号表中的变量名等信息可被删除,或用于输出更详细的错误信息。

关键字var用于定义变量,和C不同,类型被放在变量名后。另外,运行时内存分配操作会确保变量自动初始化为二进制零值(zero value),避免出现不可预测行为。如显式提供初始化值,可省略变量类型,由编译器推断。

var x int         // 自动初始化为0
var y=false         // 自动推断为bool类型

只是要注意,简短模式(short variable declaration)有些限制:

定义变量,同时显式初始化。不能提供数据类型。

只能用在函数内部。

对于粗心的新手,这可能会造成意外错误。比如原本打算修改全局变量,结果变成重新定义同名局部变量。

var x=100
func main() {
println(\&x,x)       // 全局变量
x:= "abc"          // 重新定义和初始化同名局部变量
println(\&x,x)
}

退化赋值的前提条件是:最少有一个新变量被定义,且必须是同一作用域。

在处理函数错误返回值时,退化赋值允许我们重复使用err变量,这是相当有益的。

赋值操作,必须确保左右值类型相同。

未使用错误

编译器将未使用局部变量当作错误。不要觉得麻烦,这有助于培养良好的编码习惯。


相关文章
初识go变量,使用var和:=来声明变量,声明变量的三种方式
这篇文章介绍了Go语言中使用`var`和`:=`声明变量的三种不同方式,包括声明单个或多个变量、通过值确定数据类型以及在函数体内使用`:=`声明局部变量。
初识go变量,使用var和:=来声明变量,声明变量的三种方式
|
2月前
|
存储 编译器 Go
go语言中的变量、常量、数据类型
【11月更文挑战第3天】
38 9
Go语言的条件控制语句及循环语句的学习笔记
本文是Go语言的条件控制语句和循环语句的学习笔记,涵盖了if语句、if-else语句、if嵌套语句、switch语句、select语句以及for循环和相关循环控制语句的使用方法。
Go语言的条件控制语句及循环语句的学习笔记
|
4月前
|
存储 Go
Go: struct 结构体类型和指针【学习笔记记录】
本文是Go语言中struct结构体类型和指针的学习笔记,包括结构体的定义、成员访问、使用匿名字段,以及指针变量的声明使用、指针数组定义使用和函数传参修改值的方法。
|
4月前
|
人工智能 算法 搜索推荐
Go学习笔记-代码调
近年来,人工智能技术飞速发展,Cody作为由Sourcegraph开发的一款AI驱动编码助手,应运而生。它不仅提供代码预测与补全,还能深度理解代码上下文,为开发者提供准确建议,提升编码效率和质量。Cody能识别潜在错误并提出修复建议,缩短调试时间,同时进行智能代码审查,帮助优化代码结构和风格。未来,随着AI技术进步,Cody将不断学习优化,成为开发者不可或缺的伙伴,推动编程领域的创新与发展。
38 0
|
5月前
|
Go
Go1.22 新特性:for 循环不再共享循环变量,且支持整数范围
Go1.22 新特性:for 循环不再共享循环变量,且支持整数范围
|
5月前
|
安全 Go
|
5月前
|
自然语言处理 Go 开发者
深入理解Go语言中的变量作用域
【8月更文挑战第31天】
34 0
|
7月前
|
存储 安全 Go
【Go语言精进之路】构建高效Go程序:掌握变量、常量声明法则与iota在枚举中的奥秘
【Go语言精进之路】构建高效Go程序:掌握变量、常量声明法则与iota在枚举中的奥秘
79 2
|
7月前
|
算法 编译器 Go
Go语言中,常量和变量的定义和使用
Go语言中,常量和变量的定义和使用