pointers - tipos - ¿Cuándo los punteros de Go se desreferen?
punteros y vectores en c (1)
La expresión del selector (por ejemplo, xf ) hace eso:
Los selectores eliminan automáticamente los punteros a las estructuras. Si
xes un puntero a una estructura,xyes una abreviatura de(*x).y; si el campoytambién es un puntero a una estructura,xyzes una abreviatura de(*(*x).y).z, y así sucesivamente. Sixcontiene un campo anónimo de tipo*A, dondeAtambién es un tipo de estructura,xfes un acceso directo para(*xA).f.
La definición de la operación de indexación especifica que un puntero de matriz se puede indexar:
Para un tipo
Ao*AdondeAes un tipo de matriz, o para un tipoSdondeSes un tipo de sector
Acabo de comenzar a bucear en Go recientemente y tengo un punto de confusión importante: estoy luchando para entender cuándo es exactamente necesario desreferir un puntero explícitamente.
Por ejemplo, yo sé que el . el operador se encargará de desreferenciar un puntero
ptr := new(SomeStruct)
ptr.Field = "foo" //Automatically dereferences
¿En qué otros escenarios va hacer esto? Parece, por ejemplo, con matrices.
ptr := new([5][5]int)
ptr[0][0] = 1
No he podido encontrar esto en la especificación, la sección para punteros es muy corta y ni siquiera toca la eliminación de referencias. ¡Cualquier aclaración de las reglas para anular la referencia a los punteros de go sería genial!