Variáveis de Ambiente e Plataforma
Nesta página
Variáveis de ambiente
env.get(key) retorna str | nil — combine com ?? para fornecer um padrão
sem nenhuma condicional extra. env.set e env.remove permitem mutar o ambiente
do processo atual (útil para propagá-lo a subprocessos ou em testes):
Define ZOLO_DEMO_VAR, lê com fallback ??, e depois a remove para mostrar que
env.get devolve nil quando a chave não existe.
// Feature: environment variables — `env.get`, `env.set`, `env.remove`
// Syntax: `env.get(key)` returns `str | nil`; `env.set(key, val)` mutates;
// `env.remove(key)` deletes; `env.all()` returns the full map.
// When to use: read config (`PORT`, `DATABASE_URL`), feature flags, secrets.
use std::env
// Set a var just for the demo.
env.set("ZOLO_DEMO_VAR", "hello-from-zolo")
// `env.get` returns nil if absent — combine with `??`.
let val = env.get("ZOLO_DEMO_VAR") ?? "(not set)"
print("ZOLO_DEMO_VAR = {val}")
// expected: ZOLO_DEMO_VAR = hello-from-zolo
// Typical config pattern: read with a default fallback.
let port = env.get("PORT") ?? "3000"
let log_level = env.get("LOG_LEVEL") ?? "info"
print("port: {port}, level: {log_level}")
// Clear it once we no longer need it.
env.remove("ZOLO_DEMO_VAR")
let removed = env.get("ZOLO_DEMO_VAR") ?? "(removed)"
print("after remove: {removed}")
// expected: after remove: (removed)
Detecção de plataforma
env.os() retorna "windows", "linux" ou "macos"; env.arch() retorna
"x64", "arm64" etc.; env.home_dir() devolve o diretório home do usuário
atual ou nil quando indisponível. Use esses valores para bifurcar comportamentos
dependentes de plataforma:
Imprime SO, arquitetura e home, depois demonstra uma função list_cmd() que
escolhe dir ou ls conforme o SO detectado.
// Feature: platform detection — `env.os()`, `env.arch()`, `env.home_dir()`
// Syntax: each is a no-arg function. `os()` returns `"windows"`,
// `"linux"`, or `"macos"`. `arch()` returns `"x64"`, `"arm64"`, etc.
// When to use: branching by platform (paths, different commands),
// multi-arch builds, telemetry.
use std::env
let os_name = env.os()
let arch = env.arch()
let home = env.home_dir() ?? "(home unavailable)"
print("OS: {os_name}")
print("ARCH: {arch}")
print("HOME: {home}")
// expected (Windows x64):
// OS: windows
// ARCH: x64
// HOME: C:\Users\<...>
// Pattern: a different command per OS.
fn list_cmd() -> str {
if env.os() == "windows" {
return "dir"
}
return "ls"
}
print("listing command on this platform: {list_cmd()}")
Desafio
Combine env.os() e env.arch() para montar um identificador de plataforma do
tipo "linux-arm64" e imprimir uma mensagem diferente para cada combinação.
Veja também