Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Lokale og Globale Scopes | Funktioner
Introduktion til Golang

bookLokale 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

index.go

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

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 }

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

index.go

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

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 er dog muligt at erklære variabler med samme navn i forskellige scopes:

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 hvilket scope skal vi placere var value int = 6 for at undgå fejl?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 2

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Suggested prompts:

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

bookLokale 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

index.go

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

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 }

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

index.go

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

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 er dog muligt at erklære variabler med samme navn i forskellige scopes:

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 hvilket scope skal vi placere var value int = 6 for at undgå fejl?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 2
some-alt