순서가 중요한 경우

package main

import "fmt"

func remove(slice []int, s int) []int {
    return append(slice[:s], slice[s+1:]...)
}

func main() {
    var Slice1 = []int{1, 2, 3, 4, 5}
    fmt.Printf("slice1: %v\n", Slice1)

    Slice2 := remove(Slice1, 2)
    fmt.Printf("slice2: %v\n", Slice2)
}

실행 결과

slice1: [1 2 3 4 5]
slice2: [1 2 4 5]

순서가 중요하지 않은 경우

package main

import "fmt"

func remove(s []int, i int) []int {
    s[i] = s[len(s)-1]
    return s[:len(s)-1]
}

func main() {
    var Slice1 = []int{1, 2, 3, 4, 5}
    fmt.Printf("slice1: %v\n", Slice1)

    Slice2 := remove(Slice1, 2)
    fmt.Printf("slice2: %v\n", Slice2)
}

실행결과

slice1: [1 2 3 4 5]
slice2: [1 2 5 4]

설명

속도는 후자가 더 빠르기 때문에, 순서가 중요한 경우 전자를 사용하고 순서보다 속도가 중요할 때에는 후자를 사용하면 된다.

출처

https://www.delftstack.com/ko/howto/go/how-to-delete-an-element-from-a-slice-in-golang/