Go 语言中的变量及其声明
变量与变量名
变量的定义: 变量由字母、数字、下划线组成,其中首个字母不能为数字。 变量类型: 变量的功能是存储数据,不同的变量保存的数据类型可能会不一样。常见的变量类型有:整数,浮点数,布尔型等。 Go 语言中的每一个变量都有自己的类型,并且变量必须经过声明才能开始使用,声明的时候要告诉系统自己是什么类型的
变量的声明与初始化
Go语言中的变量需要声明之后才能使用,同一作用域不支持重复声明。并且Go语言的变量声明后必须使用。 (声明其实声明的是变量的数据类型,初始化是给变量赋值。)
只声明
Go语言中声明变量的格式是 使用var 关键字:
var name(变量名) type(数据类型)
//同一类型的多个变量可以声明在一起
var name1,name2,name3 type
这种“只声明,不初始化”的情况,变量默认值为0值。
其中,数据类型(包括 complex64/128) 默认为0,布尔类型默认为false,字符串默认为 ""
空字符串
其他类型默认为nil
每声明一个变量就要写 var关键字会比较繁琐,Go语言中还支持批量变量声明。
同时声明多个变量,这种因式分解关键字的写法一般用于声明全局变量:
var(
name1,type1
name2,type2
)
声明的同时初始化
Go语言在声明变量的时候,会自动对变量对应的内存区域进行初始化操作。每个变量会被初始化成其类型的默认值,例如: 整型和浮点型变量的默认值为0。 字符串变量的默认值为空字符串。 布尔型变量默认为false。 切片、函数、指针变量的默认为nil。
当然我们也可在声明变量的时候为其指定初始值。接下来介绍几种初始化方法。
1.先声明在初始化
var name type //声明
name = value //初始化
//多变量可以在同一行赋值
var a,b int
var c string
a,b,c = 2,3,"abc"
注意:
- 如果你想要交换两个变量的值,则可以简单使用
a,b = b,a
两个变量的类型必须相同。 - 空白标识符
_
也被用于抛弃值,如_,b=5,7
中 5被抛弃, _ 实际上是一个匿名变量,你不能得到他的值。
声明的同时初始化
这是变量初始化的标准格式:
var name type =value
声明的同时初始化,并省略类型。
Go比那一期会根据变量的值自动判断变量的类型
var name = value
类型推导:有时候我们会将变量的类型进行省略,这个时候编译器会根据等号右边的值来推导变零的类型完成初始化。
使用 赋值
进行声明初始化
在函数内部,可以使用更简略的:=
方式声明并初始化变量。
:=
是赋值操作符,用她来声明表示name 是一个变量;然后根据 Go 给name
初始化的值 value 来确定 name 变量的类型。
//声明和初始化同时进行
name := value
//多变量可以在同一行进行赋值,即使类型不同。
//这被称为 并行 或 同时 赋值
a,b,c := 5,7,"abc"
这是使用变量的首选形式,使用操作符 := 可以高效地创建一个新的变量,称之为初始化声明。 但是它只能被用在函数体内,而不可以用于全局变量的声明与赋值。
注意事项:
- 声明之后,不可以再次对变量声明(声明只需要一次)
- 如果你在定义变量 a 之前使用它,则会得到编译错误 undefined: a(应该先声明,再使用);
- 如果你声明了一个局部变量却没有在相同的代码块中使用它,同样会得到编译错误 a declared and not used,即声明之后必须使用;
- 但是全局变量是允许 “ 声明但不使用 ” 的。
匿名变量:一种特殊的变量
在使用多重赋值时,如果想要忽略某个值,可以使用匿名变量。匿名变量用一个_ 表示,
func foo() (int, string) {
return 10, "Q1mi"
}
func main() {
x, _ := foo()
_, y := foo()
fmt.Println("x=", x)
fmt.Println("y=", y)
}
匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明。 (在Lua等编程语言里,匿名变量也被叫做哑元变量。)
这样做是因为 Go 语言中你必须使用所有被声明的变量,但有时你并不需要使用从一个函数得到的所有返回值。如:
package main
import "fmt"
func main() {
_,numb,strs := numbers() //只获取函数返回值的后两个
fmt.Println(numb,strs)
}
//一个可以返回多个值的函数
func numbers()(int,int,string){
a , b , c := 1 , 2 , "str"
return a,b,c
}
注意事项
- 函数外的每个语句都必须以关键字开始(var,const,func等)
:=
不能用在函数外_
多用于占位,表示忽略值。
转载自:https://juejin.cn/post/7388441764875796499