Exportado/No exportado

12. Exportado/No exportado#

En Go, la visibilidad y el acceso a los componentes definidos en un módulo está dado por una convención de nombres. Si los nombres dados a los distintos elementos en un paquete (variables, funciones, estructuras, etc.) comienzan con una letra mayúsculas, entonces ese elemento se considera exportado y por lo tanto puede ser considerado como parte de la “interfaz pública” del paquete (en términos de Java).

package ejemplo

import "fmt"

var datoProtegido string = "mi contraseña"

var DatoPublico float32 = 3.1415926

func HolaMundo() {
    fmt.Println("¡Hola Mundo!")
}

Esto también aplica a nivel de los campos de una estructura:

package seguridad

type Boveda struct {
    Id   int
    dato string
}

En este ejemplo, Id será un dato accesible desde cualquier punto en el programa que importe este paquete. Pero dato solo será accesible desde dentro del mismo paquete. Para modificar este valor podemos definir métodos que operen sobre estos campos no exportados.

package seguridad

func (b *Boveda) actualizarDato(dato string) {
    if dato {
        b.dato = dato
    }
}