Jquery中文网 www.jquerycn.cn
Jquery中文网 >  后端编程  >  Go语言  >  正文 Go string byte rune 深入理解

Go string byte rune 深入理解

发布时间:2021-04-13   编辑:www.jquerycn.cn
jquery中文网为您提供Go string byte rune 深入理解等资源,欢迎您收藏本站,我们将为您提供最新的Go string byte rune 深入理解资源

在 go 中。有 byte, string 以及 rune.
虽然很常见的,但是如果要理解他们的区别还是很重要的,不然可能就犯错误了。
比如索引字符串中的第n个字符,但是如果仅仅使用下标去索引,就大错特错了。

string

在go中, string不是面向字符的,仅仅是byte的数组
我们可以通过打印来查看
事先说明:
%x: 将其16进制数打印.
%q: 打印并且过滤掉不可以打印的字节
% q: 等于 plus, 这个不只可以过滤不可以打印的字符,而且可以过滤掉不是 ascii的字符会翻译成 UTF-8

上例子

const sample = "\xbd\xb2\x3d\xbc\x20\xe2\x8c\x98"
fmt.Printf("%x\n", sample) // bdb23dbc20e28c98 
fmt.Printf("% x\n", ) // bd b2 3d bc 20 e2 8c 98
fmt.Printf("%q\n", sample) // "\xbd\xb2=\xbc ⌘" 
fmt.Printf("% q\n", sample) //"\xbd\xb2=\xbc \u2318"

另外一个例子: 我们通过三种方式打印这个字符

const placeOfInterest = `⌘`
fmt.Printf("只是打印 string: %s\n", placeOfInterest)

fmt.Printf("quoted string: % q\n", placeOfInterest)
fmt.Printf("string的16进制: % x\n", placeOfInterest)
fmt.Printf("string的16进制: %d\n", len(placeOfInterest))

输出结果

只是打印 string: ⌘
quoted string: "\u2318"
string的16进制: e2 8c 98

获取很懵逼,但是看下面一段代码

	// 我们将 e2 8c 98 的 16进制化为10进制  
	fmt.Printf("%s\n", []byte{226, 140,152 })

输出:

意味着 ⌘ 这个字符的 unicode编码为 U 2318, 代表的字节为 e2 8c 98 这意味着这些字节的 utf-8 编码为 2318

rune

rune 在 go 中是 int32 别名。 是为了解决 utf-8 中编码不一致的问题。用 int32 去直接存储 code-point (码点) ,即为rune 。来表示一个 utf-8的编码。

例如:
的 unicode 的值为 \u2318。
那么, 将 2318 为16进制,化为10进制后就为 8984

	var rn rune = 8984
	fmt.Printf("rune=%q\n", rn)

输出结果即为

官方文档 介绍 strings

到此这篇关于“Go string byte rune 深入理解”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
Go string byte rune 深入理解
golang--基本数据类型,big.Int类型,类型转换
go 获取函数地址_Go语言基础--接口浅析
golang实现ini配置(config)文件解析
go编程之简单正则表达式使用
go 函数末尾缺少返回值_王垠:Go语言野心勃勃,实际情况又如何
golang byte转string_golang面试题:怎么避免内存逃逸?
基于类型系统的面向对象编程语言Go
Go 语言到底适合干什么?
想系统学习GO语言(Golang

[关闭]