Go的字符串包定义了一个Builder类型,它有一个String()方法
func (b *Builder) String() string {
return *(*string)(unsafe.Pointer(&b.buf))
}
正如反射pacakge所指出的,字节片被定义为SliceHeader和由标头的数据字段所指向的关联数据块:
type SliceHeader struct {
Data uintptr
Len int
Cap int
}
字符串定义为由标头的数据字段指向的StringHeader和关联的数据块。
type StringHeader
我见过人们使用unsafe.Pointer有效地将[]byte转换为string。
var b = []byte{'f', 'o', 'o', 'b', 'a', 'r'}
var s = *(*string)(unsafe.Pointer(&b))
我理解它正在做什么,以及所涉及的一般危险,但有一个关于记忆的问题。
由于片的结构有数据指针、长度和容量,但是字符串没有容量,如果在堆上创建了b,那么该内存会发生什么变化呢?垃圾收集器知道它需要单独跟踪容量吗?或者这会导致记忆泄漏吗?
编辑:
我
如何更改我的卡片头的大小?
<b-card header = "We are certified data installers" md="5" class="card" bg-variant="dark" style="border-color: rgb(235, 100, 33); font-size: 30px;">
We are skilled in getting you set up or helping when you need changes made, as you