# How to find an element in a slice

yourbasic.org/golang

Go doesn’t have an out-of-the-box search function for slices.
Here are two example **linear search** implementations, which
you can use as templates.

```
// Find returns the smallest index i at which x == a[i],
// or len(a) if there is no such index.
func Find(a []string, x string) int {
for i, n := range a {
if x == n {
return i
}
}
return len(a)
}
// Contains tells whether a contains x.
func Contains(a []string, x string) bool {
for _, n := range a {
if x == n {
return true
}
}
return false
}
```

## Faster alternatives

If the slice is sorted, you can use a binary search instead.
This will be much more efficient, since binary search runs in worst-case logarithmic time,
making ** O(log n)** comparisons, where

*n*is the size of the slice.

If you are doing repeated searches and updates, you may want to use a map
instead of a slice.
A map provides lookup, insert, and delete operations in ** O(1)**
amortized time.