Sintaxe
Texto e ações
Seção intitulada “Texto e ações”O texto é impresso como está. Uma ação é tudo o que está dentro de {{ e }}.
Olá {{ .User.Username }}!Comentários
Seção intitulada “Comentários”{{/* Isto é um comentário, não é impresso */}}Remover espaços em branco
Seção intitulada “Remover espaços em branco”{{- remove os espaços, tabulações e quebras de linha antes da ação, e -}} os que vêm depois.
a {{- "b" -}} cimprime abc. Sem os traços, os espaços seriam impressos.
Valores
Seção intitulada “Valores”| 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.
O que é verdadeiro e o que é falso
Seção intitulada “O que é verdadeiro e o que é falso”Em uma condição, isto é falso: false, nil, 0, um texto vazio "", uma lista vazia e um mapa vazio. Todo o
resto é verdadeiro.
Como os valores são impressos
Seção intitulada “Como os valores são impressos”| 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.
Variáveis
Seção intitulada “Variáveis”{{ $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,rangeouwithsó existe até o seuend. - Usar uma variável que não foi criada é um erro.
Funções
Seção intitulada “Funções”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.
Condições
Seção intitulada “Condições”{{ 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 umrange.{{ else }}em umrangeé 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 }}.
Bom saber
Seção intitulada “Bom saber”and e or sempre olham todos os seus argumentos antes de decidir, não param no primeiro.
