MST

星途 面试题库

面试题:Go语言切片截取操作与底层数组共享风险 - 基础理解

请解释在Go语言中,当对切片进行截取操作时,底层数组共享会带来怎样的影响?并举出一个简单的代码示例说明这种影响。
36.3万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

底层数组共享的影响

  1. 节省内存:多个切片共享同一个底层数组,避免了重复的数据存储,从而节省内存。
  2. 数据一致性:由于共享底层数组,对一个切片的修改会直接反映到其他共享该底层数组的切片上。
  3. 可能的意外修改风险:如果不注意,在一个地方对切片的修改可能会影响到其他依赖该底层数组的切片,导致程序出现难以调试的问题。

代码示例

package main

import "fmt"

func main() {
    // 初始化一个切片
    originalSlice := []int{1, 2, 3, 4, 5}
    
    // 对切片进行截取
    subSlice := originalSlice[1:3]
    
    // 修改subSlice中的元素
    subSlice[0] = 20
    
    // 打印originalSlice,会发现其元素也被修改了
    fmt.Println(originalSlice)
}

在上述代码中,subSlice截取自originalSlice,它们共享底层数组。当修改subSlice中的元素时,originalSlice中对应位置的元素也会被修改。运行该程序,输出结果为[1 20 3 4 5]