Por que os valores do mapa não são endereçáveis?
Ao jogar com o código Go, descobri que os valores do mapa não são endereçáveis. Por exemplo,
package main
import "fmt"
func main(){
var mymap map[int]string = make(map[int]string)
mymap[1] = "One"
var myptr *string = &mymap[1]
fmt.Println(*myptr)
}
Gera erro
mapaddressable.go: 7: não pode usar o endereço do mymap [1]
Considerando que o código,
package main
import "fmt"
func main(){
var mymap map[int]string = make(map[int]string)
mymap[1] = "One"
mystring := mymap[1]
var myptr *string = &mystring
fmt.Println(*myptr)
}
funciona perfeitamente bem.
Porque isto é assim? Por que os desenvolvedores do Go optaram por tornar certos valores não endereçáveis? Isso é uma desvantagem ou um recurso do idioma?
Editar: Sendo de um background C ++, não estou acostumado a issonot addressable
tendência que parece prevalecer no Go. Por exemplo, o código a seguir funciona bem:
#include<iostream>
#include<map>
#include<string>
using namespace std;
int main(){
map<int,string> mymap;
mymap[1] = "one";
string *myptr = &mymap[1];
cout<<*myptr;
}
Seria bom se alguém pudesse explicar por que o mesmoendereçamento não pode ser alcançado (ou intencionalmente não foi alcançado) no Go.