【Go】Go 语言的变量与其声明


一. 变量与变量名

变量的来历

程序运行过程中的数据都是保存在内存中,我们想要在代码中操作某个数据时就需要去内存上找到这个变量,但是如果我们直接在代码中通过内存地址去操作变量的话,代码的可读性会非常差而且还容易出错,所以我们就利用变量将这个数据的内存地址保存起来,以后直接通过这个变量就能找到内存上对应的数据了。

变量定义

变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。

变量名由字母、数字、下划线组成,其中首个字符不能为数字。(参见标识符的命名规则

变量类型

变量(Variable)的功能是存储数据。不同的变量保存的数据类型可能会不一样。

经过半个多世纪的发展,编程语言已经基本形成了一套固定的类型,常见变量的数据类型有:整型、浮点型、布尔型等。

Go语言中的每一个变量都有自己的类型,并且变量必须经过声明才能开始使用。声明的时候要告诉系统自己是什么类型的。


二. 变量的声明与初始化艺术

Go语言中的变量需要声明后才能使用,同一作用域内不支持重复声明。并且Go语言的变量声明后必须使用。

声明 其实声明的是变量的数据类型。
初始化是给变量赋值。

1. 只声明

Go 语言的声明变量格式 是使用 var 关键字:

var name(变量名) type(数据类型)
//同一类型的多个变量可以声明在同一行
var name1, name2, name3 type

这种 “ 只声明,不初始化 ”的情况,变量默认为0值。
其中,数值类型(包括complex64/128)默认为 0。布尔类型默认为 false。字符串默认为 ""(空字符串)。其他类型默认为 nil

每声明一个变量就需要写var关键字会比较繁琐,go语言中还支持批量变量声明。
同时声明多个变量,这种因式分解关键字的写法一般用于声明全局变量

var (
    name1 type1
    name2 type2
)

2. 声明的同时初始化

Go语言在声明变量的时候,会自动对变量对应的内存区域进行初始化操作。每个变量会被初始化成其类型的默认值,例如: 整型和浮点型变量的默认值为0。 字符串变量的默认值为空字符串。 布尔型变量默认为false。 切片、函数、指针变量的默认为nil

当然我们也可在声明变量的时候为其指定初始值。接下来介绍几种初始化方法。

1. 先声明,再初始化

var name type //声明
name = value  //初始化

多变量可以在同一行进行赋值,如:

var a, b int
var c string
a, b, c = 5, 7, "abc"

多一嘴:

  1. 如果你想要交换两个变量的值,则可以简单地使用 a, b = b, a,两个变量的类型必须相同。
  2. 空白标识符 _ 也被用于抛弃值,如:_, b = 5, 7 中,5被抛弃。
    _ 实际上是一个匿名变量,你不能得到它的值。稍后会介绍。

2. 声明的同时初始化

这是变量初始化的标准格式:

var name type = value

3. 声明的同时初始化,并省略类型

Go编译器会根据值自动判定变量类型。

var name = value

类型推导:有时候我们会将变量的类型省略,这个时候编译器会根据等号右边的值来推导变量的类型完成初始化。

4. 使用“赋值”进行声明初始化

在函数内部,可以使用更简略的 := 方式声明并初始化变量。

:=是赋值操作符,用它来声明,表明name 是一个变量;
然后 Go 根据给 name 初始化的值 value 来确定 name 变量的类型。

//声明和初始化同时进行
name := value  

多变量可以在同一行进行赋值(即使类型不同),如:

//这被称为 并行 或 同时 赋值
a, b, c := 5, 7, "abc"

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

实例:

package main

import (
    "fmt"
)
// 全局变量m
var m = 100

func main() {
    
    
    n := 10
    m := 200 // 此处声明局部变量m
    fmt.Println(m, n)
}

3. 注意事项

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

三. 匿名变量:一种特殊变量

在使用多重赋值时,如果想要忽略某个值,可以使用匿名变量(anonymous variable)。 匿名变量用一个下划线 _ 表示,例如:

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
}

输出:

2 str

四. 注意事项

  1. 函数外的每个语句都必须以关键字开始(var、const、func等)

  2. :=不能使用在函数外。

  3. _ 多用于占位,表示忽略值。


参考链接

  1. Go 语言变量

猜你喜欢

转载自blog.csdn.net/weixin_44211968/article/details/121232016