Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Lokale og Globale Omfang | Funksjoner
Quizzes & Challenges
Quizzes
Challenges
/
Introduksjon til Golang

bookLokale og Globale Omfang

På dette tidspunktet er det viktig å gå nærmere inn på begrepet scope for å forstå hvor bestemte variabler (eller konstanter) kan nås, og hvor de ikke kan nås.

Scope for en variabel eller konstant definerer hvor den kan brukes.

Når en variabel eller konstant deklareres utenfor en kodeblokk, blir den tilgjengelig i hele programmet, og får dermed betegnelsen globalt scope. I kodeeksempelet under illustrerer konstanten pi dette globale scopet:

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 deklareres innenfor en kodeblokk, forblir den kun tilgjengelig innenfor den spesifikke kodeblokken og eventuelle underliggende kodeblokker, dersom det er aktuelt.

Illustrasjonen nedenfor viser forskjellene mellom globale og lokale omfang:

Følgende kode demonstrerer områder hvor variabeltilgang er tillatt og hvor det kan oppstå feil:

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 }

Variabelen value_1 forblir tilgjengelig gjennom hele main()-kodeblokken, inkludert i nestede kodeblokker som Betingelse 1 og Betingelse 2. Den er også tilgjengelig innenfor Betingelse 1 og dens nestede Betingelse 2.

Forsøk på å få direkte tilgang til den utenfor main()-blokken vil imidlertid føre til en feil. På samme måte er variabelen value_2, som er deklarert innenfor Betingelse 2, kun tilgjengelig i den spesifikke kodeblokken.

Det er viktig å ta hensyn til omfang i funksjonssammenheng. Når vi deklarerer en variabel eller konstant innenfor en funksjon, forblir den begrenset til den funksjonen og er utilgjengelig i andre funksjoner, inkludert main().

Merk

main() fungerer som en automatisk utført funksjon når programmet kjø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 annet viktig poeng å huske på er at vi ikke kan deklarere to eller flere variabler med samme navn innenfor samme omfang eller overlappende omfang.

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 imidlertid mulig å erklære variabler med samme navn i ulike omfang:

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 omfang bør vi plassere var value int = 6 for å unngå feil?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 2

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Awesome!

Completion rate improved to 1.96

bookLokale og Globale Omfang

Sveip for å vise menyen

På dette tidspunktet er det viktig å gå nærmere inn på begrepet scope for å forstå hvor bestemte variabler (eller konstanter) kan nås, og hvor de ikke kan nås.

Scope for en variabel eller konstant definerer hvor den kan brukes.

Når en variabel eller konstant deklareres utenfor en kodeblokk, blir den tilgjengelig i hele programmet, og får dermed betegnelsen globalt scope. I kodeeksempelet under illustrerer konstanten pi dette globale scopet:

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 deklareres innenfor en kodeblokk, forblir den kun tilgjengelig innenfor den spesifikke kodeblokken og eventuelle underliggende kodeblokker, dersom det er aktuelt.

Illustrasjonen nedenfor viser forskjellene mellom globale og lokale omfang:

Følgende kode demonstrerer områder hvor variabeltilgang er tillatt og hvor det kan oppstå feil:

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 }

Variabelen value_1 forblir tilgjengelig gjennom hele main()-kodeblokken, inkludert i nestede kodeblokker som Betingelse 1 og Betingelse 2. Den er også tilgjengelig innenfor Betingelse 1 og dens nestede Betingelse 2.

Forsøk på å få direkte tilgang til den utenfor main()-blokken vil imidlertid føre til en feil. På samme måte er variabelen value_2, som er deklarert innenfor Betingelse 2, kun tilgjengelig i den spesifikke kodeblokken.

Det er viktig å ta hensyn til omfang i funksjonssammenheng. Når vi deklarerer en variabel eller konstant innenfor en funksjon, forblir den begrenset til den funksjonen og er utilgjengelig i andre funksjoner, inkludert main().

Merk

main() fungerer som en automatisk utført funksjon når programmet kjø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 annet viktig poeng å huske på er at vi ikke kan deklarere to eller flere variabler med samme navn innenfor samme omfang eller overlappende omfang.

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 imidlertid mulig å erklære variabler med samme navn i ulike omfang:

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 omfang bør vi plassere var value int = 6 for å unngå feil?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 2
some-alt