Go: рдкреНрд░рд╕реНрддрд╛рд╡: "рдЕрдЧрд░ рдПрд░рд░ != nil" рдХреЛ рдЕрдХреЗрд▓рд╛ рдЫреЛрдбрд╝ рджреЗрдВ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 28 рдЬреВрди 2019  ┬╖  314рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: golang/go

Go2 рдкреНрд░рд╕реНрддрд╛рд╡ #32437 if err != nil { return ... } рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛ рдХрдо рдмреЛрдЭрд┐рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдореЗрдВ рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рд╡рд┐рднрд┐рдиреНрди рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИрдВ: #32804 рдФрд░ #32811 рдореВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд░реВрдк рд╕реЗ рдкреНрдпрд╛рд░ рдирд╣реАрдВ рд╣реИред

рдорд┐рд╢реНрд░рдг рдореЗрдВ рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП: рдХреНрдпреЛрдВ рди рдЗрд╕реЗ рдРрд╕реЗ рд╣реА рд░рдЦрд╛ рдЬрд╛рдП ?

рдореБрдЭреЗ if err != nil рдирд┐рд░реНрдорд╛рдг рдХреА рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХреГрддрд┐ рдкрд╕рдВрдж рдЖрдИ рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдирдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рд╕рдЪ рдореЗрдВ рдЙрддрдирд╛ рдмреБрд░рд╛ рд╣реИ?

FrozenDueToAge Proposal Proposal-Hold error-handling

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдХрд┐рд╕реА рдХрд╛рдо рдХреЛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╣реА рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

рд╕рднреА 314 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреА рд╕рд╣рдорддрд┐ рджреЗрддрд╛ рд╣реВрдБред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдкрд╕рдВрдж рд╣реИ рдХрд┐ рд▓реМрдЯрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рд░ рддреНрд░реБрдЯрд┐ рдХреЛ рдХреИрд╕реЗ рд╕рдЬрд╛рдиреЗ рд╕реЗ рд╕реНрд░реЛрдд рдореЗрдВ рдорд╛рдирд╡ рдкрдардиреАрдп рджрд╕реНрддрд╛рд╡реЗрдЬ рдЬреБрдбрд╝ рдЬрд╛рддреЗ рд╣реИрдВ (рдЖрдорддреМрд░ рдкрд░ рд╣рдо рдЕрдкрдиреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ "рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ [рдХреЛрдб рдХреА рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рдореИрдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ]: [рдкрд┐рдЫрд▓реА рддреНрд░реБрдЯрд┐]") рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА рдкрдврд╝рдиреЗ рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдВред

рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЙрддреНрдкрдиреНрди рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЕрддреНрдпрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рд╣реЛрддреА рд╣реИрдВ рдФрд░ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкрдврд╝рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрддреА рд╣реИрдВред рдореБрджреНрд░рд┐рдд рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЬрд┐рдирдореЗрдВ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реНрд░реЛрддреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ (рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХреЛрдВ рдХреЗ рдкрд╛рд╕ рдРрд╕реА рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ) рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдб рдореЗрдВ рдЕрдкрдирд╛ рд░рд╛рд╕реНрддрд╛ рдЬрд╛рдирддреЗ рд╣реИрдВред

рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрджрд░реНрдн рдпрд╛ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ рддреНрд░реБрдЯрд┐рдпрд╛рдВ (рдирдВрдЧреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ "рдИрдУрдПрдл") рдмрд┐рд▓реНрдХреБрд▓ рдмреЗрдХрд╛рд░ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢реЙрд░реНрдЯрдХрдЯ рд╣реЛрдиреЗ рд╕реЗ рдирдЧреНрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЧреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрд╣реБрдд рд╕рд╛рд░реА рдмреЗрдХрд╛рд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░ рджреЗрдЧрд╛ред

рдпрджрд┐ рдХреБрдЫ рднреА рд╣реЛ, рддреЛ рд╣рдореЗрдВ рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рд╕рдЬрд╛рд╡рдЯреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдзрдХреНрдХрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╢рд╛рдпрдж рдирдП рдкрд╢реБ рдЪрд┐рдХрд┐рддреНрд╕рдХ рдФрд░ рд▓рд┐рдВрдЯ рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рдеред

рдореБрдЭреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐ рдЬрд╛рдВрдЪ рднреА рдкрд╕рдВрдж рд╣реИред try рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ рдФрд░ рдирд┐рд╣рд┐рдд рд░рд┐рдЯрд░реНрди рдЕрдЬреАрдм рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЗрди рдЬрд╛рдБрдЪреЛрдВ рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореИрдВ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реВрдВ:

value, err := foo()
return err if err != nil

рдпрд╣ рдПрдХ рдЫреЛрдЯреЗ рд▓реЗрдХрд┐рди рдЕрднреА рднреА рд╕реНрдкрд╖реНрдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдФрд░ рдпрд╣ рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛!

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдЗрдирд▓рд╛рдЗрди рдЖрдИрдПрдлрдПрд╕ рдПрдХ рд░реВрдмреА рдЪреАрдЬ рд╣реИ рдФрд░ рдмрд╣реБрдд рд╣реА рдЧреЛрд╢ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рд░реНрдл рджрд┐рдорд╛рдЧреА рддреВрдлрд╛рди рд╣реИред рд╢рд╛рдпрдж рд╣рдореЗрдВ рдХреБрдЫ рдФрд░ рдорд┐рд▓ рдЬрд╛рдПред


рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдЬреЛрдбрд╝рд╛: https://github.com/golang/go/issues/32860

рдХрд┐рд╕реА рдХрд╛рдо рдХреЛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╣реА рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

[...] рдХреНрдпреЛрдВ рди рдЗрд╕реЗ рд╡реИрд╕реЗ рд╣реА рд░рдЦрд╛ рдЬрд╛рдП?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╣рдирд╛ рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рд╕рднреА рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рдЬрд╛рдирддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдЙрддреНрддрд░ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЖрдИрдПрдордУ, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рдХреЗрдВрджреНрд░рд┐рдд рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдмрд╣реБрдд рдХрдо рд╡рд┐рд╡рд░рдг рд╣реИ (рдпрд╛рдиреА рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдпреЛрдЧреНрдп рд╣реИ) рдФрд░ рдпрд╣ рдЬрд▓реНрдж рд╣реА рд╕рд░реНрдХрд▓-рдЭрдЯрдХреЛрдВ рдФрд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рд╕реЗ рднрд░рд╛ рдПрдХ рдФрд░ рдмрд╛рдЗрдХ-рд╢реЗрдб рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдХреЛрдб рдХреЛ рдХрдо рдкрдардиреАрдп рдмрдирд╛рддрд╛ рд╣реИ .

рдЗрддрдирд╛ рд╣реАред

рдпрдХреАрдирди рдореИрдВ рдЗрд╕ рд╕реНрдкрд╖реНрдЯ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рдХрд╛рд░рдг рдЧреЛ рдореЗрдВ рдЖ рдЧрдпрд╛ред рдпрд╣ рдирд┐рд╣рд┐рдд рдХреЛрд╢рд┐рд╢-рдкрдХрдбрд╝ рдХреЗ рдмреАрдЪ рдХрд╣реАрдВ рдмреИрдарддрд╛ рд╣реИ рдХрд┐ рдХрдИ рднрд╛рд╖рд╛рдПрдВ рд╡рд┐рдХрд▓реНрдк рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд╛рд░реНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЬрд╛рддреА рд╣реИрдВ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реИрдВ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдИ рдирдпрд╛ рдирд┐рд░реНрдорд╛рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рд╣рд▓ рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдЖрдкрдиреЗ if err := nil рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд▓рдкреЗрдЯрд╛ рд╣реИ, рддреЛ рдпрд╣ рдереЛрдбрд╝реА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдореЗрд░реА рдЬрдВрдЧрд▓реА рдЬрд╛рдУ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ):

func handleErr(err error, cb func(error)) {
        if err := nil {
                cb(err)
        }
}

рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдЬреЛ рдЗрд╕ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рдХреЛ рдХрдо рдЖрдо рддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧреА рдмрдирд╛рддреА рд╣реИ рд╡рд╣ рд╣реИ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо, рдЬреЛ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рд╖рдп рд╣реИред

рдореИрдВ рдЗрд╕реЗ рдЕрдкрдиреА рд╕рд╣рдорддрд┐ рджреЗрддрд╛ рд╣реВрдБред if err != nil { return err } рд╣рдорд╛рд░реЗ рдХреЛрдб рдмреЗрд╕ рдореЗрдВ рдХрд┐рд╕реА рдХреЛрдб рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП "рдореИрдХреНрд░реЛ" рдХреА рдХреЛрд╢рд┐рд╢ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рд╕рдВрджрд░реНрдн рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде, рд╣рдо рдХреЗрд╡рд▓ рд▓рд┐рдкрдЯреЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред

defer рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рднреА рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ try(fn(), "my error message: %w") рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдЫреЛрдЯреА рд▓рд╛рдЗрди рдХреА рд▓рдВрдмрд╛рдИ рдХреЗ рдХрд╛рд░рдг if err != nil рдирд┐рд░реНрдорд╛рдг рдЕрднреА рднреА рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╕рдЪ рдХрд╣реВрдВ рддреЛ, рдореИрдВ рдПрдХ рдирд┐рд╣рд┐рдд рдкреНрд░рддрд┐рдлрд▓ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдЬреЛ try рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреЗрдиреЗрд░рд┐рдХ рд╣реЛрддреЗ, рддреЛ рдореИрдВ рдРрд╕реЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рдЬреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдореЛрдиреИрдб-рдИрд╢ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ред

type Result<T> interface {
  Expect(err error) T
  OrElse(defaultValue T) T
}

func From<T>(value T, err error) Result<T> { ... }

рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдмрд┐рд▓реНрдЯрд┐рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рдл рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдореЗрдВ рдФрд░ рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд▓реМрдЯрд╛рдП рдЧрдП рддрд░реАрдХреЛрдВ рдХрд╛ рдкреНрд░рд╕рд╛рд░ рд╣реЛрдЧрд╛ (рдореВрд▓реНрдп, рддреНрд░реБрдЯрд┐) рдФрд░ рдкрд░рд┐рдгрд╛рдо

рдореМрдЬреВрджрд╛ try рдкреНрд░рд╕реНрддрд╛рд╡, рдЬрд┐рд╕рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдЬрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдореЗрд░реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдХрднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рд╕рдЪ рдХрд╣реВрдБ рддреЛ, рдЗрд╕реЗ code_smell рднреА рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рди рд╣реЛ, рдХреНрдпреЛрдВрдХрд┐ рдЧрд▓рдд рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИред

рдЬрд┐рд╕ рдХреЛрдб рд╕реЗ рд╣рдо рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рд╡рд╣ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдирд╣реАрдВ рд╣реИред

if err != nil {
  return err
}

рдпрд╣ рддреНрд░реБрдЯрд┐ nil рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╣реИред рдЗрд╕ рдкреИрдЯрд░реНрди рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрд┐рдВрджреБ рдкрд░ рд╕рдВрднрд╛рд▓реА рдЧрдИ рддреНрд░реБрдЯрд┐ рдХрд╛ рдорд╛рди рдирд╣реАрдВ рд╣реИред

рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рднрд╛рд╖рд╛ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛, рд░реВрдмреАред

begin
 some_method_that_raises_an_error
rescue => e # catch any exception
  retry e        # throw it up again
end

рдпрд╣ рдЧреЛрд▓рд╛рдВрдЧ рдХреЛрдб рдХреЗ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдЬрдм рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрдкрд╡рд╛рдж рд╣реБрдЖ рд╣реИ рдФрд░ рдлрд┐рд░ рдЙрд╕реЗ рдлрд┐рд░ рд╕реЗ рдмрдврд╝рд╛рдПрдВред рд╣рдо рдмрд╕ рдЗрд╕реЗ рдвреЗрд░ рдореЗрдВ рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВред

рдЧреЛрд▓рд╛рдВрдЧ рдореЗрдВ, рд╣рдо рдЗрд╕реЗ return рдХрд░рддреЗ рд╣реИрдВред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ _error рд╣реИрдВрдбрд▓рд┐рдВрдЧ_ рдХрд╣рд╛рдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ?

рд╣рдо рд╕рднреА рдХреЛ рдЗрд╕ рдкреИрдЯрд░реНрди рдХреА рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рд╕рдорд╛рди рдЕрдиреБрднрд╡ рд╣реБрдП рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ file not found рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдлрд┐рд░ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рдореВрд▓ _рдереНрд░реЛрд╡рд░_ рдХреЛ рдЯреНрд░реЗрд╕ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдлреА рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░рдирд╛ред

рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ try рдкреНрд░рд╕реНрддрд╛рд╡ (рдФрд░ рдЕрдиреНрдп) рджреЛрд╖рдкреВрд░реНрдг рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреИрдЯрд░реНрди рдирд╣реАрдВ рд╣реИред

рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП err.Error() рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЬрд╛рдБрдЪ, рдкреНрд░рдХрд╛рд░ рдХреЗ рджрд╛рд╡реЗ рдЖрджрд┐ рджреЗрдЦреЗ рд╣реИрдВред
рд╣рдореЗрдВ рдЗрд╕ рдЕрд╕рдВрдЧрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдЯрд░реНрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ xerrs рдЗрд╕реЗ рд╣рд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдЕрднреА рддрдХ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред

рдореИрдВ рдЧрд╝рд▓рддреА рд░рдЦрдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдБ!=рд╢реВрдиреНрдп рдпрдерд╛рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред

рд╣рд░ рдмрд╛рд░ рдЬрдм рдореИрдВ рдПрдХ рдмрдбрд╝реЗ рдЧреЛ рдХреЛрдб рдмреЗрд╕ рдореЗрдВ рдЦреЛрджрддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдЦреБрдж рд╕реЗ рдкреВрдЫрддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдХреБрдЫ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛ рдХреИрд╕реЗ рдХрдо рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдореИрдВ рд╣рдореЗрд╢рд╛ рдпрд╣рд╛рдВ рд╡рд╛рдкрд╕ рдЖрддрд╛ рд╣реВрдВ:

  • рд╡реЗ рдХреЛрдбрдкрде рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИрдВред
  • рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдкрдХреЛ рдХреЛрдбрдкрде рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕реЗ рдЫрд┐рдкрд╛рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрдиреЗ рд╕реЗ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрди рдЬрд╛рдПрдЧрд╛ (рдХреНрдпреЛрдВрдХрд┐ рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░ рд╣рдо рдЕрднреА рднреА рдорд╛рдкрддреЗ рд╣реИрдВ рдХрд┐ рд▓рд╛рдЗрди рдХрд╛рдЙрдВрдЯ рджреНрд╡рд╛рд░рд╛ рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдХрдард┐рди рд╣реИ)ред
  • рдпрджрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛрдбрдкрде рдХреЛ рдЫреБрдкрд╛рддрд╛ рд╣реИ рддреЛ рдореИрдВ рдирдП "рд▓рд╛рдкрддрд╛ рд╕рдлрд╛рдИ" рдмрдЧ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд░рд╣реВрдВрдЧрд╛ред
  • рд▓реМрдЯрд╛рдИ рдЧрдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдЕрд░реНрде рдФрд░ рдкреИрдЯрд░реНрди рдЗрддрдиреЗ рд╡рд┐рд╡рд┐рдз рд╣реИрдВ рдХрд┐ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗрд╡рд▓ рдХрдерд┐рдд рдореБрджреНрджреЗ рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░реЗрдЧрд╛
  • рдЕрдЧрд░ рдХреЗрд╡рд▓ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╣рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдорд┐рд▓реЗрдЧрд╛
  • рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЗ рд╕рд╛рде рдЙрдиреНрд╣реЗрдВ рд░реЛрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЗ рдЕрдиреБрдХреВрд▓реА рдЬрд╛рджреВ рд░рдЦрдиреЗ рдХрд╛ рдкреНрд░рд▓реЛрднрди рдЖрдПрдЧрд╛
  • рдХрд┐ рдЕрдЧрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдореБрджреНрджрд╛ рдерд╛ рддреЛ рд▓реЛрдЧ рдЕрдкрдирд╛ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ рдпрд╛ рдХреБрдЫ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЕрдкрдирд╛рдП рдЧрдП рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рджреЗрдЦрд╛ред рд╢рд╛рдпрдж рдореИрдВрдиреЗ рдЕрднреА рдХрд╛рдлреА рдореЗрд╣рдирдд рдирд╣реАрдВ рдХреА рд╣реИред

рдЗрд╢реНрдпреВ рдЯреНрд░реИрдХрд░ рдХрдИ рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЪреАрдЬ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ, рд╡рд╣ рд╣реИ рдПрдХ рдЬрдЯрд┐рд▓ рд╡рд┐рд╖рдп рдХреА рд╡рд┐рд╕реНрддреГрдд рдЪрд░реНрдЪрд╛ред рд╕рдорд╕реНрдпрд╛ рдЯреНрд░реИрдХрд░ рдХреЛрдИ рдереНрд░реЗрдбрд┐рдВрдЧ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрджреЗрд╢ рдХрд╛ рдЙрддреНрддрд░ рджреЗрдирд╛ рдЕрдЬреАрдм рд╣реИред рдЪреВрдВрдХрд┐ рдпрд╣рд╛рдВ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рдЕрдиреНрдп рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЛ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЛ рдЧреЛрд▓рд╛рдВрдЧ-рдирдЯреНрд╕ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдореЗрдВ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреГрдврд╝рддрд╛ рд╕реЗ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред

рдЕрдЧрд░ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдЙрддреНрддрд░ рд╣реИред рдпрд╣ рдирдпрд╛ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╕реНрддрд╛рд╡ рднрд╛рд╖рд╛ рдХреЗ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рд╕реАрдзреЗ рд╡рд┐рд░реЛрдз рдореЗрдВ рд╣реИред

рдЧреЛрд▓рд╛рдВрдЧ рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдЗрд╕рдХреА рд╕рд╛рджрдЧреА рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рдЙрдкрдпреЛрдЧ рд╣реИред рдЬрд╛рд╡рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд┐рди рдЪреАрдЬреЛрдВ рд╕реЗ рдореИрдВ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдШреГрдгрд╛ рдХрд░рддрд╛ рд╣реВрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЯреНрд░рд╛рдИ рдереНрд░реЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рдиред рдпрд╣ рдмрд╣реБрдд рдШреГрдгрд┐рдд рд╣реИред рдпрд╣ рднрдпрд╛рдирдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИред рдХреЙрд▓ рд╕реНрдЯреИрдХ рдкрд░ рдЕрдкрд╡рд╛рдж рднреЗрдЬрдирд╛ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рднрдпрд╛рдирдХ рдФрд░ рдШреГрдгрд┐рдд рддрд░реАрдХрд╛ рд╣реИред рд╢реАрд░реНрд╖ рдкрд░, рдпрд╣ рд╕рдм рдХреБрдЫ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдЪреЗрдХ рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рддреНрд░реБрдЯрд┐ рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕реНрд╡рдпрдВ рджрд╕реНрддрд╛рд╡реЗрдЬ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдмрдВрдзрди рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ рдПрдХ рджрд┐рди рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рддреНрд░реБрдЯрд┐! = рд╢реВрдиреНрдп рдЕрдЪреНрдЫреА рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреА рд╣реИ, рд╕реНрд╡рдпрдВ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдЪреНрдЫреЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреА рд╣реИ, рдФрд░ рдпрд╣ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдЙрди рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдкрд╕рдВрдж рд╣реИред рдЗрд╕ рдирдП рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдирд╛, рдЧрдиреНрджрд╛, рдХреБрдЫ рдЕрд╕реНрдкрд╖реНрдЯ рд░рд┐рдЯрд░реНрди рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдФрд░ рднреНрд░рд╛рдордХ рд╢рдмреНрджрд╛рд░реНрде рдЙрд╕ рднрд╛рд╖рд╛ рдХреА рднрд╛рд╡рдирд╛ рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред

рд╡рд░реНрдмреЛрд╕рд┐рдЯреА рдХреЛрдИ рдмреБрд░реА рдЪреАрдЬ рдирд╣реАрдВ рд╣реИред рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╡рд╛рдЪрд╛рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рддрд░реНрдХ рджреВрдВрдЧрд╛ рдХрд┐ рдЧреЛ рдХреА рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдЕрдирд╛рд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдпрд╣ рднрд╛рд╖рд╛ рдХреЗ рдЖрдХрд░реНрд╖рдг рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред

рдЕрдзрд┐рдХ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реЛ рд╕рдХрд╛ред рд╕реНрдкрд╖реНрдЯ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди IMO рднрд╛рд╖рд╛ рдХреА рд╕рд░реНрд╡реЛрддреНрддрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЛ рд▓реЛрдЧ рдЗрд╕рд╕реЗ рдкрд░реЗрд╢рд╛рди рд╣реИрдВ, рд╡реЗ рдЕрднреА рдЗрд╕рдХреЗ рдЕрднреНрдпрд╕реНрдд рдирд╣реАрдВ рд╣реИрдВред

рдореБрджреНрджреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рджреЛ рд░рд╛рдп рдПрдХ рд░рд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд▓реАрди рд╣реЛ рдЧрдИ рд╣реИрдВред

  1. рд╣рдореЗрдВ рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ (рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдпрд╛ рдирдпрд╛ if-err рд╕рд┐рдВрдЯреИрдХреНрд╕)
  2. рд╡реИрд╕реЗ рднреА, рд╣рдо рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдирд╣реАрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ

рдЧрд┐рдЯрд╣рдм рд╡реЛрдЯ рдЖрдЗрдХрди рджреВрд╕рд░реЗ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЬрд╛рдиреЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдПрдХ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЧреЛрд▓рд╛рдВрдЧ рдХреНрдпреЛрдВ рдкрд╕рдВрдж рд╣реИред рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдХреЛрдИ рднреА рдбреЗрд╡рд▓рдкрд░ рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдХреНрдпреЛрдВ рдЪрд╛рд╣реЗрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдЬреНрдпрд╛рджрд╛рддрд░ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рдЬ рд▓реЛрдЧреЛрдВ рд╕реЗ рд╣реИред рдЗрд╕рдХреА рдЖрджрдд рдкрдбрд╝рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдЗрд╕рдХреА рдЖрджрдд рдбрд╛рд▓ рд▓реЗрддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореИрдВрдиреЗ #32811 рд▓рд┐рдЦрд╛ рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдЕрдзрд┐рдХ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВ... рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдХреЗрд╡рд▓ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛ рд╣реА рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд░ рдЗрдореЛрдЬреА рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдмрд╣реБрдд рдХреБрдЫ рдХрд╣рддреА рд╣реИрдВред

рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдЧрд▓рддреА рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЛ рд╡реИрд╕реЗ рд╣реА рдЫреЛрдбрд╝ рджреЗрдВред рдЧреЛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдЬреЛ рдЪреАрдЬреЗрдВ рдкрд╕рдВрдж рд╣реИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рднрд╛рд╖рд╛ рдиреНрдпреВрдирддрдо рд╣реИ, рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рдмреЛрд▓рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрддрд╛ рд╣реИред рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬреЛрдбрд╝рдХрд░, рд╣рдо рдПрдХ рдРрд╕реА рджреБрдирд┐рдпрд╛ рдмрдирд╛рдПрдВрдЧреЗ рдЬрд╣рд╛рдВ x% рдХреЛрдб рд╡рд░реНрддрдорд╛рди рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ y% рдирдИ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣, рдкрд╣рд▓реЗ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рдЕрдиреНрдп рдореБрджреНрджреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрд╕рдВрдЧрдд рдХреЛрдб рдЖрдзрд╛рд░ рдмрдирд╛рдПрдЧрд╛ред рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд╕реЛрдЪрддрд╛ рдХрд┐ рдирдИ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдореВрд▓реНрдп рд╡реНрдпрд╛рдкрд╛рд░ рдмрдВрдж рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдореМрдЬреВрджрд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдкрд░реНрдпрд╛рдкреНрдд/рдкрд░реНрдпрд╛рдкреНрдд рдорд╛рдирддрд╛ рд╣реВрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдХреЛрдИ рд╣реИ рдЬреЛ рдЧреЛрд▓рд╛рдВрдЧ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рд╣реИ, рдЙрди рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЬреЛ рдореБрдЭреЗ рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддрд╛рдЬрд╝рд╛ рд▓рдЧрддрд╛ рд╣реИ рд╡рд╣ рд╣реИ рд╕реНрдкрд╖реНрдЯ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрдиред рдореИрдВрдиреЗ рдЬрд╛рд╡рд╛, рд░реВрдмреА, рдкрд╛рдпрдерди рдФрд░ рдиреЛрдб рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдЧреЛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИред рдореИрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╕реНрдкрд╖реНрдЯ 'рдкрде' рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдпрд╣ рдореБрдЭреЗ рдХреБрдЫ рднрд╛рд╖рд╛ рдирд┐рд░реНрдорд╛рдг рджреНрд╡рд╛рд░рд╛ рдирд┐рд╣рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдЕрд╕реНрдкрд╖реНрдЯ рдмрдирд╛рддрд╛ рд╣реИред

return ... if ...╦Л @andreynering рдХрд╛ рд╕реБрдЭрд╛рд╡ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдлреА рд╕реНрдорд╛рд░реНрдЯ

рд╕рд╣рдордд, if err != nil рдЕрдХреЗрд▓рд╛ рдЫреЛрдбрд╝ рджреЗрдВред

рдореИрдВ рд╡рд░реНрддрдорд╛рди рдкреНрд░рд╛рд░реВрдк рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрддрд╛ рд╣реВрдВред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рд┐рдЦрд╛рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рдкреИрдЯрд░реНрди рд╣реИред рдирдП рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЛ рдЧрддрд┐ рджреЗрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреИрдЯрд░реНрди рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рджреЛрд╣рд░рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХрдо рд╕реЗ рдХрдо рд╡рд░реНрддрдорд╛рди рд╕рдВрджрд░реНрдн рдореЗрдВ рддреНрд░реБрдЯрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реИ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдЗрдВрдЬреАрдирд┐рдпрд░ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рдореБрдЭреЗ рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред

рдореИрдВрдиреЗ #32804 рд▓рд┐рдЦрд╛ рдерд╛ рдФрд░ рдореИрдВ рдЪреАрдЬреЛрдВ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддреЗ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред рдпрджрд┐ рдЖрдкрдХрд╛ рдХреЛрдб рд▓рдВрдмрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╕реА рдЪреАрдЬреЗрдВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛрдб рд╣реИ, рддреЛ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдХреГрдкрдпрд╛, рдХреЗрд╡рд▓ рдЪреАрдЬреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреАрдЬреЛрдВ рдХреЛ рди рдЬреЛрдбрд╝реЗрдВред

рдореИрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреА рд╕рд╛рджрдЧреА рдХрд╛ рдЖрдирдВрдж рд▓реЗрддрд╛ рд╣реВрдВред

рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рдкрд░реНрдпрдп рд╣реИ рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рд▓рд┐рдП, рдФрд░ рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдХреГрдкрдпрд╛ рдореЗрд░реА рдкрд╡рд┐рддреНрд░ рдХрдмреНрд░ рдХреЛ рдордд рдмрджрд▓реЛред

рдЕрдзрд┐рдХ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди (рд╡рд╛рд░реНрд╖рд┐рдХ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рд╕реЗ) рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╡рд╛рд▓реА рднрд╛рд░реА рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдереАред рдЧреЛ рдЯреАрдо рдЕрдм рдЙрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░ рд░рд╣реА рд╣реИред

@icholy рдЬрд╝рд░реВрд░, рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдкреНрд░рд╕реНрддрд╛рд╡ рд╡рд╛рдВрдЫрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред рд╡реЗ рд╕рднреА рдпрд╛ рддреЛ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЕрдзрд┐рдХ рдкреНрд░рдпрд╛рд╕/рдкрдХрдбрд╝/рдЖрдЦрд┐рд░рдХрд╛рд░ рд╢реИрд▓реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрддреЗ рд╣реИрдВ, рд╕рдВрджрд░реНрдн рд╕реЗ рдмрд╛рд╣рд░ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛ рдмреБрд▓рдмреБрд▓рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдЕрдиреНрдпрдерд╛ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдмрдирд╛рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдЧреЛ рдХреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рднрд╛рд╖рд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд┐рдХрд▓реНрдк рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣реЗ рдереЗред рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдХреЛрдИ рдкрд╕рдВрдж рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореМрдЬреВрджрд╛ рдкреИрдЯрд░реНрди рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИред

рдПрдХ рд╢рд┐рдХрд╛рдпрдд рдЗрд╕реЗ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдереА, рд▓реЗрдХрд┐рди рд╡рд╕реНрддреБрддрдГ рд╣рд░ рд╕рдВрдкрд╛рджрдХ рдХреЗ рдкрд╛рд╕ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЙрд░реНрдЯрдХрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдмрдбрд╝реА рдмрд╛рдд рдирд╣реАрдВ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдореЗрд░рд╛ рдЕрдкрдирд╛ рдЕрдиреБрднрд╡ рд╣реИ рдХрд┐ рдореИрдВ 1.0 рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рдЧреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рд╛рджрдЧреА рдкрд╕рдВрдж рд╣реИ рдФрд░ рдореБрдЭреЗ рдЕрддрд┐рд░реЗрдХ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИред

@kevineaton рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ try рдЬрдЯрд┐рд▓ рд╣реИ?

рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рднреА рдЖрд╢реНрд╡рд╕реНрдд рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рд╣рдореЗрдВ рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ if err != nil рдЪреЗрдХ рдкрд╣рд▓реЗ рдмреНрд▓рд╢ рдкрд░ рдЕрдЬреАрдм рд▓рдЧрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдРрд╕рд╛ рдХреБрдЫ рднреА рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрди рдЪреАрдЬреЛрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рд╣реИ рдХреЗ рд▓рд┐рдП рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИред

@ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЬрд╛рд╡рд╛ рдФрд░ рдкрд╛рдпрдерди рд▓рд┐рдЦрдиреЗ рдореЗрдВ рджрд╕ рд╕рд╛рд▓ рдмрд┐рддрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкреЛрдХреЗрдореЛрди рдЕрдкрд╡рд╛рдж рдХреЛ рдкрдХрдбрд╝рдиреЗ рдореЗрдВ рднрд╛рдЧ рд▓реЗрддреЗ рд╣реИрдВ, рдпрд╛ рдХрдИ рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдиреНрдпрдерд╛ рдФрд░ рднреА рдЕрдзрд┐рдХ рдУрд╡рд░рд╣реЗрдб рдФрд░ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреА рдЙрд╕ рд╢реИрд▓реА рдореЗрдВ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛ рдпрджрд┐ рдореИрдВ рдЗрд╕реЗ рдХрднреА рднреА рдЯрд╛рд▓ рд╕рдХрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рд╕рд┐рд░рджрд░реНрдж рдФрд░ рднреНрд░рдо рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдкрдврд╝рд╛рддреЗ рд╕рдордпред рдореИрдВ рдПрдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреЗ рджрд┐рди-рдкреНрд░рддрд┐рджрд┐рди рдХреЗ рдХрд╛рдо рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рднреА рдкрдврд╝рд╛рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдирдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдкрдврд╝рд╛рдиреЗ рдФрд░ рд╕рд▓рд╛рд╣ рджреЗрдиреЗ рдХреЗ рдкреНрд░рддрд┐ рдкрдХреНрд╖рдкрд╛рддреА рд╣реВрдВред рдореИрдВ рдЧреЛ рдХреЛ рдЪреБрдиреВрдВрдЧрд╛ рдФрд░ рдХрд┐рд╕реА рднреА рджрд┐рди рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдпрд╛ рдмрд╛рд░реАрдХ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рдпрд╣ рд╕рд░рд▓ рддреНрд░реБрдЯрд┐ рд╣реИред

рдЗрд╢реНрдпреВ рдЯреНрд░реИрдХрд░ рдХрдИ рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЪреАрдЬ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ, рд╡рд╣ рд╣реИ рдПрдХ рдЬрдЯрд┐рд▓ рд╡рд┐рд╖рдп рдХреА рд╡рд┐рд╕реНрддреГрдд рдЪрд░реНрдЪрд╛ред

рд╕рдЪ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣рд╛рдБ рд╣реИрдВред

рдпрджрд┐ try рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдП рддреЛ if err != nil рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛ред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ try рдХреЛрдб рдкрдереЛрдВ рдореЗрдВ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯрддрд╛ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ рдЬреЛ рдпрд╛ рддреЛ рднрд╛рд░реА рдЕрдЧреНрд░реЗрд╖рдг рддреНрд░реБрдЯрд┐ рд╣реИрдВ рдпрд╛ рдЬрд╣рд╛рдВ рдПрдХ рд╡рд┐рд▓рдВрдм рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред . рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдХреИрд╕реЗ try рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЦрд╛рд▓реА if-err-return-err рд╕рдореВрд╣ рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╣реИред try рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЙрдкреЗрдХреНрд╖рд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ try рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдЕрднреА рддрдХ рдХреЗ рд╕рд░реНрд╡реЛрддреНрддрдо рд╕реБрдЭрд╛рд╡реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рдкрдврд╝рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ ..

рдореЗрд░реЗ рдЕрд╡рд╛рдВрдЫрд┐рдд рджреЛ рд╕реЗрдВрдЯ, рдпрд╣ рдмрд╣реБрдд "рдЬрд╛рдУ" рдХреА рддрд░рд╣ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рд╣реА рдЬрд╛рджреБрдИ рд╣реИ рдФрд░ рд╣рдо рд╕реНрдкрд╖реНрдЯ рд▓реЛрдЧреЛрдВ рдкрд░ рдирд┐рд╣рд┐рдд рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред

рдЧреЛ рд╕реЗ рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ

рдЧреЛ рдХреЗ рдкрд╛рд╕ ?: рдСрдкрд░реЗрдЯрд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИ?
_Go рдореЗрдВ рдХреЛрдИ рдЯрд░реНрдирд░реА рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдСрдкрд░реЗрд╢рди рдирд╣реАрдВ рд╣реИред рдЖрдк рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:_

if expr {
   n = trueVal
} else {
    n = falseVal
}

рдХрд╛рд░рдг ?: рдЧреЛ рд╕реЗ рдЕрдиреБрдкрд╕реНрдерд┐рдд рдпрд╣ рд╣реИ рдХрд┐ рднрд╛рд╖рд╛ рдХреЗ рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдиреЗ рдЕрднреЗрджреНрдп рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдСрдкрд░реЗрд╢рди рдХреЛ рджреЗрдЦрд╛ рдерд╛ред рдЕрдЧрд░-рдФрд░ рд░реВрдк, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд▓рдВрдмрд╛ рд╣реИ, рдирд┐рд░реНрд╡рд┐рд╡рд╛рдж рд░реВрдк рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдПрдХ рднрд╛рд╖рд╛ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рд╕рд╢рд░реНрдд рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдирд┐рд░реНрдорд╛рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ ред

@ianlancetaylor

рдЗрд╢реНрдпреВ рдЯреНрд░реИрдХрд░ рдХрдИ рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЪреАрдЬ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ, рд╡рд╣ рд╣реИ рдПрдХ рдЬрдЯрд┐рд▓ рд╡рд┐рд╖рдп рдХреА рд╡рд┐рд╕реНрддреГрдд рдЪрд░реНрдЪрд╛ред рд╕рдорд╕реНрдпрд╛ рдЯреНрд░реИрдХрд░ рдХреЛрдИ рдереНрд░реЗрдбрд┐рдВрдЧ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрджреЗрд╢ рдХрд╛ рдЙрддреНрддрд░ рджреЗрдирд╛ рдЕрдЬреАрдм рд╣реИред рдЪреВрдВрдХрд┐ рдпрд╣рд╛рдВ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рдЕрдиреНрдп рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реИ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЛ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЛ рдЧреЛрд▓рд╛рдВрдЧ-рдирдЯреНрд╕ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдореЗрдВ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджреГрдврд╝рддрд╛ рд╕реЗ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред

рдЖрдк рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрджреЗрд╢ рдХрд╛ рдЙрддреНрддрд░ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЕрднреА рддреБрдореНрд╣рд╛рд░рд╛ рдЬрд╡рд╛рдм рджрд┐рдпрд╛ред :)

рдЪреВрдВрдХрд┐ рдпрд╣рд╛рдВ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдЕрдиреНрдп рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реИ,

рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдЕрд░реНрде рд╣реИ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЖрд╣реНрд╡рд╛рдиред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдореБрджреНрджрд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╡рд┐рд░реЛрдзреА рд╣реИред рдХреНрдпрд╛ рдЖрдк рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛ _not_ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рддреИрдпрд╛рд░ рдХрд░реЗрдВ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡ рдкреНрд░рдгрд╛рд▓реА рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдпрдерд╛рд╕реНрдерд┐рддрд┐ рдХреЛ рдХрдо рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рджреЗрддреА рд╣реИред

рдЬрд╛рд╡рд╛ рдФрд░ рдкрд╛рдпрдерди рд▓рд┐рдЦрдиреЗ рдореЗрдВ рджрд╕ рд╕рд╛рд▓ рдмрд┐рддрд╛рдиреЗ рдХреЗ рдмрд╛рдж ... рдореИрдВ рдПрдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреЗ рджрд┐рди-рдкреНрд░рддрд┐рджрд┐рди рдХреЗ рдХрд╛рдо рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рднреА рдкрдврд╝рд╛рддрд╛ рд╣реВрдВ

@kevineaton рдХреНрдпрд╛ рдЖрдк рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдбрд┐рдХ

рдпрд╣ рдореБрджреНрджрд╛ рдПрдХ рдЕрд░реНрдз-рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрдерд╛рди рдкрд░ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЪрд▓ рд░рд╣реЗ рдорддрджрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдХреЛрдИ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЗ рдкрдХреНрд╖ рдпрд╛ рд╡рд┐рдкрдХреНрд╖ рдореЗрдВ рдорддрджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред

if err != nil рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдирд╣реАрдВ рдмрджрд▓рдирд╛ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬрдЯрд┐рд▓ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореВрд▓ рд░реВрдк рд╕реЗ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╡рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИред рдирд╣реАрдВ, рдпрд╣ рднрдЧрд╡рд╛рди рдмрд╣реБрдд рд▓рдВрдмрд╛ рдФрд░ рдЯрдЯреЛрд▓рдирд╛ рдХрдард┐рди рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЗрд╕реЗ рдЧрд▓рдд рдпрд╛ рдмреБрд░рд╛ рдпрд╛ рдЕрдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИред

+1, рдЕрдЧрд░ рдХреБрдЫ рднреА рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫреА рд╕реНрдЯреИрдХрдЯреНрд░реИрдХ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдЧреА (рдлреНрд░реЗрдо рдиреГрддреНрдп рд╕рд╛рдордЧреНрд░реА рдХреЗ рдмрд┐рдирд╛), рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ x/errors рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд░ рдЪреБрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдореБрдЭреЗ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХреБрдЫ рддреЗрдЬ рдкрд╕рдВрдж рдЖрдПрдЧрд╛, рдЬреИрд╕реЗ рдЕрдВрдХрди func s throws рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреЛ рдПрдХ error + try рдХреАрд╡рд░реНрдб рд▓реМрдЯрд╛рдПрдЧрд╛, рддреНрд░реБрдЯрд┐ var рд╢реИрдбреЛрдЗрдВрдЧ рдХреЛ рд░реЛрдХрдирд╛ (рдЬрд┐рд╕реЗ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдирдлрд░рдд рдХрд░рддрд╛ рд╣реВрдВ), рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

func a() (int) throws {
  throw &someError{}
}

anInt, err := try a()

@icholi рд╡рд╣ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЕрд╡рд╛рдВрдЫрд┐рдд рдерд╛ред рдпрд╣ рдЪрд░реНрдЪрд╛ рдХрд╛ рд╕реНрдерд╛рди рд╣реИ рдФрд░ рдЧреЛ рд╕рдореБрджрд╛рдп рдХреЛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╕рдореБрджрд╛рдп рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╕реБрдХрд░рд╛рдд рдХреЛ рдПрдХ рдмрд╣рд╕ рдореЗрдВ рдЕрдкрдорд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд╣рдирд╛ рдерд╛ред

рд╡рд░реНрддрдорд╛рди рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдорд╛рдирд╡-рддреНрд░реБрдЯрд┐-рдкреНрд░рд╡рдг рд╣реИред рдЗрд╕ рд╕рдордп err рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рднреВрд▓рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред рдпрджрд┐ рдХреЛрдИ рдЬрд╛рдВрдЪ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реИ (рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рд╣реЛрддрд╛ рд╣реИ), рддреЛ рд╕рдВрдХрд▓рдХ unused variable рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рд╕рдЦреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рдЖрдк рдпрд╛ рддреЛ _ рдПрдХ рддреНрд░реБрдЯрд┐ рдпрд╛ рдЗрд╕реЗ рдЬрд╛рдВрдЪреЗрдВ - рдХреЛрдИ рд▓реЗрдЧ-рд╢реВрдЯрд┐рдВрдЧ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

@kevineaton рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ try рдЬрдЯрд┐рд▓ рд╣реИ?

try рдПрдХ рдХреЛрдб рдЧрдВрдз рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдерд╛рди рдХреЗ рдмрдЬрд╛рдп рдЖрдкрдХреЗ рдХреЛрдб рдХреЗ рдкреВрд░реЗ рдмреНрд▓реЙрдХ рдХреЗ рдмреАрдЪ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЛ рдмрд╛рдзреНрдп рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдкрд╡рд╛рдж рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА "рдмрдмрд▓-рдЕрдк" рдкреНрд░рдХреГрддрд┐ рдХреЛрдб рдФрд░ рдХрдИ рдирд┐рдХрд╛рд╕ рдмрд┐рдВрджреБрдУрдВ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧреИрд░-рдирд┐рд░реНрдзрд╛рд░рд┐рддреА рд╡реНрдпрд╡рд╣рд╛рд░ рдмрдирд╛рддреА рд╣реИред

try рдмрдЬрд╛рдп рдПрдХрд╛рдзрд┐рдХ рд░рд┐рдЯрд░реНрди рдорд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕реБрдВрджрд░рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рди рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдХрд╛рд░реНрдп рдХрдм рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЗ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХрд╛ рдПрдХ рдмрд┐рдВрджреБ рд╣реИ (рдЬрдм рддрдХ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЧрд╛рд░реНрдб рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдпрд╛ рдЕрдиреНрдп рд╕реНрдкрд╖реНрдЯ рд░рд┐рдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛)ред

try рдмреНрд▓реЙрдХ рдХрдИ рд░рд┐рдЯрд░реНрди рдХреЗ рдкреВрд░реЗ рдХрдордмрдЦреНрдд рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рд╣рд░рд╛ рджреЗрддреЗ рд╣реИрдВред

@fillest рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдХрдо рдкрдардиреАрдп рдмрдирд╛ рджреЗрдЧрд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реБрд░рдХреНрд╖рд╛/рд╕реНрдкрд╖реНрдЯ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдореВрд▓реНрдп рдЬреЛрдбрд╝ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдк рдореВрд▓ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЧреЛ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛрдиреЗ рдХреА рднрд╛рд╡рдирд╛ рдХрд╛ рдкреАрдЫрд╛ рдХрд░рддреЗ рд╣реБрдП рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрджреНрдзреГрдд рдмрдЧ рдХреЗ рд╡рд░реНрдЧ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реЛрдЧрд╛ред

рд╡рд░реНрддрдорд╛рди рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдорд╛рдирд╡-рддреНрд░реБрдЯрд┐-рдкреНрд░рд╡рдг рд╣реИред рдЗрд╕ рд╕рдордп рдЧрд▓рддреА рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИред рдпрджрд┐ рдХреЛрдИ рдЬрд╛рдВрдЪ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реИ (рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рд╣реИрдВ), рддреЛ рд╕рдВрдХрд▓рдХ рдЕрдкреНрд░рдпреБрдХреНрдд рдЪрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рд╕рдЦреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рдЖрдк рдпрд╛ рддреЛ _ рдПрдХ рддреНрд░реБрдЯрд┐ рдпрд╛ рдЗрд╕реЗ рдЬрд╛рдВрдЪреЗрдВ - рдХреЛрдИ рд▓реЗрдЧ-рд╢реВрдЯрд┐рдВрдЧ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

@fillest рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрди "рд▓реЗрдЧ-рд╢реВрдЯрд┐рдВрдЧ" рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛрддреА рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЖрд▓рд╕реА рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдЬреЗрдирд░рд┐рдХ рдХреА рдХрдореА, рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдкреНрд░рд╡реГрддреНрддрд┐, рдЬреАрд╕реА, рд╕рдВрд╕рд╛рдзрди рд╕реАрдорд╛/рд▓реЗрдЦрд╛ рдХреА рдХрдореА рдФрд░ PHP noobs рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд╛рд░реНрдпрднрд╛рд░ рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг рдЧреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛, рдЬреЛ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд╕реНрдХреЗрд▓, рд╕реА # рдФрд░ рдЕрдиреНрдп рдиреЗ рддреНрд░реБрдЯрд┐ рдХреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ ... рдЧреЛ 2 рдкреНрд░рд╕реНрддрд╛рд╡ рдареАрдХ рджрд┐рдЦрддрд╛ рд╣реИ рдпрджрд┐ рдЗрд╕рдореЗрдВ рдкрд╣рд▓реЗ (рдЕрдирд┐рд╢реНрдЪрд┐рдд) рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдХреЗрд╕ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╣реИред

рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рд╣реИред рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЛ рдореЙрдбрд▓рд┐рдВрдЧ рдХрд░рдирд╛ (рдЪрд╛рд╣реЗ рд╡рд╣ рдХрд┐рддрдирд╛ рднреА рдЬрдЯрд┐рд▓ рдХреНрдпреЛрдВ рди рд╣реЛ) рдЗрд╕ рддрд░реНрдХ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдЕрдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╣рдореЗрд╢рд╛ рд╕рд░рд▓ рд╣реЛрддрд╛ рд╣реИред рдмрд╕ рдПрдХ рддреНрд░реБрдЯрд┐ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдирд╛ рдПрдХ рдХреЛрдб рдЧрдВрдз рд╣реИред рдХрд╛рд╢, рдЧреЛ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд▓реЗрдХрд┐рди рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдкреИрдЯрд░реНрди рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрддрд╛ рд╣реИред рд╢реБрд░реБрдЖрддреА рдЕрдХреНрд╕рд░ рдЗрд╕ рд╕рднреА рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛрдб рд╕реЗ рднреНрд░рдорд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреЗрдВрджреНрд░реАрдп рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреИрд╕рд╛ рд╣реИред

рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ try рдмрд┐рд▓реНрдЯрд┐рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдФрд░ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рднреА рдЙрдирдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

try рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ:

_, err := doSomething()
if err != nil {
    return nil, errors.Wrap(err, "failed to do something")
}

_, err = doOtherThing()
if err != nil {
  return nil, errors.Wrap("failed to do the other thing")
}

рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ try рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред

рдЪреВрдВрдХрд┐ try рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЛрд╖реНрдардХ рдореЗрдВ рдЕрдкрдиреЗ рддрд░реНрдХ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░рдХреЗ 1-рддрд░реНрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рддрд░рд╣ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рджреВрд╕рд░рд╛ рддрд░реНрдХ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рддреНрд░реБрдЯрд┐ рд░реИрдкрд┐рдВрдЧ рдХреЛрдб рд╣реИред

try(extract_value(try(get_data(1), errors.Wrap(err, "failed to get data")), errors.Wrap(err, "failed to get data")))

рдЬрд╣рд╛рдВ err рдореВрд▓реНрдп рдХреЛ рдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рдкреЗрд╢ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдПрдХ рд╕реНрд╡рдЪреНрдЫ рддрд░реАрдХреЗ рд╕реЗ)ред рдлрд┐рд░ рдпрджрд┐ try рдХреЛ 1-рддрд░реНрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдЕрдкрдиреА рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рджреЗрдЧрд╛ред

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ, рдХреЗрд╡рд▓ "рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЪреАрдиреА" рдЪреАрдЬ рдЬреЛ рддреНрд░реБрдЯрд┐ рдХреЛ рдереЛрдбрд╝рд╛ рдЖрд╕рд╛рди рдмрдирд╛ рд╕рдХрддреА рд╣реИ, рд╣рдореЗрдВ рдирд┐рдореНрди рдХреА рддрд░рд╣ рдХреБрдЫ рдХрд░рдиреЗ рджреЗ рд░рд╣реА рд╣реИ рдЬрдм рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдХрдИ рд░рд┐рдЯрд░реНрди рд╣реЛрддреЗ рд╣реИрдВ ... рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЗрд╡рд▓ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╣реЛрдВрдЧреЗ

if err != nil {
    return _, _, err
}

@sorenvonsarvort рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЙрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛:

var errContext string 

defer func() {
  // err is a named return
  if err != nil {
    err = fmt.Errorf("%v: %w", errContext, err)
  }
}()

errContext = "failed to do something"
_ := try(doSomething())

errContext = "failed to do other thing"
_ := try(doOtherThing())

рдореЗрд░реА рд╕рдордЭ рд╕реЗ, рдЖрдк рдЕрднреА рднреА if err != nil { ... } рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдпрд╣ рдХреЛрдб рдХреЗ рдЙрд╕ рд╡рд┐рд╢реЗрд╖ рдЦрдВрдб рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд╣реИред

try рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЪрдордХрддрд╛ рд╣реИред рдХреБрдЫ рдФрд░ рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП:

func trySomeComplexOp() (r result, err error) {
  a := try(step1())
  b := try(step2(a))
  c, d := try(step3(b))
  return try(lastStep(c, d)), nil
}

рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдЬреИрд╕рд╛ рдХреЛрдб рдЖрдкрдХреЛ if err != nil рдмреНрд▓реЙрдХ рдореЗрдВ рдЫрд┐рдбрд╝рдХрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рдл рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЧреЛ "рд░реИрдЦрд┐рдХ рдкрдардиреАрдпрддрд╛" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ try рдЙрд╕ рдЫреЛрд░ рдХреА рдУрд░ рдЕрдЪреНрдЫрд╛ рдХрд░рддрд╛ рд╣реИред

рдЕрдзрд┐рдХ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди (рд╡рд╛рд░реНрд╖рд┐рдХ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рд╕реЗ) рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╡рд╛рд▓реА рднрд╛рд░реА рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдереАред рдЧреЛ рдЯреАрдо рдЕрдм рдЙрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░ рд░рд╣реА рд╣реИред

рдпрд╣ рдПрдХ рдореБрдЦрд░ рдЕрд▓реНрдкрд╕рдВрдЦреНрдпрдХ рд╣реИ рдФрд░ рдореИрдВ рд╢рд░реНрдд рд▓рдЧрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЧреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

@sirkon рдЖрдк рдЙрд╕ рдХрдерди рдХреЛ рдХрд┐рд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

@sorenvonsarvort рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЙрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛:

рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдЬреИрд╕рд╛ рдХреЛрдб рдЖрдкрдХреЛ if err != nil рдмреНрд▓реЙрдХ рдореЗрдВ рдЫрд┐рдбрд╝рдХрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рдл рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЧреЛ "рд░реИрдЦрд┐рдХ рдкрдардиреАрдпрддрд╛" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ try рдЙрд╕ рдЫреЛрд░ рдХреА рдУрд░ рдЕрдЪреНрдЫрд╛ рдХрд░рддрд╛ рд╣реИред

рд░реВрд╕ рдореЗрдВ рд╣рдо рдЗрд╕реЗ ┬л╤Н╨║╨╛╨╜╨╛╨╝╨╕╤П ╨╜╨░ ╤Б╨┐╨╕╤З╨║╨░╤Е┬╗ рдХрд╣рддреЗ рд╣реИрдВред рдЕрд░реНрде рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Google рдЕрдиреБрд╡рд╛рдж рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВред

рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рдирд╣реАрдВ рд╣реИрдВ, рдореИрдВ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдореВрд▓ try рдкреНрд░рд╕реНрддрд╛рд╡ рдореБрджреНрджреЗ рдкрд░ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреВрдВрдЧрд╛ред рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рддреНрд░реБрдЯрд┐ рд╕рдВрджрд░реНрдн рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ try рд╕рд╛рде рдХреИрд╕реЗ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧреЛ рд╕рдореБрджрд╛рдп рдореЗрдВ рд╢рд╛рдпрдж рддреНрд░реБрдЯрд┐ рд╕рдВрджрд░реНрдн рдереЛрдбрд╝рд╛ рд╣рдардзрд░реНрдореА рд╣реЛ рдЧрдпрд╛ рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЧрд┐рд░ рдЧрдпрд╛ рд╣реВрдВ рдФрд░ рдЕрдкрдиреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рдВрджреЗрд╢ рдмрд╣реБрдд рд▓рдВрдмреЗ, рджреЛрд╣рд░рд╛рд╡ рд╡рд╛рд▓реЗ рдФрд░ рдкрдврд╝рдиреЗ рдореЗрдВ рдХрдард┐рди рд╣реИрдВред рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╕рдВрджрд░реНрдн рдХрдм рджреЗрдирд╛ рд╣реИ рдФрд░ рдХрдм рдирд╣реАрдВ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВред

рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ рдХрд┐ try рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╢реЙрд░реНрдЯрдХрдЯ рд╣реИ рдФрд░ рдХреБрдЫ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЦреЛ рджреЗрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдирд┐рдореНрди рдкрд░рд┐рд╡рд░реНрддрди рдЗрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

f := try(os.Open(filename))

рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ

f := try(os.Open(filename), "open data file")

рдмреЗрд╢рдХ, рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ err != nil рдЪреЗрдХ рдХрд░рдиреЗ рдХрд╛ "рдкреВрд░реНрдг" рддрд░реАрдХрд╛ рдЕрднреА рднреА рдЙрдкрд▓рдмреНрдз рд╣реИред

рдореИрдВ рдЗрд╕рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдВрддрд┐рдо рд░рд╛рдп рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдЕрдиреБрднрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреЛ рдЯреАрдо рдХреЗ рдЕрдиреБрд░реЛрдз рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред

рд▓реЗрдХрд┐рди рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рдореЗрд░рд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрдиреБрднрд╡ рдЗрд╕ рдмрд╛рдд рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ 2 "рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛" рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рд▓рдЧрднрдЧ 10k рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ рдФрд░ рджреЛрдиреЛрдВ рдкрд░ рдЪрд▓ рд░рд╣реЗ рдЯреНрд░рд╛рдЗрд╣рд╛рд░реНрдб рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЗрд╕ рдмрджрд▓рд╛рд╡ рд╕реЗ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдпрд╣ рдЗрд╕ рддрдереНрдп рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рд╣рдореЗрд╢рд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдЧреЛ рдореЗрдВ рдЕрдиреНрдп рдЫреЛрдЯреЗ "рдЦрд┐рд▓реМрдирд╛" рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИрдВ рдФрд░ tryhard рдХреЛ 1 рдорд╛рдорд▓рд╛ рдорд┐рд▓рд╛ рдЬрд╣рд╛рдВ рдореИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ try рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдмрд╕ рдЗрддрдирд╛ рд╣реАред

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдиреНрдп рд▓реЛрдЧ рдореБрдЭрд╕реЗ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореИрдВ рдЗрд╕ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ try рд╕рдХрд╛рд░рд╛рддреНрдордХ рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред tryhard рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ return err рд▓рдЧрд╛рддрд╛рд░ рдХреБрдЫ рдорд╛рдорд▓реЗ рд╣реИрдВ, рдХрд┐ рдЕрдЧрд░ рдЗрд╕реЗ try рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛, рддреЛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╕реБрдЧрдорддрд╛ рд╕реЗ рдЗрддрдирд╛ рд╕рдордЭреМрддрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рд┐рд░реНрдл рджреБрд░реБрдкрдпреЛрдЧ рдХрд╛ рдбрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдкрдардиреАрдпрддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдВрдЧреЗред рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдФрд░ рдлрд┐рд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдХрд┐ рдХреНрдпрд╛ рдЕрдЪреНрдЫрд╛ рдЙрдкрдпреЛрдЧ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдПрдХ рдкреВрд░реА рдХрд╣рд╛рдиреА рд╣реЛрдЧреАред

рд╕рд╛рде рд╣реА, рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ рдХрд┐ рд▓реЛрдЧ рдЖрдорддреМрд░ рдкрд░ рдЧреЛ рдХреЛрдб рдХреИрд╕реЗ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рд╡реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрд╡рдпрдВ рди рдХрд░реЗрдВред рдЗрд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ try рдХрд╛ рдЬрд╛рджреВ рд╕реАрдЦрдирд╛ рд╣реЛрдЧрд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдиреНрдп try рддреБрд▓рдирд╛ рдореЗрдВ рдЕрд▓рдЧ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рджреЗрдЦрд╛ рд╣реИред рдпрд╣ рднрд╛рд╖рд╛ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдирдП рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рд╕рдЪ рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдЙрд╕ рднрд╛рд╖рд╛ рдореЗрдВ рд╕реАрдЦрдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ "рдмрд╕ рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ" рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рд╣реЛрдиреЗ рдкрд░ рдЧрд░реНрд╡ рдХрд░рддреА рд╣реИред

рдЪрд▓реЛ рдЗрдиреНрддреЗрдЬрд╛рд░ рдХрд░рдХреЗ рджреЗрдЦрддреЗ рд╣реИред рдореИрдВ рдЗрд╕ рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░рдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдЗрд╕рд╕реЗ рдореЗрд░реА рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рдЬрд╛рдПрдЧреАред

рдЕрдзрд┐рдХ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди (рд╡рд╛рд░реНрд╖рд┐рдХ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рд╕реЗ) рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╡рд╛рд▓реА рднрд╛рд░реА рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдереАред рдЧреЛ рдЯреАрдо рдЕрдм рдЙрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░ рд░рд╣реА рд╣реИред

@icholy рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рдХрд╣рд╛, рдореИрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред рдЙрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореЗрд░реЗ рд▓рд┐рдП "рдЕрдзрд┐рдХ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди" рдХрд╛ рдЕрд░реНрде рдЙрд╕ рд╕рдВрджрд░реНрдн рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдФрд░ рдЙрд╕рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрдкрдиреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рд╕рднреА рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд╕рд╛рде "рд╕рдВрджрд░реНрдн" рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рддреНрд░реБрдЯрд┐ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рдХрд╛рд░рдг рд╣реБрдИ рдереАред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ pkg/error , рдЕрдкрдиреА рдЦреБрдж рдХреА "рддреНрд░реБрдЯрд┐ рд╕рдВрд░рдЪрдирд╛рдПрдВ" рдмрдирд╛рдПрдВ рдФрд░/рдпрд╛ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдмрдирд╛рдПрдВ рдЬреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЦреЛрдЬреЛрдВ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдХреБрдЫ рдРрд╕рд╛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдореБрдЭреЗ рдЙрди рдЪреАрдЬреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреВрд░реА рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рд╕реЗ рдмрдЪрд╛рдПрдЧрд╛ рдЬреЛ рдореБрдЭреЗ рдХрднреА-рдХрднреА рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ if рдмрдЪрд╛рддреЗ рд╣реИрдВред рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпрд╛ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ "рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди" рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдореВрд▓ рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ?

рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ try рдЬрдЯрд┐рд▓ рд╣реИ?

рдЕрд▓рдЧрд╛рд╡ рдореЗрдВ try рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рднрд╛рд╖рд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЕрд▓рдЧрд╛рд╡ рдореЗрдВ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛:

  • рдПрдХ рдирдП рдмрд┐рд▓рд┐рди рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рд╕реАрдЦрдиреЗ рд╕реЗ рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рднрд╛рд░ рдореЗрдВ рд╡реГрджреНрдзрд┐
  • try рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рдкрдардиреАрдпрддрд╛ рдореЗрдВ рдХрдореА рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрдо рд╣реИ, рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп if err != nil {return ... errors.Wrap() } рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛

рдореИрдВ рдЙрдкрд░реЛрдХреНрдд рднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рддрд░реАрдХреЗ рд╕реЗ рд╕рд░рд▓рддрд╛ (рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╣реА рддрд░реАрдХрд╛ рд╣реИ) рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдЙрд╕ рд╡реИрд╢реНрд╡рд┐рдХ рдмрдпрд╛рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рд╕реА рдЧрд▓рддреА рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЕрдЧрд░ рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ рддреЛ рдЖрддрдВрдХ рдХреА рд╕реНрдерд┐рддрд┐ рдХреИрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ ?? рдореИрдВ рдПрдХ рдмреЗрд╣рддрд░ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХрд░реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░рддрд┐рдорд╛рди рдЖрдЬ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЕрдирджреЗрдЦрд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

рдореБрдЭреЗ try рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣реА рд╣реИ?
рдпрджрд┐ рдЖрдк рдкреБрд░рд╛рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдкреБрд░рд╛рдиреЗ рддрд░реАрдХреЗ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ? рдХреЛрдИ рднреА рдЖрдкрдХреА рдЧрд░реНрджрди рдкрд░ рдЪрд╛рдХреВ рдЪрд┐рдкрдХрд╛рдХрд░ рдирд╣реАрдВ рджрдмрд╛рддрд╛ рд╣реИ рдЖрдк try рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ?
try рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рд░рд▓ рд╣реИ, рдФрд░ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕реБрдВрджрд░ рддрд░реАрдХрд╛ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЧреЛрдлрд░ рдХреЛ рд╕реИрдбрд┐рдЬреНрдо-рд╡реЗ рдХреНрдпреЛрдВ рдкрд╕рдВрдж рд╣реИ?

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ gofmt рдХреЛ рдЗрд╕ рддрд░рд╣ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдП рдХрд┐ рдПрдХ-рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдЕрдЧрд░ рдмреНрд▓реЙрдХ рдПрдХ рд▓рд╛рдЗрди рдкрд░ рд░рд╣реЗ?

рдЗрд╕ рддрд░рд╣, рд╣рдо рд░реИрдкреНрдб рдПрд░рд░ рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рддреАрди рдХреЗ рдмрдЬрд╛рдп рдХреЗрд╡рд▓ рдПрдХ рд▓рд╛рдЗрди рд▓реЗ рд╕рдХрддреЗ рдереЗред рдпрд╣ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рджреНрд╡рд╛рд░рд╛ рдЙрдард╛рдП рдЧрдП рд▓рдВрдмрд╡рдд рд╕реНрдерд╛рди рдХреЛ рдХрдо рдХрд░реЗрдЧрд╛ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдФрд╕рдд рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЖрдзреЗ рд╕реЗ рдЕрдзрд┐рдХ рд▓рдВрдмрд╡рдд рд╕реНрдерд╛рди рдирд╣реАрдВ рд▓реЗ рд░рд╣рд╛ рд╣реИред

рдпрд╣рд╛рдБ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:

// we already have an err in scope
err = frub.Confozzle(foo, bar, baz)
if err != nil { return errors.Wrap(err, "confozzling didn't work") }

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧреЛ рд╕рдореБрджрд╛рдп рдореЗрдВ рд╢рд╛рдпрдж рддреНрд░реБрдЯрд┐ рд╕рдВрджрд░реНрдн рдереЛрдбрд╝рд╛ рд╣рдардзрд░реНрдореА рд╣реЛ рдЧрдпрд╛ рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЧрд┐рд░ рдЧрдпрд╛ рд╣реВрдВ рдФрд░ рдЕрдкрдиреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рдВрджреЗрд╢ рдмрд╣реБрдд рд▓рдВрдмреЗ, рджреЛрд╣рд░рд╛рд╡ рд╡рд╛рд▓реЗ рдФрд░ рдкрдврд╝рдиреЗ рдореЗрдВ рдХрдард┐рди рд╣реИрдВред рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╕рдВрджрд░реНрдн рдХрдм рджреЗрдирд╛ рд╣реИ рдФрд░ рдХрдм рдирд╣реАрдВ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВред

рддреНрд░реБрдЯрд┐ рд░реИрдкрд┐рдВрдЧ рдФрд░ рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо/рддреНрд░реБрдЯрд┐ рдореБрджреНрд░рдг рд╕рд╛рдордЧреНрд░реА рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реАрдзреЗ рдЖрдЧреЗ рдмрдврд╝реЗрдЧреАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдордп рдкрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрднреА рдирд╣реАрдВред

рдореИрдВ рдЗрд╕реЗ рдРрд╕реЗ рд╣реА рдЫреЛрдбрд╝рдиреЗ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реВрдВред рдпрд╣ рдереЛрдбрд╝рд╛ рдмрд╣реБрдд рд╡рд░реНрдмреЛрдЬрд╝ рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реАрдзрд╛ рд╣реИред

рдЕрдЧрд░ рдореИрдВ рдмрд╕ рдХрдо рдХрд░ рд╕рдХрддрд╛

if err := foo.x(a, b); err != nil {
    return err
}

if err := foo.y(); err != nil {
    return err
}

if err := foo.z(c); err != nil {
    return err
}

рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

if err := check foo.x(a, b), foo.y(), foo.z(c); err != nil {
    return err
}

рд╢рд╛рдпрдж рдореБрд╣рд╛рд╡рд░реЗ рдХреЛ рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ IMHO рдмрджрд▓реЗ рдмрд┐рдирд╛ рднреА рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

@henvic рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдорд╛рди рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЖрдк рддреАрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЧреЛ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рддреНрд░реБрдЯрд┐ рдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред рдЕрд▓рдЧ рддреНрд░реБрдЯрд┐ рдЬрд╛рдБрдЪ рд╣реЛрдиреЗ рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдПрдХ рдореЗрдВ рдПрдХрддреНрд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рджреЗрд╡ рдХреЛ рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╡рд╛рдкрд╕ рдЬрд╛рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдЬрд╛рдВрдЪрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдХреНрдпрд╛ рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ _рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рд╣рдо рдХреБрдЫ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реНрдЯреНрд░реЛрдХ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯрддрд╛ рдЦреЛ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдкрд░ рдордЬрдмреВрд░ рдХрд░ рджреЗрддреЗ рд╣реИрдВред

@sanbornm , рддреБрдо рд╕рд╣реА рд╣реЛред рдореИрдВ рд╕рд╣рдордд рд╣реВрдВред

рдпрд╣ check рднреА рдПрдХ checkNonZero рдСрдкрд░реЗрдЯрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдПрдХ рд╡рд╛рдкрд╕реА рддрд░реНрдХ рд▓реЗрдЧрд╛ рдФрд░ рдкрд╣рд▓реЗ рдЧреИрд░-рд╢реВрдиреНрдп рдорд╛рди (рдЬреИрд╕реЗ рд╢реВрдиреНрдп) рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЕрд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдФрд░ рднрд╛рд╖рд╛ рдХреЛ рдФрд░ рднреА рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╕рдВрдХреЗрдд рджреЗрдЧрд╛ рдХрд┐ рдпрджрд┐ рдЖрдк рдЙрдореНрдореАрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ io.EOF рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдФрд░ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реЛрдЧреА, рд╢рд╛рдпрдж, go vet рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдЖрдо рдорд╛рдорд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдПрдВ (рдЬреИрд╕реЗ io.EOF рдкрд╛рдЗрдк рд╕реЗ рдкрдврд╝рддреЗ рд╕рдордп) ... рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рд╕рдм рдореБрдЭреЗред

рдореБрдЭреЗ try рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣реА рд╣реИ?
рдпрджрд┐ рдЖрдк рдкреБрд░рд╛рдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдкреБрд░рд╛рдиреЗ рддрд░реАрдХреЗ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ? рдХреЛрдИ рднреА рдЖрдкрдХреА рдЧрд░реНрджрди рдкрд░ рдЪрд╛рдХреВ рдЪрд┐рдкрдХрд╛рдХрд░ рдирд╣реАрдВ рджрдмрд╛рддрд╛ рд╣реИ рдЖрдк try рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ?
try рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рд░рд▓ рд╣реИ, рдФрд░ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕реБрдВрджрд░ рддрд░реАрдХрд╛ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЧреЛрдлрд░ рдХреЛ рд╕реИрдбрд┐рдЬреНрдо-рд╡реЗ рдХреНрдпреЛрдВ рдкрд╕рдВрдж рд╣реИ?

рд╣рдо рд╕рдм рд╕рдореБрджрд╛рдп рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВред рд╣рд░ рджрд┐рди рдореИрдВ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП рднрд╛рд╖рд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдореБрдЭ рдкрд░ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝реЗрдЧрд╛, рднрд▓реЗ рд╣реА рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реВрдВред

рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд▓реЙрдЧ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рднреВрд▓ рдЧрдП рдХрд┐рд╕реА рдиреЗ рд▓рд┐рдЦрд╛ рдерд╛, рдЬреЛ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп new Exception() рдлреЗрдВрдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ "рдкреЛрдХреЗрдореЙрди" рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд░ рддрдХ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрдХрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддреНрд░реБрдЯрд┐ рд▓реЙрдЧ рдХреАред рджреВрд╕рд░рд╛ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╡рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрдЪреВрдХ рдХрдИ-рд╕реМ-рд▓рд╛рдЗрди рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХреЗ рд╕рд╛рде, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдВрддрддрдГ рдХрд╛рд░рдг рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ (рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рдХреЗрд╡рд▓ github.com/<us>/<ourproject> рдЦреЛрдЬ рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдмрд╣реБрдд рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИ)ред рдЙрдирдХреЗ рдирд╛рдо рдХреЗ рдмрд╛рд╡рдЬреВрдж, "рдЕрдкрд╡рд╛рдж" рдмрдбрд╝реА рдЬрд╛рд╡рд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЪрд┐рдВрддрд╛рдЬрдирдХ рд░реВрдк рд╕реЗ рдЕрд╕рд╛рдзрд╛рд░рдг рд╣реИрдВред

рдЗрд╕ рдмреАрдЪ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЬрдм рдмрд╣реБрдд рд╕рд╛рд░реЗ рдирд┐рд░рд░реНрдердХ рд╕рдВрджрд░реНрдн рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ "narf: Error unpoiting the zort: foo: Unexpected bar in baz: {\"ork\": \"morpork\"}" рдЬреИрд╕реЗ рд╕рд░рд▓ рдЧреЛ рддреНрд░реБрдЯрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ (рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ) рдЖрдорддреМрд░ рдкрд░ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдХрд╣реАрдВ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрджрд░реНрдн рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд╣рдирддреА рд░рд╣реЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддреНрд░реБрдЯрд┐ рдорд╛рдиред рдпрджрд┐ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрджрд░реНрдн рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ _рднреА_ рдЖрдорддреМрд░ рдкрд░ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд╣реИред рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ "рдлрд┐рдХреНрд╕" рдЕрдзрд┐рдХ рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ рдФрд░ рдПрдХ рдФрд░ рддреНрд░реБрдЯрд┐ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрддреБрд▓рди рдкрд░ рдореИрдВ рдЕрднреА рднреА рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдФрд░/рдпрд╛ рдореЗрд░реА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реВрдВ "рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП " рдпрд╛ "рдЙрдард╛рдПрдВ" рд╕рдордЭрджрд╛рд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдХреИрд╕реЗ рдирд╛рдо panic() рдЕрдзрд┐рдХрд╛рдВрд╢ рдЧреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЗрддрдиреА рдЙрджрд╛рд░рддрд╛рдкреВрд░реНрд╡рдХ рддреИрдирд╛рдд рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ рдЬреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рд╣реА рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛ рд╣реИред рдЖрдЗрдП error рдФрд░ panic рдХреЛ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рди рдмрдирд╛рдПрдВред

рдореИрдВрдиреЗ рдХрднреА-рдХрднреА рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рднрд╛рдЧ рд▓рд┐рдпрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдПрдХ рджрд░реНрдЬрди рдпрд╛ рддреЛ рд╡рд┐рдлрд▓рддрд╛ рдореЛрдб рдереЗ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рдпреЛрдЧреНрдп рдереЗред рджреЛрд╣рд░рд╛рд╡ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдорддреМрд░ рдкрд░ рдореЗрд░реА рдЯреАрдо рдореЗрдВ рдХреЛрдИ рдФрд░ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрди рд╕рд╛рдорд╛рдиреНрдп рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдХреЗ рд╕рдордЭреМрддрд╛ рдХрд░рддреЗ рд╣реИрдВред

func foo(a, b, c SomeArgType) (x, y, z SomeReturnType, err error) {
  handleError := func(handleErr error) (x, y, z SomeReturnType, err error) {
    log.WithFields(logrus.Fields{
      "package": "foo",
      "func": "foo",
      "arguments": map[string]SomeArgType{"a": a, "b": b, "c": c},
      "error": handleErr,
    }).Error("Error fooing the bar")
    return reasonable, default, values, handleErr
  }

  err := doABunchOfThings()
  if err != nil {
    return handleError(err)
  }
}

рдЬреЛ, рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреБрдЫ рдорд╛рдпрдиреЛрдВ рдореЗрдВ _рдЕрднреА рднреА рдПрдХ рдЕрдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛ рдХрд┐ foo рдХрдм рдФрд░ рдХреНрдпрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдЫрд▓рддрд╛ рд╣реИред

рдпрджрд┐ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдпрд╣ рджреЛрд╣рд░рд╛рд╡ "рд╕рдорд╕реНрдпрд╛" рдХрдИ рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рдмреЗрд╣рдж рдЖрдо рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдВ) рдПрдХ рдЗрд░реЗрдбреНрдпреВрд╕реАрдмрд▓-рдЬрдЯрд┐рд▓ рдкреИрдХреЗрдЬ рдореЗрдВ рдХреБрдЫ рд╣рдж рддрдХ рдЗрд░реЗрдбреНрдпреВрд╕реАрдмрд▓-рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпреЛрдВ рддрдХ рд╣реА рд╕реАрдорд┐рдд рд╣реИ, рддреЛ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ-рд╡реНрдпрд╛рдкреА "рдлрд╝рдВрдХреНрдЯрд░" рд╢рд╛рдпрдж рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рдЕрдВрдд, рдФрд░ (рдЖрд╣реЗрдВ) рдпрджрд┐ рдкреИрд░рд╛рдореАрдЯреНрд░рд┐рдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рднрд╛рд╖рд╛ рдореЗрдВ рдЬреБрдбрд╝рддреА рдЬрд╛ рд░рд╣реА рд╣реИ, рддреЛ рдЖрдк рдХреЛрд╢рд┐рд╢/рдкрдХрдбрд╝ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд┐рдП рдмрд┐рдирд╛ рддреНрд░реБрдЯрд┐-рд╣реИрдВрдбрд▓рд┐рдВрдЧ-рдлреИрдХреНрдЯреНрд░реА-рдлреИрдХреНрдЯреНрд░реА рдХреЗ рдкреАрдЫреЗ рдФрд░ рднреА рд╡рд┐рд╡рд░рдг рдЫреБрдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

@ рдереЙрдорд╕рдл

рддреНрд░реБрдЯрд┐ рд░реИрдкрд┐рдВрдЧ рдФрд░ рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо/рддреНрд░реБрдЯрд┐ рдореБрджреНрд░рдг рд╕рд╛рдордЧреНрд░реА рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реАрдзреЗ рдЖрдЧреЗ рдмрдврд╝реЗрдЧреА

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА go2 рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдкреИрд░рд╛рдореАрдЯреНрд░рд┐рдХ рдмрд╣реБрд░реВрдкрддрд╛ рдХрд╛ рдирд┐рдкрдЯрд╛рд░рд╛ рди рд╣реЛ рдЬрд╛рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╛рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рддреЗ рд╕рдордп рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореВрд▓ try рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдиреЗ рдЬреЗрдирд░рд┐рдХ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ рднреА рдЪрд░реНрдЪрд╛ рдХреА, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдкреИрд░рд╛рдореАрдЯреНрд░рд┐рдХ рдмрд╣реБрд░реВрдкрддрд╛ try рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдЕрд▓рдЧ рдмрдирд╛ рджреЗрдЧрд╛ред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЙрд╕ рд╕реАрдорд╛ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рднрд╛рд╖рд╛ рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@рдЗрдЪреЛрд▓реА

рдЕрдзрд┐рдХ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди (рд╡рд╛рд░реНрд╖рд┐рдХ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рд╕реЗ) рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╡рд╛рд▓реА рднрд╛рд░реА рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдереАред рдЧреЛ рдЯреАрдо рдЕрдм рдЙрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░ рд░рд╣реА рд╣реИред

рдмрд╕ рдЗрд╕рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП; рдмреНрд░рд┐рдЯреЗрди рдореЗрдВ рднреА рдмреНрд░реЗрдХреНрд╕рд┐рдЯ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдмрд╣реБрдордд рдерд╛ред рдЬрд╝рд░реВрд░, рдпреВрд░реЛрдкреАрдп рд╕рдВрдШ рдХреБрдЫ рдиреБрдХрд╕рд╛рди рднреА рд▓рд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЖрдо рдЬрдирддрд╛ рдиреЗ рдЬрд╡рд╛рдм рджрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рдмрд╛рд░ рдЬрдм рд╕рднреА рд╡рд┐рдХрд▓реНрдк рд╕рд╛рдордиреЗ рдЖ рдЧрдП, рддреЛ рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпреВрд░реЛрдкреАрдп рд╕рдВрдШ рдореЗрдВ рд░рд╣рдирд╛ рдЗрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЕрдм рдЗрд╕рдХрд╛ рд░рд╛рдЬрдиреАрддрд┐рдХрд░рдг рдХрд░рдиреЗ рдХрд╛ рдореЗрд░рд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЖрдк рдЙрдкрд░реЛрдХреНрдд рд╕реЗ рдЕрд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдХрд╣рдиреЗ рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдмрд╣реБрдордд рд╢реБрд░реВ рдореЗрдВ рдХрд┐рд╕реА рдЪреАрдЬ рдХреЛ рдЙрдкрджреНрд░рд╡ рдорд╛рдирддрд╛ рд╣реИ, рддрдм рднреА рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдЬрд╛рдВрдЪ рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░рд╛ рджреГрдврд╝ рдордд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЪреАрдЬреЛрдВ рдХреЛ рд╡реИрд╕реЗ рд╣реА рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рддрд░реНрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╡реЗ рд╣реИрдВред

рдПрдХ рдкреЗрд╢реЗрд╡рд░ рдХреЛрдбрд┐рдВрдЧ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ, рд╣рдо рдЯреНрд░реЗрд╕рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдПрдиреЛрдЯреЗрдЯ рдХрд░рдиреЗ рдФрд░ рд▓реЙрдЧ рдХреЛ рд╕рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдкреНрд░рдерд╛рдУрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреЗ рд╣реИрдВред рдПрдХ рддрд░рдл рдХреЗ рд░реВрдк рдореЗрдВ, рдирд┐рд╣рд┐рдд рд╡рд╛рдкрд╕реА рдПрдХ рдирд┐рд░реНрдпрд╛рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдЖрддрдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рддрд░рд╣ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рддрддреНрдХрд╛рд▓ рдкреНрд░рд╡рд╛рд╣-рдирд┐рдпрдВрддреНрд░рдг рдкрдардиреАрдпрддрд╛ рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред

@рдЗрдЪреЛрд▓реА

рдЕрдзрд┐рдХ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди (рд╡рд╛рд░реНрд╖рд┐рдХ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рд╕реЗ) рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╡рд╛рд▓реА рднрд╛рд░реА рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдереАред рдЧреЛ рдЯреАрдо рдЕрдм рдЙрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░ рд░рд╣реА рд╣реИред

рдмрд╕ рдЗрд╕рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП; рдмреНрд░рд┐рдЯреЗрди рдореЗрдВ рднреА рдмреНрд░реЗрдХреНрд╕рд┐рдЯ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдмрд╣реБрдордд рдерд╛ред рдЬрд╝рд░реВрд░, рдпреВрд░реЛрдкреАрдп рд╕рдВрдШ рдХреБрдЫ рдиреБрдХрд╕рд╛рди рднреА рд▓рд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЖрдо рдЬрдирддрд╛ рдиреЗ рдЬрд╡рд╛рдм рджрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрдХ рдмрд╛рд░ рдЬрдм рд╕рднреА рд╡рд┐рдХрд▓реНрдк рд╕рд╛рдордиреЗ рдЖ рдЧрдП, рддреЛ рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпреВрд░реЛрдкреАрдп рд╕рдВрдШ рдореЗрдВ рд░рд╣рдирд╛ рдЗрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЖрдкрдХреЛ рдЗрд╕ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рджрд╛рд╡реЗ рдкрд░ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ: рдЗрдореЛрдЬреА рдХреА рдЧрд┐рдирддреА рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд▓реЛрдЧ рдЖрдорддреМрд░ рдкрд░ try рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡реЗ рдЖрдо рддреМрд░ рдкрд░ рдЗрд╕реЗ "рдЗрд╕реЗ рд╡реИрд╕реЗ рд╣реА рд░рд╣рдиреЗ рджреЗрдВ" рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред

рдореЗрд░реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдкреАрдПрд╕, рдЬреЛ рд▓реЛрдЧ рдЗрд╕рдХреЗ рдореБрдЦреНрдп рдбреЛрдореЗрди (рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗрд╡рд╛рдУрдВ, рд╕реАрдПрд▓рдЖрдИ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ) рдореЗрдВ рдЧреЛ рдХреЛ рдирд╛рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрдирдХреА рд░рд╛рдп рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред

рд╣рдореЗрдВ try рдкреНрд░рд╕реНрддрд╛рд╡ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмреЗрд╣рддрд░, рдХрдо рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж, рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдореБрдЭреЗ рдЬрд▓реНрджрдмрд╛рдЬреА рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рджрд┐рдЦрддреАред

@velovix рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреЛрд╢рд┐рд╢/рдкрдХрдбрд╝ рддреНрд░реБрдЯрд┐ "рд╣реИрдВрдбрд▓рд┐рдВрдЧ" рд╕реЗ рдЕрдзрд┐рдХ рдкреИрд░рд╛рдореАрдЯреНрд░рд┐рдХ рдмрд╣реБрд░реВрдкрддрд╛ рд╕реЗ рдирдлрд░рдд рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рдПрдХ рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛ рдмрди рдЬрд╛рддреА рд╣реИ, рддреЛ рдореИрдВ рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдЗрд╕реЗ рдПрдХ рдФрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рджреВрд░ рдХрд░ рджреЗрдЧрд╛ред

рдПрдХ рдмрд╛рдд рдХреЗ рд▓рд┐рдП, рдЬрдм рд▓реЛрдЧ рдЬрд┐рд╕ рдХреЛрдб рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рд╣реИ рдЬреИрд╕реЗ:

foo, err := Foo()
if err != nil {
  log(err)
}
bar, err := Bar(foo)
if err != nil {
  log(err)
}
// ...

рдлрд┐рд░ рдкреИрд░рд╛рдореАрдЯреНрд░рд┐рдХ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдХреБрдЫ рд╕рдВрдпреЛрдЬрди, рдЕрдиреБрдорд╛рди рдЯрд╛рдЗрдк рдХрд░реЗрдВ, рдФрд░ _maybe_ рдпрд╛ _Optional_ рд╕реНрдЯрд╛рдЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдЕрдЬреАрдм рдЧреИрд░-рд░реИрдЦрд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓рд┐рдП рдмрд┐рдирд╛ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛ рд╕реАрдзреЗ (рд╣реЗ) рдХрдо рдХрд░ рджреЗрдВрдЧреЗ:

func<T> DoWithErrorLogging(f func(any...) (T, error), args... any) T {
  t, err := f(args...)
  if err != nil {
    log(err)
  }
  return t
}
// ...
foo := DoWithErrorLogging(Foo)
bar := DoWithErrorLogging(Bar, foo)

рдЖрдИрдПрдордУ рдпрд╣ рд╕рдм рдЧреЛ 1 рд╕реЗ рдХрд╣реАрдВ рдЬреНрдпрд╛рджрд╛ рдЦрд░рд╛рдм рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рднрд╛рд╖рд╛ рдореЗрдВ рдпрд╣ _plus_ рдХреЛрд╢рд┐рд╢/рдкрдХрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдХреАрд╡рд░реНрдб рд░рдЦрдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред

рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ... рдЬреИрд╕рд╛ рдХрд┐ рдЪреАрдЬреЗрдВ рдЕрднреА рдЦрдбрд╝реА рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Go2 рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╕рдВрджреАрджрд╛ "рдмреНрд░реЗрдХрд┐рдВрдЧ" рдкрд░рд┐рд╡рд░реНрддрди Go1 рдореЗрдВ рд╕рднреА рдЫреЛрдЯреА рдЕрд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдареАрдХ рдХрд░ рджреЗрдВрдЧреЗ, рдЬреИрд╕реЗ рдХрд┐ net/http рдбрд┐рдлреЙрд▓реНрдЯреНрд╕ рдореНрдпреВрдЯреЗрдмрд▓ рд╢реЗрдпрд░реНрдб рдЧреНрд▓реЛрдмрд▓реНрд╕ рд╣реИрдВ рдЬреЛ рдореНрдпреВрдЯреЗрдмрд▓ рд╢реЗрдпрд░реНрдб рдЧреНрд▓реЛрдмрд▓реНрд╕ рдХреЗ рдЕрдВрджрд░ рдиреЗрд╕реНрдЯреЗрдб рд╣реИрдВ (рдмрд╕ рд╣рд╛рд╢рд┐рдХреЙрд░реНрдк рдХреЗ cleanhttp рдорд╛рдирдХ, рдореВрд▓ рд░реВрдк рд╕реЗ), рдпрд╛ (*time.Timer).Reset() рдХреЛ рдПрдХ рдмреЗрдХрд╛рд░ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдмрдирд╛рдПрдВ , рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЛ рдЕрднреА рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛

рдореИрдВ try ... рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВ рдЬрдм рд╕рдВрдпрдо рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд▓реЛрдХрдкреНрд░рд┐рдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдкреНрд░рдпрд╛рд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реЛрдиреЗ рдкрд░ рджрд┐рд╢рд╛рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝ рджреЗрдВрдЧреА, рдФрд░ рдЫреЛрдЯреА/рдирдИ/рдПрдХрд▓-рд╡реНрдпрдХреНрддрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдХрднреА-рдХрднреА рдЦрд░рд╛рдм рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдЧреНрд░рд╕реНрдд рд╣реЛрдВрдЧреА - рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЙрдкрдпреЛрдЧ рдХреА рдХрдореА - try рдмрд╣реБрдд рдмрд╛рд░ рдЖрдИрдПрдирдЬреАред рд╡реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рдорд░ рдЬрд╛рдПрдВрдЧреА рдпрд╛ рддрдп рд╣реЛ рдЬрд╛рдПрдВрдЧреА рдпрд╛ рдлреЛрд░реНрдХ рд╣реЛ рдЬрд╛рдПрдВрдЧреАред

рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднрд╛рд╖рд╛ рдореЗрдВ рдЗрддрдирд╛ рднрдпрд╛рдирдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП try рдХрд╛ рдЬреЛрдбрд╝ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рд▓реЛрдЧреЛрдВ рдХреА рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдХрд╛ рдбрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдиреБрднрд╡рд╣реАрди рд▓реЛрдЧ рдЗрд╕рдХрд╛ рдЕрдВрдзрд╛рдзреБрдВрдз рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬрдмрдХрд┐ рдЕрдиреНрдп рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рджреБрдирд┐рдпрд╛ рдХрд╛ рдЕрдВрдд рдирд╣реАрдВ рд╣реИред

рдпрджрд┐ try рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдореИрдВ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рд╡реЗ рдорд╛рдорд▓реЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЗрддрдиреА рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЕрд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдмрд┐рдВрджреБ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдореИрдВ рдмрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддрд╛ рд╣реВрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдореИрдВрдиреЗ рдЕрднреА рдПрдХ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдПрдХ рдбрд┐рд╕реНрдХ рднрд░рддрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ 1 рдЯреАрдмреА рд╣реИ, рддреЛ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ 1kb рдлрд╝рд╛рдЗрд▓ рдпрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рд╣реИред рдпрджрд┐ рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ - рдпрд╣ рдХрд╣реАрдВ рдФрд░ рдПрдХ рдмрдЧ, рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╡рд┐рдлрд▓рддрд╛, рдЖрджрд┐ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рд░ рдмреЗрд╣рдж-рдЕрд╕рдВрднрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐ рдХреЛ рдПрдиреЛрдЯреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ (..) рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╕рдордп рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдбрд░ рдХреЗ рджрд┐рдорд╛рдЧ рдХреЗ рдвреЗрд░ рдкрд░ рд╕рд┐рд░реНрдл рдПрдХ рдФрд░ рдЬреЛрдбрд╝реА рдХреЛрд╖реНрдардХ/рдХреЛрд╖реНрдардХ рдбрд╛рд▓ рд░рд╣рд╛ рд╣реИред рдФрд░ рд╕рдмрд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдореИрдВ рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ!

рддреЛ рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ:
рдорд╛рди, рддреНрд░реБрдЯрд┐: = рдлреВ ()
рдЕрдЧрд░ рдЧрд▓рддреА рд╣реБрдИ рд╣реИ рддреЛ рд╡рд╛рдкрд╕ рд▓реМрдЯреЗрдВ! = рд╢реВрдиреНрдп

рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдпрд╣ рдЗрддрдирд╛ рдЖрдо рд╣реИред рддреЛ рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдЕрдЧрд░ рд╢реНрд░реАрдорддреА рдЗрд╕ рддрд░рд╣ рдХрд┐рд╕реА рддрд░рд╣ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ:

рдорд╛рди, рддреНрд░реБрдЯрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ: = foo ()

рдпрджрд┐ рдЧреЛ рдПрдХ рдкрдардиреАрдп рднрд╛рд╖рд╛ рдмрдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рд╕реЛрдЪрдиреЗ рдпрд╛ рд╕рдордЭрдиреЗ рдореЗрдВ рдореБрд╢реНрдХрд┐рд▓ рд╕реЛрдЪрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдХрдо рд╕реЗ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рдЧреЛ рдЕрдЪреНрдЫреА рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрджрд░реНрдн рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдкрд░ рдЪрдврд╝рддреЗ рд╣реИрдВред рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП defer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рд▓рдЧрддреА рд╣реИред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдкрдХреЗ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИ? рдбрд┐рдлрд░реНрд╕ рдХреЛ рд╕реНрдЯреИрдХ рдСрд░реНрдбрд░ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпрд╛ рд╣рдореЗрдВ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд░рд┐рд╡рд░реНрд╕ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

рдЕрдЧрд░ рдмрдпрд╛рди рд╕реАрдзреЗ рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рдЬрдЧрд╣ рдЫреЛрдбрд╝ рджреЗрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ try рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдирд╛рдЗрдЯ рдХреЛ рд╣рд▓ рдХрд░ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд╕рдВрдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореВрдХ рдмрд╣реБрдордд рдХреЛ рдЗрди рдЬрдЯрд┐рд▓ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЗ рд╣рд░ рдкрд╣рд▓реВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭреЗ рдмрд┐рдирд╛ рдЕрдВрддрддрдГ рдПрдХ рдмрдпрд╛рди рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

@icholi рдХреГрдкрдпрд╛ рд╡рд┐рдирдореНрд░ рд░рд╣реЗрдВред рдХреГрдкрдпрд╛ рдЧреЛрдлрд░ рдЖрдЪрд╛рд░ рд╕рдВрд╣рд┐рддрд╛ рд╕реЗ рдЕрд╡рдЧрдд рд░рд╣реЗрдВ: https://golang.org/conductред рдзрдиреНрдпрд╡рд╛рджред

рд╣рд░ рдХреЛрдИ: рдКрдкрд░ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЕрд▓рд╛рд╡рд╛ (https://github.com/golang/go/issues/32825#issuecomment-506740412) рдХреГрдкрдпрд╛ https://golang.org/wiki/NoPlusOne рд╕реЗ рдЕрд╡рдЧрдд рд░рд╣реЗрдВред "рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ" рдпрд╛ "рдореИрдВ рдЕрд╕рд╣рдордд рд╣реВрдВ" рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдХрд╣рдиреЗ рд╡рд╛рд▓реА рдЯрд┐рдкреНрдкрдгреА рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЗрдореЛрдЬреА рдмрдЯрди рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВред рдзрдиреНрдпрд╡рд╛рджред

@sanbornm

(рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рд╕рдВрджреЗрд╢ рдХрд╛ рдЙрддреНрддрд░ рджреЗрдирд╛ рд╕рдВрднрд╡ рд╣реИ; рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдпрд╣ рдЕрдЬреАрдм рдерд╛, рдЕрд╕рдВрднрд╡ рдирд╣реАрдВред рдФрд░ рдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реА рдмрд╛рдд рдЕрднреА рднреА рдХрд╛рдпрдо рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдорд┐рдиреА-рдереНрд░реЗрдб рдЕрдиреНрдп рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдмрд░реНрдлрд╝реАрд▓реЗ рддреВрдлрд╝рд╛рди рдореЗрдВ рдЦреЛ рдЧрдпрд╛ рд╣реИред)

рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдЕрд░реНрде рд╣реИ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЖрд╣реНрд╡рд╛рдиред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдореБрджреНрджрд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╡рд┐рд░реЛрдзреА рд╣реИред рдХреНрдпрд╛ рдЖрдк рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛ рдирд╣реАрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдмрдирд╛рддреЗ рд╣реИрдВ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡ рдкреНрд░рдгрд╛рд▓реА рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдпрдерд╛рд╕реНрдерд┐рддрд┐ рдХреЛ рдХрдо рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рджреЗрддреА рд╣реИред

рдкреНрд░рд╕реНрддрд╛рд╡ рдП рдХреЛ рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡ рдмреА рдХреЛ рдирд╣реАрдВ рдЕрдкрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рд╕реНрддрд╛рд╡ рдмреА рдХреЛ рд╡реЛрдЯ рджреЗрдВред рдкреНрд░рд╕реНрддрд╛рд╡ рдмреА рдХреА рд╡рд┐рд╕реНрддреГрдд рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП, рдЙрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдпрд╛ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

(рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдмреА рд▓реЙрдХ рд╣реИ; рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдПрдХ рджрд┐рди рд╕реЗ рдХрдо рд╕рдордп рдореЗрдВ 77 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реИрдВ, рдпрд╣ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВред рдЗрд╕ рд╕реНрддрд░ рдХреА рдЪрд░реНрдЪрд╛ рдХреЗрд╡рд▓ рд╕рдорд╕реНрдпрд╛ рдЯреНрд░реИрдХрд░ рдХреА рдмрдЬрд╛рдп рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдкрд░ рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░рддреА рд╣реИред)

@ianlancetaylor

(рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рд╕рдВрджреЗрд╢ рдХрд╛ рдЙрддреНрддрд░ рджреЗрдирд╛ рд╕рдВрднрд╡ рд╣реИ; рдореИрдВрдиреЗ рдХрд╣рд╛ рдХрд┐ рдпрд╣ рдЕрдЬреАрдм рдерд╛, рдЕрд╕рдВрднрд╡ рдирд╣реАрдВред рдФрд░ рдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реА рдмрд╛рдд рдЕрднреА рднреА рдХрд╛рдпрдо рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдорд┐рдиреА-рдереНрд░реЗрдб рдЕрдиреНрдп рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдмрд░реНрдлрд╝реАрд▓реЗ рддреВрдлрд╝рд╛рди рдореЗрдВ рдЦреЛ рдЧрдпрд╛ рд╣реИред)

рдХрд╛рдлреА рдЙрдЪрд┐рдд, рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪрд┐рдпрд╛рдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд╣реИрдВ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЧрд┐рдЯрд╣рдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпреЛрдЧрджрд╛рди рдХрд░рдирд╛ рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИред рд╡рд░реНрддрдорд╛рди рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореЗрд░реЗ рдкрд╛рд╕ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдФрд░ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╡рд╣реА рдмрдирд╛ рд░рд╣реЗред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрдореЛрдЬреА/рд╡реЛрдЯ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рд╣реИрдВред рдЖрдк рд╢рд╛рдпрдж рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рдХрд┐ 100 рд▓реЛрдЧ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдореЗрдВ "рдХреГрдкрдпрд╛ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛ рдЕрдХреЗрд▓рд╛ рдЫреЛрдбрд╝ рджреЗрдВ" рд▓рд┐рдЦреЗрдВ рдЬрд╣рд╛рдВ 100 "рд╡реЛрдЯ" рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдВред

рдЪреВрдВрдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд▓реЙрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЗрдореЛрдЬреА рдХреЗ рд╕рд╛рде "рд╡реЛрдЯ" рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдПрдХ рдкрдХреНрд╖ рдмрд┐рдВрджреБ рд▓реЗрдХрд┐рди рд╕рдВрдмрдВрдзрд┐рдд, рдирд┐рд░реНрднрд░рддрд╛ рдкреНрд░рдмрдВрдзрди рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛ред рдбреЗрдк рдиреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рдЧреЛ рдореЙрдб рдХреЛ рдЪреБрдирд╛ рдЧрдпрд╛ (рдЬреИрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛) рдХрд╣реАрдВ рд╕реЗ рднреА [1]ред рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ рдЗрд╕рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡ рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рдИ рдЧрдИ рдереАред рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдкреНрд░рдгрд╛рд▓реА рд╕рдореБрджрд╛рдп рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрдо рдХрд░ рд╕рдХрддреА рд╣реИ рдпрджрд┐ рдореБрджреНрджреЛрдВ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪрд┐рдпреЛрдВ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

[1] https://twitter.com/_rsc/status/1022588240501661696

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдЧреЛ рдЯреАрдо рдФрд░ рд╕рдореБрджрд╛рдп рд╕рдореБрджрд╛рдп рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реБрдирдХрд░ рдПрдХ рдЕрджреНрднреБрдд рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕рдореЗрдВ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред рдЧреЛ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдПрдХ рдмреЗрд╣рддрд░реАрди рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред

@sanbornm

рдбрд┐рдк рдиреЗ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛

рдпрд╣рд╛рдВ рдЕрд╕рд╣рдордд рд╣реЛрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЧреЛ рдореЙрдбреНрдпреВрд▓ рдиреЗ рдЕрдВрддрддрдГ https://proxy.golang.org рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреЗ рд▓рдЧрд╛рддрд╛рд░ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЙрд╕ рдХреБрдЦреНрдпрд╛рдд "gobindata" рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛

рдЙрд╕ рдбрд┐рдкреНрдЯреА рдбреНрдпреВрдб рдХреЛ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рднреА рдирд╣реАрдВ рдерд╛ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╡реАрд╕реАрдПрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреИрдВрд╕реА "рд╕реБрдирд┐рд╢реНрдЪрд┐рдд" рдХрд░ рд░рд╣рд╛ рдерд╛ред

@sirkon рдпрд╣ рдереЛрдбрд╝рд╛ рд╣рдЯрдХрд░ рд╡рд┐рд╖рдп рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЗрд╕рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рдЖрдк рд╡реЗрдВрдбрд░ рдбрд┐рдкреНрд╕ рдЬреИрд╕реЗ рдбреЗрдк рдХрд░ рд░рд╣реЗ рдереЗред

рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдЦрдбрд╝рд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЪреАрдЬреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рддрдм рддрдХ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рдЕрдзрд┐рдХ рдмрд╛рдзрд╛рдПрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝реА рдЬрд╛рддреАрдВ, рдЬреИрд╕реЗ рдкреНрд░рддрд┐ рдкрдВрдХреНрддрд┐ 1 рдкреНрд░рдпрд╛рд╕ рдХрдердиред рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рд╣реИ - рдпрд╣ рдХрд╛рдлреА рд╣рд╛рдирд┐рд░рд╣рд┐рдд рд▓рдЧрддрд╛ рд╣реИ info := try(try(os.Open(file)).Stat()) рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рдлрд╝рд╛рдЗрд▓ рд╣реИрдВрдбрд▓ рдХреЛ рд▓реАрдХ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо io.Closer рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╛ рдЕрдиреНрдп рдХреНрд▓реАрдирдЕрдк рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рд╕рдВрд╕рд╛рдзрди рд▓реАрдХ рдореЗрдВ рд╡реГрджреНрдзрд┐ рджреЗрдЦреЗрдВрдЧреЗ рдЬрд┐рд╕рд╕реЗ рд▓реЛрдЧ рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рдХреЛрдб рдХреА рдЦреЛрдЬ рдореЗрдВ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рд▓реЛрдЧ рдЗрд╕реЗ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдорд╛рдиреЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ f рдЕрдм рдЬреАрд╡рд┐рдд рдирд╣реАрдВ рд░рд╣реЗрдЧрд╛ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ GC рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдкрд╛рддреНрд░ рд╣реЛрдЧрд╛ рдФрд░ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдЕрдВрддрд┐рдо рд░реВрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ f рдмрдВрдж рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдЬ defer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕реНрдкрд╖реНрдЯ (рд▓рд┐рдВрдЯрд░ рд╕рдорд░реНрдерд┐рдд) рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдмреНрд▓реЙрдХ рд╕реЗ рдмрдВрдзреЗ рд╣реЛрддреЗ рд╣реИрдВред рдЬрдм рдлрд╝рдВрдХреНрд╢рди рдмреНрд▓реЙрдХ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╕рдВрд╕рд╛рдзрди рдореБрдХреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдХрд░реНрддрд╛ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИ рдХрд┐ рдЖрдк рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ (рд╕рд╛рдорд╛рдиреНрдп рдЦреБрд▓реА рдлрд╝рд╛рдЗрд▓ рд╣реИрдВрдбрд▓ рд╕реАрдорд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ 1k рдФрд░ 4k рдХреЗ рдмреАрдЪ рд╣реЛ рд╕рдХрддреА рд╣реИ) - рдЬрд┐рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рд╛рдЗрд▓рдкрде рд╕реЗ рдкрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪрд▓рдирд╛ рдЬреЛ рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдмрдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдпрд╣ рдЖрдВрдХрдбрд╝реЗред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдпрд╣ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЧреЛ рдореЗрдВ рд╕рдВрд╕рд╛рдзрди рдкреНрд░рдмрдВрдзрди рдореЗрдВ рдПрдХ рд╕реВрдХреНрд╖реНрдо рдЬреЛрдЦрд┐рдо рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╕реАрдЯреАрдЖрд░ / рдбреАрдЯреАрдУрдЖрд░ рдХреА рдХрдореА рд╣реИ рдФрд░ рд╕рдВрд╕рд╛рдзрди рд▓реАрдХ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдмреНрд▓реЙрдХ рд╕реЗ рджреВрд░ рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдХреА рдЬреАрд╕реА рдорд╢реАрдирд░реА рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рд╕рдВрднрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐ рд╕реНрдерд┐рддрд┐ (рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЦреБрд▓реА рдлрд╝рд╛рдЗрд▓реЗрдВ) рдореЗрдВ рд╣рд╛рдирд┐рд░рд╣рд┐рдд рд▓рдЧрдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдирд╛ред

var n int
for _, name in try(os.Readdir(...)) {
   n += try(getSize(name))
}
func getSize(name string) (int, error) {
   return try(try(os.Open(name)).Stat()).Size
}

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рджрд╛рд╣рд┐рдиреЗ рд╣рд╛рде рдкрд░ рдорд╛рдиреНрдп рдерд╛ рдЬреЛ рдкреНрд░рддрд┐ рдкрдВрдХреНрддрд┐ 1 рдХрд╣рдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ a, b := try(get("a")), try(get("b")) рдкрд░реНрдпрд╛рдкреНрдд рдЙрдЪрд┐рдд рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА try(os.Open(name)).Stat() рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ - рдЬреЛ рдХрд┐ рдпрджрд┐ рдЖрдк try() рд╢реВрдиреНрдп рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рддрднреА рдЬрдм рдХрд┐рд╕реА рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ RHS рдкрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдЖрдк рдХреБрдЫ рдРрд╕рд╛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдмрд╣реБрдд рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рд╕рдмред

@cstockton рд╡рд╛рд╣ рдорд╣рд╛рди рдЦреЛрдЬ!

рдЬрдВрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╛рди рдореИрдХреНрд░реЛ ( ? рдЕрдЧрд░ рдореБрдЭреЗ рд╕рд╣реА рдпрд╛рдж рд╣реИ) рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ try рдорддрд▓рдм рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдкрд╛рд╕ рдЙрдЪрд┐рдд raii рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЙрд╕ рднрд╛рд╖рд╛ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЫреЗрдж

@sanbornm рд╣рд╛рдБ, рдЖрдзреЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЛ рдЕрдкрдиреЗ рд░реЗрдкреЛ рдореЗрдВ рд░рдЦрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдорд╣рд╛рди рд╡рд┐рдЪрд╛рд░ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред

Finishing Touch

рдЪреВрдВрдХрд┐ рдХрд┐рд╕реА рдиреЗ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛

| рдкрд░рд┐рдпреЛрдЬрдирд╛ | рдПрд▓рдУрд╕реА* | рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ |
|----------|----------|----------------|
| cal1 | 2047 | 3 |
| рдкрдВрдк1 | 1030 | 0 |
| рдбреЙрдХреНрд╕1 | 4576 | 8 |
| рд╣рдЧреМрдЯрд┐рд▓ | 604 | 1 |
| рдмрд╛рдХреА рд╕рдм | 8452 | 23 |

  • cloc рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХреЗрд╡рд▓ рдЧреЛ рдХреЛрдбред

рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ "рдмрд╛рдХреА рд╕рдм рдХреБрдЫ" рдХреА рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рддреНрд╡рд░рд┐рдд рд╣реИрдХреНрд╕ рдФрд░ рдХреЛрдб рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рдореИрдВрдиреЗ рддрдм рд▓рд┐рдЦрд╛ рдерд╛ рдЬрдм рдореИрдВ рдЧреЛ рд╕реАрдЦ рд░рд╣рд╛ рдерд╛ред

рдореЗрд░рд╛ рд╕рдордЧреНрд░ рдирд┐рд╖реНрдХрд░реНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо, try рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрд░реА рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛ рдХрд┐рд╕реА рднреА рд╕рд╛рд░реНрдердХ рдбрд┐рдЧреНрд░реА рддрдХ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдЬрд╛рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЛрдбрд░реНрд╕ рдХреЛ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╕рдмрд╕реЗрдЯ рддрдХ рд╕реАрдорд┐рдд рдХрд░ рджреЗрддреА рд╣реИред рдЪреВрдВрдХрд┐ рдпрд╣ рдЗрддрдирд╛ рдЫреЛрдЯрд╛ рдлреАрдЪрд░ рд╕реЗрдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреВрд░реЗ рдлреАрдЪрд░ рд╕реЗрдЯ рдХреЛ рд╕реАрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИред рдПрдХ рднрд╛рд╡реА рдбреЗрд╡рд▓рдкрд░ рд╢рд╛рдпрдж рдореЗрд░реЗ рдХреЛрдб рдХреЛ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЬрд╛рди рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛ред рднрд╛рд╖рд╛ рдореЗрдВ рдЬреЛрдбрд╝реА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рддреНрдпреЗрдХ рдирдИ рдЪреАрдЬрд╝ рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЙрд╕ рдЪреАрдЬрд╝ рдХреЛ рдЬрд╛рдирдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИред рдлрд┐рд╕рд▓рди рдврд▓рд╛рди рдХрд╛ рдЪрд░рдо рдПрдХ рдРрд╕реА рднрд╛рд╖рд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдЬрдЯрд┐рд▓рддрд╛ рд╕реА ++ рдпрд╛ рд╕реНрдХреИрд▓рд╛ рдХреА рддрд░рд╣ рдЗрд╕реЗ рдЯрдЯреЛрд▓рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдмрдирд╛рддреА рд╣реИред
рдореИрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЬреЛрдбрд╝ рдирд╣реАрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЙрдиреНрд╣реЗрдВ 2 рдореЗрдВ рд░рдЦреЗрдВред

@miekg рдХреГрдкрдпрд╛ рдЗрд╕ рд▓рд┐рдВрдХ рдХреЛ https://github.com/golang/go/issues/32825#issuecomment -506882164 рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рд╣рд╛рд▓ рдХреЗ try рдХреАрд╡рд░реНрдб рдХреЗ рд╕рдВрдкреВрд░реНрдг рд╡рд┐рдЪрд╛рд░ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдпреЛрдЧреНрдп рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред

image

рдореИрдВ рдЗрд╕реЗ рдРрд╕реЗ рд╣реА рдЫреЛрдбрд╝рдиреЗ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реВрдВред рдпрд╣ рдереЛрдбрд╝рд╛ рдмрд╣реБрдд рд╡рд░реНрдмреЛрдЬрд╝ рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реАрдзрд╛ рд╣реИред

рдЕрдЧрд░ рдореИрдВ рдмрд╕ рдХрдо рдХрд░ рд╕рдХрддрд╛

if err := foo.x(a, b); err != nil {
  return err
}

if err := foo.y(); err != nil {
  return err
}

if err := foo.z(c); err != nil {
  return err
}

рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП

if err := check foo.x(a, b), foo.y(), foo.z(c); err != nil {
  return err
}

рд╢рд╛рдпрдж рдореБрд╣рд╛рд╡рд░реЗ рдХреЛ рдмрд╣реБрдд рдЬреНрдпрд╛рджрд╛ IMHO рдмрджрд▓реЗ рдмрд┐рдирд╛ рднреА рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдпрджрд┐ рдЖрдк "рд╢рд╛рдпрдж" рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рдереЗ, рддреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЪрд▓реЛ if err != nil рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд░реНрдмреЛрдЬрд╝ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рдХреЛрдб рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЗрд╕ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде рдХреЛрдб рдкрдврд╝рддреЗ рд╣реИрдВ, рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
рдЖрдЗрдП рдЗрд╕реЗ рд░рдЦреЗрдВ, рдЖрдЗрдП try рди рдЬреЛрдбрд╝реЗрдВ

рдЬрдм рдореИрдВ рдХреЛрдб рдкрдврд╝рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рд░реЗрдЦрд╛рдПрдВ рдХрдо рд╕реЗ рдХрдо рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рд╕рд╛рдордЧреНрд░реА рдХреЗ рдмрд┐рдирд╛ рдпрд╛ рдмрд┐рдирд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрдардиреАрдп рд╣реЛрдВред

рд╕рдорд╛рди рд╕реНрддрд░ рдкрд░ 3 рдЕрдХреНрд╖рд░ 'рдЧрд▓рддреА' рдореБрдЭреЗ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИрдВред рдореИрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреЛрдб рдХреЛ рд▓рдкреЗрдЯрдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ 'рдЪреЗрдХ' рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреЛрдб рджреВрд╕рд░реЗ рд╕реНрддрд░ рдкрд░ рд╣реЛрдЧрд╛ (рд▓рд┐рд╕реНрдк рдпрд╛рдж рд░рдЦреЗрдВ?), рдФрд░ рдореИрдВ рдкрд╣рд▓реЗ рдПрдХ рдкрдВрдХреНрддрд┐ 'рдХреЛрд╢рд┐рд╢' рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреЛрдб рдЗрдВрдбреЗрдВрдЯреЗрдб рдЖрдПрдЧрд╛ рдФрд░ рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдкрд░ред

рд░реЗрд╕, рдПрд░рд░: = start_job ()
рдЕрдЧрд░ рдЧрд▓рддреА!= рд╢реВрдиреНрдп {
рд╣реИрдВрдбрд▓_рдПрд░рд░ ()
}

рддреНрд░реБрдЯрд┐ = рдЬрд╛рд░реА рд░рдЦреЗрдВ_рдЬреЙрдм (рд░реЗрд╕)
рдЕрдЧрд░ рдЧрд▓рддреА!= рд╢реВрдиреНрдп {
рд╣реИрдВрдбрд▓_рдПрд░рд░ ()
}

рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде, рдЖрдк рдмреНрд▓реЙрдХ рдХреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рдХрд░ рдЧреИрд░-рддреНрд░реБрдЯрд┐ рдорд╛рдорд▓реЗ рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ (рдЬрдм рдореБрдЭреЗ рдЗрд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рдкрдврд╝рдирд╛ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдореИрдВ рдбреЙрдХреНрд╕ рдХреЗ рд╢реАрд░реНрд╖рдХ рдкрдврд╝рддрд╛ рд╣реВрдВ)

рдЪреВрдВрдХрд┐ рдХрд┐рд╕реА рдиреЗ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдПрд▓рдУрд╕реА* рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХреЛ рдЖрдЬрдорд╛рдПрдВ
рдХреИрд▓ 1 2047 3
рдкрдВрдк1 1030 0
рдбреЙрдХреНрд╕1 4576 8
рд╣рдЧреМрдЯрд┐рд▓ 604 1
рдмрд╛рдХреА рд╕рдм 8452 23

  • cloc рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХреЗрд╡рд▓ рдЧреЛ рдХреЛрдбред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрдбрд╝реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ try рдХреА рдЕрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмрд╕ рд╕реНрдореГрддрд┐ рд╕реЗ рдбреНрд░рд╛рдЗрдВрдЧ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓рдЧрднрдЧ 15-20k рдФрд░ рдКрдкрд░ рдХреЗ LOC рдЖрдХрд╛рд░ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдЙрдирдХреА рдЕрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдкрд░рддреЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЙрдкрдпреБрдХреНрдд рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдмрдВрдж рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рднреЗрдЬрдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрдХреНрд╖ рджреЛрдиреЛрдВред рдпрд╣ рдмрд╣реБрдд рдХреБрдЫ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИред рдореИрдВ рд╢рд╛рдпрдж рдЫреЛрдЯреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рднреА рдЬреНрдпрд╛рджрд╛ рдкреНрд░рдпреЛрдЧ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрдбрд╝реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдкреНрд░рдпрд╛рд╕ рдХреА рдЕрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЕрдЪреНрдЫреА рдмрд╛рддред рдореИрдВрдиреЗ рд╣реЗрдкреНрдЯрд┐рдпреЛ/рд╕рдореЛрдЪреНрдЪ рдкрд░ рдЯреНрд░рд╛рдЗрд╣рд╛рд░реНрдб рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд╕реНрд░реЛрдд рдЯреЗрдХреНрд╕реНрдЯ рдХреА 28.7k рд▓рд╛рдЗрдиреЗрдВ, рдЯреНрд░рд╛рдЗрд╣рд╛рд░реНрдб рдХреЛ 12 рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдорд┐рд▓реЗред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрдбрд╝реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдкреНрд░рдпрд╛рд╕ рдХреА рдЕрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЕрдЪреНрдЫреА рдмрд╛рддред рдореИрдВрдиреЗ рд╣реЗрдкреНрдЯрд┐рдпреЛ/рд╕рдореЛрдЪреНрдЪ рдкрд░ рдЯреНрд░рд╛рдЗрд╣рд╛рд░реНрдб рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд╕реНрд░реЛрдд рдЯреЗрдХреНрд╕реНрдЯ рдХреА 28.7k рд▓рд╛рдЗрдиреЗрдВ, рдЯреНрд░рд╛рдЗрд╣рд╛рд░реНрдб рдХреЛ 12 рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдорд┐рд▓реЗред

рд╡рд╛рд╣! 12 рдмрдирд╛рдо 28.7K рд▓рд╛рдЗрдиреЗрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд░реНрдкрд┐рдд рдХреАрд╡рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ!

рдЦреИрд░, рдореБрдЭреЗ рдЗрд╕ рдкрд░ рдЖрдкрдХреЗ рдкреАрдУрд╡реА рдореЗрдВ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ:

stat := try(try(os.Open(fileName)).Stat())

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдпрджрд┐ рдЖрдкрдХрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЕрдЦрдВрдб рд╣реИ рдФрд░ рдХрдИ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕реЗрд╡рд╛ рдПрдХреАрдХрд░рдг рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдЬрдм рдореИрдВ рдЙрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА ( heptio/contour ) рдкрд░ рдЬреАрдердм рдореЗрдВ fmt.errorf рдпрд╛ errors рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдХреЗрд╡рд▓ рдмрд╣реБрдд рдХрдо рдкрд░рд┐рдгрд╛рдо рд╣реЛрддреЗ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рддреНрд╡рд░рд┐рдд рдЕрд╡рд▓реЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИ .. рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдиреЗ рдХрд╣рд╛ рдХрд┐ рдпрд╣ рд╢рд╛рдпрдж рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реЗ рджреВрд╕рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдмрд╣реБрдд рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдмрдбрд╝реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рднреАред

рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдРрд╕рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИ рдЬреЛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ (рдФрд░ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд▓реМрдЯрд╛рдИ рдЧрдИ рд╕рднреА рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╛рд▓реА рдФрд░ рд▓рдкреЗрдЯреА рдЧрдИ рдХрд┐рд╕реА рднреА рдЖрдИрдУ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВ) рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдкрдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЗрдЯрд╛ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдкрд░рддреЛрдВ рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрди рдЪреАрдЬреЛрдВ рдореЗрдВ рдмрд╣реБрдд рдмрджрд▓рд╛рд╡ рдХрд┐рдП рдмрд┐рдирд╛ рдЬрд┐рдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЕрдиреБрд░реЛрдз рдкрд░рдд рддрдХ рдЙрдиреНрд╣реЗрдВ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдПред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдпрджрд┐ рдЖрдкрдХрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЕрдЦрдВрдб рд╣реИ рдФрд░ рдХрдИ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕реЗрд╡рд╛ рдПрдХреАрдХрд░рдг рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдЬрдм рдореИрдВ рдЙрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкрд░ рдЬреАрдердм рдореЗрдВ fmt.errorf рдпрд╛ errors рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдХреЗрд╡рд▓ рдмрд╣реБрдд рдХрдо рдкрд░рд┐рдгрд╛рдо рд╣реЛрддреЗ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рддреНрд╡рд░рд┐рдд рдЕрд╡рд▓реЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддрд╛ рд╣реИ .. рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╢рд╛рдпрдж рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реЗ рдмрд╣реБрдд рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдмрдбрд╝реЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рднреАред

рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдРрд╕рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИ рдЬреЛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдкрдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЗрдЯрд╛ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдкрд░рддреЛрдВ рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмрджрд▓рд╛рд╡ рдХреЗ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдиреБрд░реЛрдз рдкрд░рдд рддрдХ рдЙрдиреНрд╣реЗрдВ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЖрдкрдХреЛ рдЕрдВрджрд╛рдЬрд╛ рдирд╣реАрдВ рд╣реИред рдПрдиреЛрдЯреЗрд╢рди рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рддрд░рд╣ рд╕реЗ рддреНрд░реБрдЯрд┐ рд╣реБрдИ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕реА рддрд░рд╣ os.NotExist рд▓реЗрдХрд┐рди рдпрд╣ рддреНрд░реБрдЯрд┐ рдкрде рдкрд░ рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдВрдХреЗрдд рд╣реИред

@thomasf рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рдбреЗрдЯрд╛ рдмрд┐рдВрджреБ рд╣реИ, рдЬреВрдЬреВ/рдЬреВрдЬреВ рдХреА рдХрдИ рд╕рд╛рд▓ рдкреБрд░рд╛рдиреА рдХрд╛рдордХрд╛рдЬреА рдкреНрд░рддрд┐ рд╕реЗ,

529628 рд╕реНрд░реЛрдд рд▓рд╛рдЗрдиреЛрдВ, рдЯреНрд░рд╛рдЗрд╣рд╛рд░реНрдб рдиреЗ 1763 (0.3%) рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдкрд╛рдпрд╛ред

рд╣рд╛рдВ рдпрдХреАрдирдиред рдЪреВрдВрдХрд┐ рдЖрдк рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рд░рд╣реЗ рд╣реИрдВ, рд╡реЗ рд╢рд╛рдпрдж рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХреЗ рдорд╣рд╛рди рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдЯреНрд░рд╛рдЗрд╣рд╛рд░реНрдб рдкреНрд░реЛрдЧреНрд░рд╛рдо рдПрдЯреАрдПрдо рдХреЛ рдЖрдЬрдорд╛рдиреЗ рдХрд╛ рд╕рдордп рднреА рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рд╡рд┐рднрд┐рдиреНрди рд╕реНрд░реЛрддреЛрдВ рдкрд░ рдЗрд╕реЗ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрдо рд╣реИ (рдЬреЛ рдХрд┐ рд╡реИрд╕реЗ рднреА рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрдВрдж рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдЕрдЧрд░ рдЬреАрдердм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ)

529628 рд╕реНрд░реЛрдд рд▓рд╛рдЗрдиреЛрдВ, рдЯреНрд░рд╛рдЗрд╣рд╛рд░реНрдб рдиреЗ 1763 (0.3%) рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдкрд╛рдпрд╛ред

рдЬреИрд╕рд╛ рдХрд┐ рдХрд┐рд╕реА рдиреЗ (рдЙрджреНрдзрд░рдг рд╡рд╛рдВрдЫрд┐рдд) рдмреБрджреНрдзрд┐рдорд╛рдиреА рд╕реЗ рдХрд╣рд╛, try рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рди рд╕рдВрднрд╛рд▓рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ try рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдкрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рд╕рд┐рд╡рд╛рдп рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗред рдпрд╣ рд╢рд╛рдпрдж рдорд╣рд╛рди рдХреЛрдб рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рд╣рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд▓рд╕реА рд╣реЛрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП? рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЧреЛ рдХреЗ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИрдВ, рдареАрдХ рдЙрд╕реА рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП?

рдореИрдВ рдЗрд╕ рдкрд░ рдХреЛрдИ рд░реБрдЦ рдирд╣реАрдВ рд▓реВрдВрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреЛ рдореБрдЭреЗ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ, рд╡рд╣ рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕рд╣рд╛рдпрдХ рдкреНрд░рдорд╛рдг рд╣реИ

рдПред рдРрд╕реЗ рдмрд╣реБрдд рд╕реЗ рд╕реНрдерд╛рди рд╣реИрдВ рдЬрд╣рд╛рдВ try рдореМрдЬреВрджрд╛ рдЧреЛ рдХреЛрдбрдмреЗрд╕ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ
рдмреАред рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди SLOC рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЬреЛ рдореЗрд░реЗ рдЕрдкрдиреЗ рдорд╛рдк рдФрд░ рдЧреЛ рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рдирдВрдмрд░реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣реИ, рд░реЗрдлрд░реА https://youtu.be/RIvL2ONhFBI?t=440 рдЯрд╛рдЗрдордХреЛрдб 07:26

рдпрджрд┐ рдЖрдк рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ try рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдкрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рд╕рд┐рд╡рд╛рдп рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗред рдпрд╣ рд╢рд╛рдпрдж рдорд╣рд╛рди рдХреЛрдб рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рд╣рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд▓рд╕реА рд╣реЛрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП? рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЧреЛ рдХреЗ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИрдВ, рдареАрдХ рдЙрд╕реА рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП?

  1. рдЖрдк рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореВрд▓реНрдп рдирд┐рд░реНрдгрдп рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЖрдк рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЪреНрдЫреА рдЖрджрдд рдирд╣реАрдВ рд╣реИред
  2. рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдХреИрд╕реЗ try рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ, рдЧреЛ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реБрд╡рд┐рдзрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЫреЛрдбрд╝рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП try рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдЕрдЧрд░ рдЗрд╕реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рд╢рд╛рдпрдж try рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рдЬрдЧрд╣реЛрдВ рдкрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдЖрдЗрдП рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдордиреЛрд░рдВрдЬрди рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЗрд╡рд▓ рдХреНрд░реЛрдзреА рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд╕рд╛рде рдЖрдПрдВ ...

рдореИрдВ рдЦреБрдж рдХрдИ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рдХрд┐ рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрд╣рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреЛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд░реВрдВрдЧрд╛ рдпрджрд┐ рдпрд╣ рдореМрдЬреВрдж рд╣реИ .. рдПрдХ рдмрд╛рдд рдЬреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддреА рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдПрдХ рдЕрдЬреНрдЮрд╛рдд рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдХрдИ рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпрд╛рдВ рд╕рдореВрд╣ рдХрд░реЗрдВ, рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдФрд░ рдХреЙрд▓рд░ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрднреА рднреА рд╕рдВрднрд╛рд▓ рд▓реЗрдВред рдпрд╣ рдХреБрдЫ рдХреЛрдб рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред

var v1, v3 string
if err := func() error {
    try(onething())
    v = try(twothing())
    try(otherthing())
    v3 = try(somethingg())
}(); err != nil {
  ... handle error...
}

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдордп рд╡рд┐рднрд┐рдиреНрди рдкреИрдХреЗрдЬреЛрдВ рдкрд░ tryhard рд▓рд┐рдП рдбреЗрдЯрд╛ рд░рдЦрдиреЗ рдФрд░ рдЙрдирдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд▓рд┐рдЦрдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╢рд╛рдпрдж рдереЛрдбрд╝рд╛ рдЧреЛрд▓рд╛рдВрдЧ/gddo рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ (godoc.org) рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ if err != nil рдЕрдХреЗрд▓рд╛ рдЫреЛрдбрд╝рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдореЗрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЬреЛрдбрд╝рдирд╛ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рдПрдХ рдирдпрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП throws рдХреАрд╡рд░реНрдб рдЬреЛрдбрд╝реЗрдВред

32852

рдпрд╣рд╛рдВ рдкрд╣рд▓реЗ рд╕реЗ рдмрддрд╛рдП рдЧрдП рдХреБрдЫ рддрд░реНрдХреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдП рдмрд┐рдирд╛, рдореИрдВ if err != nil рдХреЛ рдпрдерд╛рд╡рдд рдЫреЛрдбрд╝рдиреЗ рдХреА рднрд╛рд╡рдирд╛ рдХреЛ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐рдд рдХрд░рддрд╛ рд╣реВрдВред

рдореИрдВ рдЬреЛ рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рдкреЗрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ: рдЬрд┐рд╕ рд╡реНрдпрдХреНрддрд┐ рдиреЗ рд╕реИрдХрдбрд╝реЛрдВ рдирдП рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдЬрд╛рдирд╛ рд╕рд┐рдЦрд╛рдпрд╛ рд╣реИ (рджреЛрдиреЛрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдФрд░ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП), if err != nil рдЙрдирдХреЗ рд▓рд┐рдП рдХрднреА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд░рд╣реА рд╣реИред рдореЗрд░реА рдХрд╛рд░реНрдпрд╢рд╛рд▓рд╛рдУрдВ рдореЗрдВ рдЕрдиреБрднрд╡реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рдЗрд╕реЗ рдЕрд╕рд╛рдорд╛рдиреНрдп рдкрд╛рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЬрд▓реНрджреА рд╕реЗ рдЧреЛ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреА рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХреГрддрд┐ рд╕реЗ рдкреНрдпрд╛рд░ рдХрд░рдирд╛ рд╕реАрдЦрддреЗ рд╣реИрдВред

рдмрдбрд╝реА рдЪрд┐рдВрддрд╛рдПрдБ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рднрд╛рд╖рд╛ рдореЗрдВ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╕рдореБрджрд╛рдп рдХреА рд╕реНрдкрд╖реНрдЯ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╣рддреА рд╣реИ рдХрд┐ if err != nil рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдирд╣реАрдВ рд╣реИред

рдЧреЛ рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдПрдХрджрдо рд╕рд╣реА рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рдореБрдЦ рд╣реИ "рдЕрдЧрд░ рдЧрд▓рддреА! = рд╢реВрдиреНрдп"ред рдпрд╣ рд╡рд░реНрдмреЛрдЬрд╝ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХреЛрдб рд╕реАрдЦрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрдкрдХреЗ рдХреЛрдб рдФрд░ рд╕рд╣реА рдХреЛрдб рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред

@davecheney

рдореИрдВ рдЗрд╕ рдкрд░ рдХреЛрдИ рд░реБрдЦ рдирд╣реАрдВ рд▓реВрдВрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреЛ рдореБрдЭреЗ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ, рд╡рд╣ рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕рд╣рд╛рдпрдХ рдкреНрд░рдорд╛рдг рд╣реИ

рдПред рдРрд╕реЗ рдмрд╣реБрдд рд╕реЗ рд╕реНрдерд╛рди рд╣реИрдВ рдЬрд╣рд╛рдВ try рдореМрдЬреВрджрд╛ рдЧреЛ рдХреЛрдбрдмреЗрд╕ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ
рдмреАред рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди SLOC рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЬреЛ рдореЗрд░реЗ рдЕрдкрдиреЗ рдорд╛рдк рдФрд░ рдЧреЛ рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рдирдВрдмрд░реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣реИ, рд░реЗрдлрд░реА https://youtu.be/RIvL2ONhFBI?t=440 рдЯрд╛рдЗрдордХреЛрдб 07:26

рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдорд╛рд╣реМрд▓ рдореЗрдВ рд╣рдореЗрдВ рдЬреЛ рднреА рдЙрджрд╛рд╣рд░рдг рдорд┐рд▓рддреЗ рд╣реИрдВ рдЙрдиреНрд╣реЗрдВ "рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╢рд╛рдпрдж рдЕрдЪреНрдЫрд╛ рдХреЛрдб рдирд╣реАрдВ рд╣реИ" рдХреЗ рд░реВрдк рдореЗрдВ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

llorllale:~/go/src/github.com/hyperledger/fabric$ cloc --exclude-dir=vendor .
    2406 text files.
    2256 unique files.                                          
    3130 files ignored.

http://cloc.sourceforge.net v 1.60  T=6.69 s (272.8 files/s, 58350.9 lines/s)
--------------------------------------------------------------------------------
Language                      files          blank        comment           code
--------------------------------------------------------------------------------
Go                             1751          54365          34149         294005
YAML                             35            547           2171           2060
Bourne Shell                     26            354            325           1312
make                              3            135             96            418
CSS                               1             40             14            140
HTML                              3              7              5             63
Python                            1             50            103             57
Bourne Again Shell                1              1              6             50
Java                              3              7              4             26
XML                               2              1              4              2
--------------------------------------------------------------------------------
SUM:                           1826          55507          36877         298133
--------------------------------------------------------------------------------
llorllale:~/go/src/github.com/hyperledger/fabric$ tryhard -l . | grep -v vendor | less | wc -l
1417

рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛ рдореЗрдВ, рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдерд╛рдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдЙрди рд╕рдореНрдореЗрд▓рдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рднреНрд░рдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ рд░реИрдкрд┐рдВрдЧ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреА рдХрдВрдкрдиреА рдХреА рдкрд░рдВрдкрд░рд╛ рд╣реИ

if err != nil {
   return errors.Wrap(err) 
} 

...
if err != nil {
   return errgo.Notef(err, "error doing x") 
} 

рдЬрд┐рд╕реЗ рдЯреНрд░рд╛рдЗрд╣рд╛рд░реНрдб рджреНрд╡рд╛рд░рд╛ рд░рд┐рдкреЛрд░реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореЗрд░реА рдХрдВрдкрдиреА рдореЗрдВ рд╣рдорд╛рд░рд╛ рдРрд╕рд╛ рд╕рдореНрдореЗрд▓рди рд╣реИред рдЙрдиреНрд╣реЗрдВ рдирдЧреНрди рддреНрд░реБрдЯрд┐ рд░рд┐рдЯрд░реНрди рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЦреЛрдЬ-рдФрд░-рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд░рдирд╛ рдореБрдЭреЗ рдпреЗ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ:

Language                             files          blank        comment           code
---------------------------------------------------------------------------------------
Go                                    2488          40317          15901         297038

рдЯреНрд░рд╛рдЗрд╣рд╛рд░реНрдб 2736 рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрдиреЛрдВ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢реЗрд╖ рд░реИрдкрд┐рдВрдЧ рдХреА рдореИрдиреНрдпреБрдЕрд▓ рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рд╕реЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд▓рдЧрднрдЧ 1850 рддрдХ рдХрдо рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ 300k рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╣рдорд╛рд░реЗ рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рдХреБрд▓ ~ 4500 try рдЙрдкрдпреЛрдЧреЛрдВ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдКрдВрдЧрд╛ред

(рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреА рд╡рд░реНрддрдорд╛рди рдЦреЛрдЬрдХрд░реНрддрд╛ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВ рдФрд░ рдЗрд╕рд╕реЗ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИред)

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреА рдХрдВрдкрдиреА рдХреА рдкрд░рдВрдкрд░рд╛ рд╣реИ
[рдХрд╕реНрдЯрдо рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд▓рдкреЗрдЯреЗрдВ]
рдЬрд┐рд╕реЗ рдЯреНрд░рд╛рдЗрд╣рд╛рд░реНрдб рджреНрд╡рд╛рд░рд╛ рд░рд┐рдкреЛрд░реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣реА рдмрд╛рдд рд╣реИ - try рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗрд╡рд▓ if err != nil return err рдирдЧреНрди рд░рд┐рдЯрд░реНрди рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдХрд╕реНрдЯрдо рд╕рдВрджреЗрд╢ рдФрд░ рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рд░реИрдкрд┐рдВрдЧ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

if err != nil рдХреА рдПрдХрдорд╛рддреНрд░ рджреЛрд╣рд░рд╛рд╡ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдЕрдиреНрдп рд╡рд╛рдкрд╕реА рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╢реВрдиреНрдп рдореВрд▓реНрдпреЛрдВ рдХреЛ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

рдЖрдЬ рдХреЗ рдЧреЛ рдореЗрдВ, рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рд╣реИ:

func add(x, y string) (int, error)

рдХрд╣реАрдВ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ, рдореБрдЭреЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛:

func add(x, y string) (int, error) {
    // ...
    if err != nil {
        return 0, err
    }

рдкреВрд░реЗ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рд▓реЗрдЦрдХ рдХреЛ рд╕рдорд╛рди рд╢реВрдиреНрдп рдорд╛рди рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдирд╛ред

рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ (рдФрд░ рддреНрд░реБрдЯрд┐ рд╡рд╛рдЪрд╛рд▓рддрд╛ рдФрд░ рдкрдардиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдХрдо рд▓рд╛рдЧрдд рдХреЗ рд╕рд╛рде) рдпрджрд┐ рднрд╛рд╖рд╛ рдЧреИрд░-рддреНрд░реБрдЯрд┐ рд╡рд╛рдкрд╕реА рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╢реВрдиреНрдп рдорд╛рдиреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рднрд░ рд╕рдХрддреА рд╣реИ:

func add(x, y string) (int, error) {
    // ...
    if err != nil {
        return ..., err
    }
    // ...
}
func main() {
    add("8", "beep") // returns 0, error(`strconv.ParseInt: parsing "beep": invalid syntax`)
}

рдореИрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЕрдиреБрднрд╡ рд╕реЗ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдбреАрдмреА рдкреНрд░рд╢реНрдиреЛрдВ рдФрд░ рдХреЙрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ, рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╢реВрдиреНрдп рдорд╛рдиреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рдЧреЛ-рд╕реНрдЯрд╛рдЗрд▓ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реИред рдЕрдиреНрдпрдерд╛ рдореИрдВ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреА рднрд╛рд╡рдирд╛ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ: if err != nil рдЕрдХреЗрд▓рд╛ рдЫреЛрдбрд╝ рджреЛ!

рдиреЛрдЯ: рд╣рд╛рдВ, рдирд╛рдорд┐рдд рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (https://play.golang.org/p/MLV8Y52HUBY), рд▓реЗрдХрд┐рди рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдпрд╛рдж рджрд┐рд▓рд╛рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдХрд┐рддрдирд╛ рдлреБрдЯ -рдЧрди рдирд╛рдорд┐рдд рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рд╣реИрдВ; рдореИрдВ рд╣рдореЗрд╢рд╛ рдирд╛рдорд┐рдд рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЛ рдЫрд╛рдпрд╛рдВрдХрд┐рдд рдХрд░рддрд╛ рд╣реВрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреА рдХрдВрдкрдиреА рдХреА рдкрд░рдВрдкрд░рд╛ рд╣реИ
[рдХрд╕реНрдЯрдо рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд▓рдкреЗрдЯреЗрдВ]
рдЬрд┐рд╕реЗ рдЯреНрд░рд╛рдЗрд╣рд╛рд░реНрдб рджреНрд╡рд╛рд░рд╛ рд░рд┐рдкреЛрд░реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдпрд╣реА рдмрд╛рдд рд╣реИ - try рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗрд╡рд▓ if err != nil return err рдирдЧреНрди рд░рд┐рдЯрд░реНрди рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдХрд╕реНрдЯрдо рд╕рдВрджреЗрд╢ рдФрд░ рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рд░реИрдкрд┐рдВрдЧ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рд╕рдЪ рд╣реИ, рдореИрдВ рдЙрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдЬрд┐рд╕рдиреЗ рдПрдХ рд╡рд░реНрдгрдирд╛рддреНрдордХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдереАред рд╣рдорд╛рд░реЗ рддреНрд░реБрдЯрд┐ рд░рд┐рдЯрд░реНрди рдХрд╛ рд╡рд┐рд╢рд╛рд▓ рдмрд╣реБрдордд (~4000/4500) рдПрдХ рдЧреИрд░-рд╕рдВрджрд░реНрдн errgo.Mask(err) , рдЬрд┐рд╕реЗ рдореИрдВ рдмрд┐рдирд╛ рд╡рд┐рд╡рд░рдг try() рдмрд░рд╛рдмрд░ рдорд╛рди рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ рдХрдореА рд╣реЛрдЧреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдмрд╛рдж рд╕реЗ errgo рд╕реНрдЯреИрдХ рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░рддрд╛ (рдЕрднреА рддрдХ)ред

@ianlancetaylor рдпрд╣рд╛рдБ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИред @miekg рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЖрдк рд╣рдорд╛рд░реА рднрд╛рд╖рд╛ рдХреЗ рдиреЗрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ if err != nil рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдореВрд▓ рдЧреЛ рд▓реЗрдЦрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рддрдп рдХрд┐рдП рдЧрдП рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреА рднрд╛рд╡рдирд╛ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдЕрдиреНрдп рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ golang-nuts рд▓реЗ рдЬрд╛рдХрд░ рдЗрд╕рдХреЗ рдорд╣рддреНрд╡ рдкрд░ рдЬреЛрд░ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдЖрдкрдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рднрд╛рд╡ рд╣реИред

рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХрд╛ рд╣рдорд╛рд░рд╛ рддрд░реАрдХрд╛ рдЕрджреНрд╡рд┐рддреАрдп рд╣реИ, рдФрд░ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрддреНрдпрдзрд┐рдХ рдореВрд▓реНрдпрд╡рд░реНрдзрди рд╣реИред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрджрд▓ рдЧрдпрд╛ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ рд╕реЛрдЪрддрд╛ рд╣реВрдВ, рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдореИрдВ рдПрдХ рдордЬрдмреВрдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЗрдВрдЬреАрдирд┐рдпрд░ рдмрди рдЧрдпрд╛ред рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рд╣рдо рдЕрдзрд┐рдХ рдЧреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд╣рд┐рдд рдореЗрдВ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЕрд▓реНрдкрд╕рдВрдЦреНрдпрдХ, рдпрд╛ рдмрд╛рд╣рд░реА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднрдЯрдХреЗрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХреБрдЫ рдЪреАрдЬреЛрдВ рдкрд░ рд╕рдЦреНрдд рд░реБрдЦ рдЕрдкрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрдирддреЗ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЛрдб рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЛ рдмрдВрдж рдХрд░рдХреЗ рд╣рдореЗрдВ рдмреЗрд╣рддрд░ рдмрдирд╛рддрд╛ рд╣реИред

рдпрд╣ Google рдХреЗ рдЕрдВрджрд░ рдХреА рдЯреАрдо рдХреЗ рд▓рд┐рдП рд╕рдореБрджрд╛рдп рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдФрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдмрдирд╛рдиреЗ рдХрд╛, рдпрд╛ рдЙрд╕ рдкрде рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХрд╛ рдПрдХ рдЕрд╡рд╕рд░ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣реИрдВ рдЬреЛ рднрд╛рд╖рд╛, рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдпрд╛ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред

рдореИрдВ рдкреВрдЫрддрд╛ рд╣реВрдВ рдХрд┐ рдЧреЛ рдЯреАрдо рдЕрдиреНрдп рдЕрд╕рдВрдмрдВрдзрд┐рдд рднрд╛рд╖рд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реБрдП рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ, рдЬреЛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдореВрд▓реНрдп рд╡рд░реНрдзрд┐рдд рд╣реИрдВред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЯреНрд░реИрдХрд░ рдореЗрдВ рдереНрд░реЗрдбрд┐рдВрдЧ рди рд╣реЛ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕ рдмрд╛рдд рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реЛрдЧреА рдХрд┐ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдХреНрд╖рдорддрд╛ рдореЗрдВ рдЬрд╡рд╛рдм рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ Google рд╕рдореВрд╣ рдореЗрдВ рдирд╣реАрдВ рд▓рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рдЪреБрдкрдЪрд╛рдк рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдореЗрдВ рдлреАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Google рд╕рдореВрд╣ рдкрд░ рднреА рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рдЪреБрдХреА рд╣реИред

#32437 рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдЕрд╕рдВрддреЛрд╖рдЬрдирдХ рд╣реИред рдХреЛрд╢рд┐рд╢ () рдмрд┐рд▓реНрдЯрд┐рди рдЕрдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдЖрдВрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдирд┐рд╖реНрдкрд╛рджрди рдкрде рдЫреБрдкрд╛рддрд╛ рд╣реИред рдЪреЗрдХ рдФрд░ рд╣реИрдВрдбрд▓ рд╡рд╛рд▓рд╛ рдореВрд▓ рдкреНрд░рд╕реНрддрд╛рд╡ рдмрд╣реБрдд рд╣реА рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдерд╛ рдФрд░ рдЪреЗрдХ рдХреАрд╡рд░реНрдб рд╕рдмрд╕реЗ рдЕрд▓рдЧ рдерд╛ред

рдЕрдм, try() рдмрд┐рд▓рд┐рди рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ - рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рд╣рдореЗрдВ рднреА рдШрдмрд░рд╛рд╣рдЯ рд╣реЛрддреА рд╣реИ (), рд▓реЗрдХрд┐рди рдпрд╣ (рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ) рд╣рдореЗрд╢рд╛ рдЕрдкрдиреА рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╣реИ, рдЗрд╕рдХрд╛ рдПрдХ рдкреНрд░рдореБрдЦ рдирд╛рдо рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рджреБрд░реНрд▓рдн рд╣реИред рдХреЛрд╢рд┐рд╢ () рджреВрд╕рд░реА рдУрд░, рдПрдХ рдЬрдЯрд┐рд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдЕрдВрджрд░ рдЫрд┐рдкрд╛ рд╕рдХрддрд╛ рд╣реИред

@theckman рд░реЙрдмрд░реНрдЯ рдиреЗ рд░реЙрдм рдФрд░ рдХреЗрди рдХреЗ рд╕рд╛рде рдЧреЛ рдХреЗ рдкрд╣рд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рд░реЙрдмрд░реНрдЯ рдФрд░ рд░рд╕ рдЬрд▓реНрджреА рдЯреАрдо рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рдЧрдП рд╣реИрдВред рд╡реЗ рдЧреЛ рдкрд░ рд╢реБрд░реВ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЙрди рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдкреНрд░рд╕реНрддрд╛рд╡ "рдореВрд▓ рдЧреЛ рд▓реЗрдЦрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рддрдп рдХрд┐рдП рдЧрдП рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреА рднрд╛рд╡рдирд╛ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ"ред

рдореИрдВ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдирд╛рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛ рд░реЛрдХ рджреЗрдЧрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдЬ рд╣реИред рдРрд╕рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рднреА рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдкрд░ рд░реЛрдХ рд▓рдЧрд╛рдПрдЧрд╛ред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВ рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ? рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЪреЗрдХ/рд╣реИрдВрдбрд▓ рдкреНрд░рд╕реНрддрд╛рд╡ рдерд╛ред рд▓реЗрдХрд┐рди рдХреБрдЫ рдХрдорд┐рдпреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИред рдпрд╣ рдкреНрд░рдпрд╛рд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛ред рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреА рдХреБрдЫ рдХрдорд┐рдпреЛрдВ рдкрд░ рдЕрдм рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдФрд░, рдмреЗрд╣рддрд░ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдП, рдЬрдм рддрдХ рдХрд┐ рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рди рдорд┐рд▓ рдЬрд╛рдПред

рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХрд╛ рд╣рдорд╛рд░рд╛ рддрд░реАрдХрд╛ рдЕрджреНрд╡рд┐рддреАрдп рд╣реИ

рд░рд╕реНрдЯ рдореЗрдВ рдПрд░рд░ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЧреЛ рдореЗрдВ рд╣рдо рдЬреЛ рдХрд░рддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рд╕рдорд╛рди рд╣реИ (рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдорд╛рди рд╣реИрдВ, рд╕реНрдкрд╖реНрдЯ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЬрдм рд╣рдо рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдпреЛрдЧ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдХрдИ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ)ред рд░рд╕реНрдЯ рдореЗрдВ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рдереА рдЬреЛ рдЧреЛ рд╡рд░реНрдмреЛрдЬрд╝ рдПрд░рд░ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдереАред рдЗрд╕рдиреЗ рд░рд╕реНрдЯ рдХреЛ рдХреЛрд╢рд┐рд╢ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛! рдореИрдХреНрд░реЛ, рдФрд░ рдЕрдВрддрддрдГ ? рдСрдкрд░реЗрдЯрд░ред рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд░рд╕реНрдЯ рд╕рдореБрджрд╛рдп рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЧреЛ рд╕рдореБрджрд╛рдп рд╕реЗ рднреА рдЕрдзрд┐рдХ рд╕рдЦреНрдд рд╣реИ (рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди RFC рдФрд░ рдЪрд░реНрдЪрд╛рдПрдВ рдЬреНрдЮрд╛рдирд╡рд░реНрдзрдХ рд╣реИрдВ)ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдЦрд░рд╛рдм рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреА рдлрд┐рд╕рд▓рди рдврд▓рд╛рди рдХреЗ рдмрд┐рдирд╛ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЦреЛрдЬ рд▓рд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд╣рдо рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдо рдЬрд┐рд╕ рдкреНрд░рдХреНрд╖реЗрдк рдкрде рдкрд░ рд╣реИрдВ, рд╡рд╣ рднрд╛рд╖рд╛, рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдпрд╛ рдЙрд╕рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ

рддреБрдореНрд╣рд╛рд░реА рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмреЛрд▓рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдереА? рдЧреЛ рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рд╕реБрдзрд╛рд░ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдЗрддрдиреА рдорд╣рд╛рди рднрд╛рд╖рд╛, рдЯреВрд▓рд┐рдВрдЧ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рддрдХ рдореБрдлреНрдд рдореЗрдВ рдкрд╣реБрдВрдЪрдирд╛ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдореБрдХреНрдд рднрд╛рд╖рдг рдореЗрдВ)ред

@theckman рд░реЙрдмрд░реНрдЯ рдиреЗ рд░реЙрдм рдФрд░ рдХреЗрди рдХреЗ рд╕рд╛рде рдЧреЛ рдХреЗ рдкрд╣рд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рд░реЙрдмрд░реНрдЯ рдФрд░ рд░рд╕ рдЬрд▓реНрджреА рдЯреАрдо рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рдЧрдП рд╣реИрдВред рд╡реЗ рдЧреЛ рдкрд░ рд╢реБрд░реВ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЙрди рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдкреНрд░рд╕реНрддрд╛рд╡ "рдореВрд▓ рдЧреЛ рд▓реЗрдЦрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рддрдп рдХрд┐рдП рдЧрдП рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреА рднрд╛рд╡рдирд╛ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ"ред

рдореИрдВ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдирд╛рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛ рд░реЛрдХ рджреЗрдЧрд╛ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдЬ рд╣реИред рдРрд╕рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рднреА рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдкрд░ рд░реЛрдХ рд▓рдЧрд╛рдПрдЧрд╛ред

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВ рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ? рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЪреЗрдХ/рд╣реИрдВрдбрд▓ рдкреНрд░рд╕реНрддрд╛рд╡ рдерд╛ред рд▓реЗрдХрд┐рди рдХреБрдЫ рдХрдорд┐рдпреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИред рдпрд╣ рдкреНрд░рдпрд╛рд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛ред рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреА рдХреБрдЫ рдХрдорд┐рдпреЛрдВ рдкрд░ рдЕрдм рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдФрд░, рдмреЗрд╣рддрд░ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдП, рдЬрдм рддрдХ рдХрд┐ рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рди рдорд┐рд▓ рдЬрд╛рдПред

рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХрд╛ рд╣рдорд╛рд░рд╛ рддрд░реАрдХрд╛ рдЕрджреНрд╡рд┐рддреАрдп рд╣реИ

рд░рд╕реНрдЯ рдореЗрдВ рдПрд░рд░ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЧреЛ рдореЗрдВ рд╣рдо рдЬреЛ рдХрд░рддреЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рд╕рдорд╛рди рд╣реИ (рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдорд╛рди рд╣реИрдВ, рд╕реНрдкрд╖реНрдЯ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЬрдм рд╣рдо рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдпреЛрдЧ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдХрдИ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ)ред рд░рд╕реНрдЯ рдореЗрдВ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рдереА рдЬреЛ рдЧреЛ рд╡рд░реНрдмреЛрдЬрд╝ рдПрд░рд░ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдереАред рдЗрд╕рдиреЗ рд░рд╕реНрдЯ рдХреЛ рдХреЛрд╢рд┐рд╢ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛! рдореИрдХреНрд░реЛ, рдФрд░ рдЕрдВрддрддрдГ ? рдСрдкрд░реЗрдЯрд░ред рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд░рд╕реНрдЯ рд╕рдореБрджрд╛рдп рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЧреЛ рд╕рдореБрджрд╛рдп рд╕реЗ рднреА рдЕрдзрд┐рдХ рд╕рдЦреНрдд рд╣реИ (рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди RFC рдФрд░ рдЪрд░реНрдЪрд╛рдПрдВ рдЬреНрдЮрд╛рдирд╡рд░реНрдзрдХ рд╣реИрдВ)ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдЦрд░рд╛рдм рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреА рдлрд┐рд╕рд▓рди рдврд▓рд╛рди рдХреЗ рдмрд┐рдирд╛ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЦреЛрдЬ рд▓рд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд╣рдо рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдо рдЬрд┐рд╕ рдкреНрд░рдХреНрд╖реЗрдк рдкрде рдкрд░ рд╣реИрдВ, рд╡рд╣ рднрд╛рд╖рд╛, рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдпрд╛ рдЙрд╕рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ

рддреБрдореНрд╣рд╛рд░реА рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмреЛрд▓рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдереА? рдЧреЛ рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рд╕реБрдзрд╛рд░ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдЗрддрдиреА рдорд╣рд╛рди рднрд╛рд╖рд╛, рдЯреВрд▓рд┐рдВрдЧ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рддрдХ рдореБрдлреНрдд рдореЗрдВ рдкрд╣реБрдВрдЪрдирд╛ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдореБрдХреНрдд рднрд╛рд╖рдг рдореЗрдВ)ред

рд░рд╕реНрдЯ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдкреАрдЫреЗ рдХреЗ рджреЛрд╕реНрддреЛрдВ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рдерд╛ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЙрдиреНрд╣реЛрдВрдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рд╣рд╛рд╕реНрдХреЗрд▓ рд╕реЗ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдИ, рд▓реЗрдХрд┐рди рдпреЗ рдЕрдирд┐рд╡рд╛рд░реНрдп (рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛?) рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдореЗрд▓ рдирд╣реАрдВ рд╣реИрдВред рдЙрдирдХрд╛ ? рдореИрдХреНрд░реЛ рд╢реБрд░реВ рдореЗрдВ рд╡рд┐рдлрд▓ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИред

@ianlancetaylor рдпрд╣рд╛рдБ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИред @miekg рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЖрдк рд╣рдорд╛рд░реА рднрд╛рд╖рд╛ рдХреЗ рдиреЗрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ if err != nil рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдореВрд▓ рдЧреЛ рд▓реЗрдЦрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рддрдп рдХрд┐рдП рдЧрдП рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреА рднрд╛рд╡рдирд╛ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдЕрдиреНрдп рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕реЗ golang-nuts рд▓реЗ рдЬрд╛рдХрд░ рдЗрд╕рдХреЗ рдорд╣рддреНрд╡ рдкрд░ рдЬреЛрд░ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдЖрдкрдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рднрд╛рд╡ рд╣реИред

рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХрд╛ рд╣рдорд╛рд░рд╛ рддрд░реАрдХрд╛ рдЕрджреНрд╡рд┐рддреАрдп рд╣реИ, рдФрд░ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрддреНрдпрдзрд┐рдХ рдореВрд▓реНрдпрд╡рд░реНрдзрди рд╣реИред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрджрд▓ рдЧрдпрд╛ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ рд╕реЛрдЪрддрд╛ рд╣реВрдВ, рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдореИрдВ рдПрдХ рдордЬрдмреВрдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЗрдВрдЬреАрдирд┐рдпрд░ рдмрди рдЧрдпрд╛ред рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рд╣рдо рдЕрдзрд┐рдХ рдЧреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд╣рд┐рдд рдореЗрдВ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЕрд▓реНрдкрд╕рдВрдЦреНрдпрдХ, рдпрд╛ рдмрд╛рд╣рд░реА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднрдЯрдХреЗрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХреБрдЫ рдЪреАрдЬреЛрдВ рдкрд░ рд╕рдЦреНрдд рд░реБрдЦ рдЕрдкрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрдирддреЗ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЛрдб рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЛ рдмрдВрдж рдХрд░рдХреЗ рд╣рдореЗрдВ рдмреЗрд╣рддрд░ рдмрдирд╛рддрд╛ рд╣реИред

рдпрд╣ Google рдХреЗ рдЕрдВрджрд░ рдХреА рдЯреАрдо рдХреЗ рд▓рд┐рдП рд╕рдореБрджрд╛рдп рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдФрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдмрдирд╛рдиреЗ рдХрд╛, рдпрд╛ рдЙрд╕ рдкрде рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХрд╛ рдПрдХ рдЕрд╡рд╕рд░ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣реИрдВ рдЬреЛ рднрд╛рд╖рд╛, рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдпрд╛ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред

рдореИрдВ рдкреВрдЫрддрд╛ рд╣реВрдВ рдХрд┐ рдЧреЛ рдЯреАрдо рдЕрдиреНрдп рдЕрд╕рдВрдмрдВрдзрд┐рдд рднрд╛рд╖рд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реБрдП рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ, рдЬреЛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдореВрд▓реНрдп рд╡рд░реНрдзрд┐рдд рд╣реИрдВред

рд╡реЗ 60 рдХреЗ рджрд╢рдХ рд╕реЗ рд╡рд░реНрддрдорд╛рди рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдЧрдВрднреАрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЙрдиреНрд╣реЗрдВ рдЕрдВрддрддрдГ рдЕрдкрдиреЗ рдЧреЛ 2.0 . рдореЗрдВ 80 рдХреЗ рджрд╢рдХ рдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЙрдзрд╛рд░ рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рддреБрдореНрд╣рд╛рд░реА рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмреЛрд▓рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдереА? рдЧреЛ рдореЗрдВ рд▓рдЧрд╛рддрд╛рд░ рд╕реБрдзрд╛рд░ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдЗрддрдиреА рдорд╣рд╛рди рднрд╛рд╖рд╛, рдЯреВрд▓рд┐рдВрдЧ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рддрдХ рдореБрдлреНрдд рдореЗрдВ рдкрд╣реБрдВрдЪрдирд╛ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдореБрдХреНрдд рднрд╛рд╖рдг рдореЗрдВ)ред

@ngrilly рдХрд┐ рдЕрдВрддрд┐рдо рднрд╛рдЧ рд╢рд╛рдпрдж рдПрдХ рдмрдбрд╝реА рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рд╣реИред рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдкрдЯрд░реА рд╕реЗ рдЙрддрд╛рд░реЗ рдмрд┐рдирд╛, рд▓реЗрдХрд┐рди рдЙрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдХреБрдЫ рд╣рдж рддрдХ рдмрдВрдж рдХрд░рдХреЗ, рд╕рдореБрджрд╛рдп/рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рдиреЗрддреГрддреНрд╡ рдХреЗ рдмреАрдЪ рдЧрд▓рдд рд╕рдВрд░реЗрдЦрдг рдХреА рднрд╛рд╡рдирд╛ рдмрдврд╝ рд░рд╣реА рд╣реИред

рдмрд╛рдХреА рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рдЙрдкрд░рд┐ рдЬреЛрдбрд╝рдирд╛ рдПрдХ рдЬреАрдд рд╣реИред рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдорд┐рд▓рд╛ рдЬрд┐рд╕рдиреЗ рдЙрдирдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛, рд╣рдо рд╡реЗ рдирд╣реАрдВ рд╣реИрдВред

рдореИрдВрдиреЗ рдЗрдирд▓рд╛рдЗрди рдЗрдл рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЕрднреА рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдЦреЛрд▓рд╛ рд╣реИ: https://github.com/golang/go/issues/32860

рд╕рдВрджрд░реНрдн: https://github.com/golang/go/issues/32825#issuecomment -506707539

рдпрд╣ рджреБрдирд┐рдпрд╛ рдХрд┐рддрдиреА рдЕрдЪреНрдЫреА рд╣реЛ рдЬрд╛рдПрдЧреА рдпрджрд┐ рд╣рд░ рдХреЛрдИ рдЕрдкрдирд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЬреЛ рднреА рдирдпрд╛ рдЧреЛрд▓рдВрдЧ 2.0 рдлреАрдЪрд░ рд╡реЗ рдмрд╕ рдЗрддрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ, рд╡рд╣ https://github.com/golang/go рдХреЗ рдЕрдкрдиреЗ рдХрд╛рдВрдЯреЗ рдХреА рдПрдХ рд╢рд╛рдЦрд╛ рднреА рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ (рдФрд░ рдЬреЛ рдХреБрдЫ рднреА рдЕрдиреНрдп рдЖрд╡рд╢реНрдпрдХ рднрдВрдбрд╛рд░) рдЬреЛ рдЙрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдк рд╕рд╣рдордд рдирд╣реАрдВ рд╣реИрдВ?

@ av86743 рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд▓рдЧрддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдЙрд╕ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реБрдП рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд╛рдЦрд┐рд▓ рдХрд░реЗрдВред

рдореБрдЭреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЪреБрдиреМрддреА рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рд╕реА рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЗрд╕реЗ рдареБрдХрд░рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡реНрдпрд░реНрде рдкреНрд░рдпрд╛рд╕ рдХрд╛ рдЬреЛрдЦрд┐рдоред рдлрд┐рд░ рдЖрдкрдиреЗ рд╡рд╣ рд╕рд╛рд░рд╛ рд╕рдордп рдПрдХ рдХрд╛рдВрдЯреЗ рдкрд░ рдмрд┐рддрд╛рдпрд╛ рдЬрд┐рд╕рдХреА рд╕рдореАрдХреНрд╖рд╛ рднреА рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреАред

рдЗрд╕ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ:

# call error handler
try callFunction(), errorHandler()

# error handler with anonymous function
variable := try callSomething(), func(err *Error) { # error handling }

@theckman рдореИрдВ рдорд╛рдлреА рдорд╛рдБрдЧрддрд╛ рд╣реВрдБ рдЕрдЧрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЛ рдХрд╣реАрдВ рдФрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рдореЗрд░реЗ рд╕реБрдЭрд╛рд╡ рд╕реЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорд╣рддреНрд╡рд╣реАрди рд╣реИред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЕрдкрдиреЗ рдХрд╛рд░рдг рдмрддрд╛рдП, рдФрд░ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рд╡реЗ рдЕрднреА рднреА рдХрд╛рдпрдо рд╣реИрдВред рдЧреЛ рдЯреАрдо рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдЪрд░реНрдЪрд╛рдУрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░рддреА рд╣реИред

рдЪреВрдВрдХрд┐ рдЖрдк "рдореВрд▓ рдЧреЛ рд▓реЗрдЦрдХ" рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ "рдХреЛрд╢рд┐рд╢" рдкреНрд░рд╕реНрддрд╛рд╡ @griesemer рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рддреАрди рдореВрд▓ рдЧреЛ рд▓реЗрдЦрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред

рдореИрдВ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ рджреГрдврд╝рддрд╛ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдмрд╕ рдЬрд╛рдУ fmt, рдПрдХ рд▓рд╛рдЗрди рдЗрдл рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП fmt рдХрд░реЗрдВред

рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдЪрд╛рд╣рд┐рдП

if err != nil { return wrappedErr{err} }

рдХреА рддреАрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдмрдЬрд╛рдп

if err != nil {
    return wrappedErr{err}
}

@ av86743 рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд▓рдЧрддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдЙрд╕ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реБрдП рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд╛рдЦрд┐рд▓ рдХрд░реЗрдВред

@theckman рдЖрдк рдореБрдЭреЗ рдмрддрд╛ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕рд┐рд░реНрдл рд╡рд┐рдирдореНрд░ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рдХрдареЛрд░ рд╣реИред рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЪреБрдирдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рди рддреЛ рдореИрдВ рдФрд░ рди рд╣реА, рд╕рдВрднрд╡рддрдГ, рдпрд╣рд╛рдВ рдХреЛрдИ рдФрд░ рдЖрдкрдХрд╛ "рдЧреЛ рдлрд╝реЗрдЪ" рдмрдВрджрд░ рд╣реИ рдЬрдм рдЖрдк рдРрд╕рд╛ рдХрд╣рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЪреБрдиреМрддреА рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рд╕реА рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЗрд╕реЗ рдареБрдХрд░рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡реНрдпрд░реНрде рдкреНрд░рдпрд╛рд╕ рдХрд╛ рдЬреЛрдЦрд┐рдоред рдлрд┐рд░ рдЖрдкрдиреЗ рд╡рд╣ рд╕рд╛рд░рд╛ рд╕рдордп рдПрдХ рдХрд╛рдВрдЯреЗ рдкрд░ рдмрд┐рддрд╛рдпрд╛ рдЬрд┐рд╕рдХреА рд╕рдореАрдХреНрд╖рд╛ рднреА рдирд╣реАрдВ рдХреА рдЬрд╛рдПрдЧреАред

рдпрд╣ рдХреЗрд╡рд▓ [... _рд╡рд┐рд╡рд░рдг рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛_ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝реА рдЧрдИ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреБрдХреНрдд рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ "рд╡реНрдпрд░реНрде рдкреНрд░рдпрд╛рд╕" рд╣реЛрдЧрд╛ред

рдПрдХ рдХреЛрдбрд░ рдХреЗ рд▓рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдПрдХ рдорд╛рдореВрд▓реА, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧреА рдЕрднреНрдпрд╛рд╕ рд╣реЛрдЧрд╛ рдФрд░ рд╕рд╛рде рд╣реА, рдЧреЛ рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрд╡рд╛ рд╣реЛрдЧреАред

@ av86743 рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЬреЛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдЪрд╛рд░ рд╣реИ рдФрд░ рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЕрд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЗ рдореЗрдВ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдЦреЛ рдЬрд╛рдПред рдпрджрд┐ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдХреНрд╖рдорддрд╛ рдореЗрдВ рдЗрд╕реЗ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рдЖрдкрдХреА рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕ рдмрд╛рдд рдХреА рд╡рдХрд╛рд▓рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдЙрдард╛рддреЗ рд╣реИрдВред

рднрд▓реЗ рд╣реА рдпрд╣ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рд╕реНрддрд╛рд╡ @griesemer рд╕реЗ рдЖрддрд╛ рд╣реИ, рдореБрдЭреЗ рдпрд╣ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рдирд╛ рдХрдард┐рди рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣

рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдХреНрдпрд╛ рд╣реИ, рдореЗрд░рд╛ рдирд┐рдЬреА рд╕рдВрджреЗрд╣ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ рдЧреЛ рдЯреАрдо рдХреА рддрд░реНрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

  1. рдЧреЛ рдмреЗрд╣рдж рд▓реЛрдХрдкреНрд░рд┐рдп рдФрд░ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдЬрд╛рд░реЛрдВ рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ, рд╕реБрдЭрд╛рд╡ рдФрд░ рд╢рд┐рдХрд╛рдпрддреЗрдВ рд╣реИрдВред
  2. рдЖрдк рдХреЗрд╡рд▓ рдЗрддрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдкрддреНрдерд░рдмрд╛рдЬреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЧреЛ рдЯреАрдо рд╕рдореБрджрд╛рдп рдХреЗ рд╕рднреА рд╢реЛрд░-рд╢рд░рд╛рдмреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рд░реА рджрдмрд╛рд╡ рдореЗрдВ рдорд╣рд╕реВрд╕ рдХрд░рддреА рд╣реИред
  3. рдпрд╣ рд╣реБрдИ рди рдмрд╛рддред

рдХреИрд╕реЗ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрдХрдбрд╝ () рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЧрд░ рдХреЛрд╢рд┐рд╢ рдХреЛ рдХреБрдЫ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА рдЬреИрд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ ()ред
рдЙрджрд╛рд╣рд░рдг:

func doSomthing()(err error){
    //return error
}

func main(){
    defer func(){
        if err:=catch();err!=nil{
            //found error
        }
    }()

    try doSomthing()
}

рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдкрд░

func Foo() (err error) {
    defer func(){
        if err:=catch();err!=nil{
            //found error
        }
    }()

   try{
    file1 := open("file1")
    defer file1.Close()
    file2 := open("file2")
    defer file2.Close()
   }
   //without try
    file3,err := open("file3")
    defer file3.Close()
 }

рдХреИрд╕реЗ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрдХрдбрд╝ () рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЧрд░ рдХреЛрд╢рд┐рд╢ рдХреЛ рдХреБрдЫ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА рдЬреИрд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ ()ред
рдЙрджрд╛рд╣рд░рдг:

func doSomthing()(err error){
    //return error
}

func main(){
    defer func(){
        if err:=catch();err!=nil{
            //found error
        }
    }()

    try doSomthing()
}

рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдкрд░

func Foo() (err error) {
    defer func(){
        if err:=catch();err!=nil{
            //found error
        }
    }()

   try{
  file1 := open("file1")
  defer file1.Close()
  file2 := open("file2")
  defer file2.Close()
   }
   //without try
    file3,err := open("file3")
    defer file3.Close()
 }

рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рдХреИрд╕реЗ рдорджрдж рдХрд░рддрд╛ рд╣реИ?

рдХреБрдЫ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:

  1. try рдкреНрд░рд╕реНрддрд╛рд╡ рди рддреЛ рдирдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ рдФрд░ рди рд╣реА рдПрдХ рдирдпрд╛ рдХреАрд╡рд░реНрдб, рдЬреЛ рдХреБрдЫ рд▓реЛрдЧ рдЗрд╕ рдереНрд░реЗрдб рдкрд░ рджрд╛рд╡рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдирдП рдмрд┐рд▓реНрдЯ-рдЗрди рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ, рд╕рдмрд╕реЗ рдиреНрдпреВрдирддрдо рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЛ рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддреЗ рд╕рдордп рд╕рдЯреАрдХ рд░рд╣реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рдирдпрд╛ рдХреАрд╡рд░реНрдб рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдмрд┐рд▓реНрдЯ-рдЗрди рдХреЗ рдмреАрдЪ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдЕрдВрддрд░ рд╣реИред рдкрд╣рд▓рд╛ рдПрдХ рдмрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рд╣реИ, рдмрд╛рдж рд╡рд╛рд▓рд╛ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡ рд╣реИред try рдкреНрд░рд╕реНрддрд╛рд╡ рдЬреЛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рд╡рд╣ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдорд╛рдореВрд▓реА рдЬреЛрдбрд╝ рд╣реИред

  2. рдореИрдВ @ianlancetaylor рд╕реЗ рд╕рд╣рдордд

  3. рджрд░рдЕрд╕рд▓, @bitfield , рдореЗрд░реЗ рдкрд╛рд╕ рд╢реВрдиреНрдп " рдЧреЛ рдореЗрдВ рдЕрд▓рд┐рдЦрд┐рдд рддреНрд░реБрдЯрд┐ рд░рд┐рдЯрд░реНрди рдХреА рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рдХреНрд░реЛрдз" рд╣реИ , рдзрдиреНрдпрд╡рд╛рдж :-) рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдЬрд╛рдВрдЪ рдЕрдзрд┐рдХ рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╣реИ рдЬреЛ рд╢рд╛рдпрдж рдЖрд╡рд╢реНрдпрдХ рд╣реИ; рдФрд░ рдпрд╣ рддрдереНрдп рдХрд┐ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рдмрд╛рд░-рдмрд╛рд░ рдЗрд╕реА рднрд╛рд╡рдирд╛ рдХреЛ рд╕рд╛рдордиреЗ рд▓рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреЗрддрдХ рд╣реИ рдХрд┐ рд╣рдо (рдЧреЛ рдЯреАрдо) рдЗрд╕ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреЗ рд╕рд╛рде рдЕрдХреЗрд▓реЗ рдирд╣реАрдВ рд╣реИрдВред рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ "рдХреБрдЫ" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рджрдмрд╛рд╡ рд╣реИ - рд╣рдо рдЗрд╕ рдкрд░ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рд╣рдо "рд╕рд╣реА" рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕рдВрддреБрд╖реНрдЯ рд╣реИрдВ .

try рдкреНрд░рд╕реНрддрд╛рд╡ рд╕рдмрд╕реЗ рдХрдо рд╕реЗ рдХрдо рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдЬреЛ рд╣рдордиреЗ рдкрд╛рдпрд╛ рд╣реИ (рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рдпреЛрдЧрджрд╛рди рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд╕рд╛рде) рдЬреЛ рддреНрд░реБрдЯрд┐ рдЬрд╛рдВрдЪ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИред try рдкреНрд░рд╕реНрддрд╛рд╡ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ рддреНрд░реБрдЯрд┐ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрд░реАрдХреЗ рд╕реЗ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рддреЛ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред try рдХреЗрд╡рд▓ рддрднреА рдорджрдж рдХрд░рддрд╛ рд╣реИ рдЬрдм рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдФрд░ рдлрд┐рд░ рд╣рдо defer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ), рдпрд╛ рдЬрдм рд╡реЗ рдмрд╕ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдХрдард┐рди рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдЬреЛ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдЙрд╕реЗ рджреЛрд╣рд░рд╛рдПрдВ: try рд╕рднреА рддреНрд░реБрдЯрд┐ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдЕрдиреНрдп рд╕рднреА рдЪреАрдЬрд╝реЛрдВ рдХреЗ рд▓рд┐рдП, if рдХрдердиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

@griesemer рдХреЛрд╢рд┐рд╢ рдмрд╣реБрдд рддреНрд░реБрдЯрд┐ рдкреНрд░рд╡рдг рд╣реИ: рдЧреЛ рдореЗрдВ рдХреЛрдИ

@ рд╕рд┐рд░рдХреЙрди , рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ try if ..., err := f(); err != nil { return ..., err } рдореМрдЬреВрджрд╛ рдкреИрдЯрд░реНрди рдХреЛ ... := try(f()) ред рдпрджрд┐ try рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдИ рд╕рдВрд╕рд╛рдзрди рдореБрдХреНрдд рдмрдЧ рдерд╛, рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рднреА рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдерд╛ред try рдХреА рд╢реБрд░реВрдЖрдд рди рддреЛ рд╕рдВрд╕рд╛рдзрди рдореБрдХреНрдд рдмрдЧ рдХреЛ рдмрдврд╝рд╛рддреА рд╣реИ рдФрд░ рди рд╣реА рд░реЛрдХрддреА рд╣реИред

@ рд╕рд┐рд░рдХреЙрди , рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ try if ..., err := f(); err != nil { return ..., err } рдореМрдЬреВрджрд╛ рдкреИрдЯрд░реНрди рдХреЛ ... := try(f()) ред рдпрджрд┐ try рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдИ рд╕рдВрд╕рд╛рдзрди рдореБрдХреНрдд рдмрдЧ рдерд╛, рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рднреА рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдерд╛ред try рдХреА рд╢реБрд░реВрдЖрдд рди рддреЛ рд╕рдВрд╕рд╛рдзрди рдореБрдХреНрдд рдмрдЧ рдХреЛ рдмрдврд╝рд╛рддреА рд╣реИ рдФрд░ рди рд╣реА рд░реЛрдХрддреА рд╣реИред

рдзрд╛рдЧрд╛ рдкрдврд╝реЗрдВ, рдПрдХ рдЙрджрд╛рд╣рд░рдг рдерд╛:

info := try(try(os.Open(fileName)).Stat())

@ рд╕рд┐рд░реНрдХреЛрди рдореИрдВрдиреЗ рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдХрдИ рдмрд╛рд░ рджреЗрдЦрд╛ рд╣реИред рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рд▓реЗрдХрд┐рди рдЖрдЗрдП рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рд╕реЛрдЪреЗрдВред рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд try рдмрд┐рд▓реНрдЯрд┐рди рдореВрд▓ рд░реВрдк рд╕реЗ рдЧреЛ рдХреЛрдб рдореЗрдВ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рдЪреАрдиреА рд╣реИред рддреЛ рд╣рдо рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдореВрд▓ рдХреЛрдб рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

    f, err := os.Open(fileName)
    if err != nil {
        return err
    }
    info, err := f.Stat()
    if err != nil {
        return err
    }

рдЙрд╕ рдХреЛрдб рдореЗрдВ рдПрдХ рд╣реА рдмрдЧ рд╣реИред рдореИрдВрдиреЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХреЛрдб рджреЗрдЦрд╛ рд╣реИред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ try рдмрд┐рд▓реНрдЯрд┐рди рдЙрд╕ рдмрдЧ рдХреЛ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рдпрд╛ рджреЗрдЦрдиреЗ рдореЗрдВ рдХрдард┐рди рдмрдирд╛рддрд╛ рд╣реИред

[рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @ianlancetaylor рдиреЗ рдореБрдЭреЗ рдмрд╕ рд╣рд░рд╛ рджрд┐рдпрд╛ред]

@sirkon рдпрд╣ рдмрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рд╣реИ, try рдпрд╛ рдирд╣реАрдВ - рдЧреЛ рдЖрдкрдХреЛ рдЦрд░рд╛рдм рдХреЛрдб рд▓рд┐рдЦрдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИред рдпрд╛ рдЗрд╕реЗ рдмрджрд▓рдирд╛, рдЦрд░рд╛рдм рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдХрд╛рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпреЛрдВ try рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдПрдХ рдареЛрд╕ рддрд░реНрдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, go vet рдХреЛ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдорд╛рдорд▓реЛрдВ рдХреЛ рдлрд╝реНрд▓реИрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

defer рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╡рд╛рдкрд╕ рдЖрдиреЗ рдкрд░ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреЛ рдореБрд╣рд╛рд╡рд░рд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣реЛрдЧрд╛:

f := try(os.Open(filename))
defer f.Close()
info := try(f.Stat())

рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ:

f, err := os.Open(filename)
if err != nil {
   return ..., err
}
defer f.Close()
info, err := f.Stat()
if err != nil {
   return ..., err
}

try рдХрд░рдХреЗ рд╕реНрд░реЛрдд рдкреНрд░рд╛рдердорд┐рдХ рдЪрд┐рдВрддрд╛ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ: рдлрд╝рд╛рдЗрд▓ рдХреА рдлрд╝рд╛рдЗрд▓ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред рдкрд╛рд░рдВрдкрд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реНрд░реЛрдд рдХреЛрдб рд╕рдВрднрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реИрдВ; рдФрд░ рдпрд╣ рд╕рдм рд╡рд╣реА рд╣реИред рднрд▓реЗ рд╣реА рд╣рдо рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, try рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

defer errd.Wrap(&err, "failed to do X for %s", filename)
f := try(os.Open(filename))
defer f.Close()
info := try(f.Stat())

errd рдкреИрдХреЗрдЬ рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рд╕рдорд╕реНрдпрд╛ #32676 рджреЗрдЦреЗрдВ)ред

@griesemer
рдореЗрд░реА рднрд╡рд┐рд╖реНрдп рдХреА рд╕реНрд╡рдпрдВ рдХреА рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛ рдЕрднреА рднреА рдЪрд┐рд▓реНрд▓рд╛рддреА рд░рд╣рддреА рд╣реИ рдХрд┐ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рддрдВрддреНрд░ рдЕрдкрдиреА рд▓рд╛рдЗрди рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡рд░реНрддрдорд╛рди рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рднреАрддрд░ рд╡реИрдз (рдХреЛрдИ рдкреНрд░рд╡рд░реНрддрди рдирд╣реАрдВ) рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдкрдардиреАрдпрддрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

defer errd.Wrap(&err, "failed to do X for %s", filename)
f, err:= os.Open(filename)
try(err) // check is so much a better term
defer f.Close()
info, err := f.Stat()
try(err)

рд╕рд╛рде рд╣реА, handle рд▓рд┐рдП рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдпрд╣рд╛рдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдПрдХрд╛рдзрд┐рдХ рд╡рд┐рд▓рдВрдм рдЧрдбрд╝рдмрдбрд╝ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ? рдпрд╛ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди-рд╕реНрдХреЛрдкреНрдб рд╕рд┐рдВрдХ рд╣реЛрдЧрд╛ред рдПрдХ рдмрд╛рд░ рдХреА рддрд░рд╣ рдХреА рдмрд╛рдд (рдореБрдЭреЗ рдЧрд▓рдд рдореБрджреНрджреЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛)? рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХреНрдпрд╛ рдЕрдирд╛рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдкрдирд╛ рджрд╛рдпрд░рд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдФрд░ рд╢реИрдбреЛрдЗрдВрдЧ... рдИрд╢ - рдХреМрди рдкрд╣рд▓реЗ рдкрд░ рд╣реИ, рджреВрд╕рд░реЗ рдкрд░ рдХреНрдпрд╛ рд╣реИ?

рдпрд╣ рд╕рдм рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧреЛ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рджреЛ "рдореЛрдб" рд╣реЛрдВрдЧреЗред рдХрд╣реЛ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред

@griesemer рдЬрдм рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЖрдЬ рднреА рдмрдЧ рд╕рдВрднрд╡ рд╣реИ, рдореБрдЭреЗ рджреГрдврд╝рддрд╛ рд╕реЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ try рдХреЗ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдкреНрд░рдЪрд▓рд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдХреЛрдИ рднреА рд▓рдЧрднрдЧ _any_ рд▓реЛрдХрдкреНрд░рд┐рдп рднрд╛рд╖рд╛ рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ ()ред рд╕реЛрдЪред (рд╣реИ) рдЪреЗрдирд┐рдВрдЧ ()ред (рддрд░реАрдХреЗ) рдмреЗрд╣рддрд░ рдпрд╛ рдмреБрд░реЗ рдХреЗ рд▓рд┐рдП рдЙрдирдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпреЗ рд╕рднреА рднрд╛рд╖рд╛рдПрдВ рдЕрдкрдиреЗ-рдЕрдкрдиреЗ рдореБрд╣рд╛рд╡рд░реЗ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВ рдЬреЛ рдкреИрдЯрд░реНрди рдХреЛ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рддреА рд╣реИрдВред рдЙрдиреНрд╣реЛрдВрдиреЗ рдЧреЛ рдХреЗ рд╕рд╛рде рдПрдХ рддрддреНрдХрд╛рд▓ рд░реЛрдб рдмреНрд▓реЙрдХ рдорд╛рд░рд╛ рдХреНрдпреЛрдВрдХрд┐ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдЙрдиреНрд╣реЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рди рдХреЛ рдПрдХ рд╕рд╛рде рд╡рд┐рдлрд▓рддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЙрдЪрд┐рдд рдкреИрдЯрд░реНрди рдирд╣реАрдВ рд╣реИ (рдпрд╛ рдХреЛрд╢рд┐рд╢ рдкреНрд░рд╕реНрддрд╛рд╡ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрдЧрд╛)ред

рдпрджрд┐ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╡реЗ if err рдмреЙрдпрд▓рд░ рдкреНрд▓реЗрдЯ рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдкрд░рд┐рдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓ рдЬрд╛рдПрдЧреАред рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рд╕реНрдЯреИрдХрдУрд╡рд░рдлреНрд▓реЛ рдЙрддреНрддрд░, рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдЖрджрд┐ рдореЗрдВ рд▓рдЧрднрдЧ рдПрдХ рджрд╢рдХ рдХрд╛ рдЧреЛ рдХреЛрдб рд╣реЛрдЧрд╛ рдЬреЛ рдХрд┐ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рд╡реЗ рдЬрд▓реНрджреА рд╕реЗ рдЧрд▓рддреА рдХреЛ рдЫреЛрдбрд╝рдирд╛ рд╕реАрдЦреЗрдВрдЧреЗ рдФрд░ рдХреЛрд╢рд┐рд╢ рдХреЗ рд╕рд╛рде рдмрдпрд╛рди рджреЗрдВрдЧреЗред рд╡реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╡реЗ try рдореЗрдВ рд▓рд┐рдкрдЯреЗ рдХреЛрдб рдХреЛ рдкреЗрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рд╡реЗ рдХреЛрд╢рд┐рд╢ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ Stat() рддрд░рд╣ рдлрд╝реАрд▓реНрдб рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗред рдпрд╣ рдПрдХ рдкреИрдЯрд░реНрди рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╡реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИ рдХрд┐ рд╡реЗ рдЗрд╕реЗ рдЧреЛ рд▓рд┐рдЦрддреЗ рд╕рдордп рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╕рдмрд╕реЗ рд▓рдХреНрд╖рд┐рдд рдЧреЛ рдУрдПрд╕ рд╕рдм рдХреБрдЫ рдПрдХ рдлрд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддрд╛ рд╣реИ, рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рдЙрдЪрд┐рдд рд╣реИ рдХрд┐ рдЕрдзрд┐рдХ рд╕рдВрд╕рд╛рдзрди рд▓реАрдХ рд╣реЛрдВрдЧреЗред

рдЬреЛ рдореБрдЭреЗ рдЗрд╕ рдмрд╛рдд рдкрд░ рд▓рд╛рддрд╛ рд╣реИ рдХрд┐ рдореИрдВ "рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдЬ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ" рдХрдерди рд╕реЗ рдЕрд╕рд╣рдордд рдХреНрдпреЛрдВ рд╣реИрдВ - рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдмрд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЬрд╝рд░реВрд░ - рдЖрдк рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИрдВрдбрд▓ рд▓реАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЧреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рджрд╛рдпрд░реЗ рдореЗрдВ рд░рдЦрдиреЗ рдФрд░ рдЗрд╕ рддрд░рд╣ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓реАрдХ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ f рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╣реИрдВрдбрд▓ рд▓реАрдХ рд╣реЛ рдЧрдпрд╛ рд╣реИред рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ _requires_ рдХрд┐ рдЧреЛ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рдХреБрдЫ рдкреНрд░рдореБрдЦ рдореБрд╣рд╛рд╡рд░реЗ рдЯреВрдЯ рдЧрдП рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░- рдЖрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рдЧрдИ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рд╕реЗ рдЧреЛ рдореЗрдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓реАрдХ рд╣реЛрдиреЗ рдХрд╛ рдЦрддрд░рд╛ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ https://github.com/golang/go/issues/32825#issuecomment -506882164 рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ try рд╕рдорд░реНрдерди рдХрд░реВрдВрдЧрд╛ рдпрджрд┐ рдХреБрдЫ рдЫреЛрдЯреЗ рд╕рдорд╛рдпреЛрдЬрди рдХрд┐рдП рдЧрдП рдереЗ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдПрдХ рд╣реЛрдЧрд╛ рднрд╛рд╖рд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд┐рдпрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рдЖрд░рдПрдЪрдПрд╕ рдкрд░ рдорд╛рдиреНрдп рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреЛ рдкрддрд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рди рд╣реЛрдиреЗ рджрд┐рдпрд╛ рдЬрд╛рдПред рдХреЛрд╢рд┐рд╢ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ "рдЕрдЪреНрдЫреЗ" рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВ (рдкреНрд░рддрд┐ рдкрдВрдХреНрддрд┐ рдПрдХ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ) рдкреНрд░рдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ "рдХреЗрд╡рд▓" рддрд░реАрдХрд╛ рдмрдиреЗрдВ, рдпрд╛рдиреА:

info := try(try(os.Open(filename)).Stat()) // compiler error
f := try(os.Open(filename)) // valid
// we were forced to assign f, so we still have an identifier to Close (serve linters and users alike)
defer f.Close()
info := try(f.Stat())
a, b := try(strconv.Atoi("1")), try(strconv.Atoi("2")) // also valid 
a, b := try(strconv.Atoi("1"), strconv.Atoi("2")) // maybe?
a, b := try strconv.Atoi("1"), strconv.Atoi("2")

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рднрд╛рд╖рд╛ рдореЗрдВ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛, try рд╕рднреА рдореМрдЬреВрджрд╛ рд▓рд╛рднреЛрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦреЗрдВ (рдЙрдиреНрд╣реЗрдВ рдиреЗрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдПрдХ рд▓рд╛рдн рдорд╛рдирддреЗ рд╣реИрдВ) рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХрдореА рдХреЗред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рд╕реЗ рдХрд┐рд╕реА рдХрд╛ рднрд▓рд╛ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рдмрд╣реБрдд рдХрдо рдмрдЪрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреБрд░реБрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрд╕реАрдорд┐рдд рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЖрдЬ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдмреБрд░рд╛ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬреЛ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:

total := try(try(os.Open(filename)).Stat()).Size() + try(strconv.Atoi(try(ioutil.ReadAll(os.Stdin))))

рд▓реЗрдХрд┐рди _рд╣рдо_ рд╕рдмрд╕реЗ рдмреБрд░рд╛ рд╕реЛрдЪреЗрдВрдЧреЗ, рдЕрдЧрд░ рдЖрдк рд╣рдореЗрдВ рдЬрд╛рдиреЗ рджреЗрдВред

@daved try(err) рдХреЛ рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдкрд░ рд░рдЦрдирд╛ рдореМрдЬреВрджрд╛ try рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реИ: try рдХреЗрд╡рд▓ рдПрдХ рддрд░реНрдХ рдЪрд╛рд╣рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдорд╛рдиреЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЕрдВрддрд┐рдо рдорд╛рди рд╣реИ рдЯрд╛рдЗрдк рдХрд░реЗрдВ error , рдЬреЛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк try(err) рд▓рд┐рдЦрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ defer рд╕рдВрдмрдВрдз рдореЗрдВ рдЖрдкрдХреА рдЪрд┐рдВрддрд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реВрдВ - рдпрджрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВрдбрд▓рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ defer рд╕рд╣реА рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ; рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдкрд╛рд░рдВрдкрд░рд┐рдХ if рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред

@cstockton рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдиреЗрд╕реНрдЯреЗрдб try рдмрд╣реБрдд рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ; рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рднреА рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ try , рддреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП (рд╡реИрдз)

рд╢реИрд▓реА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдордиреЗ рдЙрд╕ рднрд╛рд╖рд╛ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдЖрдк рднрд╛рд╖рд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рд╣рдордиреЗ рдЙрд╕рдХреЗ рд▓рд┐рдП go vet рдХрд┐рдпрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рд▓рд┐рдЦрд┐рдд рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рднрд╛рд╡ рд╕рдорд╛рди рд╣реИред рд▓реЗрдХрд┐рди рднрд╛рд╖рд╛ рдореЗрдВ рди рд╣реЛрдиреЗ рд╕реЗ рд╣рдо рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдмрд╛рдВрдз рдирд╣реАрдВ рд░рд╣реЗ рд╣реИрдВред рдЙрди рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдФрд░ рд╡реЗ рдХрд▓реНрдкрдирд╛ рдХреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рдмрдирд╛рддреЗ рд╣реИрдВред go vet рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдФрд░ рднрд╛рд╖рд╛ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╕реАрдЦрдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЗрд╕реЗ рдЕрдзрд┐рдХ рд╕реНрдорд╛рд░реНрдЯ рдмрдирд╛рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред

@griesemer рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрджрд┐ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ var err error , рддреЛ рдХреНрдпрд╛ рд░реИрдк рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рджреЛрдиреЛрдВ рдЪреЗрдХ рдХреА рдЧрдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛? рдореИрдВрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рд╢реИрдбреЛрдЗрдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдПрдХ рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИ рдЬрд┐рд╕рд╕реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдирд┐рдкрдЯрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЗрд╕рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ/рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рдХреИрд╕реЗ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрдХрдбрд╝ () рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЧрд░ рдХреЛрд╢рд┐рд╢ рдХреЛ рдХреБрдЫ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА рдЬреИрд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ ()ред
рдЙрджрд╛рд╣рд░рдг:

func doSomthing()(err error){
    //return error
}

func main(){
    defer func(){
        if err:=catch();err!=nil{
            //found error
        }
    }()

    try doSomthing()
}

рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдкрд░

func Foo() (err error) {
    defer func(){
        if err:=catch();err!=nil{
            //found error
        }
    }()

   try{
    file1 := open("file1")
    defer file1.Close()
    file2 := open("file2")
    defer file2.Close()
   }
   //without try
    file3,err := open("file3")
    defer file3.Close()
 }

рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рдХреИрд╕реЗ рдорджрдж рдХрд░рддрд╛ рд╣реИ?

рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рддрд░рд╣ рдкреНрд░рддрд┐рдмрджреНрдз

func Foo() (err error) {
    defer func(){
        if err:=catch();err!=nil{
            //found error
        }
    }()

    file1 :=try open("file1")
    defer file1.Close()
    file2 :=try open("file2")
    defer file2.Close()

        //without try
       file3,err := open("file3")
       defer file3.Close()
 }

@daved рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдпрд╣ рдзрд╛рд░рдгрд╛ рдереА рдХрд┐ err рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдирд╛рдо рд╣реИ error ред try рд╣рдореЗрд╢рд╛ рдЙрд╕ рдкрд░рд┐рдгрд╛рдо рддреНрд░реБрдЯрд┐ рдЪрд░ рдХреЛ рд╕реЗрдЯ рдХрд░реЗрдЧрд╛, рдЪрд╛рд╣реЗ рдирд╛рдо рдХреЛрдИ рднреА рд╣реЛ (рдпрд╛ рдХрд┐рд╕реА рдирд╛рдо рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐)ред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ err рдирд╛рдордХ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рд╣реИ рддреЛ рд╡рд╣ рдПрдХ рднрд┐рдиреНрди рдЪрд░ рд╣реИред рдпрджрд┐ рдЖрдк рдкрд░рд┐рдгрд╛рдо рддреНрд░реБрдЯрд┐ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдПрдХ рдЕрд▓рдЧ рдирд╛рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд╛рдорд▓рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ:

func f(...) (..., err error) {
   var err error // << err already declared
   ...

рджреВрд╕рд░реА рдУрд░, рдпрджрд┐ рдЖрдк рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

func f(...) (..., err error) {
   a, b, ... err := g() // redeclaration of err
   ...

рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдореЗрдВ err рдмрд╕ рд╡рд╣реА рд╣реИ рдЬреЛ рдкрд░рд┐рдгрд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ рд╕реВрдЪреА рдореЗрдВ рдирд╛рдорд┐рдд рд╣реИред рдпрд╣рд╛рдВ рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЬреЛ рдорд╛рдорд▓рд╛ рдерд╛, рдЙрд╕рд╕реЗ рдЕрд▓рдЧ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред

рдкреБрдирд╢реНрдЪ: рд╣рдореЗрдВ рд╢рд╛рдпрдж рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ try рдЪрд░реНрдЪрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрд╣рд░рдг рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдореВрд▓ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдЗрд╕реЗ рдЕрдирд▓реЙрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдХрд▓ (1 рдЬреБрд▓рд╛рдИ) рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдЦреЛрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

@godcong A catch() рдлрд╝рдВрдХреНрд╢рди (рдпрд╛ рд╕рдорд╛рди) рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЗрд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдирд╣реАрдВ (рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдПрдХ рд╕реНрдердЧрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдлрд╝рдВрдХреНрд╢рди рдХреА рддреНрд░реБрдЯрд┐ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ) . рдЗрд╕реЗ catch() рд░рд┐рдЯрд░реНрди рдПрдХ *error рдмрдирд╛рдХрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕рдВрд▓рдЧреНрди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддреНрд░реБрдЯрд┐ рд╡рд╛рдкрд╕реА рдорд╛рди рдХрд╛ рдкрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдирдпрд╛ рддрдВрддреНрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп рддреНрд░реБрдЯрд┐ рдкрд░рд┐рдгрд╛рдо рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ? try рдкреНрд░рд╕реНрддрд╛рд╡ рднреА рджреЗрдЦреЗрдВ рдЬрд╣рд╛рдВ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдКрдкрд░ рдкреАрдПрд╕ рджреЗрдЦреЗрдВред

@griesemer

рдпрд╣рд╛рдВ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдХрдард┐рди рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдЬреЛ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдЙрд╕реЗ рджреЛрд╣рд░рд╛рдПрдВ: рдХреЛрд╢рд┐рд╢ рд╕рднреА рддреНрд░реБрдЯрд┐ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧреАред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдЕрдиреНрдп рд╕рднреА рдЪреАрдЬрд╝реЛрдВ рдХреЗ рд▓рд┐рдП, if рдХрдердиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ try() рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдШрд╛рддрдХ рджреЛрд╖ рд╣реИ: рдЬрд╣рд╛рдВ рдкрд╣рд▓реЗ рддреНрд░реБрдЯрд┐ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рддрд░реАрдХрд╛ рдерд╛, рдЕрдм рджреЛ рд╣реЛрдВрдЧреЗ, рдЬреЛ рдХреЛрдб рдЖрдзрд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рд╕реНрдкрд░ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреЛрдб рдЖрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рдореИрдВ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдБ, рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо 20% if err != nil рд╕рд╛рде рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ try() , рдЬрдмрдХрд┐ рдПрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдЬрдмрдХрд┐ рддреБрдЪреНрдЫ рдирд╣реАрдВ, рдореВрд▓реНрдп рдХреА рддрд░рд╣ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рд╢реИрд▓рд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рддред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдирд┐рд░реНрдорд╛рдг рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрддрд╛ рдЬреЛ рд╕рднреА if err != nil рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реЗ 95% рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рднреА рдпрд╣реА рдкрд╕рдВрдж рдЖрдпрд╛ рд╣реЛрдЧрд╛ред

@griesemer рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рд▓реЛрдЧ рд╕реАрдЦреЗрдВрдЧреЗ рдФрд░ рдЯреВрд▓рд┐рдВрдЧ рдмрд╣реБрдд рдЬрд░реВрд░реА рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯрд╛рдЗрд▓ рдЧрд╛рдЗрдб, рдЕрдЪреНрдЫреА рдкреНрд░рдерд╛рдПрдВ, рдЙрджрд╛рд╣рд░рдг, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдФрд░ рдЗрд╕реА рддрд░рд╣ рдЖрдк рд╕рднреА рдкреБрд░рд╛рдиреЗ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдЧрд▓рдд рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реВрдХреНрд╖реНрдо рдирдП рддрд░реАрдХреЗ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рддрдереНрдп рдХреЛ рдЗрд╕ рдЖрдзрд╛рд░ рдкрд░ рдЦрд╛рд░рд┐рдЬ рдХрд░рдирд╛ рдХрд┐ рд▓реЛрдЧ рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рд╡реИрдз рдкреНрд░рддрд┐рд╡рд╛рдж рд╣реИ?

рдореИрдВ рдпрд╣рд╛рдВ рдХреЛрдгреЛрдВ рдХреЛ рдмрджрд▓реВрдВрдЧрд╛, рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдЯреНрд░рд╛рдИ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рдХреНрдпрд╛ рд╣реИ рдЬреЛ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╕рдВрднрд╛рд╡рд┐рдд рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдордЬрдмреВрдд рд╣реИ? рд╢реНрд░реГрдВрдЦрд▓рд╛-рд╕рдХреНрд╖рдо рдШреЛрдВрд╕рд▓рд╛-рд╕рдХреНрд╖рдо рдХреЛрд╢рд┐рд╢-рдкреГрдердХ рдХреЛрд╖реНрдардХ-рдкрд╛рд░реНрдЯреА рдХреЛ рдХрд╣реАрдВ рднреА рдмреЗрддрд╣рд╛рд╢рд╛ рдкреНрд░рдХрдЯ рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдХрд░ рдЧреЛ рдХреЛрдб рдЖрдЬ рдХреИрд╕реЗ рд▓рд╛рдн рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ? рдореЗрд░рд╛ рдЕрдиреБрдорд╛рди рд╣реИ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛, рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдк рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рджреБрд░реБрдкрдпреЛрдЧ рдпрд╛ рд╕реВрдХреНрд╖реНрдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЛ рд╣рдЯрд╛рдиреЗ/рдкрддрд╛ рдпреЛрдЧреНрдп рд╣реЛрдиреЗ рдЬреИрд╕реА рдХреЛрдИ рдмрд╛рдзрд╛ рдирд╣реАрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рднрд╛рд╖рд╛ рдХреА рдХрд▓реНрдкрдирд╛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдмрдирд╛ рджреЗрдЧрд╛ред рдХреНрдпрд╛ рдпрд╣рд╛рдВ рд╡рд┐рд╖рдп рднрд╛рд╖рд╛ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдпрд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ?

рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдпрд╣рд╛рдВ рд▓рдХреНрд╖реНрдп рднрд╛рд╖рд╛ рдХреА рдХрд▓реНрдкрдирд╛ рдХреЛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рдмрдирд╛рдирд╛ рд╣реИ, рддреЛ рд╡рд┐рдХрд▓реНрдк рд╕реНрдкрд╖реНрдЯ рд╣реИ: рд╕рд╛рдорд╛рдиреНрдп рд░рд┐рдЯрд░реНрди рдФрд░ рдкреИрд░рд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рди рдЬреЛрдбрд╝реЗрдВ, рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдШреЛрдВрд╕рд▓рд╛ рдмрдирд╛рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рджрд┐рдП рдЧрдП рдореВрд▓реНрдпреЛрдВ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ ( рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЕрдЧрд░ рд╡реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрд┐рд▓реНрдЯрд┐рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ) рдФрд░ рд╢рд╛рдпрдж рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рдХрд┐ рдореИрдВ рднреВрд▓ рд░рд╣рд╛ рд╣реВрдВ рдЬреИрд╕реЗ рдЕрднреВрддрдкреВрд░реНрд╡ рдЬрдЯрд┐рд▓рддрд╛ рд╡рд╛рд▓рд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рдиред рдпрджрд┐ рд▓рдХреНрд╖реНрдп рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рдирдП рддрд░реАрдХреЛрдВ рдХреЛ рдкреЗрд╢ рдХрд┐рдП рдмрд┐рдирд╛ рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@ рд╕рд┐рд░реНрдХреЛрди рдореИрдВрдиреЗ рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдХрдИ рдмрд╛рд░ рджреЗрдЦрд╛ рд╣реИред рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рд▓реЗрдХрд┐рди рдЖрдЗрдП рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдФрд░ рд╕реЛрдЪреЗрдВред рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд try рдмрд┐рд▓реНрдЯрд┐рди рдореВрд▓ рд░реВрдк рд╕реЗ рдЧреЛ рдХреЛрдб рдореЗрдВ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рдЪреАрдиреА рд╣реИред рддреЛ рд╣рдо рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдореВрд▓ рдХреЛрдб рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

    f, err := os.Open(fileName)
    if err != nil {
        return err
    }
    info, err := f.Stat()
    if err != nil {
        return err
    }

рдЙрд╕ рдХреЛрдб рдореЗрдВ рдПрдХ рд╣реА рдмрдЧ рд╣реИред рдореИрдВрдиреЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХреЛрдб рджреЗрдЦрд╛ рд╣реИред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ try рдмрд┐рд▓реНрдЯрд┐рди рдЙрд╕ рдмрдЧ рдХреЛ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рдпрд╛ рджреЗрдЦрдиреЗ рдореЗрдВ рдХрдард┐рди рдмрдирд╛рддрд╛ рд╣реИред

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ "рдзреАрдорд╛" рдкрд╛рд░рдВрдкрд░рд┐рдХ рдкреНрд░рд╡рд╛рд╣ рдиреЛрдЯрд┐рд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЬрдЧрд╣ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдФрд░ рдпрд╣ try рдЗрд╕ рддрд░рд╣ рдХреЗ рд▓реАрдХ рдХреЛ рдЙрдХрд╕рд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд▓реЛрдЧ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╢реЙрд░реНрдЯрдХрдЯ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред

@godcong A catch() рдлрд╝рдВрдХреНрд╢рди (рдпрд╛ рд╕рдорд╛рди) рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЗрд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдирд╣реАрдВ (рдФрд░ рдЖрдорддреМрд░ рдкрд░ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдПрдХ рд╕реНрдердЧрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдлрд╝рдВрдХреНрд╢рди рдХреА рддреНрд░реБрдЯрд┐ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ) . рдЗрд╕реЗ catch() рд░рд┐рдЯрд░реНрди рдПрдХ *error рдмрдирд╛рдХрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕рдВрд▓рдЧреНрди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рддреНрд░реБрдЯрд┐ рд╡рд╛рдкрд╕реА рдорд╛рди рдХрд╛ рдкрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдирдпрд╛ рддрдВрддреНрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп рддреНрд░реБрдЯрд┐ рдкрд░рд┐рдгрд╛рдо рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ? try рдкреНрд░рд╕реНрддрд╛рд╡ рднреА рджреЗрдЦреЗрдВ рдЬрд╣рд╛рдВ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдКрдкрд░ рдкреАрдПрд╕ рджреЗрдЦреЗрдВред

рдЧреЛ рдХрд╛ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо 60 рдХреЗ рджрд╢рдХ рдореЗрдВ рдЕрдЯрдХрд╛ рд╣реБрдЖ рдерд╛ рдФрд░ рдЗрд╕ рддрд░рд╣ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рдерд╛ред рдпрджрд┐ рдЖрдк 80 рдХреЗ рджрд╢рдХ рдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЙрдзрд╛рд░ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рджреВрд░рджрд░реНрд╢реА рдереЗ рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реВрдХреНрд╖реНрдо рддреНрд░реБрдЯрд┐-рдкреНрд░рд╡рдг рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реЛрдВрдЧреЗред рдЖрдк рдЕрдм рдордзреНрдпрдпреБрдЧреАрди рдЧрд╛рдБрд╡ рдореЗрдВ рдХрд╛рдВрдЪ рдФрд░ рдзрд╛рддреБ рдХреА рдЗрдорд╛рд░рдд рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ: рдмреБрд░реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЗрди рдордзреНрдпрдХрд╛рд▓реАрди рдЧрд╛рдБрд╡реЛрдВ рдореЗрдВ рдмрд┐рдЬрд▓реА рдФрд░ рдкрд╛рдиреА рдХреЗ рдкрд╛рдЗрдк рдирд╣реАрдВ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдпрд╣ рджреЗрдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ рдХрд┐ golang/go рд╣реА рдХрд┐рд╕ рд╣рдж рддрдХ рдЬреЛ рднреА рдирдИ рдФрд░ рдмреЗрд╣рддрд░ рдЧрд▓рдд рд╕реБрд╡рд┐рдзрд╛рдПрдВ рджреА рдЬрд╛рдПрдВрдЧреАред рдЕрдЧрд░ рд╕рдм рдкрд░ред

рдпрд╣ рджреЗрдЦрдирд╛ рднреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ go2 fmt рд╕рд╛рджрд╛ go1.x рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЧрд╛ред

рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдиреБрднрд╡ рд╕реЗ, рдЬрдм рд╕реЗ рдореИрдВрдиреЗ рдЕрдкрдиреА рд▓реМрдЯрд╛рдИ рдЧрдИ рддреНрд░реБрдЯрд┐ рдореЗрдВ рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝рд╛ рд╣реИ:

import "github.com/pkg/errors"
func caller(arg string) error {
  val, err := callee(arg)
  if err != nil {
    return errors.Warpf(err, "failed to do something with %s", arg)
  }

  err = anotherCallee(val)
  if err != nil {
    return errors.Warpf(err, "failed to do something with %s", val)
  }

  return nil
}

рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЯреАрдо рдХреЛ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдореЗрд░реЗ рдЗрдирдкреБрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

IMHO, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рд╕реМрдВрдкрдиреЗ рдореЗрдВ рд╕реБрдзрд╛рд░ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдПрдХ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдЕрднреА рднреА рдХреЛрд╢рд┐рд╢() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдордЭрджрд╛рд░ рддрд░реАрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред

рд╢рд╛рдпрдж рд╕рдВрджрд░реНрдн рдХреЛ рдЖрд╕реНрдердЧрд┐рдд рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

func caller(arg string) (err error) {
  defer func() {
    switch t := err.(type) {
      case CalleeErr:
        err = errors.Wrapf(err, "failed to do something with %s", arg)
      case AnotherCalleeErr:
        err = errors.Wrapf(err, "failed to do something with %s", val)
    }
  }()

  val := try(callee(arg))
  try(anotherCallee(val)
  return nil
}

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдирд╣реАрдВ рдмрдЪрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдкрдардиреАрдпрддрд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рддреНрдпрд╛рдЧ рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕ рддрд░рд╣ try() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

func caller(arg string) error {
    val, err := callee(arg)
    try(errors.Warpf(err, "failed to do something with %s", arg))

    err = anotherCallee(val)
    try(errors.Warpf(err, "failed to do something with %s", val))

    return nil
  }

рдпрд╣ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ, рдмрд╕ред

рдореЗрд░реЗ рд▓рд┐рдП, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдорд╛рдзрд╛рди рдПрдХ рдЪреАрдЬ рдХреЛ рддреЛрдбрд╝рдиреЗ рд▓рдЧрддреЗ рд╣реИрдВ рдЬреЛ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдЕрдкрд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдЕрд▓рдЧ рдЬрд╛рдирд╛: рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрддрд░ рд╕рдорд╛рдзрд╛рди рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдХреБрдЫ рд░реВрдк рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ (рдЪреЗрдХ/рд╣реИрдВрдбрд▓, рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдкрдХрдбрд╝реЗрдВ, рдЙрдореНрдореАрдж рдХрд░реЗрдВ) рдЬрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧреЛ рдЯреАрдо рдЕрдкрд╡рд╛рдж рднреА рдЬреЛрдбрд╝ рд╕рдХрддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ рджрд┐рди рдХрд╣ рд╕рдХрддреА рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ if рдФрд░ return рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рд░реВрдмреА рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ

return err if err != nil

рдкреАрдПрд╕ рднрд╛рд╖рд╛ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рдореЗрд░реА рдЕрдиреБрднрд╡рд╣реАрдирддрд╛ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЕрдЧрд░ рдореИрдВрдиреЗ рдХреБрдЫ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рдХрд╣рд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдФрд░ рдореБрдЭреЗ рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред

рдХреИрд╕реЗ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрдХрдбрд╝ () рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЧрд░ рдХреЛрд╢рд┐рд╢ рдХреЛ рдХреБрдЫ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА рдЬреИрд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ ()ред
рдЙрджрд╛рд╣рд░рдг:

func doSomthing()(err error){
    //return error
}

func main(){
    defer func(){
        if err:=catch();err!=nil{
            //found error
        }
    }()

    try doSomthing()
}

рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдкрд░

func Foo() (err error) {
    defer func(){
        if err:=catch();err!=nil{
            //found error
        }
    }()

   try{
  file1 := open("file1")
  defer file1.Close()
  file2 := open("file2")
  defer file2.Close()
   }
   //without try
    file3,err := open("file3")
    defer file3.Close()
 }

рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рдХреИрд╕реЗ рдорджрдж рдХрд░рддрд╛ рд╣реИ?

рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рддрд░рд╣ рдкреНрд░рддрд┐рдмрджреНрдз

func Foo() (err error) {
    defer func(){
        if err:=catch();err!=nil{
            //found error
        }
    }()

  file1 :=try open("file1")
  defer file1.Close()
  file2 :=try open("file2")
  defer file2.Close()

        //without try
       file3,err := open("file3")
       defer file3.Close()
 }

рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЖрдк рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдПрдХ рд╣реА defer рджреНрд╡рд╛рд░рд╛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рддреНрд░реБрдЯрд┐ рдореЗрдВ рдХрд╕реНрдЯрдо рд╕рдВрджреЗрд╢ рдФрд░ рдХрд╕реНрдЯрдо рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?

@ianlancetaylor рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ "рдЕрдиреБрдорд╛рдирд┐рдд рд░рд┐рдЯрд░реНрди" рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ": =" рдСрдкрд░реЗрдЯрд░ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ - рдореВрд▓ рд░реВрдк рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рдпрд╛рд╕ рдХреЗ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдВред рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реА рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░реЗрдЧрд╛ рдЬреЛ рдореИрдВрдиреЗ рджреЛрдиреЛрдВ рдкрдХреНрд╖реЛрдВ рдореЗрдВ рджреЗрдЦреА рд╣реИрдВ:

  • try рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рд░рд╣рд╛ рд╣реИ, рдЬрдм рддрдХ рд╣рдо рдЗрд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдЗрд╕реЗ рдПрдХ рдРрд╕рд╛ рдирд╛рдо рджреЗрддреЗ рд╣реБрдП рдЕрдЯрдХ рдЬрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ 100% рдЕрдЪреНрдЫрд╛ рдорд╣рд╕реВрд╕ рдХрд░реЗрдЧрд╛ред
  • try рдПрдХ рдЕрднреВрддрдкреВрд░реНрд╡ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЪреАрдЬреЗрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ append() рдЬреИрд╕реЗ рдЗрдирдкреБрдЯ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╕рд░реНрд╡рд╡реНрдпрд╛рдкреА рдкреИрдЯрд░реНрди рдХреА рдЬрдЧрд╣ рд▓реЗрддреЗ рд╣реБрдП panic() рдЬреИрд╕реЗ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ ( if err != nil ) .
  • try рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдЗрд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрдгрдп рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ, рди рдХрд┐ рдХрдареЛрд░ рддрдХрдиреАрдХреА рдмрд╣рд╕ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп-рд╡рд░реНрдзрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВред
  • try рдкрд╢реНрдЪ рд╕рдВрдЧрддрддрд╛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо рдХреЗрд╡рд▓ рд░рд┐рдЯрд░реНрди рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рд╣рдо рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЪреАрдЬреЗрдВ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рджрд┐рдЦрддреА рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХ "рдЧреЛ" рдорд╣рд╕реВрд╕ рд╣реЛрддреА рд╣реИрдВ рдЬреИрд╕реЗ:

f, err := os.Open(filename)
if err != nil {
   return ..., err
}
defer f.Close()

info, err := f.Stat()
if err != nil {
   return ..., err
}

_рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рд╕рд╣реА рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рд╡рд┐рд╡рд░рдг рдбрд╛рд▓реЗрдВ_, рддрдм рддрдХ рд▓рдШреБ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреБрдорд╛рдирд┐рдд рд░рд┐рдЯрд░реНрди рдХреЗ рд▓рд┐рдП рд╕рдордЭреМрддрд╛ рдХрд░реЗрдВ:

f := os.Open(filename)
defer f.Close()
info := f.Stat()

рдЬреЛ рдЗрд╕рд╕реЗ рдХрд╣реАрдВ рдЬреНрдпрд╛рджрд╛ рд╕рд╛рдл рджрд┐рдЦрддрд╛ рд╣реИ:

f := try(os.Open(filename))
defer f.Close()
info := try(f.Stat())

рдпрд╣ рдЙрди рд╕рднреА рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рдКрдкрд░ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рд╣реИ (рдореЗрд░реА рд░рд╛рдп рдореЗрдВ) рдереЛрдбрд╝рд╛ рдФрд░ "рдЬреИрд╕реЗ рдЬрд╛рдУ" рдорд╣рд╕реВрд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдкреАрдЫреЗ рдХреА рд╕рдВрдЧрддрддрд╛ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реВрдВред рдпрд╣ рд╕рдордЭрд╛рдирд╛ рдереЛрдбрд╝рд╛ рдЖрд╕рд╛рди рднреА рд▓рдЧрддрд╛ рд╣реИ, try() рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдкрд░ "рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд" рд░рд┐рдЯрд░реНрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рд░ рджреВрд╕рд░реА рднрд╛рд╖рд╛ рдореЗрдВ try рдХреЗ рд╕рд░реНрд╡рд╡реНрдпрд╛рдкреА рдЕрд░реНрде рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдЬрдЧрд╣ рд╕реЗ рдмрд╛рд╣рд░ рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП 100% рдирд╣реАрдВ рдмреЛрд▓ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд▓рдЧрднрдЧ рдЙрд╕реА рдкреНрд░рдпрд╛рд╕ рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? AssignStmt рдореЗрдВ рдПрдХ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрд▓рдПрдЪрдПрд╕ рдкрд░ рдХреМрди рд╕реЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдмрд┐рд▓реНрдЯрд┐рди рдХреЗ рд╕рдорд╛рди рдмреИрдХрдПрдВрдб рд╕рдВрдХрд▓рди рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЧрд▓рдд рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреА рд╣реИ?

рдореБрдЭреЗ рддреНрд░реБрдЯрд┐ рдЬрд╛рдВрдЪ рдкрд╕рдВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдирдпрд╛ рдХреАрд╡рд░реНрдб рд╢рд╛рдпрдж рдПрдХ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рд╣реИред рдХрд┐рд╕реА рднреА рд╕рдорд╛рдзрд╛рди рдореЗрдВ рд╕рдВрднрд╡рддрдГ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдкрд░рд┐рд╡рд░реНрддрди рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ, рдФрд░ рдЗрд╕реЗ рдпрдерд╛рд╕рдВрднрд╡ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рд░ рдмрд╛рд░ err рд╕реЗрдЯ рд╣реЛрдиреЗ рдкрд░ on рд╢рд░реНрдд рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

func example() (foo int, err error) {
    on err != nil {
        return foo, err
    }

    foo, err = calcThis()
    foo, err = calcThat(foo)

    return
}

рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рд╡рд╛рдкрд╕реА рдорд╛рдиреЛрдВ рдХреЗ рдирд╛рдо рдШреЛрд╖рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

func example() (*int, error) {
    var err error

    on err != nil {
        return nil, err
    }

    foo, err = calcThis()
    foo, err = calcThat(&foo)

    return &foo, nil
}

рдЗрд╕реЗ рдХрдИ рдмрд╛рд░ рд╕реЗрдЯ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

func example() (*int, error) {
    var err error

    on err != nil {
        return nil, err
    }

    foo, err = calcThis()

    on err != nil {
        return &foo, err
    }

    foo, err = calcThat(&foo)

    return
}

рдореЗрд░реА рдирдЬрд╝рд░ рдореЗрдВ, рдпрд╣ рдЧреЛ рдХреА рд╢реИрд▓реА рдФрд░ рдкрдардиреАрдпрддрд╛ рдХреЛ рдмрд░рдХрд░рд╛рд░ рд░рдЦрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ (рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдкреНрд░рддрд┐рдорд╛рди рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВ), рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ err рд╕реЗрдЯ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдирд╛ рдХреЗ рдмрд╛рдж рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЖрдк рдирд┐рдореНрди рдХрд╛рд░реНрдп рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

func example() (foo int, err error) {
    var message string

    on err != nil {
        return foo, errors.Wrap(err, message)
    }

    message = "failed to calc this"
    foo, err = calcThis()

    message = "failed to calc that"
    foo, err = calcThat(foo)

    return
}

рдЕрдВрдд рдореЗрдВ, рдЗрд╕рдореЗрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рд╕реЗ рдкрд░реЗ рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рд╣реИред рдЕрдЧрд░ foo == 0 рд╡рд╛рдкрд╕ рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдПрдХ рдФрд░ рдХрд╛рд▓реНрдкрдирд┐рдХ рдЙрджрд╛рд╣рд░рдг:

func example(i int) bool {
    on x == 0 {
        return false
    }

    x = calcSomeInt(i)
    return true
}

@cstockton

рдореИрдВ рдЗрд╕рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдерд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджреВрд░ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди:

  • рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ "рдЧреЙрдЪрд╛" рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВ рдЬреЛ _only_ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ json.Unmarshal ред IME рдЕрдЪреНрдЫреЗ рдХреЛрдб рд╕рдореАрдХреНрд╖рдХ рдЗрд╕реЗ рдмрд╣реБрдд рдЬрд▓реНрджреА рджреЗрдЦрдирд╛ рд╕реАрдЦ рдЬрд╛рддреЗ рд╣реИрдВред
  • рдпрд╣ рдЕрднреА рднреА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреА рдЬреЛ рддреНрд░реБрдЯрд┐ рдорд╛рди рдирд╣реАрдВ рд▓реМрдЯрд╛рддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ http.Handler рд╡рд┐рдзрд┐рдпрд╛рдБред
  • рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рдереЗ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ, рдЖрдк рдЗрд╕рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдПрдВрдЧреЗ, рдФрд░ рдЖрдк рд╢рд╛рдпрдж рддреНрд░реБрдЯрд┐ рдорд╛рди рдХреЛ рд╡реИрд╕реЗ рднреА рдХреИрдкреНрдЪрд░ рдХрд░реЗрдВрдЧреЗ _ рддрд╛рдХрд┐_ рдЖрдк рдЗрд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХреЗрдВред
  • рдпрджрд┐ рдЖрдкрдХрд╛ рдЗрд░рд╛рджрд╛ рдХрд┐рд╕реА рдФрд░ рдХреА рд╕рдорд╕реНрдпрд╛ (рдХреЙрд▓рд░ рдХреА) рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рддреНрд░реБрдЯрд┐ рдХреЛ рд╡рд╛рдкрд╕ рдкрд╛рд╕ рдХрд░рдирд╛ рдерд╛, рддреЛ рдпрд╣ рдЙрд╕ рдЫреЛрдЯреЗ рд╕реЗ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдХреЗ рд╕рд╛рде рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдПрдиреЛрдЯреЗрд╢рди рдкрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдЪреВрдХ рдЬрд╛рддреЗ рд╣реИрдВред

рдЗрд╕рд▓рд┐рдП, рдЙрди рд╕рднреА рдкреЗрд╢реЗрд╡рд░реЛрдВ рдХрд╛ рд╡рдЬрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ, рдФрд░ рдХрд┐рд╕реА рднреА рд╕реНрдкрд╖реНрдЯ рдбрд╛рдЙрдирд╕рд╛рдЗрдб рдХреЛ рдиреЛрдЯрд┐рд╕ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдлрд▓ рд░рд╣рд╛, рдореИрдВ рдмрд╛рдбрд╝ рдкрд░ рд╣реВрдВред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рдбрд╛рдЙрдирд╕рд╛рдЗрдбреНрд╕ рд╣реИрдВ рдЬрд┐рди рдкрд░ рдореИрдВрдиреЗ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рдкрд╕рдВрдж рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХрд╣рд╛рдВ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рд╣реИред

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рд╣реИ рдФрд░ рдореИрдВ рдХреЛрдИ рдкреНрд░рддрд┐рдмрджреНрдз рдирд╣реАрдВ рд╣реВрдВ
рдЧрдВрднреАрд░ рдЧрд▓рдд-рдкрд╛рд╕ред

7/1/19 рдХреЛ, рдХреНрд░рд┐рд╕ рд╕реНрдЯреЙрдХрдЯрди рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@ianlancetaylor рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ":=" рдСрдкрд░реЗрдЯрд░ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ
"рдЕрдиреБрдорд╛рдирд┐рдд рд░рд┐рдЯрд░реНрди" - рдореВрд▓ рд░реВрдк рд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреНрд░рдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдВ
рдмреБрд▓рд╛рдирд╛ред [...]

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдореБрдЭреЗ рдЬреЛ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрддрд╛ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рд╣реИ
"рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдареАрдХ" рдкреНрд░рддрд┐рдорд╛рди рдХреЗ рдЕрдиреБрд░реВрдк, рдЬрд╣рд╛рдВ рдЕрдм "рдЧрд▓рддреА" рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдХреБрдЫ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕рдордиреБрджреЗрд╢рд┐рддреА рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рд▓рд╛рдпрдХ
рдиреЛрдЯ рдХрд░рдирд╛, рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдЗрд╕реЗ рд╡реИрдз рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ
рдкреНрд░рд╕реНрддрд╛рд╡ред

рд▓реБрд╕рд┐рдпреЛред

рдпрд╣ рдмрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рд╣реИ, рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдпрд╛ рдирд╣реАрдВ - рдЧреЛ рдЖрдкрдХреЛ рдЦрд░рд╛рдм рдХреЛрдб рд▓рд┐рдЦрдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИред рдпрд╛ рдЗрд╕реЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдореЛрдбрд╝рдирд╛, рдЦрд░рд╛рдм рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдпрд╛рд╕ рдХреА рдЕрдиреБрдорддрд┐ рдХреНрдпреЛрдВ рдирд╣реАрдВ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдПрдХ рдареЛрд╕ рддрд░реНрдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдкрд╢реБ рдЪрд┐рдХрд┐рддреНрд╕рдХ рдХреЛ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдорд╛рдорд▓реЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

@griesemer рдореИрдВ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реВрдБред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХреАрд╕реНрдЯреНрд░реЛрдХреНрд╕ рдХреЛ рд╕рд╣реЗрдЬ рд╕рдХрддрд╛ рд╣реИ, рдкреЙрдЗрдВрдЯрд░ рдЕрдВрдХрдЧрдгрд┐рдд рдХреЛ рдЗрд╕ рдЖрдзрд╛рд░ рдкрд░ рдЧреЛ рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдЦрд░рд╛рдм, рдЯреВрдЯреЗ рд╣реБрдП рдХреЛрдб рдХреЛ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдмрдЧ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

data := try(ioutil.ReadAll(try(os.Open("foo.txt"))))

try рд╕рд╛рде рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдЙрдкрд░реЛрдХреНрдд рдЬреИрд╕реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЛ рд▓реАрдХ рдХрд░рддрд╛ рд╣реИред (рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЧреЛ рд╢рд┐рдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдРрд╕реЗ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЛ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдирдЬрд╛рди рд╣реИ, рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЖрд░рд╛рдо рджреЗ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реИрд╕реЗ рднреА рдПрдХ рдмреЗрд╣рддрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИ)ред

data := try(ioutil.ReadAll(try(http.Get("http://example.com/")).Body))

рдЙрдкрд░реЛрдХреНрдд рд╕рд╣реА рдХреЛрдб рдХреА рддрд░рд╣ рдкрдврд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд┐рдХрд╛рдп рдХреЛ рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рдП рдФрд░ рдлрд┐рд░ рдмрд╛рдж рдореЗрдВ рдЦреБрд╢ рдкрде рдкрд░ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХрд╛рдлреА рджреЗрд░ рддрдХ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЧрд▓рдд рдЙрджрд╛рд╣рд░рдг рдХреЗ рдШреГрдгрд┐рдд рд▓рд╛рд▓рд┐рддреНрдп рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреАрдбрд╝реЗ рджреЗрдЦреЗрдВрдЧреЗред

рдЬреИрд╕рд╛ рдХрд┐ рдХреЛрдИ рд╣реИ рдЬреЛ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЧреЛ рдЙрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рди рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдЧрд▓рддрддрд╛ рдХреЛ рдЗрддрдирд╛ рдЖрдХрд░реНрд╖рдХ рдмрдирд╛рддреА рд╣реИрдВред

@ jesse-amano рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╡ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ, рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рдмрд┐рдирд╛ рдиреАрдЪреЗ рдЬреИрд╕рд╛ рд╡реЗ рдЖрдЬ рдХрд░рддреЗ рд╣реИрдВ, рд╡реИрд╕рд╛ рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:

json.Unmarshal(...)
(http.Handler)(h).ServeHTTP(w, r)

рдЙрди рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдХреЗрд╡рд▓ рдПрдХ рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, return json.Unmarshal(...) рддрд░рд╣ рд▓реМрдЯрд╛рдП рдЬрд╛рдиреЗ рдХреЗ рдпреЛрдЧреНрдп рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рд░реВрдк рдореЗрдВ рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ if рдмреНрд▓реЙрдХ рдХреЗ рдмрд╛рд╣рд░ рдХрд┐рд╕реА рдорд╛рди рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

if err := json.Unmarshal(...); err != nIl {
    return err
} 

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдореБрдЭреЗ рдЬреЛ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрддрд╛ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ "рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдареАрдХ" рдкреНрд░рддрд┐рдорд╛рди рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рд╣реИ, рдЬрд╣рд╛рдВ рдЕрдм рдХреБрдЫ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ "рдЧрд▓рддреА" рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп, рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рд╡реИрдз рдкреНрд░рд╕реНрддрд╛рд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред

рд╡реНрдпрд╡рд╣рд╛рд░ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдпрд╛ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдШреЛрдВрд╕рд▓реЗ рдФрд░ рдЬрдВрдЬреАрд░ рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдРрд╕рд╛ рдЦреЛрдЬрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ рдЬреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧреЛрдВ рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рднрд╛рд╖рд╛ рдХреЛ рддреЛрдбрд╝реЗ рдмрд┐рдирд╛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧреЛ рд▓реЗрдЦрдХ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЧреЛ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рджреГрдврд╝ рд╣реИрдВ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдЧрд╣рд░реА рдЦреБрджрд╛рдИ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрд╢реНрд╡рд╕реНрдд рд╣реВрдВ рдХрд┐ try рдЗрд╕рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрд╡рд░реВрдк рдореЗрдВ рдЧреЛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕рдмрд╕реЗ рдирдЬрд╝рджреАрдХреА рдЪреАрдЬ рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдмреАрд╕реА рдирд╣реАрдВ рдЯреВрдЯреЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдпрд╣ рдЕрднреА рднреА рдкрд░реНрдпрд╛рдкреНрдд рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рд╣реА рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдкреНрд░рдпрд╛рд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдХреЛрдИ рдРрд╕рд╛ рдХреБрдЫ рд▓реЗрдХрд░ рдЖрддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЕрдзрд┐рдХ рд▓реЛрдЧ рд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: @ рдЬреЗрд╕реА-рдЕрдорд╛рдиреЛ рдореИрдВ рдЖрдкрдХреА рдмрд╛рдд рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрд╛рдж рдХрд░рддрд╛ рд╣реВрдВ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ! рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рд╣реЛрдирд╛ рдЬреЛ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдЧрд┐рдирддреА рдмреЗрдореЗрд▓ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрд╢рд┐рд╢ рд╢рд╛рдпрдж рдЙрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдкреЗрд╢ рдХрд░реЗрдЧреАред

@beoran https://github.com/golang/go/issues/32825#issuecomment -507126700 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдЕрд▓рдЧ рд╣реИ: рдХрднреА-рдХрднреА рд╣рдо рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдХрднреА-рдХрднреА рд╣рдо рдПрдХ рд╕рдЬрд╛рдП рдЧрдП рддреНрд░реБрдЯрд┐ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВ, рдХрднреА-рдХрднреА рд╣рдо рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдкрд░, рдФрд░ рдХрднреА-рдХрднреА рд╣рдо (рд╕рд╣реА рдврдВрдЧ рд╕реЗ) рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рд╡реЗ рд╕рднреА рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ (рд╕рд┐рд╡рд╛рдп рдЬрдм рд╣рдо рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реИрдВ) err != nil рдкрд░реАрдХреНрд╖рдг рд╣реИ (рдЬрд┐рд╕реЗ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдЗрди рд╕рднреА рдорд╛рдорд▓реЛрдВ (рдпрд╛ рдЙрдирдореЗрдВ рд╕реЗ 95%) рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдЬрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рдЕрдиреНрдп рдирд┐рдпрдВрддреНрд░рдг рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЧреИрд░-рдСрд░реНрдереЛрдЧреЛрдирд▓ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рдиреЗ рдХреА рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдпрд╛рдиреА, рд╣рдо рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ (рд╢рд╛рдпрдж 20%, рд╢рд╛рдпрдж 50%) рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@cstockton https://github.com/golang/go/issues/32825#issuecomment -507136111 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рдпрджрд┐ рдиреЗрд╕реНрдЯреЗрдб try рдХреЗрд╡рд▓ рд╕рдбрд╝рдХ рдмреНрд▓реЙрдХ рд╢реЗрд╖ рд╣реИрдВ рдФрд░ go vet рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ , рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдиреЗрд╕реНрдЯреЗрдб try рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдлрд┐рд▓рд╣рд╛рд▓ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрднреА рднреА FUD (рднрдп, рдЕрдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдФрд░ рд╕рдВрджреЗрд╣) рдХреЗ рдЪрд░рдг рдореЗрдВ рд╣реИрдВ, рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рдиреЗ рднреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ try рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдкреНрд░рдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдореИрдВ рдиреЛрдЯ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдиреЗ рдРрд╕рд╛ рдХрд┐рдпрд╛ рд╣реИ, рдЙрдирдХреА рд░рд┐рдкреЛрд░реНрдЯ рдкреЙрдЬрд┐рдЯрд┐рд╡ рдЖрдИ рд╣реИред

рдкреБрдирд╢реНрдЪ: try рдореБрджреНрджрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдЦреБрд▓рд╛ рд╣реИред рдЪрд▓реЛ рд╡рд╣рд╛рдБ рдкрд░ рдЬрд╛рд░реА рд░рдЦреЗрдВред

@cstockton рдУрд╣, рдмрд┐рд▓реНрдХреБрд▓ред рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЬрд┐рд╕ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдЬрд╛ рд░рд╣рд╛ рдерд╛ рд╡рд╣ рдпрд╣ рдерд╛ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдорд╛рди рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдмрд┐рдирд╛ json.Unmarshal рдЬреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ _ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЦрд░рд╛рдм рдЕрднреНрдпрд╛рд╕ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдорддреМрд░ рдкрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп defer file.Close() рд▓рд┐рдП рдмреБрд░рд╛ рдЕрднреНрдпрд╛рд╕ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ defer func() { err = file.Close(); if err != nil { ... }; }() , рдФрд░ рд╣рдордиреЗ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдВрддрд░ рдмрддрд╛рдирд╛ рд╕реАрдЦ рд▓рд┐рдпрд╛ред рддреЛ рдпрд╣ (рд╢рд╛рдпрдж) рдЖрдкрдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рд╣реЛрдЧрд╛ред рдЬрдм рдореИрдВ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддрд╛ рдерд╛, рддреЛ рдореИрдВрдиреЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ foo := strconv.ParseFloat(bar, 64) рдХрд╛ рдирд┐рд░реНрджреЛрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛, рд▓реЗрдХрд┐рди рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рдЪрд╛рд░ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред

@sirkon https://github.com/golang/go/issues/32825#issuecomment -507167388 рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ: рдХреГрдкрдпрд╛ рдРрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдпреЛрдЧреНрдп рдмрдпрд╛рдиреЛрдВ рдХреЛ рдЪрд░реНрдЪрд╛ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░ рджреЗрдВ - рдЙрдирдХрд╛ рдпрд╣рд╛рдВ рдХреЛрдИ рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реИред рд╕рд┐рд░реНрдл рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП, рдЧреЛ рдореЗрдВ рдХрдИ рд╡рд┐рдЪрд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 60 рдХреЗ рджрд╢рдХ рдХреЗ рдмрдЬрд╛рдп 80 рдХреЗ рджрд╢рдХ (рдкреИрдХреЗрдЬ, рдЕрд▓рдЧ рд╕рдВрдХрд▓рди, рдЖрджрд┐) рд╕реЗ рд╣реИрдВ рдФрд░ рдХрдИ рдмрд╣реБрдд рдЫреЛрдЯреЗ рд╣реИрдВ (рдЧреЛрд░рдЖрдЙрдЯрд┐рди, рдЗрдВрдЯрд░рдлреЗрд╕)ред рдпреЗ рд╡рд┐рдЪрд╛рд░ рдЕрднреА рднреА рдкреБрд░рд╛рдиреЗ рд▓рдЧ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рд╕рдордп рдХреА рдХрд╕реМрдЯреА рдкрд░ рдЦрд░реЗ рдЙрддрд░реЗ рд╣реИрдВ (рдХрдо рд╕реЗ рдХрдо рд╕реАрдПрд╕ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрдо рд╕рдордп рд░рд╣рд╛ рд╣реИ)ред

@turtleDev https://github.com/golang/go/issues/32825#issuecomment -507231353 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рдЧреЛ рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ panic рдФрд░ defer рдФрд░ recover - рд╣рдо рдЗрд╕реЗ "рдЕрдкрд╡рд╛рдж рдкреНрд░рдмрдВрдзрди" рдирд╣реАрдВ рдХрд╣рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╢рдмреНрдж рдПрдХ рдРрд╕реЗ рдЕрд░реНрде рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ рдЬреЛ рдЧреЛ рдХреЗ рд▓рд┐рдП рднреНрд░рд╛рдордХ рд╣реИред рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЧреЛ рд╡рд╣ рд╕рдм рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ raise рд╕рд╛рде try-catch рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫ (рдХреНрдпреЛрдВрдХрд┐ try-catch рд╡рд┐рдкрд░реАрдд, defer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд╕рд╢рд░реНрдд)ред рдзрдиреНрдпрд╡рд╛рджред

@sorenvonsarvort https://github.com/golang/go/issues/32825#issuecomment -507268293 рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ: рдпрджрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рддреНрд░реБрдЯрд┐ рд╕рдЬрд╛рд╡рдЯ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ if рдХрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдХреГрдкрдпрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рджреЗрдЦреЗрдВред рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рдЕрдм рддрдХ рдХрдИ рдмрд╛рд░ рдорд┐рд▓ рдЪреБрдХрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рджред

@cstockton https://github.com/golang/go/issues/32825#issuecomment -507306652 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рд╣рд╛рдВ, рд╣рдордиреЗ рдРрд╕реА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдордиреЗ "рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдиреЗ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рд╣реИ рдФрд░ try рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдХреЗрд╡рд▓ handle , рдЬреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдХреЛрдИ рд╣реИрдВрдбрд▓рд░ рдореМрдЬреВрдж рд╣реИ (рдФрд░ рдХреЗрд╡рд▓ рддрднреА), рддреЛ рдХреЛрдИ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рдПрд▓рдПрдЪрдПрд╕ рдореЗрдВ err рдХреЛ рдЫреЛрдбрд╝ рджреЗрдЧрд╛, рдФрд░ рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдЬреИрд╕реЗ рдПрдХ рдЕрджреГрд╢реНрдп try )ред рдпрд╣ рдЕрдЪреНрдЫрд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрджреГрд╢реНрдп рднреА рд╣реИ, рдЬреЛ рдПрдХ рдмрдбрд╝рд╛ рд▓рд╛рд▓ рдЭрдВрдбрд╛ рд╣реИред рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЛрдб рдореЗрдВ рд╣рд░ рдЬрдЧрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗред рдЗрд╕рдХреЗ рдмрд┐рдирд╛, рдХреЛрдб рдХреЛ рдкрдврд╝рдирд╛ рдФрд░ рдпрд╣ рджреЗрдЦрдирд╛ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдХрд┐ рддреНрд░реБрдЯрд┐ рдЬрд╛рдБрдЪ рдХрд╣рд╛рдБ рд╣реЛ рд░рд╣реА рд╣реИред

@griesemer рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд▓реЗрдХрд┐рди рдкреИрдирд┐рдХ рдФрд░ рд░рд┐рдХрд╡рд░ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдбрдХреНрд╢рди рдХреЛрдб рдмреЗрд╕ рдореЗрдВ рдЦреЛрдЬрдирд╛ рдмрд╣реБрдд рдХрдард┐рди рд╣реИред рдЬреЛ рдЖрдкрдХреЛ рдкреНрд░рд╡рд╛рд╣ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЗ рдХреЗрд╡рд▓ рд╕реАрдорд┐рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд╕рд╛рде рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдПрдХ рдирдпрд╛ рдирд┐рд░реНрдорд╛рдг рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рд╡рд╣ рд╕реНрдерд┐рд░рддрд╛ рдЯреВрдЯ рдЬрд╛рдПрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд░рд╡рд╛рд╣ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдПрдХ рдирдпрд╛ рдирд┐рдпрдВрддреНрд░рдг рд╣реИ рдЬреЛ рд╡рд╛рдкрд╕реА рдЬреИрд╕рд╛ рдХреБрдЫ рдХрд░рддрд╛ рд╣реИред

@ рдореИрдереНрдпреВ-рдиреЛрдХреЗрди https://github.com/golang/go/issues/32825#issuecomment -507323973 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рдЖрдк рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░ рд░рд╣реЗ рд╣реИрдВ; рдпрд╣ рдХрд╛рдлреА рд╣рдж рддрдХ рдбрд┐рдмрдЧрд░ рдХреЗ рд╡реЙрдЪ рдкреЙрдЗрдВрдЯ рдореИрдХреЗрдирд┐рдЬреНрдо рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдРрд╕реЗ рдХреБрдЫ рдкреНрд░рд╢реНрди рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрддреНрддрд░ рджреЗрдирд╛ рд╣реЛрдЧрд╛: рдХреНрдпрд╛ on рдмреНрд▓реЙрдХ рдХреЛ рд╡рд╛рдкрд╕ рд▓реМрдЯрдирд╛ рд╣реИ (рдореБрдЭреЗ рдРрд╕рд╛ рд╕рдВрджреЗрд╣ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ рдЖрдк рд╕реНрдкреЗрдЧреЗрдЯреА рдХреЛрдб рднреВрдорд┐ рдореЗрдВ рдЖ рдЬрд╛рддреЗ рд╣реИрдВ)? рдХреНрдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдРрд╕реЗ on рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ? on рд╕реНрдерд┐рддрд┐ рдХрд┐рддрдиреА рдЬрдЯрд┐рд▓ рд╣реЛ рд╕рдХрддреА рд╣реИ (рдкреНрд░рддреНрдпреЗрдХ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдкрд░ рдЗрд╕рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛)? рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдордирдорд╛рдиреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ on рдХрдерди рдХреЗ рд╕рд╛рде рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рдЪрд░ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЧреЛ рдореЗрдВ рдХреБрдЫ рд╣рдж рддрдХ рдПрдХ рдЕрднрд┐рд╢рд╛рдк: on рдирд┐рд░реНрдорд╛рдг рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рдЕрджреГрд╢реНрдп рдХреЛрдб рдХреЛ рдХрд╣реАрдВ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред

рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдПрдХреНрд╕рдкреНрд▓реЛрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдХрд╣реАрдВ рдФрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ (рдЧреЛрд▓рдВрдЧ-рдирдЯреНрд╕, рдпрд╛ рдПрдХ рдЕрд▓рдЧ, рдирдпрд╛ рдкреНрд░рд╕реНрддрд╛рд╡)ред рдзрдиреНрдпрд╡рд╛рджред

@as https://github.com/golang/go/issues/32825#issuecomment -507345821 рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ:

рдкреЙрдЗрдВрдЯрд░ рдЕрдВрдХрдЧрдгрд┐рдд рдХреЛ рдЗрд╕ рдЖрдзрд╛рд░ рдкрд░ рдЧреЛ рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдЦрд░рд╛рдм, рдЯреВрдЯреЗ рд╣реБрдП рдХреЛрдб рдХреЛ рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ

рджрд░рдЕрд╕рд▓, рдЗрд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдг рдореБрд╢реНрдХрд┐рд▓ рдпрд╛ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рдерд╛ (рдФрд░ рд╣рд╛рдВ, рдХреЛрдИ рднреА рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рднреА рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдирд┐рд░реНрдгрдп рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдареЛрд╕ рд╕рдмреВрдд рдФрд░ рдЕрдиреБрднрд╡ рдереЗред

рдЕрднреА рддрдХ рдХреЛрдИ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рд╣реИ рдФрд░ рдХреЛрдИ рд╕рдмреВрдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдиреЗрд╕реНрдЯреЗрдб try рдкреНрд░рдЪрд▓рд┐рдд рдпрд╛ рдЖрдо рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рд▓реЗрдХрд┐рди https://github.com/golang/go/issues/32825#issuecomment -507358397 рджреЗрдЦреЗрдВред

@turtleDev https://github.com/golang/go/issues/32825#issuecomment -507368167 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рдПрдХ panic _exactly_ рдПрдХ рдЕрдкрд╡рд╛рдж рд╣реИ, рдФрд░ recover рдПрдХ рдЖрд╕реНрдердЧрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ catch ред рдЙрддреНрдкрд╛рджрди рдХреЛрдб рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЦреЛрдЬрдирд╛ рдХрдард┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЧреЛ рдореЗрдВ рд╣рдо рдЖрдкрдХреЛ рдЕрдкрд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдирд╛ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ; рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЕрд╕рд╛рдзрд╛рд░рдг рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ: рдкреНрд░рд╕реНрддрд╛рд╡ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ try рдХреЗрд╡рд▓ рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рдЪреАрдиреА рд╣реИ, рдФрд░ рдХреБрдЫ рдирд╣реАрдВред

рдореИрдВрдиреЗ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рд╣рд╛рд▓ рдХреА рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдЗрдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ try рдЕрдВрдХ #32437 рдореЗрдВ try рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд░ рдирдИ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдЬрд╛рд░реА рд░рдЦреЗрдВ (рдЕрдм рдЖрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЕрдирд▓реЙрдХ); рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ leave err != nil alone рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдЖрд░рдХреНрд╖рд┐рдд рдЫреЛрдбрд╝ рджреЗрдВред рдзрдиреНрдпрд╡рд╛рджред

@cstockton https://github.com/golang/go/issues/32825#issuecomment -507306652 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдФрд░ рдЯрд┐рдкреНрдкрдгреА: рдЕрдЧрд░ рд╣рдордиреЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВ

    func f() int { ... }
    ...
    x := f()

рдФрд░ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ

    func f() (int, error) { ... }

рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ x := f() рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдЪрд╛рдирдХ рдФрд░ рдЪреБрдкрдЪрд╛рдк рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред

рдореИрдВрдиреЗ рд╣рдорд╛рд░реЗ рд╕рднреА рдЧреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкрд░ @lpar рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рдкреНрд░рдпреЛрдЧ рдХрд┐рдПред рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рд╕рд╛рд░ рдореЗрдВ рд╣реИрдВ: https://gist.github.com/freeformz/55abbe5da61a28ab94dbb662bfc7f763

@ianlancetaylor рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдФрд░ рдмреЗрд╣рддрд░ рддреНрд░реБрдЯрд┐ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЛ рдмрд╣реБрдд рдХрдо рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдмрдирд╛ рджреЗрдЧрд╛ред рджреЛ рдореБрдЦреНрдп рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдкрд╣рд▓реЗ рдХреЙрд▓рд░ рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ:

func f() int { ... }
func a() error {
    x := f() // if f() is updated to return an error, we get automatic error propagation by default
    ...
}

func b() {
    x := f() // if f() is updated to return an error, we get the same compiler error 
    // assignment mismatch: 1 variable but pkg.f returns 2 values
}

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдо рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓рд╛рдн рд╣реИ, рдХреЛрдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдЬрд╣рд╛рдВ рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рднрдВрдЧреБрд░ рд╣реИрдВред рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдореИрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреБрд░рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдПрдХ рдореНрдпреВрдЯреЗрдХреНрд╕ рдХреЛ рдбреЗрдбрд▓реЙрдХ рдХрд░ рд░рд╣рд╛ рд╣реИ:

func (t *T) a() error {
   t.mu.Lock()
   x := f() // if f() is updated to return an error, we get automatic error propagation by default
   if x > 15 {
     t.mu.Unlock()
     return errors.New("t > 15")
   }
   ...
}

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдХреЛрдб рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбреЗрдбрд▓реЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИ рдпрджрд┐ рдпрд╣ рд╡реИрдз рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдлрд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рджреЗрд╢реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЙрд▓ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЗрд╕реЗ рдРрд╕реЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЖрддрдВрдХ рд╕реЗ рдкрд░реЗ рд░рд╣ рд╕рдХрддрд╛ рд╣реИ рддреЛ рдпрд╣ рдЧрддрд┐рд░реЛрдз рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╡рд╣реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдПрдирдкреАрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░рдирдЯрд╛рдЗрдо рдкреИрдирд┐рдХ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрдЦреНрдп рдкреНрд░реЗрд░рдХ рдвреЗрд░ рдкрд░ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ defers рдХреА рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд▓рд╛рдЧрдд рд╣реИред рд╕реНрдЯреИрдХ рдкрд░ рд░рд╣рдиреЗ рд╡рд╛рд▓реЗ рд╕рд┐рдВрдЧрд▓-рдбрд┐рдлрд░реНрд╕ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХреЛрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐ рдХреА рдХрд┐рд╕реА рднреА рд╡реНрдпреБрддреНрдкрддреНрддрд┐ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рджреВрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдВрдд рдореЗрдВ рдЯреВрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде "рдХреЛрд╢рд┐рд╢" рдХреА рдХрдореА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рддрд░реНрдХреЛрдВ рдХреА рддрд░рд╣ рдпрд╣рд╛рдВ рднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЧреЛ-рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрдврд╝рддреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ "рд▓рд╛рдЗрдмреНрд░реЗрд░реА-рдЕрдкрдЧреНрд░реЗрдб рд▓рд╛рдЗрдирд┐рдВрдЧ" рдЪрд░рдг рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрд╡рд╕рд░ рд╣реИ, рддрд╛рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рдордиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд░рдЦрд╛ рдЬрд╛ рд╕рдХреЗред

@griesemer

рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ: рдкреНрд░рд╕реНрддрд╛рд╡ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдХреЛрд╢рд┐рд╢ рдХреЗрд╡рд▓ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛рддреНрдордХ рдЪреАрдиреА рд╣реИ, рдФрд░ рдХреБрдЫ рдирд╣реАрдВред

рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди try рдореИрдХреНрд░реЛ (рдЬреИрд╕реЗ рд╕реА) рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкреНрд░рд╡рд╛рд╣ рд╡рд┐рд╡рд░рдг рдХрд╛ рдПрдХ рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рд╣реИред

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдЙрджреНрджреЗрд╢реНрдп рддрд░реНрдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдореЗрдВ рдмреЗрд╣рддрд░ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ try рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдлрд┐рд░, рдпреЗ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ рдФрд░ рдореИрдВ рдЙрдирдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЧреЛ рдЯреАрдо рдиреЗ рдЗрд╕ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред

рд╕рд╛рдЗрдб: рдпрд╣ рдореБрдЭреЗ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ 1335 рдЕрдкрд╡реЛрдЯ рд╣реИрдВ рдЬрдмрдХрд┐ try рдкреНрд░рд╕реНрддрд╛рд╡ (#32437) рдореЗрдВ рдХреЗрд╡рд▓ 279 рдбрд╛рдЙрдирд╡реЛрдЯ рд╣реИрдВред рдореИрдВ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧ try рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдХрдо рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдореБрджрд╛рдп рдХреА рднрд╛рд╡рдирд╛рдПрдВ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рджреЛрдиреЛрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд░рд╕реНрдкрд░ рдЕрдирдиреНрдп рд╣реИрдВред

@griesemer

рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдЕрд▓рдЧ рд╣реИ: рдХрднреА-рдХрднреА рд╣рдо рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рдХрднреА-рдХрднреА рд╣рдо рдПрдХ рд╕рдЬрд╛рдП рдЧрдП рддреНрд░реБрдЯрд┐ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВ, рдХрднреА-рдХрднреА рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рдкрд░ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХрднреА-рдХрднреА рд╣рдо (рд╕рд╣реА рдврдВрдЧ рд╕реЗ) рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд╣рд╛рдБ рд╕рд╣рдордд рд╣реВрдБ, рдЗрддрдирд╛ рд╕реНрдкрд╖реНрдЯ рд╣реИред

рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рд╡реЗ рд╕рднреА рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ (рд╕рд┐рд╡рд╛рдп рдЬрдм рд╣рдо рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реИрдВ) err != nil рдкрд░реАрдХреНрд╖рдг рд╣реИ (рдЬрд┐рд╕реЗ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдЗрди рд╕рднреА рдорд╛рдорд▓реЛрдВ (рдпрд╛ рдЙрдирдореЗрдВ рд╕реЗ 95%) рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдЬрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рдЕрдиреНрдп рдирд┐рдпрдВрддреНрд░рдг рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЧреИрд░-рдСрд░реНрдереЛрдЧреЛрдирд▓ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рдиреЗ рдХреА рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдпрд╛рдиреА, рд╣рдо рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ (рд╢рд╛рдпрдж 20%, рд╢рд╛рдпрдж 50%) рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд try() рдХрдерди рднреА рдЧреИрд░-рдСрд░реНрдереЛрдЧреЛрдирд▓ рддрд░реАрдХреЛрдВ рд╕реЗ if рдФрд░ return рд╕рд╛рде "рд╣рд╕реНрддрдХреНрд╖реЗрдк" рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рддрд░реНрдХ рд╕рд╣реА рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдВ рдХреБрдЫ рд▓реЛрдЧ рдЗрд╕реА рдХрд╛рд░рдг рд╕реЗ try() рдХреЛ рдирд╛рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрд╕рд╣рдордд рд╣реВрдВред рдЧреЛ рдУрдмреЗрд░реЙрди рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕рд░рд▓ рд╣реИ рд▓реЗрдХрд┐рди рдиреНрдпреВрдирддрд░ рдирд╣реАрдВ рд╣реИ, рдЧреЛ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИред

рдЬрд╣рд╛рдВ рд╣рдо рдЕрд╕рд╣рдордд рд╣реИрдВ, рдпрд╣ рдПрдХ рднрд╛рд╖рд╛ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдкрд░реЗрд╢рд╛рди рд╣реЛрдиреЗ рдХреЗ рд▓рд╛рдпрдХ рднреА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рд╕реНрд╡рдпрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ, рдХреЗрд╡рд▓ рд╕реАрдорд┐рдд рдЙрдкрдпреЛрдЧ рдФрд░ рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА if рдФрд░ return рд╕рд╛рде рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред try() рдЗрддрдиреЗ рдЕрднрд┐рднреВрдд рд╣реИрдВ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рднрд▓реЗ рд╣реА рдпрд╣ рд░рд┐рдЯрд░реНрди рдХреЗ рд╕рд╛рде рдСрд░реНрдереЛрдЧреЛрдирд▓ рди рд╣реЛ, рдПрдХ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА, рдЕрдзрд┐рдХ рдЖрдо рддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧреА try() рд╢рд╛рдпрдж рд╡рд╣реА рд╣реИ рдЬреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЧреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред

@beoran ,

рдЖрдкрдиреЗ рд▓рд┐рдЦрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ "рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА", "рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА" try() рдЪрд╛рд╣реЗрдВрдЧреЗред

@griesemer рдиреЗ 4 рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛:

  1. рддреНрд░реБрдЯрд┐ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд▓реМрдЯрд╛рдПрдВ
  2. рдПрдХ рд╕рдЬрд╛рдпрд╛ рд╣реБрдЖ рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛рдПрдВ
  3. рддреНрд░реБрдЯрд┐ рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ
  4. рддреНрд░реБрдЯрд┐ рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВ

try() рдбрд┐рдЬрд╛рдЗрди рджреНрд╡рд╛рд░рд╛ 1 рд╣рд▓ рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рд╕рдЪрдореБрдЪ if err != nil { return ..., err } рд▓рд┐рдП рдПрдХ рд╢реЙрд░реНрдЯрдХрдЯ рд╣реИред

рдореМрдЬреВрджрд╛ рднрд╛рд╖рд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ 3 рдФрд░ 4 рдХреЛ рд╣рд▓ рдХрд░рддреА рд╣реИрдВред рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА if err != nil { ... } рд╕рд╛рде рдПрдХ рддреНрд░реБрдЯрд┐ рдкрд░ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рдВрд░рдЪрдирд╛ рдЦреЛрдЬрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА _ рд╕рд╛рде рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рд╣рдореЗрдВ 2 рдХреЗ рд╕рд╛рде рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ (рдПрдХ рд╕рдЬрд╛рдП рдЧрдП рддреНрд░реБрдЯрд┐ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░реЗрдВ)ред try() рдкреНрд░рд╕реНрддрд╛рд╡ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдердЧрд┐рдд рдХрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ, рдпрд╛ рдпрджрд┐ рдкреНрд░рддреНрдпреЗрдХ рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд╕рдЬрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддреЛ рдорд╛рдирдХ if err != nil { ... } рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдЗрд╕ рднрд╛рдЧ рдореЗрдВ рддрд░реНрдХ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рд╣рдорд╛рд░рд╛ рдкрд╣рд▓рд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧреЛрдВ рд╕реЗ рджреЛ рд╡рд┐рдЪрд╛рд░реЛрдВ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдерд╛, рдЬреЛ рдПрдХ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЧреЛ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдирдИ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рднрд╛рд╖рд╛ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрдЬрд╛рдп рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдЙрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╣рдорд╛рд░реЗ рдПрд░рд░ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдкрд╛рд╕ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рдХреНрд╕реНрдб рдлрдВрдХреНрд╢рди рд╕рд┐рдЧреНрдиреЗрдЪрд░ func(error) error рдерд╛ред рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ try рджреНрд╡рд╛рд░рд╛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╕рдВрд▓рдЧреНрди рдлрд╝рдВрдХреНрд╢рди рд╕реЗ try рд╡рд╛рдкрд╕ рдЖрдиреЗ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

handler := func(err error) error {
        return fmt.Errorf("foo failed: %v", err)  // wrap error
}

f := try(os.Open(filename), handler)              // handler will be called in error case

рдЬрдмрдХрд┐ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдиреЗ рдХреБрд╢рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рддреНрд░реБрдЯрд┐ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рджреА, рдЗрд╕рдиреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд░рд╢реНрди рднреА рдЦреЛрд▓реЗ рдЬрд┐рдирдХреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╣реА рдЙрддреНрддрд░ рдирд╣реАрдВ рдереЗ: рдпрджрд┐ рд╣реИрдВрдбрд▓рд░ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╢реВрдиреНрдп рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдХреНрдпрд╛ try рдШрдмрд░рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдЗрд╕реЗ рдПрдХ рдЕрдиреБрдкрд╕реНрдерд┐рдд рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрдЪрд╛рд╣рд┐рдП? рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдЧреИрд░-рд╢реВрдиреНрдп рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╢реВрдиреНрдп рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ "рд░рджреНрдж" рд╣реИ? рдпрд╛ рд╕рдВрд▓рдЧреНрди рдХрд╛рд░реНрдп рд╢реВрдиреНрдп рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╣ рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ рдХрд┐ рд╡реИрдХрд▓реНрдкрд┐рдХ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЙрдЪрд┐рдд рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджреЗрдВрдЧреЗред рд╣рд░ рдЬрдЧрд╣ рдЙрдЪрд┐рдд рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХрд░рдирд╛ рднреА рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ рд▓реЗрдХрд┐рди try рдПрдХ рднреА рдШрдЯрдирд╛ рдпрд╛рдж рдЖрддреА рд╣реИред рдЗрддреНрдпрд╛рджрд┐ред

рдЕрдЧрд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдиреЗ рддреНрд░реБрдЯрд┐ рд░реИрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП defer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ред рдпрд╣ рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдиреЗ рддреНрд░реБрдЯрд┐ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЛ рдХреЛрдб рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рджреГрд╢реНрдпрдорд╛рди рдмрдирд╛ рджрд┐рдпрд╛ред рдЗрд╕ рдХрджрдо рдиреЗ рддреНрд░реБрдЯрд┐ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рд╕рднреА рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдерд╛ рдХрд┐ рдпрджрд┐ рдЙрди рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рддреЛ рддреНрд░реБрдЯрд┐ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рд╣рдордиреЗ рддрдп рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдареАрдХ рдерд╛)ред

[...]

рдпрджрд┐ рд╣рдо рд╕рдбрд╝рдХ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рди, рдпрд╛ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреНрдп рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рддреЛ рдЙрд╕ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рдХреЛ рдПрдХ рдХреЛрд╢рд┐рд╢ рдХреЙрд▓ рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред

рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рддрд░реНрдХ рд╕реЗ рдЕрд╕рд╣рдордд рд╣реИрдВ?

рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЬрд╛рдирддрд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдЗрд╕рд╕реЗ рдЕрд╕рд╣рдордд рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдХрд╛рд░рдг рдкреНрд░рд╢реНрди рдЦреЛрд▓реЗ рдЧрдП рдереЗ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХрд╛ рд╕реАрдзрд╛ рд╕рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЙрди рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЙрдЪрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реЛрдЪрдирд╛ рд╣реЛрдЧрд╛ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдм, рд╣рдо рд╕рднреА 4 рддреНрд░реБрдЯрд┐ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдХреЛ if err != nil рдХрдерди рдХреЗ рд╕рд╛рде рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рдВрдЧрдд рдЧреЛ рдореБрд╣рд╛рд╡рд░рд╛ред рдХреЗрд╡рд▓ рдХреЗрд╕ 1 рдХреЗ рд▓рд┐рдП try() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдФрд░ рд╕рдВрднрд╡рдд: рдХреЗрд╕ 2 рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдореЗрдВ рдбрд┐рдлрд░ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рдПрд░рд░ рд░реИрдкрд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рдУрд╡рд░рд╣реЗрдб рдкрд░ рдХреЛрдИ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрд░рд░ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдб if рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред try рдЕрд╕рдВрдЧрдд рд░реВрдк рд╕реЗ, рдФрд░ рдпрджрд┐ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдФрд░ рджреВрд╕рд░реЗ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

try() рдПрдХ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕рдВрд╕реНрдХрд░рдг, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рдореЗрдВ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ try() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдФрд░ рдпрд╣ рддрдм рдЧреЛ рдХреЗ рд▓рд┐рдП рдирдпрд╛, рд╕реБрд╕рдВрдЧрдд рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдореБрд╣рд╛рд╡рд░рд╛ рдмрди рдЬрд╛рдПрдЧрд╛ред

рд╣рд╛рд▓рд╛рдВрдХрд┐, try() рд╕рд╛рде, рдЬреИрд╕рд╛ рдХрд┐ рдЕрднреА рд╣реИ, рдпрд╣ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рдХреЛрдб рдмреЗрд╕ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдЕрд╕рдВрдЧрддрд┐ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╡рд░реНрддрдорд╛рди try() рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ рдЕрднрд┐рднреВрдд рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рд╕реЛрдЪрддрд╛ рд╣реВрдВ рдХрд┐ рдХреБрдЫ рди рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред

@beoran рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдорд╛рдорд▓реЛрдВ 1 рдФрд░ 2 рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдПрдХ рддреНрд░реБрдЯрд┐ (рдХреНрд░рдорд╢рдГ рдмрд┐рдирд╛ рдФрд░ рд╕рдЬрд╛рд╡рдЯ рдХреЗ рд╕рд╛рде) рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдо рд╣реИ, рдЬрдмрдХрд┐ рдорд╛рдорд▓реЗ 3 рдФрд░ 4 рдирд╣реАрдВ (рдХреНрд░рдорд╢рдГ рдПрдХ рддреНрд░реБрдЯрд┐ рдкрд░ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реИрдВ)ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 'рдХреЛрд╢рд┐рд╢ ()' рдорд╛рдорд▓реЛрдВ 1 рдФрд░ 2 рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ try() рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ 1 рдФрд░ 2 рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИрдВрдбрд▓рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдХреЗ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдмреЗрд╢рдХ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдЙрдЪрд┐рдд рдЙрддреНрддрд░ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЯреНрд░реИрдХреНрдЯреЗрдмрд▓ рд▓рдЧрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдРрд╕рд╛ рдХреБрдЫ рд╕рдорд░реНрдерди рдХрд░реЗрдВрдЧреЗ?

рдпрд╣рд╛рдБ рдореБрдЭреЗ рдмрд╛рд╣рд░ред рдпрджрд┐ рдРрд╕рд╛ рд╣реИ рддреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ, рд╣рдореЗрдВ рд╕рдВрднрд╡рддрдГ рдЬрд╛рдБрдЪ рдХреА рдЧрдИ рддреНрд░реБрдЯрд┐рдпрд╛рдБ (рдЬреИрд╕реЗ рдЬрд╛рдБрдЪ рдХрд┐рдП рдЧрдП рдЕрдкрд╡рд╛рдж) рдЬреЛрдбрд╝рдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рддрд░рд╣ рд╣рдо рдпрдерд╛рд╕рдВрднрд╡ рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдкреВрд░реА рдЧрдВрднреАрд░рддрд╛ рд╕реЗ, рдЕрдЧрд░ рдЗрди рдирд┐рд░реНрдгрдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рдкреАрдЫреЗ рдореИрдВ рд╣реА рд╣реЛрддрд╛, рддреЛ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдЯрд▓рд┐рди ? рдСрдкрд░реЗрдЯрд░ рдпрд╛ рдЬрдВрдЧ unwrap() рд╡реНрдпрд╡рд╣рд╛рд░ рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛:

getFile()?.getPath()?.toString()

рдЬрд╣рд╛рдВ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрдиреЗ рдкрд░ рдЖрдкрдХреЛ nil рд╡рд╛рдкрд╕ рдорд┐рд▓рддрд╛ рд╣реИ рдпрд╛

get_file().unwrap().get_path().unwrap().lossy_to_string()

рдЬрд╣рд╛рдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рдЖрдзрд╛ рдЙрдбрд╝ рдЬрд╛рддрд╛ рд╣реИред рдЬрдВрдЧ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ match рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдиреЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдЦреЛрдЬ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ, рд╕рднреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред

7/2/19 рдХреЛ, рдирд┐рдХреЛрд▓рд╕ рдЧреНрд░рд┐рд▓реА рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@beoran рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдорд╛рдорд▓реЗ 1 рдФрд░ 2 рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдо рд╣реИ
рд╕рдорд╛рд░реЛрд╣ (рдХреНрд░рдорд╢рдГ рдмрд┐рдирд╛ рдФрд░ рд╕рдЬрд╛рд╡рдЯ рдХреЗ рд╕рд╛рде), рдЬрдмрдХрд┐ рдорд╛рдорд▓реЗ 3 рдФрд░ 4
рди рдХрд░реЗрдВ (рдХреНрд░рдорд╢рдГ рдПрдХ рддреНрд░реБрдЯрд┐ рдкрд░ рдХрд╛рд░реНрдп рдХрд░реЗрдВ рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВ)ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 'рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ ()'
рдХреЗрд╕ 1 рдФрд░ 2 рдкрд░ рдлреЛрдХрд╕ рд╣реИред

рдореИрдВ рдЕрдкрдиреЗ рд╕реБрдЭрд╛рд╡ рдХреА рдЕрдзрд┐рдХ рдЪрд░реНрдЪрд╛ рди рджреЗрдЦрдХрд░ рдХреБрдЫ рдирд┐рд░рд╛рд╢ рд╣реВрдБ
рдХрд┐ рдпрд╣ "рддреНрд░реБрдЯрд┐ рд╡рд╛рдкрд╕реА" рдХрд╛ "рд╡рд╛рдкрд╕реА" рднрд╛рдЧ рд╣реИ рдЬрд┐рд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рд╕рдВрдмреЛрдзрд┐рдд, "рддреНрд░реБрдЯрд┐" рднрд╛рдЧ рдирд╣реАрдВред

рддреЛ рдлрд┐рд░, рд╢рд╛рдпрдж рдореБрдЭреЗ рдФрд░ рдЕрдзрд┐рдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред рдореИрдВ рд╣реВрдБ
рдмрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рдореИрдВ рд╣рд░ рдЬрдЧрд╣ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ
рдЬрдЧрд╣ред

рдорд╛рдорд▓реЗ 1 рдФрд░ 2, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, "рдЕрд╕рдлрд▓" рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдмреЗрд╣рддрд░ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ
рдХреАрд╡рд░реНрдб рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ (рдХреБрдЫ рдХреЛ рдЗрд╕рдХреА рдЖрджрдд рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж) a
рдХрд╛рд░реНрдпрдХреНрд░рдо рдкреНрд░рд╡рд╛рд╣ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рдЬреЛ рдХрд┐рд╕реА рдХреЗ рдЕрдзреАрди рдирд╣реАрдВ рд╣реИ
рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкрд░рдВрдкрд░рд╛ рдЗрд╕рдХреЗ рдкреВрд░реНрдг рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВред

рдЗрд╕рд╕реЗ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рд╣реИ рдХрд┐
рдЕрдВрддрд┐рдо рд░рд┐рдЯрд░реНрди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ "рдЧрд▓рддреА" рдХреА рд╕реНрдерд┐рддрд┐ рдЬрд▓реНрдж рд╣реА рд╣реИ
рдХрдиреНрд╡реЗрдВрд╢рди рдХреЗ рдмрдЬрд╛рдп рдХрд╛рдиреВрди рдмрдиреЗрдВред рдпрд╣ рдХрдИ "рдЕрдирдкреЗрдХреНрд╖рд┐рдд" or . рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ
"рд╕рдВрдкрд╛рд░реНрд╢реНрд╡рд┐рдХ" рдкрд░рд┐рдгрд╛рдо рдЬрд┐рдиреНрд╣реЗрдВ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдРрд╕реЗ рдФрд░ рднреА рдХрдИ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдВрдЧреЗ, рдиреНрдпреВрдирддрдо рд╕реЗ рд▓реЗрдХрд░ . рддрдХ
рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА, рдХреБрдЫ рдЬреЛ рдХреЗрд╡рд▓ рдЕрд╡рд╕рд░рд╡рд╛рджреА рд░реВрдк рд╕реЗ рдЧреБрд▓реНрд▓рдХ рдореЗрдВ рд╣реИрдВ
рдкреНрд░рд╕реНрддрд╛рд╡ред рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕рд╛рд╡рдзрд╛рдиреА рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЧрд▓рддреА рдХрд░реВрдВрдЧрд╛, рдореИрдВ рдХрд░рддрд╛ рд╣реВрдВ
рд╕рдордЭреЗрдВ рдХрд┐ рдЧреЛ рдЯреАрдо рдФрд░ рд░реЙрдмрд░реНрдЯ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреНрдпреЛрдВ рдорд╛рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
рд╕рдорд░реНрдерди рдФрд░ рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рдЪреЛрдЯ рд▓рдЧреА рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рд░реЛрдз рдЗрддрдирд╛ рдирд┐рдХрд▓рд╛
рдорд╣рд╛рдиред

рдпрд╣ рд░рд╛рдЬрдиреАрддрд┐рдХ рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛рдУрдВ рдХрд╛ рдЯрдХрд░рд╛рд╡ рд╣реИ, рд╢рд╛рдпрдж рд╣рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдЦреЛрджрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬрдбрд╝реЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд╣рд░рд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдХреБрдЫ рдмрд╛рдЧрд╡рд╛рдиреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

@lootch рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП try рд▓рд┐рдП рдЕрдВрддрд┐рдо рд░рд┐рдЯрд░реНрди рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдЪрд┐рдВрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдореНрдореЗрд▓рди рдирд╣реАрдВ рд╣реИ?

(рдПрдХ рддрд░рдл рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдкреНрд░рддрд┐рд░реЛрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ "рдЖрд╣рдд" рдирд╣реАрдВ рд╣реИрдВ - рдЬреНрдпрд╛рджрд╛рддрд░ рдмрд╛рд╣рд░реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реИрдВред)

@griesemer рд╣реЛрд░реА рдХрд╛рд░ рд╕рд╛рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рд╕реНрддрд╛рд╡ рдРрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ "рд╣рдордиреЗ рддрдп рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рдЧреИрд╕реЛрд▓реАрди рдХрд╛рд░реЛрдВ рдореЗрдВ рдпрд╛ рддреЛ рдПрдХ рдбреАрдЬрд▓ рдИрдВрдзрди рдкреНрд░рдгрд╛рд▓реА, рдпрд╛ рд╕рднреА рдЧреИрд╕реЛрд▓реАрди рдХрд╛рд░реЛрдВ рдореЗрдВ рдПрдХ рдмреИрдЯрд░реА рдФрд░ рдЗрд▓реЗрдХреНрдЯреНрд░рд┐рдХ рдореЛрдЯрд░ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред" рдЧреЛ рдХреА рдПрд░рд░ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХрд╛рдлреА рдЕрдЪреНрдЫреА рд╣реИред рдореБрдЭреЗ рдЪрд┐рдВрддрд╛ рд╣реИ рдХрд┐ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдореВрд▓реНрдп рд▓рд╛рдЧрдд рд╕реЗ рдХрдо рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдирдП рдлрд╝реБрдЯрдЧрди рдФрд░ рдорд╛рдирд╕рд┐рдХ рдУрд╡рд░рд╣реЗрдб рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдореИрдВ рдмрд╕ рдПрдХ рддреНрд╡рд░рд┐рдд рдЯрд┐рдкреНрдкрдгреА рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЧреЛ рд▓рд┐рдЦреЗ рд╣реИрдВ (рдореИрдВ 200 9 рдореЗрдВ рдЕрдкрдиреА рдкрд╣рд▓реА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░рд┐рд▓реАрдЬ рдХреЗ рдмрд╛рдж рд╕реЗ рдЧреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ - рдореЗрд░рд╛ рдЬреАрдердм рджреЗрдЦреЗрдВ) рдореИрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рдЖрд╕рдкрд╛рд╕ рдПрд░реНрдЧреЛрдиреЙрдорд┐рдХреНрд╕ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддрд╛ рд╣реВрдВ

рдореИрдВ рдЗрд╕ рдкрд░ рдХрд╛рдлреА рдирд╛рд░рд╛рдЬ рд╣реЛ рдЧрдпрд╛ рдерд╛ рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдШрдмрд░рд╛рд╣рдЯ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреБрдЫ рдЪреАрдиреА рд▓рд┐рдЦреА рдереА рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рддрд░рд╣ (рдЬреНрдпрд╛рджрд╛рддрд░) рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдерд╛: https://hackthology.com/exceptions-for-go-as-a-library ред рдПрдЪрдЯреАрдПрдордПрд▓ ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрди рд░реИрдкрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рдореБрджрд╛рдп рдореМрдЬреВрдж рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рдЖрд╕рдкрд╛рд╕ рдПрд░реНрдЧреЛрдиреЙрдорд┐рдХреНрд╕ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рдПрдХ рдЬреАрдд рд╣реИред

рдпрд╣ рдкрд╛рдЧрд▓ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЛрдЧ рдПрдХ рдЕрддреНрдпрдВрдд рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд▓реЗрдХрд┐рди рдЕрдиреБрдкрдпреЛрдЧреА рддрд░реАрдХреЗ рд╕реЗ рддреНрд░реБрдЯрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрд░рджрд╛рд░ рдмрд╣рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХреЛрдб (рдФрд░ рдЕрдиреНрдп рдХреЛрдб) рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрдЧреНрд╕ рдХреЛ рд▓рд┐рдЦрд╛ рдФрд░ рдкрд╛рдпрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд▓реЛрдЧреЛрдВ рдиреЗ if err != nil рд╢рд░реНрдд рдХреЛ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдмрдЧреНрд╕ рдмрдирд╛рдП рд╣реИрдВред рдЙрди рдмрдЧреЛрдВ рдХреЗ рдХрднреА рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред рд╕реНрдереИрддрд┐рдХ рдЬрд╛рдБрдЪ рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИ рд▓реЗрдХрд┐рди рдЗрди рдмрдЧреЛрдВ рдХреЛ рдЦрддреНрдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреАред

рдореИрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рдЗрд░реНрджрдЧрд┐рд░реНрдж рдПрд░реНрдЧреЛрдиреЙрдорд┐рдХреНрд╕ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВред

рдкреНрд░рд╕реНрддрд╛рд╡ рдкреНрд░рдХреНрд░рд┐рдпрд╛ https://golang.org/s/proposal , "рдкреНрд░рдкреЛрдЬрд╝рд┐рдВрдЧ рдЪреЗрдВрдЬреЗрд╕ рдЯреВ рдЧреЛ" рдХреЛ рдЙрджреНрдзреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред
рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХрд┐рд╕реА рдмрджрд▓рд╛рд╡ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рдХрд░ рд░рд╣реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдПрдХ рд╢реНрд░реЗрдгреА рдХреА рддреНрд░реБрдЯрд┐ рд╣реИред
рдЕрдЧрд░ рдХрд┐рд╕реА рдиреЗ "рдЕрдХреЗрд▓реЗ рдЫреЛрдбрд╝реЛ" рд╢реАрд░реНрд╖рдХ рд╕реЗ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд╛рдпрд░ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдВрдж рдХрд░ рджреЗрдВрдЧреЗред

рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдореБрджреНрджрд╛ #32437 рдЬреИрд╕реЗ рдЕрдиреНрдп рдореБрджреНрджреЛрдВ рдХреА рдЪрд░реНрдЪрд╛ рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ "рдХреБрдЫ рди рдХрд░реЗрдВ" рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рдЬрдЧрд╣ рдХреЗ рд░реВрдк рдореЗрдВ рдЦреБрд▓рд╛ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ред

рдореИрдВрдиреЗ рдЗрд╕реЗ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡-рд╣реЛрд▓реНрдб рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдХреЛрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд░реНрдгрдп рдирд╣реАрдВ рд╣реИ, рдЕрдзрд┐рдХ рдореЗрдЯрд╛-рдирд┐рд░реНрдгрдпред

рд╕рд╛рдЗрдб: рдпрд╣ рдореБрдЭреЗ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ 1335 рдЕрдкрд╡реЛрдЯ рд╣реИрдВ рдЬрдмрдХрд┐ try рдкреНрд░рд╕реНрддрд╛рд╡ (#32437) рдореЗрдВ _only_ 279 рдбрд╛рдЙрдирд╡реЛрдЯ рд╣реИрдВред

рдЬрдм рддрдХ рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛, рддрдм рддрдХ рдкреНрд░рдпрд╛рд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдХрдо рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рд▓рд┐рдП рднреА рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

7/2/19 рдХреЛ рд░реЙрдмрд░реНрдЯ рдЧреНрд░рд┐рд╕реЗрдорд░ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@lootch рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЕрдВрддрд┐рдо рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд╕рд╛рде рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдЪрд┐рдВрддрд╛ рд╣реИ
рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП try рд▓рд┐рдП рд╡рд╛рдкрд╕реА рдкреИрд░рд╛рдореАрдЯрд░? рдХреНрдпрд╛ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд╣реАрдВ рд╣реИ
рд╕рдореНрдореЗрд▓рди?

рдореИрдВ рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдЧрд░ рд╡рд╣ рдкрддреНрдерд░ рдореЗрдВ "рд╡рд╛рд╕реНрддрд╡рд┐рдХ" рд╣реЛ рдЧрдпрд╛, рддреЛ
рд╡рд╣ рджрд░рд╡рд╛рдЬрд╛ рдЦреБрд▓рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ "рддреНрд░реБрдЯрд┐" рдХреЛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ, рд╡рд┐рд╢реЗрд╖ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
рддрд░реНрдХ рдЯрд╛рдЗрдк рдХрд░реЗрдВ рдФрд░ рдЙрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣рд╛рдВ рд╣рд░ рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП
рдмрд╣реБрдд рд╕реЗ рдЧрд▓рдд рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рд╡реЗ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ
рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ред

рдПрдХ рдмрд╛рд░ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд┐ "рд╡рд╛рдкрд╕реА" рдХрдерди рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП
рдЕрдзрд┐рдХ рдЧрд╣рд░рд╛рдИ рд╕реЗ (рдФрд░ рдХреЛрд╢рд┐рд╢ рдкреНрд░рд╕реНрддрд╛рд╡ рдЙрд╕рдореЗрдВ рдЗрд╢рд╛рд░рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ)
рджрд┐рд╢рд╛), рддреЛ рддреНрд░реБрдЯрд┐ рд╕реНрдерд┐рддрд┐ рдЕрдм "рдХреЗрд╡рд▓ рдПрдХ рдорд╛рди рдирд╣реАрдВ рд╣реИ, рдФрд░
рдЧреЛ рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рддрд╛рд╢ рдХреЗ рдкрддреНрддреЛрдВ рдХреЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рдШрд░ рдЬреИрд╕рд╛ рджрд┐рдЦрдиреЗ рд▓рдЧрддрд╛ рд╣реИ
рддрд╛рд░реАрдЦ, рд▓реЗрдХрд┐рди рддрд╛рд╢ рдХрд╛ рдПрдХ рдШрд░, рдлрд┐рд░ рднреАред

рдореИрдВ рдЧреЛ рдХреА рдХреБрдЫ рдЪрддреБрд░ рдЪрд╛рд▓реЛрдВ рдХрд╛ рдЕрдирд┐рдЪреНрдЫреБрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реВрдВ (рдореЗрд░реЗ рдкрд╛рд╕ рд╣реИ
рдХрд╣реАрдВ рдФрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ x++ рдФрд░ x-- рд╕реБрд╡рд┐рдзрд╛ рдирд╣реАрдВ рд╣реИ - рдЬреНрдпрд╛рджрд╛рддрд░, рдореИрдВ рдлрд┐рд╕рд▓ рдЬрд╛рддрд╛ рд╣реВрдВ
рдХрднреА-рдХрднреА - рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ) рддреЛ "рдХреЛрд╢рд┐рд╢" рдореЗрд░реЗ рд▓рд┐рдП рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд░рд╣реЗрдЧрд╛,
рд▓реЗрдХрд┐рди рдореИрдВ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рдкрд░рд┐рдЪрдп рдкрд░ рдЖрдкрддреНрддрд┐ рдирд╣реАрдВ рдХрд░рддрд╛, рдореИрдВ рдХреЗрд╡рд▓ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ
рдЗрддрдирд╛ рдХреБрдЫ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЕрднреА рднреА рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдбрд╛рдЙрдирд╕рд╛рдЗрдбреНрд╕ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ
рдкреНрд░рдХрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ (рдЬреЛ рдореИрдВ рдмрдирддреЗ рд╣реБрдП рджреЗрдЦрддрд╛ рд╣реВрдВ рдЙрд╕рдХреЗ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо
рдПрдХ рдЕрдВрддрд┐рдо рд░рд╛рдЬрдиреАрддрд┐рдХ рдирд┐рд░реНрдгрдп)ред рдЗрд╕реЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рд▓рд╛рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рдпрд╛ рдмреБрд░рд╛ред

рдореИрдВ рдЬреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдШрдмрд░рд╛рд╣рдЯ/рд╕реБрдзрд╛рд░ рдХреЛ рдПрдХ рдмреБрд░рд╛ рд░реИрдк рдорд┐рд▓рд╛ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдЕрдиреНрдпрд╛рдп рд╣реБрдЖ
рд╣рдореЗрдВ рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЖ рд░рд╣рд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ, рдореБрдЭреЗ рдЕрднреА рддрдХ рдпрд╛ рддреЛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдФрд░ I
рдЙрд╕ рджрд┐рди рд╕реЗ рдбрд░реЛ рдЬреЛ рдореБрдЭреЗ рдХрд░рдирд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЬрд╛рд░ рдореЗрдВ рд╕рдмрд╕реЗ рддреЗрдЬ рдХреБрдХреА рдирд╣реАрдВ рд╣реВрдВ
рдФрд░ рдореБрдЭреЗ рдпрд╣ рдмрд╣реБрдд рдХрдард┐рди рд▓рдЧреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдШрдмрд░рд╛рд╣рдЯ/рдареАрдХ рд╣реЛрдиреЗ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
рджреБрд░реНрд▓рдн рдЕрд╡рд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдВ рдпрд╣ рдЙрдкрдпреБрдХреНрдд рд╣реИ (рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЗрд▓рд╛рдЬ рдирд╣реАрдВ рдХрд░рддрд╛
рд░реЙрдм рдкрд╛рдЗрдХ рдиреЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреА рдЕрджреНрднреБрдд рдкреНрд░рд╕реНрддреБрддрд┐ рдореЗрдВ рд╕рд┐рд░реНрдл рд╡рд╛рдкрд╕реА рдХреА
рдорд╛рди, рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдпрд╛рдж рдХрд░реВрдБ), рддреЛ рдпрд╣ рд╕рднреА рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛
рдЧреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рдмрд┐рдирд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЙрдореНрдореАрдж рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЙрдкрд▓рдмреНрдз рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рджрд▓рджрд▓ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП
рд╕реАрдорд╛рдПрдВред

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддрдирд╛ рд╣реА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдпрд╣ рдмрд╛рдж рдореЗрдВ рд╣реИ
рд╕рднреА, рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реБрд╡рд┐рдзрд╛ред рд▓реЗрдХрд┐рди рдПрдХ рджреБрд╖реНрдкрд░рд┐рдгрд╛рдо рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИ
рд╡рд┐рдирд┐рдордп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ: "рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ" рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реЛрдВрдЧреЗ
рдПрдХ "рддреНрд░реБрдЯрд┐" рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рд╕рдореНрдореЛрд╣рдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХрд╛рд░реНрдп
рдЙрдирдХреА рд╡рд╛рдкрд╕реА рдкреИрд░рд╛рдореАрдЯрд░ рд╕реВрдЪреА рдХреЗ рдЕрдВрдд рдореЗрдВ? рдпрд╣ рдХреИрд╕реЗ рдмрджрд▓реЗрдЧрд╛
рдзрд╛рд░рдгрд╛ рд╣реИ рдХрд┐ "рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╕рд┐рд░реНрдл рдореВрд▓реНрдп рд╣реИрдВ"? рдпрд╣ рдХреИрд╕реЗ рдореЗрд▓ рдЦрд╛рдПрдЧрд╛
рдЕрдм рдФрд░ рдЕрдзрд┐рдХ рд╕рдорд╛рди "рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо-рдареАрдХ" рдкреНрд░рддрд┐рдорд╛рди? рдпрд╣ рдФрд░ рдХреНрдпрд╛ рд╣реЛрдЧрд╛
рдирдП рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдЬрдиреНрдо рджреЗрддреЗ рд╣реИрдВ?

рд╕рдмрд╕реЗ рдмрдврд╝рдХрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд┐рд▓ рд╕реЗ рдмрдирд╛ рдкрд╣рд╛рдбрд╝ рд╣реИ
рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдЧреЛ рдЬреАрд╡рди рдмрджрд▓рдиреЗ рд╡рд╛рд▓реЗ рдореАрд▓ рдХреЗ рдкрддреНрдерд░ рддрдХ рдкрд╣реБрдВрдЪ рдЧрдпрд╛ рд╣реИред рд▓рдЧрднрдЧ
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, 2013 рдореЗрдВ рдЬреЛ рдзрд╛рд░рдгрд╛рдПрдБ рд╕рдЪ рдереАрдВ, рд╡реЗ рдЕрдм рдЕрдЪреНрдЫреА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ
рдкрдХрдбрд╝ред рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЦрдмрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рдХрд┐ Go2 рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
Go1 рдХреЗ рд╕рд╛рде рдкреАрдЫреЗ рдХреА рдУрд░ рд╕рдВрдЧрдд рд╣реЛрдирд╛ рдЙрддрдирд╛ рдЕрджреНрднреБрдд рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдХрд┐ рд░рд╣рд╛ рд╣реИ
рдмрд╣реБрдд рджреГрдврд╝рддрд╛ рд╕реЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд (рдореЗрд░реА рд░рд╛рдп рдореЗрдВ)ред

@lootch рдЖрдкрдХреА рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рднрд╛рд╖рд╛ рдХреЛ рдкрд┐рдЫрдбрд╝реЗ-рд╕рдВрдЧрдд рддрд░реАрдХреЗ рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдкрд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдЕрдЧрд░ рдЙрд╕ рдкрд┐рдЫрдбрд╝реЗ-рд╕рдВрдЧрддрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА, рддреЛ рд╢рд╛рдпрдж рдХреЛрдИ рдЪреАрдЬреЗрдВ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рд╣рдо рдЬрд▓реНрдж рд╣реА (рдПрдХ рдмрд╛рд░ рдореЙрдбреНрдпреВрд▓ рдЖрдо рдЬрдЧрд╣ рдмрди рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж) рднрд╛рд╖рд╛ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рдЦреНрдд рдкрд┐рдЫрдбрд╝реЗ-рд╕рдВрдЧрддрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ, try рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрдВрддреНрд░ рд╣реИ, рдФрд░ - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рджреЛрд╣рд░рд╛рдиреЗ рд▓рд╛рдпрдХ рд╣реИ - рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╕рднреА рд╣реБрдкрд▓рд╛ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЙрд╕ рдкрд░ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рддрдВрддреНрд░, рдореМрдЬреВрджрд╛ рдЧреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ' t try рдХреЛ рд╕реНрд╡рдпрдВ рдЧреЛ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦреЗрдВ (рдФрд░ рдЬреЗрдирд░рд┐рдХ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рддреЛ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛)ред рдЕрдЧрд░ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдореМрдЬреВрджрд╛ рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП try рдЬреИрд╕реЗ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рдХрд╛рдлреА рдЖрдо рд╣реЛрдЧрд╛ред рд░реЙрдм рдкрд╛рдЗрдХ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рд╕рдм рдХреБрдЫ рд╣реИ: рдпрд╣ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╣реИред

рдпрд╣ рдЕрднреА рднреА рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдПрдХ рдмрд╣реБрдд рд╣реА рдорд╛рдореВрд▓реА рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрддрдирд╛ рд╣рдВрдЧрд╛рдорд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ, рдлрд┐рд░ рднреА рд▓реЛрдЧ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднрд╛рд╖рд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреИрд╕реЗ on error рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╢реИрд▓реА рдХрд╛ рджреГрдврд╝рддрд╛ рд╕реЗ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ рднрд╛рд╖рд╛ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВред

рдЖрдкрдХреЗ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рд╕рдм рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдЬрдЧрд╣ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдХреЛрд╢рд┐рд╢ рдХреАрд╡рд░реНрдб рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╡рд┐рд╢рдж рдЪрд░реНрдЪрд╛ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдЕрднреА рдХреЗ рд▓рд┐рдП рд╡рд┐рд╖рдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ :)

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ Google рд▓реЛрдЧ рдЕрдкрдиреЗ рдЖрдВрддрд░рд┐рдХ рдЧреЛрд▓рдВрдЧ рд░реЗрдкреЛ рдореЗрдВ рдХреЛрд╢рд┐рд╢ рдХреАрд╡рд░реНрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд╣реЛрдВрдЧреЗ, рдФрд░ рдмрд╛рдж рдореЗрдВ рдЙрд╕ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ Google рдХреЛрдб рдмреЗрд╕ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рджреЗрдВрдЧреЗред рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЖрдВрддрд░рд┐рдХ рд░рдЦрддреЗ рд╣реБрдП, рдпрд╣ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ (рдЕрд░реНрдерд╛рдд, рдмреЛрдЭ рдПрдХ рд╣реА рдХрдВрдкрдиреА рдкрд░ рд╣реИ, рди рдХрд┐ рдкреВрд░реЗ рд╕рдореБрджрд╛рдп рдкрд░)ред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рд╣рд╛рдИ-рд╕реНрд▓реЛрдХ рдХреЛрдб рдмреЗрд╕ рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдкрд░ рдереЛрдбрд╝рд╛ рдХреЗрд╕ рд╕реНрдЯрдбреА рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдлреЗрд╕рдмреБрдХ рдиреЗ рдЕрддреАрдд рдореЗрдВ PHP рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рддрд░рд╣ рд╡реЗ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд╕рдореБрджрд╛рдп рдХреЛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред

рдпрджрд┐ рдЖрдк рдПрдХ рдХреЗрд╕ рд╕реНрдЯрдбреА рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ try рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ _in practice_ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдореВрд▓реНрдп рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛, рддреЛ рдпрд╣ рдПрдХ рд╕рдореНрдореЛрд╣рдХ рдорд╛рдорд▓рд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ (рдХрд╛рд▓реНрдкрдирд┐рдХ рд░реВрдк рд╕реЗ) рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рд╢реНрд╡ рдореВрд▓реНрдп рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рддреЛ рдпрд╣ рднреА рдЬрд╛рдирдирд╛ рдореВрд▓реНрдпрд╡рд╛рди рд╣реЛрдЧрд╛ред рдХрднреА-рдХрднреА рдХреБрдЫ рдХрд╛рдЧрдЬ рдкрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред

@Freeaqingme рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдПрдХ рдЕрд╕реНрдерд╛рдпреА CL рддреИрдпрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ рдЬреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ try рдПрд╕рдЯреАрдбреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдХреИрд╕рд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ: https://go-review.googlesource.com/c/go/+/182717 (рдЗрд╕рдореЗрдВ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рд╕рдХрд╛рд░рд╛рддреНрдордХ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣реИрдВ, рддреЛ рд╡реЗ рдмрд╣реБрдд рджреБрд░реНрд▓рдн рд╣реИрдВ)ред рд╣рдо рд╢рд╛рдпрдж рдПрдХ рдРрд╕рд╛ рдЙрдкрдХрд░рдг рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рджреЛрдиреЛрдВ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдХреЛрдб рдмреЗрд╕ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХреЛрдб рдЖрдзрд╛рд░ рдореЗрдВ tryhard рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рд╡рд╛рдкрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рджред

@griesemer рдореИрдВрдиреЗ рдЦреБрдж рдХреЛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Google рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЧреЛ рдХреЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдКрдкрд░ рд▓рд┐рдВрдХ рдХрд┐рдП рдЧрдП рдкреИрдЪ рдХреЛ рдЖрдВрддрд░рд┐рдХ Google рдмрд┐рд▓реНрдб рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ Google рдХреЛрдб рдмреЗрд╕ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ (рднрд╛рдЧреЛрдВ рдХреЗ) - рди рдХреЗрд╡рд▓ stdlib, рдмрд▓реНрдХрд┐ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрдВрддрд░рд┐рдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬреЛ рдЧреЛ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рдпрджрд┐ Google рдЗрдВрдЬреАрдирд┐рдпрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдХреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХреБрдЫ рдорд╣реАрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЕрдЪреНрдЫреА рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ рдХрд┐ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рднреА рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдХреЛрдб рдмреЗрд╕ рдкрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ (рдФрд░ рдореИрдВ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ)ред рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЫреЛрдЯрд╛ рдХреЛрдб рдЖрдзрд╛рд░ рд╡рд╛рд▓рд╛ рдХреЗрд╡рд▓ рдПрдХ рдбреЗрд╡рд▓рдкрд░ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ Google рдХреЗ рдмрд╣реБрдд рд╕реЗ рдХрд░реНрдордЪрд╛рд░реА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдбрд╝ рдкрд░ рд╣реВрдБред рдПрдХ рддрд░рдл рдореИрдВ рдЗрд╕ рддрдереНрдп рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдореБрдЭреЗ рд╣рд░ рдмрд╛рд░ рдХреБрдЫ рдХреАрд╕реНрдЯреНрд░реЛрдХреНрд╕ рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдореИрдВ рдЖрд▓рд╕реА рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ (рдЖрдЦрд┐рд░рдХрд╛рд░ рдореИрдВ рдЗрдВрд╕рд╛рди рд╣реВрдВ), рдФрд░ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ рдЙрддрдиреЗ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрдпрд╛рдиреЛрдВ рдХреЛ рдШреЛрдВрд╕рд▓рд╛ рджреЗрдВред рдЕрдм рдореИрдВ рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдиреБрд╢рд╛рд╕рд┐рдд рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдБ, рдХреНрдпрд╛ рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореМрдЬреВрдж рдереАред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдерд╛, рддрдм рднреА рдПрдХ рдореМрдХрд╛ рд╣реИ рдХрд┐ рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЗрд╕ рдХреАрд╡рд░реНрдб рдХрд╛ рдЕрддрд┐ рдкреНрд░рдпреЛрдЧ/рджреБрд░реБрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдореЗрд░рд╛ рдХреЛрдб рдЖрдзрд╛рд░ рдЗрд╕рд╕реЗ рдЧреНрд░рд╕реНрдд рд╣реИ (рдбреАрдмрдЧрдмрд┐рд▓рд┐рдЯреА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рд╡рд┐рд╕реНрддрд╛рд░рд╢реАрд▓рддрд╛)ред

@Freeaqingme рд╕рдордЭ рдЧрдпрд╛ред рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдВрддрд░рд┐рдХ рд░реЗрдкреЛ рдкрд░ try рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рд░реВрдкрд╛рдВрддрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рдкрд╕ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣рд╛рдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдЧрдд рд╢рд╛рдорд┐рд▓ рд╣реИред рд╕рд╛рде рд╣реА, рд╣рдо рдЗрд╕ рдкреНрд░рдпреЛрдЧ рдкрд░ рдХреЗрд╡рд▓ рд╕рдордЧреНрд░ (рдЖрдВрдХрдбрд╝реЗ) рд░рд┐рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЖрдВрддрд░рд┐рдХ рд╡рд┐рд╡рд░рдг рдкрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╕рдореБрджрд╛рдп рдХреЗ рдкрд╛рд╕ рд╣рдорд╛рд░реЗ рджрд╛рд╡реЛрдВ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЕрдВрдд рдореЗрдВ, Google рдХрд╛ рдХреЛрдб рдЖрдзрд╛рд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдзрдиреНрдпрд╡рд╛рдж, рдмрд┐рдВрджреБ рд▓рд┐рдпрд╛ред

@griesemer рдореИрдВ рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рдорд╣рдВрдЧрд╛ рдкреНрд░рдпрд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕реЗ рдореЗрдВ рдореИрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рдпрджрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рдЯреНрд░рд╛рдЗрд╣рд╛рд░реНрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдмрд╛рдд рд╣реИ рддреЛ рд▓рд╛рдЧрдд рд╕реАрдорд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ Googler (рдЬреЛ рдореИрдВ рдирд╣реАрдВ рд╣реВрдВ) рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реИред

рдореИрдВ рд╕рдордЭрддрд╛/рд╕рдордЭрддреА рд╣реВрдВ рдХрд┐ рдЖрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ Google рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдпрд╛ рдЖрдВрддрд░рд┐рдХ рдЕрд╡рд╕рдВрд░рдЪрдирд╛ рдкрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреБрдЫ рдХрд┐рд╕реНрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╢рд╛рдпрджред рд▓реЗрдХрд┐рди рдЬреЛ рдХреБрдЫ рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдореВрд▓реНрдпрд╡рд╛рди рд▓рдЧреЗрдЧрд╛, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдХреБрдЫ Googler рд░рд┐рдкреЛрд░реНрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЙрдирдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рдмрд┐рдирд╛, "рдореБрдЭреЗ рдПрдХреНрд╕ рдХреА рдЙрдореНрдореАрдж рдереА рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВ рдП рдФрд░ рдмреАрдЖрдИ рдЬреИрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ рддреЛ рдкрд╛рдпрд╛ рдХрд┐ рд╡рд╛рдИ" рдореБрдЭреЗ рдмрд╣реБрдд рдореВрд▓реНрдпрд╡рд╛рди рд▓рдЧреЗрдЧрд╛ред рдореБрдЭреЗ рдЙрд╕ рддрд░рд╣ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рд╢реВрдиреНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛ рдорд┐рд▓реЗрдЧреАред

рдЕрдВрдд рдореЗрдВ, Google рдХрд╛ рдХреЛрдб рдЖрдзрд╛рд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдирд╣реАрдВ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди Google рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЛрдЧ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдЖрдзрд╛рд░ рдЗрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдиреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдмрд▓реНрдХрд┐ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛рдУрдВ (рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ) рдХреЗ рдпреЛрдЧрджрд╛рди рдХреА рдкрд░рд┐рдгрддрд┐ рд╣реЛред рдЙрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЪреАрдЬреЗрдВ рдЙрддрдиреА рд╣реА рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрдВрдЧреА рдЬрд┐рддрдиреА рдЪреАрдЬреЗрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИрдВред рд╢рд╛рдпрдж 100% рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛрдб рдЖрдзрд╛рд░ рдЬреИрд╕реА рдХреЛрдИ рдЪреАрдЬрд╝ рдирд╣реАрдВ рд╣реИред

рдЗрд╕реЗ рд╡реИрд╕реЗ рд╣реА рд░рдЦреЗрдВ, рдЬрдм рддрдХ рд╣рдореЗрдВ рдХреЛрдИ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓ рдЬрд╛рддрд╛, try рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рддрд▓рд╛рд╢ рдереАред рдЗрд╕ рдкрд░ рдкрдХреНрд╖рдкрд╛рддрдкреВрд░реНрдг рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЕрдкрдирд╛ рд╕рдордп рд▓реЗрдВ рд▓реЗрдЦрдХ рдЬрд╛рдУред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореИрдВ рд╣рд░ рджрд┐рди рджреБрдирд┐рдпрд╛ рднрд░ рдХреЗ рдЧреЛрдлрд░реЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рдд рдХрд░рддрд╛ рд╣реВрдВ, рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЧреЛ рд╕рдореБрджрд╛рдп рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧ try рдкреНрд░рд╕реНрддрд╛рд╡ рдПрдЯреАрдПрдо рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдПрдХ рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдЕрдкрдиреЗ рдЧреЛ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдЕрднреА рднреА рдЧреЛ 1.10 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░рд╛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЗрд╕ рддрдереНрдп рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдХрд┐ рдореИрдВ go get рдЪреАрдЬреЗрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ (рдореЗрд░рд╛ GOPATH рдореЗрд░реЗ PATH ) . рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рдФрд░ рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА go get рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реБрдИ рдереАред рдореБрдЭреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА рдХрд┐ .../v2 рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рдерд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЛрдб рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╡рд┐рднрд╛рдЬрди рд╣реИ (рдкрд╛рдпрдерди 2 рдФрд░ 3 рд╕реЛрдЪреЗрдВ)ред рдореЗрд░реЗ рд▓рд┐рдП рдЧреЛ 1.11 рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдЧреЛ 1.11 рдХреЗ рдмрд╛рдж рдПрдХ рджреБрдирд┐рдпрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИ рдФрд░ рдЧреЛ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреЗрд╢ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡реНрдпрд╛рдкрд╛рд░-рдмрдВрдж рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЕрдзрд┐рдХ рд╡рд┐рдЦрдВрдбрди рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИред

7/4/19 рдкрд░, gonutz [email protected] рд▓рд┐рдЦрд╛ рд╣реИ:

рдПрдХ рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдЕрдкрдиреЗ Go . рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛
рд╕рдВрд╕реНрдХрд░рдгред рдореИрдВ рдЕрднреА рднреА рдЧреЛ 1.10 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░рд╛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рддрдереНрдп рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ
рдХрд┐ рдореИрдВ go get рдЪреАрдЬреЗрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдлрд┐рд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ (my
GOPATH рдореЗрд░реЗ PATH )ред рдореБрдЭреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ go get рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реБрдИ рдереА
рдХрд┐рд╕реА рдФрд░ рдХреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреЛ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рдореБрдЭреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА рдХрд┐ .../v2 рдерд╛
рдирд╣реАрдВ рд╣реИрд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЛрдб рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╡рд┐рднрд╛рдЬрди рд╣реИ (рд╕реЛрдЪреЗрдВ
рдкрд╛рдпрдерди 2 рдФрд░ 3)ред рдореЗрд░реЗ рд▓рд┐рдП рдЧреЛ 1.11 рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдЧреЛ 1.11 рдХреЗ рдмрд╛рдж рдПрдХ рджреБрдирд┐рдпрд╛ рд╣реИред
рдпрд╣ рдмрд╣реБрдд рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИ рдФрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреЗрд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ
рд╕рд╛рде рд╣реА рдЧреЛ рдореЗрдВ рдПрд░рд░ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЯреНрд░реЗрдб-рдСрдл рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рд╣реИред рдпрд╣
рдЕрдзрд┐рдХ рд╡рд┐рдЦрдВрдбрди рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИред

рдпрджрд┐ рдпрд╣ рдХреЛрдИ рд╕рд╛рдВрддреНрд╡рдирд╛ рд╣реИ, рддреЛ рдореИрдВ рдмрд┐рд▓реНрдХреБрд▓ рдЙрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реВрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рд╣реИ
рдореЙрдбреНрдпреВрд▓ рдЬрд╛рдУред рдореБрдЭреЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХрд╛ рд╕рдордп рдФрд░ рдЕрд╡рд╕рд░ рдирд╣реАрдВ рдорд┐рд▓рд╛
рдЙрдирдХреЗ рд╕рд╛рде, рдЗрд╕рд▓рд┐рдП рдореИрдВ Go1.10 рдХреЗ рд╕рд╛рде рднреА рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реВрдВред рд╢рд╛рдпрдж рдпрд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
рд▓рд╛рдпрдХ рдПрдХ рд╕рд░реНрд╡реЗрдХреНрд╖рдгред

рд▓реБрд╕рд┐рдпреЛред

--
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ:
https://github.com/golang/go/issues/32825#issuecomment -508372318

--
рд▓реБрд╕рд┐рдпреЛ рдбреА рд░реЗ
2 рдкреАрдЯ рд░рд┐рдЯреНрд░реАрдл St
рдХреЗрд╕реНрдЯреЗрд▓ (рдкреВрд░реНрд╡реА рдореБрдХреНрдд рд░рд╛рдЬреНрдп)
9860 рджрдХреНрд╖рд┐рдг рдЕрдлреНрд░реАрдХрд╛

рджреВрд░рднрд╛рд╖: +27 58 653 1433
рд╕реЗрд▓: +27 83 251 5824
рдлреИрдХреНрд╕: +27 58 653 1435

рдореИрдВ рдПрдХ рдирдпрд╛ рдЧреЛрд▓рдВрдЧ рдбреЗрд╡рд▓рдкрд░ рд╣реВрдВ (рдЕрднреА рднреА рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦ рд░рд╣рд╛ рд╣реВрдВ)ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдЕрдЪреНрдЫрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рддреНрд░реБрдЯрд┐ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИред рдПрдХ рдПрдВрдбреНрд░реЙрдЗрдб рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧреЛрд▓рдВрдЧ рдореЗрдВ if err != nil{ } рддреБрд▓рдирд╛ рдореЗрдВ try-catch рд╣рдорд╛рд░реА рддреНрд░реБрдЯрд┐ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рдХрдард┐рди рд╣реИред рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдкрд╖реНрдЯ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рд╣рдореЗрд╢рд╛ рдирд┐рд╣рд┐рдд рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рд╕реЗ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред

рдкреБрдирд╢реНрдЪ. рдореЗрд░реА рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред

leave it alone

рдЯреВрдЯрд╛ рдирд╣реАрдВ рд╣реИ....

рдореЗрдо рд╕реЗ рдкреНрдпрд╛рд░ рдХрд░реЛ, @ Daniel1984 :-)

рд╕рдВрдпреЛрдЧ рд╕реЗ, try рдкреНрд░рд╕реНрддрд╛рд╡ if err != nil рдЕрдХреЗрд▓рд╛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ; рдпрд╣ рдЖрдкрдХреЛ рд╕рд┐рд░реНрдл рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдк рджреЗрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рдореЗрд░реА рд░рд╛рдп рд╣реИ рдХрд┐ try рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред try :

рд╕рдорд░реНрдердХ

  • рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреАрд╕реНрдЯреНрд░реЛрдХреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рдХрд░рддреЗ рд╣реИрдВред
  • рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рдХреЗ рдкрд╛рд╕ рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдП рд▓рд╛ рдореИрдХреНрд░реЛ рд╕реЗ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реЙрд░реНрдЯрд╣реИрдВрдб рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
  • рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
  • рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
  • рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЬрд╛рджреВ рдХрд╣рд╛рдБ рд╣реЛ рд░рд╣рд╛ рд╣реИ (рдЬрд╛рд╡рд╛ рдХреЗ throws рд╡рд┐рдкрд░реАрдд)ред
  • nil рдЪреЗрдХ рдХреЗ рд╕рдореБрджреНрд░ рдХреЛ рджреЗрдЦрдиреЗ рдкрд░ рдЕрдм рдЖрдВрдЦреЗрдВ рдирд╣реАрдВ рдЪрдордХрддреАрдВред
  • рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЪреЛрд░

  • try рдореМрдЬреВрджрд╛ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
  • try рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИ, рдПрдХреЗрдП рдЕрдзрд┐рдХ рдЬрд╛рджреВред
  • рдпрд╣ рддреНрд░реБрдЯрд┐ рдЬрд╛рдБрдЪ рдореЗрдВ рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
  • рдмрд┐рдирд╛ рдЧреЛ рдЕрдиреБрднрд╡ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛рдПрдВрдЧреЗред
  • рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред
  • рдХрдо рд╕реНрдкрд╖реНрдЯрддрд╛ (рдлрд╝рдВрдХреНрд╢рди рд░рд┐рдЯрд░реНрди рдФрд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рд╡реИрд▓реНрдпреВ рдХреЗ рдмреАрдЪ рдмреЗрдореЗрд▓)ред
  • try рдкрд░ рдЬреЛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЙрд╕рдХрд╛ рд╢рдмреНрджреЛрдВ рдореЗрдВ рд╡рд░реНрдгрди рдХрд░рдирд╛ рднреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

@griesemer рд╡рд╣реА рд╣реИ рдЬреЛ рдореБрдЭреЗ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИред рдЪреАрдЬреЗрдВ рд╕рд░рд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдореИрдВ рднрд╛рд╖рд╛ рдореЗрдВ рдЬрдЯрд┐рд▓рддрд╛ рдирд╣реАрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛, рдмрд╕ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ 2 рддрд░реАрдХреЗ рд╣реИрдВред рдЗрд╕ if err != nil рд╡рд░реНрдмреЛрд╕рд┐рдЯреА рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдЯрд░реНрди рд╣реИрдВред https://www.ardanlabs.com/blog/2019/07/an-open-letter-to-the-go-team-about-try.html

Go2 рдкреНрд░рд╕реНрддрд╛рд╡ #32437 if err != nil { return ... } рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛ рдХрдо рдмреЛрдЭрд┐рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдореЗрдВ рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рд╡рд┐рднрд┐рдиреНрди рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИрдВ: #32804 рдФрд░ #32811 рдореВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд░реВрдк рд╕реЗ рдкреНрдпрд╛рд░ рдирд╣реАрдВ рд╣реИред

рдорд┐рд╢реНрд░рдг рдореЗрдВ рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП: рдХреНрдпреЛрдВ рди рдЗрд╕реЗ рдРрд╕реЗ рд╣реА рд░рдЦрд╛ рдЬрд╛рдП ?

рдореБрдЭреЗ if err != nil рдирд┐рд░реНрдорд╛рдг рдХреА рд╕реНрдкрд╖реНрдЯ рдкреНрд░рдХреГрддрд┐ рдкрд╕рдВрдж рдЖрдИ рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдирдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рд╕рдЪ рдореЗрдВ рдЙрддрдирд╛ рдмреБрд░рд╛ рд╣реИ?

рдпрд╣ рдмрд╣реБрддред рд╕реНрдкрд╖реНрдЯ рдХреЛрдб рд╕рд╣реА рдХреЛрдб рд╣реИред рдЕрдкрд╡рд╛рдж рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рд╕рд╛рде рдореИрдВрдиреЗ рдЬреЛ рднрдпрд╛рд╡рд╣рддрд╛ рджреЗрдЦреА рд╣реИ, рд╡рд╣ рдЙрд╕ рднрдпрд╛рдирдХ рдЕрдкрдардиреАрдп рдирд┐рд░реНрдорд╛рдг рд╕реЗ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рджреВрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмрдбрд╝рд╛ рдЕрдВрддрд░рд╛рд▓ рд╣реИ, рд▓реЛрдЧреЛрдВ рдиреЗ рдХреЗрд╡рд▓ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ
рдЕрднреА рдФрд░ рдХреЛрдИ рдпрд╣ рдзрд╛рд░рдгрд╛ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ рдХрд┐ рдпрд╣ рддрд╛рдЬрд╝рд╛ рд╣реИ
рдЙрдиреНрд╣реЗрдВ рдЦрдмрд░.

рдЗрд╕реЗ рднреА рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЕрдВрдЧреВрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ
рдЬрд┐рддрдиреА рддреЗрдЬреА рд╕реЗ рдХреЛрдИ рд╕реЛрдЪ рд╕рдХрддрд╛ рд╣реИред

рд▓реБрд╕рд┐рдпреЛред

рдФрд░ рд╕рд┐рдВрдЧрд▓-рд▓рд╛рдЗрди рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП gofmt рдХреЛ рдмрджрд▓реЗрдВ рдпрджрд┐ рдХрдерди рдЬреЛ рд╕рд╛рдзрд╛рд░рдг рд╣реИрдВрдб-рдмреЙрд▓ рдФрд░ рддреНрд░реБрдЯрд┐ рддрдХ рд╣реИ
рдХреЙрд▓рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рдиред рдЗрд╕рд╕реЗ рдХрд╛рдлреА рдЕрд╡реНрдпрд╡рд╕реНрдерд╛ рджреВрд░ рд╣реЛрдЧреАред

рдХреЗ рдмрдЬрд╛рдП:

рдПрд░рд░ = рдорд╛рдп рдлрдВрдХреНрд╢рди ()
рдЕрдЧрд░ рдЧрд▓рддреА!= рд╢реВрдиреНрдп {
рд╡рд╛рдкрд╕реА рддреНрд░реБрдЯрд┐
}

рдЕрдиреБрдорддрд┐ рджреЗрдирд╛:

рдПрд░рд░ = рдорд╛рдп рдлрдВрдХреНрд╢рди ()
рдЕрдЧрд░ рдЧрд▓рддреА!= рд╢реВрдиреНрдп {рд╡рд╛рдкрд╕реА рдЧрд▓рддреА}

рд╕рдВрдпреЛрдЧ рд╕реЗ, рдХреЛрд╢рд┐рд╢ рдкреНрд░рд╕реНрддрд╛рд╡ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдЕрдЧрд░ рдЧрд▓рддреА != nil рдЕрдХреЗрд▓реЗ; рдпрд╣ рдЖрдкрдХреЛ рд╕рд┐рд░реНрдл рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдк рджреЗрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рдпрд╣ рд╕рдЯреАрдХ рдФрдЪрд┐рддреНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЧреЛ рдХреИрд╕реЗ рдПрдХ рдФрд░ рд╕реА ++, рд╕реА #, рд╕реНрдХрд╛рд▓рд╛, рдХреЛрдЯрд▓рд┐рди рдЗрддреНрдпрд╛рджрд┐ рдмрди рдЬрд╛рддрд╛ рд╣реИред "рдЕрдЧрд░ рдЖрдк рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ" рдпрд╣ рд╣реИ рдХрд┐ рдлреАрдЪрд░ рдлреВрд▓рд╛ рд╣реБрдЖ рднрд╛рд╖рд╛рдПрдВ рдХреИрд╕реЗ рдмрдирддреА рд╣реИрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ - рдпрд╣ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЖрдпрд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ try рдЧреЛ рдХреЛ рдПрдХ рдлреАрдЪрд░ рдлреВрд▓рд╛ рд╣реБрдЖ рднрд╛рд╖рд╛ рдореЗрдВ рдмрджрд▓рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдпрд╣рд╛рдБ рдФрдЪрд┐рддреНрдп рдереЛрдбрд╝рд╛ рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд╣реИ

@deanveloper рдЖрдкрдХреЗ рдкрд╛рд╕ "рдХреЛрд╢рд┐рд╢" рдХреЗ рд╕рд╛рде рдХрдард┐рди рд╕рдордЭ рддреНрд░реБрдЯрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
https://github.com/golang/go/issues/32437#issuecomment -498932961

рднрд▓реЗ рд╣реА рдпрд╣ рдереЛрдбрд╝рд╛ рджреЛрд╣рд░рд╛рд╡ рд╣реЛ, рдореИрдВ рдУрдкреА рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, imo рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рднреА рд╡рд┐рдХрд▓реНрдк рдмреЗрдХрд╛рд░ рдЬрдЯрд┐рд▓рддрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддреЗ рд╣реИрдВред

рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рджрд╛рдпрд░реЗ рдХреЗ рдЕрдВрджрд░ рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реЛрдЧреА рддреЛ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реИрдХреЗрдЯ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛

@рдкрд╛рдЧрд▓ рд╣реЛ рдЬрд╛рдирд╛

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЛрдб рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╡рд┐рднрд╛рдЬрди рд╣реИ (рдкрд╛рдпрдерди 2 рдФрд░ 3 рд╕реЛрдЪреЗрдВ)ред рдореЗрд░реЗ рд▓рд┐рдП рдЧреЛ 1.11 рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдЧреЛ 1.11 рдХреЗ рдмрд╛рдж рдПрдХ рджреБрдирд┐рдпрд╛ рд╣реИред

рдореИрдВ рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реВрдВ рдФрд░ рдХрдерд┐рдд "рд╡рд┐рднрд╛рдЬрди" рдЬрд┐рд╕рдХрд╛ рдЖрдк рдЧреЛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ, рдкрд╛рдпрдерди 2 рд╕реЗ рдкрд╛рдпрдерди 3 рдореЗрдВ рдкреНрд░рд╡рд╛рд╕рди рдХреА рдЖрдкрджрд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдмрд╣реБрдд рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИ рдФрд░ рдЧреЛ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкреЗрд╢ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡реНрдпрд╛рдкрд╛рд░-рдмрдВрдж рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЕрдзрд┐рдХ рд╡рд┐рдЦрдВрдбрди рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИред

try рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдп рд╣реИред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд┐рдЫрдбрд╝рд╛ рд╕рдВрдЧрдд рд╣реИред рдпрджрд┐ рдЖрдкрдХрд╛ рдХреЛрдб рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ try рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ try рдмрд┐рд▓реНрдЯ-рдЗрди рдХреЛ рдЫрд╛рдпрд╛ рджреЗрдЧрд╛ред

@pongsatornw

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдЕрдЪреНрдЫрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рддреНрд░реБрдЯрд┐ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИред рдПрдХ рдПрдВрдбреНрд░реЙрдЗрдб рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧреЛрд▓рдВрдЧ рдореЗрдВ рдЗрд░реЗрдЯ != nil{ } рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╣рдорд╛рд░реА рддреНрд░реБрдЯрд┐ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рдХрдард┐рди рд╣реИред рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдкрд╖реНрдЯ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рд╣рдореЗрд╢рд╛ рдирд┐рд╣рд┐рдд рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рд╕реЗ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдкреВрд░рд╛ рдкрдврд╝рд╛ рд╣реИ? try рд╕рд┐рд░реНрдл рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ if err != nil { return ..., err } рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдЧреЛ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рддрд░реНрдХ рд╡рд╣реА рд░рд╣рддрд╛ рд╣реИред рдпрд╣ рдЕрднреА рднреА рд╕реНрдкрд╖реНрдЯ рд╣реИ, рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЕрднреА рднреА рдорд╛рди рд╣реИрдВ, рдФрд░ рдХреЛрдИ рдХреЛрд╢рд┐рд╢-рдкрдХрдбрд╝ (рдЙрд░реНрдл рдЕрдкрд╡рд╛рдж) рдирд╣реАрдВ рд╣реИред

@kroppt

  • try рдореМрдЬреВрджрд╛ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

try рд╕рд┐рд░реНрдл рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рдлреИрдХреНрдЯрд░ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ append рд╕рд╛рде рд╕рдорд╛рди рд╣реИред рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо рддрддреНрд╡реЛрдВ рдХреЛ рдПрдХ рд╕реНрд▓рд╛рдЗрд╕ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди append рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред

  • рдпрд╣ рддреНрд░реБрдЯрд┐ рдЬрд╛рдБрдЪ рдореЗрдВ рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рдЖрдк [...:...] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ "рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ" рдПрдХ рд╕реНрд▓рд╛рдЗрд╕ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЖрдк рдЬреЛ рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдк append рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреЛрдИ рд╡рд┐рд╕рдВрдЧрддрд┐ рдирд╣реАрдВ рд╣реИред рд╡реЗ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдЕрд▓рдЧ рдЙрдкрдХрд░рдг рд╣реИрдВред рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди, рдПрдХ рд╕рд╛рджреЗ if err != nil { ... } , рдпрд╛ try , рд╣рд╛рде рдореЗрдВ рдХрд╛рд░реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ред

  • try рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИ, рдПрдХреЗрдП рдЕрдзрд┐рдХ рдЬрд╛рджреВред

рдпрд╣ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирдпрд╛ рд╣реИред рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрджрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕рдХрд╛ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЬрд╛рджреВ рд╣реИ; рдХреЛрд╢рд┐рд╢ рдХреА рдпреБрдХреНрддрд┐ рдмрд╣реБрдд рд╕реАрдзреА рд╣реИред

  • рдмрд┐рдирд╛ рдЧреЛ рдЕрдиреБрднрд╡ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛рдПрдВрдЧреЗред
  • try рдкрд░ рдЬреЛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЙрд╕рдХрд╛ рд╢рдмреНрджреЛрдВ рдореЗрдВ рд╡рд░реНрдгрди рдХрд░рдирд╛ рднреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

рдмрд┐рдирд╛ рдЧреЛ рдЕрдиреБрднрд╡ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╕рдордЭ рдирд╣реАрдВ рдкрд╛рдПрдВрдЧреЗ chan , defer , 'go , iota , рдЖрддрдВрдХ , , рд╡рд╕реВрд▓реА рдХрд░реЗрдВ рдЗрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ , type assertions, and many other things either without reading the documentation. try` рдЖрд╕рд╛рди рд╣реИред

  • рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред

рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ, рдЧреЛрдлрд░реНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░ if err != nil рдЕрдХреЗрд▓реЗ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд░рд╣реЗ рд╣реИрдВ ;-)

@marcopeereboom

рд╕реНрдкрд╖реНрдЯ рдХреЛрдб рд╕рд╣реА рдХреЛрдб рд╣реИред рдЕрдкрд╡рд╛рдж рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рд╕рд╛рде рдореИрдВрдиреЗ рдЬреЛ рднрдпрд╛рд╡рд╣рддрд╛ рджреЗрдЦреА рд╣реИ, рд╡рд╣ рдЙрд╕ рднрдпрд╛рдирдХ рдЕрдкрдардиреАрдп рдирд┐рд░реНрдорд╛рдг рд╕реЗ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рджреВрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

try рдХрд╛ рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдиреЗ рдкреВрд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрдврд╝рд╛ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдпрд╛ рдкрд╛рдпрдерди рдХреА рддрд░рд╣ рдЕрдкрд╡рд╛рдж рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред try рд╕реНрдкрд╖реНрдЯ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреЙрд▓ рд╕рд╛рдЗрдЯ рдкрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреЛрдИ рд╕реНрдЯреИрдХ рдЦреЛрд▓рдирд╛ рдирд╣реАрдВ рд╣реИред рдЖрджрд┐ред

@gale93

рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рджрд╛рдпрд░реЗ рдХреЗ рдЕрдВрджрд░ рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реЛрдЧреА рддреЛ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реИрдХреЗрдЯ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЧреЛрдлрд░реЛрдВ рдХрд╛ рдПрдХ рд╣реА рд╡рд┐рдЪрд╛рд░ рдерд╛, рдФрд░ рдореИрдВрдиреЗ рдЗрд╢реНрдпреВ рдЯреНрд░реИрдХрд░ рдореЗрдВ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЛ рдХрдИ рдмрд╛рд░ рдкрдврд╝рд╛ред рд▓реЗрдХрд┐рди рдпрд╣ try рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рд╣реИред рдХреЗрд╡рд▓ if рдХрдерди рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╣рд░ рдЬрдЧрд╣ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ рдПрдХ рдмреНрд▓реЙрдХ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмреНрд▓реЙрдХ рдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ { рдмрд┐рдирд╛, рдЖрдкрдХреЛ рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдЕрдВрдд рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдкрдХреЛ рд╡реНрдпрд╛рдХрд░рдг, рдкрд╛рд░реНрд╕рд░, gofmt, рдЖрджрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рднрд╛рд╖рд╛ рдХреА рд╕рддрд╣ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрджрд▓ рджреЗрдЧрд╛ред

@ngrilly
рд╕рдВрдпрдо рдФрд░ рднрд╛рд╖рд╛ рдХреЛ рд╕рд░рд▓ рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдХреБрдЫ рддрд░реНрдХ рдпреБрдХреНрддрд┐ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЙрдЪрд┐рдд рдард╣рд░рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдмрд┐рдВрджреБ рдирд╣реАрдВ рд╣реИрдВред

рдореИрдВ рдЗрд╕ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд░реНрдгрдп рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдорджрдж рдХрд░реЗрдЧрд╛ рдпрд╛ рдЪреЛрдЯ рдкрд╣реБрдВрдЪрд╛рдПрдЧрд╛, рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рджрд░реНрд╢рди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЖрдк рд╕рд╣реА рд╣реИрдВ рдХрд┐ рдХрд▓реНрдкрдирд╛ рдореЗрдВ рдХреБрдЫ рдЪреАрдЬреЗрдВ рдХреБрдЫ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддреА рд╣реИрдВ рдЬрд┐рди рдкрд░ go рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреА рдЧрдИ рдереА, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдореЙрдбрд░реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдореБрдЭ рдкрд░ рдЗрддрдирд╛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдирдХрд╛рд░рд╛рддреНрдордХ рдХреЛ рд╕рд╣рди рдХрд░ рд╕рдХреВрдВред

рд╣рд╛рдп @kroppt ,

рднрд╛рд╖рд╛ рдХреЛ рд╕рд░рд▓ рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред

рдореИрдВ рдЗрд╕ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд░реНрдгрдп рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдорджрдж рдХрд░реЗрдЧрд╛ рдпрд╛ рдЪреЛрдЯ рдкрд╣реБрдВрдЪрд╛рдПрдЧрд╛, рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рджрд░реНрд╢рди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рдЗрд╕рдХреЗ рд▓рд╛рднреЛрдВ рдФрд░ рд▓рд╛рдЧрддреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ try рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЪрд░реНрдЪрд╛ рдЙрди рд▓рд╛рднреЛрдВ рдФрд░ рд▓рд╛рдЧрддреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддрдереНрдп-рдЖрдзрд╛рд░рд┐рдд рд╕рд╣рдорддрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЦреЛрдЬрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдЬреЛ рдореИрдВрдиреЗ рдЕрдкрдиреА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдереАред

рдЖрдк рд╕рд╣реА рд╣реИрдВ рдХрд┐ рдХрд▓реНрдкрдирд╛ рдореЗрдВ рдХреБрдЫ рдЪреАрдЬреЗрдВ рдХреБрдЫ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддреА рд╣реИрдВ рдЬрд┐рди рдкрд░ go рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреА рдЧрдИ рдереА

рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рд╡рд░реНрд╖реЛрдВ рдХреЗ рджреМрд░рд╛рди, рдореИрдВ рдЧреЛ рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧреЛ рдФрд░ рдЙрд╕рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ try рдкреНрд░рд╕реНрддрд╛рд╡ рдЧреЛ рдХреЗ рдореВрд▓рднреВрдд рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддрд╛ рд╣реИред

@ngrilly
https://talks.golang.org/2012/splash.article рдЙрди рдХреБрдЫ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ go рдЕрд▓рдЧ рдмрдирд╛рддреА рд╣реИрдВ - рд╕реНрдкрд╖реНрдЯрддрд╛ рдФрд░ рд╕рд░рд▓рддрд╛, рджреВрд╕рд░реЛрдВ рдХреЗ рдмреАрдЪ рдореЗрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдирдП рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде рд╣рдордореЗрдВ рд╕реЗ рдХреБрдЫ рд▓реЛрдЧ рдЗрд╕реА рд╕рдВрдШрд░реНрд╖ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рдпрд╣ рдЖрд╕рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрдо рд╕реНрдкрд╖реНрдЯ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рджрдЧреА рдореЗрдВ рд▓рд╛рдн рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рдиреБрдХрд╕рд╛рди рд╕реЗ рдЫреЛрдЯрд╛ рд╣реИред рд╢рд╛рдпрдж рдореИрдВ рдЧрд▓рдд рд╣реВрдБ рдФрд░ рдмрд╕ рд╕рддрд░реНрдХ рд╣реВрдБред

@kroppt рдореИрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рджрд░реНрдЬрдиреЛрдВ рдмрд╛рд░ рдкрдврд╝рд╛ рд╣реИ ;-) рдореИрдВ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдЕрд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдХреЛрд╢рд┐рд╢ рдХреЛрдб рдХреЛ

@ngrilly
рдЖрдк рдЬреЛ рд╡рд░реНрдгрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдореЗрд░реЗ "рд╕рдорд░реНрдердХ" рдЦрдВрдб рдореЗрдВ рд╣реИ:

  • рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХреАрд╕реНрдЯреНрд░реЛрдХреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рдХрд░рддреЗ рд╣реИрдВред
  • рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рдХреЗ рдкрд╛рд╕ рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдП рд▓рд╛ рдореИрдХреНрд░реЛ рд╕реЗ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реЙрд░реНрдЯрд╣реИрдВрдб рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
  • nil рдЪреЗрдХ рдХреЗ рд╕рдореБрджреНрд░ рдХреЛ рджреЗрдЦрдиреЗ рдкрд░ рдЕрдм рдЖрдВрдЦреЗрдВ рдирд╣реАрдВ рдЪрдордХрддреАрдВред

рдлрд┐рд░ рд╕реЗ, рдЬрдм рд╣рдо рдЗрд╕реЗ рдпрд╣рд╛рдВ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдХрд┐рд╕реА рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рджрд┐рдЦрддрд╛ред

рдореИрдВ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдЕрд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдХреЛрд╢рд┐рд╢ рдХреЛрдб рдХреЛ рдЦрд░рд╛рдм рдХрд░ рд░рд╣реА рд╣реИ

рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХреЛрдб рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯ/рдЫрд┐рдкрд╛рдирд╛/рд╕рд░рд▓ рдмрдирд╛рдирд╛/рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдирд╛ рд╣реИ - рдЕрдиреНрдпрдерд╛ рд╣рдо рдореВрд▓ рддреНрд░реБрдЯрд┐ рдЪреЗрдХ рдмреНрд▓реЙрдХ рджреЗрдЦреЗрдВрдЧреЗред рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЕрд░реНрде рдХреЛ рдХрдо рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ go рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рд╛рджрдЧреА рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╕рдВрддреБрд▓рди рдорд╛рд░рд╛, рдЙрд╕ рдмрд┐рдВрджреБ рддрдХ рдЬрд╣рд╛рдВ рдЗрд╕рдиреЗ рд╕реНрдкрд╖реНрдЯрддрд╛ рд╕реЗ рджреВрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдпреЛрдЧрджрд╛рди рджрд┐рдпрд╛ред рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддрд╛ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдореЗрд░реА рд░рд╛рдп рдореЗрдВ try рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рд╡рд░реНрдмреЛрд╕рд┐рдЯреА рдХреЛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдорд╛рдирдиреА рдЪрд╛рд╣рд┐рдПред рдХреЛрдб рдХреЛ рдордиреБрд╖реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрдврд╝рдиреЗ рдФрд░ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдЬрд┐рдирдХрд╛ рд╕рдордп рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдЕрдзрд┐рдХ рдорд╣рдВрдЧрд╛ рд╣реЛрддрд╛ рд╣реИ - рдФрд░ _рд╕рдордЭрдирд╛_ рдХрдард┐рди рдФрд░ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧреЛ рдПрд░рд░ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреА рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рд╕рдВрд░рдЪрдирд╛ рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рддреНрд░реБрдЯрд┐ рдЬрд╛рдВрдЪ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рд╣реИрдВрдбрд▓ рди рдХреА рдЧрдИ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рднреА рд╕реНрдкрд╖реНрдЯ рд╣реИрдВред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдЬрд▓реНрджреА рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдмрдХрд┐ if err != nil рдЪреЗрдХ рдердХрд╛рдК рд▓рдЧ рд╕рдХрддреЗ рд╣реИрдВ, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ _type_ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдмрд╕ рдореЗрд░рд╛ рд╕рдВрдкрд╛рджрдХ рд╣реИред

@kroppt

рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдХреЛрдб рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯ/рдЫрд┐рдкрд╛рдирд╛/рд╕рд░рд▓ рдмрдирд╛рдирд╛/рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдирд╛ рд╣реИ - рдЕрдиреНрдпрдерд╛ рд╣рдо рдореВрд▓ рддреНрд░реБрдЯрд┐ рдЪреЗрдХ рдмреНрд▓реЙрдХ рджреЗрдЦреЗрдВрдЧреЗред

рд▓реЗрдХрд┐рди рдЖрдк рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рдЕрдЧрд░ рдореИрдВ strings.HasPrefix("foobar", "foo") рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдХреНрдпрд╛ рдпрд╣ рдХреЛрдб рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ? рдХреНрдпрд╛ рдЖрдк l := len("foo"); len("foobar") >= l && s[0:l] == "foo" рд▓рд┐рдЦрдирд╛ рдФрд░ рдкрдврд╝рдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ?

@rossmcf

рдкреНрд░рддреНрдпреЗрдХ рддреНрд░реБрдЯрд┐ рдЬрд╛рдВрдЪ рд╕реНрдкрд╖реНрдЯ рд╣реИред

рдХреЛрд╢рд┐рд╢ рдЕрднреА рднреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХрд╛ рд░рд╛рдЬ рд╣реИред

рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЧрд▓рддреА! = рд╢реВрдиреНрдп рдЬрд╛рдВрдЪ рдХрдард┐рди рд▓рдЧ рд╕рдХрддреА рд╣реИ, рддреЛ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдЯрд╛рдЗрдк рдХрд░рдирд╛ рдердХрд╛рдК рдирд╣реАрдВ рд╣реИред рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рд░ рдЬрдЧрд╣ рд╕рдорд╛рди 3 рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реЛрдВ, рддреЛ рдпрд╣ рдкрдврд╝рдирд╛ рдердХрд╛рдК рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рджреЛрд╣рд░рд╛рд╡ рд╣реИ, рдФрд░ рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдЗрдирдХрд╛ рдХрд╛рд░рдХ рдмрдирддреЗ рд╣реИрдВред рд╢рд╛рдпрдж try рдореЗрдВ рдЕрдиреНрдп рдХрдорд┐рдпрд╛рдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ред

рдХреЛрд╢рд┐рд╢ рдЕрднреА рднреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ
try рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ред HasPrefix рдпрд╣ рд╣реИ рдХрд┐ try рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ рд╡рд╛рдкрд╕ рдЖрддрд╛ рд╣реИред
рдЧреЛ рдХреЛрдб рдкрдврд╝рддреЗ рд╕рдордп, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдкреНрд░рд╡рд╛рд╣ рдореЗрд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рднреАрддрд░ рддрдм рддрдХ рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдореИрдВ:

  • рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдорд╛рдкрди рдмреНрд░реИрдХреЗрдЯ рдХреЛ рдкрдврд╝реЗрдВ
  • рдХреАрд╡рд░реНрдб рдкрдврд╝реЗрдВ return , panic
  • syscall.Exit(code) рдкрдврд╝реЗрдВ
    try , рдореИрдВ рдЙрд╕реА рддрд░рд╣ рдХреЛрдб рдирд╣реАрдВ рдкрдврд╝ рд╕рдХрд╛ред рд▓рд╛рдЗрдиреЛрдВ рдкрд░ рджреГрд╖реНрдЯрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕реНрдХреИрди рдХрд░рдирд╛ рдФрд░ рд╢реВрдиреНрдп "рд░рд┐рдЯрд░реНрди" рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рджреЗрдЦрдиреЗ рдХрд╛ рдЕрд░реНрде рдЕрдм "рдпрд╛ рддреЛ рдпреЗ рд╕рднреА рд▓рд╛рдЗрдиреЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд╣реИрдВ, рдпрд╛ рдПрдХ рдмреНрд▓реЙрдХ, рдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред"

@ngrilly рдЖрдк FYI рдкреЛрд╕реНрдЯ рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд▓реЛрдЧреЛрдВ рдХреЛ рдЙрддреНрддрд░ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рджреЛ рдШрдВрдЯреЗ рдореЗрдВ 10 рдЙрддреНрддрд░ рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рд▓рдЧрд╛рддрд╛рд░ 5 рдХреЗ рд╕рд╛рде рдЪрд░реНрдЪрд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИред рдХреБрдЫ рднреНрд░рд╛рдВрддрд┐рдпреЛрдВ рд╕реЗ рдЕрд▓рдЧ рдЖрдкрдХреА рдкреЛрд╕реНрдЯ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреЗ рд▓рд╛рднреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реБрдП рдХреЛрдИ рдирдпрд╛ рдареЛрд╕ рддрд░реНрдХ рдирд╣реАрдВ рджреЗрдЦрд╛ред рдореИрдВрдиреЗ рдПрдХ рд╣реА рд▓рд╛рдн рджреЗрдЦрд╛ рд╣реИ: if err != nil рдХреА рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рд░реЛрдХрдирд╛ред рдпрд╣ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓реАрдХ рдХрд░рдиреЗ рдХреЗ рдирдП рддрд░реАрдХреЛрдВ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдХреА рд▓рд╛рдЧрдд рдкрд░ рдЖрддрд╛ рд╣реИ, рдХрдо рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдФрд░ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдпреБрдХреНрддрд┐ рдФрд░ рддрд░реНрдХ рднреНрд░рд╛рдордХ рд╣реИрдВ, рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рд╡рд╛рд▓реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдП рдмрд┐рдирд╛ рдХреЗрд╡рд▓ рд╕рд░реНрд╡реЛрддреНрддрдо-рдорд╛рдорд▓реЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЙрдкрд░реЛрдХреНрдд рдирдХрд╛рд░рд╛рддреНрдордХ рдХрдорд┐рдпреЛрдВ рдпрд╛ рдХрд┐рд╕реА рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╢рдорди рдХрд╛рд░рдХреЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдпрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕реАрдорд┐рдд рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЯреВрд▓ tryhard рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рдХреЛрдб рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рд╕реМрдВрджрд░реНрдпрд╢рд╛рд╕реНрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдмрд┐рдирд╛ trytoohard рдЯреВрд▓ рдХреЗ рдЬреЛ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдиреЗрд╕реНрдЯреЗрдб рдкреНрд░рдпрд╛рд╕ рдХреА рдкреВрд░реА рдХреНрд╖рдорддрд╛рдПрдВ рдмрдпрд╛рдиред рдЕрдВрдд рдореЗрдВ рдирд╛рдо рд╣реА рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рд░реНрд╡рд╡реНрдпрд╛рдкреА рд░реВрдк рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдЗрд╕реЗ рдШреЛрдВрд╕рд▓рд╛ рдмрдирд╛рдиреЗ рдпреЛрдЧреНрдп рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ рдЕрд╕рдВрдмрдВрдзрд┐рдд рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд┐рд▓реНрдЯрд┐рди рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдЪреАрдЬреЛрдВ рдХреЛ рдмрд╕ рдЬрдЧрд╣ рд╕реЗ рдмрд╛рд╣рд░ рджреЗрдЦрдХрд░ рдШрдмрд░рд╛рд╣рдЯ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдФрд░ рдЧреЛ рд▓реЗрдЦрдХреЛрдВ рдореЗрдВ рдХреБрдЫ рдмреЗрд╣рддрд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкрд░ рднрд░реЛрд╕рд╛ рд╣реИред

рдПрдХ рдПрдХрд▓ рдореВрд▓реНрдп рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде рдФрдЪрд┐рддреНрдп рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓рд╛рдЧрдд рд╣реИ, рдореИрдВ рд╕рдорд░реНрдердХреЛрдВ рдХреЗ рдЙрддреНрддрд░реЛрдВ рдореЗрдВ рдкреБрдирд░реНрдЬрдиреНрдо рджреЗрдЦрддрд╛ рд╣реВрдВ: "рдореБрдЭреЗ рдЕрдм if err != nil рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ" - рд╡рд╣ рдЪреАрдЬ рдЬреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЙрддреНрд╕рд╛рд╣рдкреВрд░реНрд╡рдХ рдмрдЪрд╛рд╡ рдФрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реИ, рд╡реЗ рд╣реИрдВ рд╕рдВрдкреВрд░реНрдг рдЧреЛ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рдореВрд▓реНрдпред рд╣рдо if err != nil рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд▓рд┐рдЦреЗ рдЧрдП рдПрдХ рджрд╢рдХ рддрдХ рдХреЗ рдХреЛрдб рддрдХ рдЖ рд░рд╣реЗ рд╣реИрдВ - рдЬреЛ рдХрд┐ рдХреБрдЫ рд╕рдмрд╕реЗ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдкреНрд░рдЧрддрд┐ (docker, k8s, ...) рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рднреА рдмрдбрд╝реА рд╕рдлрд▓рддрд╛ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рд╕рдорд╛рдкрди рдореЗрдВ if err != nil рдПрдХ рдмрд┐рд▓реНрдЯрд┐рди рдХреЗ рд╕рд╛рде рдЫрд┐рдкрд╛рдиреЗ рдХрд╛ рдмреЛрдЭ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╕рднреА рдХреЛ рднрд╛рд╖рд╛рдУрдВ рдХреА рд╕рдлрд▓рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрдЦреНрдп рдШрдЯрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рдирдирд╛ рдЪрд╛рд╣рд┐рдПред рднрд▓реЗ рд╣реА рд╣рдо рд╕рд╛рдореВрд╣рд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдПрдХ рдмреЛрдЭ рд╣реИ, рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд░ рдЙрдЪреНрдЪ рдФрд░ рдЕрдбрд┐рдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрднреА рдХреЛрд╢рд┐рд╢ рдХреЗ рдмрд╣реБрдд рд╕реЗ рдкрд╣рд▓реВ рдПрдХ рд╕рдордЭреМрддрд╛ рд╣реИрдВред

рдореЗрд░реА рд░рд╛рдп рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рддрд░реАрдХрд╛ рдЖрд╕рд╛рди рд╣реИ рд▓реЗрдХрд┐рди рд╡реЗ рд░рд╛рдп рд╣реИрдВред рджрд┐рдпрд╛ рдЧрдпрд╛ рдкреНрд░рдпрд╛рд╕ рд╕рд░рд▓ рд╣реИ рдФрд░ рд╡рд░реНрддрдорд╛рди рд╕реНрдкрд╖реНрдЯ рдЬрд╛рдБрдЪ рд╕рд░рд▓ рд╣реИред рдорд╣рд╛рди рджреЛрдиреЛрдВ рддрд░реАрдХреЗ рд╕рд░рд▓ рд╣реИрдВред рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рдкрд╛рдардХ рдФрд░ рд▓реЗрдЦрдХ рджреЛрдиреЛрдВ рдХреЗ рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рднрд╛рд░ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред рдЕрдм рджреЛрдиреЛрдВ рдХреЛ рдЪреАрдЬреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреА рд╣реЛрдЧреАред рдФрд░ рд▓реЗрдЦрдХ рдХреЛ рдпрд╣ рдЪреБрдирдирд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ рдФрд░/рдпрд╛ рдмрд╛рдХреА рдкреИрдХреЗрдЬ рдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЪреАрдЬреЛрдВ рдХреЛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╡реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЕрдЧрд░ рдХреЛрд╢рд┐рд╢ рд╕реНрдкрд╖реНрдЯ рдЬрд╛рдВрдЪ рдХреА рдЬрдЧрд╣ рд▓реЗ рд░рд╣реА рдереА рдЬреЛ рдЕрднреА рднреА рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЪреАрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╣рд┐рдд рд░рд┐рдЯрд░реНрди рдХреЗ рдХрд╛рд░рдг рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рднрд╛рд░ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХрд░реЗрдЧреАред

_рдПрдХ рдкрд▓ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдм рдПрдХ рддрд░рдл рд░рдЦ рджреЗрдВ рдФрд░ рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рджреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╕рд░рд▓ рддрд░реАрдХреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ:_ рд╕рд░рд▓ рдЕрдм рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ ред рдФрд░ рдпрд╣ рдЙрди рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рджреНрд╡рд╛рд░ рдЦреЛрд▓рддрд╛ рд╣реИ рдЬрд┐рдирд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдЗрд╕ рддрд░рд╣ рдХреБрдЫ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдпрд╣ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рд╣реИред

@cstockton

рдЖрдк рдПрдХ рдкреЛрд╕реНрдЯ FYI рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд▓реЛрдЧреЛрдВ рдХреЛ рдЙрддреНрддрд░ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рджреЛ рдШрдВрдЯреЗ рдореЗрдВ 10 рдЙрддреНрддрд░ рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рд▓рдЧрд╛рддрд╛рд░ 5 рдХреЗ рд╕рд╛рде рдЪрд░реНрдЪрд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИред

рдЗрдпрд╛рди рдиреЗ 7 рджрд┐рди рдкрд╣рд▓реЗ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЛ рдЧреЛрд▓рдВрдЧ-рдирдЯреНрд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ

@therealplato

рдХреЛрд╢рд┐рд╢ рдЕрдореВрд░реНрдд рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рд╣реИред рд╣реИрд╕рдкреНрд░рд┐рдлрд╝рд┐рдХреНрд╕ рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрд╢рд┐рд╢ рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ рд╡рд╛рдкрд╕ рдЖрддреА рд╣реИред

рдпрд╣ рд╕рдЪ рд╣реИред рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрдврд╝рддреЗ рд╕рдордп рдФрд░ "рдирд┐рдХрд╛рд╕" рдмрд┐рдВрджреБрдУрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рд╡рд╛рдкрд╕реА, рдШрдмрд░рд╛рд╣рдЯ, рд▓реЙрдЧ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рд╣реЛрдЧреАред рдкреИрдирд┐рдХ, рдУрдПрд╕ред рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ, рд▓реЙрдЧред рдШрд╛рддрдХ, рдЖрджрд┐ ... рдФрд░ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдХреНрдпрд╛ рдРрд╕реА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ? рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдирд┐рдХрд╛рд╕ рдмрд┐рдВрджреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╡рд╣реА рд░рд╣реЗрдЧреА рдФрд░ рдлрд┐рд░ рднреА рдкреНрд░рдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдпрд╛ рдмрд┐рдирд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХреА рдЬрд╛рдПрдЧреАред

рдХреАрд╡рд░реНрдб рдкрдврд╝реЗрдВ рд╡рд╛рдкрд╕реА, рдШрдмрд░рд╛рд╣рдЯ

рдШрдмрд░рд╛рд╣рдЯ рдХреЛрдИ рдХреАрд╡рд░реНрдб рдирд╣реАрдВ рд╣реИ; рдпрд╣ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдп рд╣реИред рдЕрдЧрд░ рд╣рдо рдЧреЛ рдЯреАрдо рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреА рдЖрд▓реЛрдЪрдирд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рд╢рд╛рдпрдж рд╣рдо рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рднрд╛рд╖рд╛ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдХреНрд╖рдо рд╣реИ, рддреЛ рдХрдо рд╕реЗ рдХрдо рд╣рдореЗрдВ рдЪреАрдЬреЛрдВ рдХреЛ рдареАрдХ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкрдХреНрд╖ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ

рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрдврд╝рддреЗ рд╕рдордп рдФрд░ "рдирд┐рдХрд╛рд╕" рдмрд┐рдВрджреБрдУрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рд╡рд╛рдкрд╕реА, рдШрдмрд░рд╛рд╣рдЯ, рд▓реЙрдЧ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреА рд╣реЛрдЧреАред рдкреИрдирд┐рдХ, рдУрдПрд╕ред рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ, рд▓реЙрдЧред рдШрд╛рддрдХ, рдЖрджрд┐ ... рдФрд░ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдХреНрдпрд╛ рдРрд╕реА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ?

рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ try рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдХрд╣реАрдВ рднреА рдкреНрд░рдХрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддреА рд╣реИред рдЧреЛ рдореЗрдВ рд╣рд░ рдПрдХ рдирд┐рдХрд╛рд╕ рдмрд┐рдВрджреБ _only_ рдПрдХ рд╣реА рдХрдерди рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, try рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рд╣реИ рдЬреЛ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛ рд╕рдХрддреА рд╣реИред

@ngrilly

рдЗрдпрд╛рди рдиреЗ 7 рджрд┐рди рдкрд╣рд▓реЗ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЛ рдЧреЛрд▓рдВрдЧ-рдирдЯреНрд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдерд╛, рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ (рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ, рдХреЛрдИ рдереНрд░реЗрдбрд┐рдВрдЧ рдирд╣реАрдВ), рд╕реБрдЭрд╛рд╡ рдЬрд┐рд╕реЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдЪрд░реНрдЪрд╛ "рдЖрдзрд┐рдХрд╛рд░рд┐рдХ" рд╣реЛрдЧреАред рд╣рдордиреЗ рдЬреЛ рдорд╛рдВрдЧрд╛ рд╣реИ рд╡рд╣ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИред

рд╕рдВрджреЗрд╢ рд╢реБрд░реВ рдХрд░реЗрдВ

@ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛1
рдЙрддреНрддрд░ 1

@ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛2
рдЙрддреНрддрд░ 2

рдЕрдВрдд рд╕рдВрджреЗрд╢

рдпрд╣реА рдорддрд▓рдм рдерд╛ред

@cstockton

рдореИрдВрдиреЗ рдПрдХ рд╣реА рд▓рд╛рдн рджреЗрдЦрд╛ рд╣реИ: рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЛ рд░реЛрдХрдирд╛ if err != nil.

try рдХреЗрд╡рд▓ if err != nil рд╣реА рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ if err != nil { return ..., err } (3 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рд╕реНрд╡рд░реВрдкрд┐рдд) рдХреЗ рджреЛрд╣рд░рд╛рд╡ рд╡рд╛рд▓реЗ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдФрд░ рдкрдврд╝рдиреЗ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред

рдпрд╣ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд▓реАрдХ рдХрд░рдиреЗ рдХреЗ рдирдП рддрд░реАрдХреЛрдВ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдХреА рдХреАрдордд рдкрд░ рдЖрддрд╛ рд╣реИ, рдХрдо рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдФрд░ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╕рдВрд╕рд╛рдзрди рд▓реАрдХ рдХреЗ рдЬреЛрдЦрд┐рдо рдХреЛ vet рдФрд░ lint рд╕реЗ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

"рдХрдо рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХреЛрдб" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, try рдХрд╛ рд╕рдВрдкреВрд░реНрдг рдмрд┐рдВрджреБ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдкрдХреЗ рддрд░реНрдХ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ред

рдЕрддреНрдпрдзрд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХрд╛ рдЬреЛрдЦрд┐рдо try рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдЕрддреНрдпрдзрд┐рдХ рдиреЗрд╕реНрдЯреЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛ рдФрд░ рд▓рд╛рдЗрдирд┐рдВрдЧ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдорджрдж рдХрд░реЗрдЧреАред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдпреБрдХреНрддрд┐ рдФрд░ рддрд░реНрдХ рднреНрд░рд╛рдордХ рд╣реИрдВ, рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рд╡рд╛рд▓реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдП рдмрд┐рдирд╛ рдХреЗрд╡рд▓ рд╕рд░реНрд╡реЛрддреНрддрдо-рдорд╛рдорд▓реЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рд╢рд╛рдпрдж рдпрд╣ рднрд╛рд╡рдирд╛ рдЖрдкрд╕реА рд╣реИред рд╣рдо рд╕рднреА рдкреНрдпрд╛рд░реЗ рдЧреЛрдлрд░ рд╣реИрдВ; рдЖрдЗрдП рдореВрд▓реНрдп рдирд┐рд░реНрдгрдп рдореЗрдВ рди рдкрдбрд╝реЗрдВ ;-)

рдореБрдЭреЗ рд╕рдорд░реНрдердХреЛрдВ рдХреЗ рдЬрд╡рд╛рдмреЛрдВ рдореЗрдВ рдЙрд▓рдЯрдлреЗрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ: "рдореБрдЭреЗ рдЕрдм рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ рдЧрд▓рддреА рд╣реБрдИ рд╣реИ! = nil"

рджреЛрдмрд╛рд░рд╛, рдореБрдЭреЗ рдЕрдм l := len("foo"); len("foobar") >= l && s[0:l] == "foo" рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп strings.HasPrefix("foobar", "foo") рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдпрд╣ try рд╕рд╛рде рдЗрддрдирд╛ рдЕрд▓рдЧ рдХреИрд╕реЗ рд╣реИ?
рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдкрдврд╝рд╛ рдерд╛ рдХрд┐ рдЖрдк рдПрдХ "рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд" try рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо check рд╣реЛрдЧрд╛ рдФрд░ рдпрд╣ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЛ рдордирд╛ рдХрд░реЗрдЧрд╛ред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ if err != nil рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХреЗ рдПрдХ рджрд╢рдХ рддрдХ рдЖ рд░рд╣реЗ рд╣реИрдВ - рдЬреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХреБрдЫ рд╕рдмрд╕реЗ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдкреНрд░рдЧрддрд┐ (docker, k8s, ...) рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рднреА рдмрдбрд╝реА рд╕рдлрд▓рддрд╛ рдХреЗ рд╕рд╛рде рдХрд░рддреЗ рд╣реИрдВред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ C, C++, Java, рдЖрджрд┐ рдореЗрдВ рднреА рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмреЗрд╣рддрд░реАрди рдХреЛрдб рд▓рд┐рдЦреЗ рд╣реБрдП рд╣реИрдВред рдЗрд╕ рддрд░реНрдХ рдХреЗ рд╕рд╛рде, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Go рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЧреЛ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдкрд░ рдЪрд░реНрдЪрд╛ рдкрдврд╝рддреЗ рд╕рдордп, рдореБрдЭреЗ рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рдХрд┐ try рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╣рд░ рдХреЛрдИ рдПрдХ рд╣реА рдкреГрд╖реНрда рдкрд░ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЬреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ try рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: https://faiface.github.io/post/how-to-use-try/

рд░реЗрдбрд┐рдЯ рдкрд░ рд╕рдВрдмрджреНрдз рдЪрд░реНрдЪрд╛: https://www.reddit.com/r/golang/comments/c9eo3g/how_to_use_try_faiface_blog/

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ try рдЦрд┐рд▓рд╛рдл рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореЗрд░реА рдкреЛрд╕реНрдЯ рдХреБрдЫ рдирдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓рд╛ рд╕рдХрддреА рд╣реИ :)

рдЬрд╛рдУ рдЕрдЯрдХ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╕рд░рд▓ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЬрд╛рджреБрдИ , рдпрд╛ рддрд╛рд░реНрдХрд┐рдХ рдХреЗ рдмреАрдЪ рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдкреЗрд╢реЗрд╡рд░реЛрдВ:

  • рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХрдо рдХрд░реЗрдВ
  • рд╕рд░рд▓
  • рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдмреАрдЪ рдореМрдЬреВрджрд╛ рдкреИрдЯрд░реНрди
  • рдРрдЪреНрдЫрд┐рдХ

рджреЛрд╖:

  • рд╕реАрдЦрдиреЗ рдХреА рдЕрд╡рд╕реНрдерд╛
  • рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЬрд╛рджреВ
  • рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреАрдбрд╝реЗ
  • рдЧреЛ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдФрд░ if != nil рд╕рд╛рде рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИ рд▓реЗрдХрд┐рди рдЖрдк try рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдореИрдВ рдЗрд╕ рд╕рдореБрджрд╛рдп esp рдХреА рддрд░рд╣ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдБред рдпрд╣рд╛рдВ рдЧреЛ рд╕рд░реНрд╡реЗ [1] рдореЗрдВ рдорддрджрд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдорддрднреЗрдж рд╣реИред
рдорддрджрд╛рддрд╛ рдЗрд╕реЗ рдореБрдЦреНрдп рдЪрд┐рдВрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ рдмрд▓реНрдХрд┐ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдирд┐рдпреБрдХреНрддрд┐ рдХреЗ рдХрд╛рд░рдг рдЗрд╕рдХрд╛ рдкреНрд░рднрд╛рд╡ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛ред

рдЖрдИрдПрдордУ, рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛ рдЬреЛрдбрд╝рдирд╛ рдкреБрд░рд╛рдирд╛ рд╣реИ рдФрд░ рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рддрд░реАрдХрд╛ рд╕рдВрдкрд╛рджрдХреЛрдВ рдкрд░ рдЕрдзрд┐рдХ рдлреАрдЪрд░ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ рдпрд╛рдиреА рдПрдореНрдореЗрдЯ рдпрд╛ рднрд╛рд╖рд╛ рд╕реНрдирд┐рдкреЗрдЯ, рдХреЛрдб рдлреЛрд▓реНрдбрд┐рдВрдЧ рдФрд░ рдХрд▓рд░рд┐рдВрдЧ, рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдФрд░ рдлреЙрд░реНрдореЗрдЯрд┐рдВрдЧ, рдбрд┐рдмрдЧрд┐рдВрдЧ рдФрд░ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ, рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдирд╛ рдФрд░ рдЧреЛрдбреЛрдХ рдпрд╛ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рд╕реЗ рдЙрджреНрдзреГрдд рдХрд░рдирд╛ , рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ UI, рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рд╡рд░реНрдмреЛрдЬрд╝ рдЫреЛрдбрд╝ рджреЗрдВ
рдХреЛрдб if err != nil рдХреЛ try рдореЛрдбрд╝реЗрдВ

@ngrilly

рдХреЛрд╢рд┐рд╢ рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдФрд░ рдкрдврд╝рдиреЗ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ рдЕрдЧрд░ рдЧрд▓рддреА! = рд╢реВрдиреНрдп {рд╡рд╛рдкрд╕реА ..., рдЧрд▓рддреА} (3 рдкрдВрдХреНрддрд┐рдпреЛрдВ рдкрд░ рд╕реНрд╡рд░реВрдкрд┐рдд), рди рд╕рд┐рд░реНрдл рдЕрдЧрд░ рдЧрд▓рддреА! = рд╢реВрдиреНрдпред

рдХреНрдпрд╛ рдЖрдк рдореБрдЭ рдкрд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ "рдпрд╣ рдЖрдкрдХреЛ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ рдЕрдЧрд░ рдЧрд▓рддреА! = рд╢реВрдиреНрдп" рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднреВрд▓ рдЧрдпрд╛ рдерд╛ рдХрд┐ рд╣рдо рдЬреЛ рдХреЛрдб рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕реЗ рднреА рдкрдврд╝рддреЗ рд╣реИрдВ?

рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╕рдВрд╕рд╛рдзрди рд▓реАрдХ рдХреЗ рдЬреЛрдЦрд┐рдо рдХреЛ рдкрд╢реБ рдЪрд┐рдХрд┐рддреНрд╕рдХ рдФрд░ рд▓рд┐рдВрдЯ рд╕реЗ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдПрдХ рдЪрд░реНрдЪрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ рдХрд┐ рдореБрдЭреЗ рдХреНрдпреЛрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╢реБ рдЪрд┐рдХрд┐рддреНрд╕рдХ рдФрд░ рд▓рд┐рдВрдЯ рдпрд╣рд╛рдВ рдПрдХ рдЙрдЪрд┐рдд рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред

"рдХрдо рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХреЛрдб" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдХреЛрд╢рд┐рд╢ рдХрд╛ рдкреВрд░рд╛ рдмрд┐рдВрджреБ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдкрдХреЗ рддрд░реНрдХ рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ред

рд╣рд╛рдВ, рдХреНрдпрд╛ рдЖрдкрдиреЗ рд▓рд┐рдВрдХ рдкрдврд╝рд╛ рдерд╛ рдХрд┐ " рдХрдо рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛" рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреА рд╣реИ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдореЗрд░реЗ рддрд░реНрдХ рдХреЛ рд╕рдордЭ рдЧрдП рд╣реЛрдВред _рдзреНрдпрд╛рди рджреЗрдВ, рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдк рдЪрд░реНрдЪрд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗ рд░рд╣реЗ рд╣реИрдВ, рдЙрдирдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рдордп рд▓реЗрдирд╛, рдЙрдиреНрд╣реЗрдВ рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдкрд╣рд▓рд╛ рдХрджрдо рд╣реИред_

рдЕрддреНрдпрдзрд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХрд╛ рдЬреЛрдЦрд┐рдо рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдЕрддреНрдпрдзрд┐рдХ рдиреЗрд╕реНрдЯреЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛ рдФрд░ рд▓рд╛рдЗрдирд┐рдВрдЧ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдорджрдж рдХрд░реЗрдЧреАред

рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдЖрдЗрдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рддреЛрдбрд╝ рджреЗрдВ:

1) рдЕрддреНрдпрдзрд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рдХрд╛ рдЬреЛрдЦрд┐рдо рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИред

рд╣рд╛рдВ, рдпрд╣рд╛рдВ рд╣рд░ рдХреЛрдИ рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

2) рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдЕрддреНрдпрдзрд┐рдХ рдиреЗрд╕реНрдЯреЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рдВ, рдпрд╣рд╛рдВ рд╣рд░ рдХреЛрдИ рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

3) рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛ рдФрд░ рд▓рд╛рдЗрдирд┐рдВрдЧ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рдорджрдж рдХрд░реЗрдЧреАред

рд╣рд╛рдВ, рдЖрдкрдиреЗ рд▓рд┐рдВрдЯ рддрд░реНрдХ рдкрд╣рд▓реЗ рд╣реА рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИ рдФрд░ "рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛ рддрд░реНрдХ" рдПрдХ рдФрд░ рдмрд╛рд╣рд░реА рднрд╛рд╖рд╛ рдирд┐рдпрдВрддреНрд░рдг рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдЖрдкрд╕реЗ рд▓рд┐рдВрдХ рдХреА рдЧрдИ рдкреЛрд╕реНрдЯ рдореЗрдВ рдмрдирд╛рдпрд╛ рдерд╛ред

рд╢рд╛рдпрдж рдпрд╣ рднрд╛рд╡рдирд╛ рдЖрдкрд╕реА рд╣реИред рд╣рдо рд╕рднреА рдкреНрдпрд╛рд░реЗ рдЧреЛрдлрд░ рд╣реИрдВ; рдЖрдЗрдП рдореВрд▓реНрдп рдирд┐рд░реНрдгрдп рдореЗрдВ рди рдкрдбрд╝реЗрдВ ;-)

рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ? рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдкреВрд░реНрдг рдХреНрд╖рдорддрд╛ рдХрд╛ рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рдЗрдЪреНрдЫрд┐рдд рдЙрдкрдпреЛрдЧ рд╣реИред рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЛ рдорд╛рдкрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ tryhard рдЯреВрд▓ рд╕рдмрд╕реЗ рд╕реАрдорд┐рдд рдФрд░ рдЙрдЪрд┐рдд рд░реВрдк рдореЗрдВ try рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рддрдереНрдп рд╣реИред

рдлрд┐рд░ рд╕реЗ, рдореБрдЭреЗ рдЕрдм рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ l := len("foo"); рд▓реЗрди("foobar")>= l && s[0:l] == "foo"ред
рдореИрдВ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп string.HasPrefix("foobar", "foo") рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдХреЛрд╢рд┐рд╢ рдХреЗ рд╕рд╛рде рдпрд╣ рдЗрддрдирд╛ рдЕрд▓рдЧ рдХреИрд╕реЗ рд╣реИ?

рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд░реЛрдзреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдПрдХ рд╕реНрдерд┐рддрд┐ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдкреВрд░реА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ, рдЕрдиреНрдпрдерд╛ рдореИрдВ рдЗрд╕реЗ рдЦрддреНрдо рдХрд░рдиреЗ рдХрд╛ рддрд░реНрдХ рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдпрд╣рд╛рдБ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛, рдореБрдЭреЗ рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдореИрдВ рдЗрд╕рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдВ: рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗред

рдпрд╣ ( strings.HasPrefix ) try рд╕рд╛рде рдЗрддрдирд╛ рдЕрд▓рдЧ рдХреИрд╕реЗ рд╣реИ?

рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕редрд╣реИрд╕рдкреНрд░реАрдлрд┐рдХреНрд╕

func HasPrefix

func HasPrefix(s, рдЙрдкрд╕рд░реНрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧ) рдмреВрд▓

HasPrefix рдкрд░реАрдХреНрд╖рдг рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ s рдЙрдкрд╕рд░реНрдЧ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред

рдкреНрд░рдпрддреНрди

func try рдПрдХ рдирдпрд╛ рдлрдВрдХреНрд╢рди рдЬреИрд╕рд╛ рдмрд┐рд▓реНрдЯ-рдЗрди рд╣реИ рдЬрд┐рд╕реЗ рд╕рд┐рдЧреНрдиреЗрдЪрд░ рдХреЗ рд╕рд╛рде рдЯреНрд░рд╛рдИ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЫрджреНрдо рдХреЛрдб)

func try(expr) (T1, T2, тАж Tn)

рдЬрд╣рд╛рдВ expr рдПрдХ рдЖрдиреЗ рд╡рд╛рд▓реА рддрд░реНрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓) рдХреЗ рд▓рд┐рдП рдЦрдбрд╝рд╛ рд╣реИ, рдЬреЛ n+1 рдкреНрд░рдХрд╛рд░ T1, T2, ... Tn, рдФрд░ рдЕрдВрддрд┐рдо рдорд╛рди рдХреЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдорд╛рди рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ expr рдПрдХрд▓ рдорд╛рди рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИ (n 0 рд╣реИ), рддреЛ рд╡рд╣ рдорд╛рди рдЯрд╛рдЗрдк рдПрд░рд░ рдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ try рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдЬреЛ рдЕрдВрддрд┐рдо рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рд╕рдВрдХрд▓рди-рд╕рдордп рддреНрд░реБрдЯрд┐ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдкрд░рд┐рдгрд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐ рд╣реИред рдХрд┐рд╕реА рднрд┐рдиреНрди рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рд╕рдВрдХрд▓рди-рд╕рдордп рддреНрд░реБрдЯрд┐ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред

рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ f () рдХреЗ рд░реВрдк рдореЗрдВ (рдЫрджреНрдо рдХреЛрдб) рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ

x1, x2, тАж xn = try(f())

turns into the following (in-lined) code:

t1, тАж tn, te := f()  // t1, тАж tn, te are local (invisible) temporaries
if te != nil {
        err = te     // assign te to the error result parameter
        return       // return from enclosing function
}
x1, тАж xn = t1, тАж tn  // assignment only if there was no error

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрджрд┐ рдЯрд╛рдЗрдк рдПрд░рд░ рдХреЗ "рдПрдХреНрд╕рдкреАрдЖрд░" рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рдд рдЕрдВрддрд┐рдо рдорд╛рди рд╢реВрдиреНрдп рд╣реИ, рддреЛ рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рдкрд╣рд▓реЗ n рдорд╛рди рд▓реМрдЯрд╛рдПрдВ, рдЕрдВрддрд┐рдо рд╢реВрдиреНрдп рддреНрд░реБрдЯрд┐ рдЫреАрди рд▓реА рдЧрдИред рдпрджрд┐ "рдПрдХреНрд╕рдкреАрдЖрд░" рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрд╛рджрд┐рдд рдЕрдВрддрд┐рдо рдорд╛рди рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕рдВрд▓рдЧреНрди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рддреНрд░реБрдЯрд┐ рдкрд░рд┐рдгрд╛рдо рдЪрд░ (рдЙрдкрд░реЛрдХреНрдд рдЫрджреНрдо рдХреЛрдб рдореЗрдВ рдЧрд▓рддреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдХреЛрдИ рдЕрдиреНрдп рдирд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдЕрдЬреНрдЮрд╛рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдЙрд╕ рдЧреИрд░-рд╢реВрдиреНрдп рддреНрд░реБрдЯрд┐ рдорд╛рди рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╕рдВрд▓рдЧреНрди рдХрд╛рд░реНрдп рд╡рд╛рдкрд╕ рдЖрддрд╛ рд╣реИред рдпрджрд┐ рд╕рдВрд▓рдЧреНрди рдХрд╛рд░реНрдп рдЕрдиреНрдп рдирд╛рдорд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡реЗ рдкрд░рд┐рдгрд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рдЬреЛ рднреА рдореВрд▓реНрдп рд░рдЦрддреЗ рд╣реИрдВ рдЙрдиреНрд╣реЗрдВ рд░рдЦрддреЗ рд╣реИрдВред рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдЕрдиреНрдп рдЕрдЬреНрдЮрд╛рдд рдкрд░рд┐рдгрд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡реЗ рдЕрдкрдиреЗ рд╕рдВрдмрдВрдзрд┐рдд рд╢реВрдиреНрдп рдорд╛рди рдорд╛рдирддреЗ рд╣реИрдВ (рдЬреЛ рдЙрдирдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рдорд╛рди рдХреЛ рд░рдЦрдиреЗ рдЬреИрд╕рд╛ рд╣реА рд╣реИ)ред

рдпрджрд┐ рдЗрд╕ рджреГрд╖реНрдЯрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдореЗрдВ try рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЪрд░ рдХреЗ рд▓рд┐рдП) рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдмрд╛рдИрдВ рдУрд░ рдХреЛрдИ рднреА рдЪрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдмрджрд▓ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ: рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗрд╡рд▓ рддрднреА рдЙрдкрд▓рдмреНрдз рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЙрд▓ рд╕рд╛рдЗрдЯ рдкрд░ рд▓реМрдЯрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ (рд╕рдВрд▓рдЧреНрди рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд▓реМрдЯрдиреЗ рдХреЗ рд╡рд┐рдкрд░реАрдд)ред рдПрдХ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ, рдпрджрд┐ рдмрд╛рдИрдВ рдУрд░ рдХреЗ рдЪрд░ рдХреЛ рдкрд░рд┐рдгрд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдХреЛрд╢рд┐рд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЖрдЬ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдП, рдмреА, рдФрд░ рдЗрд░реЗрдЯ рд╕рднреА рдПрдирдХреНрд▓реЛрдЬрд┐рдВрдЧ рдлрдВрдХреНрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ рдирд╛рдорд┐рдд рд╣реИрдВ, рддреЛ рдпрд╣ рдХреЛрдб

a, b, err = f()
if err != nil {
        return
}

рд╣рдореЗрд╢рд╛ a, b, рдФрд░ err рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдЧрд╛, рдЪрд╛рд╣реЗ f() рдиреЗ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛рдИ рд╣реЛ рдпрд╛ рдирд╣реАрдВред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд

a, b = try(f())

рддреНрд░реБрдЯрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ a рдФрд░ b рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣реЗрдВрдЧреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИ, рд╣рдорд╛рд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдорд╛рдорд▓реЗ рджреБрд░реНрд▓рдн рд╣реИрдВред рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ, рддреЛ if рдХрдерди рд░рдЦреЗрдВред

рд╡реЗ рдЗрд╕ рдорд╛рдпрдиреЗ рдореЗрдВ рднрд┐рдиреНрди рд╣реИрдВ рдХрд┐ try рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рд╕рдВрдкреВрд░реНрдг рдкрд╛рда string.HasPrefix рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдПрдХ рдмреЗрд╣рддрд░ рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рд╕рдорд╛рди рдХреИрд╕реЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореИрдВ рдЙрддреНрддрд░ рджреВрдВрдЧрд╛ рдХрд┐ рд╡реЗ рджреЛрдиреЛрдВ рдХреЙрд▓ рдХреЗ рдХреБрдЫ рдкрд╣рд▓реБрдУрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рдирд╣реАрдВред

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдкрдврд╝рд╛ рдерд╛ рдХрд┐ рдЖрдк рдПрдХ "рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд" рдкреНрд░рдпрд╛рд╕ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рд╕реЗ рдЪреЗрдХ рдирд╛рдо рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХреЛ рдордирд╛ рдХрд░реЗрдЧрд╛ред

рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреЗ рдЦрд┐рд▓рд╛рдл рдореЗрд░рд╛ рдХреЗрдВрджреНрд░реАрдп рддрд░реНрдХ рдкрдврд╝рд╛: рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░рддрд┐рдмрдВрдзрд╛рддреНрдордХ рдирд╣реАрдВ рд╣реИред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╛ рддреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрди рд╕рднреА рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИрдВред

_Or_ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдРрд╕реЗ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реЛрдВ рддрд╛рдХрд┐ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд▓реЛрдЧреЛрдВ рдХреЛ рдЧреЛ рдХреЛрдб рдореЗрдВ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реА рдЪреАрдЬрд╝реЛрдВ рд╕реЗ рдЕрд╡рдЧрдд рдХрд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред рд╕рднреА рдХреЛрдиреЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЖрджрд░реНрд╢ рд▓рд┐рдЦрд┐рдд рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╕реЗ рдХрдо рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛/рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕реЗ рдРрд╕реЗ рд╕рд╡рд╛рд▓реЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕реЗ рдХрдИ рдиреЗрд╕реНрдЯрд┐рдВрдЧ рд╕реНрддрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛, рдХреНрдпрд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕реНрдерд╛рди рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╣рдЪрд╛рдиреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ? рд╡рд┐рдзрд┐ рдорд╛рдиреЛрдВ, рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рд╢рд╛рдмреНрджрд┐рдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдпрджрд┐ fn() рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд▓рд╛рдЗрди рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреЗ рд╣реИрдВ?

fn := func(n int) (int, error) { ... }
return try(func() (int, error) { 
    mu.Lock()
    defer mu.Unlock()
    return try(try(fn(111111)) + try(fn(101010)) + try(func() (int, error) {
       // yea...
    })(2))
}(try(fn(1)))

рдореБрдЭреЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЙрдЪрд┐рдд рдХреЛрдб рд▓рд┐рдЦреЗ рдЬрд╛рдПрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдПрдХ рдРрд╕рд╛ рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рдХрднреА рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдирд╣реАрдВ рдерд╛: рд╕реНрдкрд╖реНрдЯ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдмрд┐рдирд╛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рдХреНрдпреЛрдВ рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдореИрдВ рдХрднреА рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдореЗрд░рд╛ рд╕рдордп рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдореЗрдВ рдмрд░реНрдмрд╛рдж рд╣реЛред рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЬрд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдХрд░реВрдВрдЧрд╛, рдЕрдиреБрднрд╡ рдиреЗ рдореБрдЭреЗ рд╕рд┐рдЦрд╛рдпрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЕрдиреБрдорддрд┐ рджреЗрдВрдЧреЗ рддреЛ рдХреЛрдИ рдРрд╕рд╛ рдХрд░реЗрдЧрд╛ред рдХрд┐ рдХреЛрдИ рдореБрдЭреЗ рдЕрдХреНрд╕рд░ рдмреЗрдЦрд╝рдмрд░ рд╣реЛрддрд╛ рд╣реИред

рдЧреЛ рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рд╕рдВрднрд╡ рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдПрдХ-рджреВрд╕рд░реЗ рдХрд╛ рд╕рдордп рдмрд░реНрдмрд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд╕рдорд╛рди рд╕рд╛рдВрд╕рд╛рд░рд┐рдХ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рддрдХ рд╕реАрдорд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рднрд╛рд░реА рд▓рд╛рдн рдХреЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рдЦреЛрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ред рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ "рдХреНрдпреЛрдВрдХрд┐ рдХреЛрд╢рд┐рд╢ рдХреЛ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ" рдПрдХ рднрд╛рд░реА рд▓рд╛рдн рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдПред рдХреНрдпрд╛ рдЖрдк рдХреЛрдИ рдХрд╛рд░рдг рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реИ?

рдЗрд╕ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдореБрджреНрджреЗ рдкрд░ рд╕рдордп рдмрд░реНрдмрд╛рдж рди рдХрд░реЗрдВ, рд╣рдореЗрдВ рдЬреЗрдирд░рд┐рдХ рджреЗрдВ рдФрд░ рд╣рдо рд░рд╕реНрдЯ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдЬреИрд╕рд╛ рдХреБрдЫ рдмрдирд╛рдПрдВрдЧреЗред

рдЬрд╛рдУ рдЕрдЯрдХ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╕рд░рд▓ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЬрд╛рджреБрдИ , рдпрд╛ рддрд╛рд░реНрдХрд┐рдХ рдХреЗ рдмреАрдЪ рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдкреЗрд╢реЗрд╡рд░реЛрдВ:

  • рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХрдо рдХрд░реЗрдВ
  • рд╕рд░рд▓
  • рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдмреАрдЪ рдореМрдЬреВрджрд╛ рдкреИрдЯрд░реНрди
  • рдРрдЪреНрдЫрд┐рдХ

рджреЛрд╖:

  • рд╕реАрдЦрдиреЗ рдХреА рдЕрд╡рд╕реНрдерд╛
  • рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЬрд╛рджреВ
  • рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреАрдбрд╝реЗ
  • рдЧреЛ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдФрд░ if != nil рд╕рд╛рде рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИ рд▓реЗрдХрд┐рди рдЖрдк try рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдореИрдВ рдЗрд╕ рд╕рдореБрджрд╛рдп esp рдХреА рддрд░рд╣ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдБред рдпрд╣рд╛рдВ рдЧреЛ рд╕рд░реНрд╡реЗ [1] рдореЗрдВ рдорддрджрд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдорддрднреЗрдж рд╣реИред
рдорддрджрд╛рддрд╛ рдЗрд╕реЗ рдореБрдЦреНрдп рдЪрд┐рдВрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ рдмрд▓реНрдХрд┐ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдирд┐рдпреБрдХреНрддрд┐ рдХреЗ рдХрд╛рд░рдг рдЗрд╕рдХрд╛ рдкреНрд░рднрд╛рд╡ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛ред

рдЖрдИрдПрдордУ, рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛ рдЬреЛрдбрд╝рдирд╛ рдкреБрд░рд╛рдирд╛ рд╣реИ рдФрд░ рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рддрд░реАрдХрд╛ рд╕рдВрдкрд╛рджрдХреЛрдВ рдкрд░ рдЕрдзрд┐рдХ рдлреАрдЪрд░ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ рдпрд╛рдиреА рдПрдореНрдореЗрдЯ рдпрд╛ рднрд╛рд╖рд╛ рд╕реНрдирд┐рдкреЗрдЯ, рдХреЛрдб рдлреЛрд▓реНрдбрд┐рдВрдЧ рдФрд░ рдХрд▓рд░рд┐рдВрдЧ, рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдФрд░ рдлреЙрд░реНрдореЗрдЯрд┐рдВрдЧ, рдбрд┐рдмрдЧрд┐рдВрдЧ рдФрд░ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ, рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрдирд╛ рдФрд░ рдЧреЛрдбреЛрдХ рдпрд╛ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рд╕реЗ рдЙрджреНрдзреГрдд рдХрд░рдирд╛ , рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ UI, рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рд╡рд░реНрдмреЛрдЬрд╝ рдЫреЛрдбрд╝ рджреЗрдВ
рдХреЛрдб if err != nil рдХреЛ try рдореЛрдбрд╝реЗрдВ

рдореИрдВ рд╡рд╣ рдерд╛ рдЬрд┐рд╕рдиреЗ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рдмрд┐рдирд╛ рдХрдареЛрд░ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдорддрджрд╛рди рдХрд┐рдпрд╛ рдерд╛ред рдХреЛрд╢рд┐рд╢ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред

рд░рд╕реНрдЯ рдХреЗ Result рдкреНрд░рдХрд╛рд░ рдЬреИрд╕реА рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЛ рджреВрд░ рд╕реЗ рд░реАрдореЗрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЬреЗрдирд░рд┐рдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ _if_ Result рдкреНрд░рдХрд╛рд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬреЗрдирд░рд┐рдХ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╢реБрд░реБрдЖрддреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЬреЗрдирд░рд┐рдХ рдХреЛ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛, рдпрд╛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ " Result рд░рд╛рд╕реНрддрд╛ "

@deanveloper , рдореЗрд░реА рдмрд╛рдд рдпрд╣ рд╣реИ: рдореЗрд░реЗ рдкрд╛рд╕ "рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкрд░рд┐рд╡рд░реНрддрди" рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЬреЗрдирд░рд┐рдХ рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓рд╛рдн рд╣реИ рдФрд░ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рднреА рд╕рдЪ рд╣реИред

@txgruppi рдореИрдВ рд╕рд╣рдордд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЬреЗрдирд░рд┐рдХ рдХреА рдЙрдЪреНрдЪ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рдХрд╣рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЬреЗрдирд░рд┐рдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЧрд╛ред

@deanveloper , рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдпрд╣ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рд╕рдорд╕реНрдпрд╛ рд╕рд┐рд░реНрдл рд╕реМрдВрджрд░реНрдп рдкреНрд░рд╕рд╛рдзрди рд╣реИ, рд▓реЛрдЧ рдХреБрдЫ рд╕рдордп рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдЯрд╛рдЗрдк рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдмрд╕ рдмреЗрд╣рддрд░ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╕реАрдЦреЗрдВ рдФрд░ рдЗрд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд░реЗрдВред
рдХрд┐рд╕реА рдХреЗ рдХрд╣рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЬреЗрдирд░рд┐рдХ рдмреЗрд╣рддрд░ рдХреЛрдб рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ: рд╕рдордп рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ ...

рдХреНрдпрд╛ рдЗрд╕реЗ рд╕реНрдирд┐рдкреЗрдЯ рдпрд╛ рдХреАрдмреЛрд░реНрдб рдореИрдХреНрд░реЛ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рддрдм рдпрд╣ рдХреЛрдИ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИред

@txgruppi

рдмрд╕ рдмреЗрд╣рддрд░ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╕реАрдЦреЗрдВ рдФрд░ рдЗрд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд░реЗрдВред

рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╕рднреА рддреНрд░реБрдЯрд┐-рдкреНрд░рдмрдВрдзрди рдХреЛрдб рдХрд╛ 70% рд╡рд░реНрддрдорд╛рди рдореЗрдВ try рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд░реЙрдмрд░реНрдЯ рдЧреНрд░рд┐рд╕реЗрдорд░ рдиреЗ рдЕрдкрдиреЗ tryhard рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкрд╛рдпрд╛ ред рдЕрдзрд┐рдХ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдкрд╛рддреНрд░ рд╣реЛрдВрдЧреЗ, рдЬреИрд╕реЗ (рдЕрднреА рддрдХ рдореМрдЬреВрдж рдирд╣реАрдВ) fmt.HandleErrorf рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЦрд░рд╛рдм рдХреЛрдб рдирд╣реАрдВ рдХрд╣рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред

рдХреНрдпрд╛ рдЗрд╕реЗ рд╕реНрдирд┐рдкреЗрдЯ рдпрд╛ рдХреАрдмреЛрд░реНрдб рдореИрдХреНрд░реЛ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рддрдм рдпрд╣ рдХреЛрдИ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдХреЛрдб рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ thing.Thing thing = new thing.Thing(thing.THING);

@faiface , рдЧреБрдгрд╡рддреНрддрд╛ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд░рд╛рд╕реНрддреЗ рдореЗрдВ 'рдЕрдЧрд░ рдЧрд▓рддреА! = рд╢реВрдиреНрдп' рд╣реЛ рд░рд╣реА рд╣реИ? рдореБрдЭреЗ рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ред
рдХреНрдпрд╛ рдЬреЗрдирд░рд┐рдХ рдХреА рдХрдореА рдЧреБрдгрд╡рддреНрддрд╛рдкреВрд░реНрдг рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдЖ рд░рд╣реА рд╣реИ? рд╣рд╛рдБ рдпрд╣реА рд╣реИред

рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдореИрдВ рдЗрд╕реЗ рджреЗрдЦрддрд╛ рд╣реВрдВ: рдореЗрд░реЗ рдкрд╛рд╕ рдЬреЗрдирд░рд┐рдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЬреНрдЮрд╛рди рдирд╣реАрдВ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдЙрди рджрд┐рдорд╛рдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдордп рдХреА рдмрд░реНрдмрд╛рджреА рд╣реИ рдЬреЛ рдЬреЗрдиреЗрд░рд┐рдХ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рдЦрд┐рд▓рд╛рдл рдирд╣реАрдВ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдмреБрд░реА рдЪреАрдЬ рд╣реИ, рдореИрдВ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬреЗрдВ рд╣реИрдВред

@faiface рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧреЛ рдХреЛрдб рдХрд╛ рдЕрдЪреНрдЫрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдХреЗрд╡рд▓ рдкрд╛рд╕-рдЕрдк рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП io/ioutil рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ io рдореЗрдВ рд╣реБрдИ рддреНрд░реБрдЯрд┐ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ

@deanveloper @faiface рдЬрдм рдЧреЛ рдХреЙрд░реНрдкрд╕ рдХреЗ рд╡рд┐рд░реБрджреНрдз рдЪрд▓рддрд╛ рд╣реИ:

--- stats ---
 401679 (100.0% of  401679) func declarations
  97496 ( 24.3% of  401679) func declarations returning an error
 991348 (100.0% of  991348) statements
 217490 ( 21.9% of  991348) if statements
  88891 ( 40.9% of  217490) if <err> != nil statements
    485 (  0.5% of   88891) <err> name is different from "err" (-l flag lists details)
  59500 ( 66.9% of   88891) return ..., <err> blocks in if <err> != nil statements
  29391 ( 33.1% of   88891) complex error handler in if <err> != nil statements; cannot use try (-l flag lists details)
    596 (  0.7% of   88891) non-empty else blocks in if <err> != nil statements; cannot use try (-l flag lists details)
  52810 ( 59.4% of   88891) try candidates (-l flag lists details)

рддреЛ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдХреЛрдб рдореЗрдВ, рддреНрд░реБрдЯрд┐-рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП 40% if-statement рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рдФрд░ try рдЙрдирдореЗрдВ рд╕реЗ 59% рдХреЛ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВред рдореИрдВ рдареАрдХ рд╣реВрдБ рдЕрдЧрд░ рдЧрд▓рддреА! = рд╢реВрдиреНрдпред рдпрд╣ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдФрд░ рд╕рд╛рдл рд╣реИ рдЬреЛ рдПрдХрд▓ рддреНрд░реБрдЯрд┐ рдорд╛рди рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдЬрдм рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рдВрджрд░реНрдн рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рддреЛ рдореИрдВ рддреНрд░реБрдЯрд┐ рдкреИрдХреЗрдЬ рдФрд░ рдЙрд╕рдХреЗ рдХрд╛рд░рдг/рд▓рдкреЗрдЯрдиреЗ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рднреА рд╢реМрдХреАрди рд╣реВрдВред рдХреЛрдб рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рд╕рд╛рде рдХрд╕реНрдЯрдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ (рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ) рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдорд╛рдирдХ рддреНрд░реБрдЯрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ, рдореИрдВрдиреЗ рдЦреБрдж рдХреЛ рдХрднреА рднреА рдЧреЛ рдХреЛрдб рдХреЛ рдкрдврд╝рдирд╛ рдпрд╛ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдкрд╛рдпрд╛ рд╣реИ рдФрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░реЗрд╢рд╛рдиреА рдорд╣рд╕реВрд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдЬрд┐рди рдкрд░реЗрд╢рд╛рдирд┐рдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рд╣реИ, рд╡реЗ рдРрд╕реЗ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХрдИ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рднрд╛рд╖рд╛ рдХреА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬрдм рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдВ "рдЬрдм рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рдВрджрд░реНрдн рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ" рддреЛ рдореИрдВ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рд╢рд╛рдпрдж рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рд╣рд┐рдЪрдХреА рдЖрдИ рд╣реЛ рдФрд░ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ "рдвреВрдВрдвреЗрдВ" рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреЙрд▓ рдХреЗ рдирддреАрдЬреЗ рдХреЛрдИ рдкрд░рд┐рдгрд╛рдо рди рджреЗрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣рд╛рдВ рдереЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдирд╣реАрдВ, рдпрд╛ рдореЗрд░реА рдЪрд┐рдХреЛрдЯреА рдЙрдВрдЧрд▓реА рдиреЗ рдореЗрд░реА рдПрд╕рдХреНрдпреВрдПрд▓ рдХреНрд╡реЗрд░реА рдореЗрдВ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ 'рдПрд╕' рдЬреЛрдбрд╝рд╛ рдЬреЛ рдЗрд╕реЗ рдЙрдбрд╝рд╛ рд░рд╣рд╛ рд╣реИ (рдпрд╣ рдореЗрд░реЗ рд╕рд╛рде рдЕрдХреНрд╕рд░ рд╣реЛрддрд╛ рд╣реИ ... рдореБрдЭреЗ рд╢рд╛рдпрдж рддрдВрддреНрд░рд┐рдХрд╛ рдХреНрд╖рддрд┐ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд░рд╡рд╛рдиреА рдЪрд╛рд╣рд┐рдП)ред

7/5/19 рдХреЛ, рдирд┐рдХреЛрд▓рд╕ рдЧреНрд░рд┐рд▓реА рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@kroppt рдореИрдВрдиреЗ рджрд░реНрдЬрдиреЛрдВ рдмрд╛рд░ рдкрдврд╝рд╛ рд╣реИ ;-) рдореИрдВ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдЕрд╕рд╣рдордд рд╣реВрдВ рдХрд┐ try is
рдХреЛрдб рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рдирд╛ред рдХреЛрд╢рд┐рд╢ рд╕рд┐рд░реНрдл рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдЫ рдХрд╛рд░рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рджреЛрд╣рд░рд╛рд╡ рдХреЛрдбред рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рд░ рд╕рдордп рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рд╣рдо рдкрд╣рдЪрд╛рдирддреЗ рд╣реИрдВ a
рджреЛрд╣рд░рд╛рд╡ рдкреИрдЯрд░реНрди, рд╣рдо рдЗрд╕реЗ рдПрдХ рдирдП рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдлреИрдХреНрдЯрд░ рдХрд░рддреЗ рд╣реИрдВред рдЕрдЧрд░ рд╣рдордиреЗ рдирд╣реАрдВ рдХрд┐рдпрд╛, рддреЛ рд╣рдо
рдЗрд╕рдореЗрдВ рдПрдХ рд▓рдВрдмрд╛ рдореБрдЦреНрдп () рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рд╕рднреА рдХреЛрдб рдЗрдирд▓рд╛рдЗрди рд╣реЛрдВрдЧреЗред

рдореИрдВ рдЖрдкрдХреЛ рдХрдкрдЯреА рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд▓рдЪрд╛рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрдпрд╛рди рд▓рд╛рдВрд╕ рдЯреЗрд▓рд░ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рддрд╛ рд╣реВрдВ
рдЪрд░реНрдЪрд╛ рдХреЛ рд╡рд┐рдирдореНрд░ рд░рдЦрдиреЗ рдХреЗ рдЕрд▓реМрдХрд┐рдХ рдкреНрд░рдпрд╛рд╕ рдФрд░ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛
рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕ рдлреЛрд░рдо рдореЗрдВ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЭреВрда рдмреЛрд▓рдиреЗ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рд╣реЛрдЧрд╛ред

рдЙрд╕ рдиреЗ рдХрд╣рд╛, "рдЬрдм рд╣рдо рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреИрдЯрд░реНрди рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕реЗ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ
рдПрдХ рдирдпрд╛ рдХрд╛рд░реНрдпред" рдЬрд╝рд░реВрд░, рд▓реЗрдХрд┐рди рдПрдХ рдкрд░рд╕реНрдкрд░ рд╡рд┐рд░реЛрдзреА рдирд┐рд░реНрдорд╛рдг рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдирд╣реАрдВ
рдЧреЛ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЗрд╕ рдЕрдВрддрд┐рдо рдЪрд░рдг рдореЗрдВ, рджреЛ рдХреЗ рд╕рд╛рде рд▓рдВрдмрд╛ рдЖрддрд╛ рд╣реИ
рдЫрд┐рдкреА рд╣реБрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ: рдкрд╣рд▓рд╛ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЗрд▓рд╛рдЬ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд┐рдирдХреА "рд╡рд╛рдкрд╕реА"
рддрд░реНрдХ рд╕реВрдЪреА рдПрдХ error рдорд╛рди рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИ" рд╡рд┐рд╢реЗрд╖ (рдпрд╛ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ)
рд╕рд┐рдореЗрдВрдЯрд┐рдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд░реВрдк рдореЗрдВ) рдФрд░ рджреВрд╕рд░рд╛ рдпрд╣ рдПрдХ рдЫрд┐рдкрд╛ рд╣реБрдЖ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ
рдЪрдХреНрдХрд░ рдЬреЛ рд╕рдорд╛рди рд╣реИ рд▓реЗрдХрд┐рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ "рд╡рд╛рдкрд╕реА" рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ
рдмрдпрд╛рдиред

рдЬреНрд╡рд▓рдВрдд рд╣реБрдкреНрд╕ рдХреЛ рдХрднреА рднреА рдзреНрдпрд╛рди рди рджреЗрдВ рдХрд┐ "рдбрд┐рдлрд░" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдЪрдп рд╣реЛрддрд╛ рд╣реИ
"рдХреЛрд╢рд┐рд╢ - рдЫрджреНрдо рдХрд╛рд░реНрдп" рдХреЗ рдЕрдзрд┐рдХ рд░рд╣рд╕реНрдпрдордп рдЙрдкрдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рдеред рдХреЛрдИ
рдХрд╣реАрдВ рдФрд░ рдХрд╣рд╛, рдореЛрдЯреЗ рддреМрд░ рдкрд░ "рдореИрдВ рдХреЛрдб рдореЗрдВ try рдкрд╛рд░ рдирд╣реАрдВ рдЖрдирд╛ рдЪрд╛рд╣рддрд╛
рдореИрдВрдиреЗ рдкрдврд╝рд╛ред'' рдореБрдЭреЗ рднреА рдРрд╕рд╛ рд╣реА рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреЗ рдиреАрдЪреЗ рдирд╣реАрдВ рдмрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП
рдХрд╛рд▓реАрди

рдореИрдВрдиреЗ рдХрд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣ "рддреНрд░реБрдЯрд┐ рд╡рд╛рдкрд╕реА" рдХрд╛ "рд╡рд╛рдкрд╕реА" рдкрд╣рд▓реВ рд╣реИ рдХрд┐
рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдФрд░ "рдЧрд▓рддреА рдкрд░" рдкреНрд░рд╕реНрддрд╛рд╡ рд╕рдмрд╕реЗ рдХрд░реАрдм рдЖрддрд╛ рд╣реИ
рд╡рд╣ рд╕рд┐рджреНрдзрд╛рдВрдд, рд▓реЗрдХрд┐рди рдирд┐рдпрдореЛрдВ рдХреЛ рдХреБрдЫ рд╣рдж рддрдХ рдореЛрдбрд╝ рднреА рджреЗрддрд╛ рд╣реИред рддреЛ рдореЗрд░рд╛ рдЕрдкрдирд╛
"рдЕрд╕рдлрд▓" рд╕реБрдЭрд╛рд╡ (рдпрд╣ рдЕрдВрддрд┐рдо рддрд░реНрдХ рдХреЛ рдкрд╣рд▓реЗ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН
рдореБрдЭреЗ рджреБрдЦреА рдХрд░ рд░рд╣рд╛ рд╣реИ)ред

рдЕрдзрд┐рдХ рдЧрд╣рд░рд╛рдИ рд╕реЗ, SNOBOL рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХреЛрдИ рднрд╛рд╖рд╛ рдирд╣реАрдВ рд╣реИ,
рдЬрд┐рд╕рд╕реЗ рдореИрдВ рдкрд░рд┐рдЪрд┐рдд рд╣реВрдВ, рдЙрд╕рдиреЗ рд╡рд╣ рдЫрд▓рд╛рдВрдЧ рд▓реА рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╡рд░реНрдгрди рд░реЙрдм рдкрд╛рдЗрдХ рдиреЗ рдХрд┐рдпрд╛ рд╣реИ
рдЧреЛ рдХреЗ рдкрд╛рд╕ "рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдореВрд▓реНрдп рд╣реИрдВ", рд▓реЗрдХрд┐рди рдХреБрдЫ рдЦреЛ рдЧрдпрд╛ рд╣реИ
рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ: рдПрдХ рддреНрд░реБрдЯрд┐ "рд╢рд░реНрдд" рдПрдХ рдорд╛рди "рдирд╣реАрдВ" рд╣реИред рд╕рдлрд▓
рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкреВрд░рд╛ рд╣реЛрдирд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрднрд╡ рд╣реИ
рдЕрд╕рдлрд▓рддрд╛ред

рдкреНрд░рддреНрдпреЗрдХ (рдФрд░ рд╡рд╣ рд╕рдлрд▓ рд╕рдорд╛рдкрди рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ, рд╕рд╛рде рд╣реА) рдХреЛ рдЗрд╕рдХреЗ рдЧреБрдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо
рдЬреЛрд░ рджреЗрдХрд░ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдмреБрд▓рд╛рдП рдЧрдП рд╕рдорд╛рд░реЛрд╣ рдХреЛ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреА рд░рд╛рдп рдмрддрд╛рдиреА рдЪрд╛рд╣рд┐рдП
рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рдореЗрдВ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЧреБрдг, рдХреБрдЫ рдРрд╕рд╛ рд╣реИ
рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд░реЛрдм рдХреЛ рдЧрд▓рдд рдзрд╛рд░рдгрд╛ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдмрд┐рдВрджреБ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдкрд╛рдардХ рд╕реЗ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
io.EOF рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реИ рдЬреЛ рдХрднреА рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдХрднреА a
рд╡рд┐рдлрд▓рддрд╛, рд▓реЗрдХрд┐рди рдЧреЛ рдорд╛рдирдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЧрд░реНрд╡ рд╕реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ ("io.Err!= nil")ред
рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рднреА рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд┐рдХрд╛рд▓рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ? рд▓рдЧрднрдЧ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ
рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕рдХреА "рдЧрд▓рддрддрд╛" рдХреЛ "рдХреНрд╖рдорд╛" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЕрднреНрдпрд╕реНрдд рд╣реИрдВред

рдореИрдВрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдПрдХ рд╕рдорд╛рди "рд╕реНрдерд┐рддрд┐" рдпрд╛ . рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реВрдк рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рд╣реИ
рдХрдВрдбреАрд╢рди рдХреЛрдб (рдЦреЛрдЬ рдПрдХ рдкрд╛рдП рдЧрдП рдорд╛рди рдпрд╛ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддреА рд╣реИ, рдХреИрд╕реЗ
рдХреНрдпрд╛ рдЖрдк рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрджрд┐ рдЖрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдЖрдк рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝реЗрдВ,
рдЬрд╣рд╛рдВ рдЬреНрдЮрд╛рди рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ - рдПрдХ рд╣реА рдореБрджреНрджрд╛, рдЕрд▓рдЧ
рд╕рдВрджрд░реНрдн)ред

рдпреЗ рдкрд╛рд░рдВрдкрд░рд┐рдХ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрд╡рд░реНрджреНрдзрди рд╣реИрдВ: рдмреЙрдпрд▓рд░ рдХреЛ рдХрдо рдХрд░рдирд╛
рдкреНрд▓реЗрдЯ рдмреЗрддреБрдХрд╛ рд╣реИ, рддреБрд▓рдирд╛ рдХрд░рдХреЗред

рдФрд░, рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдорд╛рдиреНрдп рд╣реИ: рдпрджрд┐ ?:
рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ "рдРрд╕рд╛ рди рд╣реЛ рдХрд┐ рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП", рддреЛ рдХреЛрд╢рд┐рд╢ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП,
рдпрд╛ рддреЛ, рдХрдо рд╕реЗ рдХрдо рдЙрди рдЖрдзрд╛рд░реЛрдВ рдкрд░ред

рд╕рдЪ рдХрд╣реВрдВ рддреЛ рдХреЛрд╢рд┐рд╢ рдПрдХ рд▓рд╛рд░реНрдХ рд╣реИред рдпрд╣ рдЧреЛ рдХреЛ рдЧрд▓рдд рдХреЗ рдкреНрд░рддрд┐ рдЕрдзрд┐рдХ рдЖрдХрд░реНрд╖рдХ рдмрдирд╛рддрд╛ рд╣реИ
рджрд░реНрд╢рдХред рдРрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рдЦрддрд░реЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ - рдЧрд▓рдд рд▓реЛрдЧреЛрдВ рдХреЛ рдХреМрди рдЪрд╛рд╣рддрд╛ рд╣реИ
рд╣рдорд╛рд░реЗ рд╕рдореБрджрд╛рдп рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП? - рдорд┐рд╕рд╛рд▓ рдФрд░ рдореБрджреНрджреЗ рдХрд╛ рдореБрджреНрджрд╛ рд╣реИ
рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗред рдореИрдВ рдХрд╣реВрдВрдЧрд╛ "рдЗрд╕реЗ рд╕реНрдХреНрд░реИрдк рдХрд░реЗрдВ" рдФрд░ рдЪрд▓реЛ рдЗрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ
рд╣рдо рдЕрднреА рддрдХ рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдкрд╢реНрдЪрдЧрд╛рдореА рд╕рдВрдЧрддрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ
рдЙрд▓реНрд▓рдВрдШрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рдо рджрд╣рд╢рдд рдореЗрдВ рд╣реИрдВ / рдареАрдХ рд╣реЛ рдЧрдП рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рддреАрд╕рд░реЗ рджрд░реНрдЬреЗ рд╕реЗ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ
рд╕рднреА рд╕реНрдкрд╖реНрдЯреАрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдирд╛рдЧрд░рд┐рдХ рдЗрдЪреНрдЫреБрдХ рд╕рд╣рд╛рдпрдХ рдХреЗ рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рдЬреЛ рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ (рдФрд░ рдореБрдЭреЗ, рдореИрдВ рдЗрд╕рд╕реЗ рдбрд░рдиреЗ рдХреА рдмрд╛рдд рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ) рдЕрдзрд┐рдХ
рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╢реНрд╡рд╕реНрддред

рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рднреАрддрд░ "рд╕реНрдердЧрд┐рдд" рдирд┐рд░реНрдорд╛рдг (рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЕрдкрдирд╛рдпрд╛ рд╣реИ -
рдЗрд╕рдХреЗ рдЖрдпрд╛рдд рдХреЛ рдХрд╣реАрдВ рдФрд░ рдорд╣рд╕реВрд╕ рдХрд┐рдП рдмрд┐рдирд╛ - рд▓рдЧрд╛рддрд╛рд░ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдиреЗ рдореЗрдВ
SQL рд▓реЗрдирджреЗрди: tx.Rollback/tx.Commit) рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рд░рд╣рд╕реНрдпреЛрджреНрдШрд╛рдЯрди рд░рд╣рд╛ рд╣реИред
рдФрд░ рднреА рд╕рд┐рджреНрдзрд╛рдВрдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ "рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ" рд╕реАрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдЧреЛ рдкрд╣рд▓реЗ рд╕реЗ рдХреНрдпрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: рдЖрдЗрдП рдЕрднреА рдХреЗ рд▓рд┐рдП рдЙрд╕ рдмреЙрдХреНрд╕ рдХреЗ рднреАрддрд░ рд░рд╣реЗрдВред

рдПрдХ рдРрд╕реА рдЪреАрдЬ, рдЬреЛ рдмрдВрдж рд╣реЛ, рдПрдХ рддреНрд░реБрдЯрд┐ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
рдкрд╛рд░рдВрдкрд░рд┐рдХ рдХреЗ рддрд╣рдд рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА "рддреНрд░реБрдЯрд┐ред рд╡рд┐рдзрд┐рдпреЛрдВ" рдХреА рдПрдХ рд╕реВрдЪреА рдХрд╛рд░реНрдп рдХрд░реЗрдВ
рд╕реНрдерд┐рддрд┐рдпрд╛рдБ (io.EOF, sql.ErrNoRows), рдкрд░рд┐рдгрд╛рдо рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп
рдХрд╛рд▓реЗ рдФрд░ рд╕рдлреЗрдж рдХреЗ рд░реВрдк рдореЗрдВред рд▓реЗрдХрд┐рди рдореИрдВ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрд╢рд┐рдХреНрд╖рд┐рдд рд╣реВрдБ, рдореЗрд░реЗ рд╕реБрдЭрд╛рд╡
рдмрд╣реБрдд рднреЛрд▓реЗ рд╣реИрдВ, рджреВрд╕рд░реЛрдВ рдХреЛ (рд░реЛрдЬрд░, рдХреНрдпрд╛ рдЖрдк рд╕реБрди рд░рд╣реЗ рд╣реИрдВ?) рд╕рдорд╛рди рдкреЛрд╖рдг рдХрд░рддреЗ рд╣реИрдВ
рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╕рд╛рдХрд╛рд░ рдХрд░рдирд╛ред

рд▓реБрд╕рд┐рдпреЛред

"рдпрд╣ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдард┐рди рдирд╣реАрдВ рд╣реИред рдпрд╣ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдард┐рди рд╣реИ, рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдорд╛рди рд╣реЛрддрд╛ рд╣реИ
рд╣рд░ рдЬрдЧрд╣ 3 рд▓рд╛рдЗрдиреЗрдВред рдпрд╣ рдПрдХ рджреЛрд╣рд░рд╛рд╡ рд╣реИ, рдФрд░ рд╣рдо рдЖрдорддреМрд░ рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд░реВрдк рдореЗрдВ
рдЗрдиреНрд╣реЗрдВ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдкреНрд░рд╡реГрддреНрддрд┐ рд░рдЦрддреЗ рд╣реИрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЛрд╢рд┐рд╢ рдореЗрдВ рдЕрдиреНрдп рдХрдорд┐рдпрд╛рдВ рд╣реЛрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ
рдПрдХ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред"

рдлрд┐рд░ рд╕реЗ, рдХрдкрдЯреА рдпрд╛ рдХрдо рд╕реЗ рдХрдо, рдпреБрдХреНрддрд┐рд╕рдВрдЧрддред рдореИрдВ рдЕрдиреБрджрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗ
рддреАрди рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬрд┐рддрдиреА рдмрд╛рд░ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИрдВ рдЙрд╕рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдмрд╛рд░ рдкрдврд╝реА рдЬрд╛рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди
рджрд░реНрдж рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдЧреНрд░рд┐рд╕реЗрдорд░ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╣реИ рдкрдврд╝рдиреЗ рдореЗрдВ рдирд╣реАрдВ

  • рдЬрд┐рд╕реЗ рд╡рд╣ рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рдПрдХ рд▓рд╛рднрдХрд╛рд░реА рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди "рдЧрд▓рддреА! = рд╢реВрдиреНрдп" рдПрдХ рдмрд╣реБрдд рд╣реА рдкрд░рд┐рдЪрд┐рдд рдорд╛рд░реНрдХрд░ рд╣реИ рдФрд░ рдЬрдм "рдкрдврд╝рдирд╛" - as
рдПрдХ рд╕рдВрдкрд╛рджрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ "рдЦреЛрдЬ" рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╡рд╣ рдкреИрдЯрд░реНрди рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд╣реИ
рд╕реНрдкреЙрдЯ рдФрд░ рд░рджреНрдж рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рдиред рдЗрд╕реЗ рдлрд╝реИрдХреНрдЯрд░ рдХрд░рдирд╛ рдЙрд╕реА рдореЗрдВ рдирд╣реАрдВ рд╣реИ
рд▓реАрдЧ рдмрд┐рд▓реНрдХреБрд▓ред рдФрд░ рдХреАрдордд рдЧрд▓рдд рд╣реИред

"рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд░реВрдк рдореЗрдВ" рдкрд╣рд▓реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкреИрдЯрд░реНрди рдХреЛ рдХрд╛рд░рдХ рдмрдирд╛рддреЗ рд╣реИрдВ,
рднрд▓реЗ рд╣реА рд╡реЗ рд╢рд╛рдпрдж рд╣реА рдХрднреА рд╣реЛрддреЗ рд╣реИрдВред рд╣рдо рдпрд╣ рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ "рдЕрдЧрд░ рдЧрд▓рддреА!= рд╢реВрдиреНрдп {рд╡рд╛рдкрд╕реА
err }" рдХреЛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, if
рдХреЛрдИ рдирд╣реАрдВ рдХрд░рддрд╛, рдЙрдиреНрд╣реЗрдВ рдпрд╣рд╛рдБ рд╣рд╛рде рдЙрдард╛рдиреЗ рджреЛред рдХреНрдпрд╛ рдХреЛрдИ рд╕рдорд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ "рдХреЛрд╢рд┐рд╢ - рд╕рдорд╛рд░реЛрд╣" рдХреЗ рд╕рд╛рде рд╣реЛрдЧрд╛?

рд▓реБрд╕рд┐рдпреЛред

@lootch рдЕрд░реЗ рдпрд╛рд░, рд▓реЛрдЧреЛрдВ рдХреЛ рдХрдкрдЯреА рдХрд╣рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдиреБрддреНрдкрд╛рджрдХ рд╣реИ, рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рд╡реЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдП рдЧрдП рдмрдпрд╛рдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╣реБрдд рдЙрдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВред

рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд░реВрдк рдореЗрдВ рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреИрдЯрд░реНрди рдХреЛ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдЪ рд╣реИред

рдмрд╣реБрдд рд╕рд╛рд░реЗ рджреЛрд╣рд░рд╛рд╡ рд╡рд╛рд▓реЗ рдХреЛрдб рдкрдврд╝рдиреЗ рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрдкрдЯреА рд╣реИред

рдЗрдирдХреЗ рдкреНрд░рддрд┐ рдЖрдкрдХреЗ рдкреНрд░рддрд┐рд╡рд╛рдж рдореВрд▓ рд░реВрдк рд╕реЗ "рдЖрдУ рдпрд╛рд░, рдпрд╣ рдЗрддрдиреА рдмрдбрд╝реА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ"ред рдЦреИрд░, рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╣реИред

рдХреМрди рдЪрд╛рд╣рддрд╛ рд╣реИ рдХрд┐ рдЧрд▓рдд рд▓реЛрдЧ рд╣рдорд╛рд░реЗ рд╕рдореБрджрд╛рдп рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ?

рдпрд╣ рд╕реБрдкрд░ рдЕрд╣рдВрдХрд╛рд░реА рдЧреЗрдЯ рдХреАрдкрд┐рдВрдЧ рд╣реИред рд╕рд╛рде рд╣реА, tryhard рдЯреВрд▓ рдиреЗ рдЦреБрд▓рд╛рд╕рд╛ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ try рдЖрдЬ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЧреЛ рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рд╕реАрдзреЗ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕реЗ рд╕реАрдзреЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ 70% рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛрдб рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде ( defer рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреНрд░реБрдЯрд┐ рд╕рдЬрд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП), рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА рдЧреЛ рдХреЛрдб рдореЗрдВ 80% рд╕реЗ рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛ред

рд╕рд╣рдордд рд╣реВрдВ, рдореИрдВ рдпрд╣рд╛рдВ рдирд┐рд╢рд╛рди рд╕реЗ рдЖрдЧреЗ рдирд┐рдХрд▓ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдорд╛рдлреА рдорд╛рдБрдЧрддрд╛ рд╣реВрдБред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдореЗрдВ рд╕реЗ рдХреБрдЫ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрд▓рд░ рдХреЗ рдиреАрдЪреЗ рдЧрд░реНрдо рд╣реЛ рд░рд╣реЗ рд╣реИрдВ
рд╣рд▓рдХреЛрдВ рдореЗрдВ рдШреВрдо рд░рд╣рд╛ рд╣реИред

7/7/19 рдкрд░, рдореАрдХрд▓ рд╕реНрдЯреНрд░рдмрд╛ [email protected] рд▓рд┐рдЦрд╛ рд╣реИ:

@lootch рдЕрд░реЗ рдпрд╛рд░, рд▓реЛрдЧреЛрдВ рдХреЛ рдХрдкрдЯреА рдХрд╣рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдиреБрддреНрдкрд╛рджрдХ рд╣реИ, рдореИрдВ
рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рд╡реЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдП рдЧрдП рдмрдпрд╛рдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИрдВ
рдпрдереЛрдЪрд┐рддред

рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд░реВрдк рдореЗрдВ рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреИрдЯрд░реНрди рдХреЛ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╣реИ
рд╕рдЪред

рдмрд╣реБрдд рд╕рд╛рд░реЗ рджреЛрд╣рд░рд╛рд╡ рд╡рд╛рд▓реЗ рдХреЛрдб рдкрдврд╝рдиреЗ рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рд╣реИ
рдХрдкрдЯреА рдпрд╛ рддреЛред

рдЗрдирдХреЗ рдкреНрд░рддрд┐ рдЖрдкрдХрд╛ рдкреНрд░рддрд┐рд╡рд╛рдж рдореВрд▓ рд░реВрдк рд╕реЗ рд╣реИ "рдЖрдУ рдпрд╛рд░, рдпрд╣ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ"
рдмрдбрд╝реА рдмрд╛рдд"ред рдареАрдХ рд╣реИ, рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╣реИред

рдХреМрди рдЪрд╛рд╣рддрд╛ рд╣реИ рдХрд┐ рдЧрд▓рдд рд▓реЛрдЧ рд╣рдорд╛рд░реЗ рд╕рдореБрджрд╛рдп рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ?

рдпрд╣ рд╕реБрдкрд░ рдЕрд╣рдВрдХрд╛рд░реА рдЧреЗрдЯ рдХреАрдкрд┐рдВрдЧ рд╣реИред рд╕рд╛рде рд╣реА, tryhard рдЯреВрд▓ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐
try рдЖрдЬ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЧреЛ рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рд╕реАрдзреЗ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рд╕реАрдзреЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ 70% рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛрдб рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рд╕рд╛рде рдореЗрдВ
рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди ( defer , рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреНрд░реБрдЯрд┐ рд╕рдЬрд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП), рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ
рдпрд╣ рд╕рднреА рдЧреЛ рдХреЛрдб рдореЗрдВ 80% рд╕реЗ рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛ред

--
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ:
https://github.com/golang/go/issues/32825#issuecomment -508971768

--
рд▓реБрд╕рд┐рдпреЛ рдбреА рд░реЗ
2 рдкреАрдЯ рд░рд┐рдЯреНрд░реАрдл St
рдХреЗрд╕реНрдЯреЗрд▓ (рдкреВрд░реНрд╡реА рдореБрдХреНрдд рд░рд╛рдЬреНрдп)
9860 рджрдХреНрд╖рд┐рдг рдЕрдлреНрд░реАрдХрд╛

рджреВрд░рднрд╛рд╖: +27 58 653 1433
рд╕реЗрд▓: +27 83 251 5824
рдлреИрдХреНрд╕: +27 58 653 1435

@lootch рдЖрддреНрдо-рдЬрд╛рдЧрд░реВрдХ рд╣реЛрдиреЗ рдкрд░ рд╕рд╣рд╛рд░рд╛ рджреЗрддрд╛ рд╣реИ! рдореИрдВ рдЪрд░реНрдЪрд╛ рдХреЛ рдордВрдбрд▓рд┐рдпреЛрдВ рдореЗрдВ рдЬрд╛рддреЗ рд╣реБрдП рджреЗрдЦрдиреЗ рдХреА рд╣рддрд╛рд╢рд╛ рдХреЛ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдБ.

рдореИрдВ рднреА рдЗрд╕реЗ рдЗрд╕реА рддрд░рд╣ рджреЗрдЦрддрд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рджреВрд╕рд░реА рддрд░рдл рд╣реВрдВред

рд╢рд╛рдпрдж рджреЛрдиреЛрдВ рдкрдХреНрд╖ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рд╣реА рдЕрд╕рдлрд▓ рд╣реЛ рд░рд╣реЗ рд╣реИрдВред рдХреНрдпрд╛ рдЖрдкрдиреЗ рдореЗрд░рд╛ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдкрдврд╝рд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╣реИ 'рдХреЛрд╢рд┐рд╢' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ? рдЬрд╣рд╛рдВ рдореИрдВ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ 'рдХреЛрд╢рд┐рд╢' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛, рдирд┐рд╖реНрдкрдХреНрд╖ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдкреВрд░реА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ?

7/7/19 рдкрд░, рдореАрдХрд▓ рд╕реНрдЯреНрд░рдмрд╛ [email protected] рд▓рд┐рдЦрд╛ рд╣реИ:

[...]
рд╢рд╛рдпрдж рджреЛрдиреЛрдВ рдкрдХреНрд╖ рджреВрд╕рд░реЗ рдкрдХреНрд╖ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рд╣реА рдЕрд╕рдлрд▓ рд╣реЛ рд░рд╣реЗ рд╣реИрдВред рдХреНрдпрд╛ рддреБрдо
рд╣рд╛рдЙ рдЯреВ рдпреВрдЬрд╝ рдирд╛рдордХ рдореЗрд░рд╛ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдкрдврд╝реЗрдВ 'рдкреНрд░рдпрддреНрди'? рдЬрд╣рд╛рдБ рдореИрдВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдБ
рджрд┐рдЦрд╛рдПрдБ рдХрд┐ 'рдХреЛрд╢рд┐рд╢' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛, рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдкреВрд░реА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ
рдирд┐рд╖реНрдкрдХреНрд╖?

рдореИрдВ рдХрдмреВрд▓ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдореИрдВ рдЬреЛрд╢ рд╕реЗ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореБрдЭреЗ рдХрднреА :-)

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЙрди рдкрд╣рд▓реБрдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдЯреЙрдХрдЯрди рдиреЗ рдЙрдард╛рдП рдереЗ, рдЬрд╣рд╛рдВ рдХреЗрд╡рд▓
рдХреЛрд╢рд┐рд╢ рдХреЗ рдЙрддрд╛рд░-рдЪрдврд╝рд╛рд╡ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣ рдкреВрдЫрддрд╛ рд╣реИ рдХрд┐ рдирд░рдо рдЕрдВрдбрд░рдмреЗрд▓реА
рднреА рдкреНрд░рдХрдЯ рд╣реЛ? рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рдореИрдВ рдЙрд╕рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдФрд░ - рдХреЛрдИ рдЕрдкрд░рд╛рдз рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд╣реИ -
рдХрд┐ рдЖрдкрдХрд╛ рдмреНрд▓реЙрдЧ рдЙрдиреНрд╣реАрдВ рдХрдорд┐рдпреЛрдВ рд╕реЗ рдЧреНрд░рд╕реНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдареЗрд╕ рдкрд╣реБрдБрдЪрд╛рдПрдБ, рдЕрдЪреНрдЫреА рдкрдарди рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕реНрдерд╛рди рд╣реИ
рдореЗрд░реЗ рдЬреАрд╡рди рдореЗрдВ :-)

рд▓реБрд╕рд┐рдпреЛред

@lootch рдореИрдВрдиреЗ рдХрдо рд╕реЗ рдХрдо рдХреЛрдб рдореЗрдВ 'рдХреЛрд╢рд┐рд╢' рдХреЗ рдХрдИ рдкрд╣рд▓реБрдУрдВ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдкреВрд░реА рдХреЛрд╢рд┐рд╢ рдХреА (рдпрд╛рдиреА рдЬрдм рдпрд╣ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЬрдм рдпрд╣ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ) рдФрд░ рдЗрд╕реЗ рдпрдерд╛рд╕рдВрднрд╡ рдирд┐рд╖реНрдкрдХреНрд╖ рдФрд░ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдмрдирд╛ рджреЗрддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╢рдмреНрдж рди рд▓реЗрдВ :)

рд╕рдВрдмрдВрдзрд┐рдд Reddit рдЪрд░реНрдЪрд╛ рдкрд░ рдпрд╣ рд╕рдмрд╕реЗ рдКрдкрд░ рдХреА рдЯрд┐рдкреНрдкрдгреА рдереА:

рдпрд╣ рдПрдХ рдЙрдкрдпреЛрдЧреА рдирд┐рд╖реНрдкрдХреНрд╖ рдХрд╛рд▓реНрдкрдирд┐рдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдмрд╛рддрдЪреАрдд рдореЗрдВ рдХреБрдЫ рд░рдЪрдирд╛рддреНрдордХ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдЬреЛ рд╕рд┐рд░реНрдл "рдпрд╣ рдмреЗрдХрд╛рд░" рдирд╣реАрдВ рд╣реИред

@lootch рдореИрдВрдиреЗ рдХрдо рд╕реЗ рдХрдо рдХреЛрдб рдореЗрдВ 'рдХреЛрд╢рд┐рд╢' рдХреЗ рдХрдИ рдкрд╣рд▓реБрдУрдВ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдкреВрд░реА рдХреЛрд╢рд┐рд╢ рдХреА (рдпрд╛рдиреА рдЬрдм рдпрд╣ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЬрдм рдпрд╣ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ) рдФрд░ рдЗрд╕реЗ рдпрдерд╛рд╕рдВрднрд╡ рдирд┐рд╖реНрдкрдХреНрд╖ рдФрд░ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдмрдирд╛ рджреЗрддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╢рдмреНрдж рди рд▓реЗрдВ :)

рд╕рдВрдмрдВрдзрд┐рдд Reddit рдЪрд░реНрдЪрд╛ рдкрд░ рдпрд╣ рд╕рдмрд╕реЗ рдКрдкрд░ рдХреА рдЯрд┐рдкреНрдкрдгреА рдереА:

рдпрд╣ рдПрдХ рдЙрдкрдпреЛрдЧреА рдирд┐рд╖реНрдкрдХреНрд╖ рдХрд╛рд▓реНрдкрдирд┐рдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдмрд╛рддрдЪреАрдд рдореЗрдВ рдХреБрдЫ рд░рдЪрдирд╛рддреНрдордХ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдЬреЛ рд╕рд┐рд░реНрдл "рдпрд╣ рдмреЗрдХрд╛рд░" рдирд╣реАрдВ рд╣реИред

рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдкрде рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп? рдпрд╣ рдЕрдХреЗрд▓реЗ рдПрдХ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдХреЛрдб рдореЗрд░реА рд╕рдореАрдХреНрд╖рд╛ рдХреЛ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдХреБрдЫ рдлрд╝реАрд▓реНрдб рдЧрд╛рдпрдм рд╣реИрдВ? рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд?

@sirkon рдмрд╣реБрдд рд▓рдВрдмрд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдард╛рдИ рдЧрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд╡реЗ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдкреНрд░рдерд╛рдУрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреЛ рдХрд┐ рд╡рд╣рд╛рдВ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред

рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдард╛рдИ рдЧрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрди рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдкреНрд░рдерд╛рдУрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ

рдХреНрдпреЛрдВрдХрд┐ рддреБрдордиреЗ рдРрд╕рд╛ рдХрд╣рд╛?

  1. рдЕрдкрдиреЗ рдмреНрд▓реЙрдЧ рдХреЗ рд╢реАрд░реНрд╖рдХ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ: рдЗрд╕реЗ "рдХреИрд╕реЗ рдирд╣реАрдВ рд▓рд┐рдЦрдирд╛" рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐, рдореИрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВ, рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдкрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмреБрд░рд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИ рдФрд░, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ, рдиреАрдЪреЗ рдПрдХ рд╕рдВрдкреВрд░реНрдг рдХреЛрдб рднреА рд╣реИред
  2. рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЗрд╕рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реИ?
    go resp := Respondent{ Name: name, Gender: try(parseField(s, &line, "gender")), OS: try(parseField(s, &line, "os")), Lang: try(parseField(s, &line, "lang")), }
    рдЦрд░рд╛рдм рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛? рдХрдо рд╕реЗ рдХрдо рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдлрд╝реАрд▓реНрдб рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдФрд░ рдЕрдиреБрдкрд▓рдмреНрдз рдлрд╝реАрд▓реНрдб рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдкрдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдирд┐рджрд╛рди рдШрдЯрд┐рдпрд╛ рд╣реИред

рдкреАрдПрд╕ рдиреЗ рдЖрдкрдХреЗ рд░реЗрдкреЛ рдкрд░ рдПрдХ рдирдЬрд░ рдбрд╛рд▓реАред рдХреНрдпрд╛ рдЖрдкрдХреЛ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдЧреЛ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрд░рд╛рдм рдЙрдкрдХрд░рдг рд╣реИ? рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧреЛ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд▓реЙрдЧ рджреЗрдЦрдиреЗ рд╡рд╛рд▓рд╛ рдкрд╣рд▓рд╛ рд╡реНрдпрдХреНрддрд┐ рдСрдкрд░реЗрд╢рди рдЗрдВрдЬреАрдирд┐рдпрд░ рд╣реЛрдЧрд╛, рди рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ред рдЙрдЪрд┐рдд рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рдпрдВ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

@ рд╕рд┐рд░реНрдХреЛрди рдЪрд▓реЛ,

рдХреНрдпрд╛ рдЖрдкрдХреЛ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдЦрд░рд╛рдм рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛?

рд╡реЗ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рднреА рдлрд╝реАрд▓реНрдб рдФрд░ рдХреНрд░рдо рдореЗрдВ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЗрд╕реЗ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХрд╛ рд╡рд┐рд░реЛрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рдЧреБрдгрд╡рддреНрддрд╛ рдорд╛рдирдХреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд▓рд┐рдЦрддреЗ? рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ try рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдкреВрд░реА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред

рдкреАрдПрд╕ рдиреЗ рдЖрдкрдХреЗ рд░реЗрдкреЛ рдкрд░ рдПрдХ рдирдЬрд░ рдбрд╛рд▓реАред рдХреНрдпрд╛ рдЖрдкрдХреЛ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдЧреЛ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрд░рд╛рдм рдЙрдкрдХрд░рдг рд╣реИ?

рдХреНрдпрд╛ рдЖрдк рдореЗрд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░рд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ? рдореИрдВрдиреЗ рдХрд╛рдлреА рдХреБрдЫ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реИред рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдпрд╣ рдХрд╛рдлреА рдСрдл-рд╡рд┐рд╖рдп рд╣реИред

@faiface

рдХреНрдпрд╛ рдЖрдк рдореЗрд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░рд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ? рдореИрдВрдиреЗ рдХрд╛рдлреА рдХреБрдЫ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реИред рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдпрд╣ рдХрд╛рдлреА рдСрдл-рд╡рд┐рд╖рдп рд╣реИред

рдЬрдВрдЧ? рд╕реА++?

@sirkon

рдЬрдВрдЧ? рд╕реА++?

рд╣рдо рд╡рд╣рд╛рдБ рдЪрд▓реЗрдВред рдореИрдВрдиреЗ рдЧреЛ рдХреЗ рд╕рд╛рде рд╕рдордЭреМрддрд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдХрднреА рдкреАрдЫреЗ рдореБрдбрд╝рдХрд░ рдирд╣реАрдВ рджреЗрдЦрд╛ред

@sirkon try рдХреА рдмрдбрд╝реА рдЦрд╛рдорд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рддреНрд░реБрдЯрд┐ рд╕рдЬрд╛рд╡рдЯ рдХреЛ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ try рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рджрд┐рдЦрд╛ рд░рд╣рд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐ рд╕рдЬрд╛рд╡рдЯ рдирд╣реАрдВ рд╣реЛрдЧреАред

рд╕рд╛рде рд╣реА, рдЬрд┐рди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рдЙрдирдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдмрджрдирд╛рдо рдХрд░рдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рд╖рдп рд╕реЗ рдкрд░реЗ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИред рдЖрдк рдЕрдкрдиреА рдкрд┐рдЫрд▓реА рдХреБрдЫ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рддрд┐ рдХрд╛рдлреА рдХрдареЛрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдХрдо рд╕реЗ рдХрдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдЧрд░реВрдХ рд░рд╣реЗрдВред

@deanveloper рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛрд╢рд┐рд╢ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рджрд┐рдЦрд╛ рд░рд╣рд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рддреНрд░реБрдЯрд┐ рд╕рдЬрд╛рд╡рдЯ рдирд╣реАрдВ рд╣реЛрдЧреАред

рдпрджрд┐ рдЖрдк рдореЗрд░реЗ рдмреНрд▓реЙрдЧ рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рддреНрд░реБрдЯрд┐ рд╕рдЬрд╛рд╡рдЯ рдЪрд▓ рд░рд╣реА рд╣реИ, рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдирд╣реАрдВ рдЬреИрд╕реЗ @sirkon рдХрд░реЗрдЧрд╛ред рдпрд╣рд╛рдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реЗ рдХреБрдЫ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджрд┐рдП рдЧрдП рд╣реИрдВ рдЬреЛ try :

parse respondnts.txt: open respondnts.txt: no such file or directory
parse respondents.txt: line 12: parse field gender: expected "gender:"
parse respondents.txt: line 9: expected empty line
parse respondents.txt: line 4: parse field lang: EOF

@faiface рдореЗрд░реА рдЧрд▓рддреА, рдореБрдЭреЗ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред рдЬрдм рдЖрдк рдПрдХ рд╣реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХрд╛рдзрд┐рдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ try рддреНрд░реБрдЯрд┐ рд╕рдЬрд╛рд╡рдЯ рдХреЛ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИред check/handle рдорд╕реМрджреЗ рдХреЗ рд╕рд╛рде рдФрд░ "рдирд╛рдорд┐рдд рд╣реИрдВрдбрд▓рд░" рдХрд╛рдЙрдВрдЯрд░рдкреНрд░рдкреЛрдЬрд▓ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛ред рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджреЗрд╢ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╕рдЬрд╛рд╡рдЯ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ (рдЬрд╣рд╛рдВ рдЖрдк try рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рдереЗ) рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджреЗрд╢ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╕рдЬрд╛рд╡рдЯ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдкреНрд░рдпрд╛рд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдЗрд╕реЗ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдХрдард┐рди рдмрдирд╛рддрд╛ рд╣реИ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдХрд╛рд░реНрдп рд▓рд┐рдЦреЗ рдмрд┐рдирд╛ред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдкрдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдореЗрдВ рдЪреЗрдХ/рд╣реИрдВрдбрд▓ рдиреЗ рдЙрддрдиреА рдорджрдж рдирд╣реАрдВ рдХреА рд╣реЛрдЧреАред рд▓реЗрдХрд┐рди рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд┐рдЪрд╛рд░ catch рдФрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп counterproposals try рдРрдб рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдЬрд╛рд╡рдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЗ рд░реВрдк рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рдЧрдпрд╛ рд╣реЛрддрд╛ред

@deanveloper рдареАрдХ рд╣реИ, рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рдЖрдкрдХреЛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рднреАрддрд░ рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╕рдЬрд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрдк-рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╕реЗ рдЕрдкрдирд╛ рд╕рдВрджрд░реНрдн рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рдЖрдкрдХреЛ рдПрдХ рд╣реА рдлрдВрдХреНрд╢рди рдореЗрдВ рдЪреАрдЬреЛрдВ рдХреЛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд╕рдЬрд╛рдирд╛ рд╣реЛрддрд╛ рд╣реИ, рддрдм рднреА рдХреЛрд╢рд┐рд╢ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрд╕рд╛рди рдЙрдкрд╛рдп рд╣реЛрддрд╛ рд╣реИ:

..., err := functionThatCanFail(...)
try(errors.Wrapf(err, ...))

рдпрд╛ рдмрд╕ рдмрдбрд╝реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрдИ рдЫреЛрдЯреЗ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВред

@faiface рдореЗрд░реА рдирдЬрд╝рд░ рдореЗрдВ рдЙрд╕ рд╕рдордп рдХрд┐рд╕реА рдХреЛ рдХреЗрд╡рд▓ if err != nil рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд░реАрдпрддрд╛ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрднреА-рдХрднреА (рдЬреИрд╕реЗ рд╕рдВрд░рдЪрдирд╛-рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рдорд▓реЗ рдореЗрдВ) рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдереЛрдбрд╝рд╛ рдирд╛рдЗрдЯрдкрд┐рдХреА рд╣реЛ рд░рд╣рд╛ рд╣реВрдВред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ try рдЦрд┐рд▓рд╛рдл рд╕реБрдкрд░ рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмрдбрд╝рд╛ рд╕рдорд░реНрдердХ рднреА рдирд╣реАрдВ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдБ рдПрдХ рдФрд░ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рд╣реИред

@deanveloper

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрднреА-рдХрднреА (рдЬреИрд╕реЗ рд╕рдВрд░рдЪрдирд╛-рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдорд╛рдорд▓реЗ рдореЗрдВ) рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред

рд╕рдЪ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд╕рдЬрд╛рдиреЗ рдХреА рднреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдЬрд╛рд╡рдЯ parseField рд╕реЗ рдЖрддреА рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдБ рдПрдХ рдФрд░ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рд╣реИред

рдпрд╣ рдмрд┐рд▓рдХреБрд▓ рд╕рдВрднрд╡ рд╣реИ! рдЕрдЧрд░ рдореБрдЭреЗ рдПрдХ рдмреЗрд╣рддрд░ рд╕рдорд╛рдзрд╛рди рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рдорд┐рдирдЯ рдореЗрдВ try рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ :)

рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рдЖрдкрдХреЛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рднреАрддрд░ рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╕рдЬрд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЙрдк-рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╕реЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП

@faiface рдореИрдВ рдЗрд╕ рдХрдерди рд╕реЗ рдкреВрд░реА рддрд░рд╣ рдЕрд╕рд╣рдордд рд╣реВрдВред рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рд╕реНрдЯреИрдХ рдкрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрд╛ рдЙрдк-рдлрд╝рдВрдХреНрд╢рди рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдкреНрд░рд╡рд╛рд╣ рдореЗрдВ рдЗрд╕рдХреА рд╕рдорд╛рди рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпрд╛рдВ рд╣реИрдВ (рдЬреЛ рдКрдкрд░реА рджрд╛рдпрд░реЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕рдВрджрд░реНрдн рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ)ред

рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдЬреЛ рдбреЗрдЯрд╛ рдХреЗ рджреЛ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ 'рдлрд╛рдЗрд▓ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХреЗ' рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХреИрд╕реЗ рднреЗрдж рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреМрди рд╕рд╛ рдПрдкреЗрдВрдб рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ?

рд╣рдо рд╕рдм рдЖрд▓рд╕реА рдкреНрд░рд╛рдгреА рд╣реИрдВред рдореИрдВ рднреА рдЕрдЧрд░ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред рдФрд░ рд╣рд╛рдВ, рдЬрдм рдореИрдВрдиреЗ рдЧреЛ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╕рд╛рд╣рд╕рд┐рдХ рдХрд╛рд░реНрдп рдХреА рд╢реБрд░реБрдЖрдд рдХреА рддреЛ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдереЛрдбрд╝рд╛ рдмреЛрдЭрд┐рд▓ рд╣реИред рдХреБрдЫ рд╕рд╛рд▓реЛрдВ рдХреЗ рдЕрднреНрдпрд╛рд╕ рдХреЗ рдмрд╛рдж рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░рд╛ рдирдЬрд░рд┐рдпрд╛ 180 рдбрд┐рдЧреНрд░реА рд╣реЛ рдЧрдпрд╛ред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдЧреЛ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдЬрд┐рдореНрдореЗрджрд╛рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдФрд░ рдЕрдЪреНрдЫреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрддрд╛ рд╣реИред рдЖрдИрдПрдордПрдЪрдУ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдХрдордЬреЛрд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рдФрд░ рддрдВрддреНрд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдмрдбрд╝реА рд╡рд┐рдлрд▓рддрд╛ рд╣реЛрдЧреАред

@mklimuk рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ "рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп" рд╣реИред рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг рд╢рд╛рдпрдж if err != nil рджреНрд╡рд╛рд░рд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдХрдИ рдмрд╛рд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, try рдХреЛ рд╕рднреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рдЖрдо рд╣реИрдВред

рдФрд░ рд╕рдмреВрдд рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╕рднреА рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛрдб рдХрд╛ 70% try рдЖрдЙрдЯ-рдСрдл-рдж-рдмреЙрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рднреА рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛрдб рдХреЗ 59% рдХреЗ рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реИ рдЬрдВрдЧрд▓реАред

@faiface рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ try рд╕реНрдкрд╖реНрдЯ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрджрд░реНрдн рдХреЛ рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛рдирд╛ 'рд╕рдмрд╕реЗ рдЖрдо рд╕реНрдерд┐рддрд┐' рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╡рд┐рдкрд░реАрдд рд╣реИ :)

рдЗрд╕ рдереНрд░реЗрдб рдХреЛ рдЕрдкрд╡реЛрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧ рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рдд рд╕реЗ рдЪрд┐рдВрддрд┐рдд рд╣реИрдВ рдХрд┐ рдпрд╣ рдирдпрд╛ рдХрдерди рдЧреЛ рдХреЛрдб рдХреЛ рдХрдо рд╡рд░реНрдмреЛрдЬрд╝ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдЧреЛ рдбрд┐рдЬрд╝рд╛рдЗрди (рд╕рд╛рджрдЧреА, рд╕реНрдкрд╖реНрдЯрддрд╛ рдЖрджрд┐) рдХреЗ рдкреАрдЫреЗ рдХреЗ рдкреВрд░реЗ рдкреНрд░рдпрд╛рд╕ рдХреЛ рдЦрд░рд╛рдм рдХрд░ рджреЗрдЧрд╛ред

рдЬрд╝рд░реВрд░, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ try рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрджрд░реНрдн рдХреЗ рддреНрд░реБрдЯрд┐ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрдо рдорд╛рдорд▓рд╛ (рдкреНрд░рддрд┐ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╕рдВрджрд░реНрдн) try рджреНрд╡рд╛рд░рд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:

func doSomething() (err error) {
    defer fmt.HandleErrorf(&err, "doing something")

    x := try(oneThing())
    try(anotherThing(x))
    // ...
}

рдПрд╣рд╕рд╛рд╕ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп, oneThing() рдФрд░ anotherThing() рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрджрд░реНрдн рд▓реМрдЯрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг "doing something: ..." рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

рдПрдХ рд╕рд╛рдЗрдб рдиреЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рдЬрд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП _who_ рдкрд░ рдХреБрдЫ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Stdlib рдореЗрдВ рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдкреВрд░реНрд╡ copy: x to y рдпрд╛ рдЗрд╕реА рддрд░рд╣, рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдХреЙрд▓рд░ рддрдХ рд╕рдЬрд╛рд╡рдЯ рдЫреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рддрд░реНрдХ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдореЗрд░реЗ рдкрд╛рд╕ Copy() рд╣реЛрддрд╛ рддреЛ рдореИрдВ return errors.Wrap(err, "writing") рдЬреИрд╕рд╛ рдХреБрдЫ рдХрд░рддрд╛ рдФрд░ Copy() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЙрд▓рд░ errors.Wrapf(err, "copying from %v to %v", src, dst) рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯрддрд╛ред

рдпреЗ рджреЛрдиреЛрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдХрднреА-рдХрднреА рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпрд╛ рдпрд╣ рдХрд╣рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ stdlib рд╢реИрд▓реА рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рд╣реИ? рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдпрд╛рдж рдирд╣реАрдВ рдХрд┐ рд╡реЗ рд╕рднреА рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реЛрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣реА рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рд╣реИ @faiface рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЙрд▓рдЯ рд░рд╣рд╛ рд╣реВрдВ, рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓реАрдирд░ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлреЛрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рдирд┐рд░реНрдгрдп рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ "рдмрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ" рд╡реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред

рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕рдЬрд╛рд╡рдЯ рдХреЛ рдХреЙрд▓рд░ рддрдХ рдЫреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рддрд░реНрдХ рд╣реИрдВред

рд╣рд╛рдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ JSON рдмреЙрдбреА рдХреЛ HTTP рдЕрдиреБрд░реЛрдз рд╕реЗ рдмрд╛рд╣рд░ рдХрд░рддрд╛ рд╣реИ, рд╣реЗрдбрд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдпрджрд┐ рдЗрд╕реЗ рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЕрдорд╛рдиреНрдп JSON рдЦрд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА - рдпрд╣ рд╕рдм рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ - рддреНрд░реБрдЯрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рд╣реИред _caller_ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдПрдкреАрдЖрдИ рдХрд╛ рдХреМрди рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рдерд╛, рдФрд░ рдмрджрд▓реЗ рдореЗрдВ рдпрд╛ рддреЛ рдЗрд╕реЗ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдпрд╛ HTTP рддреНрд░реБрдЯрд┐ рдЬрд╛рд░реА рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдЬрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред

рдпрджрд┐ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЬрди рдХреЛрдб рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЙрдирдХреЗ рдкрд╛рд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реЛрдЧреАред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдпрджрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рд╕рднреА рд╕рдВрджрд░реНрдн рд╣реИрдВ, рддреЛ рд╡реЗ рд╢рд╛рдпрдж рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕реЗ рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рдЖрдк рдХреЛрдб рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред

@lpar рдорд╛рдЗрдВрдб

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рд╣реИ? рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХрд╛ parseJSON рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрджрд░реНрдн рдЬрд╛рдирддрд╛ рдерд╛ рдФрд░ рдпрд╣ рд╕рдЬрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рдХрд┐ рдХреМрди рд╕рд╛ рдПрдкреАрдЖрдИ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдФрд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рдкреНрд░рд╡рд╛рд╣ рдпрд╣ рд╢рд░реАрд░ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдпрд╣ рдпрд╛ рддреЛ рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗрдЧрд╛ рдХрд┐ рдпрд╣ рдЙрд╕ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдерд╛, рдпрд╛ рдпрд╣ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рдЬрд╛рдирдХрд╛рд░реА рдореЗрдВ рдЧреБрдЬрд░ рд░рд╣реЗ рдереЗ рддрд╛рдХрд┐ рдЖрдк рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВред

@lpar рдареАрдХ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд╣рд╛рдВ if err != nil рдЙрдкрдпреЛрдЧ рдореЗрдВ рд░рд╣реЗрдЧрд╛ред рдпрд╛ рдЖрдк рдЕрдкрдиреЗ рддрд░реНрдХ рдХреЛ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рд╕рдордЭреЗрдВ рдХрд┐ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдирд╛ рдЬрд╣рд╛рдВ try рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, try рдЦрд┐рд▓рд╛рдл рддрд░реНрдХ рдирд╣реАрдВ рд╣реИред try рд╕рднреА рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рд╣реИрдВред

Screenshot 2019-07-07 at 6 30 42 PM

@ abejide001 try рдкреНрд░рд╕реНрддрд╛рд╡ рдХрдИ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдкрд╛рд░рдВрдкрд░рд┐рдХ "рдХреЛрд╢рд┐рд╢/рдкрдХрдбрд╝" рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдЬрдВрдЧ рдореЗрдВ try! рдореИрдХреНрд░реЛ рдХреЗ рд╕рдорд╛рди рд╣реИред рдЕрдЪреНрдЫрд╛ рдореЗрдо рд╣рд╛рд▓рд╛рдВрдХрд┐ lol

рдУрд╣ - рдЧрд▓рдд рдореБрджреНрджреЗ рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ред https://github.com/golang/go/issues/32437#issuecomment -509024693 рдкрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛ред

рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ #32968 рдкреНрд░рд╕реНрддрд╛рд╡ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ try рдореИрдХреНрд░реЛ рдХреЗ рдкрд╛рд╕ рдШреЛрдВрд╕рд▓рд╛ рдмрдирд╛рдиреЗ рдХреА рдЦрддрд░рдирд╛рдХ рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдореЗрд░реА рдЕрд╕рд╣рдорддрд┐ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдЬрдмрдХрд┐ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдЧрдВрднреАрд░ рдЦрд╛рдорд┐рдпреЛрдВ рдХрд╛ рдЕрднрд╛рд╡ рд╣реИ, рдПрдХ рд▓реЗрдЦрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдВ рдХрд┐рд╕реА рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╡реНрдпрдХреНрддрд┐ рдирд╣реАрдВ рд╣реВрдВред рддреЛ рдореИрдВ рдЕрдкрдиреЗ _do not try_ camp (рдЖрдк :) рдХреЛ рджреЗрдЦрдиреЗ, рдЖрдХрд▓рди рдХрд░рдиреЗ рдФрд░ рдЙрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред


рдЕрдВрд╢:

  • _The check рдореИрдХреНрд░реЛ рдПрдХ рдПрдХ рд▓рд╛рдЗрдирд░ рдирд╣реАрдВ рд╣реИ: рдпрд╣ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╣реИ рдЬрд╣рд╛рдБ рдХрдИ рджреЛрд╣рд░рд╛рд╡ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ
    рдПрдХ рд╣реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЬрд╛рдВрдЪ рдирд┐рдХрдЯрддрд╛ рдореЗрдВ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред_
  • _рдЗрд╕рдХрд╛ рдирд┐рд╣рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдореЗрдВ

рдбрд┐рдЬрд╛рдЗрди рдмрд╛рдзрд╛рдПрдВ (рдорд┐рд▓реА)

рдпрд╣ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реИ, рдпрд╣ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдШреЛрдВрд╕рд▓рд╛ рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИ, рдпрд╣ try рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд╡рд╛рд╣ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреЛрдб рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЕрдкреЗрдХреНрд╖рд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдирдЧреНрди рд░рд┐рдЯрд░реНрди рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг

// built-in 'check' macro signature: 
func check(Condition bool) {}

check(err != nil) // explicit catch: label.
{
    ucred, err := getUserCredentials(user)
    remote, err := connectToApi(remoteUri)
    err, session, usertoken := remote.Auth(user, ucred)
    udata, err := session.getCalendar(usertoken)

  catch:               // sad path
    ucred.Clear()      // cleanup passwords
    remote.Close()     // do not leak sockets
    return nil, 0, err // dress before leaving
}
// happy path

// implicit catch: label is above last statement
check(x < 4) 
  {
    x, y = transformA(x, z)
    y, z = transformB(x, y)
    x, y = transformC(y, z)
    break // if x was < 4 after any of above
  }

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдЖрдирдВрдж рд▓реЗрдВ!

рд▓реЗрдХрд┐рди рд╕рдордЭреЗрдВ рдХрд┐ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдирд╛ рдЬрд╣рд╛рдВ try рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, try рдЦрд┐рд▓рд╛рдл рддрд░реНрдХ рдирд╣реАрдВ рд╣реИред try рд╕рднреА рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рд╣реИрдВред

рдФрд░ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рдЖрдБрдХрдбрд╝реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╡реЗ рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рд╕рдмрд╕реЗ рдЖрдо рдорд╛рдорд▓реЗ рдирд╣реАрдВ рд╣реИрдВред рдореЗрд░реЗ рдХреЛрдб рдореЗрдВ рд╕рдмрд╕реЗ рдЖрдо рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╡рд╛рдкрд╕реА рд╕реЗ рдкрд╣рд▓реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд▓рдкреЗрдЯрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рддреЛ try рдореЗрд░реА рддреНрд░реБрдЯрд┐ рд░рд┐рдЯрд░реНрди рдХреЗ рдХреЗрд╡рд▓ рдПрдХ рдЕрдВрдХ рдкреНрд░рддрд┐рд╢рдд рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реЛрдЧрд╛ (*), рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХреБрдЫ рдмреЗрд╣рддрд░ рдЪрд╛рд╣рд┐рдПред

(*) рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирдЧреНрди err рд╡рд╛рдкрд╕реА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ, "рдЕрдЧрд░ рдЧрд▓рдд рд╣реИ! = рд╢реВрдиреНрдп" рдЕрдХреЗрд▓рд╛ рдЫреЛрдбрд╝ рджреЗрдВред

@ abejide001 try рдкреНрд░рд╕реНрддрд╛рд╡ рдХрдИ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдкрд╛рд░рдВрдкрд░рд┐рдХ "рдХреЛрд╢рд┐рд╢/рдкрдХрдбрд╝" рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдЬрдВрдЧ рдореЗрдВ try! рдореИрдХреНрд░реЛ рдХреЗ рд╕рдорд╛рди рд╣реИред рдЕрдЪреНрдЫрд╛ рдореЗрдо рд╣рд╛рд▓рд╛рдВрдХрд┐ lol

рдпрд╣ рдЕрдХреЗрд▓реЗ рдореЗрд░реЗ рд▓рд┐рдП рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИ, рдирдП рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЧреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЕрдЬреАрдм рднрд╛рд╖рд╛ рд╣реИ, рдФрд░ рдЕрдм рд╣рдореЗрдВ рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ try рдореЗрдВ рддрд░реНрдХ рдХреНрдпреЛрдВ рд╣реИред рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ "рд░рд╕реНрдЯ рдбреВ рдЗрдЯ" рдХрд╣рдирд╛ рдХрд┐рд╕реА рднрд╛рд╖рд╛ рдореЗрдВ рдХреБрдЫ рднреА рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдФрдЪрд┐рддреНрдп рд╕рд╛рдмрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рд░рдг рд╣реИ - рдпрд╣ рдЕрднреА рдкреНрд░рд╕рд┐рджреНрдз рдирд╣реАрдВ рд╣реИред

@ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдлреАрдЪрд░ рдХреЛ рд╕рд╣реА рдард╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдлреАрдЪрд░ рдиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛ред рдореИрдВ try рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдмреАрдЪ рдореЗрдВ рд╣реВрдВред

рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдмрд╣реБрдд рдлрд░реНрдХ рдкрдбрд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рднреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдХреНрд░реЛ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рдеред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рднреНрд░рдо рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЖрдИрдПрдордПрдЪрдУ, рдпрджрд┐ рдмреНрд▓реЙрдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕рдорд╕реНрдпрд╛ рдПрдХрд╛рдзрд┐рдХ рдирд╣реАрдВ рд▓рд┐рдЦ рд░рд╣реА рд╣реИред рдЖрдк рдЙрдиреНрд╣реЗрдВ рдПрдХ рдмрд╛рд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХрд╛ рдХрд╛рдо рд╣реЛ рдЧрдпрд╛ред рд╕рдорд╕реНрдпрд╛ рдЙрд╕ рдХреЛрдб рдХреЛ рдкрдврд╝ рд░рд╣реА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдмреНрд▓реЙрдХ рд╣реИрдВред рд╣рдо рд▓рд┐рдЦрдиреЗ рд╕реЗ рдХрд╣реАрдВ рдЬреНрдпрд╛рджрд╛ рдкрдврд╝рддреЗ рд╣реИрдВред рдФрд░ рдпреЗ рдмреНрд▓реЙрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рднреА рдмрджрддрд░, рдмрд╣реБрдд рдмрд╛рд░ рд╡реЗ рд▓рдЧрднрдЧ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╛рди рд╣реЛрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдПрдХ рдорд╛рдореВрд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЕрдВрддрд░ рдХреЗ рднреАрддрд░ рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдЕрдЧрд░ рдмреНрд▓реЙрдХ рд╣реЛрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдиреЗ рдЪреЗрдХ-рд╣реИрдВрдбрд▓ рдбреНрд░рд╛рдлреНрдЯ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреА, рд▓реЗрдХрд┐рди рдпрд╣ рдХрдо рд╕реЗ рдХрдо рддреНрд░реБрдЯрд┐ рдФрд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдкрдереЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдФрд░ рд╣рдо рдЕрдВрдд рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд╡рд┐рдкрд░реАрдд рдПрдХ рдПрдХрд▓ рдлрд╝рдВрдХреНрд╢рди рд╕реНрдХреЛрдк рд╕рдВрджрд░реНрдн рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореВрд▓ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рдорд╛рди рдЪреАрдЬрд╝ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдореМрдХрд╛ рд╣реИред

@icholi рдиреЗ рд▓рд┐рдЦрд╛:

рдЕрдзрд┐рдХ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди (рд╡рд╛рд░реНрд╖рд┐рдХ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рд╕реЗ) рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╡рд╛рд▓реА рднрд╛рд░реА рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдереАред рдЧреЛ рдЯреАрдо рдЕрдм рдЙрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░ рд░рд╣реА рд╣реИред

рдореИрдВрдиреЗ рдЕрднреА рдпрд╣рд╛рдВ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рджреЗрдЦрд╛: https://blog.golang.org/survey2018-results

рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рд╕рд╡рд╛рд▓ рдпрд╣ рдерд╛: "рдЖрдЬ рдЧреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕рдмрд╕реЗ рдмрдбрд╝реА рдЪреБрдиреМрддреА рдХреНрдпрд╛ рд╣реИрдВ?" рд╕рдВрднрд╛рд╡рд┐рдд рдЙрддреНрддрд░ "рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди" рдХреЗ рд╕рд╛рдеред

рдореБрдЭреЗ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЙрд╕ рдкреНрд░рд╢реНрди + рдЙрддреНрддрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╣ рдХреИрд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЧрдпрд╛ рдХрд┐ рдПрдХ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдореИрдВрдиреЗ 'рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди' рдХрд╛ рднреА рдЙрддреНрддрд░ рджрд┐рдпрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдореИрдВ рдПрдХ рдФрд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рджреЗрдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдЕрдЧрд░ рдореИрдВрдиреЗ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдореЗрдВ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреА рдЬрд╛рдБрдЪ рдХреА рд╣реЛрддреА, рддреЛ рдореИрдВ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд▓рдкреЗрдЯрдиреЗ, рдЙрдиреНрд╣реЗрдВ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдЖрджрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ред

рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╕рднреА рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рд╕реЗ рдкреАрдЫреЗ рд╣рдЯрдирд╛ рд╣реЛрдЧрд╛ (рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ @miekg рдХреНрдпрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рдерд╛)ред рдФрд░ рдкрд╣рд▓реЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╕рдореБрджрд╛рдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЙрд╕рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд░реЗрдВред рдлрд┐рд░ рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рд╡реЗ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред

рдореИрдВ рдЕрднреА рдХреЛрд╢рд┐рд╢ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЬрдм рддрдХ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ _why_ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, "рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧрд░ рдмрдпрд╛рди [...}" рдХреЗ рдЕрд▓рд╛рд╡рд╛ред рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рдд рдХрд╛ рдХреЛрдИ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдмрдпрд╛рди рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдЙрди рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛ рдХреНрдпреЛрдВ рдЦрддреНрдо рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрд░реЛрдХреНрдд рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдирдП рддреНрд░реБрдЯрд┐ рдорд╛рдиреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдЧреЛ рдХреЗ рд╕рд╛рде рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╢рд┐рдХрд╛рдпрддреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рд╣реИред рддрдм рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдпрд╣рд╛рдВ рд▓реЛрдЧ try рдЦрд┐рд▓рд╛рдл рдмрд╣рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рд▓реМрдЯрд╛рдИ рдЧрдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдПрдиреЛрдЯреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдпрд╣ рд╣реИ рдХрд┐, рдХреЛрдб рдХреЗ рд╡рд░реНрддрдорд╛рди рдХреЛрд╖ (рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рд╣рд┐рдд) рдореЗрдВ, рддреНрд░реБрдЯрд┐ рдЬрд╛рдВрдЪ рдХреЗ рдПрдХ рдЙрдЪреНрдЪ рдкреНрд░рддрд┐рд╢рдд рдореЗрдВ ~ рдирдВрдЧреЗ ~ рдЧреИрд░-рдПрдиреЛрдЯреЗрдЯреЗрдб рддреНрд░реБрдЯрд┐ рд░рд┐рдЯрд░реНрди рд╣реИрдВ рдФрд░ try рд╕реЗ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рд╣реЛрдВрдЧреЗред рдХреЛрдб рдХреИрд╕реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреА рдзрд╛рд░рдгрд╛ рдХрд╛ рдХреЛрдб IS рдХреЗ рддрд░реАрдХреЗ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ

@icholi рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рджреЗрд╡ рдЙрд╕ рддреНрд░реБрдЯрд┐ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рддреНрд░реБрдЯрд┐ рдирдЧрдгреНрдп рд╣реИ рдпрд╛ рдХреЙрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдЕрд╕рдВрднрд╡ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдРрд╕рд╛ рд╣реИ рддреЛ "рдХреЛрд╢рд┐рд╢" рдЙрддрдирд╛ рд╣реА рд╡реНрдпрд░реНрде рд╣реИ, рдХреЙрд▓рд░ рдмрд╕ "рдХреЛрд╢рд┐рд╢" рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рдкреЗрдЯ рдирд╣реАрдВ рдкрд╛рдПрдЧрд╛ред

рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╕рднреА рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рд╕реЗ рдкреАрдЫреЗ рд╣рдЯрдирд╛ рд╣реЛрдЧрд╛ (рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ @miekg рдХреНрдпрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рдерд╛)ред рдФрд░ рдкрд╣рд▓реЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╕рдореБрджрд╛рдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЙрд╕рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд░реЗрдВред рдлрд┐рд░ рдкрддрд╛ рдХрд░реЗрдВ рдХрд┐ рд╡реЗ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред

рдореИрдВ рдЗрд╕рд╕реЗ рджреГрдврд╝рддрд╛ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рдореБрдЭреЗ рдЗрд╕ рдмрд╛рдд рдкрд░ рдмрд╣реБрдд рд╕реА рдмреБрдирд┐рдпрд╛рджреА рдЕрд╕рд╣рдорддрд┐ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ рдХрд┐ рдЧреЛ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕реБрдзрд╛рд░ рдХреЛ рдХрд┐рд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓реЗрдЦ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╣рд░ рдЕрд▓рдЧ рд╣рд┐рд╕реНрд╕рд╛ рдЗрд╕рдХреЗ рдирд╛рдордХрд░рдг рдФрд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкрд░ рдмрд╛рдЗрдХрд╢реЗрдбрд┐рдВрдЧ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЪрд░реНрдЪрд╛ рдХрд╣реАрдВ рдирд╣реАрдВ рдЬрд╛ рд░рд╣реА рд╣реИред

рдореИрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╡реНрдпрд╛рдкрдХ рдЧреЛ рд╕рдореБрджрд╛рдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдирдИ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рд╕реБрд╡рд┐рдзрд╛ рд╕реЗ рдХреНрдпрд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдПрдХ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рд╣реИ, рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдореИрдВрдиреЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рджреЗрдЦрд╛ рд╣реИред рдореИрдВрдиреЗ рдХрд┐рд╕реА рднреА рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдирд╛рдордХрд░рдг рдпрд╛ рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдзреНрдпрд╛рди рд╕реЗ _рдЫреВрдЯ рджрд┐рдпрд╛ рд╣реИ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдиреА рд░рд╛рдп рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдХреЛ рддрдЯрд╕реНрде рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред

рдпрджрд┐ рд▓реЛрдЧ рднрд╛рдЧ рд▓реЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд▓рд┐рдВрдХ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

https://forms.gle/gaCBgxKRE4RMCz7c7

рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕рд╛рд░рд╛рдВрд╢ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рддрдм рд╢рд╛рдпрдж рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдмреЗрд╣рддрд░ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдЧрд╛ рдХрд┐ рд▓реЛрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдмреБрджреНрдзрд┐рдорд╛рди рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рдкреНрд░рдпрд╛рд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдЙрди рдЪреАрдЬреЛрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред (рдФрд░ рдлрд┐рд░ рд╢рд╛рдпрдж рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкрд░ рднреА рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВред)

@ рд▓реЗрди-рд╕реА-рд╡реИрдЧрдирд░ рдХреНрдпрд╛ рдЖрдк рдпрд╣ рдХрд╣рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдЧреИрд░-рдПрдиреЛрдЯреЗрдЯреЗрдб рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛рдирд╛ рд╡рд╣реА рд╣реИ рдЬреЛ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ? рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдирд┐рд╢реНрдЪрд┐рдд рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА

@icholy рдЖрд╣ рдореБрдЭреЗ рдЧрд▓рдд рд╕рдордЭрд╛ред рдЬрдм рдЖрдкрдиреЗ "рдирдВрдЧреЗ" рдХрд╣рд╛ рддреЛ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм "_" рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рддрд░реНрдХ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╡реИрдз рдХрд╛рд░реНрд░рд╡рд╛рдИ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рднрд╛рд╖рд╛ рдХреЗ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдХреЛрдб рдкрдврд╝рддреЗ рд╣реИрдВред рдЬреИрд╕реЗ, рд╕рдмрд╕реЗ рдмрдбрд╝реА рдмрд╛рдзрд╛ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдореЗрдВ рдЕрднреА рднреА рд╕рдореБрджрд╛рдп рд╕реЗ рдпрд╣ рдкреВрдЫрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдмрд╛рдзрд╛ рдареАрдХ рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИред рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдРрд╕реЗ рдкреНрд░рд╢реНрди рдХрд╛ рдирд┐рдХрдЯрддрдо рдореВрд▓реНрдпрд╛рдВрдХрди рд╣реИред

рдХреГрдкрдпрд╛ рдпрд╣ рдХрд╣рдирд╛ рдмрдВрдж рдХрд░реЗрдВ рдХрд┐ "рд╣рд░ рдХреЛрдИ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ" try ред рд╣рдо рджреВрд╕рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдХреЛрдб рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВред

@tv42 рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдк рдореБрдЭреЗ рдпрд╣рд╛рдВ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░ рд░рд╣реЗ

@griesemer рдЖрдкрдХреЗ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдореЗрдВ рднрд╛рд░реА рдХрдореА рдереАред рдореИрдВрдиреЗ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдорддрджрд╛рди рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорддрд▓рдм рдерд╛ рдХрд┐ рдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдереА, рд╡рд░реНрдмреЛрд╕рд┐рдЯреА рдирд╣реАрдВред рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдФрд░ рдмрдирд╛рдПрдВред

рдФрд░ рдореБрдЭреЗ рдЕрднреА рднреА рдпреЛрдЧ рдкреНрд░рдХрд╛рд░ рдЪрд╛рд╣рд┐рдПред

рдпрд╣ рдЙрд╕ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ gofmt рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдлрд╝реЙрд░реНрдореЗрдЯ рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рддреНрд░реБрдЯрд┐ != nil

(рдпрд╣ рдХреЛрд╢рд┐рд╢ () рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд░рд╛рдп рдирд╣реАрдВ рд╣реИред)

рдЬрдм рдХреЛрдИ рдХрдерди рдПрдХ-рдкрдВрдХреНрддрд┐ рд╢реВрдиреНрдп рддреНрд░реБрдЯрд┐ рдорд╛рди рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ:

err := myFunc()
if err != nil {
┬а┬а┬а┬аreturn err
}

gofmt рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ if-statement рдирд┐рдпрдо рдХреЛ рд╢рд┐рдерд┐рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

err := myFunc()
if err != nil { return err }

рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдХреЛрдб рдХреА рддреАрди рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рдмрди рдЬрд╛рддреА рд╣реИрдВред рдХрдо рдЕрд╡реНрдпрд╡рд╕реНрдерд╛ред рдХрд╛рд░реНрдпрдХреНрд░рдо рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рдЗрд╕рдХреЗ рд╕рд╛рде рд░реЗрдЦрд╛ рдХрд╣рд╛рдБ рдЦреАрдВрдЪрдиреА рд╣реИ (рд╕рдЬрд╛ рд╕реНрд╡реАрдХреГрдд) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА
рдЧреЛрдлрдПрдордЯреА рдирд┐рдпрдо рдореЗрдВ рдмрджрд▓рд╛рд╡ рдЗрд╕рдореЗрдВ рдХреБрдЫ рд╕рдЬрд╛рд╡рдЯ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬреИрд╕реЗ:

err := myFunc()
if err != nil { return fmt.Errorf("myFunc() blew up! %v", err }

рд▓реЗрдХрд┐рди рд╡рд┐рд╕реНрддреГрдд рдмрд╣реБ-рдкрдВрдХреНрддрд┐ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдпрдерд╛рд╡рдд рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП: рдмрд╣реБ-рдкрдВрдХреНрддрд┐ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕реНрдкрд╖реНрдЯред

_try_ рдкреНрд░рд╕реНрддрд╛рд╡ рд╡рд╛рдкрд╕ рд▓реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: https://github.com/golang/go/issues/32437#issuecomment -512035919

рдЬреЗрдирд░рд┐рдХ рдХреЛрдИ?

рдпрд╣ рдЙрд╕ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ gofmt рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдлрд╝реЙрд░реНрдореЗрдЯ рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рддреНрд░реБрдЯрд┐ != nil

рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдХрд┐, рдмрд╣реБ рд▓рд╛рдЗрди рд╕реНрд╡рд░реВрдкрдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреЛрдб рдЙрд╕ рддрд░рд╣ рд╕реЗ рдФрд░ рднреА рдЕрдкрдардиреАрдп рд╣реИред рдХреЛрд╢рд┐рд╢ рдЙрд╕ рд╕рдорд╛рдзрд╛рди рд╕реЗ рдХрд╛рдлреА рдмреЗрд╣рддрд░ рд╣реИред

рдЖрдИрдПрдордУ рдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ if err != nil рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╡реИрд╕реЗ рд╣реА рдЫреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди Error рд░рд┐рдЯрд░реНрди рдХреА рдЕрдЬреНрдЮрд╛рдирддрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░реЗрдВ? рдЬреИрд╕реЗ рдЗрд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдХреЛрдб рдХреЗ рд▓рд┐рдП рдбрд┐рд╕реЗрд╡рд░рд┐рдЯреА рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдЪреЗрддрд╛рд╡рдиреА/рддреНрд░реБрдЯрд┐ рдмрдирд╛рдирд╛ред

рдЖрдИрдПрдордУ рдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдкреНрд░рдмрдВрдзрди рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ if err != nil рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╡реИрд╕реЗ рд╣реА рдЫреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди Error рд░рд┐рдЯрд░реНрди рдХреА рдЕрдЬреНрдЮрд╛рдирддрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░реЗрдВ? рдЬреИрд╕реЗ рдЗрд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдХреЛрдб рдХреЗ рд▓рд┐рдП рдбрд┐рд╕реЗрд╡рд░рд┐рдЯреА рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рдЪреЗрддрд╛рд╡рдиреА/рддреНрд░реБрдЯрд┐ рдмрдирд╛рдирд╛ред

рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд▓рд┐рдВрдЯрд░ рдЕрдирджреЗрдЦреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдПред

рдореИрдВ рдЗрд╕реЗ рдПрдХ рдХрдард┐рди рддреНрд░реБрдЯрд┐ рдмрдирд╛рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд┐рдЦрд┐рдд рд╡рд┐рд░рд╛рд╕рдд рдХреЗ рдЯрди рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд▓рд┐рдЯрд░ рднреА рдЙрдЪрд┐рдд рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ https://github.com/kisielk/errcheck рдореБрдЭреЗ рдЕрдирд╣реЗрд▓реНрдб рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдпрд╡рд╛рди рд╣реИ @sorenvonsarvort

рдЬреИрд╕рд╛ рдХрд┐ #32437 рдкрд░ рдЪрд░реНрдЪрд╛ рдореЗрдВ рджреЗрдЦрд╛ рдЧрдпрд╛, рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдЕрднреА рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рдорд╛рдкрдиред рдпрджрд┐ рдлрд┐рд░ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ, рддреЛ рдПрдХ рдирдпрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдЦреЛрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдРрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рдирд╣реАрдВ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдПрдХ рддрд░рдл, рдпрд╣ рд╕рдЪ рд╣реИ рдХрд┐ рд▓рдЧрднрдЧ рд╣рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рдмрд╛рдж err != nil рдмреНрд▓реЙрдХ рд╣реЛрдиреЗ рд╕реЗ рдХреЛрдб рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдЕрдЬреАрдм рддрд░реАрдХреЗ рд╕реЗ рддреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рдЕрдкрд╕рд╛рдЗрдб рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдЖрдзрд╛ рд╣реИ рд╕рдВрдХрдЯред рджреВрд╕рд░рд╛ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХрдИ рд░рд┐рдЯрд░реНрди рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛, рднрд▓реЗ рд╣реА рдЗрд╕рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВ рдпрд╛ рдирд╣реАрдВ, рдХрд╛рдлреА рднрджреНрджрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рджреЛрдиреЛрдВ рдХреЗ рдмреАрдЪ рдкреНрд░рддреАрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЫреЛрдЯреЗ рдЕрдВрддрд░ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдПрдХрд╛рдзрд┐рдХ рд░рд┐рдЯрд░реНрди рдлрд╝рдВрдХреНрд╢рди рдПрдХрд▓ рд░рд┐рдЯрд░реНрди рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рддрд░реНрдХ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рддрд┐рдмрдВрдз рдереЗред рдХрднреА-рдХрднреА рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдмрд╣реБрдд рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред рдЬрдм рдЖрдк рдХрдИ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдЕрдкрдиреА рд▓рд╛рдЗрди рдкрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдпрд╣, := рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд, рдЕрдХреНрд╕рд░ рд╡рд┐рднрд┐рдиреНрди рдЪрд░ рдЫрд╛рдпрд╛рдВрдХрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдореБрдЦреНрдп рд╕реНрд░реЛрдд рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рди рдкрд░ рдХрд╣реАрдВ рдФрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ . рдЖрдк рдЙрди рдкрд░ рдЪреЗрди рд╡рд┐рдзрд┐ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдк рдЙрдирд╕реЗ рд╕реАрдзреЗ рдПрдХ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдлрд╝реАрд▓реНрдб рдФрд░ рдЙрд╕реА рд▓рд╛рдЗрди рдкрд░ рдПрдХ рдирдпрд╛ рд╡реИрд░рд┐рдПрдмрд▓ рдЕрд╕рд╛рдЗрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ред рд╢рд╛рдпрдж рдпрд╣ рд╕рд┐рд░реНрдл рдореИрдВ рд╣реВрдБред рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрдм рд▓рдЧрднрдЧ 10 рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЧреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдХрдИ рд░рд┐рдЯрд░реНрди рдХреЗ рд╕рд╛рде рдХреЙрд▓рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдЕрднреА рднреА рдореБрдЭреЗ рдХрднреА-рдХрднреА рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред

рд╢реБрдХреНрд░рд┐рдпрд╛!

рд╡рд╣рд╛рдБ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрджреНрджрд╛ рд╣реИ if err != nil , рдХреЗ рджрд╛рдпрд░реЗ err рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рдЖрдк if рдЗрдирд▓рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЛ рдЗрдирд▓рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

if err := foo(); err != nil {
if _, err := bar(); err != nil {



md5-6a135eb952fe7b24b3389cb16d3244a1



a, err := bar()
if err != nil {



md5-d52f811d3e31bb368bd8045cfb2e93b4



var err error
baz.A, err = bar()
if err != nil {

if err != nil {} рдмреНрд▓реЙрдХ рдкреВрд░реНрдг рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж err рдЪрд░ рдлрд╝рдВрдХреНрд╢рди рд╕реНрдХреЛрдк рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП try() рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИ https://github.com/golang/go/issues/33161ред рдореБрдЭреЗ рдХреБрдЫ рд░рдЪрдирд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд╕рдВрдж рдЖрдПрдЧреАред

рдЗрд░ рдПрд░рд░ != nil {} рдмреНрд▓реЙрдХ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдПрд░рд░ рд╡реЗрд░рд┐рдПрдмрд▓ рдлрдВрдХреНрд╢рди рд╕реНрдХреЛрдк рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрдЧрд░ рдмреНрд▓реЙрдХ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ "рдореМрдЬреВрдж" рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рд╕рдВрдХрд▓рдХ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдпрджрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╕рдордЭреЗ), рдФрд░ рдХреЛрдИ рдорд╛рдирд╕рд┐рдХ рднрд╛рд░ рдирд╣реАрдВ рд╣реИ рдЬрдм рддреНрд░реБрдЯрд┐ := stmt()\nif err != nil {} рдмреНрд▓реЙрдХ рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдПрдХ рд╕рд╛рде рдЪрд▓рддреЗ рд╣реИрдВред

рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдЖрдкрдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рд▓рд┐рдЦрдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╢!) рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рднреА рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдХрдерд┐рдд рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╢реЛрдз рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд░ рдЦреБрджрд╛рдИ рдХрд░реЗрдВред

@Freeaqingme рддреНрд░реБрдЯрд┐рдпрд╛рдБ if err != nil рдмреНрд▓реЙрдХ рдкреВрд░реНрдг рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЬреНрдпрд╛рджрд╛рддрд░ рдЗрд╕рд▓рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдРрд╕рд╛ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдпрд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

CopyFile рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, r, err := os.Open(src) рдмрд╛рдж w, err := os.Create(dst) ред рджреВрд╕рд░рд╛ err рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреЛ рдЫрд╛рдпрд╛рдВрдХрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рд╢реИрдбреЛрдЗрдВрдЧ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдлрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдиреНрдп рд╡рд┐рд╖рдорддрд╛рдПрдБ рднреА рд╣реИрдВред рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ err := foo() рдФрд░ рдмрд╛рдж рдореЗрдВ bar.V, err = baz() рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реИ, рдЕрдЧрд░ рдХреЛрдб рдХреЛ рджреЛрдмрд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдЕрдм foo() рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореБрдЭреЗ baz рд╕реЗ рдкрд╣рд▓реЗ var err error рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА baz рд▓рд╛рдЗрдиред . рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХрд┐рд╕реА рднрд┐рдиреНрди рд╕реНрдерд╛рди рдХреЛ рджреЛрдмрд╛рд░рд╛ рдХрд░рдиреЗ рд╕реЗ рдЙрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ

    r, err := os.Open(src)
    if err != nil {
        return ...
    }
    w, err := os.Create(dst)

err рдХрд╛ рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЫрд╛рдпрд╛ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╣реА рдЪрд░ рд╣реИрдВред https://golang.org/ref/spec#Short_variable_declarations рдкрд░ рдЪрд░реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЪрд░реНрдЪрд╛ рджреЗрдЦреЗрдВ

func doSomeThing() {
рдЖрд░, рдЧрд▓рддреА: = рдУрдПрд╕ рдУрдкрди (рдлрд╝рд╛рдЗрд▓ рдирд╛рдо)
рдкреИрдирд┐рдХ (fmt.Errorf (рдЧрд▓рддреА, "рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓:% s", рдлрд╝рд╛рдЗрд▓ рдирд╛рдо)) //
рдпрд╣рд╛рдБ рджрд╣рд╢рдд рд╣реИред

}

рдЧреБрд░реБ 10 рдЕрдХреНрдЯреВрдмрд░, 2019 11:24 clearcode рдкрд░ рдкрд░ [email protected] рд▓рд┐рдЦрд╛ рд╣реИ:

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдмрд┐рд▓реНрдбрд┐рди рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:

рдЬреЛрд░ рджреЗрдирд╛ ()

рдЙрджрд╛рд╣рд░рдг:

func doSomeThing () рддреНрд░реБрдЯрд┐ {

r, err := os.Open(filename)
assert(err, "failed to open file: %s", filename) // in this step, just return the error

рд╕рдореНрдорд╛рди, рддреНрд░реБрдЯрд┐: = http.Get(someURL)
рдЬреЛрд░ рджреЗрдВ (рдЧрд▓рддреА, "рдЕрдиреБрд░реЛрдз рд╡рд┐рдлрд▓")

}

рдФрд░ рдПрдХ рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ:

func doSomeThing() {
рдЖрд░, рдЧрд▓рддреА: = рдУрдПрд╕ рдУрдкрди (рдлрд╝рд╛рдЗрд▓ рдирд╛рдо)
рдЬреЛрд░ рджреЗрдВ (рдЧрд▓рддреА, "рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓:% s", рдлрд╝рд╛рдЗрд▓ рдирд╛рдо) // рдпрд╣рд╛рдБ рдШрдмрд░рд╛рд╣рдЯ рд╣реИред

}

рддреЛ рдЬреЛрд░ рджреЗрдВ (рддреНрд░реБрдЯрд┐, рддрд░реНрдХ ... рдЗрдВрдЯрд░рдлрд╝реЗрд╕ {}) рдЗрд╕рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ: рдЕрдЧрд░ рдЧрд▓рддреА! = рд╢реВрдиреНрдп; {
рд╡рд╛рдкрд╕реА рдЧрд▓рддреА}

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдереАред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/golang/go/issues/32825?email_source=notifications&email_token=AGUV7XQ5HO7GL3YP72R7BV3QN2N55A5CNFSM4H4DL33KYY3PNVWWWK3TUL52HS4DFVREXGEA43VMVBW1#TNIMV-5KW240JLOK
рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AGUV7XS4JMK44QHIIR3RSGTQN2N55ANCNFSM4H4DL33A
.

рдЯреЗрдХрдЕрд╡реЗ рдпрд╣ рд╣реИ рдХрд┐ рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд▓реМрдЯрд╛рдИ рдЧрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддреНрд░реБрдЯрд┐ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ
рд╡рд░реНрддрдорд╛рди рд▓рд╛рдЗрди рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░реЗрдВред

рд╢реБрдХреНрд░, 11 рдЕрдХреНрдЯреВрдмрд░, 2019 рдХреЛ рд╕реБрдмрд╣ 9:55 рдмрдЬреЗ рдЖрдЖ рдЗрдирд╛рдИ [email protected] рдиреЗ рд▓рд┐рдЦрд╛:

func doSomeThing() {
рдЖрд░, рдЧрд▓рддреА: = рдУрдПрд╕ рдУрдкрди (рдлрд╝рд╛рдЗрд▓ рдирд╛рдо)
рдкреИрдирд┐рдХ (fmt.Errorf (рдЧрд▓рддреА, "рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓:% s", рдлрд╝рд╛рдЗрд▓ рдирд╛рдо)) // рдпрд╣рд╛рдБ рджрд╣рд╢рдд рд╣реИред

}

рдЧреБрд░реБ 10 рдЕрдХреНрдЯреВрдмрд░, 2019 11:24 clearcode рдкрд░ рдкрд░ [email protected]
рд▓рд┐рдЦрд╛ рдерд╛:

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдмрд┐рд▓реНрдбрд┐рди рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:

рдЬреЛрд░ рджреЗрдирд╛ ()

рдЙрджрд╛рд╣рд░рдг:

func doSomeThing () рддреНрд░реБрдЯрд┐ {

r, err := os.Open(filename)
assert(err, "failed to open file: %s", filename) // in this step, just return the error

рд╕рдореНрдорд╛рди, рддреНрд░реБрдЯрд┐: = http.Get(someURL)
рдЬреЛрд░ рджреЗрдВ (рдЧрд▓рддреА, "рдЕрдиреБрд░реЛрдз рд╡рд┐рдлрд▓")

}

рдФрд░ рдПрдХ рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИ:

func doSomeThing() {
рдЖрд░, рдЧрд▓рддреА: = рдУрдПрд╕ рдУрдкрди (рдлрд╝рд╛рдЗрд▓ рдирд╛рдо)
рдЬреЛрд░ рджреЗрдВ (рдЧрд▓рддреА, "рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓:% s", рдлрд╝рд╛рдЗрд▓ рдирд╛рдо) // рдпрд╣рд╛рдБ рдШрдмрд░рд╛рд╣рдЯ рд╣реИред

}

рддреЛ рдЬреЛрд░ рджреЗрдВ (рддреНрд░реБрдЯрд┐, рддрд░реНрдХ ... рдЗрдВрдЯрд░рдлрд╝реЗрд╕ {}) рдЗрд╕рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ: рдЕрдЧрд░ рдЧрд▓рддреА! = рд╢реВрдиреНрдп; {
рд╡рд╛рдкрд╕реА рдЧрд▓рддреА}

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдереАред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/golang/go/issues/32825?email_source=notifications&email_token=AGUV7XQ5HO7GL3YP72R7BV3QN2N55A5CNFSM4H4DL33KYY3PNVWWWK3TUL52HS4DFVREXGEA43VMVBW1#TNIMV-5KW240JLOK
рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AGUV7XS4JMK44QHIIR3RSGTQN2N55ANCNFSM4H4DL33A
.

рд╕рдЪ рдХрд╣реВрдВ рддреЛ, рдореИрдВ рдПрдХ рдирд┐рд╣рд┐рдд рдкреНрд░рддрд┐рдлрд▓ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдЬреЛ try рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреЗрдиреЗрд░рд┐рдХ рд╣реЛрддреЗ, рддреЛ рдореИрдВ рдРрд╕реЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рдЬреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдореЛрдиреИрдб-рдИрд╢ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ред

type Result<T> interface {
  Expect(err error) T
  OrElse(defaultValue T) T
}

func From<T>(value T, err error) Result<T> { ... }

рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдмрд┐рд▓реНрдЯрд┐рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рдл рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдореЗрдВ рдФрд░ рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд▓реМрдЯрд╛рдП рдЧрдП рддрд░реАрдХреЛрдВ рдХрд╛ рдкреНрд░рд╕рд╛рд░ рд╣реЛрдЧрд╛ (рдореВрд▓реНрдп, рддреНрд░реБрдЯрд┐) рдФрд░ рдкрд░рд┐рдгрд╛рдо

рдпрд╣ рд░рд╕реНрдЯ рдХреЗ рдУрдХреЗ рдФрд░ рдПрд░ рдХреЗ рд╕рдорд╛рди рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ if err != nil {} рд╢рд╛рдпрдж рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рд╣реЛред

@Yanwenjiepy рдпрд╣ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╣реИ, рдореИрдВ рд░рд╕реНрдЯ рдХреЗ Result рдкреНрд░рдХрд╛рд░ рдХрд╛ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдкреНрд░рд╢рдВрд╕рдХ рд╣реВрдВред

рдореБрдЭреЗ рдЧреЛ рд╕реАрдЦрдиреЗ рдореЗрдВ 10 рдорд┐рдирдЯ рд╕реЗ рднреА рдХрдо рд╕рдордп рд▓рдЧрд╛ рд╣реИред рдЬрд┐рд╕ рдХреЛрдб рдХреЛ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рдерд╛ рдЙрд╕рдореЗрдВ рд╕рдмрд╕реЗ рдкрд╣рд▓реА рдЪреАрдЬ рдЬреЛ рдореИрдВрдиреЗ рджреЗрдЦреА рдереА, рд╡рд╣ рдпрд╣ рдереА рдХрд┐ рдЗрд╕ рдкреНрд░рддрд┐ рдХреЛ рдмрд╛рд░-рдмрд╛рд░ рдЪрд┐рдкрдХрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛:

someValue, err := someFunction();
if err != nil {
  panic(err)
}

рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдзрд╛рдЧреЗ рдкрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдХреЗрд╡рд▓ рдореЗрд░реА рдкрд╣рд▓реА рдирдЬрд╝рд░ рд▓рдЧ рдЧрдИ рд╣реИред

рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдХреЛ рдХреЗрд╡рд▓ рдШрдмрд░рд╛рд╣рдЯ рдФрд░ рджреБрд░реНрдШрдЯрдирд╛ рд╣реА рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реЛрддрд╛ рд╣реИред

рд╕рдЪ рд╣реИ, рд▓реЗрдХрд┐рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ (рдФрд░ рдЕрдХреНрд╕рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП) рд╕рдореВрд╣реАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдХреЛрд╢рд┐рд╢/рдкрдХрдбрд╝ рдмреНрд▓реЙрдХ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрд░реЗ рд▓рд┐рдП рдбрд╛рдпрдирд╛рд╕реЛрд░ рдХреА рддрд░рд╣ рдмрд╣реБрдд рдХрдо рдЧрдВрдз рд▓реЗрдВрдЧреЗ:

try {
  foo, throw err := someFunction();
  bar, throw err := foo.get();
  baz, throw err := bar.make();
  qux, throw err := baz.transform();
} catch(err) {
  // "Unable to foo bar baz qux."
  tryHarder();
}

рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдХреБрд▓ рдЖрдо рдЖрджрдореАред рд▓реЗрдХрд┐рди рдХреЛрдб рд╕рд┐рд░реНрдл рдкреНрд░рддреАрдХ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рд╡реЗ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрд╕рдХреЗ рд▓рд┐рдП рднреА рдПрдХ рдкреНрд░рддреАрдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдмрд╣реБрдд рдмрд╛рд░ рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдкреНрд░рддреАрдХ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

рдЖрдк рд░реЙрдм рдкрд╛рдЗрдХ рдХреА рдПрд░рд░реНрд╕ рдЖрд░ рд╡реИрд▓реНрдпреВ рдкреЛрд╕реНрдЯ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдк рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдорд░реНрдЬ рдХрд░рдиреЗ рдФрд░ рдЙрди рд╕рднреА рд╕реЗ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╣рд╛рдпрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рд╕рднреА рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдПрдХ рд╣реА рдЦрдВрдб рдХреЗ рд╕рд╛рде рдкрдХрдбрд╝рдирд╛ рдЙрди рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЦрд░рд╛рдм рд╢реИрд▓реА рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреЛ рд╣реБрдЖ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЫреБрдкрд╛рддреЗ рд╣реИрдВред (рдФрд░ рдпрджрд┐ рдЖрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрдХрдбрд╝реЗ рдЧрдП рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рджреВрд░ рдирд╣реАрдВ рдлреЗрдВрдХрддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдб рддрдм рддрдХ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдЬрдм рддрдХ рдЧреЛ рд╕рдордХрдХреНрд╖ рд╣реЛрддрд╛ рд╣реИред)

рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред errWriter рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рдЪрд▓рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИред

рд╕рдЪ рд╣реИ, рд▓реЗрдХрд┐рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ (рдФрд░ рдЕрдХреНрд╕рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП) рд╕рдореВрд╣реАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдХреЛрд╢рд┐рд╢/рдкрдХрдбрд╝ рдмреНрд▓реЙрдХ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрд░реЗ рд▓рд┐рдП рдбрд╛рдпрдирд╛рд╕реЛрд░ рдХреА рддрд░рд╣ рдмрд╣реБрдд рдХрдо рдЧрдВрдз рд▓реЗрдВрдЧреЗ:

try {
  foo, throw err := someFunction();
  bar, throw err := foo.get();
  baz, throw err := bar.make();
  qux, throw err := baz.transform();
} catch(err) {
  // "Unable to foo bar baz qux."
  tryHarder();
}

рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдХреБрд▓ рдЖрдо рдЖрджрдореАред рд▓реЗрдХрд┐рди рдХреЛрдб рд╕рд┐рд░реНрдл рдкреНрд░рддреАрдХ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рд╡реЗ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрд╕рдХреЗ рд▓рд┐рдП рднреА рдПрдХ рдкреНрд░рддреАрдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдмрд╣реБрдд рдмрд╛рд░ рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдкреНрд░рддреАрдХ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

рдорд╛рди рд▓реЗрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдЕрддрд┐рд╡реНрдпрд╛рдкреА рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рд╕рднреА рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЗрдирд╛рдпрдд рд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЖрдк tryHarder () рдХреИрд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ?

try {
  foo, throw err := someFunction();  // err could be TypeA and TypeB
  bar, throw err := foo.get();       // err could be TypeB and TypeC
  baz, throw err := bar.make();      // err could be TypeA and TypeC
  qux, throw err := baz.transform(); // err could be TypeB and TypeD
} catch(err) {
  tryHarder(); // tell me how to handle each error?
}

рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдХрд┐рд╕реА рдФрд░ рдХреЛ рдХреЗрд╡рд▓ 1 рдорд┐рдирдЯ рдХрд╛ рд╕рдордп рд▓рдЧреЗрдЧрд╛:

foo, err := someFunction();  // err could be TypeA and TypeB
if err != nil {
 // handle err
}

bar, err := foo.get();       // err could be TypeB and TypeC
if err != nil {
  // handle err
}

baz, err := bar.make();      // err could be TypeA and TypeC
if err != nil {
  // handle err
}

qux, err := baz.transform(); // err could be TypeB and TypeD
if err != nil {
  // handle err
}

рдорд╛рди рд▓реЗрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдЕрддрд┐рд╡реНрдпрд╛рдкреА рддреНрд░реБрдЯрд┐ рдкреНрд░рдХрд╛рд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рд╕рднреА рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЗрдирд╛рдпрдд рд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП

рдЙрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЖрдк рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рд╣реИрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

gopherbot picture gopherbot  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

bbodenmiller picture bbodenmiller  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

go101 picture go101  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

enoodle picture enoodle  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Miserlou picture Miserlou  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