Go基础之变量 | 青训营

69 阅读5分钟

变量

变量是用来存储用户数据的。在编程过程中,会有许多不同的对象类型,那么对于不同的对象类型,我们就需要不同的变量类型来存储不同类型的用户数据。

变量声明

1.标准格式

变量的声明以关键字var开头,后接变量类型,行尾没有其他标点符号。

标准格式:

var 变量名 变量类型
//例:声明一个int类型的变量num
var num int
//例:声明多个int类型的变量
var num,cnt int

2.批量变量声明格式

在实际的编程过程中,我们往往需要同时声明多个变量,这种情况我们就需要使用批量声明变量。 使用关键字var和小括号,可以同时声明多个变量。
Go语言变量的批量声明格式如下:

var (
    a int 
    b float
    c bool
)

变量初始化

Go语言在声明变量时,会自动对每个变量对应的内存区域进行初始化,即每个变量会有其类型对应的默认值:

  • 整型和浮点型变量的默认值为0
  • 字符串变量的默认值为空字符串("")
  • 布尔类型变量默认为false
  • 切片、映射、函数和指针变量默认为nil
    注意:nil相当于其他编程语言中的null、None和NULL等,指代零值,在Go语言中只能赋值给切片、映射、函数、接口、指针、或通道类型。

1.标准格式:

var 变量名 变量类型 = 表达式
//例:声明一个int类型的变量num,初值为1
var num int = 1

2.编译器推导类型格式

在标准格式基础上,把变量类型省略后,编译器会根据"="右边的表达式来推导变量的类型。

//例:使用此格式初始化变量age值为30
var age = 30 
//在这里编译器会自动推导出变量age为int类型变量

3.短变量声明

变量声明并初始化时有一种更为简洁的写法。

 例:a := 20

使用短变量声明并初始化时,编译器同样会根据等号右边的表达式推导变量的类型。
相对于前两种变量的初始化方法,短变量声明并初始化方法在开发中使用最为普遍。

短变量声明多重赋值
package main
import "fmt"
func main(){
    name,age := "Tom",12
    fmt.Println("name:",name + "\n" + "age:" ,age)
}

执行结果:

name: Tom
age: 12

但是,使用短变量声明并初始化时,需注意变量重复声明的情况:

package main
import "fmt"
func main(){
    var name string
    name := "Tom"
    fmt.Println("name:",name)
}

执行结果:

.\test.go:5:7:no new variables on left side of := (exit status 1)

很显然,编译器报错:在“:=”的左边没有新变量出现,因为name变量已经在代码的第四行中被声明了。
但是,在多个短变量声明并初始化中,应至少有一个新声明的变量出现在左值中,这样即使其他变量名存在重复声明的情况,编译器也不会报错。

package main
import "fmt"
func main(){
    var name string
    name,age := "Tom",12
    fmt.Println("name:",name + "\n" + "age:" ,age)
}

执行结果:

name: Tom
age: 12

变量值交换

实际编程中,我们经常会用到变量值的交换,比如需要交换变量a和变量b的值,我们通常会通过中间变量c进行交换,代码如下:

package main
import "fmt"
func main(){
    var c int  //先声明c
    a := 1
    b := 3
    fmt.Println(a,b)  //交换前a,b的值
    c = a
    a = b
    b = c
    fmt.Println(a,b)  //交换后a,b的值
}

执行结果:

1 3
3 1

在Go语言中,变量值的交换可以不再使用这种复杂的写法,而是通过多重赋值的特性,完成变量值的交换工作。

package main
import "fmt"
func main(){
    a,b := 1,3
    fmt.Println(a,b)  //交换前a,b的值
    a,b = b,a
    fmt.Println(a,b)  //交换后a,b的值
}

执行结果:

1 3
3 1

多重赋值时,变量的左值和右值按照从左到右的顺序依次赋值。

短变量声明使用限制

短变量声明是一种在 Go 中用于声明和初始化变量的简洁方式,使用 := 操作符。尽管它非常方便,但在使用时有一些限制和注意事项:

  • 仅在函数内部使用: 短变量声明只能在函数内部使用,不能在函数外部进行声明。
  • 至少有一个新变量: 短变量声明必须至少声明一个新的变量。如果已经存在于同一作用域的变量名,则会发生编译错误。
  • 至少一个变量有新的值: 如果使用短变量声明初始化变量,至少有一个变量必须是新声明的,而且必须有一个新的值。不能在同一行上仅仅为已有变量赋新值。
  • 类型推断: 短变量声明会根据初始化表达式的值来推断变量的类型,因此变量类型不需要显式指定。
  • 至少一个声明: 短变量声明中至少要有一个变量名,不允许出现空的 :=

小结

学习 Go 变量声明与初始化是编写有效和可维护代码的重要一步。以下是关于 Go 变量声明与初始化的学习总结:

  1. 变量声明:

    • 使用 var 关键字声明变量,语法为 var 变量名 变量类型
    • Go 是静态类型语言,类型在编译时确定。
    • 可以同时声明多个变量,使用逗号分隔,例如:var x, y int
  2. 变量初始化:

    • 变量初始化是在声明变量的同时为其赋初值。
    • 可以使用 = 赋值操作符来初始化变量,例如:var age = 25
    • 可以使用短变量声明 := 在函数内部声明并初始化变量,例如:name := "Alice"
    • 变量初始化可以根据初始值自动推断类型,无需显示指定类型。