Go passes arguments by value. When you call a function, Go copies the argument's value into the parameter. Changes inside the function don't affect the original:
func double(n int) {
n = n * 2 // modifies the copy
}
x := 5
double(x)
// x is still 5
The function receives a copy of x, not x itself. This keeps functions from accidentally modifying your data. If you need to modify the original, you'll use pointers.