ΠΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ Π΅ ΡΠ΅Π»ΠΈΠ·ΡΡ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ½ΠΈΡ Π΅Π·ΠΈΠΊ Go 1.22, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π° ΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ° Google Ρ ΡΡΠ°ΡΡΠΈΠ΅ΡΠΎ Π½Π° ΠΎΠ±ΡΠ½ΠΎΡΡΡΠ°, ΠΊΠ°ΡΠΎ Ρ ΠΈΠ±ΡΠΈΠ΄Π½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΡΡΡΠ΅ΡΠ°Π²Π°ΡΠΎ Π²ΠΈΡΠΎΠΊΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΈΡΠ΅ Π΅Π·ΠΈΡΠΈ Ρ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²Π°ΡΠ° Π½Π° ΡΠΊΡΠΈΠΏΡΠΎΠ²ΠΈΡΠ΅ Π΅Π·ΠΈΡΠΈ, ΠΊΠ°ΡΠΎ Π»Π΅ΡΠ½ΠΎ ΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ΄, Π±ΡΡΠ·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ Π·Π°ΡΠΈΡΠ° ΠΎΡ Π³ΡΠ΅ΡΠΊΠΈ. ΠΠΎΠ΄ΡΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎ Π»ΠΈΡΠ΅Π½Π·Π° BSD.
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡΡΡ Π½Π° Go Π΅ ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΠΏΠΎΠ·Π½Π°ΡΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ ΠΎΡ Π΅Π·ΠΈΠΊΠ° C Ρ ΠΎΡΠ΄Π΅Π»Π½ΠΈ Π·Π°ΠΈΠΌΡΡΠ²Π°Π½ΠΈΡ ΠΎΡ Π΅Π·ΠΈΠΊΠ° Oberon. ΠΠ·ΠΈΠΊΡΡ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ΅Π½, Π½ΠΎ ΠΊΠΎΠ΄ΡΡ Π΅ Π»Π΅ΡΠ΅Π½ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅ ΠΈ Π²ΠΎΡΠΏΡΠΈΡΡΠΈΠ΅. ΠΠΎΠ΄ΡΡ Π½Π° Π΅Π·ΠΈΠΊΠ° Go ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ° Π² ΠΎΡΠ΄Π΅Π»Π½ΠΈ Π±ΠΈΠ½Π°ΡΠ½ΠΈ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ΅ΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π½Π°ΡΠΈΠ²Π½ΠΎ, Π±Π΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° (ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅ Π·Π° ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠ°Π½Π΅, ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ ΠΈ Π΄ΡΡΠ³ΠΈ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΈ Π·Π° ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΡΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Ρ ΠΊΠ°ΡΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π½Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅), ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΏΠΎΡΡΠΈΠ³Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ, ΡΡΠ°Π²Π½ΠΈΠΌΠ° Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ Π½Π° Π΅Π·ΠΈΠΊΠ° C.
ΠΡΠΎΠ΅ΠΊΡΡΡ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π° Ρ ΠΎΠ³Π»Π΅Π΄ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΠΈ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ° Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄ΡΠ΅Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠΉΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π½Π° Π½ΠΈΠ²ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π° Π·Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΈ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Π½ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ. ΠΠ·ΠΈΠΊΡΡ ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π° Π·Π° Π·Π°ΡΠΈΡΠ° ΠΎΡ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ ΠΈΠ·Π²ΡΠ½ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΈΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π½Π° Π·Π°Π΄Π΅Π»Π΅Π½ΠΈΡΠ΅ Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΠΏΠ°ΠΌΠ΅Ρ ΠΈ ΠΎΡΠΈΠ³ΡΡΡΠ²Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° garbage collector.
Π‘ΡΠ΅Π΄ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² Π½ΠΎΠ²ΠΈΡ ΡΠ΅Π»ΠΈΠΉΠ·:
- Π ΡΠΈΠΊΠ»ΠΈ Β«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 β OptimΠΈΠ·Π°ΡΠΈΡ, ΡΡΠΊΠΎΠ²ΠΎΠ΄Π΅Π½Π° ΠΎΡ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠ°Π½Π΅), ΠΊΠΎΠΈΡΠΎ Π²Π·Π΅ΠΌΠ°Ρ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΠΎΡΠΎΠ±Π΅Π½ΠΎΡΡΠΈΡΠ΅, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°. Π Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° ΡΠ° Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π° Π·Π° Π΄Π΅Π²ΠΈΡΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ, ΠΊΠΎΠΈΡΠΎ Π·Π°ΠΌΠ΅Π½ΡΡ Π½Π΅ΠΏΡΠ΅ΠΊΠΈΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ Ρ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈ inline Π±Π»ΠΎΠΊΠΎΠ²Π΅.
- ΠΡΠΈ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅ Π½Π° 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
