go基础_unit2_类型
Unit2-类型
1、实数
在Go语言中,所有带小数的数字在默认情况下都会被设置为
float64
类型但如果使用整数去初始化一个变量,那么Go语言只有在显式地指定浮点类型时,才会将其声明为浮点类型变量
例如:
var a float64 = 10
Go语言有两种浮点类型,默认
float64
又称双精度浮点数
,每64位的浮点数需要占用8字节内存;另一种是
float32
又称单精度浮点数
,占用4字节,32位,在使用时需要声明:var a float32 = 1.121
零值:声明一个变量但没有赋值时,该变量会被初始化为零值
格式化打印浮点数:
printf
使用格式化变量%f
来指定显示小数点后几位:%.3f
(显示小数点后保留3位)
为了尽量最小化舍入错误,在浮点类型数值计算时,建议先做乘法,再做除法
2、整数
整数类型包括有符号和无符号两种:
- 有符号:能表示正数、0、负数。典型的
有符号整数
为int
类型 - 无符号:能表示正数、0。典型的
无符号整数
为uint
类型
在
Printf
里使用%T
可以打印数据的类型。
2.1、 Uint8
- Uint8可以用来表示8位的颜色(红绿蓝:0~255)
在
Printf
里使用%x
或%X
在打印十六进制
数字时,可以格式化变量。在
Printf
里使用%b
在打印二进制
数字时,可以格式化变量。
2.2、整数环绕
所有整数类型都有一个取值范围,超出这个范围就会发生“环绕”:
3、多语言文本
3.1、声明字符串变量
Go语言会把双引号包围的字面值推断为string
类型,一下三条语句的作用相同:
1 | a := "hi" |
使用反引号( ` )包围文本的字符串称为原始字符串字面量,比如可以把转义字符本身进行输出
1
2fmt.Println("abc \n def") // 输出时abc与def中间会换行
fmt.Println(`abc \n def`) // 输出:abc \n def 打印转义符 \n 本身使用反引号可以进行跨多个文本行
1
2
3fmt.Println(`abc
def
ghf`)
3.2、字符、代码点、符文和字节
代码点:Code point;例如:65代表
A
,128515代表笑脸。为了表示这样的代码点,Go语言提供了rune
这个类型,它是int32的一个类别名byte
是uint8类型的别名,目的是用于二进制数据,byte可以表示由ASCII定义的英语字符类别别名:就是同一个类型的另一个名字,语法如下
1
2type byte = uint8
type rune = int32
如果想打印字符而不是数值,则使用
%c
来格式化
字符字面值使用 ‘ ‘括起来,例如:’A’,如果没有指定字符类型,Go会推断它的类型为rune
小写字符与大写字符转换:
1
2c := 'd'
c = c - 'a'+'A' //输出 'D'Go中的字符串是用UTF-8编码的,
len
内置函数时以字节为单位返回字符串长度,而UTF-8中提供了一个函数RuneCountInString
可以用符文为单位来返回字符串长度。
4、类型转换
4.1、类型不能混着用
- 连接两个字符串,使用
+
运算符:a := "abc" + "def"
- 如果连接字符串和数值,则会报错:
a := "abc" + 10 + "def"
- 整型和浮点类型也不能混着用
4.2、数值类型之间的转换
整数转换成浮点类型:
1
2age := 40
marsAge := float64(64)浮点类型转换成整数,小数点后面的部分会被截断,而不是舍入
有符号整数和无符号整数之间以及各种不同长度的类型之间都需要进行类型转换,例如:int8转换成int32
4.3、字符串转换
想把rune、byte转换为string,语法是:
1
2
3var pi rune = 960
var bang byte = 33
fmt.Print(string(pi),string(bang))如果想把数值转化成string,首先它的值必须能转化为code point;然后使用
strconv
包的Itoa
函数可以完成转换。Itoa
是Integer to ASCII的意思1
str := "str" + strconv.Itoa(10) + "abc" //输出 str10abc
另一种数值转换string的方式是使用
Sprintf
函数1
2
3countdown := 9
strs := fmt.Sprintf("abd is %v def", countdown)
fmt.Println(strs) //输出 abd is 9 def若想把字符串转换成数值,可以使用
strconv
中的Atoi
函数Go是静态类语言,一旦某个变量被声明,那么它的类型就无法再改变
strings
包中strings.Replace
函数可以移除消息中的空格;strings.ToUpper
函数可以将字母转换为大写字母
单元测试:写一个维吉尼亚解密程序,解密下面的加密文字
加密文本:cipherText := “CSOITEUIWUIZNSROCNKFD”
加密关键字:keyword := “GOLANG”
1 | // 程序 |