Lokale og Globale Scopes
På dette tidspunkt er det vigtigt at undersøge begrebet scopes for at forstå, hvor specifikke variabler (eller konstanter) kan tilgås, og hvor de ikke kan.
En variabels eller konstantens scope definerer, hvor den kan anvendes.
Når en variabel eller konstant erklæres uden for en kodeblok, bliver den tilgængelig i hele programmet og får betegnelsen globalt scope. I følgende kodeeksempel illustrerer konstanten pi dette globale scope:
index.go
12345678package main import "fmt" const pi float32 = 3.1415 func main() { fmt.Println(pi) }
Omvendt, når en variabel eller konstant erklæres inden for et kodeblok, forbliver den kun tilgængelig inden for denne specifikke kodeblok og eventuelle indlejrede kodeblokke, hvis det er relevant.
Illustrationen nedenfor viser forskellene mellem globale og lokale scopes:
Følgende kode demonstrerer områder, hvor variabeladgang er tilladt, og hvor fejl kan opstå:
index.go
12345678910111213141516171819202122232425262728package main import "fmt" func main() { var value_1 int = 1 // Condition 1 if(true) { var value_2 int = 2 // Condition 2 if (true) { var value_3 int = 3 fmt.Println("In Condition 2:", value_1) fmt.Println("In Condition 2:", value_2) fmt.Println("In Condition 2:", value_3) } fmt.Println("In Condition 1:", value_1) fmt.Println("In Condition 1:", value_2) fmt.Println("In Condition 1:", value_3) // Error here } fmt.Println("In Main:", value_1) fmt.Println("In Main:", value_2) // Error here fmt.Println("In Main:", value_3) // Error here }
Variablen value_1 forbliver tilgængelig i hele main()-kodeblokken, inklusive i indlejrede kodeblokke som Betingelse 1 og Betingelse 2. Den er også tilgængelig inden for Betingelse 1 og dens indlejrede Betingelse 2.
Forsøger man derimod at tilgå den direkte uden for main()-blokken, vil det resultere i en fejl. På samme måde er variablen value_2, som erklæres inden for Betingelse 2, kun tilgængelig i netop denne kodeblok.
Det er afgørende at tage scopes i betragtning i forbindelse med funktioner. Når vi erklærer en variabel eller konstant inden for en funktion, forbliver den begrænset til denne funktion og er utilgængelig i andre funktioner, herunder main().
Bemærk
main()fungerer som en automatisk eksekveret funktion, når programmet køres.
index.go
12345678func myFunc() { var number int = 7 fmt.Println(number) // Accessible here } func main() { fmt.Println(number) // Not accessible here }
Et andet vigtigt punkt at huske er, at vi ikke kan erklære to eller flere variabler med samme navn inden for samme scope eller overlappende scopes.
index.go
1234567891011func myFunc1() { var number int = 7 var number int = 9 // Error here } func myFunc2() { var number int = 7 if(2 > 1) { var number int = 9 // Error here } }
Det er dog muligt at erklære variabler med samme navn i forskellige scopes:
index.go
1234567891011121314151617package main import "fmt" func myFunc1() { var number int = 7 fmt.Println("In Func 1:", number) } func myFunc2() { var number int = 9 fmt.Println("In Func 2:", number) } func main() { myFunc1() myFunc2() }
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Can you explain the difference between global and local scope with an example?
What happens if I try to access a variable outside its scope?
Can you clarify what is meant by overlapping scopes?
Awesome!
Completion rate improved to 1.96
Lokale og Globale Scopes
Stryg for at vise menuen
På dette tidspunkt er det vigtigt at undersøge begrebet scopes for at forstå, hvor specifikke variabler (eller konstanter) kan tilgås, og hvor de ikke kan.
En variabels eller konstantens scope definerer, hvor den kan anvendes.
Når en variabel eller konstant erklæres uden for en kodeblok, bliver den tilgængelig i hele programmet og får betegnelsen globalt scope. I følgende kodeeksempel illustrerer konstanten pi dette globale scope:
index.go
12345678package main import "fmt" const pi float32 = 3.1415 func main() { fmt.Println(pi) }
Omvendt, når en variabel eller konstant erklæres inden for et kodeblok, forbliver den kun tilgængelig inden for denne specifikke kodeblok og eventuelle indlejrede kodeblokke, hvis det er relevant.
Illustrationen nedenfor viser forskellene mellem globale og lokale scopes:
Følgende kode demonstrerer områder, hvor variabeladgang er tilladt, og hvor fejl kan opstå:
index.go
12345678910111213141516171819202122232425262728package main import "fmt" func main() { var value_1 int = 1 // Condition 1 if(true) { var value_2 int = 2 // Condition 2 if (true) { var value_3 int = 3 fmt.Println("In Condition 2:", value_1) fmt.Println("In Condition 2:", value_2) fmt.Println("In Condition 2:", value_3) } fmt.Println("In Condition 1:", value_1) fmt.Println("In Condition 1:", value_2) fmt.Println("In Condition 1:", value_3) // Error here } fmt.Println("In Main:", value_1) fmt.Println("In Main:", value_2) // Error here fmt.Println("In Main:", value_3) // Error here }
Variablen value_1 forbliver tilgængelig i hele main()-kodeblokken, inklusive i indlejrede kodeblokke som Betingelse 1 og Betingelse 2. Den er også tilgængelig inden for Betingelse 1 og dens indlejrede Betingelse 2.
Forsøger man derimod at tilgå den direkte uden for main()-blokken, vil det resultere i en fejl. På samme måde er variablen value_2, som erklæres inden for Betingelse 2, kun tilgængelig i netop denne kodeblok.
Det er afgørende at tage scopes i betragtning i forbindelse med funktioner. Når vi erklærer en variabel eller konstant inden for en funktion, forbliver den begrænset til denne funktion og er utilgængelig i andre funktioner, herunder main().
Bemærk
main()fungerer som en automatisk eksekveret funktion, når programmet køres.
index.go
12345678func myFunc() { var number int = 7 fmt.Println(number) // Accessible here } func main() { fmt.Println(number) // Not accessible here }
Et andet vigtigt punkt at huske er, at vi ikke kan erklære to eller flere variabler med samme navn inden for samme scope eller overlappende scopes.
index.go
1234567891011func myFunc1() { var number int = 7 var number int = 9 // Error here } func myFunc2() { var number int = 7 if(2 > 1) { var number int = 9 // Error here } }
Det er dog muligt at erklære variabler med samme navn i forskellige scopes:
index.go
1234567891011121314151617package main import "fmt" func myFunc1() { var number int = 7 fmt.Println("In Func 1:", number) } func myFunc2() { var number int = 9 fmt.Println("In Func 2:", number) } func main() { myFunc1() myFunc2() }
Tak for dine kommentarer!