likes
comments
collection
share

Go 语言中的变量及其声明

作者站长头像
站长
· 阅读数 38

变量与变量名

变量的定义: 变量由字母、数字、下划线组成,其中首个字母不能为数字。 变量类型: 变量的功能是存储数据,不同的变量保存的数据类型可能会不一样。常见的变量类型有:整数,浮点数,布尔型等。 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"

注意:

  1. 如果你想要交换两个变量的值,则可以简单使用 a,b = b,a 两个变量的类型必须相同。
  2. 空白标识符 _ 也被用于抛弃值,如 _,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"

这是使用变量的首选形式,使用操作符 := 可以高效地创建一个新的变量,称之为初始化声明。 但是它只能被用在函数体内,而不可以用于全局变量的声明与赋值。

注意事项:

  1. 声明之后,不可以再次对变量声明(声明只需要一次)
  2. 如果你在定义变量 a 之前使用它,则会得到编译错误 undefined: a(应该先声明,再使用);
  3. 如果你声明了一个局部变量却没有在相同的代码块中使用它,同样会得到编译错误 a declared and not used,即声明之后必须使用;
  4. 但是全局变量是允许 “ 声明但不使用 ” 的。

匿名变量:一种特殊的变量

在使用多重赋值时,如果想要忽略某个值,可以使用匿名变量。匿名变量用一个_ 表示,

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
}

注意事项

  1. 函数外的每个语句都必须以关键字开始(var,const,func等)
  2. := 不能用在函数外
  3. _ 多用于占位,表示忽略值。
转载自:https://juejin.cn/post/7388441764875796499
评论
请登录