Go 短变量声明运算符(:=)

Golang中的短变量声明运算符(:=)用于创建具有适当名称和初始值的变量。 使用此操作符的主要目的是在函数内声明和初始化局部变量,并缩小变量的作用域。变量的类型由表达式的类型决定。var关键字还用于创建特定类型的变量。所以你可以说在Golang中有两种创建变量的方法,如下所示:

  • 使用var关键字

  • 使用短变量声明运算符(:=)

在本文中,我们将仅讨论短变量声明运算符。要了解var关键字,可以在Go中引用var关键字

使用短变量声明运算符的语法:

variable_name := 表达式 或 值

在这里,必须在声明后立即初始化变量,无需提及变量的类型, 右侧的表达式或值用于评估变量的类型。而使用var关键字可以避免在声明时进行初始化

示例:在这里,我们使用短声明运算符声明变量,而未指定变量的类型。变量的类型由:=运算符右侧的表达式类型决定。

package main

import "fmt"

func main() {

    //声明和初始化变量
    a := 30

    //接受一个字符串变量
    Language := "Go 语言菜鸟教程"

    fmt.Println("a的值为: ", a)
    fmt.Println("Language的值: ", Language)

}

输出:

a的值为:  30
Language的值:  Go 语言菜鸟教程

使用短声明运算符(:=)声明多个变量

短声明运算符也可以用于在单个声明中声明相同类型或不同类型的多个变量。这些变量的类型由:=运算符右侧的表达式评估。

package main

import "fmt"

func main() {

    //多个相同类型的变量(int)
    nhooo1, nhooo2, nhooo3 := 117, 7834, 5685

    //不同类型的多个变量
    nhooo4, nhooo5, nhooo6 := "GFG", 859.24, 1234

    //显示值和变量类型
    fmt.Printf("nhooo1 的值为 : %d\n", nhooo1)
    fmt.Printf("nhooo1 的类型为 : %T\n", nhooo1)

    fmt.Printf("\nnhooo2 的值为 : %d\n", nhooo2)
    fmt.Printf("nhooo2 的类型为 : %T\n", nhooo2)

    fmt.Printf("\nnhooo3 的值为 : %d\n", nhooo3)
    fmt.Printf("nhooo3 的类型为 : %T\n", nhooo3)

    fmt.Printf("\nnhooo4 的值为 : %s\n", nhooo4)
    fmt.Printf("nhooo4 的类型为 : %T\n", nhooo4)

    fmt.Printf("\nnhooo5 的值为 : %f\n", nhooo5)
    fmt.Printf("nhooo5 的类型为 : %T\n", nhooo5)

    fmt.Printf("\nnhooo6 的值为 : %d\n", nhooo6)
    fmt.Printf("nhooo6 的类型为 : %T\n", nhooo6)

}

输出:

nhooo1 的值为 : 117
nhooo1 的类型为 : int

nhooo2 的值为 : 7834
nhooo2 的类型为 : int

nhooo3 的值为 : 5685
nhooo3 的类型为 : int

nhooo4 的值为 : GFG
nhooo4 的类型为 : string

nhooo5 的值为 : 859.240000
nhooo5 的类型为 : float64

nhooo6 的值为 : 1234
nhooo6 的类型为 : int

:=声明的是局部变量还是全局变量?

借助短变量声明操作符(:=),您只能声明仅具有块级作用域的局部变量。通常,局部变量在功能块内部声明。如果尝试使用short声明运算符声明全局变量,则会抛出错误消息。

package main  
    
import "fmt"
    
//使用var关键字进行声明
//并初始化变量
//它是包变量,或者你可以说全局范围
var nhooo1 = 900  
    
//使用简短的变量声明
//它会抛出一个错误
nhooo2 := 200  
    
func main() {  
    
//在函数内部访问nhooo1
fmt.Println(nhooo1)  
   
// 在函数内部访问nhooo2
fmt.Println(nhooo2)  
        
}

输出错误:

.\test.go:12:1: syntax error: non-declaration statement outside function body
#.\test.go:12:1:语法错误:函数主体外的非声明语句
package main

import "fmt"

//使用var声明一个全局变量
var nhooo1 = 900

func main() {

    //使用简短的变量声明
    //在主函数中
    //它具有局部作用域,即不能
    //在主函数之外访问
    nhooo2 := 200

    //在函数内部访问nhooo1
    fmt.Println(nhooo1)

    //在函数内部访问nhooo2
    fmt.Println(nhooo2)

}

输出:

900
200