Lokale 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
12345678package 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
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 }
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
12345678func 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
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 imidlertid mulig å erklære variabler med samme navn i ulike omfang:
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() }
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
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
Lokale 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
12345678package 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
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 }
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
12345678func 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
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 imidlertid mulig å erklære variabler med samme navn i ulike omfang:
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() }
Takk for tilbakemeldingene dine!