Go语言中的变量:全局变量-局部变量-短变量-匿名变量

变量

Go语言中的每一个变量都有自己的类型,并且变量必须经过声明才能开始使用。

声明的变量必须使用,否则会报错。这一点与js不相同。

GO语言中变量的声明

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

Go语言中关键字和保留字都不能用作变量名。[重要]

Go语言中的变量需要声明后才能使用,同一作用域内不支持重复声明。

并且Go语言的变量声明后必须使用(这一点和js不相同)。

如何声明变量

var 变量名称 类型

变量声明后没有赋值的话,值为空

复制代码
package main
// 引入打印的包
import ("fmt")
// 入口函数
func main()  {
	// 输出语句
	var userName string
	fmt.Println("userName", userName) // 值是空
}

第一种方式去初始化(定义变量和赋值分为2步)

复制代码
package main
// 引入打印的包
import ("fmt")
// 入口函数
func main()  {
	// 第一种方式初始化变量
	var userName string
	userName ="张三"
	fmt.Println(userName)
}

第2种方式定义变量(定义变量和赋值合并成为1步)

复制代码
package main
// 引入打印的包
import ("fmt")
// 入口函数
func main()  {
	// 第2种方式初始化变量:定义变量和赋值合并成为1步
	var userName string ="张三"
	fmt.Println(userName)
}

第3种方式:自动推导类型,不需要你去声明类型

复制代码
package main
// 引入打印的包
import ("fmt")
// 入口函数
func main()  {
	// 第3种方式:自动推导类型,不需要你去声明类型
	var userName ="张三"
	fmt.Println(userName)
}

一次性定义多个变量

复制代码
// 第一种,这种变量名称1,变量名称2类型是相同的
var变量名称1,变量名称2 类型

// 第二种:变量名称1,变量名称2 类型不相同
var (
  变量名称1 类型
  变量名称2 类型
)

package main
import ("fmt")
// 入口函数
func main()  { 
   // 第二种:变量名称1,变量名称2 类型不相同
	var (
	  userName string = "张三"
	  ageNum int =19
	)
	fmt.Println(userName, ageNum)
}

输出 张三 19

go语言可以自动推导数据类型,你声明变量且赋值的时,可以不用写数据类型

比如上面的例子,你声明变量的时候,有赋值。

因此。可以不用去写变量类型。

它回去自动推导

复制代码
import ("fmt")
// 入口函数
func main()  {
// 声明变量且赋值的时,可以不用写数据类型
	var (
		userName  = "张三"
		ageNum  =19
	)
	fmt.Println(userName, ageNum)
}

短变量声明法

在函数内部,可以使用更简略的 := 方式声明并初始化变量。

注意:短变量只能用于声明局部变量,不能用于全局变量的声明。

复制代码
变量 := 赋值

注意 := 左右两侧有空格

复制代码
package main
import ("fmt")
// 入口函数
func main()  {
	// 短变量声明法
	userName := "张三" // 等价与 var userName = "张三"
	fmt.Println(userName)
}

短变量一次声明多个变量

复制代码
package main
import ("fmt")
// 入口函数
func main()  {
	// 声明变量且赋值的时,可以不用写数据类型
	userName,ageNum,userAddress:= "张三", 18, "在xx城市"
	fmt.Println(userName, ageNum, userAddress)
}

全局变量、短变量只能声明局部变量

复制代码
package main
import ("fmt")
// 声明了一个全局变量且有赋值。不用声明类型
var g="全局变量"
// 入口函数
func main()  {
	// 声明变量且赋值的时,可以不用写数据类型
	userName,ageNum,userAddress:= "张三", 18, "在xx城市"
	fmt.Println("短变量只能声明局部变量",userName, ageNum, userAddress)
	fmt.Println(g)
}

匿名变量

匿名变量在使用多重赋值时,

如果想要忽略某个值,可以使用匿名变量(anonymous variable)

匿名变量用一个下划线_表示

匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明

也就是说:下划线_不存在重复声明

复制代码
package main
import ("fmt")

func backInfo()(string, int){
	return "zhangsan", 100
}

// 入口函数
func main()  {
	//获取全部变量
	var userName,age = backInfo()
	fmt.Println(userName, age)
	// 假设现在我们不需要返回值 age,使用匿名变量
    var name, _ =backInfo()
	fmt.Println(name)
	// 匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明
	var _, ccc =backInfo()
	fmt.Println(ccc)
}