Go语言变量
和数学中的变量概念一样,变量有名字,有值,通过名字访问变量。
在计算机编程语言的世界里,变量就是一块内存区域,通过名字,对这块内存区域进行赋值等操作。
1 Go语言变量的命名规则
Go语言的变量命名规则和其它语言一样:由字母,数字,下划线组成
注意:变量名称不能以数字开头
2 Go语言变量的声明
2.1 第一种:标准声明
Go语言变量的声明语法为:
var 变量名 变量类型
变量声明以关键字 var
开头,后面跟变量名,行尾不需要有分号。
示例如下:
var name string var age int var isComplete bool
2.2 第二种:一次声明多个变量
Go语言支持一次声明多个变量。语法为:
var ( name string age int isComplete bool )
2.3 第三种:类型推导,即可以不指明类型
Go语言声明变量时,也可以不指定数据类型,这时变量的类型由后面的赋值推导出来
但是这种方式,必须要在声明的时候给一个初始值
语法如下:
var 变量名 = 初始值
示例如下:
var url = "www.helloworld.net" // 初始值是一个字符串,所以 url 的类型就是 string var age = 20 //初始值是20,推导出 age 的类型是 int
当然,上面声明的变量,也可以添加类型,这样就不用推导了
比如 var age int = 20
但是谁会喜欢多写一个单词呢
所以,一般由类型推导出来,就不会主动指定数据类型,毕竟少写一个单词
2.4 第四种:省略 var
,省略类型
, 使用 :=
进行变量的声明
Go语言声明变量,有一种简洁的写法,很受程序员喜欢,就是使用 :=
进行变量声明
语法如下:
变量名 := 变量值
如下示例:
name := "待兔" // name 自动推导为 string 类型 age := 18 // age 自动 推导为 int 类型
使用:=
进行变量声明,要注意以下几点:
-
只能在函数中使用
:=
声明变量 -
如
age := 18
, 则age
必须是未声明过的,如果age
已经声明过,则会编译报错var age = 17 // 声明变量 age age := 18 // 编译错误,因为 age 在前面已经声明,此时不能使用 := 声明变量
3 变量的初始化
每个变量声明后,如果没有给一个初始始,那么变量对应的有一个默认值 。如下
- 整型和浮点型变量默认值是
0
- 字符串变量默认值是
空字符串
,也就是""
- 布尔变量默认值是
false
- 切片,函数,指针,通道变量默认是
nil
如下示例:
var name = "待兔" var age = 18 var count int //默认是 0
3.1 匿名变量
在Go语言中,函数是可以返回多个值的,如果我们只想用其中一个,这时就可以用到匿名变量
匿名变量就是一个下划线 _
,表明返回的值不用,直接丢弃
示例如下:
package main import "fmt" //返回 2 个值 func foo() (string, int) { return "待兔", 18 } func main() { name , _ := foo() //只接收第 1 个值 fmt.Println(name) }
关于函数的定义后面章节会讲解,只需要知道,如果不需要用的返回值,可以使用
_
接收
上面的 foo() 返回了 2 个值,我们只对第 一 个值感兴趣,所以只接收了第一个值,第二个值直接用 _
丢弃
有人会问了,能不能 2 个值都接收,但是只用一个,如下示例:
package main import "fmt" //返回 2 个值 func foo() (string, int) { return "待兔", 18 } func main() { name , age := foo() // 2 个值都接收,但是下面只打印 name fmt.Println(name) }
这样是不行的,因为Go语言规定了:
-
变量只要声明了,就必须使用
-
声明的变量,不使用,编译都不会通过
所以这也是Go语言的设计思想,定义的变量不用,会 ”污染 “ 代码
这样强制性的规定,能让代码变得简洁
4 Go语言常量
关于Go语言常量,有以下特性:
-
常量是在运行时不能改变其值的,和变量是相反的
-
声明常量时,必须给一个初始化值
-
使用
const
声明一个常量,其它和变量的声明一样
如下:定义了 2 个常量
const pi = 3.14 const url = "www.helloworld.net"
4.1 常量计数器 itoa
itoa
是Go语言常量计数器,只能用在常量表达式中。一般用在常量的声明中
itoa
在定义一个常量时,被重置为 0 ,此后每增加一行常量声明,itoa
计数增加一次
itoa
可以简化常量的定义,这在定义枚举时特尤其有用
示例如下:
const( a = iota // 0 b // 1 c // 2 d // 3 )
几个常见的示例
-
跳过某些值
const ( a = iota //0 b //1 _ d //3 )
-
中间插队
const ( a = iota //0 b = 100 //100 c //2 d //3 )
itoa
最常用的就这上面几种,其它的不太常用,这里不就介绍了,因为意义不大。
小结
通过上面的介绍,我们了解到了变量的一些知识,下面我们总结一下
-
声明就是内存中的一块区域,这块区域有名字,有类型,能存放值
-
变量的类型,决定了变量在内存中的占用大小
-
声明变量使用
var
关键字,:=
可以省略var
和数据类型,但是只能用在方法中,且变量之前未定义过下面的示例展示了几种声明变量的方法:
import "fmt" func main() { var name string var name2 string = "待兔" var name3 = "待兔" name4 := "待兔" fmt.Println(name,name2,name3,name4) }
-
常量是在运行时不可改变的量
-
常量定义时必须给一个初始值
-
可以使用
itoa
辅助常量的定义
以上就是本小节的知识,了解了变量相关的知识,为后面章节的学习作铺垫