MST
星途 面试题库

面试题:Go语言切片拆分时如何避免数据丢失

假设存在一个切片`data := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}`,现在要将其拆分成两个切片,前半部分和后半部分。在拆分过程中,要确保不会因为切片底层数组共享而导致数据在后续操作中意外改变。请说明拆分的原理并编写相应代码实现。
47.3万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

拆分原理

Go语言中,切片共享底层数组。为避免数据在后续操作中意外改变,需要创建新的底层数组。可以通过append或手动创建新切片并逐个赋值的方式实现。

代码实现

package main

import "fmt"

func main() {
    data := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    mid := len(data) / 2

    // 方法一:使用append
    firstHalf := make([]int, mid)
    firstHalf = append(firstHalf, data[:mid]...)

    secondHalf := make([]int, len(data)-mid)
    secondHalf = append(secondHalf, data[mid:]...)

    fmt.Println("First Half:", firstHalf)
    fmt.Println("Second Half:", secondHalf)

    // 方法二:手动赋值
    firstHalfManual := make([]int, mid)
    for i := 0; i < mid; i++ {
        firstHalfManual[i] = data[i]
    }

    secondHalfManual := make([]int, len(data)-mid)
    for i := mid; i < len(data); i++ {
        secondHalfManual[i - mid] = data[i]
    }

    fmt.Println("First Half (Manual):", firstHalfManual)
    fmt.Println("Second Half (Manual):", secondHalfManual)
}