Check if a Slice Contains a Value in Go
The Problem
You don’t know how to check whether a given value exists in a slice.
The Solution
In Go version 1.21 and later, you can use the slices.Contains function to check whether a slice contains a specific value.
The following example tests for the presence of the numbers 42 and 41 in the integer slice, []int{8, 21, 42}:
package main
import (
"fmt"
"slices"
)
func main() {
example := []int{84, 21, 42}
fmt.Println(slices.Contains(example, 42)) // Prints "true".
fmt.Println(slices.Contains(example, 41)) // Prints "false".
}
Note: In the worst case, using slices.Contains has linear time complexity, meaning that it will have to check every element in the slice.
Finding a Value in a Sorted Slice
If your slice has already been sorted, you can use the slices.BinarySearch function to check whether it contains a given value.
package main
import (
"fmt"
"slices"
)
func main() {
example := []int{84, 21, 42}
index, found := slices.BinarySearch(example, 42)
fmt.Println(index, found) // Prints "2 true".
}
This is significantly faster than the Contains function, as the BinarySearch function runs in logarithmic time.
Further Reading
- The Go
slicespackage documentation
Considered "not bad" by 4 million developers and more than 150,000 organizations worldwide, Sentry provides code-level observability to many of the world's best-known companies like Disney, Peloton, Cloudflare, Eventbrite, Slack, Supercell, and Rockstar Games. Each month we process billions of exceptions from the most popular products on the internet.