dictionary - Deleting pointer value doesn't panic -


why doesn't following code panic? test pointer. fmt.println(people[0].name) instead of fmt.println(test.name) panic.

package main  import "fmt"  func main() {      type person struct {         id   int         name string     }      people := make(map[int]*person)      people[1] = &person{0, "name"}     fmt.println(people[0].name)      test := people[0]     test.name = "name2"     fmt.println(test.name)      people[0].name = "name3"     fmt.println(test.name)      delete(people, 0)      fmt.println(test.name) } 

playground

the use of builtin delete() removes entry map. not delete / deallocate memory pointed value associated removed key.

in go can't manage memory this, go garbage collected language , freeing memory duty , responsibility of garbage collector.

your code doesn't panic because have (valid) pointer value of type person, , long have it, person not become invalid (its memory not freed).

when change code people[0].name, indexing map key not in map (because removed delete()), result of index expression zero value of value type of map, nil *person type. , attempting refer name field of nil struct pointer cause runtime panic.


Comments

Popular posts from this blog

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

python Tkinter Capturing keyboard events save as one single string -

sql server - Why does Linq-to-SQL add unnecessary COUNT()? -