var
var关键字用来定义变量,不论定义什么类型的变量,都可以使用var来定义。
var 变量名 [类型] [=] [初始值]
定义变量时,如果定义的变量没有初始化,则必须指定变量类型;如果变量定义时初始化,则可以不指定类型,由编译器自行推断变量类型。
如定义一个变量名为num的int类型变量方法如下:
var num int
var num int = 8
var num = 8
num := 8
在定义变量时,var关键字可以省略,如使用num:=8来定义变量,就省略了var关键字,而是采用在赋值符号左侧加入了冒号(:=)的方式定义变量。使用 := 的方式定义变量,有限制条件,这种定义变量的方式只能在函数内部进行,也就是只能定义局部变量。如果定义全局变量,不能使用 := 来定义,只能使用var来定义。
在定义变量时,需要合理规划,golang是一门追求简洁的语言,每一个定义的变量都必须被使用,否则会造成编译错误:
...num declared and not used
下边来介绍在一行中定义多个变量的方法。如定义3个int类型的变量,分别是num1, num2, num3,并为这3个变量赋值,写法如下:
// 第一种写法
var num1 int = 1
var num2 int = 2
var num3 int = 3
或者
var num1 = 1
var num2 = 2
var num3 = 3
// 第二种写法
var num1,num2,num3 int = 1,2,3
或者
var num1, num2, num3 = 1,2,3
// 第三种写法
var (
num1 int = 1
num2 int = 2
num3 int = 3
)
或
var (
num1 = 1
num2 = 2
num3 = 3
)
如上述定义变量的方式中,第二种写法在一行中完成,有些情况下会显得比较简洁。
上述的3个变量,都是同一个类型,即int型,那么在一行中,能否同时定义多个不同类型的变量呢?答案是:可以,但是有前提条件。在一行中同时定义多个不同类型的变量,需要在定义变量时初始化变量,且不能显示的指定变量类型。如定义变量str和num两个变量,str类型为string,num类型为int。定义方法如下:
package main
import (
"fmt"
"reflect"
)
func main() {
str, num := "hello str", 88
fmt.Println("str value is:", str, " type is:", reflect.ValueOf(str).Kind())
fmt.Println("num value is:", num, " type is:", reflect.ValueOf(num).Kind())
}
输出结果是:
str value is: hello str type is: string
num value is: 88 type is: int
上边定义变量str和num时,也可以使用var来定义,而不使用:=,如:
var str, num = "hello str", 88
下边来看几个错误的写法:
错误1:var str, num string, int = "hello str", 88 (错误语法格式)
错误2:var str string, num int = "hello str", 88 (错误语法格式)
错误3:var str, num string = "hello str", 88 (两个变量类型不一致)
错误4:var str, num int = "hello str", 88 (两个变量类型不一致)
特殊变量 下划线 (_)
在golang中有个特殊的变量,那就是下划线,将变量赋值给下划线,表示丢弃这个值,写法如下:
var _ = "hello"
那么下划线这个变量能否被引用呢?答案是:不能。下边来一个错误的写法:
// 错误写法示例
package main
import (
"fmt"
)
func main() {
var _ = "hello"
fmt.Println(_)
}
错误信息是:
cannot use _ as value
为什么要使用下划线变量?
在第一章节我们了解到,golang的函数可以返回多个值,有些场景中,我们只需要其中一个返回值,其余返回值用不上,那么我们就可以将用不上的返回值赋值给下划线变量。 如果不赋值给下划线变量,那么就需要定义变量来接收这些值,但是在golang中定义了却又没有使用的变量,无法通过编译,这些无用的返回值给编码造成了不必要的麻烦。
注意事项:
在import导入包时,可以在导入包的前边加上下划线,表示只执行这个包中的init函数。那么导入包时的下划线和变量定义中的下划线是否含义相同?答案是:不是。尽管都是用下划线这个符号来表示,都有丢弃值的操作,但是使用场合不同,意义就不相同,不能混为一谈。
有疑问加站长微信联系(非本文作者)