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

тЖТ
рдЧрд┐рдЯрд╣рдмрд╕рднреА рд╡рд╣ рд╣реИ:
- рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
- рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдФрд░ рд╕реНрд░реЛрдд рдЯреБрдХрдбрд╝реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рддреНрд░реБрдЯрд┐ рд╣реБрдИ (рд╕реНрд░реЛрдд рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ)ред
рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдЬреЛрдбрд╝рдирд╛
рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХреЗ рд╕рд╛рде рдмрдЧ рдмрдирд╛рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ:
рдЬрдм рддреНрд░реБрдЯрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рдкреЗрдЯрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рд╕рдорд╛рди рд░рд╣реЗрдЧрд╛ рдФрд░ рдУрд╡рд░рд░рд╛рдЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдпрджрд┐ рдпрд╣ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рд╣реИ рдпрд╛ рдирд╣реАрдВред
рдХреЛрдб рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
func decodeFile(path string, data interface{}) error { b, err := ioutil.ReadFile(path) if err != nil { return tracerr.Wrap(err) } err = json.Unmarshal(b, data)
рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдбрд┐рд╕реНрдкреНрд▓реЗ
100500 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рдж
if err != nil { return err }
main()
рдпрд╛ (рдЬрд╣рд╛рдВ рдпрд╣ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддрд╛ рд╣реИ) рдореЗрдВ рдЕрдкрдиреА рдорд╛рддреГрднреВрдорд┐ рдкрд░ рд▓реМрдЯрддрд╛ рд╣реИ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдпрд╛ рдЧрд┐рд░рд╡реА рд░рдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред
рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ: рд╕рднреА рдкреНрд░рд┐рдВрдЯ (рдкреНрд░рд┐рдВрдЯ рдкрд╛рда) рдпрд╛ рд╕реНрдкреНрд░рд┐рдВрдЯ (рдкрд╛рда рдкрд╛рда) рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ:
1) рдкреНрд░рджрд░реНрд╢рди рддреНрд░реБрдЯрд┐ рдкрд╛рда рдФрд░ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕:
tracerr.Print(err)
2) рддреНрд░реБрдЯрд┐ рдкрд╛рда, рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдФрд░ рд╕реНрд░реЛрдд рдЯреБрдХрдбрд╝рд╛ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 6 рд▓рд╛рдЗрдиреЗрдВ) рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ:
tracerr.PrintSource(err)
3) рд╡рд╣реА, рд▓реЗрдХрд┐рди рд░рдВрдЧ рдореЗрдВ, рдЖрдорддреМрд░ рдкрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг:
tracerr.PrintSourceColor(err)
4) рдЖрдк рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдб рдХреА рдХрд┐рддрдиреА рд▓рд╛рдЗрдиреЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреА рд╣реИрдВ:
tracerr.PrintSource(err, 9) tracerr.PrintSourceColor(err, 9)
5) рдпрд╛ 2 рд╡реИрдХрд▓реНрдкрд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВ, рдХрд┐рддрдиреЗ рдкрд╣рд▓реЗ рдФрд░ рдХрд┐рддрдиреЗ рдмрд╛рдж рд▓рд╛рдЗрди рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде:
tracerr.PrintSource(err, 5, 2) tracerr.PrintSourceColor(err, 5, 2)
рд╕рд╡рд╛рд▓
рдореБрдЭреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреВрдЫреЗ рдЧрдП рдХреБрдЫ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реВрдВред
рдкреНрд░рд╢реНрди: рдХреНрдпрд╛ рдпрд╣ рдХреЗрд╡рд▓ рдбрд┐рдмрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ? рдбрд┐рдмрдЧрд░ рд╣реИредрдП: рдпрд╣ рди рдХреЗрд╡рд▓ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ, рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд▓реЙрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд╕рд╛рде, рдареЗрд╕ рдкрд░, рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ, рдпрд╣ рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реБрдП рддрдм рд╕рд░рд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдкреНрд░рд╢реНрди: рдПрдХ рд╕реБрдкрд░ рдкреИрдХреЗрдЬ pkg / рддреНрд░реБрдЯрд┐рдпрд╛рдБ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддреЗ?рдПрдХ: рд╣рд╛рдБ, рдореИрдВрдиреЗ рдЦреБрдж рдЗрд╕рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрди рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдореБрдЭреЗ рдкрд╕рдВрдж рдирд╣реАрдВ рдЖрдпрд╛:
1) рд╕реНрд░реЛрдд рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред
2) рдЬрдм рддреНрд░реБрдЯрд┐ рдлрд┐рд░ рд╕реЗ рд▓рдкреЗрдЯреА рдЬрд╛рддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реНрддрд░ рдЕрдзрд┐рдХ), рддреЛ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХреЛ рдХрдо рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
3) рдкреНрд░рддреНрдпреЗрдХ рдореЛрдбрд╝ рдХреЗ рд╕рд╛рде рдЕрддрд┐рд░рд┐рдХреНрдд рддреНрд░реБрдЯрд┐ рдкрд╛рда рднреЗрдЬрдирд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИ, рдЬреЛ рдореБрдЭреЗ рдХреЛрдб рд▓рд┐рдЦрддреЗ / рдкрдврд╝рддреЗ рд╕рдордп рдХреБрдЫ рдУрд╡рд░рд╣реЗрдб рд▓рдЧрддрд╛ рд╣реИред
рдкреНрд░рд╢реНрди: рдЬрд╛рдиреЗ рдореЗрдВ, рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЖрдк рдРрд╕рд╛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗредA: рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ, Go рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИрдВред рдпрджрд┐ рдЖрдк рд╣рдЬрд╛рд░реЛрдВ рдХреЛ
if err != nil { return err }
рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ
if err != nil { return err }
рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ
if err != nil { return err }
- рдпрд╣ рдЖрдкрдХреА рдкрд╕рдВрдж рд╣реИ, рдмрд┐рд▓реНрдХреБрд▓ рдЖрдк рдХреЗрд╡рд▓ рдЙрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЕрдкрд╡рд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВред
рдкреНрд░рд╢реНрди: рд╕реНрдЯреНрд░реЗрдЪрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрд░рд┐ рдЬреЛрдбрд╝рддрд╛ рд╣реИредрдП: рд╣рд╛рдБ, рдпрд╣ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдЙрди рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ рдЬрд╣рд╛рдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкреИрджрд╛ рд╣реЛрддреА рд╣реИрдВ, рдмрд╕ рд╡рд╣рд╛рдБ рдПрдХ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдирд╣реАрдВ рдЬреЛрдбрд╝реЗрдВ рдпрджрд┐ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ (рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдУрд╡рд░рд╣реЗрдб рдирдЧрдгреНрдп рд╣реИ)ред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреИрдХреЗрдЬ рдЖрдкрдХреЗ рдЧреЛрд▓реНрдл рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдЬреАрд╡рди рдХреЛ рдереЛрдбрд╝рд╛ рдЖрд╕рд╛рди рдмрдирд╛ рджреЗрдЧрд╛, рдореБрдЭреЗ рдХрд┐рд╕реА рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЦреБрд╢реА рд╣реЛрдЧреА, рдзрдиреНрдпрд╡рд╛рджред