Formattazione Stringhe

La funzione Printf() del package fmt produce stringhe formattate con un meccanismo molto simile a quello del C, C++ e Java.

Attenzione però che i segnalini posizionali disponibili sono leggermente diversi e propri di Go.

(450string-formatting.go):

package main

import "fmt"
import "os"

type point struct {
	x, y int
}

func main() {

	// Valori di oggetto composto
	p := point{1, 2}
	fmt.Printf("%v\n", p)

	// Chiavi e valori di una struct
	fmt.Printf("%+v\n", p)

	// Rappresentazione in sintassi Go
	fmt.Printf("%#v\n", p)

	// Tipo di un valore
	fmt.Printf("%T\n", p)

	// Valore booleano
	fmt.Printf("%t\n", true)

	// Intero decimale
	fmt.Printf("%d\n", 123)

	// Intero in rappresentazione binaria
	fmt.Printf("%b\n", 14)

	// Carattere corrispondente a un valore Unicode
	fmt.Printf("%c\n", 33)

	// Intero in esadecimale
	fmt.Printf("%x\n", 456)

	// Float
	fmt.Printf("%f\n", 78.9)

	// Float in rappresentazione scientifica
	fmt.Printf("%e\n", 123400000.0)
	fmt.Printf("%E\n", 123400000.0)

	// Stringa
	fmt.Printf("%s\n", "\"string\"")

	// Stringhe con doppio quoting
	fmt.Printf("%q\n", "\"string\"")

	// Stringhe in base-16 due caratteri per byte
	fmt.Printf("%x\n", "hex this")

	// Puntatore
	fmt.Printf("%p\n", &p)

	// Intero con larghezza di campo, a destra
	fmt.Printf("|%6d|%6d|\n", 12, 345)

	// Float con larghezza di campo e numero decimali
	fmt.Printf("|%6.2f|%6.2f|\n", 1.2, 3.45)

	// Allineato a sinistra
	fmt.Printf("|%-6.2f|%-6.2f|\n", 1.2, 3.45)

	// Larghezza di campo per stringhe, a destra
	fmt.Printf("|%6s|%6s|\n", "foo", "b")

	// Larghezza di campo per stringhe, a sinistra
	fmt.Printf("|%-6s|%-6s|\n", "foo", "b")

	// Stampa dentro una stringa
	s := fmt.Sprintf("a %s", "string")
	fmt.Println(s)

	// Stampa ad altro 'file' qui standard error
	fmt.Fprintf(os.Stderr, "an %s\n", "error")
}

La funzione Fprintf() è interessante: prende come ulteriore primo argomento il file descriptor a cui inviare la stampa.
La funzione Printf() invia la stampa a standard output.
I tre file descriptor di default dei processi Unix sono in Go rappresentati con os.Stdin, os.Stdout e os.Stderr.
Ma dato che in Unix un file è un file e può essere qualsiasi cosa sia leggibile o scrivibile, il primo argomanto può essere anche:

  • un file descriptor di file aperto
  • una connessione a database
  • una connessione di rete
  • un identificativo di web server
  • ...