π¬ Π§ΡΠΎ ΡΡΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΠ°ΠΊΠΎΠ΅? Π£ΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ β ΡΡΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠΏΡΠ°Π²Π»ΡΡΡ Ρ ΠΎΠ΄ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΈΠΌ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°ΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΡ: Β«Π΅ΡΠ»ΠΈ A, ΡΠΎ ΡΠ΄Π΅Π»Π°ΠΉ BΒ», ΠΈΠ»ΠΈ Β«Π²ΡΠΏΠΎΠ»Π½ΡΠΉ C Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ ΡΡΠ°Π½Π΅Ρ DΒ».
Π ΠΏΠΎΠ²ΡΠ΅Π΄Π½Π΅Π²Π½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ ΡΡ ΡΠΎΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡ ΡΠ°ΠΊΡΡ Π»ΠΎΠ³ΠΈΠΊΡ:
- ΠΡΠ»ΠΈ ΠΈΠ΄ΡΡ Π΄ΠΎΠΆΠ΄Ρ β Π±Π΅ΡΡΡΡ Π·ΠΎΠ½Ρ.
- ΠΠΎΠΊΠ° Π½Π΅ Π½Π°ΡΡΡΠΏΠΈΡ ΠΏΠΎΠ»Π½ΠΎΡΡ β ΠΏΡΠ°Π·Π΄Π½ΡΠ΅ΡΡ.
Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ ΠΈ ΡΠΈΠΊΠ»ΠΎΠ². ΠΠ°Π²Π°ΠΉ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΡ.
π§ Π£ΡΠ»ΠΎΠ²Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ
Π£ΡΠ»ΠΎΠ²Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΊΠΎΠ΄ ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π΅ΠΊΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ (Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅).
if
x := 10
if x > 5 {
fmt.Println("x Π±ΠΎΠ»ΡΡΠ΅ 5")
}
ΠΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π±Π»ΠΎΠΊ else
, Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΡΠΎ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠ΅ Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅:
if x%2 == 0 {
fmt.Println("x β ΡΡΡΠ½ΠΎΠ΅")
} else {
fmt.Println("x β Π½Π΅ΡΡΡΠ½ΠΎΠ΅")
}
ΠΠΎΠΏΡΡΡΠΈΠΌΠΎ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΡΡΠΌΠΎ Π²Π½ΡΡΡΠΈ if
:
if y := 7; y < 10 {
fmt.Println("y ΠΌΠ΅Π½ΡΡΠ΅ 10")
}
switch
switch
β ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ± Π²ΡΠ±ΠΎΡΠ° ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ². ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΠΈΡΠ°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ if-else
, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ switch
.
day := "ΡΡΠ΅Π΄Π°"
switch day {
case "ΠΏΠΎΠ½Π΅Π΄Π΅Π»ΡΠ½ΠΈΠΊ":
fmt.Println("ΠΠ°ΡΠ°Π»ΠΎ Π½Π΅Π΄Π΅Π»ΠΈ")
case "ΠΏΡΡΠ½ΠΈΡΠ°":
fmt.Println("ΠΠΎΡΡΠΈ Π²ΡΡ
ΠΎΠ΄Π½ΡΠ΅")
default:
fmt.Println("ΠΠ±ΡΡΠ½ΡΠΉ Π΄Π΅Π½Ρ")
}
switch
Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ βbreak
ΠΏΠΈΡΠ°ΡΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ.- ΠΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ:
switch day {
case "ΡΡΠ±Π±ΠΎΡΠ°", "Π²ΠΎΡΠΊΡΠ΅ΡΠ΅Π½ΡΠ΅":
fmt.Println("ΠΡΡ
ΠΎΠ΄Π½ΠΎΠΉ!")
}
π Π¦ΠΈΠΊΠ»Ρ
Π¦ΠΈΠΊΠ»Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΠ²Π΅ΡΡΠΈ Π½Π° ΡΠΊΡΠ°Π½ ΡΠΈΡΠ»Π° ΠΎΡ 1 Π΄ΠΎ 10 ΠΈΠ»ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π²Π²ΠΎΠ΄, ΠΏΠΎΠΊΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ Π²Π²Π΅Π΄ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
Π Go Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΊΠ» β for
, Π½ΠΎ ΠΎΠ½ ΡΠΌΠ΅Π΅Ρ Π²ΡΡ.
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ for
for i := 0; i < 5; i++ {
fmt.Println(i)
}
ΠΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅:
i := 0
β Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅i < 5
β ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΡi++
β ΡΠ°Π³ (ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΠΌi
Π½Π° 1)
ΠΠ°ΠΊ while
x := 5
for x > 0 {
fmt.Println(x)
x--
}
ΠΡΠΎΡ ΡΠΈΠΊΠ» ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΏΠΎΠΊΠ° x
Π±ΠΎΠ»ΡΡΠ΅ Π½ΡΠ»Ρ.
ΠΠ΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠΈΠΊΠ»
for {
fmt.Println("ΠΠ΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΡΡΡ")
break // ΠΠ΅ Π·Π°Π±ΡΠ΄Ρ Π²ΡΠΉΡΠΈ ;)
}
β Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠΌ
ΠΠ½ΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠΈΠΊΠ»Π°:
break
β Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΡΠΈΠΊΠ» ΠΈΠ»ΠΈswitch
.continue
β ΠΏΡΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ΅ΠΊΡΡΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ.
for i := 1; i <= 5; i++ {
if i == 3 {
continue // ΠΡΠΎΠΏΡΡΠΊΠ°Π΅ΠΌ 3
}
fmt.Println(i)
}
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ:
1
2
4
5
π Π¦ΠΈΠΊΠ» for range
β ΠΈΡΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡΠΌ
for range
β ΠΈΠ΄ΠΈΠΎΠΌΠ°ΡΠΈΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² Go. Π Π°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ, ΡΠ»Π°ΠΉΡΠ°ΠΌΠΈ, ΠΊΠ°ΡΡΠ°ΠΌΠΈ, ΡΡΡΠΎΠΊΠ°ΠΌΠΈ ΠΈ ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ.
ΠΡΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎ ΡΠ»Π°ΠΉΡΠ°ΠΌ ΠΈ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌ
package main
import "fmt"
func main() {
numbers := []int{10, 20, 30, 40}
// ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡ, ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
for index, value := range numbers {
fmt.Printf("ΠΠ½Π΄Π΅ΠΊΡ %d: Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ %d\n", index, value)
}
// Π’ΠΎΠ»ΡΠΊΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ (ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΠΌ ΠΈΠ½Π΄Π΅ΠΊΡ)
for _, value := range numbers {
fmt.Printf("ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅: %d\n", value)
}
// Π’ΠΎΠ»ΡΠΊΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ
for index := range numbers {
fmt.Printf("ΠΠ½Π΄Π΅ΠΊΡ: %d\n", index)
}
}
ΠΡΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎ ΠΊΠ°ΡΡΠ°ΠΌ
students := map[string]int{
"ΠΠ»ΠΈΡΠ°": 95,
"ΠΠΎΠ±": 87,
"ΠΠ°ΡΡ": 92,
}
for name, score := range students {
fmt.Printf("%s ΠΏΠΎΠ»ΡΡΠΈΠ» %d Π±Π°Π»Π»ΠΎΠ²\n", name, score)
}
ΠΡΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎ ΡΡΡΠΎΠΊΠ°ΠΌ (rune Π·Π° rune)
text := "ΠΡΠΈΠ²Π΅Ρ"
for index, char := range text {
fmt.Printf("ΠΠΎΠ·ΠΈΡΠΈΡ %d: ΡΠΈΠΌΠ²ΠΎΠ» %c\n", index, char)
}
π‘
for range
Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ UTF-8 ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΡΡΡΡΠΊΠΈΠΌΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ.
π defer
β ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
defer
β ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠΎ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π°ΠΆΠ½Π°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Π² Go.
ΠΠ°Π·ΠΎΠ²ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ
package main
import "fmt"
func main() {
fmt.Println("ΠΠ°ΡΠ°Π»ΠΎ")
defer fmt.Println("ΠΡΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅")
fmt.Println("Π‘Π΅ΡΠ΅Π΄ΠΈΠ½Π°")
fmt.Println("ΠΠΎΡΡΠΈ ΠΊΠΎΠ½Π΅Ρ")
// defer Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ Π·Π΄Π΅ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ
}
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ:
ΠΠ°ΡΠ°Π»ΠΎ
Π‘Π΅ΡΠ΅Π΄ΠΈΠ½Π°
ΠΠΎΡΡΠΈ ΠΊΠΎΠ½Π΅Ρ
ΠΡΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅
ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ defer (Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅)
func example() {
defer fmt.Println("ΠΠ΅ΡΠ²ΡΠΉ defer")
defer fmt.Println("ΠΡΠΎΡΠΎΠΉ defer")
defer fmt.Println("Π’ΡΠ΅ΡΠΈΠΉ defer")
fmt.Println("ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΊΠΎΠ΄")
}
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ:
ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΊΠΎΠ΄
Π’ΡΠ΅ΡΠΈΠΉ defer
ΠΡΠΎΡΠΎΠΉ defer
ΠΠ΅ΡΠ²ΡΠΉ defer
ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ β ΡΠ°Π±ΠΎΡΠ° Ρ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ
package main
import (
"fmt"
"os"
)
func readFile(filename string) error {
file, err := os.Open(filename)
if err != nil {
return err
}
defer file.Close() // β
Π€Π°ΠΉΠ» Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎ Π·Π°ΠΊΡΠΎΠ΅ΡΡΡ
// Π Π°Π±ΠΎΡΠ°Π΅ΠΌ Ρ ΡΠ°ΠΉΠ»ΠΎΠΌ...
fmt.Println("Π€Π°ΠΉΠ» ΠΎΡΠΊΡΡΡ ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ")
// ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π·Π΄Π΅ΡΡ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠ°,
// file.Close() Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡΡ
return nil
}
ΠΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ defer
- ΠΠ°ΠΊΡΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΡΠ΅ΡΠ΅Π²ΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ
- ΠΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ (mutex unlock)
- ΠΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ
- ΠΡΠΈΡΡΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ΅ΡΡΡΡΠΎΠ²
- ΠΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅ panic
β οΈ
defer
Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π΄Π°ΠΆΠ΅ ΠΏΡΠΈpanic
, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π΅Π³ΠΎ Π½Π°Π΄Π΅ΠΆΠ½ΡΠΌ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠΌ ΠΎΡΠΈΡΡΠΊΠΈ ΡΠ΅ΡΡΡΡΠΎΠ².
π· ΠΠ΅ΡΠΊΠΈ (labels) Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΈΠΊΠ»Π°ΠΌΠΈ
ΠΠ΅ΡΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ ΡΠΈΠΊΠ»Π°ΠΌΠΈ, ΡΠΊΠ°Π·ΡΠ²Π°Ρ ΡΠΎΡΠ½ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΡΠΈΠΊΠ» Π½ΡΠΆΠ½ΠΎ ΠΏΡΠ΅ΡΠ²Π°ΡΡ ΠΈΠ»ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ.
package main
import "fmt"
func findInMatrix() {
matrix := [][]int{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
}
target := 5
OuterLoop: // ΠΠ΅ΡΠΊΠ° Π΄Π»Ρ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΡΠΈΠΊΠ»Π°
for i, row := range matrix {
for j, value := range row {
if value == target {
fmt.Printf("ΠΠ°ΠΉΠ΄Π΅Π½ΠΎ %d Π² ΠΏΠΎΠ·ΠΈΡΠΈΠΈ [%d][%d]\n", target, i, j)
break OuterLoop // ΠΡΡ
ΠΎΠ΄ΠΈΠΌ ΠΈΠ· Π²ΡΠ΅Ρ
ΡΠΈΠΊΠ»ΠΎΠ²
}
}
}
}
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ continue Ρ ΠΌΠ΅ΡΠΊΠ°ΠΌΠΈ
func skipEvenRows() {
matrix := [][]int{{1, 2}, {3, 4}, {5, 6}}
RowLoop:
for i, row := range matrix {
if i%2 == 0 {
continue RowLoop // ΠΡΠΎΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΠ΅ΡΠ½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ
}
for _, value := range row {
fmt.Printf("%d ", value)
}
fmt.Println()
}
}
π§ͺ ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ: ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π΄Π°Π½Π½ΡΡ
package main
import (
"fmt"
"strings"
)
func processStudentData() {
students := map[string][]int{
"ΠΠ»ΠΈΡΠ°": {95, 87, 92},
"ΠΠΎΠ±": {78, 85, 90},
"ΠΠ°ΡΡ": {88, 91, 89},
}
fmt.Println("π ΠΠ½Π°Π»ΠΈΠ· ΡΡΠΏΠ΅Π²Π°Π΅ΠΌΠΎΡΡΠΈ ΡΡΡΠ΄Π΅Π½ΡΠΎΠ²")
fmt.Println(strings.Repeat("=", 40))
for name, grades := range students {
defer fmt.Printf("β
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° %s Π·Π°Π²Π΅ΡΡΠ΅Π½Π°\n", name)
var total, count int
var hasLowGrade bool
fmt.Printf("\nπ€ Π‘ΡΡΠ΄Π΅Π½Ρ: %s\n", name)
fmt.Print("π ΠΡΠ΅Π½ΠΊΠΈ: ")
for i, grade := range grades {
fmt.Printf("%d", grade)
if i < len(grades)-1 {
fmt.Print(", ")
}
total += grade
count++
if grade < 80 {
hasLowGrade = true
}
}
average := float64(total) / float64(count)
fmt.Printf("\nπ Π‘ΡΠ΅Π΄Π½ΠΈΠΉ Π±Π°Π»Π»: %.1f\n", average)
// ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΡΠ°ΡΡΡ ΡΡΡΠ΄Π΅Π½ΡΠ°
switch {
case average >= 90:
fmt.Println("π Π‘ΡΠ°ΡΡΡ: ΠΡΠ»ΠΈΡΠ½ΠΈΠΊ")
case average >= 80:
fmt.Println("β Π‘ΡΠ°ΡΡΡ: Π₯ΠΎΡΠΎΡΠΈΡΡ")
case hasLowGrade:
fmt.Println("β οΈ Π‘ΡΠ°ΡΡΡ: Π’ΡΠ΅Π±ΡΠ΅Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ")
default:
fmt.Println("π Π‘ΡΠ°ΡΡΡ: Π£Π΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ")
}
}
}
func main() {
processStudentData()
}
π‘ ΠΠ΄ΠΈΠΎΠΌΠ°ΡΠΈΡΠ½ΡΠ΅ Go ΠΏΠ°ΡΡΠ΅ΡΠ½Ρ
Early Return (ΡΠ°Π½Π½ΠΈΠΉ Π²ΠΎΠ·Π²ΡΠ°Ρ)
func validateUser(user User) error {
if user.Name == "" {
return errors.New("ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ")
}
if user.Age < 0 {
return errors.New("Π²ΠΎΠ·ΡΠ°ΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΌ")
}
if user.Email == "" {
return errors.New("email ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»Π΅Π½")
}
// ΠΡΠ½ΠΎΠ²Π½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ Π²ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΡΠΎΠΉΠ΄Π΅Π½Ρ
return nil
}
Guard Clauses (Π·Π°ΡΠΈΡΠ½ΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ)
func processOrder(order *Order) error {
// ΠΠ°ΡΠΈΡΠ½ΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ Π² Π½Π°ΡΠ°Π»Π΅
if order == nil {
return errors.New("Π·Π°ΠΊΠ°Π· Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ nil")
}
if len(order.Items) == 0 {
return errors.New("Π·Π°ΠΊΠ°Π· Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠΎΠ²Π°ΡΡ")
}
// ΠΡΠ½ΠΎΠ²Π½Π°Ρ Π»ΠΎΠ³ΠΈΠΊΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ
// ...
return nil
}
π‘ Π£ΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ β ΡΡΠΎ ΠΊΠ°ΡΠΊΠ°Ρ Π»ΡΠ±ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π£ΠΌΠ΅Π½ΠΈΠ΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ β ΠΊΠ»ΡΡ ΠΊ ΡΠΈΡΠ°Π΅ΠΌΠΎΠΌΡ ΠΈ Π½Π°Π΄ΡΠΆΠ½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ.
π ΠΠ»Π°Π²Π½ΠΎΠ΅ ΠΈΠ· Π³Π»Π°Π²Ρ
- Π£ΡΠ»ΠΎΠ²Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ (
if
,else
,switch
) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΊΠΎΠ΄ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ. - Π¦ΠΈΠΊΠ»
for
β ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°. for range
β ΠΈΠ΄ΠΈΠΎΠΌΠ°ΡΠΈΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡΠΌ Π² Go.defer
β ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π°ΠΆΠ½Π°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Π΄Π»Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΎΡΠΈΡΡΠΊΠΈ ΡΠ΅ΡΡΡΡΠΎΠ².- ΠΠ΅ΡΠΊΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠΎΡΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ ΡΠΈΠΊΠ»Π°ΠΌΠΈ.
- Early return ΠΈ guard clauses Π΄Π΅Π»Π°ΡΡ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠ°Π΅ΠΌΡΠΌ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΡΠΌ.
- ΠΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
break
ΠΈcontinue
Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΠΎΠΉ ΡΠΈΠΊΠ»Π°. - ΠΡΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΠΈΡΠ°ΡΡ Π³ΠΈΠ±ΠΊΠΈΠ΅ ΠΈ Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
π ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡ
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 1: ΠΠ½Π°Π»ΠΈΠ· ΡΠΈΡΠ΅Π»
ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ:
- Π‘ΠΎΠ·Π΄Π°Π΅Ρ ΡΠ»Π°ΠΉΡ ΡΠΈΡΠ΅Π» ΠΎΡ 1 Π΄ΠΎ 20
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ
for range
Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ° - ΠΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ½ΡΠ΅ ΡΠΈΡΠ»Π°
- ΠΠΎΠ΄ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΡΡΠΌΠΌΡ ΡΠ΅ΡΠ½ΡΡ ΡΠΈΡΠ΅Π»
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ
defer
Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° ΠΈΡΠΎΠ³ΠΎΠ²ΠΎΠΉ ΡΡΠΌΠΌΡ
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 2: ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ΅ΠΊΡΡΠ°
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ:
- ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ ΡΠ΅ΠΊΡΡΠ°
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ
for range
Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² - ΠΠΎΠ΄ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π³Π»Π°ΡΠ½ΡΡ ΠΈ ΡΠΎΠ³Π»Π°ΡΠ½ΡΡ
- ΠΠ³Π½ΠΎΡΠΈΡΡΠ΅Ρ ΠΏΡΠΎΠ±Π΅Π»Ρ ΠΈ Π·Π½Π°ΠΊΠΈ ΠΏΡΠ΅ΠΏΠΈΠ½Π°Π½ΠΈΡ
- ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² Π²ΠΈΠ΄Π΅ ΠΊΠ°ΡΡΡ
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 3: ΠΠΎΠΈΡΠΊ Π² ΠΌΠ°ΡΡΠΈΡΠ΅
Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠΈΡΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² Π΄Π²ΡΠΌΠ΅ΡΠ½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅:
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΡΠΈΠΊΠ»Ρ Ρ ΠΌΠ΅ΡΠΊΠ°ΠΌΠΈ
- ΠΡΠΈ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π²ΡΡ ΠΎΠ΄ΠΈΡΠ΅ ΠΈΠ· Π²ΡΠ΅Ρ ΡΠΈΠΊΠ»ΠΎΠ²
- ΠΠ΅ΡΠ½ΠΈΡΠ΅ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅
defer
Π΄Π»Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎΠΈΡΠΊΠ°