ΠΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ Π΅ ΡΠ΅Π»ΠΈΠ·ΡΡ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ½ΠΈΡ Π΅Π·ΠΈΠΊ Go 1.22, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π° ΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ° Google Ρ ΡΡΠ°ΡΡΠΈΠ΅ΡΠΎ Π½Π° ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ° ΠΊΠ°ΡΠΎ Ρ ΠΈΠ±ΡΠΈΠ΄Π½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΡΡΡΠ΅ΡΠ°Π²Π°ΡΠΎ Π²ΠΈΡΠΎΠΊΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΈΡΠ΅ Π΅Π·ΠΈΡΠΈ Ρ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²Π°ΡΠ° Π½Π° ΡΠΊΡΠΈΠΏΡΠΎΠ²ΠΈΡΠ΅ Π΅Π·ΠΈΡΠΈ, ΠΊΠ°ΡΠΎ Π»Π΅ΡΠ½ΠΎΡΠ° Π·Π° ΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄, Π±ΡΡΠ·ΠΈΠ½Π° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ Π·Π°ΡΠΈΡΠ° ΠΎΡ Π³ΡΠ΅ΡΠΊΠΈ. ΠΠΎΠ΄ΡΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΡ BSD.
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡΡΡ Π½Π° Go Π΅ Π±Π°Π·ΠΈΡΠ°Π½ Π½Π° ΠΏΠΎΠ·Π½Π°ΡΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ ΠΎΡ Π΅Π·ΠΈΠΊΠ° C Ρ ΠΎΡΠ΄Π΅Π»Π½ΠΈ Π·Π°ΠΈΠΌΡΡΠ²Π°Π½ΠΈΡ ΠΎΡ Π΅Π·ΠΈΠΊΠ° ΠΠ±Π΅ΡΠΎΠ½. ΠΠ·ΠΈΠΊΡΡ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ΅Π½, Π½ΠΎ ΠΊΠΎΠ΄ΡΡ Π΅ Π»Π΅ΡΠ½ΠΎ ΡΠ΅ΡΠΈΠΌ ΠΈ ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΠΌ. ΠΠΎΠ΄ΡΡ Π½Π° Go ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ° Π² ΠΎΡΠ΄Π΅Π»Π½ΠΈ Π±ΠΈΠ½Π°ΡΠ½ΠΈ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π½Π°ΡΠΈΠ²Π½ΠΎ, Π±Π΅Π· Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° (ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅ Π·Π° ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠ°Π½Π΅, ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ ΠΈ Π΄ΡΡΠ³ΠΈ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈ Π·Π° ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Π½Π° Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Ρ ΠΊΠ°ΡΠΎ runtime-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ), ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΏΠΎΡΡΠΈΠ³Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ, ΡΡΠ°Π²Π½ΠΈΠΌΠ° Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ Π½Π° Π΅Π·ΠΈΠΊΠ° C.
ΠΡΠΎΠ΅ΠΊΡΡΡ Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ Ρ ΠΎΠ³Π»Π΅Π΄ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡ ΠΈ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄ΡΠ΅Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠΉΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π½Π° Π½ΠΈΠ²ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π° Π·Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΈ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅, ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Π½ΠΈ ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ. ΠΠ·ΠΈΠΊΡΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΠΈ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π° Π·Π° Π·Π°ΡΠΈΡΠ° ΠΎΡ ΠΈΠ·Π»ΠΈΠ·Π°Π½Π΅ ΠΈΠ·Π²ΡΠ½ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΈΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π½Π° Π·Π°Π΄Π΅Π»Π΅Π½Π°ΡΠ° ΠΏΠ°ΠΌΠ΅Ρ ΠΈ ΠΎΡΠΈΠ³ΡΡΡΠ²Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΡΠ±ΠΈΡΠ°Ρ Π½Π° Π±ΠΎΠΊΠ»ΡΠΊ.
Π‘ΡΠ΅Π΄ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² Π½ΠΎΠ²ΠΎΡΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅:
- Π ΡΠΈΠΊΠ»ΠΈ Β«forΒ» Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΈ ΠΎΡ ΡΠ΅Π»ΠΈ ΡΠΈΡΠ»Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° ΠΏΠ΅ΡΠ΅Π±ΠΎΡ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΎΡ 0 Π΄ΠΎ 9 Π²Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠΈΠΊΡΠ» Β«for i := range 10 {β¦}Β».
- Π ΡΠΈΠΊΠ»ΠΈ Β«forΒ» Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½Π° (GOEXPERIMENT=rangefunc) ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΠ° ΡΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΡ ΠΊΠ°ΡΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Β«for i, x := range slices.Backward(s) {β¦}Β»
- Π Π΅ΡΠ΅Π½ Π΅ Π΄ΡΠ»Π³ΠΎΠ³ΠΎΠ΄ΠΈΡΠ΅Π½ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΡΠΈΠΊΠ»ΠΈ Β«forΒ», ΠΊΠΎΠΉΡΠΎ Π²ΠΎΠ΄Π΅ΡΠ΅ Π΄ΠΎ ΡΠΏΠΎΠ΄Π΅Π»ΡΠ½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΡΠΈΠΊΡΠ»Π° Π² ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° Π³ΠΎΡΡΡΠΈΠ½ΠΈ (goroutine). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ΄ΡΡ values := []string{"a", "b", "c"} for _, v := range values { go func() { fmt.Println(v) done <- true }() } ΡΠ΅Π³Π° ΡΠ΅ ΠΈΠ·Π²Π΅Π΄Π΅ Β«aΒ», Β«bΒ» ΠΈ Β«cΒ», Π° Π½Π΅ ΡΠ°ΠΌΠΎ Β«cΒ», ΠΊΠ°ΠΊΡΠΎ ΠΏΡΠ΅Π΄ΠΈ.
- ΠΡΠΎΠ²Π΅Π΄Π΅Π½Π° Π΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π² runtime, ΠΊΠΎΡΡΠΎ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Ρ 1-3% ΠΈ Π½Π°ΠΌΠ°Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΡΠΌΠ°ΡΠΈΡΡΠ° Π½Π° ΠΏΠ°ΠΌΠ΅Ρ Π² ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ 1%.
- ΠΡΠΎΠ΄ΡΠ»ΠΆΠ΅Π½Π° ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π² ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄Π° (PGO β ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ, ΡΡΠΊΠΎΠ²ΠΎΠ΄Π΅Π½Π° ΠΎΡ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠ°Π½Π΅), ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° ΡΠ΅ Π²Π·Π΅ΠΌΠ°Ρ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈΡΠ΅, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°. Π Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΡΡ Π²ΠΊΠ»ΡΡΠ²Π° ΡΡΠ΅Π΄ΡΡΠ²Π° Π·Π° Π΄Π΅Π²ΠΈΡΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ, ΠΊΠΎΠΈΡΠΎ Π·Π°ΠΌΠ΅Π½ΡΡ Π½Π΅ΠΏΡΠ΅ΠΊΠΈΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ Ρ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈ ΠΈΠ½Π»Π°ΠΉΠ½-Π±Π»ΠΎΠΊΠΎΠ²Π΅.
- Π‘ Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° PGO, Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΎΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π΄Π° ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ Ρ 2-14%.
- Π ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½Π° (GOEXPERIMENT=newinliner) ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Π·Π° ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ (inlining) Π½Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ Π΅Π²ΡΠΈΡΡΠΈΠΊΠ° Π·Π° ΡΠ°Π·Π΄Π΅Π»ΡΠ½Π΅ Π½Π° Π²Π°ΠΆΠ½ΠΈ ΠΈ Π²ΡΠΎΡΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
- Π ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ ΠΏΠ°ΠΊΠ΅ΡΡΡ βmath/rand/v2β, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΠΏΠΎ-ΡΡΠ»ΠΎΡΡΠ΅Π½ API ΠΈ Π²ΠΊΠ»ΡΡΠ²Π° ΠΏΠΎ-Π±ΡΡΠ·ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈ Π·Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠ΅Π²Π΄ΠΎΡΠ»ΡΡΠ°ΠΉΠ½ΠΈ ΡΠΈΡΠ»Π°.
- Π ΠΏΠ°ΠΊΠ΅ΡΠ° net/http.ServeMux Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΡΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ΠΈ ΠΈ ΠΌΠ°ΡΠΊΠΈ Π² ΡΠ°Π±Π»ΠΎΠ½ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°Π±Π»ΠΎΠ½ΡΡ βGET /static/{id}/β ΡΠ΅ ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π° ΠΊΡΠΌ Π·Π°ΡΠ²ΠΊΠΈ Ρ HTTP ΠΌΠ΅ΡΠΎΠ΄ βGETβ ΠΈ ΡΠ΅ Π·Π°ΠΏΠ°Π·ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° Π²ΡΠΎΡΠΈΡ ΡΠ΅Π³ΠΌΠ΅Π½Ρ ΠΎΡ Π·Π°ΡΠ²Π΅Π½ΠΈΡ ΠΏΡΡ Π² ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° βidβ.
- Π ΠΏΠ°ΠΊΠ΅ΡΠ° database/sql Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠΈΠΏΠ° Null[T], ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΠΊΠ°Π½ΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΏΡΠΈΠ΅ΠΌΠ°Ρ ΡΡΠΎΠΉΠ½ΠΎΡΡ NULL. Π ΠΏΠ°ΠΊΠ΅ΡΠ° slices Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° Concat Π·Π° ΡΠ»ΠΈΠ²Π°Π½Π΅ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ»Π°ΠΉΡΠ° ΠΎΡ Π²ΡΡΠΊΠ°ΠΊΡΠ² ΡΠΈΠΏ.
- Π ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΡΠ°Π±ΠΎΡΠ½ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° (ΠΊΠΎΠ»Π΅ΠΊΡΠΈΠΈ ΠΎΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ) Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° βvendorβ, ΡΡΠ΄ΡΡΠΆΠ°ΡΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΊΡΠΌ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°Π±ΠΎΡΠ½ΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ. ΠΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠ° ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π° ΠΏΡΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° βgo work vendorβ ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ ΠΏΡΠΈ Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΎΠΏΡΠΈΡΡΠ° "-mod=vendor" (Π²ΠΊΠ»ΡΡΠ²Π° ΡΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠ΅ Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ vendor).
ΠΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΡΠΈΠ»ΠΈΡΠΈΡΠ΅.
- go get Π²Π΅ΡΠ΅ Π½Π΅ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΈΠ·Π²ΡΠ½ ΠΌΠΎΠ΄ΡΠ»Π° Π² ΠΎΡΡΠ°ΡΠ΅Π»ΠΈΡ ΡΠ΅ΠΆΠΈΠΌ GOPATH (ΡΠΎΠ΅ΡΡ Ρ GO111MODULE=off). ΠΡΡΠ³ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ, ΠΊΠ°ΡΠΎ go build ΠΈ go test, ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Ρ Π΄Π° ΡΠ°Π±ΠΎΡΡΡ Π·Π° ΠΎΡΡΠ°ΡΠ΅Π»ΠΈ GOPATH ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ Π·Π° Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΏΠ΅ΡΠΈΠΎΠ΄.
- go mod init Π²Π΅ΡΠ΅ Π½Π΅ ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π° Π΄Π° ΠΈΠΌΠΏΠΎΡΡΠΈΡΠ° ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡΠ° ΠΊΡΠΌ ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅ ΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π·Π° Π΄ΡΡΠ³ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ Π½Π° Π΄ΠΎΡΡΠ°Π²ΡΠΈΡΠΈ (ΠΊΠ°ΡΠΎ Gopkg.lock).
- go test -cover ΡΠ΅Π³Π° ΠΎΡΠΏΠ΅ΡΠ°ΡΠ²Π° ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅ Π½Π° ΠΏΠΎΠΊΡΠΈΡΠΈΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π½ΡΠΌΠ°Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ ΡΠ΅ΡΡΠΎΠ²ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅. ΠΠΎ Go 1.22 go test -cover Π·Π° ΡΠ°ΠΊΡΠ² ΠΏΠ°ΠΊΠ΅Ρ ΡΠ΅ΡΠ΅ Π΄Π° Π΄ΠΎΠΊΠ»Π°Π΄Π²Π°? mymod/mypack [no test files]
ΠΈ ΡΠ΅Π³Π° Ρ Go 1.22 ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ Π² ΠΏΠ°ΠΊΠ΅ΡΠ° ΡΠ΅ ΡΡΠΈΡΠ°Ρ Π·Π° Π½Π΅ΠΏΠΎΠΊΡΠΈΡΠΈ: mymod/mypack coverage: 0.0% ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈΡΠ΅ ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π°ΠΊΠΎ ΠΏΠ°ΠΊΠ΅ΡΡΡ Π½Π΅ ΡΡΠ΄ΡΡΠΆΠ° ΠΈΠ·ΠΎΠ±ΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ΅ΠΌ ΠΊΠΎΠ΄, Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π΄ΠΎΠΊΠ»Π°Π΄Π²Π°ΠΌΠ΅ Π·Π° Π·Π½Π°ΡΠΈΠΌ ΠΏΡΠΎΡΠ΅Π½Ρ ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅; Π·Π° ΡΠ°ΠΊΠΈΠ²Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ go test ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ Π΄Π° Π΄ΠΎΠΊΠ»Π°Π΄Π²Π° Π·Π° Π»ΠΈΠΏΡΠ° Π½Π° ΡΠ΅ΡΡΠΎΠ²ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅.
- Π£Π΅Π± ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡΡ Π½Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° trace Π±Π΅ΡΠ΅ Π»Π΅ΠΊΠΎ ΠΎΠ±Π½ΠΎΠ²Π΅Π½ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΠΏΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° Π½ΠΎΠ²ΠΈΡ ΡΡΠ°ΡΠΈΡΠΎΠ²ΡΠΈΠΊ, ΡΠ΅ΡΠ΅Π½ΠΈ Π±ΡΡ Π° Π½ΡΠΊΠΎΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½Π° Π΅ ΡΠ΅ΡΠΈΠΌΠΎΡΡΡΠ° Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΡΡΠ°Π½ΠΈΡΠΈ. Π£Π΅Π± ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡΡ ΡΠ΅Π³Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΈΠ·ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠΈ Π² ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠ°Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅. ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡΡ Π·Π° ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ°ΡΠ° ΡΠ΅Π³Π° ΡΡΡΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΏΡΠ»Π½Π°ΡΠ° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎΡΡ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ. Π’Π΅Π·ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠΌΠΈ ΡΠ°ΠΌΠΎ Π·Π° ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠΈ, ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ Π½Π° Go 1.22 ΠΈΠ»ΠΈ ΠΏΠΎ-Π½ΠΎΠ²Π° Π²Π΅ΡΡΠΈΡ. Π Π±ΡΠ΄Π΅ΡΠ° Π²Π΅ΡΡΠΈΡ Π½ΡΠΊΠΎΠΈ ΠΎΡ ΡΠ΅Π·ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠ΅ Π±ΡΠ΄Π°Ρ Π²Π½Π΅ΡΠ΅Π½ΠΈ ΠΈ Π² ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠΈΡΠ΅, ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΠΎΡ ΠΏΠΎ-ΡΡΠ°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° Go.
- Π‘ΡΠ΅Π΄Π°ΡΠ° Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ΅Π³Π° ΡΡΡ ΡΠ°Π½ΡΠ²Π° ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈ Π·Π° ΡΡΠ±ΠΈΡΠ°Π½Π΅ Π½Π° Π±ΠΎΠΊΠ»ΡΠΊ, Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ΡΠ΅, Π±Π»ΠΈΠ·ΠΎ Π΄ΠΎ Π²ΡΠ΅ΠΊΠΈ ΠΎΠ±Π΅ΠΊΡ Π² ΠΊΡΠΏΡΠΈΠ½Π°. Π’Π°Π·ΠΈ ΠΏΡΠΎΠΌΡΠ½Π° ΡΡΡΠΎ ΡΠ°ΠΊΠ° Π½Π°ΠΌΠ°Π»ΡΠ²Π° ΡΠ°Π·Ρ ΠΎΠ΄ΠΈΡΠ΅ Π·Π° ΠΏΠ°ΠΌΠ΅Ρ Π½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ Go Ρ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎ 1%, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π΄Π΅Π΄ΡΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡΠ° Π½Π° ΠΈΠ·Π»ΠΈΡΠ½ΠΈΡΠ΅ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈ. Π Π½ΡΠΊΠΎΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ°Π·ΠΈ ΠΏΡΠΎΠΌΡΠ½Π° ΠΊΠΎΡΠΈΠ³ΠΈΡΠ° Π³ΡΠ°Π½ΠΈΡΠΈΡΠ΅ Π½Π° ΠΊΠ»Π°ΡΠ° ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ, ΡΠ°ΠΊΠ° ΡΠ΅ Π½ΡΠΊΠΎΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠ΅Ρ Π²ΡΡΠ»Π΅Π½ΠΈ Π² ΠΏΠΎ-Π²ΠΈΡΠΎΠΊ ΠΊΠ»Π°Ρ ΡΠ°Π·ΠΌΠ΅Ρ. ΠΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ΡΠΎ ΠΎΡ ΡΠ°Π·ΠΈ ΠΏΡΠΎΠΌΡΠ½Π° Π΅, ΡΠ΅ Π°Π΄ΡΠ΅ΡΠΈΡΠ΅ Π½Π° Π½ΡΠΊΠΎΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΡΠ΅Π΄ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ ΡΠ° Π±ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΡΠ°Π²Π½Π΅Π½ΠΈ ΠΏΠΎ Π³ΡΠ°Π½ΠΈΡΠ°ΡΠ° ΠΎΡ 16 Π±Π°ΠΉΡΠ° (ΠΈΠ»ΠΈ ΠΏΠΎ-Π³ΠΎΡΠ΅), ΡΠ΅Π³Π° ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΏΠΎΠ΄ΡΠ°Π²Π½Π΅Π½ΠΈ ΡΠ°ΠΌΠΎ ΠΏΠΎ Π³ΡΠ°Π½ΠΈΡΠ°ΡΠ° ΠΎΡ 8 Π±Π°ΠΉΡΠ°. ΠΡΠΊΠΎΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠΈ Π°ΡΠ΅ΠΌΠ±Π»Π΅ΡΠ½ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ Π°Π΄ΡΠ΅ΡΠΈΡΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π΄Π° ΡΠ° ΠΏΠΎΠ΄ΡΠ°Π²Π½Π΅Π½ΠΈ ΠΏΠΎ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π°Π΄ 8 Π±Π°ΠΉΡΠ° ΠΈ ΡΠ°Π·ΡΠΈΡΠ°Ρ Π½Π° ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΎΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ΄ΡΠ°Π²Π½ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ, ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠ²Π°Π»ΡΡ, Π½ΠΎ Π½ΠΈΠ΅ ΠΎΡΠ°ΠΊΠ²Π°ΠΌΠ΅ ΡΠ΅Π·ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ΅Π΄ΠΊΠΈ. Π’Π΅Π·ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ Ρ GOEXPERIMENT=noallocheaders Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° Π²ΡΡΡΠ°Π½Π΅ ΠΊΡΠΌ ΡΡΠ°ΡΠ°ΡΠ° ΠΌΠΎΠ΄Π΅Π» Π½Π° ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈ ΠΈ Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΎΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ΄ΡΠ°Π²Π½ΡΠ²Π°Π½Π΅, Π½ΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΡΠΈΡΠ΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Ρ ΡΠ²ΠΎΡ Π°ΡΠ΅ΠΌΠ±Π»Π΅ΡΠ΅Π½ ΠΊΠΎΠ΄, Π·Π° Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π°Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° ΠΏΠΎΠ΄ΡΠ°Π²Π½ΡΠ²Π°Π½Π΅, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠΎΠ·ΠΈ ΠΎΠ±Ρ ΠΎΠ΄Π΅Π½ ΠΏΡΡ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΡΠ΅ΠΌΠ°Ρ Π½Π°Ρ Π² Π±ΡΠ΄Π΅ΡΠ° Π²Π΅ΡΡΠΈΡ.
- ΠΠ°ΠΊΡΠΎ Π±Π΅ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΎ Π² Π±Π΅Π»Π΅ΠΆΠΊΠΈΡΠ΅ ΠΊΡΠΌ Π²Π΅ΡΡΠΈΡ Go 1.20, Go 1.22 Π²Π΅ΡΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»Π½Π° Π²Π΅ΡΡΠΈΡ Π½Π° Go 1.20 ΠΈΠ»ΠΈ Π½ΠΎΠ²Π° Π·Π° Π½Π°ΡΠ°Π»Π½ΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅. ΠΡΠ°ΠΊΠ²Π°ΠΌΠ΅, ΡΠ΅ Go 1.24 ΡΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»Π½Π° Π²Π΅ΡΡΠΈΡ Π½Π° Go 1.22 ΠΈΠ»ΠΈ ΠΏΠΎ-ΠΊΡΡΠ½Π° Π²Π΅ΡΡΠΈΡ Π·Π° Π½Π°ΡΠ°Π»Π½ΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅.
ΠΡΠΈΠ³ΠΈΠ½Π°Π» (go.dev)
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: linux.org.ru
