ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

字符串-《go语言底层原理剖析》读书笔记

2021-10-26 09:01:58  阅读:153  来源: 互联网

标签:字符 字节 读书笔记 剖析 字符串 rune go 语言


字符串

  • 字符串一般有两种类型,一种在编译时指定长度,不能修改;一种具有动态长度,可以修改。
  • go语言中的字符串是不能修改的,只能被访问,不能使用索引对字符串内容进行修改。
  • 字符串的终止方式有两种,一种是c语言中的隐式申明,以字符"\0"作为终止符。一种是go语言中的显示申明。
  • go语言字符结构体,Data:指底层的字符数组,Len:代表字符串的长度。
  • 字符串本质上是一串字符数组,每个字符在存储时对应了一个或多个整数,设计字符集的编码方式。
  • go语言中所有文件都采用utf-8的编码方式,同时常量字符使用utf-8的字符集编码,字母占1个字节,中文占3个字节。
  • 符文类型:go语言设计者认为用字符标识字符串的组成元素可能会产生歧义,因为有些字符非常相似,例如小写字母a和带重音符号的a,它们在编码后的整数是不同的,所以go语言中使用符文(rune)类型来表示和区分字符串中的“字符”,rune其实是int32的别称。
  • 使用range轮询字符串时,轮询的不是单个字符,而是具体的rune,range返回的两个参数:index,value;其中index代表每个rune的字节偏移量,value为int32,代表符文数。
  • 字符常量存储于静态存储区,其内容不可以被改变,申明时有单引号和双引号两种方法。
  • 字符常量的拼接发生在编译时,而字符串常量的拼接发生在运行时。拼接后的字符串小于32字节时,会有一个临时的缓存供其使用。当拼接的字符串大于32字节时,会请求在堆中分配内存。
  • 注意:字节数组与字符串的相互转换并不是无损的指针引用,涉及了复制,string和[]byte的直接转换是通过底层数据copy实现的,可以通过unsafe.Pointer(指针转换)和uintptr(指针运算)实现高效转换。

标签:字符,字节,读书笔记,剖析,字符串,rune,go,语言
来源: https://www.cnblogs.com/hzpeng/p/15464215.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有