原文链接:
背景
asongGorune1515159len(str) > 200bug200len([]rune(str)) > 200UnicoderuneUnicodeUnicode8bitbytebyte255byteGB2312unicodeUnicode- 什么是字符编码?
unicodeUnicode0x6c49110110001001001152Unicode342Unicode4403UnicodeUTF-8UTF-16UTF-8Unicode1 - 4UTF-8Go基本概念
string人工翻译:
string8UTF-8stringnilstringbyte
写个例子验证一下:
bytestringcannot assign to str1[1]
string根据前面的分析,我们也可以得出我们将字符存储在字符串中时,也就是按字节进行存储的,所以最后存储的其实是一个数值。
GoGoGoUTF-8UTF-8GoUTF-8GoGorange运行结果:
根据运行结果我们可以得出如下结论:
ASCIIRangeUnicoderunerune人工翻译:
runeint32int32runeUnicodeGoUTF-81-4int32答案揭晓
前面说了这么多知识点,确实有点乱了,我们现在就根据开始的那道题来做一个总结。为了方便查看,在贴一下这道题:
159具体原因:
len()runeUnicoderuneutf-813159贴个图,方便理解:

unicode/utf8runeGounicode/utf8runeutf8.RuneCountInString总结
针对全文,我们做一个总结:
UTF-8GobyteGoacsiirangeunicodeGoruneUnicodeGolen()utf8.RuneCountInStringrune好啦,这篇文章就到这里啦,素质三连(分享、点赞、在看)都是笔者持续创作更多优质内容的动力!
推荐往期文章: