Programación en Go. Mario Macías Lloret
Чтение книги онлайн.
Читать онлайн книгу Programación en Go - Mario Macías Lloret страница 10
Ejemplo:
x := 33 fmt.Println("Hola, número", x, "!")
Salida estándar:
Hola, número 33 !
La diferencia entre fmt.Print y fmt.Println es que fmt.Println añade un salto de línea al final. Es decir, sucesivas invocaciones a fmt.Print serían mostradas una detrás de otra, en la misma línea; mientras que sucesivas invocaciones a fmt.Println serían mostradas en diferentes líneas, una debajo de otra.
Cuando requiera un control más exhaustivo de cómo se deben mostrar los datos, la función fmt.Printf admite una cadena de texto en la que puede colocar unas “marcas de formato”, conocidas como verbos. A continuación, separados por comas, se colocan los datos que Go debe introducir en el lugar de cada uno de los verbos.
Por ejemplo, el siguiente ejemplo intercala los verbos %v, que muestran el valor de una variable, y que serán substituidos por las variables a continuación del texto de formato, en orden de aparición:
cosa := "depósito" x := 36 y := 84 fmt.Printf("Coordenadas de %v: (%v, %v)\n", cosa, x, y)
Salida estándar:
Coordenadas de depósito: (36, 84)
Observe que fmt.Printf no añade ninguna nueva línea al final, por lo que si necesita que el siguiente texto aparezca en la línea siguiente, debe finalizar la cadena de formato con el carácter especial de nueva línea: '\n'.
La tabla de la Figura 2.5 muestra algunos otros verbos útiles aceptados por fmt.Printf. Para más detalles, visite la documentación del paquete fmt a través del comando godoc que se introdujo en el capítulo anterior.
Figura 2.5 Algunos verbos útiles para fmt.Printf.
2.13 ENTRADA ESTÁNDAR DE DATOS
La entrada estándar permite a un programa de Go obtener datos desde el exterior, a través del teclado en la línea de comandos.
Go proporciona dos funciones para obtener datos desde la entrada estándar:
fmt.Scan fmt.Scanf
fmt.Scan lee los datos del teclado y los guarda en las variables pasadas en la invocación. Cada variable debe ir precedida por el símbolo ampersand, & (sabrá el por qué cuando llegue al capítulo 4, sobre apuntadores). Por ejemplo:
var edad int fmt.Print("Edad? ") fmt.Scan(&edad) fmt.Println("Tienes", edad, "años")
Ejemplo de entrada y salida estándar:
Edad? 36 Tienes 36 años
En el ejemplo anterior, si los datos introducidos no fueran un número entero válido, ignoraría la entrada:
Edad? manuel Tienes 0 años
fmt.Scanf permite especificar con más detalle el formato de la entrada, tomando como primer parámetro una cadena de texto en la que se pueden introducir los diversos verbos (como los de la tabla de la Figura 2.5), que se colocarían en sus respectivas variables, ya que tanto fmt.Scan como fmt.Scanf aceptan múltiples variables:
var hora, minuto, segundo int fmt.Print("HH:MM:SS? ") fmt.Scanf("%d:%d:%d", &hora, &minuto, &segundo) fmt.Printf("%d horas, %d minutos, %d segundos", hora, minuto, segundo)
Ejemplo de entrada y salida estándar:
HH:MM:SS? 12:34:56 12 horas, 34 minutos, 56 segundos
Capítulo 3
CONTROL DE FLUJO
Los programas de ejemplo mostrados hasta ahora seguían un “flujo secuencial”: las operaciones se ejecutan una a una, según su orden descendiente de escritura.
Como en los demás lenguajes de programación, Go permite alterar el flujo secuencial mediante los bloques de control de flujo, que se agrupan en dos tipos:
• Condicionales. Permiten que un bloque de instrucciones se ejecute o no, dependiendo de si se cumple una condición en el programa.
• Iterativos. Permiten que un bloque de instrucciones se ejecute repetidamente mientras se dé una condición.
Por “condición” entendemos cualquier expresión booleana que retorne true o false, como las mostradas en el capítulo anterior.
3.1 BLOQUES CONDICIONALES
3.1.1 if
El bloque if permite agrupar un conjunto de instrucciones que se ejecutarán si —y solo si— su condición asociada es true. Su estructura es:
Por ejemplo, el siguiente programa genera un número aleatorio, e informa de que el número generado es par. Dicho mensaje de información solo se mostrará si el número es realmente par:
Nótese la importación del paquete math/rand y el uso del comando rand. Int() para la generación de números aleatorios.
En el programa anterior, el mensaje dentro del bloque if se ejecutará solo si el número aleatorio es divisible por dos (el resto de su división entera es 0).
Si no se quiere considerar el valor 0 como número par, la condición del bloque if podría completarse mediante el uso de los operadores lógicos vistos en el capítulo anterior:
if valor != 0 && valor%2 == 0
3.1.2 if ... else
Un bloque if puede ser inmediatamente continuado por un bloque else, que ejecutaría el bloque de instrucciones asociado si —y solo si— la condición del if es false. Basándonos en el anterior ejemplo: