Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Lokala och Globala Omfång | Funktioner
Introduktion till Golang

bookLokala 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

index.go

copy
12345678
package 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

index.go

copy
12345678910111213141516171819202122232425262728
package 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

index.go

copy
12345678
func 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

index.go

copy
1234567891011
func 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

index.go

copy
1234567891011121314151617
package 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() }
question mark

I vilket scope ska vi placera var value int = 6 för att undvika fel?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 2

Fråga AI

expand

Fråga AI

ChatGPT

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

bookLokala 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

index.go

copy
12345678
package 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

index.go

copy
12345678910111213141516171819202122232425262728
package 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

index.go

copy
12345678
func 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

index.go

copy
1234567891011
func 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

index.go

copy
1234567891011121314151617
package 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() }
question mark

I vilket scope ska vi placera var value int = 6 för att undvika fel?

Select the correct answer

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 2
some-alt