Impresión resultado en la consola en Go

En este artículo vamos a dar una explicación en sobre como podemos imprimir resultados en la pantalla o consola atráves de la función print en Go. Al igual que en Unix y C, Go también proporciona una variedad de formas de imprimir resultados en pantalla o consola.

Todas estas funcionalidades se utiliza el paquete fmt en Go. El paquete fmt en Go implementa funciones de E/S que son comparables a las funciones printf y scanf en C.

La sintaxis es un copia de C, pero la implementación es más sencilla en Go. Para saber mas sobre el paquete fmt en Go, lea este artículo. La forma más sencilla de iniciar con el paquete fmt en Go, es através de las funciones println y printf.

Ejemplo de la función Println

package main

import "fmt"

func main() {
   fmt.Println("Go dev tips es increíble!")
}

Ejemplo de la función Printf

import "fmt"

func main() {
   valorString := "Go dev tips!"
   fmt.Printf("Hola %s", valorString)
}

Print

La función print utiliza formatos predeterminados para cada valor en el orden especificado. En caso de que ocurriera algún error con el formato provisto, el error encontrado será imprimida en la pantalla.

La función fmt.Print() es idéntica a fmt.Println(), pero hay dos diferencias:

  • No se agregará nueva línea al final de cada línea
  • Espacio entre los argumentos solo se agregará si ninguno de los argumentos es del tipo String.

Signature del función:

fmt.Println(a ...interface{}) (n int, err error)

import "fmt"

func main() {
   fmt.Print("Go dev tips ","es ","increíble") 
   // output -> Go dev tips es increíble
}

En caso de que todos los caracteres no son del tipo string, se agregarán espacios entre cada uno automáticamente:

La función fmt.Print() también puede ser utilizado en lugar de fmt.println(). La diferencia principal entre fmt.Print() fmt.Println() es que cuando se utiliza la función fmt.Println() se agregará un carácter de nueva línea cada vez que la use, y en cambio la función fmt.Print() no.

Importante: Si solo tiene que imprimir una sola variable y necesita que elegir entre fmt.println() y fmt.print() depende si necesita el carácter de nueva línea o no.

Printf

La función fmt.printf() necesita especificador de formatos y para cada uno, debe agregar el valor que debe corresponder al tipo de datos del especificador de formato. Con tal función tienes un mejor control, pero por otro lado exige más códigos.

package main

import "fmt"

func main() {
   valorBinario := 0100
   fmt.Printf("Formato binario: %b", valorBinario)
   // resultado: Formato binario: 1000000
}

Especificador de formato

La siguiente tabla ilustra las posibilidades del especificador de formato:

