vectores tipos punteros operadores matrices lenguaje funciones direccion declaracion con cadenas pointers go

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 x es un puntero a una estructura, xy es una abreviatura de (*x).y ; si el campo y también es un puntero a una estructura, xyz es una abreviatura de (*(*x).y).z , y así sucesivamente. Si x contiene un campo anónimo de tipo *A , donde A también es un tipo de estructura, xf es 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 A o *A donde A es un tipo de matriz, o para un tipo S donde S es 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!