一、整数类型基本使用
简单的说,整数类型就是用于存放整数值的。在go语言中,整数类型分为有符号数和无符号数(和C语言类似),表示有符号数和无符号数的方式也和C语言类似,例如使用u前缀表示无符号数。
与C语言不同的是,go语言采用了更为简单明了的表示方法,将整数占用的最大的位的长度直接反映在类型之中,例如int16标识使用的十六位存储的有符号数等。
| 类型 | 有无符号数 | 占用存储空间 | 可表示的数的范围 |
| int8 | 有 | 一个字节 | -2^7~2^7-1 |
| int16 | 有 | 两个字节 | -2^15~2^15-1 |
| int32 | 有 | 四个字节 | -2^31~2^31-1 |
| int64 | 有 | 八个字节 | -2^63~2^63-1 |
| uint8 | 无 | 一个字节 | 0~2^8-1 |
| unit16 | 无 | 两个字节 | 0~2^16-1 |
| unit32 | 无 | 四个字节 | 0~2^32-1 |
| uint64 | 无 | 八个字节 | 0~2^64-1 |
| int | 有 |
跟操作系统相关 32位占用四个字节 64位占用八个字节 |
-2^31~2^31-1 -2^63~2^63-1 |
| uint | 无 |
跟操作系统相关 32位占用四个字节 64位占用八个字节 |
0~2^32-1 0~2^64-1 |
| rune | 有 |
与int32等价 表示一个Unicode码 | -2^31~2^31-1 |
| byte | 无 |
与uint8等价 当要存储字符时选用byte | 0~2^8-1 |
下面是对上述的一个简单的使用
package main
import "fmt"
func main() {
// 测试一下int8的范围
// 其他的int64 int32 int16类似
var i int8 = 127
// 如果使用如下的方式 那么会提示下面的错误码
// constant 128 overflows int8
// var i int8 = 128
fmt.Println("i = ", i)
// 测试一下uint8的范围
// 其他的uint16 uint32 uint64类似
var j uint8 = 255
// 同样的 如果使用溢出 在运行时也会提示溢出
// 如果使用如下的方式 那么会提示下面的错误码
// constant 256 overflows uint8
// var j uint8 = 256
fmt.Println("j = ", j)
}
二、整型的使用细节
① go语言的整型默认声明为int型
② 可以使用fmt.Printf() 函数以及 %T 配合打印数据的类型以及使用unsafe包下的Sizeof函数打印数据占用的字节的大小
③ go程序中建议在使用整型变量的时候,遵守“保小不保大”的方式使用整数的数据类型,即在保证正确的情况下,尽量使用占用空间小的数据类型。
package main
// import "fmt"
// import "unsafe"
// 在真正的使用中 推荐使用如下的导包的方式
import (
"fmt"
"unsafe"
)
func main() {
// 整型的使用细节
// n1是什么数据类型?j
var n1 = 100
// 使用如下的方式可以查看变量的使用类型
fmt.Printf("n1' type is %T \n", n1)
// 使用如下的方式可以查询变量占用的字节数
var n2 int64 = 64
fmt.Printf("n2' type is %T and n2's size is %d", n2, unsafe.Sizeof(n2))
}
三、浮点类型的使用
浮点数类型是用来存放小数类型的数据,例如1.2,3.14等。同C语言,浮点数也有单精度浮点数与双精度浮点数,不过,go语言采用的命名的类型的方式与整数有相类似的地方,例如使用占用的位数的大小来分别的表示单精度(float32)和双精度(float64)。
简单对浮点数进行说明:
① 浮点数在内存中的存储的方式是 符号为+指数位+尾数位
float32:1位符号位+8位指数位+23位尾数
float64:1位符号位+11位指数位+52位尾数
② 在进行小数存储时,会发生尾数无法完整放入表示的数时,会导致精度的丢失
四、浮点型的使用细节
① 浮点数时固定的长度和固定的范围,不受操作系统的影响
② 与C语言类似,go语言的默认的浮点数类型默认是float64
③ 在使用时,通常情况下建议使用float64,可以拥有更大的精度
package main
import (
"fmt"
)
func main() {
var price float32 = 3.14
fmt.Println("price = ", price)
// go语言浮点数默认的类型是float64
var num = 4.57
fmt.Printf("num's type is %T", num)
}
五、字符类型基本介绍
与C语言不同,go语言中没有专门保存单个字符的字符类型(C语言中采用char进行表示),所以go语言中使用byte进行字符的保存。在go语言中,字符串表示一串固定的字符连接起来的字符序列,go语言的字符串是由单个的字节连接起来的;与传统的字符串的组成方式不同,go语言中的字符串是由字节构成的,在传统语言中使用的是字符构成的字符串。
六、字符类型使用细节
① 字符常量是使用的单引号('')括起来的字符,例如'a','中'
② 在go语言中使用的Unicode编码集进行的编码(使用的是utf-8的编码)
③ go语言中允许使用转义字符'\'将普通的字符转义为特殊的字符,例如'\n'表示换行符
④ 在go语言中,字符本身是一个整数,当直接使用时,使用的是码值;如果要打印该字符,那么应该使用格式化输出fmt.Printf()配合%c进行字符的输出
⑤ 字符类型是一个整数,可以进行整数类型可以参与的运算,在参与运算时,使用的是字符的Unicode的码值进行的运算
package main
import (
"fmt"
)
func main() {
var c1 byte = 'a'
var c2 byte = '0'
// 如下直接使用byte的值 会直接将字符的ascii对应的码值进行输出
fmt.Println("c1 = ", c1, ", c2 = ", c2)
// 使用格式化输出的方式才可以正确的打印字符
fmt.Printf("c1 = %c, c2 = %c\n", c1, c2)
// 如果被表示的字符超出了byte的上限 会发生溢出
// constant 19978 overflows byte
// var c3 byte = '上'
// 要想完整的表达这个数 那么就需要使用可以存储该字符的数据类型
var c3 int = '上'
fmt.Printf("c3 = %c\n", c3)
var c4 int = 0x56FD;
fmt.Printf("c4 = %c\n", c4)
// 字符类型可以自己参与运算 在参与运算时使用的是自身的Unicode对应的码值
var c5 byte = 'A'
c5 = c5 + 32
fmt.Printf("c5 = %c\n", c5)
}

586

被折叠的 条评论
为什么被折叠?



