Почему значения карт не адресуемы?
Играя с кодом Go, я обнаружил, что значения карты не адресуемы. Например,
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)
}
Генерирует ошибку
mapaddressable.go: 7: не может взять адрес mymap [1]
Принимая во внимание, код,
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)
}
отлично работает
Почему это так? Почему разработчики Go решили сделать определенные значения не адресуемыми? Это недостаток или особенность языка?
редактировать: Будучи из C ++ фона, я не привык к этомуnot addressable
тенденция, которая, кажется, преобладает в го. Например, следующий код работает просто отлично:
#include<iostream>
#include<map>
#include<string>
using namespace std;
int main(){
map<int,string> mymap;
mymap[1] = "one";
string *myptr = &mymap[1];
cout<<*myptr;
}
Было бы хорошо, если бы кто-то мог указать, почему то же самоеадресация не может быть достигнуто (или намеренно не было достигнуто) в Go.