DEV Community

Lane Wagner
Lane Wagner

Posted on • Originally published at qvault.io on

Make, New and Literals Cheat Sheet – Slice and Map Initialization in Go

golang gopher slice literal

The post Make, New and Literals Cheat Sheet – Slice and Map Initialization in Go appeared first on Qvault.

There are quite a few ways to create new maps and slices in Go. Which one is best? Or perhaps better asked, which one is best in your situation? Let’s take a look.

Slices

var varStyle []string

literalStyle := []string{}

newStyle := new([]string)

makeStyle := make([]string, 0)
Enter fullscreen mode Exit fullscreen mode

var varStyle []string is the idiomatic way to declare an empty slice. The slice is actually nil , which means it will be null when marshalled to JSON and will succeed nil checks.

literalStyle := []string{} should probably only be used when the literal is going to start with values in it , as in literalStyle := []string{“cat”, “dog”, etc}. Otherwise prefer make()

newStyle := new([]string) returns a pointer to the slice. Same as ptrStyle := &[]string{}. Only use if you want a pointer.

makeStyle := make([]string, 0) is the same as the literal style, but is preferred for idiomatic reasons when the slice doesn’t need non-zero starting values. Make() allows the slice to be initialized with a starting length and capacity, which can have good performance implications in some circumstances:

makeStyle := make([]string, len, cap)

Maps

var varStyle map[int]int

literalStyle = map[string]int{}

newStyle := new(map[string]int)

makeStyle := make(map[string]int)
Enter fullscreen mode Exit fullscreen mode

var varStyle map[int]int creates a nil map. Writing (but not reading interestingly enough) will cause a panic. You probably don’t want a nil map.

literalStyle := map[string]int{} using the literal syntax is just fine, though idiomatically its probably best to use a make function. Developers are more used to seeing a make function and make offers some additional features.

newStyle := new(map[string]int) creates a pointer to a nil map… very often not what you want.

makeStyle := make(map[string]int) This is probably what you want! If you know your space requirements you can optimize for allocation by passing in a size:

// Give me a map with room for 10 items before needing to allocate more space
makeStyle := make(map[string]int, 10)
Enter fullscreen mode Exit fullscreen mode

Thanks For Reading

Hit me up on twitter @wagslane if you have any questions or comments.

Take your coding career to the next level with courses on Qvault Classroom

Follow me on Dev.to: wagslane

The post Make, New and Literals Cheat Sheet – Slice and Map Initialization in Go appeared first on Qvault.

Top comments (1)

Collapse
 
rajajaganathan profile image
Raja Jaganathan

its very informative! Please keep posting.