变量来源于数学,是计算机语言中储存计算结果或表示值的抽象概念,变量可以通过变量名访问。变量的功能是存储用户的数据。不同的逻辑有不同的对象类型,也就有不同的变量类型。

经过半个多世纪的发展,编程语言已经形成一套固定的类型,这些类型在不同的编程 语言中基本是相通的。常见变量的数据类型有: 整型、浮点型、布尔型、结构体等。Go语言的每一个变量都拥有自己的类型,必须经过声明才能使用。

Go语言变量名由字母、数字、下划线组成,其中首个字母不能为数字。

1. 声明变量

声明变量的一般形式是使用var关键字:var identifier type

第一种,使用短变量声明并初始化。在主干/条件分支、函数中,指定变量类型,声明后若不赋值,则使用变量默认值。(常用)

// 变量的声明格式:var <变量名称> <变量类型>
// 变量的赋值格式:<变量名称> = <表达式>
var v_name v_type
v_name = value

// 例如
var a int 
a = 10

第二种,在声明变量时赋值(用于全局变量)

var <变量名称> [变量类型] = <表达式>

// 例如
var b int = 321

第三种,省略变量类型,由编译器推断(用于类型可变的变量)

var v_name = value

// 例如
var b = 10

第四种,最简写法(用于在声明同时,赋初值)

v_name := value

// 例如
c := 10

最简写法的形式在开发中例子较多。net.Dial按指定协议和地址发起网络连接,这个函数有两个返回值:一个是连接对象,一个是err对象。下面分别用最简写法和标准变量声明格式示例:

conn, err = net.Dial("tcp", "127.0.0.1:8080)

var conn net.Conn 
var err error
package main

import (
	"fmt"
)

func main() {
	d := false
	fmt.Println(d)
}

注意,:=左侧的变量不应该是已经声明过的,否则会导致编译错误。



2. 匿名变量,没有名字的变量

在使用多重赋值时,如果不需要在左值中接收变量,可以使用匿名变量。匿名变量的表现是一个"_"下划线,在使用匿名变量时,只需要在声明变量的地方,使用下划线替换即可。

pacage main 

func GetData() (int, int) {
    return 100 , 200
}

func main() {
    a, _ := GetData()
    _, b := GetData()
    fmt.Println(a, b)
}

// 100 200

匿名变量不占用命名空间,不会分配内存。匿名变量与匿名变量之间也不会因为多次声明而无法使用。



3. Tips

:=只能在函数内部使用,如果声明全局变量,还是需要使用var关键字。 golang中引入:=是为了减少一些临时变量的定义,所以一个好的编码习惯是使用:=来声明临时变量,而对于一个函数中常用变量还是使用var进行声明。