1、字符串(string)

1.1 什么是string

Go 中的字符串是一个字节的切片。可以通过将其内容封装在“”中来创建字符串。Go 中的字符串是 Unicode 兼容的,并且是 UTF-8 编码的。

示例代码:

package main

import (  
    "fmt"
)

func main() {  
    name := "Hello World"
    fmt.Println(name)
}

1.2 string的使用

1.2.1 访问字符串中的单个字节

package main

import (  
    "fmt"
)

func main() {  
    name := "Hello World"
    for i:= 0; i < len(s); i++ {
        fmt.Printf("%d ", s[i])
    }
    fmt.Printf("\n")
    for i:= 0; i < len(s); i++ {
        fmt.Printf("%c ",s[i])
    }
}

运行结果:

  72 101 108 108 111 32 87 111 114 108 100 
  H e l l o   W o r l d 

2、练习及总结

2.1 Go 中的字符串是一个字节的切片

package main

import "fmt"

func main() {
    /**
    1. Go 中的字符串是一个字节的切片,可以通过将其内容封装在 “” 中来创建字符串,Go 中的字符串是 Unicode 兼容的,并且是 UTF-8 编码的
    2. 字符串是一些字节的集合,理解为一个字符的序列,每个字符都是有固定的位置(索引,下标,index从0开始,到长度减1)
    3,语法: "" ``
            "雨林之后技术站" "yulinzhihou.com"
            `雨林之后技术站` `yulinzhihou.com`
    4、字符:对应编码表中的编码值
        A -- 65
        B -- 66
        C -- 67
        ……
        a -- 97
    5、字节:byte -- uint8
            utf8
    */

    // 定义字符串
    s1 := "雨林之后技术站"
    fmt.Println("s1 = " + s1)
    s2 := `yulinzhihou.com`
    fmt.Println("s2 = " + s2)

    // 2 定义字符串长度,返回的是字节的个数
    fmt.Printf("len(s1) = %d\n", len(s1))
    fmt.Printf("len(s2) = %d\n", len(s2))

    // 3.获取某个字符
    fmt.Printf("s1[4] : %v\n", s1[0])
    fmt.Printf("s2[3] : %v\n", s2[3])
    s3 := 'h'
    s4 := 104
    fmt.Printf("%c,%c,%c\n", s1[0], s3, s4) // 获取的是对应字符串的ascii值

    // 字符串遍历
    for index := 0; index < len(s1); index++ {
        fmt.Printf("s1[%d] = %c\n", index, s1[index])
    }
    fmt.Println()

    // for range 遍历
    for key, value := range s1 {
        fmt.Printf("s1[%d] ==  %c\n", key, value)
    }
    fmt.Println()
    // 发现:for i 的这种遍历是直接遍历下标,不能正常打印中文,但 for range 的遍历 ,能正常遍历出中文,如果没有中文,则两者没有区别

    // 字符串是字节的集合
    slice1 := []byte{65, 66, 67, 68, 69}
    slice2 := string(slice1) // 根据一个字节切片,构建字符串
    fmt.Println(slice2)

    s5 := "yulinzhihou"
    slice3 := []byte(s5)
    fmt.Println(slice3)

    // 字符串不能通过slice下标进行修改
    //s5[1] = "b"
    //fmt.Println(s5)

}


2.2 strings 包下的关于字符串的函数

package main

import (
    "fmt"
    "strings"
)

func main() {
    /*
        strings 包下的关于字符串的函数
    */

    string01 := "helloworld"
    // 1,是否包含指定的内容
    fmt.Println(strings.Contains(string01, "hello"))
    // 2。是否包含chars中的任意字符即可
    fmt.Println(strings.ContainsAny(string01, "chars"))
    // 3.统计 substr 在 s 中出现的次数
    fmt.Println(strings.Count(string01, "h"))
    // 4,替换字符,不会修改原字符串
    fmt.Println(strings.Replace(string01, "o", "a", -1))
    fmt.Println(string01)
    // 5.取字符所在位置
    fmt.Println(strings.Index(string01, "o"))
    // 6、截取字符串
    fmt.Println(strings.Cut(string01, "w"))
    // 7.拆散字符串
    fmt.Println(strings.Split(string01, ""))
    // 8,字符串转大写
    fmt.Println(strings.ToUpper(string01))

    // 以 XXX 前缀开头的,以 xxx 后缀结尾的
    string02 := "20250408GO学习笔记.txt"
    if strings.HasPrefix(string02, "20250408") {
        fmt.Println("20250408GO学习笔记")
    }

    if strings.HasSuffix(string02, "txt") {
        fmt.Println("文本文件")
    }

    // 切片转成字符串
    slice01 := []string{"hello", "world", "test", "go"}
    fmt.Println(strings.Join(slice01, "---"))

    // 重复字符串并且拼接
    string03 := strings.Repeat("yulinzhihou.com", 10)
    fmt.Println(string03)

    // 截取字符串
    // substring(start,end) -- substr
    // str[start:end] -- substr
    string04 := string01[:5]
    fmt.Println(string04)
    string05 := string01[5:]
    fmt.Println(string05)
    string06 := string01[2:5]
    fmt.Println(string06)

}


2.3 strconv 包:字符串和基本类型之前的转换

package main

import (
    "fmt"
    "strconv"
)

func main() {
    /*
        strconv包: 字符串和基本类型之间的转换
        string convert
    */
    // 1. bool 类型
    string01 := "true"
    bool1, err := strconv.ParseBool(string01)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("bool1 类型:%T\nbool1 的值为:%t\n", bool1, bool1)
    fmt.Println()

    // bool 类型转 string
    ss1 := strconv.FormatBool(bool1)
    fmt.Printf("ss1 的类型:%T\nss1 的值为:%s\n", ss1, ss1)

    // 整数
    string02 := "88888"
    int1, err := strconv.ParseInt(string02, 10, 64)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("int1 的类型为:%T\nint1 的值为 %d\n", int1, int1)

    //
    ss2 := strconv.FormatInt(int1, 10)
    fmt.Printf("ss2 的类型为%T\nss2 的值为:%s\n", ss2, ss2)

    // itoa() atoi()
    i3, err := strconv.Atoi("-888")
    fmt.Printf("i3 的类型为 %T\ni3 的值为%d\n", i3, i3)
    ss3 := strconv.Itoa(i3)
    fmt.Printf("ss3 的类型为 %T\nss3 的值为%s\n", ss3, ss3)
}

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。