结果好了很多! 但我们确实不能这样做,为什么? 用一个小例子, 假设我们只是想用字符串中的每个字符与下个字符比较是否一样的. 简单的处理方式可能是这样:
1 |
func CompareChars(word string) { for i, c := range word { if i < len(word)-1 {
|
2 |
fmt.Print(string(word[i+1]) == string(c), "," )
|
8 |
>>> false , false , true , false ,
|
可是使用ASCII的字符串作为入参,结果实在是太烂了!如果我们使用中文说你好的话情况会是这样:
2 |
>>> false , false , false , false ,
|
很明显这些字符串永远不会相等,因为我们总是用‘好’和好的第一byte的ASCII码‘\xE5’比较。
那么该怎么办?如果我们探索的够深,就会发现go排除了unicode/utf8的引用包,这个包不提供特别多功能,但是却能是我们解决遇到的第一个问题,查询‘hello’字符串的长度:
1 |
import ( "fmt" "unicode/utf8" ) ... fmt.Println(utf8.RuneCountInString( "Hello, 世界" ))
|