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

 更新时间:2022年10月24日 10:21:15   作者:冷漠的麻辣烫  
这篇文章主要为大家介绍了Golang底层原理解析String使用实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

引言

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

废话不多说,上货

String底层

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

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

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

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

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

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

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

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

stringStruct结构

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

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

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

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

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

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

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

以上就是Golang底层原理解析String使用实例的详细内容,更多关于Golang String底层原理的资料请关注脚本之家其它相关文章!

相关文章

  • 用gomock进行mock测试的方法示例

    用gomock进行mock测试的方法示例

    go-mock是专门为go语言开发的mock库,该库使用方式简单,支持自动生成代码,这篇文章主要介绍了用gomock进行mock测试的方法示例,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • GoFrame通用类型变量gvar与interface基本使用对比

    GoFrame通用类型变量gvar与interface基本使用对比

    这篇文章主要为大家介绍了GoFrame通用类型变量gvar与interface基本使用对比,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • golang gorm中格式化时间问题详解

    golang gorm中格式化时间问题详解

    这篇文章主要给大家介绍了关于golang gorm中格式化时间问题的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用golang具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • Go1.18新特性工作区模糊测试及泛型的使用详解

    Go1.18新特性工作区模糊测试及泛型的使用详解

    这篇文章主要为大家介绍了Go 1.18新特性中的工作区 模糊测试 泛型使用进行详细讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • golang连接mysql数据库操作使用示例

    golang连接mysql数据库操作使用示例

    这篇文章主要为大家介绍了golang连接mysql数据库操作使用示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • Golang import本地包和导入问题相关详解

    Golang import本地包和导入问题相关详解

    这篇文章主要介绍了Golang import本地包和导入问题相关详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • go语言开发中如何优雅得关闭协程方法

    go语言开发中如何优雅得关闭协程方法

    这篇文章主要为大家介绍了go语言开发中如何优雅得关闭协程方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • Go语言interface 与 nil 的比较

    Go语言interface 与 nil 的比较

    在golang中,nil只能赋值给指针、channel、func、interface、map或slice类型的变量。如果未遵循这个规则,则会引发panic。
    2017-08-08
  • 一文带你探索Go语言中crypto/md5标准库的强大功能

    一文带你探索Go语言中crypto/md5标准库的强大功能

    我们将从MD5算法的基础知识入手,逐步深入到如何在Go中有效使用crypto/md5标准库,包括基本的使用方法、实际应用案例分析,以及性能和安全性的考量,需要的可以参考下
    2024-02-02
  • 浅析Golang中Gin框架存在的必要性

    浅析Golang中Gin框架存在的必要性

    在Go语言中,net/http 包提供了一个强大且灵活的标准HTTP库,那为什么还出现了像 Gin 这样的,方便我们构建Web应用程序的第三方库,下面就来和大家简单分析一下
    2023-08-08

最新评论