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

作者:冷漠的麻辣烫 时间:2024-02-19 17:16:26 

引言

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

废话不多说,上货

String底层

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

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

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

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

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

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

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

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

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

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

stringStruct结构

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

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

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

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

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

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

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

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

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

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

来源:https://juejin.cn/post/7157672604084469768

标签:Golang,String,底层原理
0
投稿

猜你喜欢

  • 使用Python中OpenCV和深度学习进行全面嵌套边缘检测

    2021-04-21 10:21:34
  • python 将字符串转换成字典dict

    2023-11-27 17:08:33
  • xWin的HTC分享

    2009-09-13 18:50:00
  • python 用for循环实现1~n求和的实例

    2022-08-18 01:51:17
  • python中面向对象的注意点概述总结

    2023-10-08 09:35:11
  • python中加背景音乐如何操作

    2023-11-09 02:54:51
  • 浅析MySQL - MVCC

    2024-01-24 14:29:22
  • PyTorch深度学习模型的保存和加载流程详解

    2023-07-10 04:58:33
  • php利用新浪接口查询ip获取地理位置示例

    2024-03-22 08:11:29
  • Oracle中instr函数使用方法

    2023-07-23 19:14:06
  • flask框架单元测试原理与用法实例分析

    2021-10-06 04:11:12
  • python+selenium爬取微博热搜存入Mysql的实现方法

    2024-01-24 18:07:53
  • 如何实现一个python函数装饰器(Decorator)

    2023-12-02 19:38:37
  • 前端可视化搭建组件值校验规则详解

    2024-04-19 09:42:32
  • Oracle 存储过程总结(一、基本应用)

    2024-01-24 22:25:53
  • python时间序列按频率生成日期的方法

    2021-10-04 22:38:40
  • SQL Server误区30日谈 第5天 AWE在64位SQL SERVER中必须开启

    2024-01-17 15:25:36
  • 常见的jQuery选择器汇总

    2024-04-22 22:21:35
  • 详解Python调用系统命令的六种方法

    2023-11-20 02:22:36
  • Python常见的几种数据加密方式

    2021-11-18 07:47:04
  • asp之家 网络编程 m.aspxhome.com