博主猫头虎()带您 Go to New World✨
博客首页——猫头虎的博客
《面试题大全专栏》 文章图文并茂生动形象简单易学!欢迎大家来踩踩~
《IDEA开发秘籍专栏》 学会IDEA常用操作,工作效率翻倍~
《100天精通Golang(基础入门篇)》 学会Golang语言,畅玩云原生,走遍大小厂~
猫头虎建议Go程序员必备技术栈一览表:
☁️
Go语言开发者必备技术栈☸️
:
GoLang | Git | Docker | ☸️ Kubernetes | CI/CD | ✅ Testing | SQL/NoSQL | gRPC | ☁️ Cloud | Prometheus | ELK Stack
希望本文能够给您带来一定的帮助文章粗浅,敬请批评指正!
原创作者: 猫头虎
作者wx: Libin9iOak
作者公众号: 猫头虎技术团队
大家好,我是猫头虎,今天我们要聊的是Go语言中的一个看似简单,却隐藏着丰富内涵的话题:字符串、字节、符文和字符。在这篇博客中,我们将深入探讨Go中的字符串是如何工作的,以及它们与字节、字符、符文的关系。准备好跟我一起深入Go的世界了吗?
在上一篇博客中,我们了解了Go中切片的工作原理。今天,我们将在这个基础上,进一步探讨Go中的字符串。字符串看似简单,但要正确使用它们,需要理解字节、字符、符文之间的差异,以及Unicode和UTF-8、字符串与字符串字面量等概念的区别。
在Go中,字符串实质上是只读的字节切片。它们可以包含任意字节,而不限于Unicode或UTF-8文本。例如,下面这个字符串字面量:
const sample = "\xbd\xb2\x3d\xbc\x20\xe2\x8c\x98"
由于sample
中包含非ASCII和非UTF-8的字节,直接打印会产生乱码。但我们可以通过循环和格式化输出来分析字符串的真实内容。例如:
for i := 0; i < len(sample); i++ {
fmt.Printf("%x ", sample[i])
}
Go中的字符串是一串字节。当我们存储字符时,实际上存储的是它的字节表示。例如:
const placeOfInterest = `⌘`
这个例子展示了Unicode字符U+2318(即“⌘”)是如何通过UTF-8字节e2 8c 98
来表示的。
在Go中,Unicode的“代码点”被称为“符文”(rune)。Go使用int32
类型的别名rune
来表示代码点。例如:
'⌘'
当使用for range
循环遍历字符串时,Go会对UTF-8编码的符文进行解码。例如:
const nihongo = "日本語"
for index, runeValue := range nihongo {
fmt.Printf("%#U starts at byte position %d\n", runeValue, index)
}
Go的标准库提供了强大的UTF-8文本解释支持。例如,unicode/utf8
包提供了一系列用于处理UTF-8字符串的函数。
概念 | 描述 |
---|---|
字符串 | Go中的字符串是只读的字节切片 |
字符串与字节 | 字符串可以包含任意字节,不一定是有效的UTF-8序列 |
UTF-8与字符串字面量 | 字符串字面量(除非包含特殊转义序列)总是有效的UTF-8序列 |
符文 | Go中的符文(rune)表示Unicode代码点 |
字符串的遍历 | 使用for range 循环遍历字符串时,Go会对UTF-8编码的符文进行解码 |
今天我们探讨了Go中字符串的内部工作原理,理解了字符串、字节、符文和字符之间的区别。尽管Go字符串
可以包含任意字节,但UTF-8编码在其设计中占据了核心地位。希望这篇文章能帮助你更好地理解Go字符串的行为。本文已被猫头虎的Go生态洞察专栏收录,详情点击这里。
下一篇文章,我们将探讨“Go语言四年回顾”,回顾Go自发布以来的发展历程和它所带来的影响。敬请期待!
======= ·
原创作者: 猫头虎
作者wx: Libin9iOak
作者公众号: 猫头虎技术团队
学习 | 复习 | Go生态 |
---|---|---|
✔ | ✔ | ✔ |
本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。
作者保证信息真实可靠,但不对准确性和完整性承担责任。
未经许可,禁止商业用途。
如有疑问或建议,请联系作者。
感谢您的支持与尊重。
点击
下方名片
,加入IT技术核心学习团队。一起探索科技的未来,洞察Go生态,共同成长。