Výuka Golang For Loop [With Examples]

Naučte se vše o smyčkách Golang for pomocí kódování několika užitečných příkladů.

Programovací jazyky jako Rust, Golang a TypeScript se v poslední době staly mezi vývojáři velmi populární. Pokud se zajímáte o back-endový vývoj a DevOps, měli byste zvážit, že učení Golang je vynikající volba!

Pokud jste začátečník, který si osvojil základy programovacího jazyka, smyčkové konstrukce jsou jedním z prvních konceptů, kterým byste měli porozumět.

Golang poskytuje pouze konstrukci cyklu for. A naučíme se o cyklech for a také o tom, jak emulovat další smyčky pomocí smyčky for.

Pojďme začít!

Syntaxe Golang For Loop

V Golang můžete vytvořit smyčku for pomocí následující syntaxe:

for initialization; condition; update {
    // do something
}

Tady,

  • inicializace označuje inicializaci smyčkové proměnné.
  • podmínka je podmínka smyčky, která určuje provedení těla smyčky. Dokud se podmínka opakování vyhodnotí jako pravdivá, příkazy v těle smyčky se provedou. A když se podmínka stane nepravdivou, ovládací prvek opustí smyčku.
  • update označuje aktualizaci smyčkové proměnné – obvykle zvýšení nebo snížení.

💡 Všimněte si, jak je to podobné smyčce C for pouze bez závorek.

Zde je řídicí tok ve smyčkách Golang for:

Je čas kódovat nějaké příklady!⏰ Chcete-li kódovat, můžete buď použít místní instalaci Golang nebo spustit příklady na Go Playground.

Golang pro příklady smyčky

Použijme syntaxi, kterou jsme se právě naučili, abychom napsali naši první smyčku for. Zde je jednoduchá smyčka for, která vytiskne čísla 1 až 5 v krocích po jedné.

package main

import "fmt"

func main() {
	fmt.Println("For loop:")
	num := 5
	for i := 1; i <= num; i++ {
		fmt.Println(i)
	}
}

Inicializujeme cyklickou proměnnou i na 1, nastavíme podmínku na i <= 5 a po každé iteraci zvýšíme cyklickou proměnnou o jednu. A tady je výstup:

//Output
For loop:
1
2
3
4
5

Napíšeme další smyčku for. Tato smyčka začíná od 5 a odpočítává se do 1; pokračuje, dokud není cyklická proměnná větší nebo rovna 1. Takže cyklickou proměnnou po každé iteraci snižujeme o jednu.

package main

import "fmt"

func main() {
	fmt.Println("For loop:")
	num := 5
	for i := num; i >= 1; i-- {
		fmt.Println(i)
	}
}

A dostaneme očekávaný výstup:

//Output
For loop:
5
4
3
2
1

Jaký je rozsah opakující se proměnné?

Rozsah smyčkové proměnné je omezen na blok smyčky for a není přístupný mimo smyčku.

  15 nejlepších ovladačů pro Xbox One, které zvýší úroveň vašeho hraní

Abychom to ověřili, zkusme získat přístup k hodnotě smyčkové proměnné i mimo smyčku:

package main

import "fmt"

func main() {
	fmt.Println("For loop:")
	num := 5
	for i := 1; i <= num; i++ {
		fmt.Println(i)
	}
	fmt.Println(i)

}

Jak se očekávalo, narazíme na chybu, která uvádí, že i je nedefinované (a jeho rozsah je omezen na cyklus for):

// Output
./prog.go:11:14: undefined: i

Infinite For Loop v Golangu

Můžeme mít v Go nekonečné smyčky for? Ano, určitě můžeme!

Pokud se podíváte na tok řízení smyčky for:

  • Tělo smyčky bude pokračovat v provádění, dokud se podmínka vyhodnotí jako pravdivá.
  • Když se podmínka stane nepravdivou, ovládací prvek opustí smyčku.
  • Pokud se tedy podmínka nikdy nestane nepravdivou (nebo je vždy pravdivá), máme nekonečnou smyčku.

Ale můžete také použít cyklus for bez inicializace, podmínky a aktualizace – aniž byste narazili na chyby syntaxe. Pokud tedy dokážete, aby smyčka běžela donekonečna i pomocí konstrukce smyčky for, jako je tato:

package main

import "fmt"

func main() {
	for {
	   fmt.Println("running...")
	}
}
//Output
running...
running...
running...
running...
running...
//and it goes on forever!

V tomto příkladu nastavíme proměnnou num na 5. A podmínka opakování je num >= 5. Cyklus tedy běží tak dlouho, dokud je num větší nebo rovno nule.

package main

import "fmt"

func main() {
	num := 5
	for num > 0 {
		fmt.Println(num)
	}
}

Protože se hodnota num nikdy nemění, podmínka se vždy vyhodnotí jako true a cyklus běží navždy!

//Output
5
5
5
5
5
5
//and it goes on forever!

Všechny Golangy mají pouze konstrukci cyklu for, můžeme se pokusit emulovat smyčky while a do-while pomocí smyček for. Pojďme se tedy naučit, jak na to!

  Připněte příspěvky, kanály, videa a soubory

Emulace while Loop pomocí For Loop

Smyčka while má obecně následující podobu:

