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)
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)
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)
its very informative! Please keep posting.