DMarlon Studio

Lección 4 · 4 de 20

Textos y Printf · Go

Junte textos con + y dé formato a la salida en Go con fmt.Printf y fmt.Sprintf: los verbos %s, %d, %.2f, %v y %q, y los anchos de columna.

Go · Textos y Printf en DMarlon Studio: el código del ejemplo y su salida en la terminal

Los textos (string) se unen con +: product + " beans" da Coffee beans. len(label) cuenta su longitud en bytes, que coincide con los caracteres mientras no haya tildes ni símbolos especiales; en la lección 18 verá por qué.

fmt.Printf escribe un texto con verbos que se sustituyen, en orden, por los valores que siguen: %s para un texto, %d para un entero y %.2f para un número con dos decimales. A diferencia de Println, no salta de línea por sí solo: el \n va al final del formato.

%v escribe cualquier valor en su forma natural y %q pone el texto entre comillas, útil para ver si sobran espacios. Un número entre el % y la letra fija el ancho: %-8s ocupa 8 posiciones alineado a la izquierda y %6.2f, 6 posiciones alineado a la derecha, así que las filas forman columnas.

fmt.Sprintf acepta lo mismo que Printf pero, en vez de escribir, devuelve el texto, que aquí se guarda en receipt para usarlo después. Por último, para escribir el propio signo del tanto por ciento se duplica: %d%% da 21%.

Código · main.go

package mainimport "fmt"func main() {	product := "Coffee"	price := 3.5	units := 4	// + joins strings; len counts their bytes.	label := product + " beans"	fmt.Println(label, "has", len(label), "characters")	// Printf fills each verb with a value, in order.	fmt.Printf("%s costs %.2f euros\n", product, price)	fmt.Printf("%d units: %.2f euros\n", units, price*float64(units))	// %v prints any value; %q adds quotes.	fmt.Printf("%v | %v | %q\n", units, price, product)	// A width lines up columns: %-8s to the left, %6.2f to the right.	fmt.Printf("%-8s|%6.2f|\n", "Tea", 2.25)	fmt.Printf("%-8s|%6.2f|\n", "Cocoa", 12.4)	fmt.Printf("%-8s|%6d|\n", "Units", units)	// Sprintf returns the text instead of printing it.	receipt := fmt.Sprintf("%dx %s = %.2f", units, product, price*float64(units))	fmt.Println("Receipt:", receipt)	fmt.Printf("VAT: %d%%\n", 21) // %% writes a percent sign}

Salida · go run main.go

Coffee beans has 12 characters
Coffee costs 3.50 euros
4 units: 14.00 euros
4 | 3.5 | "Coffee"
Tea     |  2.25|
Cocoa   | 12.40|
Units   |     4|
Receipt: 4x Coffee = 14.00
VAT: 21%

Para recordar

  • + une textos; len cuenta bytes.
  • %s texto, %d entero, %.2f decimales, %v cualquier valor.
  • %-8s y %6.2f fijan el ancho para alinear columnas.
  • Printf necesita \n al final.
  • Sprintf devuelve el texto en vez de escribirlo.

Ejercicio

Escriba un tique con tres productos: el nombre a la izquierda en 10 posiciones, y la cantidad y el precio a la derecha; añada una última línea con el total, construida con Sprintf.