// initialize looping var
while (condition){
    // do something
    // update looping var
} 

Pokud si vzpomínáte, v prvním nekonečném cyklu for jsme napsali: použili jsme následující cyklus for – bez inicializace, podmínky a aktualizace.

for {
// the simplest infinite loop
}

Můžeme tedy upravit cyklus for tak, aby obsahoval pouze podmínku (v následujícím tvaru) pro emulaci cyklu while:

//initialize looping var
for condition {
 // do something
 // update looping var
}

Zde je ekvivalent cyklu while prvního cyklu for, který jsme napsali:

package main

import "fmt"

func main() {
	fmt.Println("Emulating while loop")
	num := 5
	for num > 0 {
		fmt.Println(num)
		num--
	}
}
//Output
Emulating while loop
5
4
3
2
1

Emulace Do-While Loop pomocí For Loop

Pokud jste kódovali v jazyce jako C, víte, že konstrukce cyklu do-while má následující podobu:

// initialize looping var
do {
//something
// update looping var
} while(condition);

Klíčový rozdíl mezi smyčkou while a do while je v tom, že smyčka while kontroluje stav při vstupu do smyčky. Smyčka do-while na druhé straně kontroluje podmínku při výstupu ze smyčky.

Pokud se tedy ve smyčce while podmínka vyhodnotí jako nepravda, tělo smyčky se nikdy nespustí. V cyklu do-while se však tělo smyčky provede, i když se podmínka vyhodnotí jako nepravda.

Pomocí těchto informací můžeme emulovat chování smyčky do-while:

  • Napište nekonečnou smyčku for
  • Použijte podmíněný příkaz if se správnou podmínkou, abyste se dostali ze smyčky

Řekněme, že chcete napsat smyčku do-while, kde podmínka pro provedení těla smyčky je num < 0. Takže můžete napsat smyčku for a opustit smyčku, pokud num >= 0.

package main

import "fmt"

func main() {
	fmt.Println("Emulating do-while loop")
	num := 5
	for {
		fmt.Println("loop runs...")
		if num >= 0 {
			break
		}
	}
}

💡 Všimněte si, že provedení smyčky, pokud num < 0 a vyřazení ze smyčky, pokud num >= 0, jsou ekvivalentní podmínky.

  Oprava Počkejte, až bude aktuální program dokončen Chyba odinstalace

Ačkoli je podmínka num > 0 zpočátku nepravdivá (num je 5), tělo smyčky se spustí jednou a emuluje smyčku do-while.

//Output
Emulating do-while loop
loop runs...

Smyčka přes pole pomocí pro smyčku

Při procházení polí v Golang pomocí smyčky for a rozsahu můžete přistupovat jak k indexům, tak k prvkům. Funguje to podobně jako funkce enumerate v Pythonu.

Zde vytvoříme numArray, pole celých čísel. A projděte to pomocí smyčky for:

package main

import "fmt"

func main() {
	fmt.Println("Looping through an array")
	numArray := []int{3, 7, 0, 10, 8, 9}
	for idx, num := range numArray {
		fmt.Println("At index", idx, ": ", num)
	}
}

Jak je vidět, jsme schopni přistupovat k indexu i prvku na každém indexu současně:

//Output
Looping through an array
At index 0 :  3
At index 1 :  7
At index 2 :  0
At index 3 :  10
At index 4 :  8
At index 5 :  9

Použití odložení v Golang For Loop

V Golangu můžete použít klíčové slovo odložit k odložení volání funkcí.

Přestože se používá v aplikacích, jako je čištění zdrojů a zpracování chyb, může být užitečné pochopit, jak používat odložení uvnitř smyčky for. Podívejme se, co se stane, když použijeme defer uvnitř cyklu for k odložení volání funkce Println().

package main

import "fmt"

func main() {
	fmt.Println("For loop:")
	num := 5
	for i := 1; i <= num; i++ {
		defer fmt.Println(i)
	}
}

💬 Když je volání funkce odloženo, je volání funkce posunuto do zásobníku a je provedeno v pořadí LIFO. K tomuto provedení dojde až poté, co se vrátí funkce, která obklopuje příkaz odložit.

Takže fmt.Println(5) se provede jako první a fmt.Println(1) se provede jako poslední:

//Output
For loop:
5
4
3
2
1

Závěr

Zde je shrnutí toho, co jste se v tomto tutoriálu naučili:

  • V Golangu můžete vytvářet smyčky for se syntaxí: pro inicializaci; stav; update { //loop body}.
  • Řídicí tok smyčky for je poměrně jednoduchý. Cyklovací proměnná je inicializována jednou, vyhledávací podmínka určuje, zda se má nebo nemá provést tělo smyčky, a aktualizace odkazuje na aktualizaci cyklické proměnné po každé iteraci.
  • Rozsah smyčkové proměnné je omezen na tělo smyčky a není přístupný mimo smyčku.
  • Ačkoli Golang poskytuje pouze konstrukci smyčky for, můžete emulovat chování smyčky while a do-while pomocí smyček for.
  • Několik dalších aplikací smyčky for zahrnuje smyčkování přes pole a odkládání volání funkcí uvnitř těla smyčky for.

Dále se naučte, jak používat pro smyčky v Pythonu. Příjemné učení! 🎉