内容简介:var关键字用来定义变量,不论定义什么类型的变量,都可以使用var来定义。定义变量时,如果定义的变量没有初始化,则必须指定变量类型;如果变量定义时初始化,则可以不指定类型,由编译器自行推断变量类型。如定义一个变量名为num的int类型变量方法如下:
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函数。那么导入包时的下划线和变量定义中的下划线是否含义相同? 答案是:不是 。尽管都是用下划线这个符号来表示,都有丢弃值的操作,但是使用场合不同,意义就不相同,不能混为一谈。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Responsive Web Design
Ethan Marcotte / Happy Cog / 2011-6 / USD 18.00
From mobile browsers to netbooks and tablets, users are visiting your sites from an increasing array of devices and browsers. Are your designs ready? Learn how to think beyond the desktop and craft be......一起来看看 《Responsive Web Design》 这本书的介绍吧!