Golang slices.Delete
last modified April 20, 2025
This tutorial explains how to use the slices.Delete
function in Go.
We'll cover slice operations with practical examples of removing elements.
The slices.Delete function removes elements from a slice and returns the modified slice. It's part of Go's experimental slices package.
This function is useful for safely removing elements without memory leaks. It handles index bounds checking and returns a new slice with elements removed.
Basic slices.Delete Example
The simplest use of slices.Delete
removes one element from a slice.
We specify the start and end index of the elements to remove.
package main import ( "fmt" "slices" ) func main() { numbers := []int{1, 2, 3, 4, 5} // Remove element at index 2 (value 3) numbers = slices.Delete(numbers, 2, 3) fmt.Println("After deletion:", numbers) }
We create a slice of numbers and remove the element at index 2. The function takes the slice and the range to delete (from 2 to 3, exclusive).
Removing Multiple Elements
slices.Delete
can remove a range of elements. This example removes
three consecutive elements from a slice.
package main import ( "fmt" "slices" ) func main() { letters := []string{"a", "b", "c", "d", "e", "f"} // Remove elements from index 1 to 4 (b, c, d) letters = slices.Delete(letters, 1, 4) fmt.Println("After deletion:", letters) }
The function removes elements from index 1 up to (but not including) index 4. The resulting slice contains ["a", "e", "f"].
Working with Struct Slices
We can use slices.Delete
with custom struct types. This example
removes a person from a slice of Person structs.
package main import ( "fmt" "slices" ) type Person struct { Name string Age int } func main() { people := []Person{ {"Alice", 25}, {"Bob", 30}, {"Charlie", 17}, } // Remove Bob (index 1) people = slices.Delete(people, 1, 2) fmt.Println("Remaining people:", people) }
The function removes the element at index 1 (Bob). The slice is modified to contain only Alice and Charlie.
Edge Case: Empty Slice
slices.Delete
handles empty slices gracefully. This example shows
the behavior when trying to delete from an empty slice.
package main import ( "fmt" "slices" ) func main() { var empty []int // Try to delete from empty slice result := slices.Delete(empty, 0, 1) fmt.Println("Result:", result) fmt.Println("Length:", len(result)) }
The function returns an empty slice without panicking. This makes it safe to use even when the input might be empty.
Performance Considerations
For large slices, deleting elements has performance implications. This example benchmarks deletion at different positions.
package main import ( "fmt" "slices" "time" ) func main() { largeSlice := make([]int, 1_000_000) for i := range largeSlice { largeSlice[i] = i } // Delete from start start := time.Now() _ = slices.Delete(largeSlice, 0, 1) fmt.Println("Delete from start:", time.Since(start)) // Delete from middle start = time.Now() _ = slices.Delete(largeSlice, 500_000, 500_001) fmt.Println("Delete from middle:", time.Since(start)) // Delete from end start = time.Now() _ = slices.Delete(largeSlice, 999_999, 1_000_000) fmt.Println("Delete from end:", time.Since(start)) }
Deleting from the start is most expensive as it requires shifting all elements. Deleting from the end is fastest as no shifting is needed.
Practical Example: Removing Invalid Entries
This practical example removes invalid entries from a slice of user inputs. We filter out negative numbers from a list of measurements.
package main import ( "fmt" "slices" ) func main() { measurements := []float64{1.2, -0.5, 3.4, -2.1, 5.6, -0.9} // Remove all negative measurements for i := 0; i < len(measurements); { if measurements[i] < 0 { measurements = slices.Delete(measurements, i, i+1) } else { i++ } } fmt.Println("Valid measurements:", measurements) }
We iterate through the slice and remove negative values. Note how we only increment the index when we don't delete to handle the shifted elements.
Combining with Other Slice Operations
This example shows how to combine slices.Delete
with other slice
operations to implement more complex functionality.
package main import ( "fmt" "slices" ) func main() { data := []int{10, 20, 30, 40, 50, 60, 70} // Find index of element to delete idx := slices.Index(data, 40) if idx != -1 { // Delete element and everything after it data = slices.Delete(data, idx, len(data)) } fmt.Println("Result:", data) }
We first find the index of the element to delete using slices.Index
.
Then we delete that element and all following elements in one operation.
Source
Go experimental slices package documentation
This tutorial covered the slices.Delete
function in Go with practical
examples of removing elements from slices in various scenarios.
Author
List all Go tutorials.