- 在 map[string] 中查找 key 时 , 使用了对应的 []byte , 避免做 m[string(key)] 的内存分配
- 使用 for range 迭代 string 转换为 []byte 的迭代:for i,v := range []byte(str) {...}
func main() {x := "ascii"fmt.Println(x[0])// 97fmt.Printf("%T\n", x[0])// uint8}
如果需要使用 for range 迭代访问字符串中的字符(unicode code point / rune) , 标准库中有 "unicode/utf8" 包来做 UTF8 的相关解码编码 。另外 utf8string 也有像 func (s *String) At(i int) rune 等很方便的库函数 。19.字符串并不都是 UTF8 文本string 的值不必是 UTF8 文本 , 可以包含任意的值 。只有字符串是文字字面值时才是 UTF8 文本 , 字串可以通过转义来包含其他数据 。
判断字符串是否是 UTF8 文本 , 可使用 "unicode/utf8" 包中的 ValidString() 函数:
func main() {str1 := "ABC"fmt.Println(utf8.ValidString(str1))// truestr2 := "A\xfeC"fmt.Println(utf8.ValidString(str2))// falsestr3 := "A\\xfeC"fmt.Println(utf8.ValidString(str3))// true// 把转义字符转义成字面值}
20.字符串的长度在 Python 中:data = https://www.huyubaike.com/biancheng/u''print(len(data)) # 1
【Golang可能会踩的58个坑之初级篇】然而在 Go 中:func main() {char := ""fmt.Println(len(char))// 3}
Go 的内建函数 len() 返回的是字符串的 byte 数量 , 而不是像 Python 中那样是计算 Unicode 字符数 。如果要得到字符串的字符数 , 可使用 "unicode/utf8" 包中的 RuneCountInString(str string) (n int)
func main() {char := ""fmt.Println(utf8.RuneCountInString(char))// 1}
注意: RuneCountInString 并不总是返回我们看到的字符数 , 因为有的字符会占用 2 个 rune:func main() {char := "é"fmt.Println(len(char))// 3fmt.Println(utf8.RuneCountInString(char))// 2fmt.Println("cafe\u0301")// café// 法文的 cafe , 实际上是两个 rune 的组合}
21.在多行 array、slice、map 语句中缺少 , 号func main() {x := []int {1,2// syntax error: unexpected newline, expecting comma or }}y := []int{1,2,}z := []int{1,2}// ...}
声明语句中 } 折叠到单行后 , 尾部的 , 不是必需的 。22.log.Fatal 和 log.Panic 不只是 loglog 标准库提供了不同的日志记录等级 , 与其他语言的日志库不同 , Go 的 log 包在调用 Fatal
经验总结扩展阅读
- 床单洗完晾干变臭是为啥
- 厨房为什么有蚂蚁
- 完 golang开发:go并发的建议
- 毛巾用几天变一块块黄
- 蟑螂危害
- 缺少勇气,这辈子不可能主动恋爱的星座
- 为什么手机使用一会儿就很烫
- 鼻炎可能导致耳鸣吗
- 低血钙是什么意思
- 可能和哪首歌很像