Check if a Slice Contains a Value in Go

Clive B.
—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
- SentryGo Error Tracking and Performance Monitoring
- Syntax.fmListen to the Syntax Podcast
- Listen to the Syntax Podcast
![Syntax.fm logo]()
Tasty treats for web developers brought to you by Sentry. Get tips and tricks from Wes Bos and Scott Tolinski.
SEE EPISODES
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.
