π« ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² Go
Π Π°ΡΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Go-ΠΊΠΎΠ΄Π°, ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠΉ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ΅ ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΡΡΠ΅Π΄ΡΡΠ²Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΈ Π³ΠΈΠ±ΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ gtrace.
ΠΠ΅Π΄Π΅Π½ΠΈΠ΅ ΠΆΡΡΠ½Π°Π»Π°, ΡΠ±ΠΎΡ ΠΌΠ΅ΡΡΠΈΠΊ ΠΈ Π²ΡΡ, ΡΡΠΎ Π½Π΅ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡΡ ΠΊΠΎΠ΄Π°, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π² Π½ΡΠΌ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΎΡΠΊΠΈ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ²Π°Π½Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ°
ΠΡΡΡΡ Ρ Π½Π°Ρ
Π΅ΡΡΡ ΠΏΠ°ΠΊΠ΅Ρ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ lib
ΠΈ ΡΡΡΡΠΊΡΡΡΠ° lib.Client
, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΈΠ½Π³ΡΠ΅Ρ
ΡΠ²ΠΎΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° Π΄Π΅Π»Π°Π΅Ρ Π·Π°ΠΏΡΠΎΡ.
Π§ΡΠΎ Π΅ΡΠ»ΠΈ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ
Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π»ΠΎΠ³ΠΎΠ² Π΄ΠΎ ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΏΠΈΠ½Π³Π°? ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ Π²ΡΡΡΠΎΠΈΡΡ Π² Client
Π»ΠΎΠ³Π³Π΅Ρ (ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Ρ Π»ΠΎΠ³Π³Π΅ΡΠΎΠΌ) :
ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ,
ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΠ°ΡΡΡΡ ΠΌΠ΅ΡΡΠΈΠΊ Π² Client
:
ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠ² Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Client
, ΠΌΡ Π²ΡΠΊΠΎΡΠ΅ ΠΏΠΎΠΉΠΌΡΠΌ, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠ°Ρ
ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π° ΡΠ²ΡΠ·Π°Π½Π° Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Π° Π½Π΅ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΠΎΠΌ
ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ» Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ Ρ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ doPing()
.
ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π½Π΅ΠΊΠΎΠ³Π΅ΡΠ΅Π½ΡΠ½ΡΡ ΡΡΡΠΎΠΊ ΠΊΠΎΠ΄Π°, ΡΠΎ Π΅ΡΡΡ Π½Π΅ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π΄Π΅ΡΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° β ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ²Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°.
Π§ΡΠΎ Π΅ΡΠ»ΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π²Ρ ΠΏΠΎΠΉΠΌΡΡΠ΅, ΡΡΠΎ ΠΌΠ΅ΡΡΠΈΠΊΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°ΡΡ? ΠΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π΄Π»Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ? ΠΡΠΈ ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄ΡΡΠ³ΠΈΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΅Ρ.
ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΌΠ΅Π½ΡΡΡ ΠΊΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΡΠΎ-ΡΠΎ Π½Π΅ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ΅ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, Π° ΡΠ°ΠΊΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π½Π°ΡΡΡΠ°ΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏ SRP.
ΠΡΠ΅ ΡΡΠΈ ΠΌΠΎΠΌΠ΅Π½ΡΡ Π²ΡΠΏΠ»ΡΠ²Π°ΡΡ ΠΈΠ·-Π·Π° ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ: ΠΌΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠ΅ΡΠ΅ΠΆΠΈΠ²Π°ΡΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π·Π°Ρ ΠΎΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Ρ Π½Π°ΡΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅
ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π²ΡΡ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ β ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΎΡΠΊΠΈ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ (hooks), ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° ΡΠΌΠΎΠΆΠ΅Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ (probe) Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π½ΡΠ°ΠΉΠΌΠ°.
ΠΡΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π΄ΠΎΠ±Π°Π²ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΊΠΎΠ΄Π°, Π½ΠΎ Π΄Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ Π³ΠΈΠ±ΠΊΠΎΡΡΡ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°.
Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ httptrace ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ
ΠΏΠΎΡΡΠΈ ΡΡ ΠΆΠ΅ ΠΌΠ΅Ρ
Π°Π½ΠΈΠΊΡ, Π½ΠΎ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ. ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Ρ
ΡΠΊΠΈ
OnPingStart()
ΠΈ OnPingDone()
, Π²Π²Π΅Π΄Π΅ΠΌ ΠΎΠ΄ΠΈΠ½ OnPing()
, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½
Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄ ping
ΠΈ Π²Π΅ΡΠ½Π΅Ρ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ², Π²ΡΠ·Π²Π°Π½Π½ΡΠΉ ΠΏΠΎΡΠ»Π΅ ping
.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Ρ
ΡΠ°Π½ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π² Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΈ, ΡΡΠΎΠ±Ρ
ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΊ Π½ΠΈΠΌ Π΄ΠΎΡΡΡΠΏ ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ping
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΡΠ°ΡΡΠ΅ΡΠ° Π΅Π³ΠΎ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ).
ΠΠ°Π²Π°ΠΉΡΠ΅ Π²Π·Π³Π»ΡΠ½Π΅ΠΌ, ΠΊΠ°ΠΊ
ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ Client
ΠΏΡΠΈ ΡΠ°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π΅:
ΠΡΠ³Π»ΡΠ΄ΠΈΡ Π°ΠΊΠΊΡΡΠ°ΡΠ½ΠΎ, Π½ΠΎ
ΡΠΎΠ»ΡΠΊΠΎ Π΄ΠΎ ΡΠ΅Ρ
ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΌΡ Π½Π΅ ΠΏΠΎΠΉΠΌΡΠΌ, ΡΡΠΎ ΠΊΠ°ΠΊ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ OnPing
, ΡΠ°ΠΊ ΠΈ ΠΏΡΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π²Π΅ΡΠ½ΡΡΡΡΡ Ρ Π½ΡΠ»Π΅Π²ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ:
Π’Π΅ΠΏΠ΅ΡΡ ΠΈ Ρ Π³ΠΈΠ±ΠΊΠΎΡΡΡΡ Π²ΡΡ Ρ ΠΎΡΠΎΡΠΎ, ΠΈ Π² Π½ΠΎΡΠΌΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏ SRP, Π½ΠΎ ΠΊΠΎΠ΄ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π» Π±ΡΡΡ ΠΏΡΠΎΡΡΡΠΌ.
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π·Π°Π½ΡΡΡΡΡ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΠ΅ΠΌ, ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π΅ΡΡ ΠΎΠ΄Π½Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ ΡΠΊΠΎΠ²
ΠΠ°ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠΌΠΎΠΆΠ΅Ρ
ΡΠΎΠ·Π΄Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ prob-ΠΎΠ²? Π£ΠΏΠΎΠΌΡΠ½ΡΡΡΠΉ ΡΠ°Π½Π΅Π΅ ΠΏΠ°ΠΊΠ΅Ρ
httptrace
Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ClientTrace.compose()
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ Π΄Π²Π΅
ΡΡΡΡΠΊΡΡΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π² ΡΡΠ΅ΡΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠ°ΠΆΠ΄Π°Ρ probe-ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ· ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π²ΡΠ·ΠΎΠ²Π΅Ρ
ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ prob-Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ
ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΎΠΊ.
ΠΠΎΡΡΠΎΠΌΡ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ
ΡΠ΄Π΅Π»Π°ΡΡ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Π²ΡΡΡΠ½ΡΡ ΠΈ Π±Π΅Π· ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΠΌ OnPing
ΠΈΠ·
ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΡΡΡΠΊΡΡΡΡ ClientTrace
:
Π ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π΄Π²ΡΡ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΎΠΊ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
Π‘ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ΄Π° Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ ΡΠΊΠ°? ΠΠΎΠΊΠ° Π΄Π²ΠΈΠ½Π΅ΠΌΡΡ Π²ΠΏΠ΅ΡΠ΅Π΄, Π²Π΅ΡΠ½ΡΠΌΡΡ ΠΊ ΡΡΠΎΠΌΡ ΠΏΠΎΠ·ΠΆΠ΅. Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π»ΡΠ±ΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ:
ΠΠΎΠ½ΡΠ΅ΠΊΡΡΠ½Π°Ρ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ°
ΠΡΡ ΠΎΠ΄Π½Π° ΡΡΡΠΊΠ°, ΠΊΠΎΡΠΎΡΡΡ
ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠ·Π΅ΡΠ°ΠΌ β ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½Π°Ρ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ°. ΠΡΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠΎ ΠΆΠ΅
ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ Π² ΠΏΠ°ΠΊΠ΅ΡΠ΅ httptrace
β Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ²ΡΠ·ΡΠ²Π°ΡΡ Ρ
ΡΠΊΠΈ Ρ context.Context
,
ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΠΌ Π² Client.Request()
.
ΠΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΡ Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ.
ΠΡΡΠ°ΡΡΡΡ ΠΎΠ΄Π½ΠΎ Β«Π½ΠΎΒ»: ΠΏΠΈΡΠ°ΡΡ Π²Π΅ΡΡ ΡΡΠΎΡ ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ β ΡΡΡΠΈΠ½Π°. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ vim-ΠΌΠ°ΠΊΡΠΎΡΡ, Π½ΠΎ Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ.
ΠΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ ΡΠΊΠΎΠ², ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π½ΠΎΠ»Ρ ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎ-Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ β ΡΠ°Π±Π»ΠΎΠ½Π½Ρ. ΠΠ½Π°ΡΠΈΡ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π½ΠΈΡ ΠΊΠΎΠ΄ Go Π±Π΅Π· ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² ΠΈΠ»ΠΈ ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΠΈ.
ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ gtrace
ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ
ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ gtrace Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΊΠΎΠ΄ Go Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Π²ΡΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ. ΠΠ½
ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΡΡΡΠΊΡΡΡΡ Ρ ΠΏΠΎΠ»ΡΠΌΠΈ Ρ
ΡΠΊΠΎΠ² (ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π½ΡΠ΅ Π½ΠΈΠΆΠ΅ / / gtrace:gen
), Π°
ΡΠ°ΠΊΠΆΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΠΎΠΊΡΡΠ³ Π½ΠΈΡ
, ΡΠ°ΠΊ ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ
ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡ Π΄Π°Π½Π½ΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡ Ρ
ΡΠΊΠΈ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ
-Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ. ΠΠ½
ΡΠ°ΠΊΠΆΠ΅ ΡΠΌΠ΅Π΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎ-Π·Π°Π²ΠΈΡΠΈΠΌΡΡ
Ρ
Π΅Π»ΠΏΠ΅ΡΡ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΠ²ΡΠ·Π°Π½Π½ΡΡ
Ρ
ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ Ρ
ΡΠΊΠΎΠ².
ΠΡΠΈΠΌΠ΅Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ Π³ΠΈΡΡ Π°Π±Π΅.
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡΠ±ΡΠΎΡΠΈΡΡ Π²Π΅ΡΡ Β«Π»ΠΈΡΠ½ΠΈΠΉΒ» ΠΊΠΎΠ΄, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π²ΡΡΠ΅, ΠΈ ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π±Π»ΠΎΠΊ:
ΠΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° go
generate
ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π½Π΅ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Ρ
ΡΠΊΠΎΠ²
ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π² ClientTrace
.
ΠΠΎΡ ΠΈ Π²ΡΡ! ΠΠΎΠ΄ΡΠ»Ρ gtrace
ΠΏΠΎΠ·Π°Π±ΠΎΡΠΈΡΡΡ ΠΎ ΡΠ°Π±Π»ΠΎΠ½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΡΡΡΡ Π½Π° ΡΠΎΡΠΊΠ°Ρ
ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ Π²Π°ΠΆΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ Π½Π° ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Go. ΠΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ ΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΠΈ ΠΊΠΎΠ΄Π° β ΠΎΠ±ΡΡΠ½ΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΠΊ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΠΊ Π½Π°Π³ΡΠΎΠΌΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΈ ΡΡ ΡΠ΄ΡΠ΅Π½ΠΈΡ ΡΠΈΡΠ°Π±Π΅Π»ΡΠ½ΠΎΡΡΠΈ. ΠΠΎΠ΄Ρ ΠΎΠ΄, ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΠΉ Π·Π΄Π΅ΡΡ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΌΠ΅Π»ΠΎ Π±ΡΠ°ΡΡ Π½Π° Π²ΠΎΠΎΡΡΠΆΠ΅Π½ΠΈΠ΅ Π² Π²Π°ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅.