1 回答

TA貢獻(xiàn)1111條經(jīng)驗(yàn) 獲得超0個(gè)贊
字符串的不變性與變量的不變性不同。
字符串的不變性意味著字符串中的字符不能改變。這適用于 Go。Go 在對(duì)字符串進(jìn)行切片時(shí)會(huì)使用它,如下例所示。
Go 中的變量總是可變的。更改字符串變量時(shí),變量的內(nèi)部字段(指針和長(zhǎng)度)也會(huì)更改。變量的地址永遠(yuǎn)不會(huì)改變。
下面的例子展示了 Go 字符串變量的內(nèi)部結(jié)構(gòu)。第一個(gè)整數(shù)是字符數(shù)組的地址,第二個(gè)是長(zhǎng)度。
請(qǐng)參閱 Go http://research.swtch.com/godata 中有關(guān)字符串內(nèi)部結(jié)構(gòu)的文章。
package main
import (
"fmt"
"reflect"
"unsafe"
)
func main() {
var x string = "abc"
fmt.Println(x, &x, (*reflect.StringHeader)(unsafe.Pointer(&x)))
x = "cde"
fmt.Println(x, &x, (*reflect.StringHeader)(unsafe.Pointer(&x)))
x = x[1:]
fmt.Println(x, &x, (*reflect.StringHeader)(unsafe.Pointer(&x)))
}
添加回答
舉報(bào)