Go string底层实现?

本文阅读 1 分钟
首页 golang 正文

题目序号:(1666、1707、1667)

题目来源:字节跳动

频次:3

答案:FH-Bin

源码包 src/runTime/string.go.stringStruct 定义了string的数据结构:

Type stringStruct struct{
    str unsafe.Pointer
    len int
}

数据结构:

stringStruct.str:字符串的首地址

stringStruct.len:字符串的长度

声明:

如下代码所示,可以声明一个string变量赋予初值:

var str string
str = "Hello world"

字符串构建过程是现根据字符串构建stringStruct,再转化成string。转换的源码如下:

func gostringnocopy(str *byte) string{       //根据字符串地址构建string
    ss := stringStruct{str:unsafe.Pointer(str),len:findnull(str)}  // 先构造 stringStruct
    s := *(*string)(unsafe.Pointer(&ss))   //再将stringStruct 转换成string
    return s
}
本文来自投稿,不代表本站立场,如若转载,请注明出处:
syncpool的实现原理
« 上一篇 09-17
问了sync.Map(我说我对sync.Pool比较熟,就说Pool了)
下一篇 » 09-17

发表评论

发表评论