# Go: Check if a Slice Contains a Specific Value

> Use slices.Contains to check whether a Go slice contains a given value, or slices.BinarySearch for faster lookups on an already sorted slice

**URL:** https://sentry.io/answers/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`](https://pkg.go.dev/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}`:

```go
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](https://en.wikipedia.org/wiki/Time_complexity#Linear_time), 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`](https://pkg.go.dev/slices#BinarySearch) function to check whether it contains a given value.

```go
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](https://en.wikipedia.org/wiki/Time_complexity#Logarithmic_time).

### Further Reading

- The [Go `slices` package](https://pkg.go.dev/slices) documentation

---

*Source: [sentry.io/answers/check-if-a-slice-contains-a-value-in-go/](https://sentry.io/answers/check-if-a-slice-contains-a-value-in-go/)*
