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
猜你喜欢
- 使用的这么长时间的mysql,有一天我突然需要使用mysql 的配置文件my.ini时发现没有这个文件并且这个文件不是被隐藏了。查看自己的m
- 在Python所有的数据结构中,list具有重要地位,并且非常的方便,这篇文章主要是讲解list列表的高级应用,基础知识可以查看博客。 此文
- 1. 解压ZIP包和配置首先,将mysql-5.5.25-winx64.zip 解压缩到D:/mysql-5.5.25 目录下,然后根据网上
- 当用GOOGLE查的时候,内容几乎都是一样的。但是你想要的东西,一个也没有。例如,我就找不到中国人写的如何使用PYTHON来创建一个XML文
- 引言手机中拍摄照的照片和视频快爆了,想转移到PC端,并按时间建立文件夹存储到电脑中,本文主要介绍如何通过python获取手机拍摄图片的时间信
- 错误代码如下:NotFoundError (see above for traceback): Unsuccessful TensorSli
- 在学习人工智能时,大量的使用了np.random.seed(),利用随机数种子,使得每次生成的随机数相同。我们带着2个问题来进行下列实验np
- 目录迭代器生成器总结迭代器聊迭代器前我们要先清楚迭代的概念:通常来讲从一个对象中依次取出数据,这个过程叫做遍历,这个手段称为迭代(重复执行某
- 如下所示:def str_to_hex(s): s = s.split(' ')&nbs
- /**//// <summary> /// 生成带CDATA的节点 /// </summary> /// <p
- 前言之前说了怎么写机器码到内存,然后调用。现在说说怎么优化。用Python发送微信消息给好友第二次优化再看一遍c语言的代码void Send
- 前言上篇文章相信大家已经了解了pytest在cmd下结合各种命令行参数如何运行测试用例,并输出我们想要看到的信息。那么今天会讲解一下pyte
- 在开发的过程中,我们不可避免的会遇到各种各样的编码,解码,或者乱码问题,很多时候,我们可以正常的解决问题,但是说实在的,我们有可能并不清楚问
- Pandas是一个强大的数据处理库,它提供了高性能、易于使用的数据结构和数据分析工具。本文将介绍Pandas常用的数据结构和常用的数据分析技
- Window.ShowModalDialog使用手册 基本介绍: showModalDialog() (IE 4+ 支持) sho
- 我就废话不多说了,直接上代码吧!'''python对象销毁(垃圾回收)'''class Po
- oracle wm_concat(column)函数使我们经常会使用到的,下面就教您如何使用oracle wm_concat(column)
- 1. 抓取街拍图片街拍图片网址2. 分析街拍图片结构keyword: 街拍pd: atlasdvpf: pcaid: 4916page_nu
- 本文实例为大家分享了python批量下载抖音视频的具体代码,供大家参考,具体内容如下知识储备:博主是在Pycharm下进行的 文件夹:dou
- 本文实现了用Python和OpenCV配合,调用本地摄像头采集视频,基本上函数的话看opencv的官方文档就Ok了(The OpenCV R