рдкреНрд░рд╕реНрддрд╛рд╡: рдкреНрд░рдпрд╛рд╕ - рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддреНрд░реБрдЯрд┐ рдЬрд╛рдБрдЪ рдлрд╝рдВрдХреНрд╢рди

рд╕рд╛рд░рд╛рдВрд╢


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


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


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


рдкрд░рд┐рдЪрдп


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


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


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


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



рд╡рд░реНрддрдорд╛рди рдкреНрд░рд╕реНрддрд╛рд╡, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ рдЕрд▓рдЧ рд╣реИ, рдЗрди рддреАрдиреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдерд╛, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдорд╕реМрджрд╛ рдбрд┐рдЬрд╛рдЗрди рдкрд░ рдкреНрд░рд╛рдкреНрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкрд░ред


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


рдЕрдВрдд рдореЗрдВ, рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд░рдпрд╛рди рд╣рд┐рд▓рдореИрди рдиреЗ рдУрдЧ рд░реАрд░рд╛рдЗрдЯ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдВрдЪ рд╕рд╛рд▓ рдкрд╣рд▓реЗ try рдереА рдФрд░ рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдерд╛ред рджреЗрдЦреЗрдВ ( https://news.ycombinator.com/item?id=20101417 )ред


рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдп рдлрд╝рдВрдХреНрд╢рди


рдкреНрд░рд╕реНрддрд╛рд╡


рд╣рдорд╛рд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдирдП рдлрд╝рдВрдХреНрд╢рди рдЬреИрд╕реЗ рднрд╛рд╖рд╛ рддрддреНрд╡ рдХреЛ try рдФрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдП


 func try(expr) (T1, T2, ... Tn) 

рдЬрд╣рд╛рдВ expr рдорддрд▓рдм рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ (рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдлрдВрдХреНрд╢рди рдХреЙрд▓) рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ рдЬреЛ рдХрд┐ T1, T2, ... Tn + 1 рдорд╛рдиреЛрдВ рдХреЛ рдЕрдВрддрд┐рдо рдорд╛рди рдХреЗ рд▓рд┐рдП n + 1 рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдпрджрд┐ expr рдПрдХ рдПрдХрд▓ рдорд╛рди (n = 0) рд╣реИ, рддреЛ рдпрд╣ рдорд╛рди рдЯрд╛рдЗрдк error рдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ try рдХрд┐ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рди рдЖрдПред рдХреЙрд▓рд┐рдВрдЧ try рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рд╣реЛрддреА рд╣реИ рдЬреЛ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдореЗрдВ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдкреНрд░рдХрд╛рд░ error рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред


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


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ f() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдХреЙрд▓ try рдХрд░реЗрдВ


 x1, x2, тАж xn = try(f()) 

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ:


 t1, тАж tn, te := f() // t1, тАж tn,  ()   if te != nil { err = te //  te    error return //     } x1, тАж xn = t1, тАж tn //     //     

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЕрдЧрд░ expr рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдЕрдВрддрд┐рдо error рдкреНрд░рдХрд╛рд░ nil , рддреЛ рдЕрдВрддрд┐рдо nil рдХреЛ рд╣рдЯрд╛рдХрд░, рдмрд╕ рдкрд╣рд▓реЗ n рдорд╛рди рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХрд╛ try ред


рдпрджрд┐ рдЕрдВрддрд┐рдо рдорд╛рди expr рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ:


  • рдПрдиреНрдХреНрд▓реЛрдЬрд╝рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреА error рд╡рд╛рдкрд╕реА рдорд╛рди ( error рдирд╛рдо рд╕реЗ рдКрдкрд░ рдЫрджреНрдо рдореЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХреЛрдИ рднреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдпрд╛ рдЕрдирд╛рдо рд╡рд╛рдкрд╕реА рдорд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рддреНрд░реБрдЯрд┐ рдорд╛рди expr рд╕реЗ expr
  • рд▓рд┐рдлрд╝рд╛рдлрд╝рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рд╣реИ
  • рдпрджрд┐ рдПрдиреНрдХреНрд▓реЛрдЬрд╝рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рд┐рдЯрд░реНрди рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ, рддреЛ рдпреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдЙрди рдорд╛рдиреЛрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ try рдХреЙрд▓ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдирдореЗрдВ рдирд┐рд╣рд┐рдд рдереЗред
  • рдпрджрд┐ рдПрдиреНрдХреНрд▓реЛрдЬрд╝рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдирд╛рдо рд░рд┐рдЯрд░реНрди рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ, рддреЛ рдЙрдирдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рд╢реВрдиреНрдп рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ (рдЬреЛ рдЙрдирдХреЗ рдореВрд▓ рд╢реВрдиреНрдп рдорд╛рдиреЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╡реЗ рдЖрд░рдВрднрд┐рдХ рд╣реЛрддреЗ рд╣реИрдВ)ред

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


 a, b, err = f() if err != nil { return } 

рд╣рдореЗрд╢рд╛ рдЪрд░реЛрдВ рдХреЗ рдорд╛рдиреЛрдВ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдЧрд╛ a, b рдФрд░ err , рднрд▓реЗ рд╣реА рдХреЙрд▓ рдЯреВ f() рдПрдХ рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛рдП рдпрд╛ рдирд╣реАрдВред рд╡рд┐рдкрд░реАрдд рдЪреБрдиреМрддреА


 a, b = try(f()) 

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


рдХреЗ рдЙрдкрдпреЛрдЧ


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


 f, err := os.Open(filename) if err != nil { return тАж, err //       } 

рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ


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

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


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


рдкрд░реАрдХреНрд╖рдг рдФрд░ рдХреЛрд╢рд┐рд╢


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


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


 func TestXxx(*testing.T) error func BenchmarkXxx(*testing.B) error 

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


рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдПрдХ рдЦрд╛рдореА рдпрд╣ рд╣реИ рдХрд┐ t.Fatal рдФрд░ b.Fatal рдЙрд╕ рд▓рд╛рдЗрди рдирдВрдмрд░ рдХреЛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗ, рдЬрд┐рд╕ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдЧрд┐рд░ рдЧрдпрд╛ рдерд╛ред рдПрдХ рдФрд░ рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдЙрдк-рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рднреА рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдПрдХ рдЦреБрд▓рд╛ рдкреНрд░рд╢реНрди рд╣реИ; рд╣рдо рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ testing рдкреИрдХреЗрдЬ рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред


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


рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐


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


рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдореВрд▓ рдбреНрд░рд╛рдлреНрдЯ рдбрд┐рдЬрд╛рдЗрди рдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рд░ рддрдХ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рд╕рдВрд╡рд░реНрдзрди рдпрд╛ рддреНрд░реБрдЯрд┐ рд░реИрдкрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИрдВ: рдпрджрд┐ рдЧрд▓рдд рд╣реИ if err != nil { return err} рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ if err != nil { return err} , рдпрд╛ defer рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдЕрдВрджрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВ:


 defer func() { if err != nil { //      -   err = тАж // /  } }() 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, error рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА error рд░рд┐рдЯрд░реНрди рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдирд╛рдо рд╣реИред


рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВ


 func HandleErrorf(err *error, format string, args ...interface{}) { if *err != nil { *err = fmt.Errorf(format + ": %v", append(args, *err)...) } } 

рдпрд╛ рдРрд╕рд╛ рд╣реА рдХреБрдЫред fmt рдкреИрдХреЗрдЬ рдРрд╕реЗ рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╕реНрдерд╛рди рдмрди рд╕рдХрддрд╛ рд╣реИ (рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА fmt.Errorf рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ)ред рд╕рд╣рд╛рдпрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХрдо рд╣реЛ рдЬрд╛рдПрдЧреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рдХреЙрдкреА" рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рдореГрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ


 defer fmt.HandleErrorf(&err, "copy %s %s", src, dst) 

рдЕрдЧрд░ fmt.HandleErrorf рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐ рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдлрд╛рдпрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рднрд╛рд╖рд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдирдП рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


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


рджрдХреНрд╖рддрд╛ рдореЗрдВ рдмрд╛рдзрд╛


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


рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ go try(f), defer try(f)


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


 go try(f()) 

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


рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐


 defer try(f()) 

рд╕рдорд╛рди рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдЖрд╕реНрдердЧрд┐рдд рдЕрд░реНрде рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЬрдм рддрдХ рдпрд╣ рд╕рдВрд▓рдЧреНрдирдХ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдЖрддрд╛, рддрдм рддрдХ рдирд┐рд╖реНрдкрд╛рджрди рдХреА try рджреЗрд░реА рд╣реЛрдЧреАред рдкрд╣рд▓реЗ рдХреА рддрд░рд╣, f() рдореВрд▓реНрдпрд╛рдВрдХрди рддрдм рдХрд┐рдпрд╛ f() рд╣реИ рдЬрдм defer , рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╕реНрдердЧрд┐рдд try рдкрд╛рд╕ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред


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


рдЕрдВрдд рдореЗрдВ, рдмрд╛рдХреА рдмрд┐рд▓реНрдЯ-рдЗрди рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреА рддрд░рд╣, try рдХреЗрд╡рд▓ рдХреЙрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ; рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ рдЪрд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдореЗрдВ f := try (рдЬреИрд╕рд╛ рдХрд┐ f := print рдФрд░ f := new рдирд┐рд╖рд┐рджреНрдз рд╣реИ) рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдЪрд░реНрдЪрд╛


рдбрд┐рдЬрд╛рдЗрди рдкрд░рд┐рд╡рд░реНрддрди


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


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


 handler := func(err error) error { return fmt.Errorf("foo failed: %v", err) //   } f := try(os.Open(filename), handler) //      

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


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


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


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


рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдбрд┐рдЬрд╛рдЗрди рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ


рдпрд╣ рд╕реБрдЭрд╛рд╡ рдХрд╛рдлреА рдЫреЛрдЯрд╛ рд╣реИ рдФрд░ рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рдХреЗ рдорд╕реМрджреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдХрджрдо рдкреАрдЫреЗ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЪрдпрдирд┐рдд рд╕рдорд╛рдзрд╛рди рдЙрдЪрд┐рдд рд╣реИрдВ:


  • рдкрд╣рд▓реЗ рдЪреАрдЬреЗрдВ, рдкрд╣рд▓реЗ, рдмрд┐рдирд╛ рдХрд┐рд╕реА handle рдХреЗ рдореВрд▓ рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд check рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдорд╛рди рд╢рдмреНрджрд╛рд░реНрде рд╣реИрдВред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд╣рд▓реБрдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдореВрд▓ рдорд╕реМрджреЗ рдХреА рдирд┐рд╖реНрдард╛ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИред


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


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


  • рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдХреЛрд╖реНрдардХ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЕрдкрдиреЗ рдлрд╛рдпрджреЗ рд╣реИрдВред рдХрдИ try рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ, рдХреЛрд╖реНрдардХ рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдСрдкрд░реЗрдЯрд░ рдХреА рдкреВрд░реНрд╡рд╡рд░реНрддреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдХреЗ рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:



 info := try(try(os.Open(file)).Stat()) //   try info := try (try os.Open(file)).Stat() //  try   info := try (try (os.Open(file)).Stat()) //  try   

try , : try , .. try (receiver) .Stat ( os.Open ).


try , : os.Open(file) .. try ( , try os , , try try ).


, .. .


  • . , . , , , .

рдирд┐рд╖реНрдХрд░реНрд╖


. , . defer , .


Go - , . , Go append . append , . , . , try .


, , Go : panic recover . error try .


, try , , тАФ тАФ , . Go:


  • , try
  • -

, , . if -.


рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


:


  • Go.
  • try . , . .
  • go/types try . .
  • gccgo . ( , ).
  • .

- , . , . .


Robert Griesemer go/types , () cmd/compile . , Go 1.14, 1 2019.


, Ian Lance Taylor gccgo , .


"Go 2, !" , .


1 , , , Go 1.14 .



CopyFile :


 func CopyFile(src, dst string) (err error) { defer func() { if err != nil { err = fmt.Errorf("copy %s %s: %v", src, dst, err) } }() r := try(os.Open(src)) defer r.Close() w := try(os.Create(dst)) defer func() { w.Close() if err != nil { os.Remove(dst) //    тАЬtryтАЭ    } }() try(io.Copy(w, r)) try(w.Close()) return nil } 

, " ", defer :


 defer fmt.HandleErrorf(&err, "copy %s %s", src, dst) 

( defer -), defer , .


printSum


 func printSum(a, b string) error { x := try(strconv.Atoi(a)) y := try(strconv.Atoi(b)) fmt.Println("result:", x + y) return nil } 

:


 func printSum(a, b string) error { fmt.Println( "result:", try(strconv.Atoi(a)) + try(strconv.Atoi(b)), ) return nil } 

main :


 func localMain() error { hex := try(ioutil.ReadAll(os.Stdin)) data := try(parseHexdump(string(hex))) try(os.Stdout.Write(data)) return nil } func main() { if err := localMain(); err != nil { log.Fatal(err) } } 

- try , :


 n, err := src.Read(buf) if err == io.EOF { break } try(err) 


, .


: ?


: check handle , . , handle defer , handle .


: try ?


: try Go . - , . , . , " ". try , .. .


: try try?


: , check , must do . try , . try check (, ), - . . must ; try тАФ . , Rust Swift try ( ). .


: ? Rust?


: Go ; , Go ( ; - ). , ? , . , , , (package, interface, if, append, recover, ...), , (struct, var, func, int, len, image, ..). Rust ? try тАФ Go, , ( ) . , ? . , , (, ..) . . , .


: ( error) , defer , go doc. ?


: go doc , - ( _ ) , . , func f() (_ A, _ B, err error) go doc func f() (A, B, error) . , , , . , , . , , , -, (deferred) . Jonathan Geddes try() .


: defer ?


: defer . , , defer "" . . CL 171758 , defer 30%.


: ?


: , . , ( , ), . defer , . defer - https://golang.org/issue/29934 ( Go 2), .


: , try, error. , ?


: error ( ) , , nil . try . ( , . - ).


: Go , try ?


: try , try . super return -, try Go . try . .


: try , . ?


: try ; , . try ( ), . , if .


: , . try, defer . ?


: , . .


: try ( catch )?


: try тАФ ("") , , ( ) . try ; . . "" . , . , try тАФ . , , throw try-catch Go. , (, ), ( ) , . "" try-catch , . , , . Go . panic , .

Source: https://habr.com/ru/post/hi472758/


All Articles