下面是代码例子:
//go 变量 //申明包名main package main //导入包名 import( "fmt" ) var a int //声明一个int类型的变量 var b struct{ //声明一个结构体 name string } var c = 8 //声明变量同时赋值 var ( //批量声明变量,简洁 d int e string ) var name1 int = 5 //1声明变量name1,并且初始化 //一行申明多个变量 var f,g int //同一行初始化多个变量,不同类型也可以,这里默认初始化值,根据值进行定义了类型。 var h,i,j = 5,"abd",0.4 func main(){ name2 := "test" //2声明变量并初始化值,这种赋值不能在函数外面进行赋值 //打印变量 fmt.Println(a,b,c,d,e,f,g,h,i,j) fmt.Println(name1,name2) }
总结:
1、变量声明(variable declaration)中的初始化表达式(initialization expressions)的求值顺序(evaluation order)由初始化依赖(initialization dependencies)决定;但对于初始化表达式内部的操作数的求值需要按照2中的顺序:从左到右。
2、在非变量初始化语句中,对表达式、赋值语句或返回语句中的操作数进行求值时,操作数中包含的函数(function)调用、方法(method)调用和通信操作(主要针对channel)将按语法从左到右的顺序求值。
3、赋值语句求值分为两个阶段,第一阶段是等号左边的index expressions、pointer indirections和等号右边的表达式中的操作数的求值顺序按照2中从左到右的顺序;第二阶段按从左到右的顺序对变量赋值。
注意:
I. Go里面不损失精度的情况下会把8.0这类浮点数视作整数8
II. Go里面的常数是高精度数,分为几类。
有类型的:uint(8),类型显式指定了,在表达式里面不会变化。
无类型的:分成无类型整数和无类型浮点两类。这两类在使用的时候会根据上下文需要的类型转化为实际类型