Go语言入门:string、rune

栏目: IT技术 · 发布时间: 4年前

内容简介:单行的字符串初始化和大部分语言一样,使用双引号,支持和python一样的多行,但是用反单引号,就是键盘上按键区最左上角的那个符号。上面两个打印字符串长度的代码会输出多少?11和4吗?错了,答案是11和16,len方法取得的结果是字符串所占用的字节数,go语言中的字符串使用的是可变长的UTF8编码,ASCII码占用1个字节,其它字符是2-4个字节,对于中文字符是3个字节。那如何取得我们预想的字符串长度:11和4?可以使用如下的两个方法:这里的rune可以认为用于表示一个utf8编码,如果想把汉字字符串,一个个
msg := "hello world"
cnMsg := "你好世界"
multiline := `
				select * from table
				where col='val'
			`

单行的字符串初始化和大部分语言一样,使用双引号,支持和 python 一样的多行,但是用反单引号,就是键盘上按键区最左上角的那个符号。

长度

msg := "hello world"
fmt.Println(len(msg))
cnMsg := "你好世界"
fmt.Println(len(cnMsg))

上面两个打印字符串长度的代码会输出多少?11和4吗?错了,答案是11和16,len方法取得的结果是字符串所占用的字节数,go语言中的字符串使用的是可变长的UTF8编码,ASCII码占用1个字节,其它字符是2-4个字节,对于中文字符是3个字节。那如何取得我们预想的字符串长度:11和4?可以使用如下的两个方法:

fmt.Println(utf8.RuneCountInString(msg))
fmt.Println(utf8.RuneCountInString(cnMsg))

这里的rune可以认为用于表示一个utf8编码,如果想把汉字字符串,一个个打印出来,可用如下方法实现:

cnMsg := "你好世界"
msgRunes := []rune(cnMsg)
for _, c := range msgRunes {
    fmt.Println(string(c))
}

SLICE

msg := "hello world"
fmt.Println(msg[:5])
fmt.Println(msg[6:])
fmt.Println(msg[3:5])
fmt.Println(msg[0])

对于ASCII码字符串可以使用上面的方法进行类似Java substring的操作,注意最后一个返回的是h的ASCII码值。对于中文字符如果也像上面的方式操作,打印出来的结果会是乱码,因为上面的操作是基于字节索引的,中文的substring要像下面这样操作,先转成rune表示的UTF8编码数组,然后基于UTF8编码索引:

cnMsg := "你好世界"
fmt.Println(string([]rune(cnMsg)[0:1]))

以上所述就是小编给大家介绍的《Go语言入门:string、rune》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java5.0Tiger程序高手秘笈

Java5.0Tiger程序高手秘笈

BrettMclaughlin / 东南大学出版社 / 2005-10 / 28.00元

代号为 “Tiger”的下一个 Java 版本,不只是个小改动版。在语言核心中有超过 100 项以上的变动,同时有大量的对 library 与 API 所做的加强,让开发者取得许多新的功能、工具与技术。但在如此多的变化下,应该从何处开始着手?也许可以从既长又无趣的语言规范说明书开始看起;或等待最少 500 页的概念与理论巨著出版;甚至还可以直接把玩新的 JDK 看看能够有什么发现;或者借由《Jav......一起来看看 《Java5.0Tiger程序高手秘笈》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

MD5 加密
MD5 加密

MD5 加密工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具