Go语言字符串

9个月前 阅读 181 评论 0 赞 0

我们都知道,在Go语言中,字符串是值类型的,那么它的本质究竟是什么呢?

值类型和引用类型只是使用方式上的区别,在Go语言中,字符串实际上是一个结构体:

  1. type reflect.StringHeader struct {
  2. Data uintptr
  3. Len int
  4. }

StringHeader就是字符串类型的庐山真面目,它持有的也是数据的地址,按理说可以作为引用类型来用,然而Go的设计者却关闭了这一通道,因为在Go语言中字符串是不可以改变的。所以即使字符串类型拥有地址,但是其表现是值类型。

对比一下Go语言的切片类型:

  1. type reflect.SliceHeader struct {
  2. Data uintptr
  3. Len int
  4. Cap int
  5. }

其实切片和字符串是非常像的,切片仅仅多出了一个容量字段,所以在Go语言中,字节切片和字符串之间的转换非常容易,这就就是原因。


你的支持将鼓励作者继续创作

评论(0)

(无)