• Go 语言内置类型全解析:从布尔到字符串的全维度探究


    一、布尔类型

    定义

    在 Go 语言中,布尔类型用关键字 bool 表示,它有两个预定义的常量值:true 和 false

    var myBool bool = true
    

    基础用法

    声明与初始化

    布尔变量可以在声明时初始化,也可以稍后进行赋值。

    1. // 声明并初始化
    2. var isReady bool = true
    3. // 声明后赋值
    4. var isEnabled bool
    5. isEnabled = false

    逻辑运算

    布尔类型主要用于逻辑运算:AND (&&), OR (||), 和 NOT (!)。

    1. // AND 操作
    2. result := true && false // 输出:false
    3. // OR 操作
    4. result = true || false // 输出:true
    5. // NOT 操作
    6. result = !true // 输出:false

    进阶用法

    条件语句

    布尔类型经常用于 ifelse if 和 else 结构中。

    1. if isReady {
    2. fmt.Println("System is ready.")
    3. } else {
    4. fmt.Println("System is not ready.")
    5. }

    循环结构

    布尔表达式也可用于控制循环结构如 for

    1. for isReady {
    2. // 执行代码
    3. }

    函数返回值

    布尔类型也经常用作函数的返回类型,以指示函数是否成功执行或验证。

    1. func isAuthenticated() bool {
    2. // 认证逻辑
    3. return true
    4. }

    常见错误与陷阱

    1. 零值:布尔类型的零值为 false,需注意未初始化的布尔变量默认为 false
    2. 类型转换:Go 语言不允许布尔类型与其他类型(如整数)进行隐式转换。

    二、整数类型

    定义

    在 Go 语言中,整数类型主要分为两大类:带符号(Signed)和无符号(Unsigned)的整数,同时还有一个特殊的整数类型 rune 和 byte

    • 带符号整数: int8int16int32int64int
    • 无符号整数: uint8uint16uint32uint64uint
    • 特殊整数: rune (等同于 int32), byte (等同于 uint8)

    基础用法

    声明与初始化

    1. // 声明并初始化带符号整数
    2. var a int8 = -128
    3. var b int32 = 2147483647
    4. // 声明并初始化无符号整数
    5. var c uint8 = 255
    6. var d uint32 = 4294967295

    运算符

    常用的整数运算符包括:加(+)、减(-)、乘(*)、除(/)和模(%)。

    1. // 整数运算
    2. x := 10
    3. y := 20
    4. result := x + y // 结果为 30

    位运算

    整数还支持位运算:AND (&), OR (|), XOR (^), 以及位左移 (<<) 和位右移 (>>)。

    1. // 位运算
    2. var m uint8 = 1 << 3 // 结果为 8

    进阶用法

    数据溢出

    需要注意的是,整数类型有范围限制,超过范围会导致数据溢出。

    1. var maxInt8 int8 = 127
    2. maxInt8 = maxInt8 + 1 // 溢出,结果为 -128

    类型转换

    在不同类型之间转换时,需显示使用类型转换。

    1. var integer16 int16 = 32767
    2. var integer32 int32
    3. integer32 = int32(integer16) // 类型转换

    类型推断

    在使用 := 进行变量声明和初始化时,Go 语言会自动推断类型。

    autoInt := 42  // 类型推断为 int
    

    特殊整数类型

    rune

    rune 类型常用于表示一个 Unicode 字符。

    var character rune = 'A'
    

    byte

    byte 类型通常用于处理 ASCII 字符或者二进制数据。

    var b byte = 'a'
    

    常见问题和陷阱

    1. 类型不匹配:不同整数类型之间不能直接进行运算。
    2. 数据溢出:进行算术运算时需注意数据溢出问题。

    三、浮点数类型

    定义

    在 Go 语言中,浮点数类型主要有两种:

    • float32: 32 位浮点数,精度约为 7 位小数。
    • float64: 64 位浮点数,精度约为 15 位小数。

    基础用法

    声明与初始化

    1. // 声明并初始化 float32 和 float64
    2. var a float32 = 3.14
    3. var b float64 = 3.141592653589793

    常用运算

    常用的运算符包括:加(+)、减(-)、乘(*)、除(/)。

    1. x := 1.1
    2. y := 2.2
    3. result := x + y // 结果为 3.3

    进阶用法

    精度问题

    由于计算机内部表示浮点数的限制,会有精度问题。

    1. // 精度问题
    2. var c float32 = 0.1
    3. var d float32 = 0.2
    4. var e float32 = 0.3
    5. if c+d == e {
    6. fmt.Println("Equal")
    7. } else {
    8. fmt.Println("Not Equal") // 输出 "Not Equal"
    9. }

    数学函数

    Go 语言的 math 包提供了丰富的数学函数。

    1. import "math"
    2. // 开方
    3. result := math.Sqrt(16.0) // 结果为 4.0

    类型转换与推断

    1. // 类型转换
    2. var f float32 = 1.1
    3. var g float64
    4. g = float64(f) // 类型转换
    5. // 类型推断
    6. autoFloat := 3.14 // Go 语言会自动推断为 float64 类型

    特殊情况

    表示无穷大和 NaN

    1. // 无穷大
    2. var inf float64 = math.Inf(1)
    3. // NaN (Not a Number)
    4. var nan float64 = math.NaN()

    与整数的转换

    注意:转换时可能会有精度损失。

    1. var h float64 = 3.9
    2. var i int = int(h) // 结果为 3

    常见问题和陷阱

    1. 精度问题:进行浮点数运算时,需要注意精度问题。
    2. 类型转换:在整数和浮点数之间转换时,要注意精度损失。

    四、字符串类型

    定义

    在 Go 语言中,字符串类型被定义为一串不可变的字节序列,通常用于存储文本数据。

    1. // 声明一个字符串类型的变量
    2. var str string

    基础用法

    声明和初始化

    1. // 声明并初始化一个字符串
    2. var hello string = "Hello, world!"

    或者使用短变量声明:

    hello := "Hello, world!"
    

    常用操作

    字符串拼接:

    1. str1 := "Hello"
    2. str2 := "World"
    3. result := str1 + ", " + str2 // 结果:"Hello, World"

    获取字符串长度:

    length := len("Hello, World!")  // 结果:13
    

    进阶用法

    字符串与字节切片

    在 Go 中,可以方便地在字符串和字节切片之间进行转换。

    1. // 字符串转字节切片
    2. byteSlice := []byte("Hello")
    3. // 字节切片转字符串
    4. str := string(byteSlice)

    字符串截取

    1. // 截取字符串中的部分字符
    2. subStr := "Hello, World!"[7:12] // 结果:"World"

    字符串遍历

    1. // 遍历字符串中的每一个字符
    2. for i, r := range "Hello" {
    3. fmt.Printf("%d: %c\n", i, r)
    4. }

    输出:

    1. 0: H
    2. 1: e
    3. 2: l
    4. 3: l
    5. 4: o

    特殊用法

    多行字符串

    使用反引号( ` )可以声明一个多行字符串。

    1. multiLineStr := `This is
    2. a multi-line
    3. string.`

    转义字符

    Go 字符串支持多种转义字符,如 \n(换行)、\t(制表符)等。

    1. // 使用转义字符
    2. escapedStr := "This is a line.\nThis is another line."

    常见问题和陷阱

    1. 不可变性:Go 字符串是不可变的,任何尝试改变字符串内容的操作都会创建一个新的字符串。
    2. Unicode 和 UTF-8:Go 字符串默认使用 UTF-8 编码,这意味着一个字符串可能包含多种不同长度的字符。

    五、其他特性

    在前几章节中,我们详细地探究了 Go 语言的各种内置类型:从布尔型到整数、浮点数和字符串。这些基础类型构成了 Go 语言的基础结构,对于编写高性能和可维护代码非常重要。

    类型系统的简洁与高效

    Go 语言的类型系统相对简单,但并不意味着它不强大或灵活。恰恰相反,Go 语言提供了一套非常高效和易于理解的类型机制。

    1. var isActive bool // 布尔类型
    2. var price int32 // 整数类型
    3. var pi float32 // 浮点数类型
    4. var name string // 字符串类型

    为什么不可变性很重要

    在 Go 中,字符串是不可变的,这有助于多线程编程。不可变性确保了在并发访问时,数据状态始终是可预测的。

    1. // 字符串不可变性示例
    2. str := "immutable"
    3. // str[0] = 'I' // 编译错误

    性能与优化

    Go 提供了大量内建函数和标准库,以优化各种类型的操作。

    1. import "math"
    2. // 浮点数优化
    3. result := math.Floor(3.75) // 输出:3.0

    其他

    1. 类型别名与自定义类型: Go 允许你创建类型别名和自定义类型,这对于编写领域特定代码非常有用。
    2. 严格类型检查: Go 的编译器会进行严格的类型检查,这大大减少了运行时错误。
    3. 减少转换: Go 的类型推断和接口机制,减少了不必要的类型转换。
  • 相关阅读:
    t-SNE——高维特征可视化分析
    【论文解读】Modular Blind Video Quality Assessment
    电子统计台账:锁定某月台账数据,防止数据丢失
    NLP:如何计算两个句子的相似度
    pytorch直线拟合
    Redis事务
    批量寄件教程
    (附源码)Springboot美食教程小程序的设计与实现 毕业设计190900
    计算机毕业设计Java优乐帮育儿系统(系统+程序+mysql数据库+Lw文档)
    神经网络(三)分类器与线性模型
  • 原文地址:https://blog.csdn.net/weixin_45925028/article/details/133985431