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切片
这时候指定有小伙伴就得问了,既然是byte切片,那我为什么不能修改字符串中某一个元素呢?就像下面这种情况
因为string底层的byte切片是一个只读切片,主要原因在golang的编译阶段,string会被分配到只读段,指向的数据地址无法写入,也就不能更改
stringStruct结构
同样也对应了string底层的type - stringStruct
提到stringStruct就要提到底层的另一个方法gostringnocopy,如下
通过这个方法就能明白我们创建字符的时候其实是通过该方法将底层byte转换为string
这里就用到了stringStruct类型,结构如下
str 是指针,指向了字符串的首地址,而len则是字符串的长度,大概结构就像下面这张图一样
你们不好奇为什么还存了一个len记录字符长度嘛,我好奇,我查了
当我们获取字符串长度的时候,要遍历整个字符串,有了这个就不用了,直接获取,时间复杂度O(1)
来源:https://juejin.cn/post/7157672604084469768


猜你喜欢
- 0 背景由于工作需要,利用spark完成机器学习。因此需要对spark集群进行操作。所以利用pycharm和pyspark远程连接spark
- 先来看javascript的直接写在了input上 <input name="pwuser" type="
- 本文实例为大家分享了javascript自定义加载loading效果的具体代码,供大家参考,具体内容如下加载中图片,底色为白色(看不到)效果
- python PIL 将数组值转成图片安装 PIL 包pip install pillow将二维数据转换成单通道图片from PIL imp
- 如下所示:import numpy as npa = np.array([[1,2,3],[4,5,6],[7,8,9]])b = np.a
- 在进入一个页面的时候,一般在获取数据的同时,会先显示一个 loading ,等请求结束再隐藏 loading 渲染页面,只需要用一个属性去记
- 本文介绍了Python格式化输出%s和%d的实例案例。分享给大家供大家参考,具体如下:python print格式化输出1. 打印字符串pr
- 一、python pip的安装与使用1、pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。
- MAC下MYSQL5.7.17无法连接的问题,下载安装完SQLBench_community 6.3.9后新建MYSQL CONNECTIO
- 使用css2.1实现多重背景、多重边框效果在单个HTML元素上利用CSS2.1实现拥有3张背景图片和2张内容图效果,或者多重边框的效果。这种
- 1. 问题虽然scrapy能够完美且快速的抓取静态页面,但是在现实中,目前绝大多数网站的页面都是动态页面,动态页面中的部分内容是
- 直方图介绍直方图(Histogram),又称质量分布图,是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表
- 1。下载mysql-noinstall-5.1.33-win32.zip,然后解压 2。复制my-huge配置文件为my.ini 在 [my
- SQL(结构化查询语言)是一种通用数据库查询语言。SQL具有数据定义、数据操作和数据控制功能,可以完成数据库的全部工作。SQL语言使用时只需
- 前言在开始本文之前,首先要知道Python中对象包含的三个基本要素,分别是:id(身份标识)、python type()(数据类型)和val
- 前言Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。axios 是目前最优秀的 HTTP 请
- 不止一次在微信、知乎有读者朋友跑过来问:看完了基础书,甚至看两遍了,但自己写的时候还是没思路,我该怎么办?编程在我看来就是一门手艺活,绝不是
- MySQL根据配置文件会限制Server接受的数据包大小。有时候大的插入和更新会受 max_allowed_packet 参数限制,导致写入
- 数据动画可视化制作在日常工作中是非常实用的一项技能。目前支持动画可视化的库主要以Matplotlib-Animation为主,其特点为:配置
- 尽管 ORDER BY 不是和索引的顺序准确匹配,索引还是可以被用到,只要不用的索引部分和所有的额外的 ORDER BY 字段在 WHERE