零基础 go - 46(string 和 slice)

0 阅读1分钟
  • string 底层是一个 byte数组,因此 string也可以进行切片处理
package main

import "fmt"

func main() {

    str1 := 'hello'

    slice := str1[1:4] // 结果是 'ell',类型是 string

    fmt.Println(slice) // 输出: ell

    fmt.Printf("%T\n", slice) // 输出: string

}

  • string 和切片在内存的形式

image.png

  • string是不可变的,不能通过 str[0] = 'H' 来修改字符串中的字符

  • 如果需要修改 string 中的内容,可以将string转为 []byte 或 []rune 进行修改,然后再转回 string

  • []byte 只能处理 ASCII 字符,对于 Unicode 字符可能会出现问题,因为一个 Unicode 字符可能占用多个 byte

  • []rune 可以正确处理 Unicode 字符,因为它是以 Unicode 码点为单位的切片

  • 如果字符串有中文,需要修改内容,可以转为 []rune 来处理。如果只有英文和数字,可以使用 []byte 来处理


package main

import "fmt"

func main() {

    // 只有英文和数字的字符串,可以使用 []byte 来处理

    str1 := 'hello'

    byteSlice := []byte(str1) // 转为 byte 切片

    byteSlice[0] = 'H' // 修改切片内容

    str2 := string(byteSlice) // 转回 string

    fmt.Println(str2) // 输出: Hello




    // 有中文需要使用[]rune处理

    str3 := '你好,世界'

    runeSlice := []rune(str3) // 转为 rune 切片

    runeSlice[0] = '您' // 修改切片内容

    str4 := string(runeSlice) // 转回 string

    fmt.Println(str4) // 输出: 您好,世界

}