golang变量

81 阅读4分钟

变量

变量声明

var关键字

1.var关键字声明

基本语法

var 变量名 类型;

概述

指定变量类型,如果没有初始化,则变量默认为零值。

示例

package variable

import "fmt"

/*本文件用于测试常见类型的零值*/
//整数类型
var v1 int

//获得零值
func GetZero(){
	fmt.Printf("整数类型的零值为%v\n",v1)
}

main入口中导入,不要手写导入包,例如

import "go_learn/variable"

因为golang的检测机制,只要某个包被使用就会自动导入,没使用则会把导入删除,所以我们只需要写上

包名.方法()
包名.变量

就会自动导入,如果我们发现导入路径出错再手动更改(常见于使用第三方包有同名方法时)。

package main

import (
	"fmt"
	"go_learn/variable"
)

//这是入口文件
func main(){
	// 这是一段打印
	fmt.Print("hello world!!\n")
	//测试零值
	variable.GetZero()
}
2.var声明并赋值

基本语法

var 变量名 类型 = 值;

注意:如果值与类型不符会报错。

示例

var v2 string = "hello";
3.var声明并类型推导

基本语法

var 变量名 = 值;

编译器根据赋值类型自动推导变量的类型,这适用于很多简易场合。

示例

var v3 = true;
//首次赋值后变量的类型就确定了,例如v3为bool类型

//类型不一样,报错
//v3 = 11;
4.多变量声明

最简单的声明语法

var 变量1,变量2,变量3  类型;

注意:由于变量声明必须要包含类型,所以仅声明不赋值的情况下多变量声明只能声明同类型。

4.1同类型多变量声明并赋值
var 变量1,变量2,变量3  类型 = 值1,值2,值3

示例

var val1,val2,val3 int = 5,6,87
//值为5,6,87
fmt.Printf("值为%d,%d,%d\n",val1,val2,val3)

注意

1.多变量赋值,左侧的所有变量至少有一个是未声明过的,因为变量不能重复声明

2.如果满足条件1,则已声明过的相当于重新赋值,未声明过的相当于声明并赋值

3.按照位置赋值

4.2不同类型多变量声明并赋值

如果想要不同类型的多变量声明就采取赋值来类型推导的方式。

var 变量1,变量2,变量3 = 值1,值2,值3

示例

var val4,val5,val6 = "hello",true,87
//值为hello,true,87
fmt.Printf("值为%v,%v,%d\n",val4,val5,val6)
5.用于全局变量声明

所谓全局变量,指的是在包的顶层,即不从属于任何函数,例如:

package main

//全局变量
var num = 20

func main(){
    
}

var用于全局变量声明时还有一种特殊的声明多个全局变量的方式,例如

var (
	变量1 类型1
    变量2 = 值2
    变量3,变量4 类型
)

相当于提取出了公共的var,所以又被称为因式分解赋值。

简易变量声明

不使用关键字,直接使用:=来实现声明并赋值,与var的差别:

1.`:=`只能用于局部变量声明,即必须在函数内
2.`:=`声明的同时赋值,无法指定类型,靠赋值推导
3.`:=`声明的变量必须使用,原因是局部变量必须使用,`var`声明的局部变量也遵守这一条,但是全局变量例外
简易声明

基本语法

变量 := 值

注意:

1.不要赋值号=混淆

2.左侧变量在同作用域内必须未声明

示例

package book
func GetPrice(){
    //声明并赋值
    price := 25
    return price
}
简易声明多个变量

基本语法

变量1,变量2,变量3 := 值1,值2,值3

注意:

左侧的变量至少有一个从未声明

示例

package person
func GetInfo(){
    age,name,weight := 18,"baby",120
    fmt.Print(age,name,weight)
}

匿名变量

匿名变量就是_,也被称为空标识符。

常用场景

1.右侧返回了多个结果,我们不想接收某个位置的参数。

2.导包时只执行init(),其他不导入。

示例

package person
func GetInfo(){
    //不接收第二个值
    age,_,weight := 18,"baby",120
    fmt.Print(age,name,weight)
}

注意

匿名变量不算未声明变量,所以在如下情形报错。

var age =18
//报错:左侧所有变量都已经声明不能重复声明
_,age := "hello",20