广州网站设计公司推荐哪家,建设银行网站 个人客户端,电商网站前台模块,手工大全字符串与字符编码 - GO语言从入门到实战
字符串
与其他主要编程语⾔的差异
基本数据类型#xff1a;string 是基础数据类型#xff0c;而不是引用类型或指针类型。string 在内存中占用的空间大小是固定的#xff0c;且只读、不可改变。字节切片#xff1a;string 是只读…字符串与字符编码 - GO语言从入门到实战
字符串
与其他主要编程语⾔的差异
基本数据类型string 是基础数据类型而不是引用类型或指针类型。string 在内存中占用的空间大小是固定的且只读、不可改变。字节切片string 是只读的 byte slice它存储了一组连续的字节。len 函数可以它所包含的 byte 数而不是字符数。存储数据string 是字节切片的实现因此可以存储任何类型的数据。因为字节byte是一个通用的数据类型可以表示各种不同的数据。
Unicode UTF8
Unicode 是⼀种字符集code point意味着无论在哪个平台、哪个程序或哪种编程语言中相同的 Unicode 字符代码点总是代表相同的字符。这使得 Unicode 在全球范围内进行文本交流和存储时非常有用。UTF-8 是一种变长编码的字符编码标准用于将 Unicode 字符编码为字节序列。UTF-8 是 Unicode 的存储和传输形式因为它能够以不同的字节长度来表示不同的字符。
编码与存储
字符 “中” 在 Unicode 和 UTF-8 中的表示方式
字符UnicodeUTF-8string/[]byte中0x4E2D0xE4B8AD[0xE4, 0xB8, 0xAD]
附上代码
package string_test import ( fmt testing
) func TestString(t *testing.T) { var s string fmt.Println(s) //initializes to default zero value s hello fmt.Println(len(s)) //s[1] 3 //string is an immutable byte slice //s \xE4\xB8\xA5 //can store any binary data s \xE4\xBA\xBB\xFF fmt.Println(s) fmt.Println(len(s)) s 中 fmt.Println(len(s)) //is byte count c : []rune(s) fmt.Println(len(c)) //t.Log(rune size:, unsafe.Sizeof(c[0])) fmt.Printf(中 unicode %x\n, c[0]) fmt.Printf(中 UTF8 %x\n, s)
} func TestStringToRune(t *testing.T) { s : 中华人民共和国 for _, c : range s { fmt.Printf(%c %x\n, c, c) }
}常⽤字符串函数
Go语言中处理字符串的重要包strings 和 strconv。 以下是一些这些包中比较常用的函数
strings 包
strings.Contains(s, substr): 检查字符串 s 是否包含子串 substr。如果包含返回 true否则返回 false。strings.Count(s, substr): 返回子串 substr 在字符串 s 中出现的次数。strings.Index(s, substr): 返回子串 substr 在字符串 s 中第一次出现的索引如果未找到则返回-1。strings.LastIndex(s, substr): 返回子串 substr 在字符串 s 中最后一次出现的索引如果未找到则返回-1。strings.Replace(s, old, new, n): 将字符串 s 中的所有 old 子串替换为 new 子串最多替换 n 次。strings.ToLower(s): 将字符串 s 中的所有字符转换为小写。strings.ToUpper(s): 将字符串 s 中的所有字符转换为大写。strings.Split(s, sep): 将字符串 s 根据分隔符 sep 分割为一个字符串切片。strings.TrimSpace(s): 去除字符串 s 两端的空白字符包括空格、制表符、换行符等。
strconv 包
strconv.Atoi(s): 将字符串 s 转换为对应的整数。如果转换失败返回错误。strconv.Itoa(n): 将整数 n 转换为对应的字符串。strconv.FormatFloat(f, fmt, prec, bitSize): 将浮点数 f 格式化为指定格式的字符串精度为 prec位数为 bitSize。strconv.ParseFloat(s, bitSize): 将字符串 s 解析为指定位数的浮点数。strconv.Unquote(s): 将字符串 s 解析为被引号包围的字符串例如 ‘“hello”’。如果解析失败返回错误。strconv.Quote(s): 将字符串 s 用双引号包围例如 ‘“hello”’。
以上只是这些包中函数的一部分这两个包都有更多功能用于处理各种字符串相关的问题。查阅Go的官方文档来了解更多详情。
下面提供一些函数的代码案例
strings.Split 和 strings.Join
package main import (stringsfmt
)func main() { s : A,B,C//使用 strings.Split 函数按照逗号分割这个字符串将分割后的各个部分存储在 parts 切片中parts : strings.Split(s, ,)for _, part : range parts {fmt.Println(part)}//使用 strings.Join 函数将 parts 中的元素用连字符连接起来fmt.Println(strings.Join(parts, -))s : strconv.Itoa(10)fmt.Println(str s)if i, err : strconv.Atoi(10); err nil {fmt.Println(10 i)}
}
strconv.Itoa 和 strconv.Atoi
package main import (strconvfmt
)func main() { //使用 strconv.Itoa 函数将整数10转换为对应的字符串。s : strconv.Itoa(10)fmt.Println(str s)//使用 strconv.Atoi 函数尝试将字符串 10 转换为一个整数。如果转换成功即没有错误发生那么就会打印出 10 i 的结果其中 i 是 10 转换后的整数。if i, err : strconv.Atoi(10); err nil {fmt.Println(10 i)}
}
学习Go语言主要是多练多找些代码段写写不懂可以私聊咨询。 码字不易如果该文章有用请多多关注或者赞赏谢谢
欢迎关注云尔Websites CSDN博客