Visibilidad de variables en paquetes
Tiempo de lectura: 1 minutos
Utilizar las mayúsculas de forma apropiada puede evitar dolores de cabeza
El problema
Después de montar el código para acceder a la API, tenemos un error en el preprocesador que impide la compilación del código. Parece que no puede ver las variables del paquete de configuración.
Estructura del código
En este ejemplo, de llamada una API en la que necesitamos la API KEY, montamos el paquete config para mantener privado nuestro acceso:
package config
// -----------------------------------------------
// FS API key
// -----------------------------------------------
const (
apikey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
secret = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
)
var fsApiKey = map[string]string{
"apikey": apikey,
"secret": secret,
} En el programa principal referenciamos a internal para importar el paquete config
import (
"encoding/xml"
"fmt"
"io"
"log"
"net/http"
"strings"
// local
"webServices/internal/config"
"webServices/pkg/fatsecret"
) Y, en el código, pasamos el mapa con la API KEY:
getUserDataAPI_2()
if food != "" {
callFatsecret(config.fsApiKey)
} Pero esto da error en el compilador, el mensaje es que no se ha definido config.fsApiKey y el formateador acaba eliminado la referencia de la sección import. ¿Qué es lo que está pasando?
Solución
El problema reside en que el paquete config declara la variable fsApiKey y esta variable es local, no tiene visibilidad desde el paquete principal. Lo que hemos de hacer es «declararla» pública para no sea local, por lo que escribimos FsApiKey. Esa primera mayúscula es la que determina que sea pública.
Y la declaración queda así:
var FsApiKey = map[string]string{
"apikey": apikey,
"secret": secret,
} Y la llamada:
getUserDataAPI_2()
if food != "" {
callFatsecret(config.FsApiKey)
}