Go关键字--var

栏目: Go · 发布时间: 5年前

内容简介: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函数。那么导入包时的下划线和变量定义中的下划线是否含义相同? 答案是:不是 。尽管都是用下划线这个符号来表示,都有丢弃值的操作,但是使用场合不同,意义就不相同,不能混为一谈。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

神一样的产品经理

神一样的产品经理

闫荣 / 电子工业出版社 / 2012-6-1 / 79.00元

这是一本系统阐述移动与互联网产品从无到有、从有到优的产品经理实践案例著作。《神一样的产品经理:基于移动与互联网产品实践》贯穿着“人如产品,产品如人”、“产品的根基和源泉来自现实生活”的写作理念,表达了产品的成功需要神一样的产品经理管理的观点。 《神一样的产品经理:基于移动与互联网产品实践》由浅入深、循序渐进地阐述了产品经理、产品需求、用户体验、项目管理、产品运营和产品团队管理的内容,理论与实......一起来看看 《神一样的产品经理》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码