😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。
🤓 同时欢迎大家关注其他专栏,我将分享Web前后端开发、人工智能、机器学习、深度学习从0到1系列文章。
🌼 同时洲洲已经建立了程序员技术交流群,如果您感兴趣,可以直接站内私信我或文章底部名片。
🖥 随时欢迎您跟我沟通建联,一起交流,一起成长、进步!
本文目录
- 一、变量声明
- 二、不指明变量类型
- 三、批量声明方式
- 四、简短格式
- 五、初始化变量与匿名变量
- 六、变量交换赋值
- 七、变量作用域
- 7.1 局部变量
- 7.2 全局变量
一、变量声明
Go语言是静态类型语言,变量是有明确类型要求的,编译器也会检查变量类型的正确性。
Go的标准格式如下,以var开头,行尾不需要分号:
var 变量名 变量类型
var csdn int //例如声明了一个csdn的int变量
在C语言中,声明变量如下,这样只有csdn是指针,但是zhou不是指针。如果采用go的一种形式,
int *csdn,zhou
在Go中,当一个变量被声明之后,系统会自动赋予该类型的零值,Go中所有的内存都是经过初始化的。
比如说下方的代码示例:
二、不指明变量类型
如果没有声明变量类型,Go会编译的时候自动推到类型。
比如说下面的例子,其中printf是表示带有格式化的输出。
三、批量声明方式
Go给开发者提供了批量声明的方式,比如下面的例子。
我们也可以查看他们的初始值:
四、简短格式
我们可以采用如下的格式进行声明
i:=1 //直接省略掉了var
这种形式存在一定的限制:
1、只能定义在函数内部。
2、不能提供数据类型。
3、定义变量,同时显式初始化。
五、初始化变量与匿名变量
不可以重复声明一个变量,会提示报错。
但是在网络连接时候存在特例,net网络包的返回值有两个。
但是在进行返回值的时候,只要左边的变量不一样,另一个变量声明可以是一样的。这里的err就是重复定义了。
也就是多个短变量声明和赋值中,至少有一个新声明的变量出现在左值中,即便其他变量名可能是重复声明的,但是编译器也是不会报错的。
如果不想接受err的值,可以有_来表示(即下划线),这就是匿名变量。
如下代码所示:
conn,_:=net.Dial("tcp","127.0.0.1:8080")
匿名变量不占用命名空间,也不会分配内存,可以重复声明使用的。
任何变量都可以赋值给匿名变量,匿名变量也称为空白标识符,但是任何赋值给这个匿名变量的值都会被抛弃,这些值后面不可以继续使用,也不可以使用这个标识符作为变量对其他变量进行赋值或者运算。
六、变量交换赋值
Go语言中,提供了一种非常方便的赋值交换方式,如下代码所示。
七、变量作用域
- Go语言有一个很重要的性质,就是编译的时候会进行变量检测,如果出现了没有使用过的变量,就会报编译错误。
7.1 局部变量
顾名思义,函数体内声明的变量称之为局部变量,作用域只在函数体内部,函数的参数还有返回值都是局部变量。
局部变量不是一直存在的,只在定义它的函数被调用后存在,调用结束后这个局部变量就会被销毁。
7.2 全局变量
全局变量只需要在函数体外进行声明即可,只需要在一个源文件中进行定义,就可以在所有的源文件中进行使用,其他的源文件只需要import这个包含全局变量的文件即可。
全局变量必须以var开头的,想要在外部的包中进行使用,必须首字母大写。
值得一提的是,局部变量与全局变量可以相同,但是函数体内部的局部变量会被优先考虑。