1 回答

TA貢獻1111條經(jīng)驗 獲得超0個贊
字符串的不變性與變量的不變性不同。
字符串的不變性意味著字符串中的字符不能改變。這適用于 Go。Go 在對字符串進行切片時會使用它,如下例所示。
Go 中的變量總是可變的。更改字符串變量時,變量的內(nèi)部字段(指針和長度)也會更改。變量的地址永遠不會改變。
下面的例子展示了 Go 字符串變量的內(nèi)部結構。第一個整數(shù)是字符數(shù)組的地址,第二個是長度。
請參閱 Go http://research.swtch.com/godata 中有關字符串內(nèi)部結構的文章。
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)))
}
添加回答
舉報