一、变量声明和作用域
1、变量的作用域(当变量被声明以后,它就进入作用域,只要变量在作用域内,就可以访问它,否则会报错;而变量声明的位置,决定了它的作用域) 在Go语言中,作用域的范围就是{}之间的部分
2、短声明 在Go语言中,可以用var来声明变量:
var count = 10
for count = 10; count > 0;count--{
fmt.Println(count)
}
fmt.Println(count)
但也可以使用短声明:
for count := 10; count > 0; count--{
fmt.Println(count)
}
这两种方式效果是一样的,不仅声明句更短,而且可以在无法使用var的地方使用
3、package作用域
(1)era变量是在main函数外声明的(它拥有package作用域,如果main package有多个函数,那么era对它们都可见)
var era = "AD"
func main(){
year := 2018
switch month := rand.Intn(12) + 1; month {
case 2:
day := rand.Intn(28) + 1
fmt.Println(era,year,month,day)
case 4,6,9,11:
day := rand.Intn(30) + 1
fmt.Println(ear.year,month,day)
}
}
(2)短声明不可用来声明package作用域的变量
二、实数
1、声明浮点型变量 (1)以下三个语句效果一样
days := 365.2425
var days = 365.2425
var days float64 = 365.2425
只要数字含有小数部分,那它的类型就是float64(双精度)
(2)如果用一个整数来初始化某个变量,那必须指定它的类型为float64,否则它就是一个整数类型
var answer float64 = 42
2、单精度浮点数类型
Go语言中有两个浮点数类型:
默认是双精度(64位的浮点类型,占8字节内存,某些编程语言把这种类型叫做double);单精度(float32占4字节内存,精度比float64低)
3、零值(Go里面每个类型都有一个默认值,它称作零值,当你声明变量却不对它进行初始化的时候,它的值就是零值)
var price float64
fmt.Println(price)
price := 0.0
4、显示浮点类型
使用Print或Println打印浮点类型的时候,默认的行为是尽可能的多显示几位小数,也可以像以下几种方式结合%f格式化动词来指定显示小数的位数:
third := 1.0 / 3
fmt.Println(third) //0.333333333333
fmt.Printf("%v\n",third) //0.333333333333
fmt.Printf("%f\n",third) //0.333333
fmt.Printf("%.3f\n",third) //0.333
fmt.Printf("%4.2f\n",third) //0.33
%f格式化动词由两部分组成:
(1)宽度:会显示出的最少字符个数(包含小数点和小数)
如果宽度大于数字的个数,那么左边会填充空格
如果没指定宽度,那么就按实际的位数进行显示
(2)精度:小数点后边显示的位数
如果想用0代替空格作为填充:
fmt.Printf("%05.2f\n",third)
浮点类型不适用于金融类计算,为了尽量最小化舍入错误,建议先做乘法再做除法
(3)浮点类型比较
piggyBank := 0.1
piggyBank += 0.2
fmt.Println(piggyBank == 0.3)
fmt.Println(math.Abs(piggyBank-0.3) < 0.0001) //Abs是取绝对值