36 - Biblioteca estándar de Go: paquete strconv

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.

Convertir un string a un int.

Programa: ejercicio152.go

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.

Problema 1:

Cargar una variable de tipo string por teclado y luego verificar si se puede convertir a tipo int.

Programa: ejercicio153.go

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.

Convertir un int a un string.

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.

Programa: ejercicio154.go

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.

Convertir un string a tipo de dato float64.

Programa: ejercicio155.go

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

Convertir un float64 a tipo de dato string.

Programa: ejercicio156.go

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)