Questo programma Go non verrà compilato. Si getta l'errore global_var declared and not used
Assegnazione inline variabile globale con operatore di dichiarazione/assegnazione combinato e un'altra variabile non dichiarata che perde l'ambito?
package main
import "log"
var global_var int
func main() {
global_var, new_string := returnTwoVars()
log.Println("new_string: " + new_string)
}
func returnTwoVars() (int, string) {
return 1234, "woohoo"
}
func usesGlobalVar() int {
return global_var * 2
}
Tuttavia, quando rimuovo la necessità di utilizzare l'operatore :=
dichiarando new_string
nella funzione principale e semplicemente utilizzando =
, il compilatore non ha un problema con visto che global_var
viene dichiarata a livello globale e utilizzato altrove nel programma. La mia intuizione mi dice che dovrebbe sapere che global_var
è già dichiarato
Cerca "golang shadowing". Se si dichiara nuovamente un nome da un ambito esterno in uno interno, si ha una nuova variabile. Spesso, come qui, è confuso. – twotwotwo
Suppongo che: = dichiarerà qualsiasi variabile che non è dichiarata nell'ambito locale. Sembra ambiguo ma immagino che sia proprio come stanno le cose. – BlinkyTop