Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Best practices constructing an empty array

I'm wondering about best practices when initializing empty arrays.

i.e. Is there any difference here between arr1, arr2, and arr3?

myArr1 := []int{}
myArr2 := make([]int,0)
var myArr3 []int

I know that they make empty []int but I wonder, is one syntax preferable to the others? Personally I find the first to be most readable but that's beside the point here. One key point of contention may be the array capacity, presumably the default capacity is the same between the three as it is unspecified. Is declaring arrays of unspecified capacity "bad"? I can assume it comes with some performance cost but how "bad" is it really?

/tldr:

  1. Is there any difference between the 3 ways to make an empty array?
  2. What is the default capacity of an array when unspecified?
  3. What is the performance cost of using arrays with unspecified capacity?
like image 925
kpie Avatar asked Jul 26 '17 03:07

kpie


1 Answers

First, it's a slice not an array. Arrays and slices in Go are very different, arrays have a fixed size that is part of the type. I had trouble with this at first too :)

  1. Not really. Any if the three is correct, and any difference should be too small to worry about. In my own code I generally use whatever is easiest in a particular case.
  2. 0
  3. Nothing, until you need to add an item, then whatever it costs to allocate the storage needed.
like image 145
Milo Christiansen Avatar answered Nov 10 '22 14:11

Milo Christiansen