π¬ ΠΠ°ΠΊΠΈΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠ΅ ΡΡΡΠ΅ΠΊΡΡ ΠΎΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ?
β ΠΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΌΠΎΠ³ΡΡ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ , Π½ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Ρ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠΌ Π½ΡΠ»Π΅Π²ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠΎ ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΌΠ°Π»ΠΎΠ·Π°ΠΌΠ΅ΡΠ½ΡΠΌ Π±Π°Π³Π°ΠΌ.
π€ Π§ΡΠΎ Π½Π΅ ΡΠ°ΠΊ Ρ ΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ?
β ΠΠ° ΠΏΠ΅ΡΠ²ΡΠΈΜ Π²Π·Π³Π»ΡΠ΄ ΠΎΡΠΈΠ±ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎΠΈΜ. ΠΡΠΈΠ±ΠΊΠ°, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠ°Ρ Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ
β ΠΠΎΠ΄ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ
β ΠΠ΄ΠΈΠ½ ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π²ΡΡ ΠΎΠ΄ΠΎΠ² β ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ err ΡΠ°Π²Π½ΠΎΠΈΜ
β ΠΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ
β ΠΠ°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΈΜ ΡΠ°ΠΊΠΎΠΈΜ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΡΠ²ΠΎΠΈΠΌ Π½ΡΠ»Π΅Π²ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ.
β ΠΡΡΠ³ΠΎΠΈΜ Π²Π°ΡΠΈΠ°Π½Ρ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΡΡΠΎΠΈΜ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ return:
β ΠΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π°ΡΡΡΠ°Π΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠΌΠ΅ΡΠΈΠ²Π°ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ΅ ΠΊΠΎΠ΄Π° ΠΏΡΡΡΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ
π‘ ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π²Π½ΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΏΡΡΡΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ
β ΠΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΌΠΎΠ³ΡΡ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ , Π½ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Ρ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠΌ Π½ΡΠ»Π΅Π²ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΡΠΎ ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΌΠ°Π»ΠΎΠ·Π°ΠΌΠ΅ΡΠ½ΡΠΌ Π±Π°Π³Π°ΠΌ.
π€ Π§ΡΠΎ Π½Π΅ ΡΠ°ΠΊ Ρ ΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ?
func (l loc) getCoordinates(ctx context.Context, address string) (
lat, lng float32, err error) {
isValid := l.validateAddress(address)
if !isValid {
return 0, 0, errors.New("invalid address")}
if ctx.Err() != nil {
return 0, 0, err
}
}
β ΠΠ° ΠΏΠ΅ΡΠ²ΡΠΈΜ Π²Π·Π³Π»ΡΠ΄ ΠΎΡΠΈΠ±ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎΠΈΜ. ΠΡΠΈΠ±ΠΊΠ°, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠ°Ρ Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ
if ctx.Err() != nil
, β ΡΡΠΎ err
. ΠΠΎ ΠΌΡ Π½Π΅ ΠΏΡΠΈΡΠ²ΠΎΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΈΜ err
Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠΈΜ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΎ nil
. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΡΡΠΎΡ ΠΊΠΎΠ΄ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ nil
.β ΠΠΎΠ΄ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ
err
Π±ΡΠ»Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π° Π½ΡΠ»Π΅Π²ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°. ΠΠ΅Π· ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π±Ρ ΠΎΡΠΈΠ±ΠΊΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ:Unresolved reference 'err'
β ΠΠ΄ΠΈΠ½ ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π²ΡΡ ΠΎΠ΄ΠΎΠ² β ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ err ΡΠ°Π²Π½ΠΎΠΈΜ
ctx.Err()
:if err := ctx.Err(); err != nil {
return 0, 0, err
}
β ΠΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ
err
, Π½ΠΎ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ Π΅ΠΈΜ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ctx.Err()
. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ err
Π² ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π·Π°ΡΠ΅Π½ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°.β ΠΠ°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΈΜ ΡΠ°ΠΊΠΎΠΈΜ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΡΠ²ΠΎΠΈΠΌ Π½ΡΠ»Π΅Π²ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ.
β ΠΡΡΠ³ΠΎΠΈΜ Π²Π°ΡΠΈΠ°Π½Ρ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΡΡΠΎΠΈΜ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ return:
if err = ctx.Err(); err != nil {
return
}
β ΠΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π°ΡΡΡΠ°Π΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠΌΠ΅ΡΠΈΠ²Π°ΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ΅ ΠΊΠΎΠ΄Π° ΠΏΡΡΡΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ
return
Ρ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΆΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°ΠΌΠΈ, Π½ΠΎ Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ. π‘ ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π²Π½ΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΏΡΡΡΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ
return
. ΠΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠΈΠ³Π½Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΡΠΎΠΈΜ.