Saltar al contenido principal
eLearner.app
Módulo 1 · Lección 2 de 52/50 en el curso~10 min
Lecciones del módulo (2/5)

Valor cero y conversiones de tipo

En Go cada variable declarada sin un valor explícito recibe un valor cero: el "valor neutral" de su tipo. es una gran diferencia de JavaScript, donde let x; produce undefined, o C, donde termina Hasta con la memoria basura. Sin undefined, sin UB: solo cero.

La tabla de valor cero

CategoríaTipoValor cero
NuméricoCÓDIGOPH0, CÓDIGOF1, CÓDIGOF2, CÓDIGOF3, CÓDIGOF4, ...CÓDIGOPH5
BooleanoCÓDIGOPH6CÓDIGOPH7
CadenaCÓDIGOPH8"" (cadena vacía)
PunteroCÓDIGOPH10CÓDIGOPH11
Sector / Mapa / CanalCÓDIGOPH12, CÓDIGOPH13, CÓDIGOPH14CÓDIGOPH15
Función / InterfazCÓDIGOPH16, CÓDIGOPH17CÓDIGOPH18
EstructuraCÓDIGOPH19todos los campos en su valor cero
Go
var i int        // 0
var f float64    // 0
var s string     // ""
var b bool       // false
var p *int       // nil
var nums []int   // nil  (NB: una slice nil ha len 0 e si può iterare!)

Las conversiones son SIEMPRE explícitas

A diferencia de C, Python o JS, Go no promociona automáticamente uno tipo numérico a otro: debes escribir type(value).

Go
i := 42
var f float64 = float64(i)
var u uint = uint(i)

Esto es cierto incluso para tipos "compatibles" como int y int64: Siempre se requiere una conversión explícita.

Go
var a int = 10
var b int64 = int64(a)  // obbligatorio

Conversión entre números: cuidado con el truncamiento

Pasar de float64 a int se trunca hacia cero, no redondo:

Go
f := 3.9
i := int(f)   // 3, non 4
n := int(-3.9) // -3, non -4

Cadena ↔ conversión de números

string(65) NO da "65": da "A" (la runa con código punto 65). Para cadena → número y viceversa necesitas el strconv paquete:

Go
import "strconv"

s := strconv.Itoa(42)        // "42"
n, err := strconv.Atoi("42") // 42, nil

Lo cubriremos en profundidad en el módulo Stdlib.

Tu turno

Ejercicio#go.m1.l2.e1
Intentos: 0Cargando...

Declare un contador variable de tipo int sin inicializarlo e imprímalo. Esperado: 0.

Cargando editor...
Mostrar pista

Sin un inicializador, la variable toma el valor cero del tipo.

Solución disponible después de 3 intentos

Ejercicio#go.m1.l2.e2
Intentos: 0Cargando...

Dado el número entero n = 10, convierta n a float64 y divídalo por 4. Imprima el resultado (esperado 2,5).

Cargando editor...
Mostrar pista

Sin la conversión explícita, `n / 4` es una división entera que da 2.

Solución disponible después de 3 intentos

Cuestionario#go.m1.l2.e3
Listo

¿Qué imprime este código?

Go
f := 3.7
fmt.Println(int(f))
Opciones de respuesta

Resumen

  • Cada tipo tiene un valor cero consistente: ni undefined, ni UB.
  • Slice/map/chan/func/interface/pointer tiene valor cero nil.
  • Las conversiones numéricas siempre son explícitas con type(value).
  • int(float) se trunca hacia cero; para redondear utilice math.Round.
  • Para cadena ↔ número use el paquete strconv (NO una conversión directa).