开发者

Golang底层原理解析String使用实例

目录
  • 引言
  • String底层
  • stringStruct结构

引言

本人因为种种原因(说来听听),放弃大学学的Java,走上了golang这条路,本着干一行爱一行的情怀,做开发嘛,不能只会使用这门语言,所以打算开一个底层原理系列,深挖一下,狠狠的掌握一下这门语言

废话不多说,上货

String底层

既然研究底层,那就得全方面覆盖,必须先搞http://www.devze.com一下基础的东西,那必须直接基本数据类型走起啊,

字符串String的底层我看就很基础

string大家应该都不陌生,go中的string是所有8位字节字符串的集合,且初始化后值不可变

string可以为空,但是不能为nil(这句话可以在源码中找到)

string的源码在runtime包下的string.go文件中

可以看到string的底层是一个32位的byte切片

Golang底层原理解析String使用实例

这时候指定有小伙编程客栈伴就得问了,既然是byte切片,那我为什么不能修改字符串中某一个元素呢?就像下面这种情况

Golang底层原理解析String使用实例

因为string底层的byte开发者_JAVA入门切片是一个只读切片,主要原因在golang的编译阶段,string会被分配到只读段,指向的数据地址无法写入,也就不能更改

stringStruct结构

同样也对应了string底层的type - stringStruct

提到stringStruct就要提到底层的另一个方法gostringnocopy,如下

Golang底层原理解析String使用实例

通过这个方法就能明白我们创建字符的时候其实是通过该方法将底层byte转换为string

这里就用到了stringStruct类型,结构如下

Golang底层原理解析String使用实例

str 是指针,指向了字符串的首地址,而len则是字符串的长度,大概编程客栈结构就像下面这张图一样

Golang底层原理解析String使用实例

你们不好奇为什么还存了一个len记录字符长度嘛,我好奇,我查了

当我们获取字符串长度的时候,要遍历整个js字符串,有了这个就不用了,直接获取,时间复杂度O(1)

以上就是Golang底层原理解析String使用实例的详细内容,更多关于Golang String底层原理的资料请关注我们其它相关文章编程客栈!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新开发

开发排行榜