Especificador de formatoDefinición
%b– Sistema numérico binario (base 2)
– Cuando se trata de componentes de coma flotante (floating-point) y complejos. Sera un notación científica sin decimal con una potencia de dos. Por ejemplo: -123456 -78
%cCarácter de Unicode. Para ejemplos consulte Unicode genérico en Go
%dEntero basado al sistema numérico base 10 (int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64 and uintptr)
Int: 32 bits signado entero
Int8: 8 bits signado (rango: -128 -> 127)
Int16: 16-bit signado (rango: -32768 -> 32767)
Int32: 32-bit entero (rango: -2147483648 -> 2147483647)
Int64: 64-bit entero (rango: -9223372036854775808 -> 9223372036854775807)
Uint: 32 bits entero no signado
Uint8: 8 bits entero no signado (rango: 0 -> 255)
Uint16: 16 bits entero no signado (rango: 0 -> 65535)
Uint32: 32 bits entero no signado (rango: 0 -> 4294967295)
Uint64: 64 bits entero no signado (rango: 0 -> 18446744073709551615)
Uintptr: 64 bits entero no signado.
%oEntero basado en la sistema de numeración base 8 conocido como Octal: rango 0 – 7.
%OEntero basado al sistema numérico base 8 con prefijo ‘0o’.
%qEscape de comillas simples
%xSistema numeración base 16 minúsculas (hexadecimal). Leer artículo Imprimir hexadecimal en Go para más información.
%XSistema numeración base 16 mayúsculas (hexadecimal). Leer artículo Imprimir hexadecimal en Go para más información.
%UUnicode. Leer artículo Imprimir hexadecimal en Go para más información.
%eExponente de notación científica, por ejemplo: -1.234456e+78
%EExponente de notación científica, por ejemplo: -1.234456E+78
%f, %FDecimal sin exponente (floating-point). 
Precisión:
%f: anchura predeterminado (estándar)
%9f: anchura de 9 carácter (precisión estándar)
%.2f: anchura predeterminado (con precisión de 2 decimal)
%9.2f: anchura de 9 carácter (con precisión de 2 decimal)
%9.f: anchura de 9 carácter (con precisión de 0 decimal)
%gLa misma que %e pero para grandes exponentes
%GLa misma que %E pero para grandes exponentes
%xEn caso de punto flotante:
– Notación hexadecimal (potencias exponentes de dos decimales). Por ejemplo: 0x1.3ep+42
En caso de rodajas ‘slice’ o string:
– Sistema numeración base 16 minúsculas (dos caracteres por byte)
%XEn caso de punto flotante:
– Notación hexadecimal (potencias exponentes de dos decimales). Por ejemplo: 0x1.3EP+42
En caso de rodajas ‘slice’ o string:
– Sistema de numeración base 16 minúsculas (dos caracteres por byte)
%sBytes de rodajas de string ‘cadena’
%qFormato de escape de cadena entre comillas dobles
%pPrimer elemento en la anotación de Sistema de numeración base 16 con el prefijo ‘0x’. 
Importante: %b,%d,%o, %x y %X también puede ser utilizado. El valor sera exactamente cómo un número entero.
%tBoolean
%vVariable en un formato predeterminado que se puede utilizar con:
%t
%d (‘%#x‘ si imprime con ‘%#v‘)
%g
%s
%p
\bRetroceso (U0008)
\\Barra invertida (U005c)
\tPestaña horizontal (U0009)
\nNueva línea (U000A)
\fFormulario alimentación (U000C)
\rRetorno de carro (U000D)
\vPestaña vertical (U000b)

Ejemplos de especificador de formato avanzado

Especificador de formatoDescripciónEjemplo
%+dMostrar el signo más‘+105’
%<anchura>dAlmohadilla con espacios (anchura total con relleno en el lado
izquierdo en
caso de que el valor sea menor que la anchura especificado)
%5d -> __105
%-<anchura>dAlmohadilla con espacios (
anchura total con relleno en el lado derecho en caso de que
el valor sea
menor que la anchura especificado)
%-5d -> 105__
%0<anchura>dAlmohadilla con ceros basado en la anchura proporcionado%05d -> 00105
%#xSistema de numeración base 16 con 0x como inicial105 -> 0x69
%#UUnicode con carácter105 -> U+0069 ‘i’
%<anchura>sAnchura total con relleno en el lado izquierdo en caso de que el
valor sea menor que el ancho especificado.
%8s -> “___value” 
%-<anchura>sAnchura total con relleno en el lado derecho en caso de que el
valor sea menor que el ancho especificado
%-8s -> “value___”

Manejar errores del función printf

Argumento inválido

Cuando utiliza la función printf con especificador de formatos, arroja un error cuando se proporciona un argumento inválido. Un ejemplo de tal escenario es proporcionar una número entero en lugar de un cadena.

Todos los errores inician con la cadena «%!» y a veces por un solo carácter y terminan con una descripción entre paréntesis. En este ejemplo, esperaba una cadena, pero encontró un entero del valor 24.

Error de argumentos faltantes

Cuando se proporciona un especificador de formato y no se proporciona ningún argumento, se produce un error faltante.

Error de demasiados argumentos

Este error se produce cuando se proporcionan más argumentos que los especificador de formato esperaba.

En este ejemplo, el mensaje de error le indica que proporciona un argumento adicional «Dev» de tipo String (cadena) y «Tips» de tipo String (cadena).

Error de anchura invalido

Con un especificador de formato, también puede definir un anchura personalizado para la cadena correspondiente utilizando «%*s«. Una anchura personalizada espera un valor del tipo entero y si define un valor que no es del tipo entero, arrojará un error BADWIDTH.

Error de precisión invalido

Con un especificador de formato, también puede definir una precisión personalizada para la cadena correspondiente con el uso de ‘%.*s’. Una precisión personalizada espera un valor entero y si define un valor que no sea del tipo entero, arrojará un error BADPREC.

Error de índice inválido

La definición de índice de argumento también está permitida cuando utiliza la función printf usando el ‘%*[índice]d’. Este especificador de formato define una matriz de enteros y el índice en el que se debe recuperar el valor.

Cuando se proporciona un índice de argumento inválido, se generará un error BADINDEX.

Error pánico

Algunas de las funciones pueden generar error pánico cuando algo fatal se occure, por ejemplo, cuando el valor proporcionado es igual a nil. En caso de valores cadena, consigue el siguiente mensaje de error: “<nil>”.

Println

La función println imprime datos en la consola. Al usar esta función, se agregará una nueva línea al final de cada línea.

fmt.Println(...interface{}) (n int, err error)

Según la signatura de la función, contiene la interfaz, lo que significa que acepta varios argumentos de cualquier tipo.

package main

import "fmt"

func main() {
   fmt.Println("Go dev tips es increíble!")
}

El ‘Comando vet’ para encontrar códigos sospechosos o errores en sintaxis

El comando vet examina el código fuente de Go y informa sobre construcciones sospechosas o posibles errores. Con todos los ejemplos de error proporcionados anteriormente en la sección anterior con este comando, puede capturar el error que quizás el compilador no haya detectado.

Este comando puede ser utilizado en la siguiente forma:

go vet <archivo de proyecto> 

En el siguiente ejemplo, vamos a comprobar si hay algún error en el archive Go print_f.go. El resultado indica que en la línea 13 hay una función Sprintf con dos argumentos en lugar de uno:

Síguenos:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *