Open2b versione 7.2

Funzioni

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).

crypto

encoding

html

math

net

regexp

sort

strconv

strings

time

unsafeconv

Il package unsafeconv mette a disposizione diverse funzioni per effettuare conversioni unsafe da stringa ad altri tipi nativi.

altre funzioni

crypto

hmacSHA1

func hmacSHA1(message, key string) string

Ritorna la codifica HMAC, con algoritmo SHA1, del messaggio message utilizzando key come chiave.

hmacSHA256

func hmacSHA256(message, key string) string

Ritorna la codifica HMAC, con algoritmo hmacSHA256, del messaggio message utilizzando key come chiave.

sha1

func sha1(s string) string

Restituisce l'hash SHA1 di s.

sha256

func sha256(s string) string

Restituisce l'hash SHA256 di s.

encoding

base64

func base64(s string) string

Codifica s in formato Base64.

hex

func hex(s string) string

Restituisce la codifica esadecimale della stringa s.

marshalJSON

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.

marshalJSONIndent

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'.

md5

func md5(s string) string

Restituisce l'hash MD5 della stringa s.

unmarshalJSON

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.

html

htmlEscape

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 "&lt;".

math

abs

func abs(x int) int

Restituisce il valore assoluto di x.

decimal

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.

max

func max(x, y int) int

Restituisce il massimo tra x ed y.

min

func min(x, y int) int

Restituisce il minimo tra x ed y.

parseDecimal

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.

pow

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.

net

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.

Esempio

{% var value, ok = cookie("choice") %}
{% if ok %}
  il valore del cookie è {{ value }}
{% else %}
  il cookie non esiste
{% end %}

isMailAddress

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.

sendMail

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.

Esempio

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:

Limiti nell'invio di email

Sono previsti dei limiti nell'invio di email con sendMail:

Qualora il numero massimo di email inviabili non fosse sufficiente, contattaci.

queryEscape

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.

setCookie

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.

regexp

regexp

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.

sort

reverse

func reverse(slice interface{})

Mette gli elementi di slice in ordine inverso. Se slice non è uno slice allora va in errore.

sort

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.

Esempi

{% var s = []int{3, 5, 2, 9, 7} %}
{{ sort(s, nil) %}
2 3 5 7 9
{% var s = []int{3, 5, 2, 9, 7} %}
{% var before = func(i, j int) int { return s[i] > s[j] }) %}
{{ sort(s, before) }}
9 7 5 3 2

strconv

formatFloat

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.

formatInt

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.

parseFloat

func parseFloat(s string) (float64, error)

Converte la stringa s in un valore float64.

parseInt

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.

strings

abbreviate

func abbreviate(s string, n int) string

Restituisce una versione abbreviata di s, lunga al massimo n caratteri.

assetURL

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.

Esempi

<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>

capitalize

func capitalize(s string) string

Restituisce una copia di s con la prima lettera della prima parola messa in maiuscolo.

capitalizeAll

func capitalizeAll(s string) string

Restituisce una copia di s con la prima lettera di ogni parola messa in maiuscolo.

hasPrefix

func hasPrefix(s, prefix string) bool

Indica se la stringa s ha il prefisso prefix.

hasSuffix

func hasSuffix(s, suffix string) bool

Indica se la stringa s ha il suffisso suffix.

index

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.

indexAny

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.

join

func join(a []string, sep string) string

Concatena le stringhe contenute in a utilizzando il separatore sep.

lastIndex

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.

replace

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.

replaceAll

func replaceAll(s, old, new string) string

Sostituisce tutte le occorrenze della stringa old con la stringa new all'interno di s.

runeCount

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.

split

func split(s, sep string) []string 

Divide s in sotto-stringhe utilizzando sep come separatore.

splitAfter

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>

splitAfterN

func splitAfterN(s, sep string, n int) []string 

Come splitN ma divide s dopo il separatore sep.

splitN

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.

sprint

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.

sprintf

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.

toKebab

func toKebab(s string) string

Restituisce una copia di s in formato kebab case.

Esempio

{{ toKebab("borderTopColor") }}
border-top-color

toLower

func toLower(s string) string

Restituisce una copia di s con tutti i caratteri minuscoli.

toUpper

func toUpper(s string) string

Restituisce una copia di s con tutti i caratteri maiuscoli.

translate

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).

trim

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.

trimLeft

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.

trimPrefix

func trimPrefix(s, prefix string)

Restituisce s senza il prefisso prefix.

trimRight

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.

trimSuffix

func trimSuffix(s, suffix string) string

Restituisce s senza il suffisso suffix.

time

date

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")

now

func now() Time

Restituisce il Time locale corrente.

parseDuration

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".

parseTime

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.

unixTime

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.

unsafeconv

Il package unsafeconv mette a disposizione alcune funzioni per fare conversioni insicure tra stringhe e tipi nativi.
È importante, essere assolutamente sicuri del contenuto di 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.

ToCSS

func ToCSS(s string) css

Restituisce s ma con il tipo css.

Esempio

unsafeconv.ToCSS("data:image/gif;base64," + base64(image))

ToHTML

func ToHTML(s string) html

Restituisce s ma con il tipo html.

Esempio

unsafeconv.ToHTML(`see this page`)

ToJS

func ToJS(s string) js

Restituisce s ma con il tipo js.

Esempio

unsafeconv.ToJS("var a = " + v + ";")

ToJSON

func ToJSON(s string) json

Restituisce s ma con il tipo json.

Esempio

unsafeconv.ToJSON(`{ "config": ` + config + ` }`)

ToMarkdown

func ToMarkdown(s string) markdown

Restituisce s ma con il tipo markdown.

Esempio

unsafeconv.ToJSON(`{ "config": ` + config + ` }`)

len

func len(v Type) int

Restituisce la lunghezza di v in base al suo tipo:

Usare la funzione runeCount per avere la lunghezza di una stringa in rune invece che in byte.

snippet

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.