一、Go 语言中的基本数据类型
Go 语言中的基本数据类型包含了三种,分别是 布尔类型
、数值类型
以及 字符串
类型三种,其中数值类型又分为 整数类型
、浮点数类型
、复数类型
。
二、Go 语言中的布尔类型
Go 中的布尔类型使用符号 bool
来表示,布尔值只有 true 和 false 两个值,占用 1 个字节。布尔类型常用流程控制语句以及函数返回值。
func main() { isOk := true isClosed := false fmt.Println("bool 类型数据所占的字节大小为:", unsafe.Sizeof(isOk)) fmt.Println("bool 类型数据所占的字节大小为:", unsafe.Sizeof(isClosed)) // 获取变量类型 fmt.Printf("isOk 变量的类型是:%T\n", isOk) fmt.Printf("isClosed 变量的类型是:%T\n", isClosed) } 复制代码
执行上述代码,输出结果如下:
bool 类型数据 true 所占的字节大小为: 1 bool 类型数据 false 所占的字节大小为: 1 isOk 变量的类型是:bool isClosed 变量的类型是:bool 复制代码
这里用到了 unsafe 包下的 Sizeof 函数,用于获取数据所占的字节大小。可以看出 true 和 false 都是占用了 1 个字节。
获取变量类型要使用格式化输出函数 fmt.Printf
,使用 %T
来表示输出变量的类型,其他常用的占位符还有 %v
格式化输出变量的值,fmt.Printf
函数不会自动换行。
Go 中的布尔类型是不能够与数字、字符串通过 bool、int、string 这种形式进行转换,但是可以通过 strconv 标准库的 ParseBool 函数 和 FormatBool 函数实现和字符串的互相转换。
三、Go 语言中的数值类型
整数类型
整数类型占用字节大小以及有无符号来划分可以分为以下几种:
- int8 有符号 8 位整型 (-128 到 127)
- int16 有符号 16 位整型 (-32768 到 32767)
- int32 有符号 32 位整型 (-2147483648 到 2147483647)
- int64 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)
- uint8 无符号 8 位整型 (0 到 255) 8位都用于表示数值:
- uint16 无符号 16 位整型 (0 到 65535)
- uint32 无符号 32 位整型 (0 到 4294967295)
- uint64 无符号 64 位整型 (0 到 18446744073709551615)
不同的整型所占字节大小
func main() { var a int8 = -10 var b int16 = -20 var c int32 = -30 var d int64 = -80 var e uint8 = 10 var f uint16 = 20 var g uint32 = 30 var h uint64 = 80 fmt.Println("int8 和 uint8 所占字节为:", unsafe.Sizeof(a), unsafe.Sizeof(e)) fmt.Println("int16 和 uint16 所占字节为:", unsafe.Sizeof(b), unsafe.Sizeof(f)) fmt.Println("int32 和 uint32 所占字节为:", unsafe.Sizeof(c), unsafe.Sizeof(g)) fmt.Println("int64 和 uint64 所占字节为:", unsafe.Sizeof(d), unsafe.Sizeof(h)) } 复制代码
执行上述代码,输出结果如下:
int8 和 uint8 所占字节为: 1 1 int16 和 uint16 所占字节为: 2 2 int32 和 uint32 所占字节为: 4 4 int64 和 uint64 所占字节为: 8 8 复制代码
int 与 unit 类型
除了上面提到的占用不同字节大小的整数值类型外,int
和 uint
也可以表示整数,它是一种动态类型,所占字节大小取决于操作系统的位数:
- 如果是32位操作系统,int类型的大小就是4字节
- 如果是64位操作系统,int类型的大小就是8个字节
func main() { var z int = 10 fmt.Printf("变量 z 的类型为:%T, 所占字节大小为:%v", z, unsafe.Sizeof(z)) } 复制代码
浮点数类型
Go 中浮点数按照字节大小划分可以分为 float32
和 float64
func main() { var y float32 = 1.0 var z float64 = 2.0 fmt.Println("float32 所占的字节大小为:", unsafe.Sizeof(y)) fmt.Println("float64 所占的字节大小为:", unsafe.Sizeof(z)) fmt.Println("float32 可表示的最大数为:", math.MaxFloat32) fmt.Println("float32 可表示的最大数为:", math.MaxFloat64) } 复制代码
执行上述代码,输出结果如下:
float32 所占的字节大小为: 4 float64 所占的字节大小为: 8 float32 可表示的最大数为: 3.4028234663852886e+38 float32 可表示的最大数为: 1.7976931348623157e+308 复制代码
复数类型
Go语言中复数的类型有两种,分别是 complex128(64 位实数和虚数)和 complex64(32 位实数和虚数),其中 complex128 为复数的默认类型。
复数的值由三部分组成 RE + IMi,其中 RE 是实数部分,IM 是虚数部分,RE 和 IM 均为 float 类型,而最后的 i 是虚数单位。
func main() { var x complex64 = complex(1, 2) var y complex64 = complex(3, 4) fmt.Println(x * y) fmt.Println(real(x * y)) fmt.Println(imag(x * y)) } 复制代码
执行上述代码,输出结果如下:
(-5+10i) -5 10 复制代码
real(z)
来获得该复数的实部,通过imag(z)
获得该复数的虚部。
数值类型的操作
Go 中数值相关的操作大部分都在 math 包下,包含了大量数值类型的计算操作。
常用的操作如下:
函数名![]() |
函数说明![]() |
Ceil 函数 | 向上取整 |
Floor 函数 | 向下取整 |
Trunc 函数 | 获取参数的整数部分,与 Floor 函数一样,向下取整 |
Abs 函数 | 获取参数的绝对值 |
Max 函数 | 获取两个参数中的最大值 |
Min 函数 | 获取两个参数中的最小值 |
Dim 函数 | 获取两个参数相减的值和 0 比较的最大值 |
Sqrt 函数 | 获取入参的平方根 |
Cbrt 函数 | 获取入参的立方根 |
Pow 函数 | 求幂计算,获取 x 的 y 次方的值 |
func main() { var a = 10.0 // 取绝对值 fmt.Println(math.Abs(a)) var b = 64.0 // 取平方根 fmt.Println(math.Sqrt(b)) var c = 3.0 // 幂次方,获取 a 的 c 次方值 fmt.Println(math.Pow(a, c)) var d = 27.0 // 开立方根 fmt.Println(math.Cbrt(d)) var e = 5.9 // 向上取整 fmt.Println(math.Ceil(e)) var f = 7.0 // 向下取整 fmt.Println(math.Floor(f)) // 比较大小 fmt.Println(math.Max(e, f)) fmt.Println(math.Min(e, f)) } 复制代码
执行上述代码,输出结果如下:
10 8 1000 3 6 7 7 5.9 复制代码
math 包下还有一个 rand 包,用户生成随机数。