变量

变量是包含临时处理数据的数据的存储片段。

在Golang中声明变量的最通用形式使用var关键字、显式类型和赋值。

var name type = expression

带初始化的声明

如果您事先知道变量的值是多少,则可以声明变量并在同一行上为它们赋值。

package main

import "fmt"

func main() {
	var i int = 10
	var s string = "Canada"

	fmt.Println(i)
	fmt.Println(s)
}

不带初始化的声明

关键字var用于声明变量,后跟所需的名称和变量将包含的值类型。

package main

import "fmt"

func main() {
	var i int
	var s string

	i = 10
	s = "Canada"

	fmt.Println(i)
	fmt.Println(s)
}

执行上述语句后,变量i将保存值10,变量s将保存值Canada。

使用类型推断的声明

在声明时为变量赋值时,可以从声明中省略变量类型。分配给变量的值的类型将用作该变量的类型。

package main

import (
	"fmt"
	"reflect"
)

func main() {
	var i = 10
	var s = "Canada"

	fmt.Println(reflect.TypeOf(i))
	fmt.Println(reflect.TypeOf(s))
}

多个变量的声明

Golang允许您在一行中为多个变量赋值。

package main

import (
	"fmt"
)

func main() {
	var fname, lname string = "John", "Doe"
	m, n, o := 1, 2, 3
	item, price := "Mobile", 2000

	fmt.Println(fname + lname)
	fmt.Println(m + n + o)
	fmt.Println(item, "-", price)
}

Golang的短变量声明

:= 短变量赋值运算符指示正在使用短变量声明。无需使用var关键字或声明变量类型。

package main

import (
	"fmt"
	"reflect"
)

func main() {
	name := "John Doe"
	fmt.Println(reflect.TypeOf(name))
}

John Doe 字符串文本将分配给名称。

由大括号定义的Golang变量的范围

在Go语言中,变量的作用域是指可访问变量的代码区域。变量的作用域由声明变量的位置决定。

在块内声明的变量(例如,在函数或控制结构中,例如if, forswitch)只能在该块和任何嵌套块内访问。一旦执行离开块,变量就会超出范围,无法再访问。

package main

import (
	"fmt"
)

var s = "Japan"

func main() {
	fmt.Println(s) // 打印全局变量s
	x := true      // 声明并赋值本地变量x
    
	if x {
		y := 1 // if块内声明本地变量y并赋值1
        
		if x != false {
			fmt.Println(s) // 打印全局变量s
			fmt.Println(x) // 打印本地变量x
			fmt.Println(y) // 打印本地变量y
		}
	}
    
	fmt.Println(x) // 打印本地变量x
}

在 main 函数中,我们有三个不同范围的变量:

  • s:这是一个全局变量,可以从包中的任何函数(包括main函数)访问。
  • x:这是一个在主函数中声明和初始化的局部变量。它只能在主函数中访问。在这种情况下,也可以在主函数内的if块中访问它。
  • y:这是一个在第一个if块中声明和初始化的局部变量。它的范围仅限于声明它的块,因此只能在if块及其嵌套块中访问它。在这种情况下,它也可以在第二个if块内访问,该块嵌套在第一个if块中。

Golang 变量的命名约定

以下是命名 Golang 变量的规则:

  • 名称必须以字母开头,并且可以包含任意数量的其他字母和数字。
  • 变量名称不能以数字开头。
  • 变量名称不能包含空格。
  • 如果变量的名称以小写字母开头,则只能在当前包中访问它,这被视为unexported的变量,是其他语言中的private变量。
  • 如果变量的名称以大写字母开头,则可以从当前包外部的包访问它,这被视为exported的变量,是其他语言中的public变量。
  • 如果名称由多个单词组成,则第一个单词之后的每个单词都应大写,如下所示:empName,EmpAddress等。
  • 变量名称区分大小写(car、Car 和 CAR 是三个不同的变量)。

零值

如果你声明一个变量而不给它赋值,Golang 会自动将默认值(或零值)绑定到该变量,但零值不代表0,每个类型都有对应的零值。

package main

import "fmt"

func main() {
	var quantity float32
	fmt.Println(quantity)

	var price int16
	fmt.Println(price)

	var product string
	fmt.Println(product)

	var inStock bool
	fmt.Println(inStock)
}

当上面的代码被编译和执行时,它会产生以下结果:

0
0

false

Golang变量声明块

变量声明可以组合到块中,以提高可读性和代码质量。

package main

import "fmt"

var (
	product  = "Mobile"
	quantity = 50
	price    = 50.50
	inStock  = true
)

func main() {
	fmt.Println(quantity)
	fmt.Println(price)
	fmt.Println(product)
	fmt.Println(inStock)
}