跳到主要内容

4.数字

1. 整数类型

整数类型用于表示没有小数部分的数字,分为有符号和无符号两种。

1.1 有符号整数(Signed Integers)

可以表示正数、零和负数。有符号整数的范围包括负值和正值:

  • int8: 8 位,范围为 -128 到 127
  • int16: 16 位,范围为 -32,768 到 32,767
  • int32: 32 位,范围为 -2,147,483,648 到 2,147,483,647
  • int64: 64 位,范围为 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807

1.2 无符号整数(Unsigned Integers)

只表示非负数(正数和零):

  • uint8: 8 位,范围为 0 到 255
  • uint16: 16 位,范围为 0 到 65,535
  • uint32: 32 位,范围为 0 到 4,294,967,295
  • uint64: 64 位,范围为 0 到 18,446,744,073,709,551,615

1.3 平台相关整数

  • int: 根据操作系统决定大小,在 32 位系统上是 32 位,在 64 位系统上是 64 位。
  • uint: 根据操作系统决定大小,在 32 位系统上是 32 位,在 64 位系统上是 64 位。

1.4 指针整数类型

  • uintptr: 专用于存储指针值的无符号整数类型,其大小取决于操作系统。

2. 浮点数类型

浮点数类型用于表示带有小数部分的数字,常用于精确计算和科学计算。

  • float32: 32 位浮点数,约 6-7 位十进制精度
  • float64: 64 位浮点数,约 15 位十进制精度

注意float64 是 Go 语言中浮点数的默认类型,精度更高,建议在高精度要求的场景中使用。

3. 复数类型

复数类型用于表示具有实部和虚部的数。Go 语言原生支持复数操作。

  • complex64: 由两个 float32 组成的复数,表示范围有限
  • complex128: 由两个 float64 组成的复数,表示更高的精度

可以使用 complex(real, imag) 函数定义复数,例如:

var c complex128 = complex(5.0, 12.0)  // 表示 5 + 12i

4. 数字定义

4.1 定义数字类型

package main

import (
"fmt"
)

func main() {
// 整数定义
var i int = 100
var u uint = 200
var smallInt int8 = 120

// 浮点数定义
var f32 float32 = 3.14
var f64 float64 = 2.718281828

// 复数定义
var c64 complex64 = complex(1.5, 2.5)
var c128 complex128 = complex(3.14, 4.14)

fmt.Println("整数:", i, u, smallInt)
fmt.Println("浮点数:", f32, f64)
fmt.Println("复数:", c64, c128)
}

4.2 reflect.Type0f 查看数据类型

reflect.TypeOf 返回一个 reflect.Type 对象,可以进一步用于查看、判断、或操作变量的类型信息。

package main

import (
"fmt"
"reflect"
)

func main() {
var num int = 42
var name string = "Golang"
var pi float64 = 3.14
var flag bool = true

fmt.Println("num 的类型:", reflect.TypeOf(num))
fmt.Println("name 的类型:", reflect.TypeOf(name))
fmt.Println("pi 的类型:", reflect.TypeOf(pi))
fmt.Println("flag 的类型:", reflect.TypeOf(flag))
}

输出值

num 的类型: int
name 的类型: string
pi 的类型: float64
flag 的类型: bool

5. 布尔值

在 Go 语言中,布尔型变量只有两个值truefalse。这是布尔值的定义本质,代表逻辑上的真与假。

布尔值的类型在 Go 中用关键字 bool 表示,bool 类型并不会像其他一些语言那样将整数 01 作为布尔值使用,它严格限定了只有 truefalse 两个值,这是 Go 语言类型安全性和简洁性的体现。

查看布尔值的内存占用

unsafe.Sizeof() 用于查看布尔类型变量在内存中的占用大小。

Go 语言中,布尔值占用 1 个字节(8 位) 的存储空间。

package main

import (
"fmt"
"unsafe"
)

func main() {
var b = true
fmt.Println(b, "占用字节:", unsafe.Sizeof(b)) // 输出:true 占用字节:1
}

  • unsafe 包:Go 提供的 unsafe 包允许程序员执行一些非类型安全的操作,其中 unsafe.Sizeof() 用于返回变量所占用的字节数。
  • 在这个示例中,unsafe.Sizeof(b) 返回 1,表示布尔类型变量 b 占用 1 字节。