一、变量的概念
变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念.
二、变量的声明
go语言中的变量声明有三种形式,下面由繁到简进行介绍。
第一种,声明并指定类型
var name string = "cason"
第二种,声明但不显示指定类型(编译器将自动推断类型)
var name = "cason"
第三种省略 var
name := "cason"
推荐使用该方式进行变量的声明,需要注意的是,左侧的变量不可以是已经声明过的、否则将无法编译通过。另外补充一点,也可以只声明变量而不进行初始化,这种情况下将会使用默认值。
var name string
var age int
var is_man bool
三、多变量的声明
Golang 有着灵活的变量声明形式,这有点像 Javascript ,例如我们可以采用下面形式进行变量声明
第一种:多变量指定类型(相同类型)
var your_name , her_name , my_name string;
当然你可以同时进行初始化
var your_name, her_name, my_name string = "jack", "rose", "cason"
第二种:多变量不指定类型(相同类型)
var your_name, her_name, my_name = "jack", "rose", "cason"
不进行初始化的情况下必须指定类型
var your_name , her_name , my_name string; //string 不可省略
否则将无法编译通过
./variable.go:15:35: syntax error: unexpected newline, expecting type
./variable.go:16:2: syntax error: unexpected fmt at end of statement
第三种:省略var自主类型推断
your_name, her_name, my_name := "jack", "rose", "cason"
同样的 :=
左边的变量不可是已经声明过的变量
补充 第二种和第三种后面的类型可以不同
第二种不同变量类型
var your_name, your_age, is_boy = "jack", 18, true
第三种不同变量类型
your_name, your_age, is_boy := "jack", 18, true
四、变量的作用域
首先了解一下 作用域
,所谓作用域就是指,已经声明的常量,变量函数或者包在代码中的作用范围。
变量作用域的不同取决于其声明的位置不同,换句话说,按照声明位置的不同我们可以将变量的作用域大致分为三种,分别为: 全局变量、局部变量及形式参数。
全局变量
定义在函数外部的变量,我们称之为全局变量。如下面代码
package main
//全局变量
var num int = 0
func main() {
//code
//可以访问到全局变量 num
}
局部变量
定义在函数内部的变量,我们称之为局部变量。如下面代码
package main
func main() {
//局部变量
var num int = 0
//可以访问到局部变量 num
}
func function_name(){
//访问不到局部变量 num
}
形式参数
函数定义中的变量称为形式参数,例如
func sum(num1,num2 int){
return num1 + num2
}
代码中 func sum(num1,num2 int){}, num1,num2 就是形式参数。在使用过程中形式蚕食通常作为函数的局部变量来使用,如上面的代码 return num1 + num2
。既然有形式参数,那就有实际参数。在调用函数的时候传递进去的参数就是实际参数。如下面代码
func main() {
fmt.Println(sum(1, 2))// 1 和 2 即为实际参数
}
作用域补充
Go语言中允许局部变量和全局变量重名,在使用时优先使用在访问范围之内的局部变量。如下面代码所体现的
var num_one int = 20 //全局变量
func main() {
var num_one int = 10 //局部变量,与上面的全局变量重名
fmt.Println("main函数中的num_one:", num_one) //使用的是局部变量
fmt.Println("test_num:", test_num(1)) //使用的是局部变量
}
func test_num(num int) int {
return num + num_one //num_one 使用的是全局变量 num + 20
}
输出的结果为
main函数中的num_one: 10
test_num: 21
五、常量
“常量”的广义概念是:‘不变化的量’,如真空中传播的光速,声音在空气中传播的速度。
在计算机编程中常量相对于变量而存在,例如我们我们定义了一个圆周率常量Pi,在编程过程中我们不会再去改变这个值。也就是说一旦确定不需要再进行更改的值,我们就可以将其作为一个常量。
Golang 中常量的定义
const identifier [type] = value
//eg:
const speed_of_sound int = 340
与变量相同,我们也可以省略类型
const speed_of_sound = 340
可以多常量定义
const int_val, string_val, bool_val = 100, "hi", true
Golang 中的特殊常量 iota
这是Golang 的特点之一,iota 在每个 const 出现时都将被重置为 0 ,直到下一个 const 出现前,iota 每出现一次都将在原来的基础上 +1。该特性非常适合用于枚举类型
const (
a = iota //0
b = iota //1
c = iota //2
)
上面的写法还可以写成下面这样
const (
a = iota //0
b //1
c //2
)
典型的例子
const (
a = iota //0
b //1
c //2
d = 8 //iota +=1
e = "cason" //iota +=1
f = iota //iota +=1
g
)
fmt.Println(a, b, c, d, e, f, g)
打印结果为
0 1 2 8 cason 5 6
iota 出现后每个新行都会 自增1,如果出现的不是iota,那么下一行的值将与上一行保持一致
const (
a = 0 //0
b //1
c //2
d = 8
e
f = "hello"
g
)
fmt.Println(a, b, c, d, e, f, g)
打印结果为
0 0 0 8 8 hello hello