{"id":1246,"date":"2025-08-09T10:01:07","date_gmt":"2025-08-09T07:01:07","guid":{"rendered":"https:\/\/gerdlezhev.ru\/?p=1246"},"modified":"2025-05-19T10:02:40","modified_gmt":"2025-05-19T07:02:40","slug":"%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d0%b5-%d1%80%d1%83%d0%ba%d0%be%d0%b2%d0%be%d0%b4%d1%81%d1%82%d0%b2%d0%be-%d0%bf%d0%be-%d0%b8%d0%b7%d1%83%d1%87%d0%b5%d0%bd%d0%b8%d1%8e-%d1%8f%d0%b7%d1%8b%d0%ba%d0%b0-go","status":"publish","type":"post","link":"https:\/\/gerdlezhev.ru\/?p=1246","title":{"rendered":"\u041f\u043e\u043b\u043d\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044e \u044f\u0437\u044b\u043a\u0430 Go \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0437\u0430\u043c\u0435\u043d\u044f\u044e\u0449\u0438\u0445 Excel"},"content":{"rendered":"\n<p>\u0412 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u043c\u0438\u0440\u0435, \u0433\u0434\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0432\u0441\u0451 \u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u044b\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u043c, \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0438\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a Excel, \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441 \u0440\u0430\u0441\u0442\u0443\u0449\u0438\u043c\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441 \u043e\u0434\u043d\u0438\u043c\u0438 \u0438 \u0442\u0435\u043c\u0438 \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u043c\u0441\u044f \u0432 \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0438\u0440 \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Go (Golang) \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u0439 Excel, \u043d\u043e \u0438 \u043f\u0440\u0435\u0432\u0437\u043e\u0439\u0434\u0451\u0442 \u0435\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"go------excel\">\u041f\u043e\u0447\u0435\u043c\u0443 Go &#8212; \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u043c\u0435\u043d\u0430 \u0434\u043b\u044f Excel \u0432 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435<\/h2>\n\n\n\n<p>Go (\u0438\u043b\u0438 Golang) \u2014 \u044f\u0437\u044b\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0435\u0439 Google \u0432 2009 \u0433\u043e\u0434\u0443. \u042d\u0442\u043e \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u044f\u0437\u044b\u043a \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043b \u0432 \u0441\u0435\u0431\u0435 \u043b\u0443\u0447\u0448\u0438\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f: \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0443 Python, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c C++ \u0438 \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0441\u0442\u044c Java. \u042f\u0437\u044b\u043a Go \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440 \u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0435\u0439 \u0432 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445.<\/p>\n\n\n\n<p>\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Excel, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0439 \u043f\u0440\u043e\u043f\u0440\u0438\u0435\u0442\u0430\u0440\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u043e\u0439 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 Go \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u041e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0441\u043e\u0442\u0435\u043d \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/li>\n\n\n\n<li>\u0413\u0438\u0431\u043a\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438<\/li>\n\n\n\n<li>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445<\/li>\n\n\n\n<li>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438<\/li>\n\n\n\n<li>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0431\u0438\u0437\u043d\u0435\u0441-\u0437\u0430\u0434\u0430\u0447\u0438<\/li>\n\n\n\n<li>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438<\/li>\n<\/ul>\n\n\n\n<p>\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0432\u0430\u0448\u0443 \u0440\u043e\u043b\u044c \u0433\u043b\u0430\u0432\u043d\u043e\u0433\u043e \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0430 \u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u043c \u043a \u0418\u0422 \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Excel \u0438 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u043c\u0438, \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044e Go \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u0432 \u0432\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0438.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 Go \u0434\u043b\u044f \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432 \u0438 \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u043e\u0432<\/h2>\n\n\n\n<p>\u0414\u043b\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432 \u0438 \u0431\u0443\u0445\u0433\u0430\u043b\u0442\u0435\u0440\u0438\u0438 \u044f\u0437\u044b\u043a Go \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439<\/strong> \u2014 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u0440\u0430\u0437\u044b \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0432 Excel, \u0447\u0442\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0430\u0436\u043d\u043e \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043e\u0442\u0447\u0435\u0442\u0430\u043c\u0438.<\/li>\n\n\n\n<li><strong>\u041d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u044c \u0438 \u0442\u0438\u043f\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c<\/strong> \u2014 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f Go \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043e\u0448\u0438\u0431\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u0440\u0438 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u0440\u0430\u0441\u0447\u0435\u0442\u0430\u0445.<\/li>\n\n\n\n<li><strong>\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/strong> \u2014 Go \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0434\u043b\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043d\u043e\u0433\u043e\u044f\u0434\u0435\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445.<\/li>\n\n\n\n<li><strong>\u041f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430<\/strong> \u2014 \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u044f\u0437\u044b\u043a\u0430, \u0435\u0433\u043e \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442 \u0438 \u043b\u043e\u0433\u0438\u0447\u0435\u043d, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043e\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u0432 \u0432 Excel \u043a \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e.<\/li>\n\n\n\n<li><strong>\u0411\u043e\u0433\u0430\u0442\u0430\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430<\/strong> \u2014 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u0435\u0442\u044c\u044e, \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439, \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"go\">\u041f\u0435\u0440\u0432\u044b\u0435 \u0448\u0430\u0433\u0438 \u0432 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0438 Go: \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f<\/h2>\n\n\n\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u0432 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u044f\u0437\u044b\u043a\u0430 \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0435\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 Go \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0451\u043d \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 Go<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u0421\u043a\u0430\u0447\u0430\u0439\u0442\u0435 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432 Go<\/strong> \u0441 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430 golang.org. \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0432\u0435\u0440\u0441\u0438\u044e, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0432\u0430\u0448\u0435\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 (Windows, macOS \u0438\u043b\u0438 Linux).<\/li>\n\n\n\n<li><strong>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0449\u0438\u043a<\/strong> \u0438 \u0441\u043b\u0435\u0434\u0443\u0439\u0442\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e Go \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0430\u043f\u043a\u0443 <code>C:\\Go<\/code> \u0432 Windows \u0438\u043b\u0438 <code>\/usr\/local\/go<\/code> \u0432 macOS \u0438 Linux.<\/li>\n\n\n\n<li><strong>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f<\/strong>:\n<ul class=\"wp-block-list\">\n<li><code>GOPATH<\/code> &#8212; \u043a\u0430\u0442\u0430\u043b\u043e\u0433, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0432\u0430\u0448\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u0430\u0442\u0430\u043b\u043e\u0433 <code>go<\/code> \u0432 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u043f\u0430\u043f\u043a\u0435.<\/li>\n\n\n\n<li>\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 <code>%GOPATH%\\bin<\/code> \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e PATH \u0434\u043b\u044f Windows \u0438\u043b\u0438 <code>$GOPATH\/bin<\/code> \u0434\u043b\u044f Unix-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443<\/strong>, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0438\u043b\u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435: \u0442\u0435\u043a\u0441\u0442<code>go version<\/code> \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0432\u0435\u0440\u0441\u0438\u0438 Go, \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0443\u0441\u043f\u0435\u0448\u043d\u0443\u044e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">\u0412\u044b\u0431\u043e\u0440 IDE \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Go<\/h2>\n\n\n\n<p>\u0425\u043e\u0442\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u043d\u0430 Go \u043c\u043e\u0436\u043d\u043e \u0432 \u043b\u044e\u0431\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 (IDE) \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u041a\u043e\u0434 Visual Studio<\/h2>\n\n\n\n<p>\u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u0432\u044b\u0431\u043e\u0440 \u0441\u0440\u0435\u0434\u0438 Go-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 Visual Studio Code<\/li>\n\n\n\n<li>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 Go \u0447\u0435\u0440\u0435\u0437 \u043c\u0430\u0440\u043a\u0435\u0442\u043f\u043b\u0435\u0439\u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439<\/li>\n\n\n\n<li>\u041f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 Go-\u0444\u0430\u0439\u043b\u0430, VS Code \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">GoLand \u043e\u0442 JetBrains<\/h2>\n\n\n\n<p>\u041f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f IDE, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0430\u044f \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Go:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0433\u043b\u0443\u0431\u043e\u043a\u0443\u044e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0441 \u044f\u0437\u044b\u043a\u043e\u043c<\/li>\n\n\n\n<li>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u043a\u043e\u0434\u0430<\/li>\n\n\n\n<li>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043e\u0442\u043b\u0430\u0434\u043a\u0438<\/li>\n\n\n\n<li>\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0439<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u041b\u0438\u0442\u0435\u0439\u0434<\/h2>\n\n\n\n<p>\u041b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u0430\u044f IDE, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u0430\u044f \u0434\u043b\u044f Go:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u041f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043c\u0430\u043b\u043e\u043c\u043e\u0449\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432<\/li>\n\n\n\n<li>\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Go<\/li>\n\n\n\n<li>\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<\/li>\n<\/ul>\n\n\n\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f Visual Studio Code \u0438\u0437-\u0437\u0430 \u0435\u0433\u043e \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0441\u0442\u0438, \u0431\u043e\u0433\u0430\u0442\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u0438 \u043e\u0431\u0448\u0438\u0440\u043d\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"go\">\u041e\u0441\u043d\u043e\u0432\u044b \u044f\u0437\u044b\u043a\u0430 Go \u0434\u043b\u044f \u0444\u0438\u043d\u0430\u043d\u0441\u0438\u0441\u0442\u0430: \u043e\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043a \u0441\u043b\u043e\u0436\u043d\u043e\u043c\u0443<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0438 \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438<\/h2>\n\n\n\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u00ab\u041f\u0440\u0438\u0432\u0435\u0442, \u043c\u0438\u0440!\u00bb \u043d\u0430 Go:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0412\u043f\u0435\u0440\u0435\u0434<code>package main\n\nimport \"fmt\"\n\nfunc main() {\n    fmt.Println(\"Hello, World! \u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u0432 \u043c\u0438\u0440 Go!\")\n}\n<\/code><\/pre>\n\n\n\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>package main<\/code> &#8212; \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/li>\n\n\n\n<li><code>import \"fmt\"<\/code> &#8212; \u0438\u043c\u043f\u043e\u0440\u0442 \u043f\u0430\u043a\u0435\u0442\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430<\/li>\n\n\n\n<li><code>func main()<\/code> &#8212; \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/li>\n\n\n\n<li><code>fmt.Println()<\/code> &#8212; \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n\n\n\n<p>\u0412 Go \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f, \u0447\u0442\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0412\u043f\u0435\u0440\u0435\u0434<code>var balance float64 = 10000.50      <em>\/\/ \u044f\u0432\u043d\u043e\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430<\/em>\nincome := 5000.75                   <em>\/\/ \u0442\u0438\u043f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438<\/em>\nconst taxRate = 0.13                <em>\/\/ \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430<\/em>\n\n<em>\/\/ \u041c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445<\/em>\nvar (\n    expenses float64 = 3000.25\n    profit   float64\n)\n\nprofit = income - expenses - (income * taxRate)\nfmt.Printf(\"\u0427\u0438\u0441\u0442\u0430\u044f \u043f\u0440\u0438\u0431\u044b\u043b\u044c: %.2f\\n\", profit)\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u0411\u0430\u0437\u043e\u0432\u044b\u0435 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Go<\/h2>\n\n\n\n<p>Go \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0445\u043e\u0440\u043e\u0448\u043e \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0442\u0435\u043c, \u043a\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441 \u0444\u043e\u0440\u043c\u0443\u043b\u0430\u043c\u0438 Excel:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u0427\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u0442\u0438\u043f\u044b<\/strong>:\n<ul class=\"wp-block-list\">\n<li><code>int<\/code>, <code>int8<\/code>, <code>int16<\/code>, <code>int32<\/code>, <code>int64<\/code> &#8212; \u0446\u0435\u043b\u044b\u0435 \u0447\u0438\u0441\u043b\u0430<\/li>\n\n\n\n<li><code>float32<\/code>, <code>float64<\/code> &#8212; \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0442\u043e\u0447\u043a\u043e\u0439<\/li>\n\n\n\n<li><code>complex64<\/code>, <code>complex128<\/code> &#8212; \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u0421\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0439 \u0442\u0438\u043f<\/strong>:\n<ul class=\"wp-block-list\">\n<li><code>string<\/code> &#8212; \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0442\u0438\u043f<\/strong>:\n<ul class=\"wp-block-list\">\n<li><code>bool<\/code> &#8212; \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f true \u0438\u043b\u0438 false<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u0421\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u0435 \u0442\u0438\u043f\u044b<\/strong>:\n<ul class=\"wp-block-list\">\n<li><code>array<\/code> &#8212; \u043c\u0430\u0441\u0441\u0438\u0432 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b<\/li>\n\n\n\n<li><code>slice<\/code> &#8212; \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0430\u0441\u0441\u0438\u0432<\/li>\n\n\n\n<li><code>map<\/code> &#8212; \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 (\u043a\u043b\u044e\u0447-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435)<\/li>\n\n\n\n<li><code>struct<\/code> &#8212; \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u043b\u044f \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u0423\u0441\u043b\u043e\u0432\u043d\u044b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0438 \u0446\u0438\u043a\u043b\u044b<\/h2>\n\n\n\n<p>Go \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0412\u043f\u0435\u0440\u0435\u0434<code><em>\/\/ \u0423\u0441\u043b\u043e\u0432\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 if-else<\/em>\nif balance &lt; 0 {\n    fmt.Println(\"\u0411\u0430\u043b\u0430\u043d\u0441 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439!\")\n} else if balance == 0 {\n    fmt.Println(\"\u0411\u0430\u043b\u0430\u043d\u0441 \u043d\u0443\u043b\u0435\u0432\u043e\u0439\")\n} else {\n    fmt.Println(\"\u0411\u0430\u043b\u0430\u043d\u0441 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439\")\n}\n\n<em>\/\/ \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 switch<\/em>\nswitch paymentMethod {\ncase \"\u041d\u0430\u043b\u0438\u0447\u043d\u044b\u0435\":\n    fmt.Println(\"\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043d\u0430\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u0442\u0435\u0436\u0430\")\ncase \"\u041a\u0430\u0440\u0442\u0430\":\n    fmt.Println(\"\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u043b\u0430\u0442\u0435\u0436\u0430 \u043a\u0430\u0440\u0442\u043e\u0439\")\ndefault:\n    fmt.Println(\"\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u043f\u043b\u0430\u0442\u044b\")\n}\n\n<em>\/\/ \u0426\u0438\u043a\u043b for (\u0430\u043d\u0430\u043b\u043e\u0433 \u0432\u0441\u0435\u0445 \u0432\u0438\u0434\u043e\u0432 \u0446\u0438\u043a\u043b\u043e\u0432)<\/em>\nfor i := 0; i &lt; 10; i++ {\n    fmt.Println(\"\u0418\u0442\u0435\u0440\u0430\u0446\u0438\u044f\", i)\n}\n\n<em>\/\/ \u0411\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c \u0432\u044b\u0445\u043e\u0434\u0430<\/em>\nsum := 0\nfor {\n    sum++\n    if sum &gt; 100 {\n        break\n    }\n}\n\n<em>\/\/ \u0426\u0438\u043a\u043b \u043f\u043e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 (\u0430\u043d\u0430\u043b\u043e\u0433 for-each)<\/em>\nexpenses := []float64{1200.50, 750.25, 945.00, 1500.75}\ntotal := 0.0\nfor _, expense := range expenses {\n    total += expense\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n\n\n\n<p>\u0414\u043b\u044f \u0444\u0438\u043d\u0430\u043d\u0441\u0438\u0441\u0442\u0430 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432\u0430\u0436\u043d\u043e \u0443\u043c\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 Excel \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u0432\u0438\u0434\u0435 \u0442\u0430\u0431\u043b\u0438\u0446.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u041c\u0430\u0441\u0441\u0438\u0432\u044b \u0438 \u0441\u0440\u0435\u0437\u044b<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0412\u043f\u0435\u0440\u0435\u0434<code><em>\/\/ \u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0434\u043b\u0438\u043d\u044b<\/em>\nvar quarter [3]float64 = [3]float64{10200.50, 12500.75, 9800.25}\n\n<em>\/\/ \u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0440\u0435\u0437\u0430 (\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430)<\/em>\nmonthlySales := []float64{3200.50, 3500.25, 3500.00, 4200.50, 4100.25, 4200.00}\n\n<em>\/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432 \u0441\u0440\u0435\u0437<\/em>\nmonthlySales = append(monthlySales, 4500.75)\n\n<em>\/\/ \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/em>\ntotalSales := 0.0\nfor _, sale := range monthlySales {\n    totalSales += sale\n}\nfmt.Printf(\"\u041e\u0431\u0449\u0438\u0439 \u043e\u0431\u044a\u0435\u043c \u043f\u0440\u043e\u0434\u0430\u0436: %.2f\\n\", totalSales)\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u041a\u0430\u0440\u0442\u044b (maps)<\/h2>\n\n\n\n<p>\u041a\u0430\u0440\u0442\u044b \u0432 Go \u043f\u043e\u0434\u043e\u0431\u043d\u044b \u0441\u043b\u043e\u0432\u0430\u0440\u044f\u043c \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u0438 \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u00ab\u043a\u043b\u044e\u0447-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u00bb, \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u0440\u0430\u0441\u0447\u0451\u0442\u043e\u0432:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0412\u043f\u0435\u0440\u0435\u0434<code><em>\/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u044b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0431\u0430\u043b\u0430\u043d\u0441\u043e\u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432<\/em>\nclientBalances := make(map[string]float64)\n\n<em>\/\/ \u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u043c\u0438<\/em>\nclientBalances[\"\u0418\u0432\u0430\u043d\u043e\u0432\"] = 15000.25\nclientBalances[\"\u041f\u0435\u0442\u0440\u043e\u0432\"] = 7800.50\nclientBalances[\"\u0421\u0438\u0434\u043e\u0440\u043e\u0432\"] = 23500.75\n\n<em>\/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0430<\/em>\nbalance, exists := clientBalances[\"\u041a\u0443\u0437\u043d\u0435\u0446\u043e\u0432\"]\nif !exists {\n    fmt.Println(\"\u041a\u043b\u0438\u0435\u043d\u0442 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\")\n}\n\n<em>\/\/ \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430<\/em>\ndelete(clientBalances, \"\u041f\u0435\u0442\u0440\u043e\u0432\")\n\n<em>\/\/ \u041f\u0435\u0440\u0435\u0431\u043e\u0440 \u0432\u0441\u0435\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432<\/em>\nfor client, balance := range clientBalances {\n    fmt.Printf(\"\u041a\u043b\u0438\u0435\u043d\u0442: %s, \u0431\u0430\u043b\u0430\u043d\u0441: %.2f\\n\", client, balance)\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438 \u043c\u0435\u0442\u043e\u0434\u044b<\/h2>\n\n\n\n<p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0432 Go \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u0432 \u0435\u0434\u0438\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0435\u0434\u0438\u043d\u0438\u0446\u0443:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0412\u043f\u0435\u0440\u0435\u0434<code><em>\/\/ \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u043b\u044f \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438<\/em>\ntype Transaction struct {\n    ID        string\n    Amount    float64\n    Date      string\n    Category  string\n    IsExpense bool\n}\n\n<em>\/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0439 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438<\/em>\npayment := Transaction{\n    ID:        \"TR001\",\n    Amount:    1250.50,\n    Date:      \"2025-05-15\",\n    Category:  \"\u0410\u0440\u0435\u043d\u0434\u0430\",\n    IsExpense: true,\n}\n\n<em>\/\/ \u041c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b Transaction<\/em>\nfunc (t Transaction) Description() string {\n    transType := \"\u0434\u043e\u0445\u043e\u0434\"\n    if t.IsExpense {\n        transType = \"\u0440\u0430\u0441\u0445\u043e\u0434\"\n    }\n    return fmt.Sprintf(\"\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f %s: %s \u043d\u0430 \u0441\u0443\u043c\u043c\u0443 %.2f \u043e\u0442 %s\", \n                       t.ID, transType, t.Amount, t.Date)\n}\n\n<em>\/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u0430<\/em>\nfmt.Println(payment.Description())\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"go\">\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0438 Go \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">\u0413\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h2>\n\n\n\n<p>\u041e\u0434\u043d\u0430 \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043c\u043e\u0449\u043d\u044b\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 Go \u2014 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0433\u043e\u0440\u0443\u0442\u0438\u043d (goroutines). \u042d\u0442\u043e \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0412\u043f\u0435\u0440\u0435\u0434<code>func calculateDepartmentExpenses(department string, expenses []float64, resultChan chan float64) {\n    sum := 0.0\n    for _, expense := range expenses {\n        sum += expense\n        time.Sleep(10 * time.Millisecond) <em>\/\/ \u0418\u043c\u0438\u0442\u0430\u0446\u0438\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439<\/em>\n    }\n    fmt.Printf(\"\u041e\u0442\u0434\u0435\u043b %s: \u043e\u0431\u0449\u0438\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b %.2f\\n\", department, sum)\n    resultChan &lt;- sum\n}\n\nfunc main() {\n    departments := map[string][]float64{\n        \"\u0424\u0438\u043d\u0430\u043d\u0441\u044b\":  {12500.50, 8700.25, 9500.00},\n        \"\u041c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\": {7800.50, 6500.25, 8900.75},\n        \"\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430\": {15500.50, 16700.25, 14900.00},\n        \"\u041f\u0440\u043e\u0434\u0430\u0436\u0438\":   {11200.50, 13500.25, 10800.75},\n    }\n    \n    resultChan := make(chan float64, len(departments))\n    totalStart := time.Now()\n    \n    <em>\/\/ \u0417\u0430\u043f\u0443\u0441\u043a \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u0430<\/em>\n    for dept, expenses := range departments {\n        go calculateDepartmentExpenses(dept, expenses, resultChan)\n    }\n    \n    <em>\/\/ \u0421\u0431\u043e\u0440 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432<\/em>\n    totalExpenses := 0.0\n    for i := 0; i &lt; len(departments); i++ {\n        totalExpenses += &lt;-resultChan\n    }\n    \n    fmt.Printf(\"\u041e\u0431\u0449\u0438\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438: %.2f\\n\", totalExpenses)\n    fmt.Printf(\"\u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f: %v\\n\", time.Since(totalStart))\n}\n<\/code><\/pre>\n\n\n\n<p>\u0414\u043b\u044f \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0442\u0447\u0451\u0442\u043e\u0432 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0435\u0437 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0438 \u043f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u0438\u0437\u043c<\/h2>\n\n\n\n<p>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0432 Go \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u043d\u0430\u0431\u043e\u0440 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0442\u0438\u043f, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443. \u042d\u0442\u043e \u043c\u043e\u0449\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0433\u0438\u0431\u043a\u0438\u0445 \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0412\u043f\u0435\u0440\u0435\u0434<code><em>\/\/ \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432<\/em>\ntype FinancialDocument interface {\n    Calculate() float64\n    Validate() bool\n    Format() string\n}\n\n<em>\/\/ \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0441\u0447\u0435\u0442\u0430<\/em>\ntype Invoice struct {\n    Items     []Item\n    TaxRate   float64\n    ClientID  string\n    IssueDate string\n}\n\nfunc (i Invoice) Calculate() float64 {\n    total := 0.0\n    for _, item := range i.Items {\n        total += item.Price * float64(item.Quantity)\n    }\n    return total * (1 + i.TaxRate)\n}\n\nfunc (i Invoice) Validate() bool {\n    return len(i.Items) &gt; 0 &amp;&amp; i.ClientID != \"\"\n}\n\nfunc (i Invoice) Format() string {\n    return fmt.Sprintf(\"\u0421\u0447\u0435\u0442 \u0434\u043b\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 %s \u043e\u0442 %s \u043d\u0430 \u0441\u0443\u043c\u043c\u0443 %.2f\", \n                       i.ClientID, i.IssueDate, i.Calculate())\n}\n\n<em>\/\/ \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0440\u0430\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043e\u0440\u0434\u0435\u0440\u0430<\/em>\ntype ExpenseVoucher struct {\n    Amount      float64\n    Department  string\n    Description string\n    Date        string\n    Approved    bool\n}\n\nfunc (e ExpenseVoucher) Calculate() float64 {\n    return e.Amount\n}\n\nfunc (e ExpenseVoucher) Validate() bool {\n    return e.Amount &gt; 0 &amp;&amp; e.Department != \"\" &amp;&amp; e.Approved\n}\n\nfunc (e ExpenseVoucher) Format() string {\n    return fmt.Sprintf(\"\u0420\u0430\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043e\u0440\u0434\u0435\u0440 \u0434\u043b\u044f %s \u043e\u0442 %s \u043d\u0430 \u0441\u0443\u043c\u043c\u0443 %.2f\", \n                       e.Department, e.Date, e.Amount)\n}\n\n<em>\/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0430\u044f \u0441 \u043b\u044e\u0431\u044b\u043c \u0442\u0438\u043f\u043e\u043c, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<\/em>\nfunc ProcessDocument(doc FinancialDocument) {\n    if doc.Validate() {\n        fmt.Println(\"\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430:\", doc.Format())\n        fmt.Printf(\"\u0418\u0442\u043e\u0433\u043e\u0432\u0430\u044f \u0441\u0443\u043c\u043c\u0430: %.2f\\n\", doc.Calculate())\n    } else {\n        fmt.Println(\"\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u0435\u043d!\")\n    }\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n\n\n\n<p>\u0414\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u043a \u043d\u0438\u043c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445. Go \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0430\u043a\u0435\u0442 <code>database\/sql<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0421\u0423\u0411\u0414 \u0447\u0435\u0440\u0435\u0437 \u0435\u0434\u0438\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0412\u043f\u0435\u0440\u0435\u0434<code>package main\n\nimport (\n    \"database\/sql\"\n    \"fmt\"\n    \"log\"\n    \n    _ \"github.com\/go-sql-driver\/mysql\" <em>\/\/ \u0414\u0440\u0430\u0439\u0432\u0435\u0440 MySQL<\/em>\n)\n\ntype FinancialRecord struct {\n    ID          int\n    Description string\n    Amount      float64\n    RecordDate  string\n    Category    string\n}\n\nfunc main() {\n    <em>\/\/ \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445<\/em>\n    db, err := sql.Open(\"mysql\", \"user:password@tcp(127.0.0.1:3306)\/finances\")\n    if err != nil {\n        log.Fatal(\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0411\u0414:\", err)\n    }\n    defer db.Close()\n    \n    <em>\/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f<\/em>\n    err = db.Ping()\n    if err != nil {\n        log.Fatal(\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f:\", err)\n    }\n    \n    <em>\/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442<\/em>\n    _, err = db.Exec(`\n        CREATE TABLE IF NOT EXISTS financial_records (\n            id INT AUTO_INCREMENT PRIMARY KEY,\n            description VARCHAR(255) NOT NULL,\n            amount DECIMAL(10,2) NOT NULL,\n            record_date DATE NOT NULL,\n            category VARCHAR(100) NOT NULL\n        )\n    `)\n    if err != nil {\n        log.Fatal(\"\u041e\u0448\u0438\u0431\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b:\", err)\n    }\n    \n    <em>\/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438<\/em>\n    result, err := db.Exec(\n        \"INSERT INTO financial_records (description, amount, record_date, category) VALUES (?, ?, ?, ?)\",\n        \"\u041e\u043f\u043b\u0430\u0442\u0430 \u0430\u0440\u0435\u043d\u0434\u044b \u043e\u0444\u0438\u0441\u0430\", 45000.00, \"2025-05-01\", \"\u0420\u0430\u0441\u0445\u043e\u0434\u044b\"\n    )\n    if err != nil {\n        log.Fatal(\"\u041e\u0448\u0438\u0431\u043a\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438:\", err)\n    }\n    \n    id, _ := result.LastInsertId()\n    fmt.Printf(\"\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0441 ID: %d\\n\", id)\n    \n    <em>\/\/ \u0427\u0442\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0435\u0439<\/em>\n    rows, err := db.Query(\"SELECT * FROM financial_records WHERE category = ?\", \"\u0420\u0430\u0441\u0445\u043e\u0434\u044b\")\n    if err != nil {\n        log.Fatal(\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0445:\", err)\n    }\n    defer rows.Close()\n    \n    var records []FinancialRecord\n    \n    for rows.Next() {\n        var record FinancialRecord\n        err := rows.Scan(&amp;record.ID, &amp;record.Description, &amp;record.Amount, \n                         &amp;record.RecordDate, &amp;record.Category)\n        if err != nil {\n            log.Fatal(\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0442\u0440\u043e\u043a\u0438:\", err)\n        }\n        records = append(records, record)\n    }\n    \n    fmt.Println(\"\u041d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 '\u0420\u0430\u0441\u0445\u043e\u0434\u044b':\")\n    for _, record := range records {\n        fmt.Printf(\"%d: %s - %.2f (%s)\\n\", \n                  record.ID, record.Description, record.Amount, record.RecordDate)\n    }\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"go---excel\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 Go \u0434\u043b\u044f \u0437\u0430\u043c\u0435\u043d\u044b Excel<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/h2>\n\n\n\n<p>\u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u043c\u0435\u043d\u044b Excel, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u043f\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u0421\u0435\u0440\u0432\u0435\u0440\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c<\/strong> (Backend) &#8212; \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 Go, \u043a\u043e\u0442\u043e\u0440\u043e\u0435:\n<ul class=\"wp-block-list\">\n<li>\u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 HTTP-\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432<\/li>\n\n\n\n<li>\u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445<\/li>\n\n\n\n<li>\u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0443<\/li>\n\n\n\n<li>\u041e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c<\/strong> (Frontend) \u2014 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439:\n<ul class=\"wp-block-list\">\n<li>HTML \u0434\u043b\u044f \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446<\/li>\n\n\n\n<li>CSS \u0434\u043b\u044f \u0441\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/li>\n\n\n\n<li>JavaScript \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438<\/li>\n\n\n\n<li>\u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, Vue.js)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445<\/strong> &#8212; \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e HTTP-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043d\u0430 Go<\/h2>\n\n\n\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e HTTP-\u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0412\u043f\u0435\u0440\u0435\u0434<code>package main\n\nimport (\n    \"encoding\/json\"\n    \"fmt\"\n    \"log\"\n    \"net\/http\"\n)\n\n<em>\/\/ \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u043b\u044f \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/em>\ntype FinancialData struct {\n    ID       string  `json:\"id\"`\n    Category string  `json:\"category\"`\n    Amount   float64 `json:\"amount\"`\n    Date     string  `json:\"date\"`\n    Notes    string  `json:\"notes\"`\n}\n\n<em>\/\/ \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0432 \u0411\u0414<\/em>\nvar financialRecords = []FinancialData{\n    {\n        ID:       \"1\",\n        Category: \"\u0414\u043e\u0445\u043e\u0434\u044b\",\n        Amount:   150000.00,\n        Date:     \"2025-05-01\",\n        Notes:    \"\u041e\u043f\u043b\u0430\u0442\u0430 \u043f\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0443 \u2116123\",\n    },\n    {\n        ID:       \"2\",\n        Category: \"\u0420\u0430\u0441\u0445\u043e\u0434\u044b\",\n        Amount:   45000.00,\n        Date:     \"2025-05-02\",\n        Notes:    \"\u0410\u0440\u0435\u043d\u0434\u0430 \u043e\u0444\u0438\u0441\u0430\",\n    },\n}\n\nfunc main() {\n    <em>\/\/ \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 (HTML, CSS, JS)<\/em>\n    http.Handle(\"\/static\/\", http.StripPrefix(\"\/static\/\", http.FileServer(http.Dir(\".\/static\"))))\n    \n    <em>\/\/ \u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430<\/em>\n    http.HandleFunc(\"\/\", func(w http.ResponseWriter, r *http.Request) {\n        http.ServeFile(w, r, \".\/static\/index.html\")\n    })\n    \n    <em>\/\/ API \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/em>\n    http.HandleFunc(\"\/api\/data\", func(w http.ResponseWriter, r *http.Request) {\n        w.Header().Set(\"Content-Type\", \"application\/json\")\n        json.NewEncoder(w).Encode(financialRecords)\n    })\n    \n    <em>\/\/ API \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/em>\n    http.HandleFunc(\"\/api\/data\/add\", func(w http.ResponseWriter, r *http.Request) {\n        if r.Method != \"POST\" {\n            http.Error(w, \"\u041c\u0435\u0442\u043e\u0434 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f\", http.StatusMethodNotAllowed)\n            return\n        }\n        \n        var newRecord FinancialData\n        err := json.NewDecoder(r.Body).Decode(&amp;newRecord)\n        if err != nil {\n            http.Error(w, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0440\u0430\u0437\u0431\u043e\u0440\u0435 JSON\", http.StatusBadRequest)\n            return\n        }\n        \n        <em>\/\/ \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e ID (\u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u043b\u0430 \u0431\u044b \u0411\u0414)<\/em>\n        newRecord.ID = fmt.Sprintf(\"%d\", len(financialRecords) + 1)\n        \n        <em>\/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438<\/em>\n        financialRecords = append(financialRecords, newRecord)\n        \n        <em>\/\/ \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c<\/em>\n        w.Header().Set(\"Content-Type\", \"application\/json\")\n        json.NewEncoder(w).Encode(newRecord)\n    })\n    \n    <em>\/\/ \u0417\u0430\u043f\u0443\u0441\u043a \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043d\u0430 \u043f\u043e\u0440\u0442\u0443 8080<\/em>\n    fmt.Println(\"\u0421\u0435\u0440\u0432\u0435\u0440 \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u043d\u0430 http:\/\/localhost:8080\")\n    log.Fatal(http.ListenAndServe(\":8080\", nil))\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/h2>\n\n\n\n<p>\u0414\u043b\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 HTML-\u0444\u0430\u0439\u043b \u0441 JavaScript, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 \u043d\u0430\u0448\u0438\u043c API:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">xml<code>&lt;!DOCTYPE html&gt;\n&lt;html lang=\"ru\"&gt;\n&lt;head&gt;\n    &lt;meta charset=\"UTF-8\"&gt;\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n    &lt;title&gt;\u0424\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435&lt;\/title&gt;\n    &lt;style&gt;\n        body {\n            font-family: Arial, sans-serif;\n            margin: 0;\n            padding: 20px;\n        }\n        table {\n            width: 100%;\n            border-collapse: collapse;\n        }\n        th, td {\n            padding: 8px;\n            text-align: left;\n            border-bottom: 1px solid #ddd;\n        }\n        th {\n            background-color: #f2f2f2;\n        }\n        form {\n            margin-top: 20px;\n            padding: 20px;\n            background-color: #f9f9f9;\n            border: 1px solid #ddd;\n        }\n        .form-group {\n            margin-bottom: 15px;\n        }\n        label {\n            display: block;\n            margin-bottom: 5px;\n        }\n        input, select {\n            width: 100%;\n            padding: 8px;\n            box-sizing: border-box;\n        }\n        button {\n            padding: 10px 15px;\n            background-color: #4CAF50;\n            color: white;\n            border: none;\n            cursor: pointer;\n        }\n    &lt;\/style&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;h1&gt;\u0424\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435&lt;\/h1&gt;\n    \n    &lt;h2&gt;\u0424\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438&lt;\/h2&gt;\n    &lt;table id=\"financial-table\"&gt;\n        &lt;thead&gt;\n            &lt;tr&gt;\n                &lt;th&gt;ID&lt;\/th&gt;\n                &lt;th&gt;\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f&lt;\/th&gt;\n                &lt;th&gt;\u0421\u0443\u043c\u043c\u0430&lt;\/th&gt;\n                &lt;th&gt;\u0414\u0430\u0442\u0430&lt;\/th&gt;\n                &lt;th&gt;\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f&lt;\/th&gt;\n            &lt;\/tr&gt;\n        &lt;\/thead&gt;\n        &lt;tbody id=\"financial-data\"&gt;\n            <em>&lt;!-- \u0414\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0447\u0435\u0440\u0435\u0437 JavaScript --&gt;<\/em>\n        &lt;\/tbody&gt;\n    &lt;\/table&gt;\n    \n    &lt;form id=\"add-form\"&gt;\n        &lt;h2&gt;\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c&lt;\/h2&gt;\n        &lt;div class=\"form-group\"&gt;\n            &lt;label for=\"category\"&gt;\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f:&lt;\/label&gt;\n            &lt;select id=\"category\" required&gt;\n                &lt;option value=\"\u0414\u043e\u0445\u043e\u0434\u044b\"&gt;\u0414\u043e\u0445\u043e\u0434\u044b&lt;\/option&gt;\n                &lt;option value=\"\u0420\u0430\u0441\u0445\u043e\u0434\u044b\"&gt;\u0420\u0430\u0441\u0445\u043e\u0434\u044b&lt;\/option&gt;\n            &lt;\/select&gt;\n        &lt;\/div&gt;\n        &lt;div class=\"form-group\"&gt;\n            &lt;label for=\"amount\"&gt;\u0421\u0443\u043c\u043c\u0430:&lt;\/label&gt;\n            &lt;input type=\"number\" id=\"amount\" step=\"0.01\" required&gt;\n        &lt;\/div&gt;\n        &lt;div class=\"form-group\"&gt;\n            &lt;label for=\"date\"&gt;\u0414\u0430\u0442\u0430:&lt;\/label&gt;\n            &lt;input type=\"date\" id=\"date\" required&gt;\n        &lt;\/div&gt;\n        &lt;div class=\"form-group\"&gt;\n            &lt;label for=\"notes\"&gt;\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f:&lt;\/label&gt;\n            &lt;input type=\"text\" id=\"notes\"&gt;\n        &lt;\/div&gt;\n        &lt;button type=\"submit\"&gt;\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c&lt;\/button&gt;\n    &lt;\/form&gt;\n\n    &lt;script&gt;\n        \/\/ \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b\n        document.addEventListener('DOMContentLoaded', loadFinancialData);\n        \n        \/\/ \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0444\u043e\u0440\u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f\n        document.getElementById('add-form').addEventListener('submit', function(e) {\n            e.preventDefault();\n            \n            const newRecord = {\n                category: document.getElementById('category').value,\n                amount: parseFloat(document.getElementById('amount').value),\n                date: document.getElementById('date').value,\n                notes: document.getElementById('notes').value\n            };\n            \n            \/\/ \u041e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\n            fetch('\/api\/data\/add', {\n                method: 'POST',\n                headers: {\n                    'Content-Type': 'application\/json'\n                },\n                body: JSON.stringify(newRecord)\n            })\n            .then(response =&gt; response.json())\n            .then(data =&gt; {\n                \/\/ \u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443\n                loadFinancialData();\n                \/\/ \u041e\u0447\u0438\u0449\u0430\u0435\u043c \u0444\u043e\u0440\u043c\u0443\n                document.getElementById('add-form').reset();\n            })\n            .catch(error =&gt; console.error('\u041e\u0448\u0438\u0431\u043a\u0430:', error));\n        });\n        \n        \/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\n        function loadFinancialData() {\n            fetch('\/api\/data')\n                .then(response =&gt; response.json())\n                .then(data =&gt; {\n                    const tableBody = document.getElementById('financial-data');\n                    tableBody.innerHTML = '';\n                    \n                    data.forEach(record =&gt; {\n                        const row = document.createElement('tr');\n                        \n                        row.innerHTML = `\n                            &lt;td&gt;${record.id}&lt;\/td&gt;\n                            &lt;td&gt;${record.category}&lt;\/td&gt;\n                            &lt;td&gt;${record.amount.toFixed(2)} \u20bd&lt;\/td&gt;\n                            &lt;td&gt;${record.date}&lt;\/td&gt;\n                            &lt;td&gt;${record.notes}&lt;\/td&gt;\n                        `;\n                        \n                        tableBody.appendChild(row);\n                    });\n                })\n                .catch(error =&gt; console.error('\u041e\u0448\u0438\u0431\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445:', error));\n        }\n    &lt;\/script&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439<\/h2>\n\n\n\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0433\u043b\u043e \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u043e 100 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0447\u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0436\u043d\u044b\u0445 \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">go<code><em>\/\/ \u041f\u0443\u043b \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0441 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445<\/em>\nvar dbPool *sql.DB\n\nfunc initDatabase() {\n    var err error\n    dbPool, err = sql.Open(\"mysql\", \"user:password@tcp(127.0.0.1:3306)\/finances\")\n    if err != nil {\n        log.Fatal(\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0411\u0414:\", err)\n    }\n    \n    <em>\/\/ \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043f\u0443\u043b\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439<\/em>\n    dbPool.SetMaxOpenConns(50)     <em>\/\/ \u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c 50 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439<\/em>\n    dbPool.SetMaxIdleConns(10)     <em>\/\/ \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u043e 10 \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439<\/em>\n    dbPool.SetConnMaxLifetime(time.Hour) <em>\/\/ \u0412\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f - 1 \u0447\u0430\u0441<\/em>\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">2. \u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0412\u043f\u0435\u0440\u0435\u0434<code>package main\n\nimport (\n    \"sync\"\n    \"time\"\n)\n\n<em>\/\/ \u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u044d\u0448 \u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0436\u0438\u0437\u043d\u0438<\/em>\ntype Cache struct {\n    data map[string]cacheEntry\n    mu   sync.RWMutex\n}\n\ntype cacheEntry struct {\n    value     interface{}\n    expiresAt time.Time\n}\n\nfunc NewCache() *Cache {\n    cache := &amp;Cache{\n        data: make(map[string]cacheEntry),\n    }\n    \n    <em>\/\/ \u0417\u0430\u043f\u0443\u0441\u043a \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u0434\u043b\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439<\/em>\n    go func() {\n        for {\n            time.Sleep(5 * time.Minute)\n            cache.cleanExpired()\n        }\n    }()\n    \n    return cache\n}\n\nfunc (c *Cache) Set(key string, value interface{}, ttl time.Duration) {\n    c.mu.Lock()\n    defer c.mu.Unlock()\n    \n    c.data[key] = cacheEntry{\n        value:     value,\n        expiresAt: time.Now().Add(ttl),\n    }\n}\n\nfunc (c *Cache) Get(key string) (interface{}, bool) {\n    c.mu.RLock()\n    defer c.mu.RUnlock()\n    \n    entry, found := c.data[key]\n    if !found {\n        return nil, false\n    }\n    \n    <em>\/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0440\u043e\u043a\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f<\/em>\n    if time.Now().After(entry.expiresAt) {\n        return nil, false\n    }\n    \n    return entry.value, true\n}\n\nfunc (c *Cache) Delete(key string) {\n    c.mu.Lock()\n    defer c.mu.Unlock()\n    \n    delete(c.data, key)\n}\n\nfunc (c *Cache) cleanExpired() {\n    c.mu.Lock()\n    defer c.mu.Unlock()\n    \n    now := time.Now()\n    for key, entry := range c.data {\n        if now.After(entry.expiresAt) {\n            delete(c.data, key)\n        }\n    }\n}\n\n<em>\/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u044d\u0448\u0430 \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 HTTP<\/em>\nfunc getFinancialReportsHandler(w http.ResponseWriter, r *http.Request) {\n    reportType := r.URL.Query().Get(\"type\")\n    cacheKey := \"report_\" + reportType\n    \n    <em>\/\/ \u041f\u043e\u043f\u044b\u0442\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043a\u044d\u0448\u0430<\/em>\n    if cachedData, found := reportsCache.Get(cacheKey); found {\n        w.Header().Set(\"Content-Type\", \"application\/json\")\n        w.Write(cachedData.([]byte))\n        return\n    }\n    \n    <em>\/\/ \u0415\u0441\u043b\u0438 \u0432 \u043a\u044d\u0448\u0435 \u043d\u0435\u0442, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043e\u0442\u0447\u0435\u0442<\/em>\n    report, err := generateFinancialReport(reportType)\n    if err != nil {\n        http.Error(w, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043e\u0442\u0447\u0435\u0442\u0430\", http.StatusInternalServerError)\n        return\n    }\n    \n    <em>\/\/ \u0421\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0432 JSON<\/em>\n    jsonData, err := json.Marshal(report)\n    if err != nil {\n        http.Error(w, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438\", http.StatusInternalServerError)\n        return\n    }\n    \n    <em>\/\/ \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 \u043a\u044d\u0448 \u043d\u0430 15 \u043c\u0438\u043d\u0443\u0442<\/em>\n    reportsCache.Set(cacheKey, jsonData, 15*time.Minute)\n    \n    <em>\/\/ \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0443<\/em>\n    w.Header().Set(\"Content-Type\", \"application\/json\")\n    w.Write(jsonData)\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">3. \u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0438 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0412\u043f\u0435\u0440\u0435\u0434<code>package main\n\nimport (\n    \"crypto\/rand\"\n    \"crypto\/sha256\"\n    \"encoding\/base64\"\n    \"fmt\"\n    \"net\/http\"\n    \"time\"\n)\n\n<em>\/\/ \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f<\/em>\ntype User struct {\n    ID       int\n    Username string\n    Password string <em>\/\/ \u0425\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u0445\u044d\u0448\u0430<\/em>\n    Role     string\n}\n\n<em>\/\/ \u0421\u0435\u0441\u0441\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f<\/em>\ntype Session struct {\n    Token      string\n    UserID     int\n    Expiration time.Time\n}\n\n<em>\/\/ \u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0441\u0435\u0441\u0441\u0438\u0439<\/em>\nvar sessions = make(map[string]Session)\n\n<em>\/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0442\u043e\u043a\u0435\u043d\u0430 \u0441\u0435\u0441\u0441\u0438\u0438<\/em>\nfunc generateSessionToken() string {\n    b := make([]byte, 32)\n    rand.Read(b)\n    return base64.StdEncoding.EncodeToString(b)\n}\n\n<em>\/\/ \u0425\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u0440\u043e\u043b\u044f<\/em>\nfunc hashPassword(password string) string {\n    hash := sha256.Sum256([]byte(password))\n    return fmt.Sprintf(\"%x\", hash)\n}\n\n<em>\/\/ Middleware \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438<\/em>\nfunc requireAuth(next http.HandlerFunc) http.HandlerFunc {\n    return func(w http.ResponseWriter, r *http.Request) {\n        <em>\/\/ \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043a\u0443\u043a\u0438 \u0441 \u0442\u043e\u043a\u0435\u043d\u043e\u043c \u0441\u0435\u0441\u0441\u0438\u0438<\/em>\n        cookie, err := r.Cookie(\"session_token\")\n        if err != nil {\n            http.Redirect(w, r, \"\/login\", http.StatusSeeOther)\n            return\n        }\n        \n        sessionToken := cookie.Value\n        userSession, exists := sessions[sessionToken]\n        \n        <em>\/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0441\u0440\u043e\u043a\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u0435\u0441\u0441\u0438\u0438<\/em>\n        if !exists || userSession.Expiration.Before(time.Now()) {\n            http.Redirect(w, r, \"\/login\", http.StatusSeeOther)\n            return\n        }\n        \n        <em>\/\/ \u0415\u0441\u043b\u0438 \u0432\u0441\u0451 \u0445\u043e\u0440\u043e\u0448\u043e, \u043f\u0440\u043e\u0434\u043b\u0435\u0432\u0430\u0435\u043c \u0441\u0435\u0441\u0441\u0438\u044e<\/em>\n        userSession.Expiration = time.Now().Add(24 * time.Hour)\n        sessions[sessionToken] = userSession\n        \n        <em>\/\/ \u041f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443<\/em>\n        next(w, r)\n    }\n}\n\n<em>\/\/ \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043b\u043e\u0433\u0438\u043d\u0430<\/em>\nfunc loginHandler(w http.ResponseWriter, r *http.Request) {\n    if r.Method == \"GET\" {\n        http.ServeFile(w, r, \".\/static\/login.html\")\n        return\n    }\n    \n    <em>\/\/ \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 POST \u0437\u0430\u043f\u0440\u043e\u0441\u0430 (\u0444\u043e\u0440\u043c\u0430 \u043b\u043e\u0433\u0438\u043d\u0430)<\/em>\n    r.ParseForm()\n    username := r.FormValue(\"username\")\n    password := r.FormValue(\"password\")\n    \n    <em>\/\/ \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441 \u0411\u0414<\/em>\n    storedUser := getUserByUsername(username)\n    if storedUser == nil || hashPassword(password) != storedUser.Password {\n        http.Error(w, \"\u041d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c\", http.StatusUnauthorized)\n        return\n    }\n    \n    <em>\/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0439 \u0441\u0435\u0441\u0441\u0438\u0438<\/em>\n    sessionToken := generateSessionToken()\n    expirationTime := time.Now().Add(24 * time.Hour)\n    \n    sessions[sessionToken] = Session{\n        Token:      sessionToken,\n        UserID:     storedUser.ID,\n        Expiration: expirationTime,\n    }\n    \n    <em>\/\/ \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043a\u0443\u043a\u0438<\/em>\n    http.SetCookie(w, &amp;http.Cookie{\n        Name:    \"session_token\",\n        Value:   sessionToken,\n        Expires: expirationTime,\n        Path:    \"\/\",\n    })\n    \n    http.Redirect(w, r, \"\/\", http.StatusSeeOther)\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">4. \u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">go<code><em>\/\/ \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u043e\u0442\u0447\u0435\u0442\u043e\u0432<\/em>\nfunc generateReportHandler(w http.ResponseWriter, r *http.Request) {\n    reportType := r.URL.Query().Get(\"type\")\n    startDate := r.URL.Query().Get(\"start\")\n    endDate := r.URL.Query().Get(\"end\")\n    \n    <em>\/\/ \u041a\u0430\u043d\u0430\u043b\u044b \u0434\u043b\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0438 \u043e\u0448\u0438\u0431\u043e\u043a<\/em>\n    resultChan := make(chan map[string]interface{})\n    errorChan := make(chan error)\n    \n    <em>\/\/ \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043e\u0442\u0447\u0435\u0442\u0430 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0435<\/em>\n    go func() {\n        result, err := generateComplexReport(reportType, startDate, endDate)\n        if err != nil {\n            errorChan &lt;- err\n            return\n        }\n        resultChan &lt;- result\n    }()\n    \n    <em>\/\/ \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0442\u0430\u0439\u043c\u0430\u0443\u0442<\/em>\n    select {\n    case result := &lt;-resultChan:\n        <em>\/\/ \u0423\u0441\u043f\u0435\u0448\u043d\u043e\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430<\/em>\n        w.Header().Set(\"Content-Type\", \"application\/json\")\n        json.NewEncoder(w).Encode(result)\n    case err := &lt;-errorChan:\n        <em>\/\/ \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0448\u0438\u0431\u043a\u0438<\/em>\n        http.Error(w, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0442\u0447\u0435\u0442\u0430: \"+err.Error(), http.StatusInternalServerError)\n    case &lt;-time.After(30 * time.Second):\n        <em>\/\/ \u0422\u0430\u0439\u043c\u0430\u0443\u0442<\/em>\n        http.Error(w, \"\u041f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u043e \u0432\u0440\u0435\u043c\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0442\u0447\u0435\u0442\u0430\", http.StatusGatewayTimeout)\n    }\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"excel---go\">\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 Excel-\u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0432 Go<\/h2>\n\n\n\n<p>\u0414\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u0441 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 Excel-\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439, \u043d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0443\u043c\u0435\u0442\u044c \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 Excel. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 Excelize:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">go<code>package main\n\nimport (\n    \"fmt\"\n    \"log\"\n    \"strconv\"\n    \"time\"\n    \n    \"github.com\/xuri\/excelize\/v2\"\n)\n\n<em>\/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 Excel<\/em>\nfunc exportToExcel(data []FinancialData, filename string) error {\n    f := excelize.NewFile()\n    \n    <em>\/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u043b\u0438\u0441\u0442<\/em>\n    sheetName := \"\u0424\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435\"\n    f.SetSheetName(\"Sheet1\", sheetName)\n    \n    <em>\/\/ \u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438<\/em>\n    headers := []string{\"ID\", \"\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f\", \"\u0421\u0443\u043c\u043c\u0430\", \"\u0414\u0430\u0442\u0430\", \"\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u044f\"}\n    for i, header := range headers {\n        cellPos := string(rune('A'+i)) + \"1\"\n        f.SetCellValue(sheetName, cellPos, header)\n    }\n    \n    <em>\/\/ \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c \u0441\u0442\u0438\u043b\u044c \u043a \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u043c<\/em>\n    headerStyle, err := f.NewStyle(&amp;excelize.Style{\n        Font: &amp;excelize.Font{\n            Bold:   true,\n            Size:   12,\n            Color:  \"FFFFFF\",\n        },\n        Fill: excelize.Fill{\n            Type:    \"pattern\",\n            Pattern: 1,\n            Color:   []string{\"4472C4\"},\n        },\n        Alignment: &amp;excelize.Alignment{\n            Horizontal: \"center\",\n            Vertical:   \"center\",\n        },\n        Border: []excelize.Border{\n            {Type: \"top\", Color: \"CCCCCC\", Style: 1},\n            {Type: \"bottom\", Color: \"CCCCCC\", Style: 1},\n            {Type: \"left\", Color: \"CCCCCC\", Style: 1},\n            {Type: \"right\", Color: \"CCCCCC\", Style: 1},\n        },\n    })\n    if err != nil {\n        return err\n    }\n    f.SetCellStyle(sheetName, \"A1\", string(rune('A'+len(headers)-1))+\"1\", headerStyle)\n    \n    <em>\/\/ \u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u043c\u0438<\/em>\n    for i, record := range data {\n        row := i + 2 <em>\/\/ \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 2 \u0441\u0442\u0440\u043e\u043a\u0438 (\u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432)<\/em>\n        \n        f.SetCellValue(sheetName, fmt.Sprintf(\"A%d\", row), record.ID)\n        f.SetCellValue(sheetName, fmt.Sprintf(\"B%d\", row), record.Category)\n        f.SetCellValue(sheetName, fmt.Sprintf(\"C%d\", row), record.Amount)\n        f.SetCellValue(sheetName, fmt.Sprintf(\"D%d\", row), record.Date)\n        f.SetCellValue(sheetName, fmt.Sprintf(\"E%d\", row), record.Notes)\n    }\n    \n    <em>\/\/ \u0410\u0432\u0442\u043e\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0448\u0438\u0440\u0438\u043d\u044b \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432<\/em>\n    for i := range headers {\n        colName := string(rune('A' + i))\n        f.SetColWidth(sheetName, colName, colName, 15)\n    }\n    \n    <em>\/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0444\u043e\u0440\u043c\u0443\u043b\u0443 \u0434\u043b\u044f \u0441\u0443\u043c\u043c\u044b \u0432 \u043a\u043e\u043d\u0446\u0435<\/em>\n    lastRow := len(data) + 2\n    f.SetCellValue(sheetName, fmt.Sprintf(\"B%d\", lastRow), \"\u0418\u0422\u041e\u0413\u041e:\")\n    f.SetCellFormula(sheetName, fmt.Sprintf(\"C%d\", lastRow), fmt.Sprintf(\"SUM(C2:C%d)\", lastRow-1))\n    \n    <em>\/\/ \u0421\u0442\u0438\u043b\u044c \u0434\u043b\u044f \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438<\/em>\n    totalStyle, _ := f.NewStyle(&amp;excelize.Style{\n        Font: &amp;excelize.Font{\n            Bold:  true,\n            Size:  12,\n        },\n        Fill: excelize.Fill{\n            Type:    \"pattern\",\n            Pattern: 1,\n            Color:   []string{\"F2F2F2\"},\n        },\n    })\n    f.SetCellStyle(sheetName, fmt.Sprintf(\"B%d\", lastRow), fmt.Sprintf(\"C%d\", lastRow), totalStyle)\n    \n    <em>\/\/ \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0444\u0430\u0439\u043b<\/em>\n    if err := f.SaveAs(filename); err != nil {\n        return err\n    }\n    \n    return nil\n}\n\n<em>\/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 Excel<\/em>\nfunc importFromExcel(filename string) ([]FinancialData, error) {\n    f, err := excelize.OpenFile(filename)\n    if err != nil {\n        return nil, err\n    }\n    defer f.Close()\n    \n    <em>\/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0441\u0435 \u043b\u0438\u0441\u0442\u044b<\/em>\n    sheetList := f.GetSheetList()\n    if len(sheetList) == 0 {\n        return nil, fmt.Errorf(\"\u0444\u0430\u0439\u043b \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043b\u0438\u0441\u0442\u043e\u0432\")\n    }\n    \n    <em>\/\/ \u0411\u0435\u0440\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u043b\u0438\u0441\u0442<\/em>\n    sheetName := sheetList[0]\n    \n    <em>\/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438<\/em>\n    rows, err := f.GetRows(sheetName)\n    if err != nil {\n        return nil, err\n    }\n    \n    <em>\/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445<\/em>\n    if len(rows) &lt; 2 { <em>\/\/ \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0438 \u043e\u0434\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438<\/em>\n        return nil, fmt.Errorf(\"\u0444\u0430\u0439\u043b \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0445\")\n    }\n    \n    <em>\/\/ \u041f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a (\u043f\u0435\u0440\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443)<\/em>\n    var data []FinancialData\n    for i := 1; i &lt; len(rows); i++ {\n        row := rows[i]\n        \n        <em>\/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043b\u0438 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432<\/em>\n        if len(row) &lt; 5 {\n            continue\n        }\n        \n        <em>\/\/ \u041f\u0430\u0440\u0441\u0438\u043c \u0441\u0443\u043c\u043c\u0443<\/em>\n        amount, err := strconv.ParseFloat(row[2], 64)\n        if err != nil {\n            <em>\/\/ \u041f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0443, \u0435\u0441\u043b\u0438 \u0441\u0443\u043c\u043c\u0430 \u043d\u0435\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430<\/em>\n            continue\n        }\n        \n        <em>\/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c<\/em>\n        record := FinancialData{\n            ID:       row[0],\n            Category: row[1],\n            Amount:   amount,\n            Date:     row[3],\n            Notes:    row[4],\n        }\n        \n        data = append(data, record)\n    }\n    \n    return data, nil\n}\n\n<em>\/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430\/\u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0432 HTTP-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u0445<\/em>\nfunc exportExcelHandler(w http.ResponseWriter, r *http.Request) {\n    <em>\/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430<\/em>\n    data, err := getFinancialData()\n    if err != nil {\n        http.Error(w, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445\", http.StatusInternalServerError)\n        return\n    }\n    \n    <em>\/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430<\/em>\n    timestamp := time.Now().Format(\"20060102_150405\")\n    filename := fmt.Sprintf(\"financial_data_%s.xlsx\", timestamp)\n    filepath := \".\/temp\/\" + filename\n    \n    <em>\/\/ \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435<\/em>\n    err = exportToExcel(data, filepath)\n    if err != nil {\n        http.Error(w, \"\u041e\u0448\u0438\u0431\u043a\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0432 Excel\", http.StatusInternalServerError)\n        return\n    }\n    \n    <em>\/\/ \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0444\u0430\u0439\u043b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e<\/em>\n    w.Header().Set(\"Content-Disposition\", fmt.Sprintf(\"attachment; filename=%s\", filename))\n    w.Header().Set(\"Content-Type\", \"application\/vnd.openxmlformats-officedocument.spreadsheetml.sheet\")\n    http.ServeFile(w, r, filepath)\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"go\">\u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Go \u0432 \u0444\u0438\u043d\u0430\u043d\u0441\u0430\u0445<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">\u041f\u0440\u0438\u043c\u0435\u0440 1: \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0443\u0447\u0435\u0442\u0430 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u0438 \u0434\u043e\u0445\u043e\u0434\u043e\u0432<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0412\u043f\u0435\u0440\u0435\u0434<code><em>\/\/ \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440<\/em>\ntype Transaction struct {\n    ID          string    `json:\"id\"`\n    Amount      float64   `json:\"amount\"`\n    Type        string    `json:\"type\"` <em>\/\/ \"income\" \u0438\u043b\u0438 \"expense\"<\/em>\n    Category    string    `json:\"category\"`\n    Date        time.Time `json:\"date\"`\n    Description string    `json:\"description\"`\n}\n\ntype Account struct {\n    ID      string  `json:\"id\"`\n    Name    string  `json:\"name\"`\n    Balance float64 `json:\"balance\"`\n}\n\ntype Budget struct {\n    Category      string  `json:\"category\"`\n    PlannedAmount float64 `json:\"planned_amount\"`\n    ActualAmount  float64 `json:\"actual_amount\"`\n    Period        string  `json:\"period\"` <em>\/\/ \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \"2025-05\"<\/em>\n}\n\n<em>\/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0431\u0430\u043b\u0430\u043d\u0441\u0430 \u0441\u0447\u0435\u0442\u0430<\/em>\nfunc AddTransaction(tx *sql.Tx, transaction Transaction, accountID string) error {\n    <em>\/\/ \u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438<\/em>\n    _, err := tx.Exec(\n        \"INSERT INTO transactions (id, amount, type, category, date, description) VALUES (?, ?, ?, ?, ?, ?)\",\n        transaction.ID, transaction.Amount, transaction.Type, transaction.Category, \n        transaction.Date, transaction.Description,\n    )\n    if err != nil {\n        return err\n    }\n    \n    <em>\/\/ \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u0430\u043b\u0430\u043d\u0441\u0430 \u0441\u0447\u0435\u0442\u0430<\/em>\n    var balanceDelta float64\n    if transaction.Type == \"income\" {\n        balanceDelta = transaction.Amount\n    } else {\n        balanceDelta = -transaction.Amount\n    }\n    \n    _, err = tx.Exec(\n        \"UPDATE accounts SET balance = balance + ? WHERE id = ?\",\n        balanceDelta, accountID,\n    )\n    if err != nil {\n        return err\n    }\n    \n    <em>\/\/ \u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u043f\u043e \u0431\u044e\u0434\u0436\u0435\u0442\u0443<\/em>\n    period := transaction.Date.Format(\"2006-01\")\n    _, err = tx.Exec(\n        `UPDATE budgets \n         SET actual_amount = actual_amount + ? \n         WHERE category = ? AND period = ?`,\n        transaction.Amount, transaction.Category, period,\n    )\n    \n    return err\n}\n\n<em>\/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0434\u043a\u0438 \u043f\u043e \u0431\u044e\u0434\u0436\u0435\u0442\u0443<\/em>\nfunc GetBudgetSummary(period string) ([]Budget, error) {\n    rows, err := dbPool.Query(\n        \"SELECT category, planned_amount, actual_amount FROM budgets WHERE period = ?\",\n        period,\n    )\n    if err != nil {\n        return nil, err\n    }\n    defer rows.Close()\n    \n    var budgets []Budget\n    for rows.Next() {\n        var b Budget\n        if err := rows.Scan(&amp;b.Category, &amp;b.PlannedAmount, &amp;b.ActualAmount); err != nil {\n            return nil, err\n        }\n        b.Period = period\n        budgets = append(budgets, b)\n    }\n    \n    return budgets, nil\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u041f\u0440\u0438\u043c\u0435\u0440 2: \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u043e\u0442\u0447\u0435\u0442\u043e\u0432<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0412\u043f\u0435\u0440\u0435\u0434<code><em>\/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u0435\u0441\u044f\u0447\u043d\u043e\u0433\u043e \u043e\u0442\u0447\u0435\u0442\u0430<\/em>\nfunc GenerateMonthlyReport(year int, month int) (*MonthlyReport, error) {\n    <em>\/\/ \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0438\u043e\u0434\u0430<\/em>\n    startDate := time.Date(year, time.Month(month), 1, 0, 0, 0, 0, time.UTC)\n    endDate := startDate.AddDate(0, 1, 0).Add(-time.Second)\n    \n    <em>\/\/ \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u0434\u043e\u0445\u043e\u0434\u0430\u0445<\/em>\n    incomeRows, err := dbPool.Query(\n        `SELECT category, SUM(amount) \n         FROM transactions \n         WHERE type = 'income' AND date BETWEEN ? AND ? \n         GROUP BY category`,\n        startDate, endDate,\n    )\n    if err != nil {\n        return nil, err\n    }\n    defer incomeRows.Close()\n    \n    <em>\/\/ \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u043e\u0445\u043e\u0434\u043e\u0432<\/em>\n    incomeByCategory := make(map[string]float64)\n    var totalIncome float64\n    \n    for incomeRows.Next() {\n        var category string\n        var amount float64\n        if err := incomeRows.Scan(&amp;category, &amp;amount); err != nil {\n            return nil, err\n        }\n        incomeByCategory[category] = amount\n        totalIncome += amount\n    }\n    \n    <em>\/\/ \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u0440\u0430\u0441\u0445\u043e\u0434\u0430\u0445<\/em>\n    expenseRows, err := dbPool.Query(\n        `SELECT category, SUM(amount) \n         FROM transactions \n         WHERE type = 'expense' AND date BETWEEN ? AND ? \n         GROUP BY category`,\n        startDate, endDate,\n    )\n    if err != nil {\n        return nil, err\n    }\n    defer expenseRows.Close()\n    \n    <em>\/\/ \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432<\/em>\n    expenseByCategory := make(map[string]float64)\n    var totalExpense float64\n    \n    for expenseRows.Next() {\n        var category string\n        var amount float64\n        if err := expenseRows.Scan(&amp;category, &amp;amount); err != nil {\n            return nil, err\n        }\n        expenseByCategory[category] = amount\n        totalExpense += amount\n    }\n    \n    <em>\/\/ \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u0447\u0435\u0442\u0430<\/em>\n    report := &amp;MonthlyReport{\n        Period:           startDate.Format(\"2006-01\"),\n        TotalIncome:      totalIncome,\n        TotalExpense:     totalExpense,\n        NetProfit:        totalIncome - totalExpense,\n        IncomeByCategory: incomeByCategory,\n        ExpenseByCategory: expenseByCategory,\n        GeneratedAt:      time.Now(),\n    }\n    \n    return report, nil\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"go\">\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 Go \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u0437\u0430\u0434\u0430\u0447<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c\u0438 API<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0412\u043f\u0435\u0440\u0435\u0434<code>func getExchangeRates() (map[string]float64, error) {\n    client := &amp;http.Client{\n        Timeout: 10 * time.Second,\n    }\n    \n    <em>\/\/ \u0417\u0430\u043f\u0440\u043e\u0441 \u043a API \u043a\u0443\u0440\u0441\u043e\u0432 \u0432\u0430\u043b\u044e\u0442<\/em>\n    resp, err := client.Get(\"https:\/\/api.exchangerate-api.com\/v4\/latest\/RUB\")\n    if err != nil {\n        return nil, err\n    }\n    defer resp.Body.Close()\n    \n    var result struct {\n        Base  string             `json:\"base\"`\n        Date  string             `json:\"date\"`\n        Rates map[string]float64 `json:\"rates\"`\n    }\n    \n    if err := json.NewDecoder(resp.Body).Decode(&amp;result); err != nil {\n        return nil, err\n    }\n    \n    return result.Rates, nil\n}\n\n<em>\/\/ \u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f \u0441\u0443\u043c\u043c\u044b \u0438\u0437 \u043e\u0434\u043d\u043e\u0439 \u0432\u0430\u043b\u044e\u0442\u044b \u0432 \u0434\u0440\u0443\u0433\u0443\u044e<\/em>\nfunc convertCurrency(amount float64, from, to string) (float64, error) {\n    rates, err := getExchangeRates()\n    if err != nil {\n        return 0, err\n    }\n    \n    <em>\/\/ \u0415\u0441\u043b\u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0438\u0437 \u0440\u0443\u0431\u043b\u044f<\/em>\n    if from == \"RUB\" {\n        rate, ok := rates[to]\n        if !ok {\n            return 0, fmt.Errorf(\"\u043a\u0443\u0440\u0441 \u0432\u0430\u043b\u044e\u0442\u044b %s \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\", to)\n        }\n        return amount * rate, nil\n    }\n    \n    <em>\/\/ \u0415\u0441\u043b\u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0432 \u0440\u0443\u0431\u043b\u044c<\/em>\n    if to == \"RUB\" {\n        rate, ok := rates[from]\n        if !ok {\n            return 0, fmt.Errorf(\"\u043a\u0443\u0440\u0441 \u0432\u0430\u043b\u044e\u0442\u044b %s \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\", from)\n        }\n        return amount \/ rate, nil\n    }\n    \n    <em>\/\/ \u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0438\u043d\u043e\u0441\u0442\u0440\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u0430\u043b\u044e\u0442\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 \u0440\u0443\u0431\u043b\u044c<\/em>\n    fromRate, ok := rates[from]\n    if !ok {\n        return 0, fmt.Errorf(\"\u043a\u0443\u0440\u0441 \u0432\u0430\u043b\u044e\u0442\u044b %s \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\", from)\n    }\n    \n    toRate, ok := rates[to]\n    if !ok {\n        return 0, fmt.Errorf(\"\u043a\u0443\u0440\u0441 \u0432\u0430\u043b\u044e\u0442\u044b %s \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\", to)\n    }\n    \n    <em>\/\/ \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0432 \u0440\u0443\u0431\u043b\u0438, \u043f\u043e\u0442\u043e\u043c \u0432 \u0446\u0435\u043b\u0435\u0432\u0443\u044e \u0432\u0430\u043b\u044e\u0442\u0443<\/em>\n    rubAmount := amount \/ fromRate\n    return rubAmount * toRate, nil\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">\u0412\u043f\u0435\u0440\u0435\u0434<code>type ScheduledTransaction struct {\n    ID          string    `json:\"id\"`\n    Description string    `json:\"description\"`\n    Amount      float64   `json:\"amount\"`\n    Type        string    `json:\"type\"` <em>\/\/ \"income\" \u0438\u043b\u0438 \"expense\"<\/em>\n    Category    string    `json:\"category\"`\n    AccountID   string    `json:\"account_id\"`\n    Frequency   string    `json:\"frequency\"` <em>\/\/ \"daily\", \"weekly\", \"monthly\", \"yearly\"<\/em>\n    NextDate    time.Time `json:\"next_date\"`\n    IsActive    bool      `json:\"is_active\"`\n}\n\n<em>\/\/ \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430<\/em>\nfunc startTransactionScheduler() {\n    ticker := time.NewTicker(1 * time.Hour) <em>\/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043a\u0430\u0436\u0434\u044b\u0439 \u0447\u0430\u0441<\/em>\n    \n    go func() {\n        for {\n            &lt;-ticker.C\n            processScheduledTransactions()\n        }\n    }()\n}\n\n<em>\/\/ \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439<\/em>\nfunc processScheduledTransactions() {\n    <em>\/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0434\u0430\u0442\u0443 \u0431\u0435\u0437 \u0432\u0440\u0435\u043c\u0435\u043d\u0438<\/em>\n    today := time.Now().Truncate(24 * time.Hour)\n    \n    <em>\/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0441\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0438\u043b\u0438 \u0440\u0430\u043d\u0435\u0435<\/em>\n    rows, err := dbPool.Query(\n        \"SELECT id, description, amount, type, category, account_id, frequency, next_date FROM scheduled_transactions WHERE is_active = ? AND next_date &lt;= ?\",\n        true, today,\n    )\n    if err != nil {\n        log.Printf(\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439: %v\", err)\n        return\n    }\n    defer rows.Close()\n    \n    for rows.Next() {\n        var st ScheduledTransaction\n        if err := rows.Scan(&amp;st.ID, &amp;st.Description, &amp;st.Amount, &amp;st.Type, &amp;st.Category, &amp;st.AccountID, &amp;st.Frequency, &amp;st.NextDate); err != nil {\n            log.Printf(\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438: %v\", err)\n            continue\n        }\n        \n        <em>\/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e<\/em>\n        tx, err := dbPool.Begin()\n        if err != nil {\n            log.Printf(\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043d\u0430\u0447\u0430\u043b\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438: %v\", err)\n            continue\n        }\n        \n        <em>\/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e<\/em>\n        transaction := Transaction{\n            ID:          fmt.Sprintf(\"AUTO_%s_%d\", st.ID, time.Now().Unix()),\n            Amount:      st.Amount,\n            Type:        st.Type,\n            Category:    st.Category,\n            Date:        time.Now(),\n            Description: st.Description + \" (\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438)\",\n        }\n        \n        if err := AddTransaction(tx, transaction, st.AccountID); err != nil {\n            tx.Rollback()\n            log.Printf(\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438: %v\", err)\n            continue\n        }\n        \n        <em>\/\/ \u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0434\u0430\u0442\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/em>\n        nextDate := calculateNextDate(st.NextDate, st.Frequency)\n        _, err = tx.Exec(\n            \"UPDATE scheduled_transactions SET next_date = ? WHERE id = ?\",\n            nextDate, st.ID,\n        )\n        if err != nil {\n            tx.Rollback()\n            log.Printf(\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0434\u0430\u0442\u044b: %v\", err)\n            continue\n        }\n        \n        <em>\/\/ \u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u043c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044e<\/em>\n        if err := tx.Commit(); err != nil {\n            log.Printf(\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0444\u0438\u043a\u0441\u0430\u0446\u0438\u0438 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438: %v\", err)\n            continue\n        }\n        \n        log.Printf(\"\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430: %s\", transaction.ID)\n    }\n}\n\n<em>\/\/ \u0420\u0430\u0441\u0447\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0434\u0430\u0442\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/em>\nfunc calculateNextDate(currentDate time.Time, frequency string) time.Time {\n    switch frequency {\n    case \"daily\":\n        return currentDate.AddDate(0, 0, 1)\n    case \"weekly\":\n        return currentDate.AddDate(0, 0, 7)\n    case \"monthly\":\n        return currentDate.AddDate(0, 1, 0)\n    case \"yearly\":\n        return currentDate.AddDate(1, 0, 0)\n    default:\n        return currentDate.AddDate(0, 1, 0) <em>\/\/ \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0435\u0436\u0435\u043c\u0435\u0441\u044f\u0447\u043d\u043e<\/em>\n    }\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n\n\n\n<p>\u042f\u0437\u044b\u043a Go \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043c\u043e\u0449\u043d\u0443\u044e \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0443 Excel \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0435 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0430 \u0438 \u0431\u043e\u0433\u0430\u0442\u043e\u0439 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a Go \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u0435, \u043d\u0430\u0434\u0451\u0436\u043d\u044b\u0435 \u0438 \u0431\u044b\u0441\u0442\u0440\u044b\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u043e\u0433\u043e \u0443\u0447\u0451\u0442\u0430 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430.<\/p>\n\n\n\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u044b \u044f\u0437\u044b\u043a\u0430 Go, \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0432\u0435\u0431-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 Excel-\u0444\u0430\u0439\u043b\u0430\u043c\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Go \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u0437\u0430\u0434\u0430\u0447. \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u043d\u0438\u044f, \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442 Excel, \u043d\u043e \u0438 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442 \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u0437 100 \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438.<\/p>\n\n\n\n<p>\u0414\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Go, \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c\u0441\u044f \u043a \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 Go, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u043f\u044b\u0442\u043e\u043c \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043f\u043e\u043c\u043e\u0449\u044c.<\/p>\n\n\n\n<p>\u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043e\u0442 Excel \u043a \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u043d\u0430 Go \u2014 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043c\u0435\u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430, \u0430 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438, \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0412 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u043c\u0438\u0440\u0435, \u0433\u0434\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0432\u0441\u0451 \u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u044b\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u043c, \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0438\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a Excel, \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441 \u0440\u0430\u0441\u0442\u0443\u0449\u0438\u043c\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441 \u043e\u0434\u043d\u0438\u043c\u0438 \u0438 \u0442\u0435\u043c\u0438 \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u043c\u0441\u044f \u0432 \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0438\u0440 \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[6],"tags":[],"class_list":["post-1246","post","type-post","status-publish","format-standard","hentry","category-6"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/gerdlezhev.ru\/index.php?rest_route=\/wp\/v2\/posts\/1246","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gerdlezhev.ru\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gerdlezhev.ru\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gerdlezhev.ru\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gerdlezhev.ru\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1246"}],"version-history":[{"count":1,"href":"https:\/\/gerdlezhev.ru\/index.php?rest_route=\/wp\/v2\/posts\/1246\/revisions"}],"predecessor-version":[{"id":1247,"href":"https:\/\/gerdlezhev.ru\/index.php?rest_route=\/wp\/v2\/posts\/1246\/revisions\/1247"}],"wp:attachment":[{"href":"https:\/\/gerdlezhev.ru\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1246"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gerdlezhev.ru\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1246"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gerdlezhev.ru\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1246"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}