• Go 字符串 (string)


    字符串类型为 string,使用双引号或者反引号包起来

    字符串形式

    反引号

    当使用反引号时不会对字符串进行转义,并可以包含多行文本

    示例:

    package main
    
    import "fmt"
    
    func main() {
    	a := `
    hello
    world
    !
    	`
    	b := `hello 
     world`
    	fmt.Println(a)
    	fmt.Println(b)
    }
    
    

    输出结果:

    
    hello
    world
    !
            
    hello 
     world
    
    

    双引号

    当使用双引号时,只能通过 进行换行
    示例:

    package main
    
    import "fmt"
    
    func main() {
    	a := "hello 
     world"
    	fmt.Println(a)
    }
    
    

    输出结果:

    hello 
     world
    
    

    切片

    一个字节

    如果直接使用索引进行取值,会取到一个字节
    示例:

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	a := "abc"
    	for i := 0; i < len(a); i++ {
    		fmt.Printf("%v, %T
    ", a[i], a[i])
    	}
    }
    

    输出结果:

    97, uint8
    98, uint8
    99, uint8
    

    多个字节

    如果通过切片取出来的还是字符串,即使只取了一个字节也是一个字节的字符串
    示例:

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	a := "abc"
    	for i := 0; i < len(a); i++ {
    		fmt.Printf("%v, %T
    ", a[i: i+1], a[i: i+1])
    	}
    }
    

    输出结果:

    a, string
    b, string
    c, string
    

    不可修改

    Go 中字符串类型是不能修改的,多个字符串低层都可以共用一段内存,这使得复制字符串、生成子串的成本都非常低

    修改

    有两种方式可以改变字符串值:

    1. 重新赋值

    新开辟一段内存存放新的字符串

    func main() {
    	a := "hello world"
    	fmt.Println(a)
    	a := "Hello world"
    	fmt.Println(a)
    }
    

    2. 先转换为切片,修改之后再改回来

    注意:如果要修改像中文字符之类超过 3 个字节的字符,需要转换为 rune 而不是 byte
    关于 rune 和 byte <- 点击查看
    示例:

    func main() {
    	a := "hello world"
    	b := []rune(a)
    	b[0] = 'H'
    	a = string(b)
    	fmt.Printf("%v", a)
    }
    

    遍历

    由于 len(string) 获得的是字符串的字节数,所以直接通过长度遍历遍历的是字节数,超过 1 字节的字符无法正常遍历
    示例:

    func main() {
    	a := "你好 world"
    	for i := 0; i < len(a); i ++ {
    		fmt.Printf("%c - %T
    ",a[i],  a[i])
    	}
    }
    

    遍历的是每个字节

    for range

    通过 for range 遍历可以正常地显示每个字符
    示例:

    func typeString() {
    	for _, v := range a {
    		a := "你好 world"
    		fmt.Printf("%c - %T
    ",v,  v)
    	}
    }
    

    遍历的是每个字符

  • 相关阅读:
    python——remove,del,pop三种删除元素方式的区别
    python——random.sample()的用法
    python的unittest框架中的assert断言
    python-unittest环境下单独运行一个用例的方法
    极简教程:数据结构与算法(一)
    总结:js世界中的特殊符号
    免费 https 申请步骤,你必须知道
    Uri编码,包括javascript前端与C#服务器端
    IIS中发布后出现Could not load file or assembly'System.Data.SQLite.dll' or one of its depedencies
    C# 程序关闭和进程关闭
  • 原文地址:https://www.cnblogs.com/dbf-/p/12074898.html
Copyright © 2020-2023  润新知