Golang slices.Contains
last modified April 20, 2025
This tutorial explains how to use the slices.Contains
function in Go.
We'll cover slice operations with practical examples of checking for elements.
The slices.Contains function tests whether a slice contains a specific element. It's part of Go's experimental slices package.
This function is useful for checking element existence without writing manual loops. It returns true if the element is found, false otherwise.
Basic slices.Contains Example
The simplest use of slices.Contains
checks if a number exists in a
slice. We pass the slice and the target value to search for.
package main import ( "fmt" "slices" ) func main() { numbers := []int{1, 2, 3, 4, 5} hasThree := slices.Contains(numbers, 3) hasSix := slices.Contains(numbers, 6) fmt.Println("Contains 3:", hasThree) fmt.Println("Contains 6:", hasSix) }
We create a slice of numbers and check for the presence of 3 and 6. The function returns true for 3 (present) and false for 6 (not present).
Checking String Presence
slices.Contains
works with string slices. This example checks if a
specific fruit exists in a slice.
package main import ( "fmt" "slices" ) func main() { fruits := []string{"apple", "banana", "cherry"} hasBanana := slices.Contains(fruits, "banana") hasOrange := slices.Contains(fruits, "orange") fmt.Println("Has banana:", hasBanana) fmt.Println("Has orange:", hasOrange) }
The function performs case-sensitive comparison. Banana is found while orange is not present in the slice.
Working with Structs
For custom struct types, slices.Contains
uses deep equality. This
example checks for a specific person in a slice.
package main import ( "fmt" "slices" ) type Person struct { Name string Age int } func main() { people := []Person{ {"Alice", 25}, {"Bob", 30}, {"Charlie", 17}, } target := Person{"Bob", 30} hasBob := slices.Contains(people, target) fmt.Println("Contains Bob:", hasBob) }
The function compares all struct fields. Only an exact match (both name and age) will return true.
Checking for Multiple Values
We can combine slices.Contains
with loops to check multiple values.
This example verifies if all required items are present.
package main import ( "fmt" "slices" ) func main() { inventory := []string{"sword", "shield", "potion"} required := []string{"sword", "potion"} allPresent := true for _, item := range required { if !slices.Contains(inventory, item) { allPresent = false break } } fmt.Println("All required items present:", allPresent) }
We iterate through required items and check each one. The result is true only if all items are found in the inventory.
Empty Slice Behavior
slices.Contains
always returns false for empty slices. This example
demonstrates this behavior.
package main import ( "fmt" "slices" ) func main() { var empty []string result := slices.Contains(empty, "anything") fmt.Println("Result for empty slice:", result) }
An empty slice cannot contain any elements. The function returns false regardless of the search value.
Performance Considerations
For large slices, slices.Contains
performs a linear search. This
example benchmarks the operation.
package main import ( "fmt" "slices" "time" ) func main() { largeSlice := make([]int, 1_000_000) for i := range largeSlice { largeSlice[i] = i } // Search for first element start := time.Now() _ = slices.Contains(largeSlice, 0) fmt.Println("First element:", time.Since(start)) // Search for last element start = time.Now() _ = slices.Contains(largeSlice, 999_999) fmt.Println("Last element:", time.Since(start)) // Search for missing element start = time.Now() _ = slices.Contains(largeSlice, -1) fmt.Println("Missing element:", time.Since(start)) }
The function scans elements sequentially. Best case is O(1) (first element), worst case is O(n) (last or missing element).
Practical Example: User Validation
This practical example checks if a username exists in a list of registered users.
package main import ( "fmt" "slices" ) func main() { registeredUsers := []string{"alice", "bob", "charlie"} var username string fmt.Print("Enter username: ") fmt.Scanln(&username) if slices.Contains(registeredUsers, username) { fmt.Println("Welcome back,", username) } else { fmt.Println("Username not found") } }
The program prompts for a username and checks against the registered list. This demonstrates a common real-world use case.
Source
Go experimental slices package documentation
This tutorial covered the slices.Contains
function in Go with practical
examples of checking for elements in various scenarios.
Author
List all Go tutorials.