对比 Go、Python 和 Rust 三种语言中字符串索引操作
字符串有很多实现细节,如果详细介绍每个细节,一篇文章的篇幅显然是不够的。 这篇文章不会面面俱到地讲述细节,而是聚焦于三种不同的语言对字符串遍历和索引的处理逻辑。 假设我们现在有这样的一个字符串 "Hello, 世界",我们首先在三种语言中做遍历和求字符串长度操作。 # Python st = "Hello, 世界" for item in st: print(item) print(len(st)) # Output: # H # e # l # l # o # , # # 世 # 界 # 9 Python 的操作逻辑符合我们直觉,"Hello, 世界" 一共有 9 个字符。 // Go package main import "fmt" func main() { st := "Hello, 世界" for _, item := range st { fmt.Println(item) } fmt.Println(len(st)) fmt.Println("-----") // 把字符串转换为字节数组 for _, item := range []byte(st) { fmt.Println(item) } } /* Output: 72 101 108 108 111 44 32 19990 30028 13 ----- 72 101 108 108 111 44 32 228 184 150 231 149 140 */ Go 这边和 Python 差距比较大,输出的不是字符而是数字,而且字符串的长度竟然是 13,这是什么情况?首先把问题放到一边,继续看 Rust 的情况。 ...