π ΠΠ·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ MySQL ΠΈ Go: ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½ΡΠ΅ ΠΊΠ°ΠΌΠ½ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΊΠΎΠ΄ΠΎΠ³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΡΠ°ΡΠ΅ΠΉ ΠΏΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ MySQL Π² Golang ΠΏΠΎΠ²ΡΠΎΡΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΠ· ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π°. Π Π΅Π°Π»ΡΠ½Π°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π΄Π°Π»Π΅ΠΊΠ° ΠΎΡ ΠΏΡΠΎΡΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ²: ΠΈΠ·-Π·Π° ΡΡΡΠΎΠ³ΠΎΠΉ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°ΡΡΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. Π Π°Π·Π±ΠΈΡΠ°Π΅ΠΌΡΡ Ρ ΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ΄Π½ΠΎΡΠΈΠΏΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ.
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ
Π Go Π²ΡΠ΅ ΡΡΡΡΠΎΠ΅Π½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Π°ΡΠ΅: ΡΡΠΎ ΡΠ·ΡΠΊ ΡΡΡΠΎΠ³ΠΎΠΉ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π΄Π°Π½Π½ΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠΈΠΏΠ°ΠΌ, Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΏΡΠΈΠ½ΡΡΡΡ
Π΄Π°Π½Π½ΡΡ
. ΠΠ°ΠΏΡΠΎΡΡ ΡΠΈΠΏΠ° SELECT *
ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π°, Π° ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»Π΅ΠΉ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π΄Π΅ΡΡΡΠΈ, ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΠ° ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² ΠΌΡΠΊΡ.
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ· ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π°:
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Row.Scan
Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·Π²Π»Π΅ΡΡ ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
Π΄Π²Π° ΠΏΠΎΠ»Ρ, Ρ.Π΅. Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΠ±ΡΡΠ²ΠΈΡΡ Π²ΡΠ΅Π³ΠΎ Π΄Π²Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅. ΠΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·Π²Π»Π΅ΡΡ 10 ΠΏΠΎΠ»Π΅ΠΉ, Π½ΡΠΆΠ½ΠΎ ΡΠΆΠ΅ 10 ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
. Π Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»Π΅ΠΉ Π±ΠΎΠ»Π΅Π΅ 20? ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ ΠΈ Ρ ΠΏΠΎΠ»ΡΡΠΎΡΠ½Π΅ΠΉ ΠΏΠΎΠ»Π΅ΠΉ, ΡΠΎΠ³Π΄Π° Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² Π°Π΄β¦ Π ΡΡΡ Π½Π°ΠΌ Π½Π° ΠΏΠΎΠΌΠΎΡΡ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡ ΠΊΠΎΠ΄ΠΎΠ³Π΅Π½Π΅ΡΠ°ΡΠΈΡ.
ΠΠ°ΠΊ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΠΌΠ°ΡΠΈΠ½Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΠΈΠΉΡΡ ΠΊΠΎΠ΄?
Π MySQL Π΅ΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ DESCRIBE, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΡΡΡΠΊΡΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ:
- ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° ΠΏΠΎΠ»Π΅ΠΉ;
- ΡΠΏΠΈΡΠΊΠΈ ΠΏΠΎΠ»Π΅ΠΉ Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² SELECT, INSERT ΠΈΠ»ΠΈ UPDATE;
- ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ Scan;
- Π³ΠΎΡΠΎΠ²ΡΠ΅ ΡΠΈΠΏΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ Π²ΡΠ±ΠΎΡΠΊΠΈ/Π²ΡΡΠ°Π²ΠΊΠΈ Π΄Π°Π½Π½ΡΡ
.
ΠΠ°Π½Π½ΡΠ΅ ΠΈΠ· Π·Π°ΠΏΡΠΎΡΠ° DESCRIBE <ΠΈΠΌΡ ΡΠ°Π±Π»ΠΈΡΡ>
Π·Π°Π½ΠΎΡΠΈΠΌ Π² ΡΡΡΡΠΊΡΡΡΡ:
ΠΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π΄Π²Π° ΠΏΠΎΠ»Ρ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΡΡΡΡ ΠΏΠΎΠΏΠΎΠ·ΠΆΠ΅. ΠΠ· ΡΡΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ»Π΅ΠΉ Π±Π΅Π·ΠΎ Π²ΡΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ AST (abstract syntax structure):
ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π²Π·ΡΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° ΠΎΡΠ·ΡΠ²ΠΎΠ² review
ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΡΡΠΊΡΡΡΠΎΠΉ:
ΠΠΎΠ³Π΄Π° ΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ DESCRIBE review
, ΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ:
ΠΠΎΠΏΡΡΠ°Π΅ΠΌΡΡ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΡΡΠΎΡ Π΄Π°ΡΠ°ΡΠ΅Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΌ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄ΠΎΠΌ:
ΠΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΎΡΠΈΠ±ΠΊΡ:
ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Ρ NULL
Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ²Π½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΎ Π² ΡΠΈΠΏ string
.
ΠΠ°ΠΊ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ NULL?
Π§ΡΠΎΠ±Ρ ΡΠ°ΠΊΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΎ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠΈΠΏΡ:
ΠΡΠ΅ ΠΎΠ½ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ ΡΡΡΡΠΊΡΡΡΡ (Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ sql.NullString
):
ΠΡΠ»ΠΈ ΠΏΠΎΠ»Π΅ Valid
ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true
, ΡΠΎ Π² ΠΏΠΎΠ»Π΅ String
Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΈΠ½Π°ΡΠ΅ NULL
. ΠΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ Π½ΠΈΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ:
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°. ΠΡΠ»ΠΈ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΊ ΡΡΡΡΠΊΡΡΡΠ΅ Π½Π°ΡΠ΅ΠΉ ΡΠ°Π±Π»ΠΈΡΡ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΈΠΌΡΡ ΡΠΈΠΏ:
Π£ΠΏΡΠΎΡΠ΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠ°Π±Π»ΠΈΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π½ΠΈΠΆΠ΅:
DateTime
ΠΈΠ»ΠΈ Date
ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°Π»ΠΈΡΡ Π² ΡΡΡΠΎΠΊΡ. ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΈΠΏ Π½Π° sql.Time
.ΠΠ°Π»Π΅Π΅ β Π΄Π΅Π»ΠΎ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ.
ΠΠΎΠ΄ΠΎΠ³Π΅Π½Π΅ΡΠ°ΡΠΈΡ β ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ
ΠΠ· ΡΡΠ΅Π·Π° ΠΏΠΎΠ»Π΅ΠΉ fields
ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π»ΡΠ±ΠΎΠΉ ΠΊΠΎΠ΄. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π²Π·ΡΡ ΠΊΠΎΠ΄ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅Ρ Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ (ΡΡΡΡΠΊΡΡΡΠ° ΡΠΎΠΆΠ΅ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π° ΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ):
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Ρ
ΡΠ΅ΡΡΠΎΠΌΠ°ΡΠΈΠΉΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ errorCheck(err)
:
Π’Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ NULL
:
- sql2String
- sql2Int
- sql2Float
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΏΠΎ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠΌΡ ΠΊΠ»ΡΡΡ, Π½ΠΎ ΡΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ Π΄Π»Ρ Π²ΡΡΠ°Π²ΠΊΠΈ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ ON DUPLICATE KEY UPDATE
. ΠΠΎΠΆΠ½ΠΎ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π² Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΡΠΎΡΡΠ°Π²Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ β Π²ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π²Π°ΡΠ΅ΠΉ ΡΠ°Π½ΡΠ°Π·ΠΈΠΈ. ΠΡΠ΅Π³Π΄Π° Π΅ΡΡΡ ΠΊΡΠ΄Π° ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡΡΡ: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈΠΊΡΡΡΠΈΡΡ ΠΊ ΠΊΠΎΠ΄Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°ΡΠΎΡ, ΡΡΠΎΠ± ΠΏΡΠΎΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π±Π»ΠΎΠ½Ρ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ°Π΄Π΅ΡΡΡ, ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» ΠΌΠΎΠ΅ΠΉ ΡΡΠ°ΡΡΠΈ ΠΈ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π² Π½Π΅ΠΉ ΠΊΠΎΠ΄ΠΎΠ³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΠΊΠΎΠΌΡ-ΡΠΎ ΡΠΎΠΊΡΠ°ΡΠΈΡ Π²ΡΠ΅ΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. Π£Π΄Π°ΡΠΈ!