Performance and Benchmarking Basics
Map Lookup Shape
Maps make lookup code direct when the program needs to find a value by key.
lookup
Performance decisions often start with choosing a data shape that matches the operation: scan a slice or look up a key.
Map Lookup Shape
map_lookup_shape.go
Replay: real traced execution (multi-file project)
package main
import "fmt"
func main() {
var key = "beta"
scores := map[string]int{
"alpha": 3,
"beta": 5,
"gamma": 8,
}
value, ok := scores[key]
result := "miss"
if ok {
result = "hit"
}
fmt.Println("key=", key)
fmt.Println("value=", value)
fmt.Println("found=", ok)
fmt.Println("result=", result)
}
package main
import "fmt"
func main() {
var key = "alpha"
scores := map[string]int{
"alpha": 3,
"beta": 5,
"gamma": 8,
}
value, ok := scores[key]
result := "miss"
if ok {
result = "hit"
}
fmt.Println("key=", key)
fmt.Println("value=", value)
fmt.Println("found=", ok)
fmt.Println("result=", result)
}
package main
import "fmt"
func main() {
var key = "missing"
scores := map[string]int{
"alpha": 3,
"beta": 5,
"gamma": 8,
}
value, ok := scores[key]
result := "miss"
if ok {
result = "hit"
}
fmt.Println("key=", key)
fmt.Println("value=", value)
fmt.Println("found=", ok)
fmt.Println("result=", result)
}
key ← "beta", scores ← map[string]int{"alpha":3, "beta":5, "gamma":8}
5func main() {6 var key→ "beta" = "beta" //@key="alpha", "missing"7 scores→ map[string]int{"alpha":3, "beta":5, "gamma":8} := map[string]int{8 "alpha": 3,9 "beta": 5,10 "gamma": 8,11 }12 value→ 5, ok→ true := scores[key]513 result→ "miss" := "miss"14 if ok {result ← "hit"
13result := "miss"14if oktrue {15 result→ "hit" = "hit"16}fmt.Println("key=", key)
18 fmt.Println("key=", key"beta")19 fmt.Println("value=", value5)20 fmt.Println("found=", oktrue)21 fmt.Println("result=", result"hit")22}outputkey= beta value= 5 found= true result= hit
key ← "alpha", scores ← map[string]int{"alpha":3, "beta":5, "gamma":8}
5func main() {6 var key→ "alpha" = "alpha"7 scores→ map[string]int{"alpha":3, "beta":5, "gamma":8} := map[string]int{8 "alpha": 3,9 "beta": 5,10 "gamma": 8,11 }12 value→ 3, ok→ true := scores[key]313 result→ "miss" := "miss"14 if ok {result ← "hit"
13result := "miss"14if oktrue {15 result→ "hit" = "hit"16}fmt.Println("key=", key)
18 fmt.Println("key=", key"alpha")19 fmt.Println("value=", value3)20 fmt.Println("found=", oktrue)21 fmt.Println("result=", result"hit")22}outputkey= alpha value= 3 found= true result= hit
key ← "missing", scores ← map[string]int{"alpha":3, "beta":5, "gamma":8}
5func main() {6 var key→ "missing" = "missing"7 scores→ map[string]int{"alpha":3, "beta":5, "gamma":8} := map[string]int{8 "alpha": 3,9 "beta": 5,10 "gamma": 8,11 }12 value→ 0, ok→ false := scores[key]013 result→ "miss" := "miss"14 if ok {15 result = "hit"16 }1718 fmt.Println("key=", key"missing")19 fmt.Println("value=", value0)20 fmt.Println("found=", okfalse)21 fmt.Println("result=", result"miss")22}outputkey= missing value= 0 found= false result= miss