Le seguenti sono le funzioni globali disponibili in tutte le pagine del template.
Oltre alle funzioni elencate, nei template sono disponibili anche le built-in di Go (con alcune eccezioni).
func hmacSHA1(message, key string) string
Ritorna la codifica HMAC, con algoritmo SHA1, del messaggio message
utilizzando key
come chiave.
func hmacSHA256(message, key string) string
Ritorna la codifica HMAC, con algoritmo hmacSHA256, del messaggio message
utilizzando key
come chiave.
func sha1(s string) string
Restituisce l'hash SHA1 di s
.
func sha256(s string) string
Restituisce l'hash SHA256 di s
.
func base64(s string) string
Codifica s
in formato Base64.
func hex(s string) string
Restituisce la codifica esadecimale della stringa s
.
func marshalJSON(v interface{}) (json, error)
Codifica v
in formato JSON. Per ulteriori dettagli si veda la documentazione della funzione json.Marshal della libreria standard Go.
func marshalJSONIndent(v interface{}, prefix, indent string) (json, error)
Ha lo stesso funzionamento di marshalJSON, ma l'output è formattato.
Ogni elemento del JSON generato comincerà su una nuova linea, e inizierà con il prefisso prefix
seguito da una o più copie di indent
in base all'allineamento richiesto.
prefix
e indent
possono contenere solamente caratteri di spaziatura: ' ', '\t', '\n' e '\r'.
func md5(s string) string
Restituisce l'hash MD5 della stringa s
.
func unmarshalJSON(data string, v interface{}) error
Interpreta la stringa JSON data
, e salva il valore ottenuto in una nuova variabile puntata da v
.
Se v
è nil
o non è un puntatore, unmarshalJSON restituisce un errore.
Per ulteriori dettagli si veda la documentazione della funzione json.Unmarshal della libreria standard Go.
func htmlEscape(s string) html
Sottopone ad escape s
ritornando una valore di tipo html dove i caratteri speciali dell'HTML sono sostituiti, come ad esempio "<" con "<".
func abs(x int) int
Restituisce il valore assoluto di x
.
func decimal(v Type) Decimal
Ritorna v
sotto forma di un valore Decimal
. v
può avere un qualsiasi tipo intero, float, stringa e Decimal
. Va in errore se v
non ha uno dei tipi indicati o se ha un tipo stringa e non rappresenta un numero decimale.
func max(x, y int) int
Restituisce il massimo tra x
ed y
.
func min(x, y int) int
Restituisce il minimo tra x
ed y
.
func parseDecimal(v interface{}) (Decimal, bool)
Ritorna v
sotto forma di un valore Decimal
e true
. v
può avere un qualsiasi tipo intero, float, stringa e Decimal
. Ritorna il decimale zero e false
se v
non ha uno dei tipi indicati o se ha un tipo stringa e non rappresenta un numero decimale.
func pow(x, y float64) float64
Restituisce x
elevato y
.
Per ulteriori dettagli si veda la documentazione della funzione math.Pow della libreria standard Go.
func cookie(name string) (string, bool)
Ritorna il valore del cookie con nome name
e true
. Se il cookie non esiste ritorna una stringa vuota e false
.
{% var value, ok = cookie("choice") %}
{% if ok %}
il valore del cookie è {{ value }}
{% else %}
il cookie non esiste
{% end %}
func isMailAddress(address string) bool
Indica se address
è un indirizzo email accettato dalla builtin
sendMail.
Attenzione: attualmente la builtin isMailAddress
non implementa
fedelmente le specifiche.
In particolare, anziché validare la componente name-addr
dell'indirizzo email, la builtin accetta qualunque sequenza di caratteri.
func sendMail(mail Mail) error
Invia l'email
. Nel caso in cui l'invio fallisca, sia per un
errore nei campi di mail
, sia per un problema di rete o interno, la
funzione restituisce un errore non nil
. Gli indirizzi email
contenuti nei campi di mail
possono essere validati con la builtin
isMailAddress prima di chiamare
sendMail
.
È possibile inviare le email solamente previa validazione del CAPTCHA. Si veda la sezione seguente.
Questo è un esempio di una pagina di template per l'invio di email, completo del codice di gestione del CAPTCHA:
{% extends "layouts/standard.html" %}
{% macro Head %}{% end %}
{% Main %}
<form method="POST">
<div class="captcha">{{ captcha }}</div>
<input type="submit" class="design-captcha">
</form>
{%%
submitted := form.Value("g-recaptcha-response") != ""
if submitted {
mail := Mail{
Subject: "Test",
From: "alice@example.com",
To: []string{"bob@example.com"},
Body: "email body",
}
err := sendMail(mail)
if err != nil {
show "Error while sending email: ", err
} else {
show "Email sent correctly"
}
}
%%}
In particolare, si noti:
POST
sulla pagina stessa<div class="captcha">{{ captcha }}</div>
,
che deve essere contenuto all'interno del formdesign-captcha
sendMail
, racchiuso all'interno di una condizione che verifica
la presenza del valore del form g-recaptcha-response
.
Sono previsti dei limiti nell'invio di email con sendMail
:
sendMail
può inviare email al più a 2
indirizzi
To
sendMail
può inviare email al più a 2
indirizzi
Cc
sendMail
può inviare email al più a 2
indirizzi
Ccn
Qualora il numero massimo di email inviabili non fosse sufficiente, contattaci.
func queryEscape(s string) string
Sottopone ad escape s
ritornando una nuova stringa dove i caratteri speciali dei valori di un query string sono sostituiti.
func setCookie(name, value string, maxAge int, httpOnly bool)
Imposta un cookie con nome name
e valore value
da ritornare negli header della risposta. httpOnly
indica se il cookie ha l'attributo "HttpOnly" e maxAge
ha il seguente significato:
Se name
non è un nome di cookie valido, setCookie
non fa nulla.
func regexp(expr string) Regexp
Parsa l'espressione regolare expr
e ritorna un valore Regexp
che può essere usato per fare ricerche di testo secondo l'espressione data. Si verifica un errore se expr
non è una espressione regolare valida.
func reverse(slice interface{})
Mette gli elementi di slice
in ordine inverso. Se slice
non è uno slice allora va in errore.
func sort(slice Type, before func(i, j int) bool)
Ordina gli elementi di slice
. Se Slice
non è uno slice, sort
va in errore.
La funzione before
, se non è nil
, indica se l'elemento di indice i
dovrà essere dopo l'ordinamento prima dell'elemento di indice j
. Se la la funzione before
è nil
, allora sort
ordina gli elementi secondo un ordinamento naturale in base al loro tipo.
{% var s = []int{3, 5, 2, 9, 7} %}
{% sort(s, nil) %}
{{ sort }}
2 3 5 7 9
{% var s = []int{3, 5, 2, 9, 7} %}
{% var before = func(i, j int) bool { return s[i] > s[j] } %}
{% sort(s, before) %}
{{ s }}
9 7 5 3 2
func formatFloat(f float64, format string, precision int) string
Converte il numero in virgola mobile f
in una stringa, in base al formato e alla precisione dati. Potrebbe arrotondare il risultato.
Il formato format
è uno tra "e", "f" or "g".
"e": -d.dddde±dd, notazione esponenziale
"f": -ddd.dddd
"g": "e" per esponenti grandi, "f" altrimenti.
La precisione precision
, che può assumere valori tra -1 e 1000, indica il numero di cifre decimali (esponente escluso). La precisione -1 usa il minor numero di cifre decimali possibile tale che parseFloat restituisca esattamente f.
Per i formati "e" e "f" indica il numero di cifre decimali, per il formato "g" è il massimo numero di cifre significative, eventuali cifre zero alla fine vengono rimosse.
Va in panic se il formato o la precisione non sono validi.
func formatInt(i int, base int) string
Restituisce la rappresentazione dell'intero i
nella base fornita, per 2 <= base
<= 36. Il risultato usa le lettere minuscole dalla 'a' alla 'z' per le cifre di valore >= 10.
Va in panic se base
non è nell'intervallo di valori validi.
func parseFloat(s string) (float64, error)
Converte la stringa s
in un valore float64.
func parseInt(s string, base int) (int, error)
Interpreta la stringa s
nella base data, per 2 <= base
<= 36, e restituisce il corrispondente valore. Restituisce 0 e un errore se s
è vuota, contiene cifre non valide o il valore corrispondente a s
non può essere rappresentato da un int.
func abbreviate(s string, n int) string
Restituisce una versione abbreviata di s
, lunga al massimo n
caratteri.
func assetURL(name string) string
Restituisce l'URL di un asset dato il nome name
. Gli asset sono i file nella cartella del template come file CSS e le immagini. Se name
non è valido, come ad esempio i file con estensione "html", ritorna una stringa vuota.
<img src="{{ assetURL(`/images/picture.png`) }}">
<img src="https://cdn.shop.com/images/picture.png">
<script> var url = {{ assetURL("/images/picture.png") }}; </script>
<script> var url = "https://cdn.shop.com/images/picture.png"; </script>
func capitalize(s string) string
Restituisce una copia di s
con la prima lettera della prima parola messa in maiuscolo.
func capitalizeAll(s string) string
Restituisce una copia di s
con la prima lettera di ogni parola messa in maiuscolo.
func hasPrefix(s, prefix string) bool
Indica se la stringa s
ha il prefisso prefix
.
func hasSuffix(s, suffix string) bool
Indica se la stringa s
ha il suffisso suffix
.
func index(s, substr string) int
Restituisce l'indice di substr
all'interno di s
. Se substr
non è presente in s
la funzione ritorna -1
.
Come per la strings.Index
della libreria standard di Go, l'indice ritornato è riferito ai bytes e non ai caratteri della stringa s
.
func indexAny(s, chars string) int
Restituisce l'indice della prima occorrenza in s
di uno qualunque dei caratteri di chars
.
Come per la strings.Index
della libreria standard di Go, l'indice ritornato è riferito ai bytes e non ai caratteri della stringa s
.
func join(a []string, sep string) string
Concatena le stringhe contenute in a
utilizzando il separatore sep
.
func lastIndex(s, sep string) int
Restituisce l'indice dell'ultima occorrenza di sep
all'interno di s
.
Come per la strings.Index
della libreria standard di Go, l'indice ritornato è riferito ai bytes e non ai caratteri della stringa s
.
func replace(s, old, new string, n int) string
Sostituisce le prime n
occorrenze della stringa n
con la stringa new
all'interno di s
.
func replaceAll(s, old, new string) string
Sostituisce tutte le occorrenze della stringa old
con la stringa new
all'interno di s
.
func runeCount(s string) int
Restituisce il numero di rune (Unicode code point) in s
. Per contare il numero di "caratteri" in una stringa allora runeCount
è la funzione più appropriata in quanto len
restituisce il numero di byte.
func split(s, sep string) []string
Divide s
in sotto-stringhe utilizzando sep
come separatore.
func splitAfter(s, sep string) []string
Come split ma divide s
dopo il separatore sep
. Ad esempio:
{% for s in splitAfter("<section><div>a</div><div>b</div></section>", ">") %}
{{ s }}
{% end %}
<section>
a</div>
<div>
b</div>
</section>
func splitAfterN(s, sep string, n int) []string
Come splitN ma divide s
dopo il separatore sep
.
func splitN(s, sep string, n int) []string
Divide s
in sotto-stringhe utilizzando sep
come separatore, limitando ad n
il numero di sotto-stringhe.
func sprint(a ...interface{}) string
Formatta gli argomenti e restituisce una stringa. Ad esempio:
{% const name, age = "Sherlock Holmes", 60 %}
{{ sprint(name, " is ", age, " years old") }}
Sherlock Holmes is 60 years old
sprint
accetta gli stessi argomenti e si comporta come la funzione fmt.Sprint della libreria standard di Go.
func sprintf(format string, a ...interface{}) string
Formatta, secondo format
, gli argomenti e restituisce una stringa. Ad esempio:
{% const name, age = "Sherlock Holmes", 60 %}
{{ sprintf("%s is %d years old", name, age) }}
Sherlock Holmes is 60 years old
sprintf
accetta gli stessi argomenti e si comporta come la funzione fmt.Sprintf della libreria standard di Go.
func toKebab(s string) string
Restituisce una copia di s
in formato kebab case.
{{ toKebab("borderTopColor") }}
border-top-color
func toLower(s string) string
Restituisce una copia di s
con tutti i caratteri minuscoli.
func toUpper(s string) string
Restituisce una copia di s
con tutti i caratteri maiuscoli.
func translate(key string) html
Restituisce la traduzione, letta dal template, per la data chiave nella lingua corrente. Se la traduzione non esiste ritorna htmlEscape(key)
.
func trim(s string, cutset string) string
Restituisce una parte della stringa s
con tutti i caratteri contenuti in cutset
che si trovano all'inizio ed alla fine di s
rimossi.
func trimLeft(s string, cutset string) string
Restituisce una parte della stringa s
con tutti i caratteri contenuti in cutset
all'inizio di s
rimossi.
func trimPrefix(s, prefix string)
Restituisce s
senza il prefisso prefix
.
func trimRight(s string, cutset string) string
Restituisce una parte della stringa s
con tutti i caratteri contenuti nel cutset
alla fine di s
rimossi.
func trimSuffix(s, suffix string) string
Restituisce s
senza il suffisso suffix
.
func date(year, month, day, hour, min, sec, nsec int, location string) (Time, error)
Restituisce il Time
corrispondente alla data fornita, con il time zone della location location
, se la location
non esiste, restituisce un errore.
Ad esempio, la Seguente chiamata restituisce il Time
per il 27 Marzo 2021, 11:21:14.964553705 CET.
date(2021, 3, 27, 11, 21, 14, 964553705, "Europe/Rome")
func now() Time
Restituisce il Time
locale corrente.
func parseDuration(s string) (Duration, error)
Parsa la stringa di durata s
e restituisce la corrispondente Duration
.
Una stringa di durata è una sequenza (opzionalmente con segno) di numeri decimali con suffisso di unità, come ad esempio "300ms", "-1.5h" o "2h45m".
Le unità di misura valide sono "ns", "us" (o "µs"), "ms", "s", "m", "h".
func parseTime(layout, value string) (Time, error)
una stringa formattata e restituisce il valore Time
corrispondente.
Per ulteriori dettagli si veda la documentazione della funzione time.Parse della libreria standard Go.
func unixTime(sec int64, nsec int64) Time
Restituisce il Time
locale corrispondente al tempo Unix fornito, come sec
secondi e nsec
nanosecondi dal 1° gennaio 1970 UTC.
s
in quanto utilizzando le funzioni di questo package
si evita il controllo dei tipi del template e ci si può esporre a malfunzionamenti del template e rischi di sicurezza.
func ToCSS(s string) css
Restituisce s
ma con il tipo css
.
unsafeconv.ToCSS("data:image/gif;base64," + base64(image))
func ToHTML(s string) html
Restituisce s
ma con il tipo html
.
unsafeconv.ToHTML(`see this page`)
func ToJS(s string) js
Restituisce s
ma con il tipo js
.
unsafeconv.ToJS("var a = " + v + ";")
func ToJSON(s string) json
Restituisce s
ma con il tipo json
.
unsafeconv.ToJSON(`{ "config": ` + config + ` }`)
func ToMarkdown(s string) markdown
Restituisce s
ma con il tipo markdown
.
unsafeconv.ToJSON(`{ "config": ` + config + ` }`)
func len(v Type) int
Restituisce la lunghezza di v
in base al suo tipo:
v
v
; se v
è nil
ritorna 0Usare la funzione runeCount per avere la lunghezza di una stringa in rune invece che in byte.
func snippet(name string) Snippet
Ritorna lo snippet con nome name
. Il valore ritornato può essere usato direttamente con {{...}}
.
{{ snippet("rating") }}
Se lo snippet non esiste, il precedente esempio visualizza un commento HTML con il messaggio di errore.