字符串

多行字符串

Go语言中要定义一个多行字符串时,就必须使用反引号字符:

lineString := `第一行
第二行
第三行`
fmt.Println(lineString)

字符串常用操作

方法 描述
len() 获取字符串长度
+fmt.Sprintf() 字符串拼接
切片 使用切片获取字符串的部分内容
==strings.EqualFold() 字符串比较(大小写敏感或忽略大小写)
strings.Contains() 判断字符串是否包含子串
strings.Index() 查找子串在字符串中的索引位置
strings.Replace() 替换字符串中的子串
strings.Split() 分割字符串
strconv.Atoi() 将字符串转换为整数
strconv.Itoa() 将整数转换为字符串
strings.Trim() 删除字符串首尾空白字符
strings.ToLower() 将字符串转换为小写
strings.ToUpper() 将字符串转换为大写

byte 和 rune 类型

组成每个字符串的元素叫做“字符”,可以通过遍历或者单个获取字符串元素获得字符。 字符用单引号 ' 包裹起来,如:

package main

import "fmt"

func main() {
    var a = 'a'
    var b = '我'
    fmt.Println(a, b) // 97 25105

}

byte 类型代表了 ASCII 码的一个字符,rune 类型,代表一个 UTF-8 字符。

当需要处理中文、日文或者其他复合字符时,则需要用到 rune 类型。rune 类型实际是一个int32。

Go 使用了特殊的 rune 类型来处理 Unicode,让基于 Unicode 的文本处理更为方便,也可以使用 byte 类型进行默认字符串处理,性能和扩展性都有照顾。

// 遍历字符串
func traversalString() {
    s := "abc.xyz调试"
    for i := 0; i < len(s); i++ { // byte
        fmt.Printf("%v(%c) ", s[i], s[i])
    }
    fmt.Println()
    for _, r := range s { // rune
        fmt.Printf("%v(%c) ", r, r)
    }
    fmt.Println()
}

输出结果:

97(a) 98(b) 99(c) 46(.) 120(x) 121(y) 122(z) 232(è) 176(°) 131() 232(è) 175(¯) 149() 
97(a) 98(b) 99(c) 46(.) 120(x) 121(y) 122(z) 35843() 35797()

也就是说在处理字符串的长度和遍历字符串的字符的时候需要注意,你到底是在处理 byte 类型还是在处理rune 类型。

基本类型总结

Go 语言具有丰富的基本数据类型,以下是 Go 的基本类型:

  1. 整数类型(int):

    • int 表示有符号整数,其大小取决于运行环境。在 32 位系统上是 32 位,在 64 位系统上是 64 位。
    • int8, int16, int32, int64 表示有符号整数的不同位数。
    • uint 表示无符号整数,同样其大小取决于运行环境。
    • uint8, uint16, uint32, uint64 表示无符号整数的不同位数。
  2. 浮点数类型(float):

    • float32float64 表示浮点数,分别占用 32 位和 64 位存储空间。
  3. 复数类型(complex):

    • complex64complex128 表示复数,分别使用 64 位和 128 位来存储实部和虚部。
  4. 布尔类型(bool):

    • bool 表示布尔值,只能是 truefalse
  5. 字符串类型(string):

    • string 表示字符串,是不可变的字节序列。
  6. 字节类型(byte):

    • byteuint8 的别名,常用于处理字节数据。
  7. 符文类型(rune):

    • runeint32 的别名,用于表示 Unicode 字符。
  8. 指针类型(pointer):

    • 指针类型用于存储变量的内存地址。例如,*int 表示指向整数的指针。
  9. 数组类型(array):

    • 数组是具有固定大小的数据结构,元素的类型和大小都是预定义的。
  10. 切片类型(slice):

    • 切片是对数组的一层封装,可以动态增长和缩小,更灵活。
  11. 映射类型(map):

    • 映射用于存储键值对,类似于其他语言中的哈希表或字典。
  12. 通道类型(channel):

    • 通道用于在 Go 协程之间进行通信,是一种并发安全的数据传输方式。
  13. 结构体类型(struct):

    • 结构体是一种用户定义的数据类型,用于封装不同类型的数据。
  14. 接口类型(interface):

    • 接口定义了一组方法的集合,用于实现多态性。

这些基本类型组成了 Go 语言的基础,支持强大的类型系统和灵活的编程。通过组合这些类型,可以构建复杂的数据结构和实现各种算法。