First of all you should understand the distinction between arrays and slices. Arrays are treated as values, so if you pass them to functions they will get copied. Slices, on the other hand, are references to the underlying array, so if you pass a slice to a function, the function variable will still refer to the same underlying array.
In your examples, the first two are identical, it's just the first specifies the type in the variable declaration. Go let's you do that, and it may help in some cases -- like when you're trying to declare a variable to be an interface instead of a value (i.e var i io.Reader = os.Open(...)).
The third and the fifth (var strArr2 = make([]string,10)
, strArr4 := make([]string,10)
are equivalent, but the latter uses the short-hand form of variable declaration, which can often save a lot of typing.
The fourth just declares an array value.
I rarely deal with arrays in my code unless I'm working with network data. So my preferred syntax is:
s := make([]string, 10)