Π ΡΡΠΎΠΉ ΡΠ°ΡΡΠΈ ΡΠ°ΠΌΠΎΡΡΠΈΡΠ΅Π»Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΈΠ·ΡΡΠΈΠΌ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΡ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π² ΡΠ·ΡΠΊΠ΅ Go, Π½Π° ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ ΠΈ ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅. Π ΠΊΠΎΠ½ΡΠ΅ ΡΡΠ°ΡΡΠΈ ΡΠ΅ΡΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ Π·Π°Π΄Π°Ρ Π΄Π»Ρ Π·Π°ΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π°.
β Π§Π°ΡΡΡ 11
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΠ°Π½ΠΈΠΊΠ°. ΠΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅. ΠΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (ΠΠ) ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΈΡΠ°ΡΡ Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΈ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄, ΡΠΏΠΎΡΠΎΠ±Π½ΡΠΉ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ .
ΠΠΎ Π²Π΅ΡΡΠΈΠΈ 1.18 Π² Go Π±ΡΠ»ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ:
- Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ², ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΉ switch-case ΠΈ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ².
- ΠΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° reflect, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ runtime-ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ². Π Π΅ΡΠ»Π΅ΠΊΡΠΈΡ β ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΡΡΡΡΠΊΡΡΡΡ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΡΠ΅ΡΠ΅Π· ΡΠΈΠΏΡ.
- ΠΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΠΊΠΎΠ΄ΠΎΠ³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ.
ΠΠ° ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ Π΄ΠΎΠ»Π³ΠΈΡ Π»Π΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΎΡΡ ΡΠ°ΠΌΠΈΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» ΠΠ Π² Go. Π’ΠΎΠ»ΡΠΊΠΎ Π² Π²Π΅ΡΡΠΈΠΈ 1.18, Π²ΡΠΏΡΡΠ΅Π½Π½ΠΎΠΉ Π² ΠΌΠ°ΡΡΠ΅ 2022 Π³ΠΎΠ΄Π°, Π±ΡΠ»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ², ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ ΠΠ, ΡΡΠΎ ΡΡΠ°Π»ΠΎ ΡΠ°ΠΌΡΠΌ Π·Π½Π°ΡΠΈΠΌΡΠΌ Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Ρ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π²ΡΠΏΡΡΠΊΠ° ΡΠ·ΡΠΊΠ°. ΠΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ, ΠΊΠ°ΠΊ ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Π²ΡΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ, ΠΈΠΌΠ΅ΡΡ ΡΠ²ΠΎΠΈ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ ΠΈ Π΄ΠΎ ΡΠΈΡ ΠΏΠΎΡ ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅ΠΌΠΎΠΉ ΡΠΏΠΎΡΠΎΠ² Π² ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ².
π¨βπ» ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Go ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
ΠΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ² Π²Ρ Π½Π°ΠΉΠ΄Π΅ΡΠ΅ Π½Π° Π½Π°ΡΠ΅ΠΌ ΡΠ΅Π»Π΅Π³ΡΠ°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Go ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°Β»
π ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Go Π΄Π»Ρ ΡΠΎΠ±Π΅ΡΠ°
ΠΠΎΠ΄ΡΡΠ½ΡΡΡ ΡΠ²ΠΎΠΈ Π·Π½Π°Π½ΠΈΡ ΠΏΠΎ Go Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π° Π½Π°ΡΠ΅ΠΌ ΡΠ΅Π»Π΅Π³ΡΠ°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Go Π΄Π»Ρ ΡΠΎΠ±Π΅ΡΠ°Β»
π§© ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π°Π΄Π°Ρ ΠΏΠΎ Go
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎ Go Π΄Π»Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π½Π° Π½Π°ΡΠ΅ΠΌ ΡΠ΅Π»Π΅Π³ΡΠ°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π°Π΄Π°Ρ ΠΏΠΎ GoΒ»
ΠΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ
ΠΡΠ½ΠΎΠ²ΠΎΠΏΠΎΠ»Π°Π³Π°ΡΡΠ΅ΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠ΅ΠΉ ΠΠ ΡΠ²Π»ΡΡΡΡΡ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ β ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ± Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠΎΠ΄Π°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΡΡΡΠ½ΠΎΡΡΡΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π΅ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ².
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΈΠ·ΡΡΠΈΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ² Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ. ΠΠΎΠΏΡΡΡΠΈΠΌ, ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Π½Π°Π΄ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ Π½Π°Ρ ΠΏΠΎΠΏΡΠΎΡΠΈΠ»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΌΠ°ΠΏΡ Ρ ΠΊΠ»ΡΡΠ°ΠΌΠΈ ΡΠΈΠΏΠ° string. ΠΠΎΡΠ»Π΅ ΠΎΡΠ²ΠΎΠ΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΡΠ°ΡΡΠ΅ΠΉ ΡΠ°ΠΌΠΎΡΡΠΈΡΠ΅Π»Ρ ΡΡΠΎ Π·Π°Π΄Π°Π½ΠΈΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΎΡΠΎΠ±ΠΎΠ³ΠΎ Π·Π°ΡΡΡΠ΄Π½Π΅Π½ΠΈΡ:
Π‘ΠΏΡΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ°ΡΡΠΈΡΠΈΠ»ΡΡ, ΠΈ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊΡΡ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΡΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠΈΠΏΠ° float64 ΠΌΠ°ΠΏΡ Ρ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΌΠΈ ΠΊΠ»ΡΡΠ°ΠΌΠΈ. ΠΠ΅ Π±Π΅Π΄Π°, Π½ΡΠΆΠ½ΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ SumMapValues, ΠΏΠΎΠΌΠ΅Π½ΡΡΡ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ , ΠΈ Π²ΡΠ΅ Π³ΠΎΡΠΎΠ²ΠΎ. ΠΠΎ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ, ΡΡΠΎΠ±Ρ ΡΡΠ½ΠΊΡΠΈΡ SumMapValues ΠΌΠΎΠ³Π»Π° ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΈ ΠΊΠ»ΡΡΠ°ΠΌΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ Π½Π°ΠΌΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ Π»ΠΈΡΡ ΠΊ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌ. Π§ΡΠΎ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΠΌΠ°Π»ΠΎΠ²Π°ΠΆΠ½ΠΎ, ΠΎΠ½ Π½Π°ΡΡΡΠ°Π΅Ρ ΠΏΡΠΈΠ½ΡΠΈΠΏ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΠ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ DRY (don`t repeat yourself β Π½Π΅ ΠΏΠΎΠ²ΡΠΎΡΡΠΉ ΡΠ΅Π±Ρ).
Π‘ΡΠ°ΡΡΡ ΠΏΠΎ ΡΠ΅ΠΌΠ΅
10 Π·Π°ΠΏΠΎΠ²Π΅Π΄Π΅ΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
Π‘Π°ΠΌΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ², ΡΡΠΎΠ±Ρ ΠΎΠ½Π° ΠΌΠΎΠ³Π»Π° Π½Π΅ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ²:
ΠΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ»ΠΈΡΠΈΠΉ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΡ ΠΎΠ±ΡΡΠ½ΠΎΠΉ. Π‘Π°ΠΌΠΎΠ΅ ΡΠ²Π½ΠΎΠ΅ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΊΠ°Π·Π°Π½ΠΈΠΈ Π² ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΡ ΡΠΊΠΎΠ±ΠΊΠ°Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ Β«ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΒ» ΠΈΠ»ΠΈ Β«ΡΠΈΠΏΡ ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΒ» (type parameters). ΠΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π² ΡΡΠ½ΠΊΡΠΈΡ ΡΠΈΠΏ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°. Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ type parameters ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ K ΠΈ V ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ Π²ΠΈΠ΄Π° comparable ΠΈ int64 | float64 ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ type constraint.
ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ comparable β ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ , ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² == ΠΈ !=. ΠΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ comparable ΡΠΈΠΏΠΎΠ² ΡΠ²Π»ΡΡΡΡΡ bool, int, float, string ΠΈ Π΄ΡΡΠ³ΠΈΠ΅. Comparable ΡΠΈΠΏΠ°ΠΌΠΈ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΡΠ»Π°ΠΉΡΡ, ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΌΠ°ΠΏΡ ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡΠΌΠΈ.
Π Π²Π΅ΡΡΠΈΠΈ 1.18 ΠΏΠΎΠΌΠΈΠΌΠΎ comparable Π±ΡΠ» ΡΠ°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ any β ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ Π΄Π»Ρ interface{}, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ Π»ΡΠ±ΠΎΠΉ ΡΠΈΠΏ.
Type constraint
Π Go type constraint Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΠΈΠ· ΡΠ΅Π±Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π½Π°Π±ΠΎΡ ΡΠΈΠΏΠΎΠ² (type set), Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΈΠΏΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
Π§ΡΠΎΠ±Ρ Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅ΡΠ΅ ΠΏΠΎΠ½ΡΡΡ type constraints, Π½ΡΠΆΠ½ΠΎ ΡΠ°ΡΡΠΈΡΠΈΡΡ Π½Π°ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ± ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°Ρ . ΠΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΠ Π² ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Go ΡΠΎΠ΄Π΅ΡΠΆΠ°Π»ΠΎΡΡ ΡΠΆΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ΅ Π½Π°ΠΌ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ: ΡΠΈΠΏ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ Π²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅Ρ Π΅ΠΌΡ. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅, ΡΡΠΎ Π²ΠΌΠ΅ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ , ΠΈ ΠΏΡΠΈΠ½ΡΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅: ΡΠΈΠΏ, Π²Ρ ΠΎΠ΄ΡΡΠΈΠΉ Π² Π½Π°Π±ΠΎΡ ΡΠΈΠΏΠΎΠ² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. ΠΠ½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΉ ΡΠΈΠΏ T ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Inter ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΡΠ»ΠΎΠ²ΠΈΠΉ:
- Type set T ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ type set Inter, ΠΏΡΠΈ ΡΡΠΎΠΌ T ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ.
- T ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π² type set Inter, ΠΏΡΠΈ ΡΡΠΎΠΌ T Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ.
Π‘ΡΠΎΠΈΡ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ Π² ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΡΡΠ΅ΠΌΡ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ: ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌ ΡΠΈΠΏΠΎΠΌ T, Π±Π°Π·ΠΎΠ²ΡΠΌ ΡΠΈΠΏΠΎΠΌ ~T ΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ΠΌ ΡΠΈΠΏΠΎΠ² Π²ΠΈΠ΄Π° type1 | type2 | β¦ | typeN. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΡΡΠΈΡ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅:
- ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° T ΠΏΠΎΠ½ΡΡΠ½ΠΎ ΠΈΠ· Π΅Π³ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΌΠ΅Π½ΡΡΡ Π»ΡΠ±ΠΎΠΉ ΡΠΈΠΏ. Π‘ Π½ΠΈΠΌ ΠΌΡ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡ ΠΏΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ SumMapValues.
- ΠΠ°Π·ΠΎΠ²ΡΠΉ ΡΠΈΠΏ ~T ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΠΊΠ΅Π½ ΡΠΈΠ»ΡΠ΄Π° ("~"), Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΠΉ Π² Π²Π΅ΡΡΠΈΠΈ 1.18, ΠΈ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π½Π°Π±ΠΎΡ ΡΠΈΠΏΠΎΠ², Π±Π°Π·ΠΎΠ²ΡΠΌ Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ T. Π ΠΏΡΠΈΠΌΠ΅ΡΡ, Π² ΠΊΠΎΠ΄Π΅ Π½ΠΈΠΆΠ΅ ΡΠΈΠΏ int ΡΠ²Π»ΡΠ΅ΡΡΡ Π±Π°Π·ΠΎΠ²ΡΠΌ Π΄Π»Ρ ΡΠΈΠΏΠ° ImplementSome, ΠΊΠΎΡΠΎΡΡΠΉ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ SomeInterface:
- ΠΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΎΠ²ΠΎΠΊΡΠΏΠ½ΠΎΡΡΡ Π²ΡΠ΅Ρ ΡΠΈΠΏΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π°Π½Π½ΡΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ. Π ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Values Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ΠΌ ΡΠΈΠΏΠΎΠ² int64 ΠΈ float64, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΡΡΡΠΏΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ type constraint Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΌΠ°ΠΏΡ ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡ Π·Π°ΠΏΠΈΡΡ int64 | float64:
ΠΡΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ ΡΠΎΡΠΌΡ Π·Π°ΠΏΠΈΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΌ Π½ΠΈΠΆΠ΅, Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡ:
ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Float ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ° constraints, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠ·ΡΠΊΠ° ΡΠΎΠ±ΡΠ°Π»ΠΈ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ. ΠΡΠΈΠ²Π΅Π΄Π΅ΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ :
ΠΠ½ΡΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ type inference
ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠ² ΠΠ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ SumMapValues. ΠΡΠ·ΠΎΠ²Π΅ΠΌ Π΅Ρ Π΄Π»Ρ Π΄Π²ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΌΠ°ΠΏ, ΡΠ²Π½ΠΎ ΡΠΊΠ°Π·Π°Π² Π² ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΡ ΡΠΊΠΎΠ±ΠΊΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ :
Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ Β«ΡΠΈΠΏΠ° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°Β» (type argument), ΠΊΠ°ΠΊ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΡΠ΅ [string, float64] , ΠΏΡΠΈΠ½ΡΡΠΎ Π½Π°Π·ΡΠ²Π°ΡΡ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ Π²ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΠΈΠΏΠΎΠ² Π½Π° ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠΈΠΏ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π΅Π³ΠΎ type constraint.
Π‘ΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ Π²Π°ΠΆΠ½ΠΎΠ΅ Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π²Π΅ΡΡΠΈΠΈ 1.18: ΠΏΡΠΈ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠ²Π½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠΈΠΏΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Ρ ΡΠΈΠΏΠ°ΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ ΠΈ Π½ΠΎΡΠΈΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Β«Π²ΡΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈΒ» (type inference). ΠΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊ Π½Π°ΡΠ΅ΠΌΡ ΠΊΠΎΠ΄Ρ, ΡΡΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠΈΠΏΡ [string, float64] ΠΈ [string, int64] ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΈ SumMapValues:
Type inference ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° type parameters, ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½ΠΎ Π½Π΅ ΠΏΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΡΡΠΈ Π² Π΅Ρ ΡΠ΅Π»Π΅ ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ .
ΠΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Go
Π Π²Π΅ΡΡΠΈΠΈ 1.18 ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π±ΡΠ»Π° ΡΠ°ΡΡΠΈΡΠ΅Π½Π° ΡΡΠ΅ΠΌΡ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌΠΈ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π½Π° Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠ°Ρ : slices Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΠ»Π°ΠΉΡΠ°ΠΌΠΈ, maps Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΌΠ°ΠΏΠ°ΠΌΠΈ ΠΈ constraints Π΄Π»Ρ Π·Π°Π΄Π°Π½ΠΈΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈΠ· ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² slices ΠΈ maps, ΡΡΠΎΠ±Ρ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΠ΅ ΡΠ°Π½Π΅Π΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ:
- slices.Equal ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅Ρ Π΄Π²Π° ΡΠ»Π°ΠΉΡΠ° ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ:
- maps.Equal ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΡΠΎ Π΄Π²Π΅ ΠΌΠ°ΠΏΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΠΏΠ°ΡΡ ΠΊΠ»ΡΡ/Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅:
ΠΠ°Π΄Π°ΡΠΈ
ΠΡΠΈΡΠ»ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°ΠΊΡΠ΅ΠΏΠΈΡΡ ΠΈΠ·ΡΡΠ΅Π½Π½ΡΡ ΡΠ΅ΠΎΡΠΈΡ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π·Π°Π΄Π°ΡΠ°Ρ . ΠΡΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ Π΄Π²Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΡΠ²Π»ΡΡΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΎΠ±ΡΠ΅ΠΌΠ½ΡΠΌΠΈ, Π·Π°ΡΠΎ ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Ρ ΠΎΡΠΎΡΠΎ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠ°Ρ . Π ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΡΡΡΠ΄Π½ΠΎΡΡΠ΅ΠΉ Π²Ρ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°Π³Π»ΡΠ½ΡΡΡ Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π²Π°ΡΠΈΠ°Π½Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ.
Π€ΠΈΠ»ΡΡΡΠ°ΡΠΈΡ ΡΠ»Π°ΠΉΡΠ°
ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊ-ΡΡΠ½ΠΊΡΠΈΡ Filter Π΄Π»Ρ ΠΎΡΠ±ΠΎΡΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠ»Π°ΠΉΡΠ° ΠΏΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡ ΠΏΡΠΈΠ·Π½Π°ΠΊΡ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΎΠ½Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠ»Π°ΠΉΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΈ ΡΡΠ½ΠΊΡΠΈΡ-ΠΏΡΠ΅Π΄ΠΈΠΊΠ°Ρ predicate Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΈΠΏΠ° bool. ΠΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡ Π² ΠΏΡΠ΅Π΄ΠΈΠΊΠ°ΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ, ΡΠΎ predicate Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ true, ΠΈΠ½Π°ΡΠ΅ β false. Π€ΡΠ½ΠΊΡΠΈΡ Filter Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ»Π°ΠΉΡ Ρ ΠΎΡΠΎΠ±ΡΠ°Π½Π½ΡΠΌΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ.
ΠΡΠΈΠΌΠ΅Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ Filter:
Π Π΅ΡΠ΅Π½ΠΈΠ΅
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠΎΠ²
ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊ-ΡΡΠ½ΠΊΡΠΈΡ RemoveDuplicates Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ²ΡΠΎΡΠΎΠ² ΠΈΠ· ΡΠ»Π°ΠΉΡΠ° comparable ΡΠΈΠΏΠ°. ΠΠ½Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠ»Π°ΠΉΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΡΠ»Π°ΠΉΡ Π±Π΅Π· ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΡ ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
ΠΡΠΈΠΌΠ΅Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ RemoveDuplicates:
Π Π΅ΡΠ΅Π½ΠΈΠ΅
ΠΠ±ΠΎΠ±ΡΠ΅Π½Π½ΡΠΉ ΠΊΡΡ
Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ² ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ . ΠΠ½ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²:
- Π‘ΡΡΡΠΊΡΡΡΠ° Cache, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ°Ρ ΠΌΠ°ΠΏΡ Ρ ΠΊΠ»ΡΡΠ°ΠΌΠΈ ΡΠΈΠΏΠ° string ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° T, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΡΡΡΠΏΠ°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Π΄Π°Π½Π½ΡΡ .
- ΠΠ΅ΡΠΎΠ΄-ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ NewCache Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΡΡΠ°.
- ΠΠ΅ΡΠΎΠ΄ Set Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΊΡΡ ΠΏΠΎ ΠΊΠ»ΡΡΡ.
- ΠΠ΅ΡΠΎΠ΄ Get Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΊΡΡΠ° ΠΏΠΎ ΠΊΠ»ΡΡΡ. ΠΡΠ»ΠΈ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Π² ΠΌΠ°ΠΏΠ΅, ΡΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²ΡΠΎΡΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅ΡΠ½ΡΡΡ false.
ΠΡΠΈΠΌΠ΅Ρ ΡΠ°Π±ΠΎΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²:
Π Π΅ΡΠ΅Π½ΠΈΠ΅
ΠΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ
ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊ-ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° β ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ , ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅ΠΉ Ρ ΡΠ°Π½ΠΈΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ° Π² Π½Π΅ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΡΡΠΎΡΡΡ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠ°ΡΡΠ΅ΠΉ:
- Π’ΠΈΠΏ ΠΌΠ°ΠΏΡ Ρ comparable ΠΊΠ»ΡΡΠ°ΠΌΠΈ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠΈΠΏΠ° struct{}. ΠΠΌΠ΅ΡΡΠΎ ΠΏΡΡΡΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠΏ bool, Π½ΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π±ΡΠ΄Π΅Ρ ΠΌΠ΅Π½Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π΅Π½, ΡΠ°ΠΊ ΠΊΠ°ΠΊ bool Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠ°ΠΌΡΡΠΈ, ΡΠ΅ΠΌ struct{}.
- ΠΠ΅ΡΠΎΠ΄-ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ NewSet Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠ»ΡΡΠ΅ΠΉ ΠΌΠ°ΠΏΡ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ comparable ΡΠΈΠΏΠ°.
- ΠΠ΅ΡΠΎΠ΄ Add Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ comparable ΡΠΈΠΏΠ°.
- ΠΠ΅ΡΠΎΠ΄ Contains Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π°Π»ΠΈΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ true ΠΈΠ»ΠΈ false.
- ΠΠ΅ΡΠΎΠ΄ GetElements Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ»Π°ΠΉΡ comparable ΡΠΈΠΏΠ°.
ΠΡΠΈΠΌΠ΅Ρ ΡΠ°Π±ΠΎΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²:
Π Π΅ΡΠ΅Π½ΠΈΠ΅
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ»ΠΈΡΡ Ρ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠΎΠΉ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ ΠΈ ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ: type parameter, type constraint ΠΈ type inference. Π ΠΊΠΎΠ½ΡΠ΅ Π·Π°ΠΊΡΠ΅ΠΏΠΈΠ»ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» Π½Π° ΡΠ΅ΡΡΡΠ΅Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π·Π°Π΄Π°ΡΠ°Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Π³Π»ΡΠ΄Π½ΠΎ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΎΠ².
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ ΡΠ·Π½Π°Π΅ΠΌ ΠΎ ΡΠΏΠΎΡΠΎΠ±Π°Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅ ΠΈ Π² ΡΠ·ΡΠΊΠ΅ Go, ΠΈΠ·ΡΡΠΈΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° time ΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ ΡΠ΅ΡΠΈΠΌ ΠΏΠ°ΡΠΎΡΠΊΡ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΡΡ Π·Π°Π΄Π°Ρ
***
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎΡΡΠΈΡΠ΅Π»Ρ
- ΠΠ±ΠΎΠ±ΡΠ΅Π½Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