Go语言快速入门3|青训营

62 阅读2分钟

一、变量声明和作用域

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)精度:小数点后边显示的位数

3.jpg

如果想用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是取绝对值