Warum sind Kartenwerte nicht adressierbar?
Während ich mit Go-Code spielte, stellte ich fest, dass Kartenwerte nicht adressierbar sind. Beispielsweise
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)
}
Generiert Fehler
mapaddressable.go: 7: Adresse von mymap [1] kann nicht übernommen werden
Whereas, der Code,
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)
}
funktioniert einwandfrei.
Warum ist das so? Warum haben sich die Go-Entwickler dafür entschieden, bestimmte Werte nicht adressierbar zu machen? Ist das ein Nachteil oder ein Merkmal der Sprache?
Bearbeite: Da ich aus einem C ++ - Hintergrund stamme, bin ich an dieses @ nicht gewöhnnot addressable
Trend, der in Go weit verbreitet zu sein scheint. Der folgende Code funktioniert beispielsweise einwandfrei:
#include<iostream>
#include<map>
#include<string>
using namespace std;
int main(){
map<int,string> mymap;
mymap[1] = "one";
string *myptr = &mymap[1];
cout<<*myptr;
}
s wäre schön, wenn jemand darauf hinweisen könnte, warum das gleiche Adressierbarkeit kann in Go nicht erreicht werden (oder wurde absichtlich nicht erreicht).