Go - Regole di ambito

Un ambito in qualsiasi programmazione è una regione del programma in cui può esistere una variabile definita e oltre a questa non è possibile accedere alla variabile. Ci sono tre posti in cui le variabili possono essere dichiarate nel linguaggio di programmazione Go:

  • All'interno di una funzione o di un blocco (local variabili)

  • Al di fuori di tutte le funzioni (global variabili)

  • Nella definizione dei parametri di funzione (formal parametri)

Cerchiamo di scoprire cosa sono local e global variabili e cosa sono formal parametri.

Variabili locali

Le variabili dichiarate all'interno di una funzione o di un blocco sono chiamate variabili locali. Possono essere utilizzati solo da istruzioni che si trovano all'interno di quella funzione o blocco di codice. Le variabili locali non sono note a funzioni esterne alla propria. L'esempio seguente utilizza variabili locali. Qui tutte le variabili a, b e c sono locali rispetto alla funzione 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)
}

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

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

Variabili globali

Le variabili globali sono definite al di fuori di una funzione, generalmente nella parte superiore del programma. Le variabili globali mantengono il loro valore per tutta la durata del programma ed è possibile accedervi all'interno di una qualsiasi delle funzioni definite per il programma.

È possibile accedere a una variabile globale da qualsiasi funzione. Cioè, una variabile globale è disponibile per l'uso in tutto il programma dopo la sua dichiarazione. L'esempio seguente utilizza variabili globali e locali:

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)
}

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

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

Un programma può avere lo stesso nome per variabili locali e globali ma il valore della variabile locale all'interno di una funzione ha la preferenza. Ad esempio:

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)
}

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

value of g = 10

Parametri formali

I parametri formali sono trattati come variabili locali con in quella funzione e hanno la preferenza sulle variabili globali. Ad esempio:

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;
}

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

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

Inizializzazione delle variabili locali e globali

Le variabili locali e globali vengono inizializzate al loro valore predefinito, che è 0; mentre i puntatori vengono inizializzati a zero.

Tipo di dati Valore predefinito iniziale
int 0
float32 0
puntatore zero