Check if a slice contains a value

Avatar of the author Willem Schots
6 Jul, 2023 (Updated 22 Jan, 2024)
~2 min.
RSS

Some languages have an in operator that checks if a collection contains a certain value, Go does not.

In Go the same functionality is provided by a Contains function.

Depending on your Go version you can use a different approach:

These functions compare the slice values using ==. Depending on your situation you may want to compare in a different way. The ContainsFunc function allows you to specify a custom comparison function.

If you are using a Go version that does not support generics, you can always implement your own SliceContains function. See the example below:

main.go
package main

import (
	"fmt"
	"slices"
)

func main() {
	s := []string{"🌱", "🪡", "🌱"}
	x := "🪡"
	y := "🙈"

	fmt.Println("slices.Contains:")
	fmt.Printf("s contains \"%s\"? %v\n", x, slices.Contains(s, x))
	fmt.Printf("s contains \"%s\"? %v\n", y, slices.Contains(s, y))

	fmt.Println("---")

	fmt.Println("SliceContains:")
	fmt.Printf("s contains \"%s\"? %v\n", x, SliceContains(s, x))
	fmt.Printf("s contains \"%s\"? %v\n", y, SliceContains(s, y))
}

// SliceContains returns true if s contains v.
func SliceContains(s []string, v string) bool {
	for _, vs := range s {
		if vs == v {
			return true
		}
	}

	return false
}

Career choice: Learn skills to mitigate the upcoming AI privacy disaster*

Join 800+ devs reading my newsletter

*Everyone and their mother is sending sensitive data to AI systems with little concern for their privacy. If you read the fineprint, vendors and platforms actually offer very little guarantees. It's a matter of time before it goes wrong.

From March 2026 onwards, I'll be writing about development of verifiably-secure services using OpenPCC.

Avatar of the author
Willem Schots

Hello! I'm the Willem behind willem.dev

I created this website to help new Go developers, I hope it brings you some value! :)

You can follow me on Bluesky, Twitter/X or LinkedIn.

Thanks for reading!