# How to find the difference between two slices of strings

## Issue

Here is my desired outcome

``````slice1 := []string{"foo", "bar","hello"}
slice2 := []string{"foo", "bar"}

difference(slice1, slice2)
=> ["hello"]
``````

I am looking for the difference between the two string slices!

## Solution

Depending on the size of the slices, different solutions might be best.

My answer assumes order doesn’t matter.

Using simple loops, only to be used with smaller slices:

``````package main

import "fmt"

func difference(slice1 []string, slice2 []string) []string {
var diff []string

// Loop two times, first to find slice1 strings not in slice2,
// second loop to find slice2 strings not in slice1
for i := 0; i < 2; i++ {
for _, s1 := range slice1 {
found := false
for _, s2 := range slice2 {
if s1 == s2 {
found = true
break
}
}
// String not found. We add it to return slice
if !found {
diff = append(diff, s1)
}
}
// Swap the slices, only if it was the first loop
if i == 0 {
slice1, slice2 = slice2, slice1
}
}

return diff
}

func main() {
slice1 := []string{"foo", "bar", "hello"}
slice2 := []string{"foo", "world", "bar", "foo"}

fmt.Printf("%+v\n", difference(slice1, slice2))
}
``````

Output:

``````[hello world]
``````

Playground: http://play.golang.org/p/KHTmJcR4rg

Answered By – ANisus

Answer Checked By – Robin (GoLangFix Admin)