string的底层结构
type StringHeader struct {
Data uintptr //指向底层字符串数据的指针
Len int //字符串的长度
}
其中Data是指向底层数据的指针,Len是字符串的长度。
string的特性
值传递只会拷贝StringHeader
从 StringHeader 定义来看 ,值传递 string 只会拷贝 StringHeader 而已,并不会拷贝底层字符串数据。
下面用代码验证:
package main
import (
"log"
"reflect"
"unsafe"
)
func main() {
log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds | log.Lshortfile)
str := "hello"
log.Printf("str is:%v\n", str) //str is:hello
log.Printf("str addr is:%p\n", &str) //str addr is:0xc0000101e0
log.Printf("str underlying fields addr is:%+v\n", *(*reflect