写点什么

Go 学习笔记之 字符串数据类型

发布于: 23 小时前
Go 学习笔记之 字符串数据类型

一个字符串是一个不可改变的字节序列。字符串可以包含任意的数据,包括 byte 值 0,但是通常是用来包含人类可读的文本。文本字符串通常被解释为采用 UTF8 编码的 Unicode 码点(rune)序列。

操作

+操作符将两个字符串连接构造一个新字符串:

fmt.Println("goodbye" + s[5:]) // "goodbye, world"
复制代码

内置的 len 函数可以返回一个字符串中的字节数目(不是 rune 字符数目),索引操作 s[i]返回第 i 个字节的字节值,i 必须满足 0 ≤ i< len(s)条件约束。

s := "hello, world"fmt.Println(len(s))     // "12"fmt.Println(s[0], s[7]) // "104 119" ('h' and 'w')
// 如果试图访问超出字符串索引范围的字节将会导致panic异常:c := s[len(s)] // panic: index out of range
复制代码

因为字符串是不可修改的,因此尝试修改字符串内部数据的操作也是被禁止的:

s[0] = 'L' // compile error: cannot assign to s[0]
复制代码


字符串面值

字符串值也可以用字符串面值方式编写,只要将一系列字节序列包含在双引号内即可:

"Hello, 世界"
复制代码


因为 Go 语言源文件总是用 UTF8 编码,并且 Go 语言的文本字符串也以 UTF8 编码的方式处理,因此我们可以将 Unicode 码点也写到字符串面值中。


UTF-8

UTF8 编码使用 1 到 4 个字节来表示每个 Unicode 码点,ASCII 部分字符只使用 1 个字节,常用字符部分使用 2 或 3 个字节表示。


Go 语言的 range 循环在处理字符串的时候,会自动隐式解码 UTF8 字符串


for i, r := range "Hello, 世界" {    fmt.Printf("%d\t%q\t%d\n", i, r, r)}
复制代码



作者:架构精进之路,十年研发风雨路,大厂架构师,CSDN 博客专家,专注架构技术沉淀学习及分享,职业与认知升级,坚持分享接地气儿的干货文章,期待与你一起成长

关注并私信我回复“01”,送你一份程序员成长进阶大礼包,欢迎勾搭。



Thanks for reading!

发布于: 23 小时前阅读数: 7
用户头像

坚持分享接地气儿的架构技术文章! 2018.02.26 加入

同名微信公众号「架构精进之路」,专注软件架构研究,技术学习与职业成长!坚持原创总结、沉淀和分享,希望能带给大家一些引导和启发,感谢各位的支持(关注、点赞、分享)!

评论

发布
暂无评论
Go 学习笔记之 字符串数据类型