Lokala och Globala Omfång
Vid denna punkt är det viktigt att fördjupa sig i begreppet om räckvidder för att förstå de områden där specifika variabler (eller konstanter) kan nås och där de inte kan det.
Räckvidden för en variabel eller konstant definierar var den kan användas.
När en variabel eller konstant deklareras utanför någon kodblock blir den tillgänglig i hela programmet och får därmed benämningen global räckvidd. I följande kodexempel illustrerar konstanten pi denna globala räckvidd:
index.go
12345678package main import "fmt" const pi float32 = 3.1415 func main() { fmt.Println(pi) }
Omvänt, när en variabel eller konstant deklareras inom ett kodblock, är den endast tillgänglig inom just det kodblocket och eventuella inbäddade kodblock, om tillämpligt.
Illustrationen nedan visar skillnaderna mellan globala och lokala omfång:
Följande kod demonstrerar områden där variabelåtkomst är tillåten och där fel kan uppstå:
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 }
Variabeln value_1 förblir tillgänglig genom hela kodblocket main(), inklusive i nästlade kodblock som Villkor 1 och Villkor 2. Den är också tillgänglig inom Villkor 1 och dess nästlade Villkor 2.
Försök att direkt komma åt den utanför main()-blocket kommer dock att resultera i ett fel. På samma sätt är variabeln value_2, som deklareras inom Villkor 2, endast tillgänglig inom just det kodblocket.
Det är viktigt att ta hänsyn till omfång i samband med funktioner. När vi deklarerar en variabel eller konstant inom en funktion, förblir den begränsad till den funktionen och är inte tillgänglig i andra funktioner, inklusive main().
Obs
main()fungerar som en automatiskt exekverad funktion när programmet körs.
index.go
12345678func myFunc() { var number int = 7 fmt.Println(number) // Accessible here } func main() { fmt.Println(number) // Not accessible here }
En annan viktig punkt att komma ihåg är att vi inte kan deklarera två eller fler variabler med samma namn inom samma omfång eller överlappande omfång.
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 är dock möjligt att deklarera variabler med samma namn i olika omfång:
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() }
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Awesome!
Completion rate improved to 1.96
Lokala och Globala Omfång
Svep för att visa menyn
Vid denna punkt är det viktigt att fördjupa sig i begreppet om räckvidder för att förstå de områden där specifika variabler (eller konstanter) kan nås och där de inte kan det.
Räckvidden för en variabel eller konstant definierar var den kan användas.
När en variabel eller konstant deklareras utanför någon kodblock blir den tillgänglig i hela programmet och får därmed benämningen global räckvidd. I följande kodexempel illustrerar konstanten pi denna globala räckvidd:
index.go
12345678package main import "fmt" const pi float32 = 3.1415 func main() { fmt.Println(pi) }
Omvänt, när en variabel eller konstant deklareras inom ett kodblock, är den endast tillgänglig inom just det kodblocket och eventuella inbäddade kodblock, om tillämpligt.
Illustrationen nedan visar skillnaderna mellan globala och lokala omfång:
Följande kod demonstrerar områden där variabelåtkomst är tillåten och där fel kan uppstå:
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 }
Variabeln value_1 förblir tillgänglig genom hela kodblocket main(), inklusive i nästlade kodblock som Villkor 1 och Villkor 2. Den är också tillgänglig inom Villkor 1 och dess nästlade Villkor 2.
Försök att direkt komma åt den utanför main()-blocket kommer dock att resultera i ett fel. På samma sätt är variabeln value_2, som deklareras inom Villkor 2, endast tillgänglig inom just det kodblocket.
Det är viktigt att ta hänsyn till omfång i samband med funktioner. När vi deklarerar en variabel eller konstant inom en funktion, förblir den begränsad till den funktionen och är inte tillgänglig i andra funktioner, inklusive main().
Obs
main()fungerar som en automatiskt exekverad funktion när programmet körs.
index.go
12345678func myFunc() { var number int = 7 fmt.Println(number) // Accessible here } func main() { fmt.Println(number) // Not accessible here }
En annan viktig punkt att komma ihåg är att vi inte kan deklarera två eller fler variabler med samma namn inom samma omfång eller överlappande omfång.
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 är dock möjligt att deklarera variabler med samma namn i olika omfång:
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() }
Tack för dina kommentarer!