Pular para o conteúdo

Sintaxe

O texto é impresso como está. Uma ação é tudo o que está dentro de {{ e }}.

Olá {{ .User.Username }}!
{{/* Isto é um comentário, não é impresso */}}

{{- remove os espaços, tabulações e quebras de linha antes da ação, e -}} os que vêm depois.

a {{- "b" -}} c

imprime abc. Sem os traços, os espaços seriam impressos.

Tipo Exemplos Notas
Texto "olá", "quebra\nde linha", `texto cru` Em "..." você pode escrever \n, \t, \r, \" e \\. O texto entre crases não é alterado
Número 5, -3, 2.5
Booleano true, false
Nil nil Sem valor
Lista cslice 1 2 3 Veja Funções
Mapa sdict "a" 1 "b" 2 Nomes e valores

Os IDs são texto. Um ID do Discord tem 18 dígitos e um número tão grande perde os últimos, então escreva os IDs entre aspas: "123456789012345678". Escrever um como número é um erro avisado quando o código é verificado.

Em uma condição, isto é falso: false, nil, 0, um texto vazio "", uma lista vazia e um mapa vazio. Todo o resto é verdadeiro.

Valor É impresso como
Texto O texto
Número 5, 2.5
Booleano true, false
Nil Nada
Lista [1 2 3]
Mapa map[a:1 b:2]

Os dados que o código pode ler são escritos com um ponto: .User.Username. . sozinho é o valor atual, e $ é sempre todo o conjunto de dados, mesmo dentro de um laço. Veja Dados.

Ler um nome que não existe dá nil. Ler dentro de nil (.Nope.Deep quando .Nope é nil) é um erro.

{{ $count := 0 }} {{/* criar */}}
{{ $count = add $count 1 }} {{/* alterar */}}
{{ $count }}
  • := cria uma variável no bloco atual. = altera uma que já existe, de qualquer bloco dentro dele.
  • Uma variável criada dentro de if, range ou with só existe até o seu end.
  • Usar uma variável que não foi criada é um erro.

Uma função é escrita primeiro e seus argumentos vêm depois, separados por espaços. Os parênteses chamam uma função dentro de outra.

{{ add 1 2 }} {{/* 3 */}}
{{ sub 10 (mult 2 3) }} {{/* 4 */}}
{{ printf "%s tem %d" "Liam" 5 }}

Uma função não pode ser usada como valor sem ser chamada.

| entrega o resultado da sua esquerda à função da sua direita como último argumento, como nos templates do Go.

{{ " olá " | trim | upper }} {{/* OLÁ */}}
{{ 3 | add 4 | mult 2 }} {{/* mult 2 (add 4 3) = 14 */}}

Como o valor vai por último, tenha cuidado com as funções que recebem primeiro o valor principal, como split e join: {{ join (split "a-b" "-") "+" }} é mais claro que um pipe.

{{ if eq .User.Username "Liam" }}
Oi Liam!
{{ else if gt (len .Args) 2 }}
Muitos argumentos.
{{ else }}
Olá.
{{ end }}

else if e else são opcionais. A condição é qualquer valor, com as regras de verdadeiro e falso acima.

with executa o seu bloco só se o valor for verdadeiro, e dentro dele . é esse valor:

{{ with .Member }}{{ .Nick }}{{ else }}Sem membro{{ end }}
{{ range $index, $value := .Args }}{{ $index }}: {{ $value }}
{{ end }}
Forma O que faz
range $i, $v := lista Índice e valor
range $v := lista Só o valor
range lista Só o valor, como .
range $k, $v := mapa Chave e valor, em ordem alfabética das chaves
  • {{ break }} sai do laço e {{ continue }} vai para a próxima volta. Só funcionam dentro de um range.
  • {{ else }} em um range é executado quando a lista está vazia.
  • {{ return }} interrompe o código na hora. O que foi impresso antes fica.
  • Para repetir algo um número de vezes: {{ range seq 0 5 }}...{{ end }}.

and e or sempre olham todos os seus argumentos antes de decidir, não param no primeiro.