Una actividad muy común cuando desarrollamos programas es la conversión de string a tipos numéricos y viceversa.
La biblioteca estándar de Go nos provee un paquete con las funciones más comunes que se nos pueden presentar para la conversión de datos de tipo string.
package main import ( "fmt" "strconv" ) func main() { cadena1 := "48" cadena2 := "52" var x1, x2 int x1, _ = strconv.Atoi(cadena1) x2, _ = strconv.Atoi(cadena2) suma := x1 + x2 fmt.Println("La suma de los dos valores es:", suma) }
En este ejemplo tenemos dos string que almacenan números. Para copiar dichas variables a variables de tipo int no podemos simplemente asignarle el valor (porque no son del mismo tipo):
x1 = cadena1
El paquete strconv tiene una función llamada Atoi que retorna el valor convertido a int y como segundo dato retorna si hubo algún error en la conversión, como en este problema no puede haber errores en la conversión descartamos el valor usando el subrayado.
Cargar una variable de tipo string por teclado y luego verificar si se puede convertir a tipo int.
package main import ( "fmt" "strconv" ) func main() { var cadena string fmt.Print("Ingrese una cadena:") fmt.Scan(&cadena) entero, error := strconv.Atoi(cadena) if error != nil { fmt.Println("No se puede convertir a entero la cadena:", cadena) } else { fmt.Print("La variable entera tiene el valor:", entero) } }
Con esta sintaxis podemos controlar si el valor devuelto es efectivamente un valor int, en el caso que se genera un error podemos capturarlo en el if siguiente a la llamada a la función Atoi:
entero, error := strconv.Atoi(cadena) if error != nil { fmt.Println("No se puede convertir a entero la cadena:", cadena) } else { fmt.Print("La variable entera tiene el valor:", entero) }
Si cargamos en la variable cadena el valor "1234" luego se puede convertir a tipo int y se almacena en la variable "entero". En el caso que ingresemos la cadena "hola" no se puede convertir a tipo int y se captura el error en el if mostrando un mensaje.
La actividad inversa es la conversión de un entero a un tipo de dato string. En este caso es más sencilla la actividad ya que no se pueden generar errores en la conversión.
package main import ( "fmt" "strconv" ) func main() { var x int = 100 var s string s = strconv.Itoa(x) fmt.Println("La cadena s almacena el valor:", s) }
Mediante la función Itoa convertimos el valor entero almacenado en x y lo almacenamos en el string s.
package main import ( "fmt" "strconv" ) func main() { var cadena string="3.1415926535" pi1, _ := strconv.ParseFloat(cadena, 64) fmt.Println("El valor almacenado es:", pi1) }
Siempre la función ParseFloat del paquete strconv devuelve un float64.
El paquete strconv contiene más de 30 funciones para convertir datos. Cuando uno programa en Go y no recuerda las funciones del paquete strconv puede visitarlo en: Paquete strconv
package main import ( "fmt" "strconv" ) func main() { var pi1 float64=3.1415926535 var cadena1 string cadena1=strconv.FormatFloat(pi1, 'E', -1, 64) fmt.Println(cadena1) }Tenemos una variable float64 y queremos almacenarla como un string en la variable cadena1:
cadena1=strconv.FormatFloat(pi1, 'E', -1, 64)