ΠΠ»Π°Π½
- Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΈ ΡΡΡΡΠΊΡΡΡΠ°: ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡΡΠ΅ΡΡ Ρ Π±Π°Π·ΠΎΠ²ΡΠΌΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΠ·ΡΠΊΠ° Go, ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ , ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ, ΡΡΠ»ΠΎΠ²Π½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠΈΠΊΠ»Ρ.
- Π€ΡΠ½ΠΊΡΠΈΠΈ: ΠΈΠ·ΡΡΠΈΡΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ Π² Go, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅.
- Π‘ΡΠ΅Π·Ρ (slices) ΠΈ ΠΌΠ°ΡΡΠΈΠ²Ρ: ΡΠ·Π½Π°ΠΉΡΠ΅, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ΅Π·Π°ΠΌΠΈ ΠΈ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ Π² Go.
- Π‘ΡΡΡΠΊΡΡΡΡ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ: ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡΡΠ΅ΡΡ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΡΡΡΠΊΡΡΡ ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π½ΠΈΠΌΠΈ.
- Π£ΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ: ΠΈΠ·ΡΡΠΈΡΠ΅ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ Π² Go ΠΈ ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ .
- ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ: ΡΠ·Π½Π°ΠΉΡΠ΅, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΈΡ Π² Go Π΄Π»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌΠ°.
- ΠΠΎΡΡΡΠΈΠ½Ρ ΠΈ ΠΊΠ°Π½Π°Π»Ρ: ΠΈΠ·ΡΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π³ΠΎΡΡΡΠΈΠ½ ΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠ² Π² Go.
- ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ: ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡΡΠ΅ΡΡ Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°ΠΌΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ Π² Go, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ ΠΏΠ°Π½ΠΈΠΊΠΈ.
- ΠΠ°ΠΊΠ΅ΡΡ ΠΈ ΠΈΠΌΠΏΠΎΡΡΡ: ΠΈΠ·ΡΡΠΈΡΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠ΄Π° Π² ΠΏΠ°ΠΊΠ΅ΡΡ ΠΈ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π² Go.
- Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅: ΡΠ·Π½Π°ΠΉΡΠ΅, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ°
testing
Π² Go. - Π Π°Π±ΠΎΡΠ° Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΡΠ΅ΡΡΡ: ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡΡΠ΅ΡΡ Ρ Π±Π°Π·ΠΎΠ²ΡΠΌΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΡΠ΅ΡΡΡ Π² Go.
- Π Π°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: ΠΈΠ·ΡΡΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΡΠ·ΡΠΊΠ΅ Go, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ.
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΈ ΡΡΡΡΠΊΡΡΡΠ°
ΠΠ°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ Goland
Π£ΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΏΡΡΠΈ Π΄ΠΎ ΠΏΠ°ΠΏΠΊΠΈ Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌΠΈ ΠΊΠΎΠ΄Π°ΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
Π Π΄ΠΎ ΠΏΠ°ΠΏΠΊΠΈ Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ Go
ΠΠ΅ΡΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. main ΡΡΠ½ΠΊΡΠΈΡ
ΠΠ΅ΡΠ²ΡΠΌ Π΄Π΅Π»ΠΎΠΌ Π² ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΏΠ°ΠΊΠ΅Ρ main
ΠΈ ΡΡΠ½ΠΊΡΠΈΡ main
, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Ρ
ΡΠ°Π½ΠΈΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° Go
Π myVar
Π·Π°ΠΏΠΈΡΠ°Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ, Π° ΡΠΆΠ΅ ΡΠ΅ΡΠ΅Π· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ fmt
ΠΈ Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ Print
ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ²Π΅ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ
package main
import "fmt"
func main() {
myVar := "Hello world"
fmt.Print(myVar)
}
- ΠΠ΅ΡΠ²ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ ΠΏΡΡΡ Π΄ΠΎ SDK Go (ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ)
- ΠΡΠΎΡΠΎΠΉ - GOPATH - ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΡΠ΅Π΄Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠ°Ρ Π² Go Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΊΠΎΡΠ½Π΅Π²ΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°, Π³Π΄Π΅ Ρ ΡΠ°Π½ΡΡΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΠΊΠΎΠ΄Ρ ΠΈ Π±ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Π½Π° Go.
- Π’ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Go ΡΠ΅ΡΠ΅Π·
build
ΠΈ ΠΊΠ»ΡΡΠΎΠΌ-o
Π·Π°Π΄Π°ΡΡΡΡ ΠΏΡΡΡ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. ΠΡΡΡ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡtmp
Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ - ΡΡΠΎ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΡΠ°ΠΉΠ», ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ.
Π’Π°ΠΊ ΠΆΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡΡΡΠΈΡΡ Π½ΡΠΆΠ½ΡΠΉ ΡΠ°ΠΉΠ» ΡΠ΅ΡΠ΅Π· Π΄Π°Π½Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
go run main.go
Π’Π°ΠΊ ΠΆΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ±ΠΈΠ»Π΄ΠΈΡΡ Π½ΡΠΆΠ½ΡΠΉ Π½Π°ΠΌ ΡΠ°ΠΉΠ» Π² Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊ Π½Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ
go build -o main_app main.go
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ
Π Go, ΠΊΠ°ΠΊ ΠΈ Π² Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ , ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ ΡΠ°ΠΌΡΠ΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ :
bool
: Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡtrue
ΠΈΠ»ΠΈfalse
.- ΡΠΈΡΠ»ΠΎΠ²ΡΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ
:
int
(int8
,int16
,int32
,int64
): ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠΎ Π·Π½Π°ΠΊΠΎΠΌ.uint
(uint8
,uint16
,uint32
,uint64
): ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π±Π΅Π· Π·Π½Π°ΠΊΠ°.float32
,float64
: ΡΠΈΡΠ»Π° Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΎΠΉ.complex64
/complex128
byte
=uint8
rune
=int32
string
: ΡΡΡΠΎΠΊΠΈ ΡΠ΅ΠΊΡΡΠ°.- ΠΌΠ°ΡΡΠΈΠ²Ρ ΠΈ ΡΡΠ΅Π·Ρ: ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°.
struct
: ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ , ΡΠΎΡΡΠΎΡΡΠΈΠ΅ ΠΈΠ· ΠΏΠΎΠ»Π΅ΠΉ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ².- ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ: Ρ ΡΠ°Π½ΡΡ Π°Π΄ΡΠ΅Ρ ΠΏΠ°ΠΌΡΡΠΈ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ.
interface
: Π½Π°Π±ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΡ ΠΏΠΎΠ΄ ΠΎΠ±ΡΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ.func
: ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ.maps
: ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΠΏΠ°Ρ ΠΊΠ»ΡΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.channels
: ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π³ΠΎΡΡΡΠΈΠ½Π°ΠΌΠΈ.
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ΅ΡΠ΅Π· ΡΡΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ:
var ΠΈΠΌΡ ΡΠΈΠΏ_Π΄Π°Π½Π½ΡΡ = Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
- ΡΠ°ΠΌΠΈ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡvar ΠΈΠΌΡ = Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
- ΡΠ°ΠΌΠΈ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π±Π΅Π· ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡΠΈΠΌΡ := Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
- Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ
Golang ΠΏΠΎΡΡΠΈ ΡΡΡΠΎΠ³ΠΎΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ·ΡΠΊ, ΠΏΠΎΡΡΠΎΠΌΡ Π΅ΡΠ»ΠΈ ΠΌΡ Π½Π΅ ΡΠΊΠ°ΠΆΠ΅ΠΌ ΡΠΈΠΏ, Π½ΠΎ ΡΠΊΠ°ΠΆΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, ΡΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ ΡΡΡΠΎΠΊΡ Π½Π° ΡΠΈΡΡΠ»ΠΎ - Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ
Π’Π°ΠΊ ΠΆΠ΅ Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠ²Π½ΡΠΉ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ Π΄Π°Π½Π½ΡΡ
ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΎΠ³ΠΎ ΠΆΠ΅ int
ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ ΡΠΈΡΠ»ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π² Π΄ΡΡΠ³ΠΎΠ΅
func main() {
myVar := "Hello world"
fmt.Print(myVar)
var a int = 10
b := 40
var c uint32 = 50
d := a + int(c)
}
Π’Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΡΡΠ°Π·Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠΎΠΌ:
func main() {
var (
name = "Oleg"
age = 30
)
fmt.Print(name)
fmt.Print(age)
}
ΠΠ»ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌ:
func main() {
var name, age = "Oleg", 30
fmt.Print(name)
fmt.Print(age)
}
Π Π°Π±ΠΎΡΠ° ΡΠΎ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ
Π§ΡΠΎΠ±Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡ ΡΡΡΠΎΠΊΠΈ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ +
func main() {
str1 := "Hello"
str2 := "World"
result := str1 + " " + str2
fmt.Println(result) // ΠΡΠ²ΠΎΠ΄ΠΈΡ: Hello World
}
Π’Π°ΠΊ ΠΆΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡΠΎΠΊΠΈ ΡΠ΅ΡΠ΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° Sprintf
, ΠΊΡΠ΄Π° ΠΏΠ΅ΡΠ²ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΌ ΡΡΡΠΎΠΊΡ ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ (%s
- ΡΡΡΠΎΠΊΠ°, %d
- ΡΠΈΡΠ»ΠΎ), Π° Π΄Π°Π»ΡΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Ρ Π½ΡΠΆΠ½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ
func main() {
var name, age = "Oleg", 30
c := fmt.Sprintf("Hello! I'm %s. And I'm %d years old", name, age)
fmt.Print(c)
}
Π§Π΅ΡΠ΅Π· ΡΡΠ½ΠΊΡΠΈΡ Join
ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΠΌΠ°ΡΡΠΈΠ² Π² ΡΡΡΠΎΠΊΡ
func main() {
strs := []string{"Hello", "World"}
result := strings.Join(strs, " ")
fmt.Println(result) // ΠΡΠ²ΠΎΠ΄ΠΈΡ: Hello World
}
Π€ΡΠ½ΠΊΡΠΈΡ Split
ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΡΠ°Π·Π±ΠΈΡΡ ΡΡΡΠΎΠΊΡ ΠΏΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠΌΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ Π² ΠΌΠ°ΡΡΠΈΠ²
func main() {
str := "apple,banana,orange"
arr := strings.Split(str, ",")
fmt.Println(arr) // ΠΡΠ²ΠΎΠ΄ΠΈΡ: [apple banana orange]
}
strings.Contains(s, substr)
:- ΠΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π»ΠΈ ΡΡΡΠΎΠΊΠ°Β
s
Β ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΡΒsubstr
. - ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π±ΡΠ»Π΅Π²ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅Β
true
, Π΅ΡΠ»ΠΈΒs
Β ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΒsubstr
, ΠΈΠ½Π°ΡΠ΅Βfalse
.
- ΠΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π»ΠΈ ΡΡΡΠΎΠΊΠ°Β
strings.HasPrefix(s, prefix)
:- ΠΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π»ΠΈ ΡΡΡΠΎΠΊΠ°Β
s
Β Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠ°Βprefix
. - ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π±ΡΠ»Π΅Π²ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅Β
true
, Π΅ΡΠ»ΠΈΒs
Β Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΡΒprefix
, ΠΈΠ½Π°ΡΠ΅Βfalse
.
- ΠΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π»ΠΈ ΡΡΡΠΎΠΊΠ°Β
strings.HasSuffix(s, suffix)
:- ΠΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ Π»ΠΈ ΡΡΡΠΎΠΊΠ°Β
s
Β ΡΡΡΡΠΈΠΊΡΠΎΠΌΒsuffix
. - ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π±ΡΠ»Π΅Π²ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅Β
true
, Π΅ΡΠ»ΠΈΒs
Β Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π°Βsuffix
, ΠΈΠ½Π°ΡΠ΅Βfalse
.
- ΠΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ Π»ΠΈ ΡΡΡΠΎΠΊΠ°Β
strings.Replace(s, old, new, n)
:- ΠΠ°ΠΌΠ΅Π½ΡΠ΅Ρ Π²ΡΠ΅ Π²Ρ
ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠΈΒ
old
Β Π² ΡΡΡΠΎΠΊΠ΅Βs
Β Π½Π° ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΡΒnew
. - ΠΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΒ
n
, ΡΡΠΎΠ±Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΠΌΠ΅Π½. - ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΡ ΡΡΡΠΎΠΊΡ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΌΠ΅Π½Ρ.
- ΠΠ°ΠΌΠ΅Π½ΡΠ΅Ρ Π²ΡΠ΅ Π²Ρ
ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠΈΒ
strings.ToLower(s)
:- ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Π²ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΡΡΡΠΎΠΊΠΈΒ
s
Β Π² Π½ΠΈΠΆΠ½ΠΈΠΉ ΡΠ΅Π³ΠΈΡΡΡ. - ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΡ ΡΡΡΠΎΠΊΡ Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ.
- ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Π²ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΡΡΡΠΎΠΊΠΈΒ
strings.ToUpper(s)
:- ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Π²ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΡΡΡΠΎΠΊΠΈΒ
s
Β Π² Π²Π΅ΡΡ Π½ΠΈΠΉ ΡΠ΅Π³ΠΈΡΡΡ. - ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΡ ΡΡΡΠΎΠΊΡ Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ.
- ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Π²ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΡΡΡΠΎΠΊΠΈΒ
strings.TrimSpace(s)
:- Π£Π΄Π°Π»ΡΠ΅Ρ Π²ΡΠ΅ Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ±Π΅Π»Ρ ΠΈΠ· ΡΡΡΠΎΠΊΠΈΒ
s
. - ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΡ ΡΡΡΠΎΠΊΡ Π±Π΅Π· ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ² Π² Π½Π°ΡΠ°Π»Π΅ ΠΈ ΠΊΠΎΠ½ΡΠ΅.
- Π£Π΄Π°Π»ΡΠ΅Ρ Π²ΡΠ΅ Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ±Π΅Π»Ρ ΠΈΠ· ΡΡΡΠΎΠΊΠΈΒ
Π¦ΠΈΠΊΠ»Ρ
Π¦ΠΈΠΊΠ» for
ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠΈΠΊΠ», ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π² Go ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ Π²Π°ΡΠΈΠ°ΡΠΈΡΠΌΠΈ:
// Π€ΠΎΡΠΌΠ° 1: Π‘ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠΈΠΌ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΠΌ
for init; condition; post {
// Π’Π΅Π»ΠΎ ΡΠΈΠΊΠ»Π°
}
// Π€ΠΎΡΠΌΠ° 2: ΠΠ°ΠΊ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΈΠΊΠ» while
for condition {
// Π’Π΅Π»ΠΎ ΡΠΈΠΊΠ»Π°
}
// Π€ΠΎΡΠΌΠ° 3: ΠΠ΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠΈΠΊΠ»
for {
// Π’Π΅Π»ΠΎ ΡΠΈΠΊΠ»Π°
}
Π¦ΠΈΠΊΠ» range
Π¦ΠΈΠΊΠ» range
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΠΌΠ°ΡΡΠΈΠ²Π°, ΡΡΠ΅Π·Π° (slice), ΡΡΡΠΎΠΊΠΈ, ΠΊΠ°ΡΡΡ (map) ΠΈΠ»ΠΈ ΠΊΠ°Π½Π°Π»Π° (channel). ΠΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠ½Π΄Π΅ΠΊΡ ΠΈΠ»ΠΈ ΠΊΠ»ΡΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
for index, value := range collection {
// Π’Π΅Π»ΠΎ ΡΠΈΠΊΠ»Π°
}
while
Π¦ΠΈΠΊΠ» while ΠΌΠΎΠ΄Π΅Π»ΠΈΡΡΠ΅ΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠΌ ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Π΄ΠΈΡΠ΅Π½Π΅Π»Π° Π² ΡΠΈΠΊΠ»Π΅ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ°
for condition {
// Π’Π΅Π»ΠΎ ΡΠΈΠΊΠ»Π°
}
do-while
Π Go ΡΠ°ΠΊΠΆΠ΅ Π½Π΅Ρ ΠΏΡΡΠΌΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΡΠΈΠΊΠ»Π° do-while
, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠΈΠΊΠ» ΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° break
for {
// Π’Π΅Π»ΠΎ ΡΠΈΠΊΠ»Π°
if !condition {
break
}
}
ΠΠ΅ΡΠ²Π»Π΅Π½ΠΈΡ
ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π²Π΅ΡΠ²Π»Π΅Π½ΠΈΡ:
func main() {
x := 10
if x > 5 {
fmt.Println("x Π±ΠΎΠ»ΡΡΠ΅ 5")
}
}
ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ else-if:
func main() {
age := 20
if age < 18 {
fmt.Println("ΠΡ Π½Π΅ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎΠ»Π΅ΡΠ½ΠΈΠΉ")
} else if age >= 18 && age < 60 {
fmt.Println("ΠΡ Π²Π·ΡΠΎΡΠ»ΡΠΉ")
} else {
fmt.Println("ΠΡ ΠΏΠΎΠΆΠΈΠ»ΠΎΠΉ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ")
}
}
Π Go ΡΠ°ΠΊΠΆΠ΅ Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ»ΠΎΠ²Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ Ρ ΠΊΠΎΡΠΎΡΠΊΠΈΠΌ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ (:=
). ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΠΈ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²Π½ΡΡΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ if
func main() {
if x := 5; x > 0 {
fmt.Println("x ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ")
} else if x < 0 {
fmt.Println("x ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ")
} else {
fmt.Println("x ΡΠ°Π²Π½ΠΎ Π½ΡΠ»Ρ")
}
}
Π€ΡΠ½ΠΊΡΠΈΠΈ
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ
Π‘Π°ΠΌΠ°Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ func
. ΠΠ°Π»Π΅Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ, Π΅Ρ ΡΠΈΠ³Π½Π°ΡΡΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ ΠΈΡ
ΡΠΈΠΏ. ΠΠΎΡΠ»Π΅ ΡΠΈΠ³Π½Π°ΡΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠΈΠΏ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ (Π΅ΡΠ»ΠΈ Π΅ΡΡΡ).
Π ΡΠ΅Π»Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ΄. ΠΡΠ»ΠΈ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ ΡΡΠΎ-ΡΠΎ Π²Π΅ΡΠ½ΡΡΡ, ΡΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ return
func sayHello() {
fmt.Println("ΠΡΠΈΠ²Π΅Ρ!")
}
func add(a, b int) int {
return a + b
}
Π’Π°ΠΊ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π²Π΅ΡΠ½ΡΡΡ ΡΡΠ°Π·Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²
func values() (int, int) {
x := 3
y := 4
return x, y
}
horizontal, vertical := valuews()
ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ
ΠΠ»Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π΅Ρ ΠΈΠΌΡ, ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡΡΡ ΠΊΡΡΠ³Π»ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ
sayHello() // ΠΡΠ²Π΅Π΄Π΅Ρ "ΠΡΠΈΠ²Π΅Ρ!"
result := add(3, 5) // ΠΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ result Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 8
ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² Go ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠΎ Π΅ΡΡΡ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΊΠΎΠΏΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΈ ΡΡΠ° ΠΊΠΎΠΏΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ
func increment(x int) {
x = x + 1
fmt.Println("ΠΠ½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ:", x)
}
num := 5
increment(num)
fmt.Println("ΠΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ:", num)
// ΠΠ½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ: 6 - Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ
// ΠΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ: 5 - Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ (Π½Π΅ ΠΌΡΡΠΈΡΠΎΠ²Π°Π½ΠΎ Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ)
ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅
ΠΡΠ»ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΡΠ°Π·ΠΈΡΡΡΡ Π½Π° ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ (ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ)
func incrementByReference(x *int) {
*x = *x + 1
fmt.Println("ΠΠ½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ:", *x)
}
num := 5
incrementByReference(&num)
fmt.Println("ΠΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ:", num)
// ΠΠ½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ: 6
// ΠΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ: 6
ΠΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ defer
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°. ΠΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ defer
, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Π° ΠΎΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΡΡΡ Π΄ΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠ°.
ΠΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ defer
:
- ΠΠΎΡΡΠ΄ΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ: ΠΡΠ»ΠΈ Π² ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ
defer
, ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Ρ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΈΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ. - ΠΠ°Ρ
Π²Π°Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²: ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ Π² ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ
defer
, Π²ΡΡΠΈΡΠ»ΡΡΡΡΡ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΏΡΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈdefer
. - ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠΈΡΡΠ²Π°ΡΡΡΡ Π·Π°ΡΠ°Π½Π΅Π΅: ΠΡΠ»ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ Π²
defer
, ΠΏΠΎΠ΄Π²Π΅ΡΠΆΠ΅Π½Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠΎ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π° Π½Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ·ΠΎΠ²Π°. - Π Π°Π±ΠΎΡΠ° Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ:
defer
ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ², ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Π·Π°ΠΊΡΡΡΠΈΠ΅ ΡΠ°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ , ΡΡΠΎΠ±Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ, ΡΡΠΎ ΡΡΠΈ ΡΠ΅ΡΡΡΡΡ Π±ΡΠ΄ΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½Ρ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΠΏΡΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ.
func readFile(filename string) error {
file, err := os.Open(filename)
if err != nil {
return err
}
defer file.Close()
// Π§ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΡΡΠ³ΠΈΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ
return nil
}
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΉ Π²ΡΠ·ΠΎΠ² file.Close()
Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ ΡΠ°ΠΉΠ» Π±ΡΠ΄Π΅Ρ Π·Π°ΠΊΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π·Π°Π²Π΅ΡΡΠΈΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ readFile()
. ΠΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΡΠ΅ΡΠ΅ΠΊ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ΅ ΠΈ ΡΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ.
Π‘ΡΠ΅Π·Ρ, ΠΌΠ°ΡΡΠΈΠ²Ρ ΠΈ map
ΠΠ°ΡΡΠΈΠ²Ρ
ΠΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ². ΠΠ°ΡΡΠΈΠ²Ρ Ρ ΡΠ°Π½ΡΡ Π² ΡΠ΅Π±Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΡ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΠΊΠ°Π·Π°Π»ΠΈ
func main() {
var arr [5]int // ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π°
arr[1] = 5 // Π·Π°Π΄Π°Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
arr2 := [5]int{}
arrWithValues := [5]int{1, 2, 3, 4}
}
Π‘Π»Π°ΠΉΡΡ
Π‘Π»Π°ΠΉΡ - ΡΡΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠ°ΡΡΠΈΠ², ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²
package main
import "fmt"
func main() {
week := [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8}
weekend := week[6:8]
fmt.Println(len(week)) // len ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ Π΄Π»ΠΈΠ½Ρ ΠΌΠ°ΡΡΠΈΠ²Π° - 8
fmt.Println(weekend) // [6 7]
fmt.Println(week[6:]) // [6 7 8]
fmt.Println(cap(weekend)) // cap ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠ°ΠΌΡΡΠΈ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΡΠ»Π°ΠΉΡ
animals := []string{} // ΡΡΠΎ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ»Π°ΠΉΡΠ° - Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ²Π°
animals = append(animals, "lion") // ΡΡΡ ΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠ»Π°ΠΉΡ
cars := make([]string, 5, 10) // ΡΠ°ΠΊ ΠΆΠ΅ ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ ΡΠ°ΠΊΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π΄Π°Π½Π½ΡΡ
}
Π‘Π»Π°ΠΉΡ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΏΡΠΈ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ
package main
import "fmt"
func main() {
a := []int{1}
b := a[0:1] // ΡΡΡ ΠΌΡ ΡΠ²ΡΠ·Π°Π»ΠΈ ΡΠ»Π°ΠΉΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΠ΅ΠΉΡΠ°Ρ Π½Π°ΡΠ°Π»ΠΈ ΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΌΠ°ΡΡΠΈΠ²
b[0] = 0 // Π·Π°Π΄Π°Π»ΠΈ Π½ΠΎΠ»ΠΈΠΊ Π² ΡΡΠΎΠΊΠΎΠ²ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅
fmt.Println(a) // [0] - Π²ΡΡΠ΅Π» Π½ΠΎΠ»ΠΈΠΊ
a[0] = 1 // ΠΏΠΎΠΌΠ΅Π½ΡΠ»ΠΈ ΡΡΠΎΠΊΠΎΠ²ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² Π½Π° 1
fmt.Println(b) // [1] - Π²ΡΡΠ»Π° Π΅Π΄ΠΈΠ½ΠΈΡΠΊΠ°
a = append(a, 2) // Π΄Π°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΡ ΡΠ»Π°ΠΉΡΡ
fmt.Println(a, b) // [1 2] [1] - ΡΡΡ ΡΠΆΠ΅ ΡΠ»Π°ΠΉΡΡ ΡΡΠ°Π»ΠΈ ΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΡΠ°Π·Π½ΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ
}
Map
ΠΠ°ΡΡΠ° - ΡΡΠΎ Π°ΡΡΠΎΡΠΈΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Ρ Π΅Ρ-ΡΠ°Π±Π»ΠΈΡΡ
ΠΠ»ΡΡΠΈ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ
package main
import "fmt"
func main() {
workdays := map[string]int{
"monday": 1,
"tuesday": 2,
"wednesday": 3,
"thursday": 4,
"friday": 5,
}
workdays["saturday"] = 6
workdays["sunday"] = 7
day, ok := workdays["saturday"] // Π²ΡΠΎΡΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ»ΡΡΠ° - true
if ok { // Π΅ΡΠ»ΠΈ ΠΊΠ»ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ
fmt.Println(day)
}
delete(workdays, "sunday") // ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ°
fmt.Println(workdays["tuesday"]) // 2
}
Π‘ΡΡΡΠΊΡΡΡΡ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ
ΡΡΡΡΠΊΡΡΡΡ
Π‘ΡΡΡΠΊΡΡΡΠ° - ΡΡΠΎ Π½Π°Π±ΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ Π΅Π΄ΠΈΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ
ΠΠΌΡ ΠΏΠΎΠ»Ρ Ρ Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ - ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΡΡΡ, ΡΠΎ ΡΡΡΠΎΡΠ½ΠΎΠΉ - Π½Π΅ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠ΅ΡΡΡ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΎ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΏΠ°ΠΊΠ΅ΡΠ΅ Π²Π½Π΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ
type Human struct {
Name string
age int
Width int
Height int
}
ΠΠ°Π»Π΅Π΅ Π² Π»ΡΠ±ΡΡ Π΄ΡΡΠ³ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΡΡΡΡΠΊΡΡΡΡ Human
package main
import "fmt"
type Human struct {
Name string
age int
Width int
Height int
}
func main() {
person := Human{
age: 20,
Name: "Valery",
Height: 178,
Width: 109,
}
fmt.Println(person)
}
ΠΠ΅ΡΠΎΠ΄Ρ
ΠΠ°Π·ΠΎΠ²Π°Ρ ΡΡΡΡΠΊΡΡΡΠ°
type Person struct {
Name string
Age int
}
ΠΠ΅ΡΠΎΠ΄ - ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π° ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠ΅. Π’ΠΎ Π΅ΡΡΡ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π°, Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΡΡΡΡΠΊΡΡΡΡ
Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π΄Π²Π° ΠΌΠ΅ΡΠΎΠ΄Π° Π½Π° ΡΡΡΡΠΊΡΡΡΠ΅ Person
. ΠΡΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΈΠΌΡ ΡΡΡΡΠΊΡΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° Π² ΡΠΊΠΎΠ±ΠΊΠ°Ρ
- ΡΡΠΎ ΡΠ΅ΡΠΈΠ²Π΅Ρ (ΠΏΡΠΈΡΠΌΠ½ΠΈΠΊ) - ΠΎΠ½ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π½ΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΊ ΡΡΡΡΠΊΡΡΡΠ΅.
ΠΠ΅ΡΠ²ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ GetName()
ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ Name
ΡΡΡΡΠΊΡΡΡΡ Person
. ΠΡΠΎΡΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ SetAge(age int)
ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΏΠΎΠ»Π΅ Age
ΡΡΡΡΠΊΡΡΡΡ Person
Π² ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ age
.
ΠΠΎ Π²ΡΠΎΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ (ΡΡΡΠ»ΠΊΡ) ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. Π ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΠΈΠΌΡ
func (p Person) GetName() string {
return p.Name
}
func (p *Person) SetAge(age int) {
p.Age = age
}
Π§ΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΈ ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΈ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ Π½Π° ΡΡΠΎΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ΅
person := Person{Name: "Alice", Age: 25}
name := person.GetName() // ΠΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ GetName()
fmt.Println(name) // ΠΡΠ²ΠΎΠ΄ΠΈΡ: Alice
person.SetAge(30) // ΠΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ SetAge()
fmt.Println(person.Age) // ΠΡΠ²ΠΎΠ΄ΠΈΡ: 30
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ
ΠΠ½ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠΎ ΡΡΡΡΠΊΡΡΡΠ΅, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ Π·Π°ΠΏΠΈΡΡ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π΄Π°Π²Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠ΅ ΠΏΠΎΠ»Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
type User struct {
name, email string
isConfirmed bool
}
func NewUser(name, email string) User {
return User{
email: email,
name: name,
isConfirmed: false,
}
}
func main() {
user := NewUser("Oleg", "oleg@yandex.ru")
fmt.Println(user) // {Oleg oleg@yandex.ru false}
}
ΠΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ
Π‘ΡΡΡΠΊΡΡΡΡ ΡΠ°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π°, ΡΠ°Π·Π±ΠΈΠ²Π°Ρ ΠΈΡ Π΄Π°Π½Π½ΡΠ΅
type Person struct {
name string
Parameters Parameters
}
type Parameters struct {
height int
age uint8
}
Π’Π°ΠΊ ΠΆΠ΅ Π΅ΡΡΡ ΠΈ Π²ΡΠΎΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΠΎΠ»Ρ ΡΠΆΠ΅ Π±ΡΠ΄ΡΡ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΡ Π½Π΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΡΡΡΡΠΊΡΡΡΠ΅ Parameters
, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Person
type Person struct {
name string
Parameters
}
type Parameters struct {
height int
age uint8
}
ΠΠ°Π½Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ
param := Parameters{height: 178, age: 20}
person := Person{name: "Oleg", Parameters: param}
Π£ΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ
Π Go ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ - ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π°Π΄ΡΠ΅Ρ Π² ΠΏΠ°ΠΌΡΡΠΈ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π§Π΅ΡΠ΅Π· ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ *
ΠΌΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ Π½Π° ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠ²Π»ΡΡΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ. ΠΠΏΠ΅ΡΠ°ΡΠΎΡ &
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π°Π΄ΡΠ΅ΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ.
var x int = 10
var ptr *int = &x
Π Π°Π·ΡΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ
Π Go ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ *
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ°Π·ΡΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΠ½ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ.
fmt.Println(*ptr) // ΠΡΠ²ΠΎΠ΄ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ptr (10)
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ΅ΡΠ΅Π· ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π°Π΄ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π°ΠΏΡΡΠΌΡΡ
*ptr = 20 // ΠΠ·ΠΌΠ΅Π½ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ x ΡΠ΅ΡΠ΅Π· ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ptr
fmt.Println(x) // ΠΡΠ²ΠΎΠ΄ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (20)
ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π² ΡΡΠ½ΠΊΡΠΈΠΈ
Π£ΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ Π² ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π² ΡΡΠ½ΠΊΡΠΈΡ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΡΠ΄Π΅Π»Π°Π½Π½ΡΠ΅ Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, Π±ΡΠ΄ΡΡ ΠΎΡΡΠ°Π·ΠΈΡΡΡΡ Π½Π° ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
func changeValue(ptr *int) {
*ptr = 30 // ΠΠ·ΠΌΠ΅Π½ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ΅ΡΠ΅Π· ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ
}
var y int = 10
changeValue(&y) // ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ y Π² ΡΡΠ½ΠΊΡΠΈΡ
fmt.Println(y) // ΠΡΠ²ΠΎΠ΄ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (30)
ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π² ΡΡΠ½ΠΊΡΠΈΠΈ
Π£ΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ, ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ ΡΡΡΡΠΊΡΡΡΡ. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ Π½Π° ΡΡΡΡΠΊΡΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±ΠΎΠ»ΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΌΠΎΠ² Π΄Π°Π½Π½ΡΡ ΠΏΡΠΈ ΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π² ΡΡΠ½ΠΊΡΠΈΠΈ
type Person struct {
Name string
Age int
}
func changeName(p *Person, newName string) {
p.Name = newName
}
var person1 = Person{"John", 25}
changeName(&person1, "Mike")
fmt.Println(person1.Name) // ΠΡΠ²ΠΎΠ΄ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΠΎΠ΅ ΠΈΠΌΡ ("Mike")
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π² Go Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡΡΠ²ΠΈΡΡ Π½ΠΎΠ²ΡΠΉ ΡΠΈΠΏ Ρ Π½Π°Π±ΠΎΡΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ βShapeβ Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΈΠ³ΡΡ:
type Shape interface {
Area() float64
Perimeter() float64
}
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°
ΠΠ°ΡΠ΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΡΡΠΊΡΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΡΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° βShapeβ Π΄Π»Ρ ΠΊΡΡΠ³Π° ΠΈΠ»ΠΈ βSquareβ Π΄Π»Ρ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ°:
type Circle struct {
radius float64
}
func (c Circle) Area() float64 {
return math.Pi * c.radius * c.radius
}
func (c Circle) Perimeter() float64 {
return 2 * math.Pi * c.radius
}
type Square struct {
sideLength float64
}
func (s Square) Area() float64 {
return s.sideLength * s.sideLength
}
func (s Square) Perimeter() float64 {
return 4 * s.sideLength
}
ΠΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ
Π ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΠΎΠ±ΠΎΠ±ΡΡΠ½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π² ΡΠ΅Π±Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ
func PrintShapeDetails(s Shape) {
fmt.Println("Area:", s.Area())
fmt.Println("Perimeter:", s.Perimeter())
}
func main() {
circle := Circle{radius: 5}
square := Square{sideLength: 10}
PrintShapeDetails(circle)
PrintShapeDetails(square)
}
ΠΡΠΎΠ³
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ - ΡΡΠΎ ΡΡΡΡΠΊΡΡΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠ°Ρ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π½Π°Π±ΠΎΡΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΈΠΏ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ.
Π§ΡΠΎΠ±Ρ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π΄Π»Ρ ΡΡΡΡΠΊΡΡΡΡ ΡΠΊΠ°Π·Π°ΡΡ Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ ΡΠΈΠΏΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΡ Π΄Π°Π½Π½ΡΡ
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
package main
import (
"fmt"
"math"
)
type Shape interface {
Area() float64
Perimeter() float64
}
type Square struct {
sideLength float64
}
type Circle struct {
radius float64
}
func (c Circle) Area() float64 {
return math.Pi * c.radius * c.radius
}
func (c Circle) Perimeter() float64 {
return 2 * math.Pi * c.radius
}
func (s Square) Area() float64 {
return s.sideLength * s.sideLength
}
func (s Square) Perimeter() float64 {
return 4 * s.sideLength
}
func printShapeDetails(s Shape) {
fmt.Println("Area:", s.Area())
fmt.Println("Perimeter:", s.Perimeter())
}
func main() {
circle := Circle{radius: 10}
square := Square{sideLength: 10}
printShapeDetails(circle)
printShapeDetails(square)
}
ΠΠΎΡΡΡΠΈΠ½Ρ ΠΈ ΠΊΠ°Π½Π°Π»Ρ
ΠΠΎΡΡΡΠΈΠ½Ρ
ΠΠΎΡΡΡΠΈΠ½Ρ (goroutines) Π² Go - ΡΡΠΎ Π»Π΅Π³ΠΊΠΎΠ²Π΅ΡΠ½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π° ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ. ΠΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π±Π΅Π· ΡΠ²Π½ΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². ΠΠΎΡΡΡΠΈΠ½Ρ ΡΠ°Π·Π΄Π΅Π»ΡΡΡ ΠΎΠ±ΡΠ΅Π΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π°Π΄ΡΠ΅ΡΠΎΠ² ΠΈ ΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ ΡΠ±ΠΎΡΡΠΈΠΊΠΎΠΌ ΠΌΡΡΠΎΡΠ°, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΠΈΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌΠΈ ΠΈ Π½Π΅Π΄ΠΎΡΠΎΠ³ΠΈΠΌΠΈ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ.
ΠΠΎΡΡΡΠΈΠ½Π° - ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½Π° Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π³ΠΎΡΡΡΠΈΠ½Ρ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Ρ ΠΊΠ»ΡΡΠ΅Π²ΡΠΌ ΡΠ»ΠΎΠ²ΠΎΠΌ go
func main() {
go myFunc() // Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π³ΠΎΡΡΡΠΈΠ½Ρ
// ...
}
func myFunc() {
// ΠΠΎΠ΄ ΡΡΠ½ΠΊΡΠΈΠΈ
}
ΠΠ°Π½Π°Π»
ΠΠ°Π½Π°Π»Ρ (channels) ΡΠ»ΡΠΆΠ°Ρ Π΄Π»Ρ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π³ΠΎΡΡΡΠΈΠ½Π°ΠΌΠΈ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². ΠΠ°Π½Π°Π»Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΠΊΠ°ΠΊ βΡΡΡΠ±Ρβ, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΡΠ΅ Π³ΠΎΡΡΡΠΈΠ½Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. ΠΠ½ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ Π΄Π°Π½Π½ΡΠΌ ΠΏΡΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ, ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π³ΠΎΠ½ΠΊΠΈ (race condition) ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΠ°Π½Π°Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π³ΠΎΡΡΡΠΈΠ½Π°ΠΌΠΈ
ΠΠ°Π½Π°Π»Ρ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ make
ch := make(chan int) // Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ°Π½Π°Π»Π° ΡΠΈΠΏΠ° int
Π’Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ°Π½Π°Π» ΡΠ΅ΡΠ΅Π· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π·Π°ΠΏΠΈΡΡ
var intChannel chan int // Π΅ΡΠ»ΠΈ ΠΌΡ Ρ
ΠΎΡΠΈΠΌ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π»ΡΠ±ΡΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ
, ΡΠΎ Π·Π΄Π΅ΡΡ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ interface
intChannel <- 1
number := <- intChannel
ΠΠ°ΡΠ΅ΠΌ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΊΠ°Π½Π°Π», ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ <-
:
ch <- value // ΠΡΠΏΡΠ°Π²ΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΊΠ°Π½Π°Π»
result := <-ch // ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΊΠ°Π½Π°Π»Π°
ΠΠ°Π½Π°Π»Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π±Π»ΠΎΠΊΠΈΡΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π³ΠΎΡΡΡΠΈΠ½Ρ ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΠΈ, ΠΏΠΎΠΊΠ° Π΄ΡΡΠ³Π°Ρ Π³ΠΎΡΡΡΠΈΠ½Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π³ΠΎΡΠΎΠ²Π° Π΄Π»Ρ ΠΎΠ±ΠΌΠ΅Π½Π°. ΠΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π³ΠΎΠ½ΠΊΠΈ (race condition) ΠΈ Π΄Π΅Π»Π°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ Π΄Π»Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Go ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΌΡΡΡΠ΅ΠΊΡΡ (mutexes) ΠΈ ΡΡΠ»ΠΎΠ²Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ (condition variables), ΡΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΎΠ±ΡΠΈΠΌ ΡΠ΅ΡΡΡΡΠ°ΠΌ ΠΈ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ Π³ΠΎΡΡΡΠΈΠ½.
ΠΡΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈ Π½Π΅Π±ΡΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠ°Π½Π°Π»
ΠΠ΅Π±ΡΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠ°Π½Π°Π» ΠΌΠΎΠΆΠ΅Ρ Π² ΡΠ΅Π±Ρ ΠΏΡΠΈΠ½ΡΡΡ ΡΠΎΠ²Π½ΠΎ ΠΎΠ΄Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎ ΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ°, ΠΏΠΎΠΊΠ° Π΅Π³ΠΎ Π½Π΅ ΠΏΡΠΎΡΠΈΡΠ°Π΅Ρ Π³ΠΎΡΡΡΠΈΠ½Π°. ΠΡΠ»ΠΈ Π³ΠΎΡΡΡΠΈΠ½Π° Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ ΠΊΠΎΠ΄Π° Π½Π΅ ΠΏΡΠΎΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π½Π΅Π±ΡΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°, ΡΠΎ ΠΏΠΎΡΠΎΠΊ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ Π΄ΠΎ ΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ°, ΠΏΠΎΠΊΠ° Π΅Π³ΠΎ Π½Π΅ Π½Π°ΡΠ½ΡΡ ΡΠΈΡΠ°ΡΡ
ch := make(chan int)
ΠΡΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠ°Π½Π°Π» Π² ΡΠ΅Π±Π΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΆΠ΅ Π²ΡΠ΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π½Π°ΠΌΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ΅Π΅ΠΊ ΠΏΠΎΠ΄ Π΄Π°Π½Π½ΡΠ΅. ΠΠ½ ΡΠ°ΠΊ ΠΆΠ΅ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΠ΅ΡΡΠΎ ΠΏΠΎΠ΄ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ°Π΅ΡΡΡ. ΠΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΏΡΠΎΡΠΈΡΠ°Π»ΠΈ, ΡΠΎ ΠΌΠ΅ΡΡΠΎ ΠΏΠΎΠ΄ Π½ΠΎΠ²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΡΡΡ.
ch := make(chan int, 5)
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π³ΠΎΡΡΡΠΈΠ½ ΠΈ ΠΊΠ°Π½Π°Π»ΠΎΠ²
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΡΠΎΠ·Π΄Π°ΡΠΌ ΠΊΠ°Π½Π°Π» resultChan
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ Π²ΡΠ΅ ΠΏΡΠΎΡΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΊΠ²Π°Π΄ΡΠ°ΡΡ. ΠΠ°ΡΠ΅ΠΌ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΌΡ Π΄ΠΎΡΡΠ°ΡΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ.
func main() {
numbers := []int{1, 2, 3, 4, 5}
resultChan := make(chan int)
for _, num := range numbers {
go square(num, resultChan)
}
total := 0
for i := 0; i < len(numbers); i++ {
total += <-resultChan
}
fmt.Println("Π‘ΡΠΌΠΌΠ° ΠΊΠ²Π°Π΄ΡΠ°ΡΠΎΠ² ΡΠΈΡΠ΅Π»:", total)
}
func square(num int, resultChan chan<- int) {
square := num * num
resultChan <- square
}
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ
ΠΡΠΈΠ±ΠΊΠΈ
Errors: Π Go ΠΎΡΠΈΠ±ΠΊΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ error
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅. ΠΠ½ ΠΈΠΌΠ΅Π΅Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Error() string
, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΠ±ΡΡΠ½Π°Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ (Error Checking): ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ»ΠΎΠ²Π½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΎΠ±ΡΡΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ if
ΠΈΠ»ΠΈ switch
. ΠΡΠΈΠΌΠ΅Ρ:
result, err := SomeFunction()
if err != nil {
// ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΊΠΈ
} else {
// ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°
}
ΠΠΎΠ·Π²ΡΠ°Ρ ΠΎΡΠΈΠ±ΠΎΠΊ (Returning Errors): Π€ΡΠ½ΠΊΡΠΈΠΈ Π² Go ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΌΡ ΠΊΠΎΠ΄Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ. ΠΡΠΈΠΌΠ΅Ρ:
func SomeFunction() (int, error) {
// ...
if someCondition {
return 0, errors.New("some error")
}
// ...
return result, nil
}
ΠΡΠΈΠ±ΠΊΠΈ ΠΊΠ°ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡΒ (Errors as Values): ΠΠ°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ Π² Go ΠΎΡΠΈΠ±ΠΊΠΈ ΡΠ²Π»ΡΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, Π° Π½Π΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠΌΠΈ. ΠΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ²Π½ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Ρ ΠΊΠΎΠ΄ΠΎΠΌ.
ΠΠ°Π½ΠΈΠΊΠΈ
ΠΠ°Π½ΠΈΠΊΠ° (Panic): ΠΠ°Π½ΠΈΠΊΠ° - ΡΡΠΎ ΡΠ΅ΡΡΠ΅Π·Π½Π°Ρ ΠΎΡΠΈΠ±ΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΎΠ³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΠ°Π½ΠΈΠΊΠ°, Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ, ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΡΠ΅ΠΊ Π²ΡΠ·ΠΎΠ²ΠΎΠ² (stack trace). ΠΠ°Π½ΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π΄ΠΎΡΡΡΠΏΠ΅ ΠΊ nil-ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΈΠ»ΠΈ ΠΏΡΠΈ Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π½Π° Π½ΠΎΠ»Ρ.
ΠΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ (Recover): Π§ΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ ΠΏΠΎΠ»Π½ΡΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΏΠ°Π½ΠΈΠΊΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ (recover). Recover ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΡ
ΡΡΠ½ΠΊΡΠΈΡΡ
(deferred functions). ΠΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° interface{}
ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΠ° ΠΏΠ°Π½ΠΈΠΊΠΈ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅.
func main() {
defer func() {
if r := recover(); r != nil {
// ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΠ°Π½ΠΈΠΊΠΈ
}
}()
// ...
panic("something went wrong")
// ...
}
Π£ΠΏΡΠΎΡΠ΅Π½Π½ΠΎΠ΅ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅Β (Simplified Recovery): Π Go 1.13 ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ Π²Π΅ΡΡΠΈΡΡ Π±ΡΠ»ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΡΠΏΡΠΎΡΠ΅Π½Π½ΠΎΠ΅ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΡΠ²Π°ΡΡ ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΏΠ°Π½ΠΈΠΊΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ.
func main() {
// ...
if r := recover(); r != nil {
// ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΠ°Π½ΠΈΠΊΠΈ
}
// ...
}
ΠΠ°ΠΊΠ΅ΡΡ ΠΈ ΠΈΠΌΠΏΠΎΡΡΡ
Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
Π Π°Π±ΠΎΡΠ° Ρ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΠΈ ΡΠ΅ΡΡΡ
Π Π°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
ΠΡΠΎΡΠ΅Π΅
ΠΠ΅Π±-ΡΠ΅ΡΠ²Π΅Ρ Π½Π° Golang
Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅Ρ:
package main
import (
"log"
"net/http"
)
func Handler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello world!\n"))
}
func main() {
http.HandleFunc("/", Handler)
log.Println("Start server on PORT:8081")
log.Fatal(http.ListenAndServe(":8081", nil))
}
Π‘Π±ΠΎΡΠΊΠ° ΠΈ Π·Π°ΠΏΡΡΠΊ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΏΠΎΠ΄ Windows ΠΈ Linux
Π§ΡΠΎΠ±Ρ ΡΠΎΠ±ΡΠ°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ Π΄ΡΡΠ³ΡΡ ΠΠ‘, Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ GOOS
ΠΈ GOARCH