Ir - Reglas de alcance

Un alcance en cualquier programación es una región del programa donde puede existir una variable definida y más allá de eso no se puede acceder a la variable. Hay tres lugares donde las variables se pueden declarar en el lenguaje de programación Go:

  • Dentro de una función o un bloque (local variables)

  • Fuera de todas las funciones (global variables)

  • En la definición de parámetros de función (formal parámetros)

Averigüemos cuáles son local y global variables y que son formal parámetros.

Variables locales

Las variables que se declaran dentro de una función o un bloque se denominan variables locales. Solo pueden ser utilizados por declaraciones que están dentro de esa función o bloque de código. Las variables locales no son conocidas por funciones fuera de las suyas. El siguiente ejemplo usa variables locales. Aquí todas las variables a, byc son locales a la función main ().

package main

import "fmt"

func main() {
   /* local variable declaration */
   var a, b, c int 

   /* actual initialization */
   a = 10
   b = 20
   c = a + b

   fmt.Printf ("value of a = %d, b = %d and c = %d\n", a, b, c)
}

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

value of a = 10, b = 20 and c = 30

Variables globales

Las variables globales se definen fuera de una función, normalmente encima del programa. Las variables globales mantienen su valor durante toda la vida útil del programa y se puede acceder a ellas dentro de cualquiera de las funciones definidas para el programa.

Cualquier función puede acceder a una variable global. Es decir, una variable global está disponible para su uso en todo el programa después de su declaración. El siguiente ejemplo usa variables globales y locales:

package main

import "fmt"
 
/* global variable declaration */
var g int
 
func main() {
   /* local variable declaration */
   var a, b int

   /* actual initialization */
   a = 10
   b = 20
   g = a + b

   fmt.Printf("value of a = %d, b = %d and g = %d\n", a, b, g)
}

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

value of a = 10, b = 20 and g = 30

Un programa puede tener el mismo nombre para las variables locales y globales, pero el valor de la variable local dentro de una función tiene preferencia. Por ejemplo

package main

import "fmt"
 
/* global variable declaration */
var g int = 20
 
func main() {
   /* local variable declaration */
   var g int = 10
 
   fmt.Printf ("value of g = %d\n",  g)
}

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

value of g = 10

Parámetros formales

Los parámetros formales se tratan como variables locales dentro de esa función y tienen preferencia sobre las variables globales. Por ejemplo

package main

import "fmt"
 
/* global variable declaration */
var a int = 20;
 
func main() {
   /* local variable declaration in main function */
   var a int = 10
   var b int = 20
   var c int = 0

   fmt.Printf("value of a in main() = %d\n",  a);
   c = sum( a, b);
   fmt.Printf("value of c in main() = %d\n",  c);
}
/* function to add two integers */
func sum(a, b int) int {
   fmt.Printf("value of a in sum() = %d\n",  a);
   fmt.Printf("value of b in sum() = %d\n",  b);

   return a + b;
}

Cuando el código anterior se compila y ejecuta, produce el siguiente resultado:

value of a in main() = 10
value of a in sum() = 10
value of b in sum() = 20
value of c in main() = 30

Inicialización de variables locales y globales

Las variables locales y globales se inicializan a su valor predeterminado, que es 0; mientras que los punteros se inicializan en cero.

Tipo de datos Valor predeterminado inicial
En t 0
float32 0
puntero nulo