Pular para o conteúdo

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.

02-env-vars.zolo
Playground
// 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.

03-os-and-arch.zolo
Playground
// 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.

Buscar no Zolo

9 resultados

enespt-br