字符串通常有两种设计,一种是「字符」串,一种是「字节」串。「字符」串中的每个字都是定长的,而「字节」串中每个字是不定长的。Go 语言里的字符串是「字节」串,英文字符占用 1 个字节,非英文字符占多个字节。这意味着无法通过位置来快速定位出一个完整的字符来,而必须通过遍历的方式来逐个获取单个字符。

图片

我们所说的字符通常是指 unicode 字符,你可以认为所有的英文和汉字在 unicode 字符集中都有一个唯一的整数编号,一个 unicode 通常用 4 个字节来表示,对应的 Go 语言中的字符 rune 占 4 个字节。在 Go 语言的源码中可以找到下面这行代码,rune 类型是一个衍生类型,它在内存里面使用 int32 类型的 4 个字节存储。

type rune int32

使用「字符」串来表示字符串势必会浪费空间,因为所有的英文字符本来只需要 1 个字节来表示,用 rune 字符来表示的话那么剩余的 3 个字节都是零。但是「字符」串有一个好处,那就是可以快速定位。

为了进一步方便读者理解字节 byte 和 字符 rune 的关系,我花了下面这张图

原文链接

《快学 Go 语言》第 7 课 —— 诱人的烤串相关推荐

  1. 快学 Go 语言 第 3 课 —— 分支与循环

    程序 = 数据结构 + 算法 上面这个等式每一个初学编程的同学都从老师那里听说过.它并不是什么严格的数据公式,它只是对一般程序的简单认知.数据结构是内存数据关系的静态表示,算法是数据结构从一个状态变化 ...

  2. 《快学 Go 语言》第 11 课 —— 千军万马跑协程

    协程和通道是 Go 语言作为并发编程语言最为重要的特色之一,初学者可以完全将协程理解为线程,但是用起来比线程更加简单,占用的资源也更少.通常在一个进程里启动上万个线程就已经不堪重负,但是 Go 语言允 ...

  3. 《快学 Go 语言》第 5 课 —— 神奇的切片

    切片无疑是 Go 语言中最重要的数据结构,也是最有趣的数据结构,它的英文词汇叫 slice.所有的 Go 语言开发者都津津乐道地谈论切片的内部机制,它也是 Go 语言技能面试中面试官最爱问的知识点之一 ...

  4. 《快学 Go 语言》第 7 课 —— 冰糖葫芦串

    字符串通常有两种设计,一种是「字符」串,一种是「字节」串.「字符」串中的每个字都是定长的,而「字节」串中每个字是不定长的.Go 语言里的字符串是「字节」串,英文字符占用 1 个字节,非英文字符占多个字 ...

  5. go int 转切片_「快学 Go 语言」第 4 课——低调的数组

    数组就是一篇连续的内存,几乎所有的计算机语言都有数组,只不过 Go 语言里面的数组其实并不常用,这是因为数组是定长的静态的,一旦定义好长度就无法更改,而且不同长度的数组属于不同的类型,之间不能相互转换 ...

  6. 自学编程是从python语言还是c语言开始-非计算机专业大学生想自学编程应该学C语言还是学Python?...

    之前总结的文章,分享过来,希望对你有帮助.windliang:到底学哪一门编程语言​zhuanlan.zhihu.com 发展进程 学哪一门编程语言,我们不妨先梳理一下语言的发展过程. 机器语言 计算 ...

  7. 后端开发需要学什么_都2020年了,还在纠结学什么语言?| 后端篇

    几个礼拜前,一个学弟问我: "Ray,我打算之后要找工作了,不过现在自己没有特别深入的语言,最近想找一门好好学一下,你觉得学什么语言好呀?" 我表示:"这个要看你求职方向 ...

  8. 电气专业c语言要学得非常好吗,电气自动化专业需要学C语言吗?

    电气工程及其自动化专业要学C语言. 1.专业学位课程: 高等数学.电路原理.电子技术基础.微型计算机技术.计算机网络 .电机学.自动控制理论.电力系统分析.电力系统继电保护.C语言.C++. 2.专业 ...

  9. 重学c语言 新开导言

    重学c语言 导言 在我上大一的第一个学期,学院没给我们安排什么专业课内容.当时就学高数.线代.英语.思修之类的,闲暇时间很多,我就用课余时间在慕课上跟着浙江大学翁凯老师的c语言课学.在上大学之前我压根 ...

最新文章

  1. windows环境下python怎么安装mlxtend-python连接QQ实现自动回复python 机器学习库
  2. python opencv读写图片
  3. 禁止解析PHP、限制user_agent、php相关配置
  4. Hotspot虚拟机的对象
  5. 设计模式学习笔记——享元(Flyweight)模式
  6. c++中string插入一个字符_Java内存管理-探索Java中字符串String(十二)
  7. python是什么意思中文-python是什么意思中文翻译
  8. (转)15个强大的jQuery开发提示和技巧
  9. 前端图表生成利器--ECharts推荐
  10. Windows下sqlmap安装方法
  11. SaaSBase:最受欢迎的跨境电商软件有哪些(上篇)
  12. mac上设定prosody 用户
  13. MYSQL索引3:聚簇索引和非聚簇索引
  14. 黑龙江省大学计算机学校排名2015,2015黑龙江省最佳大学排行榜
  15. linux samba 断点续传,利用cURL实现单个文件分多段同时下载,支持断点续传
  16. python爬取微博评论并做词频分析_爬取李子柒微博评论并分析
  17. 2021-04-28-飞机大战-001-day5-游戏滚动背景
  18. 【阿里云产品公测】以开发者角度看ACE服务『ACE应用构建指南』
  19. 代码阅读总结之Fitch and Mather 7.0(资源文件Resource随笔)
  20. 华为交换机 access,trunk,hybrid理解,需一点基础,应该是最完整的

热门文章

  1. Fragment的onCreateView创建的view是如何加入到Activity的
  2. 【CSS学习】自定义 虚线 大小 样式
  3. 《操作系统第四版》(刘振鹏 王煜)(四)进程同步与通信
  4. 罗杰软工第三次作业——结对编程
  5. odp 加固 mysql 代码_ODP方式,大批量数据写入ORACLE数据库
  6. 利用浏览器指纹技术进行防恶意点击和恶意骚扰刷新系统
  7. ubuntu软件安装常用命令
  8. 利用MS11_003 IE漏洞攻击win7主机
  9. OpenWrt路由器通过iPhone有线共享网络上网
  10. GC是什么?为什么要有GC?(GC就是垃圾收集的意思)