Pular para o conteúdo

18 · Módulos

Go com extern

Funções Go, dependências de módulos e callbacks pelo Zolo.

Nesta página

Importe go do plugin de mesmo nome. A assinatura usa tipos Zolo; o corpo usa Go e pode começar com imports nativos. Execute estes exemplos pelo CLI com o plugin Go instalado.

Chame funções Go tipadas, importe uma função exportada e aguarde uma operação em worker.

46-extern-go.zolo
Playground
// parity-timeout-ms:300000

use plugin go::{go}

extern go fn exact(value: int) -> int {
    return value
}

extern go fn upper(value: str) -> str {
    import "strings"
    return strings.ToUpper(value)
}

extern go async fn later(value: int) -> int {
    return value + 1
}

extern go from "./go_fixtures/math.go" use {Add}

print(exact(9007199254740993)) // expected: 9007199254740993

print(upper("hello Go")) // expected: HELLO GO

print(Add(left: 20, right: 22)) // expected: 42

print(await later(41)) // expected: 42

Requer a CLI/host do Zolo — abra no playground ou rode localmente.

int corresponde a int64, float a float64, str a string, bytes a []byte e arrays a slices. Structs públicas e mapas com chave string viram records copiados. Conversões de inteiros menores e sem sinal verificam o intervalo. Métodos com receiver e exports genéricos ou variádicos precisam de um adaptador concreto de função livre exportada.

O import parte do arquivo Zolo que o declara: extern go from "./math.go" use {Add}. Os nomes dos parâmetros exportados permitem chamadas nomeadas, como Add(left: 20, right: 22).

Módulos

Trave a versão de um módulo uma vez e use seu import nativo em uma função Go.

46-extern-go-modules.zolo
Playground
// Prepare with zolo install or opt into zolo run ... --install=auto.
use plugin go::{go}

extern go deps {
    "github.com/google/uuid" = "v1.6.0"
}

extern go fn valid(value: str) -> bool {
    import "github.com/google/uuid"
    _, err := uuid.Parse(value)
    return err == nil
}

print(valid("c9bba9c7-9d7a-4fbb-a2a5-dd344c9be6d1")) // expected: true

Requer a CLI/host do Zolo — abra no playground ou rode localmente.

Em um projeto maior, mova a dependência para o manifesto:

[foreign.go.dependencies]
"github.com/google/uuid" = "v1.6.0"

Execute zolo install main.zolo e depois zolo run main.zolo --offline --frozen. A resolução registra o grafo transitivo, hashes dos módulos e um cache privado. A compilação usa esse ambiente fechado com GOPROXY=off, GOWORK=off, GOTOOLCHAIN=local e seleção de módulos somente leitura. Uma versão direta exata que a seleção Go tentaria aumentar gera conflito. Assets nativos de dependências cgo precisam de uma declaração explícita para a distribuição.

Callbacks, async e distribuição

Um parâmetro fn(int) -> int vira um adaptador func Go válido durante a invocação. Ele permite voltar ao Zolo e fazer chamadas estrangeiras aninhadas. Não mantenha o callback emprestado nem o chame de uma goroutine independente.

extern go async fn executa código Go comum em um worker e representa a conclusão como Future Zolo. Uma goroutine isolada não define essa conclusão. Cancelar fecha a entrega de callbacks e resultados; não interrompe trabalho nativo arbitrário. Falhas (T, error) e panics da chamada exportada viram erros Zolo estruturados. Panics de goroutines independentes e falhas nativas irrecuperáveis mantêm o comportamento normal do processo.

A preparação precisa de Go, cgo e um compilador C compatível. ZOLO_GO seleciona Go e CC seleciona o compilador cgo. As consultas nativas do editor usam gopls via ZOLO_GOPLS. A análise preserva texto não salvo e não carrega a biblioteca autoral nem executa suas funções init.

Os artefatos mantêm código de máquina, metadados e snapshots do fonte. VM, native e LLVM suportam plugins dinâmicos, embutidos e estáticos sem os fontes, Go, compilador ou cache de módulos na distribuição. Os artefatos pertencem ao OS e arquitetura de compilação. A execução hospedada não está disponível em wasm-aot; a validação atual de runtime cobre Windows x64.

Índice global

Encontre seu caminho pela Zolo

Experimente uma ideia

Comece por aqui

9 resultados

9 resultados

enpt-br