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) div.cn1, div.cn2, div.cn3 := 117, 7834, 5685 //不同类型的多个变量 div.cn4, div.cn5, div.cn6 := "GFG", 859.24, 1234 //显示值和变量类型 fmt.Printf("div.cn1 的值为 : %d\n", div.cn1) fmt.Printf("div.cn1 的类型为 : %T\n", div.cn1) fmt.Printf("\ndiv.cn2 的值为 : %d\n", div.cn2) fmt.Printf("div.cn2 的类型为 : %T\n", div.cn2) fmt.Printf("\ndiv.cn3 的值为 : %d\n", div.cn3) fmt.Printf("div.cn3 的类型为 : %T\n", div.cn3) fmt.Printf("\ndiv.cn4 的值为 : %s\n", div.cn4) fmt.Printf("div.cn4 的类型为 : %T\n", div.cn4) fmt.Printf("\ndiv.cn5 的值为 : %f\n", div.cn5) fmt.Printf("div.cn5 的类型为 : %T\n", div.cn5) fmt.Printf("\ndiv.cn6 的值为 : %d\n", div.cn6) fmt.Printf("div.cn6 的类型为 : %T\n", div.cn6) }
输出:
div.cn1 的值为 : 117 div.cn1 的类型为 : int div.cn2 的值为 : 7834 div.cn2 的类型为 : int div.cn3 的值为 : 5685 div.cn3 的类型为 : int div.cn4 的值为 : GFG div.cn4 的类型为 : string div.cn5 的值为 : 859.240000 div.cn5 的类型为 : float64 div.cn6 的值为 : 1234 div.cn6 的类型为 : int
:=声明的是局部变量还是全局变量?
借助短变量声明操作符(:=),您只能声明仅具有块级作用域的局部变量。通常,局部变量在功能块内部声明。如果尝试使用short声明运算符声明全局变量,则会抛出错误消息。
package main import "fmt" //使用var关键字进行声明 //并初始化变量 //它是包变量,或者你可以说全局范围 var div.cn1 = 900 //使用简短的变量声明 //它会抛出一个错误 div.cn2 := 200 func main() { //在函数内部访问div.cn1 fmt.Println(div.cn1) // 在函数内部访问div.cn2 fmt.Println(div.cn2) }
输出错误:
.\test.go:12:1: syntax error: non-declaration statement outside function body #.\test.go:12:1:语法错误:函数主体外的非声明语句
package main import "fmt" //使用var声明一个全局变量 var div.cn1 = 900 func main() { //使用简短的变量声明 //在主函数中 //它具有局部作用域,即不能 //在主函数之外访问 div.cn2 := 200 //在函数内部访问div.cn1 fmt.Println(div.cn1) //在函数内部访问div.cn2 fmt.Println(div.cn2) }
输出:
900 200