paint-brush
Go (Golang): Your Cheatsheet On Ways To Create New Maps And Slicesby@wagslane
392 reads
392 reads

Go (Golang): Your Cheatsheet On Ways To Create New Maps And Slices

by Lane WagnerJuly 20th, 2020
Read on Terminal Reader
Read this story w/o Javascript
tldt arrow

Too Long; Didn't Read

Go (Golang): Your Cheatsheet On Ways To Create New Maps And Slices. There are quite a few ways to create new maps and slices in Go. Which one is best? Or perhaps better asked, which is best in your situation? Let's take a look at how to create a new map and a new slice using Go's make() and varStyle is the best way to declare an empty slice. Make() allows the slice to be initialized with a starting length and capacity, which can have good performance implications.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Go (Golang): Your Cheatsheet On Ways To Create New Maps And Slices
Lane Wagner HackerNoon profile picture

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)

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)

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)

Want to learn more? Check out the How To: Global Constant Maps and Slices Article!

Thanks For Reading

Follow us on Twitter @q_vault if you have any questions or comments

Take game-like coding courses on Qvault Classroom

Subscribe to our Newsletter for more educational articles