Lección 5 · 5 de 20
Leer del teclado · Go
Lea líneas del teclado en Go con bufio.Scanner y conviértalas en números con strconv.Atoi y strconv.ParseFloat para hacer cuentas.

bufio.NewScanner(os.Stdin) crea un Scanner que lee la entrada estándar, es decir, lo que se teclea. Cada scanner.Scan() espera una línea y scanner.Text() la devuelve, ya sin el salto de línea final.
En este ejemplo las respuestas salen del archivo input.txt, como si alguien las tecleara, y por eso no aparecen en la salida: se ve la pregunta, escrita con fmt.Print para que la respuesta quede en la misma línea, y a continuación la contestación del programa. En la consola de DMarlon Studio puede escribirlas usted mismo.
Text() siempre da un texto, aunque se teclee 29. Para hacer cuentas hay que convertirlo: strconv.Atoi lo pasa a int y devuelve dos valores, el número y un error. Si el texto no es un número, err no es nil, y el programa avisa y termina con return. Los errores tienen su propia lección, la 13.
strconv.ParseFloat(texto, 64) convierte a float64. Aquí el error se descarta con _, el identificador vacío, porque el ejemplo da por hecho que el precio es correcto: tres entradas de 8.50 cuestan 25.50 euros.
Código · main.go
package mainimport ( "bufio" "fmt" "os" "strconv")func main() { // A Scanner reads the keyboard (standard input) line by line. scanner := bufio.NewScanner(os.Stdin) fmt.Print("What is your name? ") scanner.Scan() name := scanner.Text() fmt.Printf("Nice to meet you, %s!\n", name) // Text() is always a string: convert it to do maths. fmt.Print("How old are you? ") scanner.Scan() age, err := strconv.Atoi(scanner.Text()) if err != nil { fmt.Println("That is not a whole number.") return } fmt.Printf("In 10 years you will be %d.\n", age+10) fmt.Print("Price of a cinema ticket? ") scanner.Scan() price, _ := strconv.ParseFloat(scanner.Text(), 64) fmt.Printf("Three tickets cost %.2f euros.\n", price*3)}Entrada (lo que se teclea) · input.txt
Lucia 29 8.50
Salida · go run main.go
What is your name? Nice to meet you, Lucia! How old are you? In 10 years you will be 39. Price of a cinema ticket? Three tickets cost 25.50 euros.
Para recordar
bufio.NewScanner(os.Stdin)lee el teclado.scanner.Scan()lee una línea yscanner.Text()la da.- Lo leído es texto:
strconv.Atoiystrconv.ParseFloatlo convierten. - Las conversiones devuelven también un error;
niles que todo fue bien. _descarta un valor que no se va a usar.
Ejercicio
Pida también cuántas entradas se quieren comprar, conviértalo con strconv.Atoi comprobando el error, y escriba el precio total con dos decimales.