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