Saltar al contenido

Variables de Entorno (std::env)

En esta página

std::env sigue el modelo 12-factor: la configuración proviene del entorno. El módulo ofrece lectura y escritura de variables individuales, enumeración de todo el entorno, y funciones de plataforma como env.os() y env.arch(). Como interactúa con el proceso del host, no se puede ejecutar en el sandbox WASM; usa la CLI de Zolo.


Leer, definir y eliminar variables

env.get(name) devuelve la cadena del valor o nil cuando la variable no existe. El operador ?? es el idioma natural para los valores por defecto. env.set y env.remove modifican el entorno del proceso actual:

Lee PATH, aplica un valor por defecto con ??, define APP_NAME y luego lo elimina.

01-get-set.zolo
Playground
// Feature: env.get / env.set — environment variables

// When to use: env-driven config (12-factor), feature flags, secrets.


use std::env

// env.get(name) -> string or nil if not present.

let path = env.get("PATH")
print(path != nil)  // expected: true


let missing = env.get("VARIABLE_THAT_DOES_NOT_EXIST_42")
print(missing)  // expected: nil


// Idiomatic pattern: default via `??`.

let port = env.get("APP_PORT") ?? "8080"
print(port)  // expected: 8080 (if APP_PORT not set)


// env.set(name, value) modifies the current process environment.

env.set("APP_NAME", "zolo")
print(env.get("APP_NAME"))  // expected: zolo


// env.remove undoes it.

env.remove("APP_NAME")
print(env.get("APP_NAME"))  // expected: nil

Requiere la CLI o el host de Zolo; ábrelo en el playground o ejecútalo localmente.


Enumerar el entorno y consultar el sistema

env.all() devuelve un mapa con todas las variables. env.os(), env.arch() y env.home_dir() exponen información del sistema operativo útil en scripts multiplataforma:

Lee PATH de env.all(), imprime el SO, la arquitectura y el directorio home.

02-all-and-info.zolo
Playground
// Feature: env.all / env.os / env.arch / env.home_dir — environment info

// When to use: cross-platform scripts, debugging, picking paths per OS.


use std::Map
use std::env

// env.all() -> plain table mapping VAR=value. Use Map.from to wrap

// it in a Map object, or index it directly with `[name]`.

let all = env.all()
let path = all["PATH"]
let has_path = path != nil
print(has_path)  // expected: true


// Current OS: "windows", "linux", "macos".

// (`os` shadows the Lua-builtin module of the same name; pick a

// different identifier to be safe.)

let cur_os = env.os()
print(cur_os.len() > 0)  // expected: true


// Architecture: "x64", "arm64", etc.

let cur_arch = env.arch()
print(cur_arch.len() > 0)  // expected: true


// User's home directory (nil only on very unusual setups).

let home = env.home_dir()
let has_home = home != nil
print(has_home)  // expected: true

Requiere la CLI o el host de Zolo; ábrelo en el playground o ejecútalo localmente.


Patrón: struct de configuración

El patrón recomendado para aplicaciones 12-factor es centralizar todos los valores por defecto en una struct Config y cargarla una vez al inicio, con funciones auxiliares para convertir cadenas en enteros y booleanos:

Define Config con port, log_level, debug y database_url mediante variables de entorno.

03-config-pattern.zolo
Playground
// Feature: env — idiomatic pattern for loading configuration

// When to use: 12-factor applications read config from env vars.


use std::string
use std::env

// Define a config struct to centralize all defaults.

struct Config {
  port: int,
  log_level: str,
  debug: bool,
  database_url: str,
}

fn parse_int(s: str?, default_v: int) -> int {
  if s == nil { return default_v }
  let n = string::to_int(s)
  if n == nil { return default_v }
  return n
}

fn parse_bool(s: str?) -> bool {
  if s == nil { return false }
  return s == "true" || s == "1" || s == "yes"
}

fn load_config() -> Config {
  return Config { port: parse_int(env.get("APP_PORT"), 8080), log_level: env.get("APP_LOG_LEVEL") ?? "info", debug: parse_bool(env.get("APP_DEBUG")), database_url: env.get("DATABASE_URL") ?? "postgres://localhost/dev" }
}

let cfg = load_config()
print(cfg.port)  // expected: 8080 (default)

print(cfg.log_level)  // expected: info (default)

Requiere la CLI o el host de Zolo; ábrelo en el playground o ejecútalo localmente.

Desafío

Define APP_PORT=3000 antes de ejecutar y verifica que cfg.port cambia de 8080 a 3000.

Buscar en Zolo

9 resultados

enespt-br