Why does Go forbid taking the address of (&) map member, yet allows (&) slice element?
Go doesn't allow taking the address of a map member: // if I do this: p := &mm["abc"] // Syntax Error - cannot take the address of mm["abc"] The rationale is that if Go allows taking this address, when the map backstore grows or shinks, the address can become invalid, confusing the user. But Go slice gets relocated when it outgrows its capacity, yet, Go allows us to take the address of a slice element: a := make([]Test, 5) a[0] = Test{1, "dsfds"} a[1] = Test{2, "sdfd"} a[2] = Test{3, "dsf"} addr1 := reflect.ValueOf(&a[2]).Pointer() fmt.Println("Address of a[2]: ", addr1) a = append(a, Test{4,