go - que - Campos y métodos privados para una estructura.
que es public en programacion (3)
En Go, un identificador que comienza con una letra mayúscula se exporta desde el paquete, y cualquier persona ajena al paquete que lo declara puede acceder a él.
Si un identificador comienza con una letra minúscula, solo se puede acceder desde el paquete.
Si necesita miembros de un tipo para que solo puedan acceder los miembros de ese tipo, debe colocar ese tipo y sus funciones miembro en un paquete separado, como el único tipo en ese paquete.
En el siguiente código de prueba, me gustaría que mytype
y el método doPrivate
privados, de modo que solo los miembros de mytype
puedan acceder a él, pero no otros tipos / funciones en el alcance del paquete mypackage
.
¿Puedo hacer esto en Golang?
package mypackage
type mytype struct {
size string
hash uint32
}
func (r *mytype) doPrivate() string {
return r.size
}
func (r *mytype) Do() string {
return doPrivate("dsdsd")
}
El size
campos y el hash
, así como el método doPrivate
deben encapsularse y ningún otro tipo debe tener acceso a ellos.
No es así como funciona la "privacidad" en Go: la granularidad de la privacidad es el paquete.
Si realmente desea que solo los miembros de mytype
accedan a algunos campos, debe aislar la estructura y las funciones en su propio paquete.
Pero esa no es la práctica habitual. Si Go es OOP o no es discutible, pero está claro que la práctica no es encapsular el código mediante una estructura como la que parece querer hacer. Por lo general, un paquete es lo suficientemente pequeño para ser coherente: si no desea acceder a los campos desde dentro del paquete, no acceda a ellos.
No puedes hacer esto en Go. La visibilidad está en un nivel por paquete solamente. Pero puedes dividir tu paquete en dos.