Check if a Slice Contains a Value in Go

Clive B.
jump to solution

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

Method Pointer Receivers in Interfaces
Evan Hicks
How To Print Struct Fields in Go
Clive B.
Reading a file line by line in Go
Clive B.

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.

Sentry