Scope

¿Qué significa “scope” en programación?

El scope o alcance de una variable, se refiere a donde esta variable existe y tiene una relación con el lugar en el que esta fue declarada.

¿Cómo funciona el scope en Go?

  • Dentro de llaves {} que definen un bloque. Las variables declaradas dentro de llaves, pueden ser accedidas solo dentro de estas.
  • En ocasiones se utilizan bloques dentro de bloques, el alcance de la variable es a partir del bloque en el cual esta fue definida.
  • Por lo general se utiliza indentación para separar el alcance de cada bloque.

Ejemplo del uso de scope en Go

package main

import "fmt"

var var1 = "Este es el nivel 1"

func main() {
    var var2 = "Este es el nivel 2"
    {
        var var3 = "Este es el nivel 3"
    }
    fmt.Println(var1)
    fmt.Println(var2)
    fmt.Println(var3)
}

Si intentamos ejecutar el código mostrado, nos toparemos con el problema del compilador.

# command-line-arguments
016_scope/main.go:14:14: undefined: var3

Y esto se debe a que la variable var3 se ha definido en un bloque fuera del alcance de la instrucción fmt.Println. Ya que como se comento el alcance de las variables es solo a partir del bloque en el cual son definidas.

Para poder corregir este problema, tenemos que mover la instrucción fmt.Println a un lugar en donde var3 sea accesible. Corrigiendo el ejemplo anterior tendríamos.

package main

import "fmt"

var var1 = "Este es el nivel 1"

func main() {
    var var2 = "Este es el nivel 2"
    {
        var var3 = "Este es el nivel 3"
        fmt.Println(var3)
    }
    fmt.Println(var1)
    fmt.Println(var2)
}