{"id":331380,"date":"2022-04-01T15:00:54","date_gmt":"2022-04-01T15:00:54","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=331380"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=331380","title":{"rendered":"<span>\u0412\u043e\u043f\u0440\u043e\u0441\u044b \u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u0434\u043b\u044f \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f Go-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u2014 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u043d\u0430\u0432\u044b\u043a. \u0418 \u0434\u0430\u0431\u044b \u043f\u0440\u0438\u0432\u043d\u0435\u0441\u0442\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432 \u044d\u0442\u0430\u043f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u043a \u0438\u043d\u0442\u0435\u0440\u0432\u044c\u044e \u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c Golang \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 (\u0438 \u043d\u0435\u043c\u043d\u043e\u0436\u043a\u043e \u0442\u0435\u0445\u043b\u0438\u0434\u0430) \u0440\u0435\u0448\u0438\u043b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u0439 \u0437\u0430\u043c\u0435\u0442\u043a\u0435 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 FAQ \u0442\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0437\u0430\u0434\u0430\u0432\u0430\u043b, \u0437\u0430\u0434\u0430\u0432\u0430\u043b\u0438 \u043c\u043d\u0435 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u044b\u043b\u0438 \u043c\u043d\u043e\u0439 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0441\u0435\u0442\u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043e\u0442\u0432\u0435\u0442\u0430\u043c\u0438 \u043d\u0430 \u043d\u0438\u0445. \u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u044c\u0441\u044f \u043a \u043d\u0438\u043c \u043a\u0430\u043a \u043a \u0448\u043f\u0430\u0440\u0433\u0430\u043b\u043a\u0435 (\u0435\u0441\u043b\u0438 \u0437\u0430\u0442\u0443\u043f\u0438\u0448\u044c \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u044c\u044e \u2014 \u0431\u0443\u0434\u0435\u0442 \u0433\u0434\u0435 \u043f\u043e\u0434\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c) \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0431\u043e\u0440\u0443 \u0442\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0442\u0435\u0431\u0435 \u0441\u0442\u043e\u0438\u0442 \u0443\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435.<\/p>\n<p>  <\/p>\n<p>\u042f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u043a\u043e\u043f\u043d\u0443\u0442\u044c \u0432 \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u0447\u0443\u0442\u044c \u0433\u043b\u0443\u0431\u0436\u0435 \u0447\u0435\u043c, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0430\u0434\u043e \u0431\u044b \u2014 \u0447\u0442\u043e \u0431\u044b \u0443 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f \u0431\u044b\u043b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441, \u043d\u043e \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 &#171;\u0430 \u043f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0442\u0430 \u0438\u043b\u0438 \u0438\u043d\u0430\u044f \u0448\u0442\u0443\u043a\u0430&#187;. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043a\u0440\u0430\u0439\u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0438 \u0441 \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 \u043d\u0430 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438, \u0447\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0434 \u043e\u0432\u0442\u0435\u0442\u0430\u043c\u0438 \u2014 \u0442\u0430\u043c \u0432\u044b \u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044b\u0435 \u043e\u0442\u0432\u0435\u0442\u044b.<\/p>\n<p>  <\/p>\n<p>\u0414\u0430, \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043e\u0431\u044a\u0435\u043c\u043d\u044b\u0439 \u043f\u043e\u0441\u0442, \u0438 \u0432\u0440\u044f\u0442\u043b\u0438 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u0434\u0443\u043c\u0447\u0438\u0432\u043e \u043e\u0441\u0438\u043b\u0438\u0442\u044c \u0437\u0430 \u043e\u0434\u0438\u043d \u043f\u043e\u0434\u0445\u043e\u0434, \u043d\u043e \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0432 \u0435\u0433\u043e \u0432 \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0438 \u043e\u043d, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u0441\u043e\u0441\u043b\u0443\u0436\u0438\u0442 \u0432\u0430\u043c \u0434\u043e\u0431\u0440\u0443\u044e \u0441\u043b\u0443\u0436\u0431\u0443 (\u0447\u0438\u0442\u0430\u0442\u044c \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e \u0447\u0430\u0441\u0442\u044f\u043c, \u043d\u0430\u0445\u043e\u0434\u044f\u0441\u044c \u0432 \u043c\u0435\u0442\u0440\u043e \u0438\u043b\u0438 \u043c\u0435\u0436\u0434\u0443 \u0432\u0435\u0447\u043d\u044b\u043c\u0438 \u0441\u043e\u0432\u0435\u0449\u0430\u043d\u0438\u044f\u043c\u0438; \u0434\u0430 \u0438 <code>Ctrl + F<\/code> \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043e\u0442\u043c\u0435\u043d\u044f\u043b). \u0415\u0449\u0451 \u0435\u043c\u0443 \u043e\u0447\u0435\u043d\u044c \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u043e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438, \u043d\u043e \u0443 \u0445\u0430\u0431\u0440\u0430\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c TOC (\u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043e\u0431 \u044d\u0442\u043e\u043c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u2014 \u0441\u0434\u0435\u043b\u0430\u044e \u0435\u0433\u043e \u0440\u0443\u043a\u0430\u043c\u0438). \u041e\u0431 \u043e\u0447\u0435\u043f\u044f\u0442\u043a\u0430\u0445, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043b\u0438\u0447\u043a\u0443.<\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<h2 id=\"rasskazhi-o-sebe\">\u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0438 \u043e \u0441\u0435\u0431\u0435?<\/h2>\n<p>  <\/p>\n<p>\u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u0438\u0434\u0451\u0442 \u043f\u0435\u0440\u0432\u044b\u043c \u0438 \u0434\u0430\u0451\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0432\u044c\u044e\u0432\u0435\u0440\u0443 \u0437\u0430\u0434\u0430\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u0442\u0432\u043e\u0438\u043c \u0440\u0435\u0437\u044e\u043c\u0435, \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0442\u043e\u0431\u043e\u0439, \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u044c \u0442\u0432\u043e\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432. \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0432 \u0432\u0438\u0434\u0443, \u0447\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0432\u044c\u044e\u0432\u0435\u0440\u0443 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043a \u0438\u043d\u0442\u0435\u0440\u0432\u044c\u044e, \u0438\u043b\u0438 \u043e\u043d \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0435\u0440\u0435\u0434 \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u0442\u0432\u043e\u0435\u0433\u043e \u0440\u0435\u0437\u044e\u043c\u0435. \u0422\u0443\u0442 \u0435\u0441\u0442\u044c \u0441\u043c\u044b\u0441\u043b \u0435\u0449\u0451 \u0440\u0430\u0437 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c\u0441\u044f (\u0447\u0430\u0441\u0442\u043e \u0432 \u043c\u0435\u0441\u0441\u0435\u043d\u0434\u0436\u0435\u0440\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043d\u0438\u043a\u043d\u0435\u0439\u043c\u044b, \u0430 \u0442\u0432\u043e\u0451 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f \u043e\u043d \u043c\u043e\u0433 \u0437\u0430\u0431\u044b\u0442\u044c), \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0432\u043e\u0437\u0440\u0430\u0441\u0442, \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044f\u0445, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u0432 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0438, \u043a\u0430\u043a\u0438\u0435 \u042f\u041f \u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u2014 \u0442\u043e\u043b\u044c\u043a\u043e &#171;\u043f\u043e \u0432\u0435\u0440\u0445\u0430\u043c&#187;, \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431 \u0442\u0432\u043e\u0439 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043d\u044f\u043b \u0441 \u043a\u0435\u043c \u043e\u043d &#171;\u0438\u043c\u0435\u0435\u0442 \u0434\u0435\u043b\u043e&#187;.<\/p>\n<p>  <\/p>\n<h2 id=\"rasskazhi-o-svoem-samom-interesnom-proekte\">\u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0438 \u043e \u0441\u0432\u043e\u0435\u043c \u0441\u0430\u043c\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435?<\/h2>\n<p>  <\/p>\n<p>\u041a \u044d\u0442\u043e\u043c\u0443 \u0432\u043e\u043f\u0440\u043e\u0441\u0443 \u0435\u0441\u0442\u044c \u0441\u043c\u044b\u0441\u043b \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0438 \u043d\u0435 \u0441\u043f\u0443\u0441\u0442\u044f \u0440\u0443\u043a\u0430\u0432\u0430. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u0442\u0435\u0431\u0435 \u043d\u0430\u0434\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e \u043f\u0430\u0432\u043b\u0438\u043d\u0443 \u0440\u0430\u0441\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0445\u0432\u043e\u0441\u0442 \u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u0435\u0440\u0432\u043e\u0435 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435 \u043e \u0441\u0435\u0431\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u0442\u043e\u0436\u0435 \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u0438\u0434\u0451\u0442 \u0432\u043f\u0435\u0440\u0435\u0434\u0438 \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445. \u0412\u043e\u0437\u044c\u043c\u0438 \u0438 \u0432\u044b\u043f\u0438\u0448\u0438 \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u0433\u0434\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u043d\u0430 \u043b\u0438\u0441\u0442\u043e\u0447\u043a\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0435\u0437\u0438\u0441\u044b \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0431\u044b\u043b \u0437\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\/\u0441\u0435\u0440\u0432\u0438\u0441\/\u0437\u0430\u0434\u0430\u0447\u0430, \u0443\u0434\u0435\u043b\u044f\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0442\u043e\u043c\u0443 \u043a\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0444\u0438\u0442 \u044d\u0442\u043e \u043f\u0440\u0438\u043d\u0435\u0441\u043b\u043e \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438\/\u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432 \u0446\u0435\u043b\u043e\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u042f \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u0433\u043e\u0444\u0435\u0440\u043e\u0432 \u0438\u0437 N \u0447\u0435\u043b\u043e\u0432\u0435\u043a \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u0442\u0440\u0435\u0445 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0430\u043d\u0430\u043b\u043e\u0433 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u043f\u043e\u043a\u0443\u043f\u0430\u043b\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430 $4000 \u0432 \u043c\u0435\u0441\u044f\u0446, \u0430 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043d\u0430 \u043d\u0430\u0448 \u0441\u0435\u0440\u0432\u0438\u0441 \u2014 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u043b\u0438\u0441\u044c \u0434\u043e $1500 \u0432 \u043c\u0435\u0441\u044f\u0446 \u0438 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0432\u044b\u0441\u0438\u043b\u043e\u0441\u044c \u0438\u0445 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0438 uptime;<\/li>\n<li>\u0412\u043d\u0435\u0434\u0440\u0435\u043d\u043d\u044b\u0435 \u043c\u043d\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u0432 CI\/CD \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u0438 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0440\u0435\u0432\u044c\u044e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u043d\u0430 25..40%, \u0430 \u0437\u043d\u0430\u044f \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u043e\u0438\u0442 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u2014 \u0432\u044b \u0441\u0430\u043c\u0438 \u0432\u0441\u0451 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435;<\/li>\n<li>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0439 \u043c\u043d\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u0441\u043e\u0441\u0442\u043e\u044f\u043b \u0438\u0437 \u0442\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u0442\u0430\u043a\u0438\u0435-\u0442\u043e \u0441\u043b\u0443\u0436\u0431\u044b \u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b, \u0431\u044b\u043b\u0438 \u0442\u0430\u043a\u0438\u0435-\u0442\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0442\u0430\u043a-\u0442\u043e \u0437\u0430\u0440\u0435\u0448\u0430\u043b\u0438; \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u0431\u044b\u043b\u043e \u0442\u043e-\u0442\u043e.<\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"kem-byl-sozdan-yazyk-kakie-ego-osobennosti\">\u041a\u0435\u043c \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d \u044f\u0437\u044b\u043a, \u043a\u0430\u043a\u0438\u0435 \u0435\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438?<\/h2>\n<p>  <\/p>\n<p>Go <em>(\u0447\u0430\u0441\u0442\u043e \u0442\u0430\u043a\u0436\u0435 golang)<\/em> \u2014 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u044b\u0439 \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 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Google. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c \u0432 2007 \u0433\u043e\u0434\u0443, \u0435\u0433\u043e \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u044c <a href=\"https:\/\/github.com\/griesemer\" rel=\"nofollow noopener noreferrer\">\u0420\u043e\u0431\u0435\u0440\u0442 \u0413\u0440\u0438\u0437\u043c\u0435\u0440<\/a>, <a href=\"https:\/\/github.com\/robpike\" rel=\"nofollow noopener noreferrer\">\u0420\u043e\u0431 \u041f\u0430\u0439\u043a<\/a> \u0438 \u041a\u0435\u043d \u0422\u043e\u043c\u043f\u0441\u043e\u043d. \u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u044f\u0437\u044b\u043a \u0431\u044b\u043b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0432 \u043d\u043e\u044f\u0431\u0440\u0435 2009 \u0433\u043e\u0434\u0430.<\/p>\n<p>  <\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041f\u0440\u043e\u0441\u0442\u0430\u044f \u0433\u0440\u0430\u043c\u043c\u0430\u0442\u0438\u043a\u0430 (\u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u0441\u043b\u043e\u0432 \u2014 \u044f\u0437\u044b\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0441\u044f \u043f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 &#171;\u0447\u0442\u043e \u0435\u0449\u0451 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043a\u0438\u043d\u0443\u0442\u044c&#187; \u0432\u043c\u0435\u0441\u0442\u043e &#171;\u0447\u0442\u043e \u0431\u044b \u0435\u0449\u0451 \u0432 \u043d\u0435\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c&#187;)<\/li>\n<li>\u0421\u0442\u0440\u043e\u0433\u0430\u044f \u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u043e\u0442\u043a\u0430\u0437 \u043e\u0442 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u0442\u0438\u043f\u043e\u0432 (\u043d\u043e \u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439)<\/li>\n<li>\u0421\u0431\u043e\u0440\u043a\u0430 \u043c\u0443\u0441\u043e\u0440\u0430 (GC)<\/li>\n<li>\u041f\u0440\u043e\u0441\u0442\u044b\u0435 \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439<\/li>\n<li>\u0427\u0451\u0442\u043a\u043e\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/li>\n<li>\u041d\u0430\u043b\u0438\u0447\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 (\u043f\u0430\u043a\u0435\u0442\u043e\u0432)<\/li>\n<li>\u0411\u043e\u0433\u0430\u0442\u044b\u0439 \u0442\u0443\u043b\u0438\u043d\u0433 &#171;\u0438\u0437 \u043a\u043e\u0440\u043e\u0447\u043a\u0438&#187; (\u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438, \u0442\u0435\u0441\u0442\u044b, \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u043e\u0434\u0430 \u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438), \u0431\u044b\u0441\u0442\u0440\u0430\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f Go \u0438 \u043e \u0435\u0433\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c:<\/p>\n<p>  <\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/www.youtube.com\/embed\/ql-uncsqoAU?rel=0&amp;showinfo=1&amp;hl=en-US\" data-style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" id=\"\" width=\"\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h3 id=\"go---imperativnyy-ili-deklarativnyy-a-v-chem-raznica\">Go \u2014 \u0438\u043c\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u043b\u0438 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439? \u0410 \u0432 \u0447\u0435\u043c \u0440\u0430\u0437\u043d\u0438\u0446\u0430?<\/h3>\n<p>  <\/p>\n<p>Go \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <strong>\u0438\u043c\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u043c<\/strong> \u044f\u0437\u044b\u043a\u043e\u043c.<\/p>\n<p>  <\/p>\n<p><em>\u0418\u043c\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0435<\/em> \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, <strong>\u043a\u0430\u043a<\/strong> \u0442\u044b \u0434\u0435\u043b\u0430\u0435\u0448\u044c \u0447\u0442\u043e-\u0442\u043e (\u0442.\u0435. \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430), \u0430 <em>\u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0435<\/em> \u2014 \u0442\u043e\u0433\u043e, <strong>\u0447\u0442\u043e<\/strong> \u0442\u044b \u0434\u0435\u043b\u0430\u0435\u0448\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u043c \u042f\u041f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>SQL<\/code> \u2014 \u043c\u044b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0447\u0442\u043e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442 \u0421\u0423\u0411\u0414, \u043d\u043e \u043d\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c).<\/p>\n<p>  <\/p>\n<h2 id=\"chto-takoe-oop-kak-eto-sdelano-v-golang\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u041e\u041e\u041f? \u041a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432 Golang?<\/h2>\n<p>  <\/p>\n<p>\u041e\u041e\u041f \u044d\u0442\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u044f (\u043f\u043e\u0434\u0445\u043e\u0434) \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043d\u0430 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432-\u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0440\u0430\u0437\u0443\u044e \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f. \u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0444\u0438\u0448\u043a\u0438 \u2014 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c\u043e\u0441\u0442\u0438 \u043a\u043e\u0434\u0430 (<a href=\"https:\/\/ru.wikipedia.org\/wiki\/Don%E2%80%99t_repeat_yourself\" rel=\"nofollow noopener noreferrer\">\u043f\u0440\u0438\u043d\u0446\u0438\u043f DRY<\/a>) \u0438 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f\/\u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u0424\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u043e\u043c \u041e\u041e\u041f \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0434\u0435\u044e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c \u0438\u0437 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430 \u2014 \u0443 \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c. \u041c\u044b (\u043b\u044e\u0434\u0438) \u0442\u0430\u043a \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c \u043c\u0438\u0440, \u0438 \u043d\u0430\u043c (\u043b\u044e\u0434\u044f\u043c) \u0442\u0430\u043a \u043f\u0440\u043e\u0449\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u044f\u043a\u0438\u0435 \u0448\u0442\u0443\u043a\u0438 \u0432 \u043a\u043e\u0434\u0435. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0432 \u041e\u041e\u041f:<\/p>\n<p>  <\/p>\n<ul>\n<li><strong>\u0410\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f<\/strong> \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u0440\u0438\u0441\u0443\u0449\u0430 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u041e\u041e\u041f. \u041f\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u0441\u0447\u0435\u0442\u0443 (\u0442\u043e\u043f\u043e\u0440\u043d\u044b\u0439, \u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440) \u044d\u0442\u043e \u043f\u0440\u043e \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u0449\u0435\u0433\u043e \u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0432 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u043d\u043e \u0431\u0435\u0437 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043f\u0440\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u044b (<code>new AbstractClass<\/code>), \u043d\u043e \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b, \u0447\u0442\u043e\u0431 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0440\u0435\u0448\u0438\u0432 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u0442\u0430\u043a, \u043a\u0430\u043a \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u0446\u0435\u043b\u0435\u0439 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u0445\u043e\u0434\u0438\u0442\u044c \u0432 SQL \u0421\u0423\u0411\u0414 \u0438\u043b\u0438 \u0444\u0430\u0439\u043b). \u0414\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b, \u043e\u043d\u0438 \u0436\u0435 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b \u0447\u0438\u0441\u0442\u043e\u0439 \u0432\u043e\u0434\u044b \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438 \u043d\u0438 \u043a\u0430\u043f\u0435\u043b\u044c\u043a\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u041d\u043e \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f \u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u043c\u0438 \u0438 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0443\u043c\u0435\u0440\u0435\u043d\u043d\u043e\u0439, \u0442\u0430\u043a \u043a\u0430\u043a \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 \u043e\u0431\u0449\u0435\u043c \u0438 \u0446\u0435\u043b\u043e\u043c. \u041e\u043f\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043d\u0430 \u0438\u043d\u0442\u0443\u0438\u0446\u0438\u044e \u0438 \u043e\u043f\u044b\u0442. \u0421\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0435\u0432 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 (\u0435\u0449\u0451 \u0440\u0430\u0437 \u2014 \u0442\u0443\u0442 \u0434\u0435\u043b\u043e \u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u043c\u0438 \u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438) \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043f\u0435\u0440\u0435\u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u044e \u0438 \u0433\u043e\u043b\u043e\u0432\u043d\u043e\u0439 \u0431\u043e\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430. \u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u0430\u044f \u2014 \u043a \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430<\/li>\n<li><strong>\u0418\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u044f\u0446\u0438\u044f<\/strong> \u043f\u0440\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438 \u0438\u0445 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f\/\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u043c\u0435\u0442\u043e\u0434\/\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e &#171;\u0438\u0437 \u0432\u043d\u0435&#187; \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u2014 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u043c, \u0438\u043d\u0430\u0447\u0435 \u2014 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u043c. \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0435\u0433\u043e \u0438\u0437 \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u0430 \u2014 \u0442\u043e \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u044b\u043c (protected). Python, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u044f\u0446\u0438\u044e, \u043d\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435; \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0421++ \u0438 Java \u043e\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0441\u044e\u0434\u0443<\/li>\n<li><strong>\u041d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435<\/strong> \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c (\u0431\u0430\u0440\u0430\u0431\u0430\u043d\u043d\u0430\u044f \u0434\u0440\u043e\u0431\u044c!) \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445, &#171;\u043f\u0435\u0440\u0435\u043d\u0438\u043c\u0430\u044f&#187; \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u0421\u0432\u043e\u0435\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u041c\u0430\u0442\u0440\u0435\u0448\u043a\u0438. \u0422.\u0435. \u0432\u044b\u0434\u0435\u043b\u044f\u044f \u0432 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u0445 &#171;\u0432\u0441\u0451 \u043e\u0431\u0449\u0435\u0435&#187; \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c\u0441\u044f \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0447\u0430\u0441\u0442\u043d\u044b\u0445, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e &#171;\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f&#187;<\/li>\n<li><strong>\u041f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u0438\u0437\u043c<\/strong> \u2014 &#171;\u043f\u043e\u043b\u0438&#187; \u2014 \u043c\u043d\u043e\u0433\u043e, &#171;\u043c\u043e\u0440\u0444&#187; \u2014 \u0432\u0438\u0434. \u0412\u0435\u0437\u0434\u0435, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u2014 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u0438\u0437\u043c. \u0421\u0443\u0442\u044c \u2014 \u044d\u0442\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b (\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b), \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c &#171;\u0447\u0442\u043e-\u0442\u043e \u0443\u043c\u0435\u0435\u0442 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0441\u0435\u0431\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043c <code>Close()<\/code>&#171;, \u0438 \u043d\u0430\u043c \u043d\u0435 \u0432\u0430\u0436\u043d\u043e \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u043d\u043e\u0433\u043e, \u0438 \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u0443\u043c\u0435\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u2014 \u043d\u0430\u043c \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0441 \u044d\u0442\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0422\u0443\u0442 \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c \u043f\u0440\u043e \u0437\u043d\u0430\u043d\u0438\u0435 <a href=\"https:\/\/en.wikipedia.org\/wiki\/SOLID\" rel=\"nofollow noopener noreferrer\">SOLID<\/a>, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e:<\/p>\n<p>  <\/p>\n<ul>\n<li><strong>S<\/strong> (single responsibility principle, \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438) \u2014 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441\/\u043c\u043e\u0434\u0443\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0435\u0448\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443, \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0443\u0437\u043a\u043e \u043d\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e (\u0441\u0432\u043e\u0435\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0435 UNIX-way). \u0415\u0441\u043b\u0438 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0435\u043c\u0443 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u2014 \u043e\u043d\u0438 \u0432 \u043d\u0435\u0433\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u044b (\u044d\u0442\u043e \u043e\u0442\u0441\u044b\u043b\u043a\u0430 \u043a \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u0438\u043d\u0432\u0435\u0440\u0441\u0438\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439)<\/li>\n<li><strong>O<\/strong> (open-closed principle, \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0441\u0442\u0438\/\u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0441\u0442\u0438) \u2014 \u043a\u043b\u0430\u0441\u0441\u044b\/\u043c\u043e\u0434\u0443\u043b\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0442\u043a\u0440\u044b\u0442\u044b \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f, \u043d\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u044b \u0434\u043b\u044f \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u0414\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u043d\u0430\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434\/\u043b\u043e\u0433\u0438\u043a\u0430 \u043c\u043e\u0434\u0443\u043b\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u043e\u0439<\/li>\n<li><strong>L<\/strong> (Liskov substitution principle, \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u043f\u043e\u0434\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u041b\u0438\u0441\u043a\u043e\u0432) \u2014 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0440\u0435\u0447\u0438\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044e, \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0431\u0430\u0437\u043e\u0432\u044b\u043c \u043a\u043b\u0430\u0441\u0441\u043e\u043c, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u043c \u0434\u043b\u044f \u043a\u043e\u0434\u0430<\/li>\n<li><strong>I<\/strong> (interface segregation principle, \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430) \u2014 \u043c\u043d\u043e\u0433\u043e \u0442\u043e\u043d\u043a\u0438\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u043e\u0434\u0438\u043d \u0442\u043e\u043b\u0441\u0442\u044b\u0439<\/li>\n<li><strong>D<\/strong> (dependency inversion principle, \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0438\u043d\u0432\u0435\u0440\u0441\u0438\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439) \u2014 &#171;\u0437\u0430\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f&#187; \u043d\u0430 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f\u0445 (\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u0445), \u0430 \u043d\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0445. \u0422\u0430\u043a \u0436\u0435 (\u044d\u0442\u043e \u0443\u0436\u0435 \u043f\u0440\u043e IoC, \u043d\u043e \u0432\u0441\u0451 \u0436\u0435) \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043a\u0430\u043a\u043e\u043c\u0443-\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u0443 \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u043c\u044b\u0441\u043b &#171;\u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c&#187; \u0435\u0451 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <em>\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<\/em>, \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043d\u0430\u0448\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0446\u0435\u043b\u0435\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b (\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439) \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u043f\u043e\u0434 \u0431\u0443\u043a\u0432\u043e\u0439 <strong>S<\/strong><\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432 Go (\u043d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e!).<\/p>\n<p>  <\/p>\n<p>\u0412 Go \u043d\u0435\u0442 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438\u0306 \u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432. \u041d\u0435\u0442 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u0442\u0438\u043f\u043e\u0432, \u043d\u043e \u0435\u0441\u0442\u044c \u0441\u0430\u043c\u0438 \u0442\u0438\u043f\u044b (\u0442.\u0435. \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0442\u0438\u043f\u044b\/\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b). \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0442\u0438\u043f\u044b (\u0441 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438) \u0441\u043b\u0443\u0436\u0430\u0442 \u0442\u0435\u043c \u0436\u0435 \u0446\u0435\u043b\u044f\u043c, \u0447\u0442\u043e \u0438 \u043a\u043b\u0430\u0441\u0441\u044b \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445. \u0422\u0430\u043a \u0436\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c \u0447\u0442\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435.<\/p>\n<p>  <\/p>\n<p>\u0412 Go \u043d\u0435\u0442 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f. \u0421\u043e\u0432\u0441\u0435\u043c. \u041d\u043e \u0435\u0441\u0442\u044c \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043d\u0438\u0435 (\u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0435 &#171;\u0430\u043d\u043e\u043d\u0438\u043c\u043d\u044b\u043c&#187;, \u0442\u0430\u043a \u043a\u0430\u043a <code>Foo<\/code> \u0432 <code>Bar<\/code> \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u043f\u043e\u0434 \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u0438\u043c\u0435\u043d\u0435\u043c, \u0430 \u0431\u0435\u0437 \u043d\u0435\u0433\u043e) \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">import \"fmt\"  type Foo struct {     name    string     Surname string }  func (f Foo) SayName() string { return f.name }  type Bar struct {     Foo }  func main() {     bar := Bar{Foo{name: \"one\", Surname: \"baz\"}}      fmt.Println(bar.SayName()) \/\/ one     fmt.Println(bar.Surname)   \/\/ baz      bar.name = \"two\"      fmt.Println(bar.SayName()) \/\/ two }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0415\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b (\u044d\u0442\u043e \u0442\u0438\u043f\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u044e\u0442 \u043d\u0430\u0431\u043e\u0440\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u0432). \u041f\u043e\u0434\u043e\u0431\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0438\u0306\u0441\u0430\u043c \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445, \u043e\u043d\u0438 \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u041e\u0431\u044a\u0435\u043a\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0438\u0306\u0441\u0430, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0438\u0306\u0441 (\u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 <strong>Duck-typing<\/strong>). \u041d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043b\u0438 \u043f\u043e\u0434\u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438\u043b\u0438 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430 <code>Implements<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">import \"fmt\"  type Speaker interface {     Speak() string }  type Foo struct{}  func (Foo) Speak() string { return \"foo\" }  type Bar struct{}  func (Bar) Speak() string { return \"bar\" }  func main() {     var foo, bar Speaker = new(Foo), &amp;Bar{}      fmt.Println(foo.Speak()) \/\/ foo     fmt.Println(bar.Speak()) \/\/ bar }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0448\u0435 \u043c\u044b \u043e\u0431\u044a\u044f\u0432\u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <code>foo<\/code> \u0438 <code>bar<\/code> \u0441 \u044f\u0432\u043d\u044b\u043c \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u0430 \u0442\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u044d\u0442\u043e &#171;\u0441\u0441\u044b\u043b\u043e\u0447\u043d\u044b\u0439&#187; \u0442\u0438\u043f (\u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432 Go \u043d\u0435\u0442 \u0441\u0441\u044b\u043b\u043e\u043a, \u043d\u043e \u0435\u0441\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438) \u2014 \u0442\u043e \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043c\u044b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u043d\u0430 \u043d\u0438\u0445 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <code>new()<\/code> (\u0447\u0442\u043e \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u0443\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043d\u0435\u0451) \u0438 (\u0438\u043b\u0438) <code>&amp;<\/code>.<\/p>\n<p>  <\/p>\n<p><strong>\u0418\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u044f\u0446\u0438\u044f<\/strong> \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u0418\u043c\u0435\u043d\u0430, \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441\u043e \u0441\u0442\u0440\u043e\u0447\u043d\u043e\u0438\u0306 \u0431\u0443\u043a\u0432\u044b, \u0432\u0438\u0434\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 (\u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c\u0438). \u0418 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442 \u2014 \u0432\u0441\u0451, \u0447\u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0437\u0430\u0433\u043b\u0430\u0432\u043d\u043e\u0439 \u0431\u0443\u043a\u0432\u044b \u2014 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0438\u0437-\u0432\u043d\u0435 \u043f\u0430\u043a\u0435\u0442\u0430. \u0414\u0435\u0448\u0435\u0432\u043e \u0438 \u0441\u0435\u0440\u0434\u0438\u0442\u043e.<\/p>\n<p>  <\/p>\n<p><strong>\u041f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u0438\u0437\u043c<\/strong> \u2014 \u044d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f: \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0438\u0306\u0441\u0430. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0438\u0306\u0441\u044b Go \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u044d\u0442\u0443 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u044f\u043c\u044b\u043c \u0438 \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c. \u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0430\u0439\u0441\u0430 \u0431\u044b\u043b \u043e\u043f\u0438\u0441\u0430\u043d \u0432\u044b\u0448\u0435.<\/p>\n<p>  <\/p>\n<blockquote><p>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c: <a href=\"https:\/\/habr.com\/ru\/post\/463125\/\">\u041e\u041e\u041f \u0432 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u0445<\/a>, <a href=\"https:\/\/habr.com\/ru\/post\/243593\/\">Golang \u0438 \u041e\u041e\u041f<\/a><\/p><\/blockquote>\n<p>  <\/p>\n<h3 id=\"kak-ustroeno-invertirovanie-zavisimostey\">\u041a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439?<\/h3>\n<p>  <\/p>\n<p>\u0418\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432 \u043d\u0430\u0448\u0435\u043c \u043a\u043e\u0434\u0435 \u043d\u0435 &#171;\u0437\u0430\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f&#187; \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b), \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043f\u043e\u043d\u0438\u0436\u0430\u044f \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430 \u0438 \u043f\u043e\u0432\u044b\u0448\u0430\u044f \u0435\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c. \u0422\u0430\u043a \u0436\u0435 \u0441\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0437\u043e\u043d\u0430 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b\/\u043f\u0430\u043a\u0435\u0442\u0430, \u0447\u0442\u043e \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442 \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0441\u0442\u044c.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0438\u043d\u0432\u0435\u0440\u0441\u0438\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 (dependency inversion principle) \u0432 Go \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">import (     \"errors\"     \"fmt\" )  type speaker interface {     Speak() string }  type Foo struct {     s speaker \/\/ s *Foo - \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u043b\u043e\u0445\u043e }  func NewFoo(s speaker) (*Foo, error) {     if s == nil {         return nil, errors.New(\"speaker is nil\")     }      return &amp;Foo{s: s}, nil }  func (f Foo) SaySomething() string { return f.s.Speak() }  func main() {     var foo, err = NewFoo(someSpeaker)      if err != nil {         panic(err)     }      fmt.Println(foo.SaySomething()) \/\/ depends on the speaker implementation }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041c\u044b \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <code>speaker<\/code> \u043d\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c \u043d\u0430 \u043d\u0430\u0448\u0435\u0439, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435, \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0441\u0435\u0432\u0434\u043e-\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 <code>NewFoo<\/code> \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u043c \u0447\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>s<\/code> \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432\u0435\u0440\u043d\u044b\u043c \u0442\u0438\u043f\u043e\u043c (\u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044f \u0435\u0433\u043e \u043d\u0430 <code>nil<\/code>).<\/p>\n<p>  <\/p>\n<h3 id=\"kak-sdelat-svoi-metody-dlya-storonnego-paketa\">\u041a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430?<\/h3>\n<p>  <\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043b\u043e\u0433\u0433\u0435\u0440 <strong><a href=\"https:\/\/github.com\/uber-go\/zap\" rel=\"nofollow noopener noreferrer\">Zap<\/a><\/strong> \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u0438 \u0445\u043e\u0442\u0438\u043c \u043a \u044d\u0442\u043e\u043c\u0443 Zap-\u0443 \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u043d\u0430\u0448\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u2014 \u0442\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c <strong>\u0441\u0432\u043e\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443<\/strong>, \u0432\u043d\u0443\u0442\u0440\u0438 \u0432 \u043d\u0435\u0451 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0433\u0435\u0440 Zap-\u0430, \u0438 \u043a \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0443\u0436\u0435 \u043f\u0440\u0438\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044c \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b. \u041f\u0440\u043e\u0441\u0442\u043e &#171;\u043d\u0430\u0432\u0435\u0441\u0438\u0442\u044c \u0441\u0432\u0435\u0440\u0445\u0443&#187; \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u043f\u0430\u043a\u0435\u0442 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c.<\/p>\n<p>  <\/p>\n<h2 id=\"tipy-dannyh-i-sintaksis\">\u0422\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441<\/h2>\n<p>  <\/p>\n<p>\u041a \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u0442\u0438\u043f\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043d\u0435\u0441\u0442\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0426\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u2014 <code>int{8,16,32,64}<\/code>, <code>int<\/code>, <code>uint{8,16,32,64}<\/code>, <code>uint<\/code>, <code>byte<\/code> \u043a\u0430\u043a \u0441\u0438\u043d\u043e\u043d\u0438\u043c <code>uint8<\/code> \u0438 <code>rune<\/code> \u043a\u0430\u043a \u0441\u0438\u043d\u043e\u043d\u0438\u043c <code>int32<\/code>. \u0422\u0438\u043f\u044b <code>int<\/code> \u0438 <code>uint<\/code> \u0438\u043c\u0435\u044e\u0442 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b (32 \u0438\u043b\u0438 64 \u0431\u0438\u0442\u0430), \u043f\u0440\u0438\u0447\u0435\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u0436\u0435 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u0438 \u0442\u043e\u0439 \u0436\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b<\/li>\n<li>\u0427\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u2014 <code>float32<\/code> (\u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 4 \u0431\u0430\u0439\u0442\u0430\/32 \u0431\u0438\u0442\u0430) \u0438 <code>float64<\/code> (\u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 8 \u0431\u0430\u0439\u0442\/64 \u0431\u0438\u0442\u0430)<\/li>\n<li>\u041a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u2014 <code>complex64<\/code> (\u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0438 \u043c\u043d\u0438\u043c\u0430\u044f \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0447\u0438\u0441\u043b\u0430 <code>float32<\/code>) \u0438 <code>complex128<\/code> (\u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0438 \u043c\u043d\u0438\u043c\u0430\u044f \u0447\u0430\u0441\u0442\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0447\u0438\u0441\u043b\u0430 <code>float64<\/code>)<\/li>\n<li>\u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 aka <code>bool<\/code><\/li>\n<li>\u0421\u0442\u0440\u043e\u043a\u0438 <code>string<\/code><\/li>\n<\/ul>\n<p>  <\/p>\n<h3 id=\"kak-ustroeny-stroki-v-go\">\u041a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 Go?<\/h3>\n<p>  <\/p>\n<p>\u0412 Go \u0441\u0442\u0440\u043e\u043a\u0430 \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <strong>\u0441\u043b\u0430\u0439\u0441\u043e\u043c (\u0441\u0440\u0435\u0437\u043e\u043c) \u0431\u0430\u0439\u0442<\/strong>, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c <strong>\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f<\/strong>. \u0421\u0442\u0440\u043e\u043a\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0431\u0430\u0439\u0442\u044b, \u0438 \u0443 \u043d\u0435\u0451 \u043d\u0435\u0442 \u0451\u043c\u043a\u043e\u0441\u0442\u0438 (<code>cap<\/code>). \u041f\u0440\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u043b\u0430\u0439\u0441\u0430 \u0431\u0430\u0439\u0442 \u0432 \u0441\u0442\u0440\u043e\u043a\u0443 (<code>str := string(slice)<\/code>) \u0438\u043b\u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e (<code>slice := []byte(str)<\/code>) \u2014 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 (\u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f\u043c\u0438).<\/p>\n<p>  <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 <strong>\u043f\u043e\u0434<\/strong>\u0441\u0442\u0440\u043e\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0441\u0442\u0440\u043e\u043a\u0430 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f, \u0438\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0438 \u0441\u0442\u0440\u043e\u043a\u0430, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0430\u044f \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0440\u0435\u0437\u0430, \u043c\u043e\u0433\u0443\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">var (     str = \"hello world\"     sub = str[0:5]     usr = \"\/usr\/kot\"[5:] )  print(sub, \" \", usr) \/\/ hello kot<\/code><\/pre>\n<p>  <\/p>\n<p>Go \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u0438\u043f <code>rune<\/code> (\u0430\u043b\u0438\u0430\u0441 <code>int32<\/code>) \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f Unicode. \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f <code>for ... range<\/code> \u0438\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 <strong>\u043f\u043e\u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u043e<\/strong> (\u0430 \u043d\u0435 \u043f\u043e\u0431\u0430\u0439\u0442\u043e\u0432\u043e, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c):<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">var str = \"\u043f\u0440\u0438\u0432\u0435\u0442\"  println(str, len(str)) \/\/ \u043f\u0440\u0438\u0432\u0435\u0442 12  for i, c := range str {     println(i, c, string(c)) }  \/\/ 0 1087 \u043f \/\/ 2 1088 \u0440 \/\/ 4 1080 \u0438 \/\/ 6 1074 \u0432 \/\/ 8 1077 \u0435 \/\/ 10 1090 \u0442<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418 \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u043a\u0438\u0440\u0438\u043b\u043b\u0438\u0446\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u043e 2 \u0431\u0430\u0439\u0442\u0430.<\/p>\n<p>  <\/p>\n<p>\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438 (\u043a\u043e\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0447\u0430\u0441\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043a\u043e\u043d\u043a\u0430\u0442\u0435\u043d\u0430\u0446\u0438\u044e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440) \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043b\u0430\u0439\u0441\u0430 \u0431\u0430\u0439\u0442 \u0438\u043b\u0438 <code>strings.Builder<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">import \"strings\"  func main() { \/\/ \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e 1 \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044f \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 `Grow()`     var str strings.Builder      str.Grow(12) \/\/ \u0441\u0440\u0430\u0437\u0443 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u044c      str.WriteString(\"hello\")     str.WriteRune(' ')     str.WriteString(\"\u043c\u0438\u0440\")      println(str.String()) \/\/ hello \u043c\u0438\u0440 }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418 \u0435\u0449\u0451 \u043e\u0434\u043d\u0443 \u0432\u0430\u0436\u043d\u0443\u044e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u043e\u0438\u0442 \u0438\u043c\u0435\u0442\u044c \u0432 \u0432\u0438\u0434\u0443 \u2014 \u044d\u0442\u043e \u043f\u043e\u0434\u0441\u0447\u0435\u0442 \u0434\u043b\u0438\u043d\u044b \u0441\u0442\u0440\u043e\u043a\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u0434\u043b\u044f \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438). \u0415\u0441\u043b\u0438 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0431\u0430\u0439\u0442, \u0438 \u0441\u0442\u0440\u043e\u043a\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e ASCII \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u2014 \u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0430\u0439\u0442 \u0438 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e <strong>\u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432<\/strong> \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">const str = \"hello \u043c\u0438\u0440!\"  println(len(str), utf8.RuneCountInString(str)) \/\/ 13 10<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0443\u0442 \u0434\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 <code>\u043c<\/code>, <code>\u0438<\/code> \u0438 <code>\u0440<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f 2 \u0431\u0430\u0439\u0442\u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0434\u043d\u043e\u0433\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 <code>len == 13<\/code>, \u0430 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u043b\u0438\u0448\u044c 10 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 (\u043f\u0430\u043a\u0435\u0442 <code>utf8<\/code>, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043d\u0430\u043c \u0432 \u043f\u043e\u043c\u043e\u0449\u044c).<\/p>\n<p>  <\/p>\n<blockquote><p>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c: <a href=\"https:\/\/golang-blog.blogspot.com\/2019\/09\/string-byte-rune-character-golang.html\" rel=\"nofollow noopener noreferrer\">\u0421\u0442\u0440\u043e\u043a\u0430, \u0431\u0430\u0439\u0442, \u0440\u0443\u043d\u0430, \u0441\u0438\u043c\u0432\u043e\u043b \u0432 Golang<\/a><\/p><\/blockquote>\n<p>  <\/p>\n<h3 id=\"v-chyom-klyuchevoe-otlichie-slaysa-sreza-ot-massiva\">\u0412 \u0447\u0451\u043c \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u0441\u043b\u0430\u0439\u0441\u0430 (\u0441\u0440\u0435\u0437\u0430) \u043e\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u0430?<\/h3>\n<p>  <\/p>\n<ul>\n<li>\u0421\u0440\u0435\u0437 \u2014 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432, \u043c\u0430\u0441\u0441\u0438\u0432 \u2014 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/li>\n<li>\u0421\u0440\u0435\u0437 \u043c\u043e\u0436\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0432\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c<\/li>\n<\/ul>\n<p>  <\/p>\n<blockquote><p>\u0412 Go \u043d\u0435 \u0431\u044b\u0432\u0430\u0435\u0442 \u0441\u0441\u044b\u043b\u043e\u043a \u2014 \u043d\u043e \u0435\u0441\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438. \u0413\u0434\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f \u043f\u0440\u043e &#171;\u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435&#187; \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0443 &#171;\u043f\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044e&#187;<\/p><\/blockquote>\n<p>\u0421\u043b\u0430\u0439\u0441\u044b \u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0432 Go \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u0401\u043c\u043a\u043e\u0441\u0442\u044c <strong>\u043c\u0430\u0441\u0441\u0438\u0432\u0430<\/strong> \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f, \u0438 \u043f\u043e\u0441\u043b\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0451 \u0443\u0436\u0435 \u043d\u0435\u043b\u044c\u0437\u044f (\u0435\u0433\u043e \u0434\u043b\u0438\u043d\u0430 \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u0435\u0433\u043e \u0442\u0438\u043f\u0430). \u041f\u0430\u043c\u044f\u0442\u044c, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438 \u0435\u0433\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0438, \u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043d\u0443\u043b\u0435\u0432\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u0442\u0438\u043f\u0430 (<code>fasle<\/code> \u0434\u043b\u044f <code>bool<\/code>, <code>0<\/code> \u0434\u043b\u044f <code>int<\/code>, <code>nil<\/code> \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0438 \u0442.\u0434.). \u041d\u0430 \u0441\u0442\u0435\u043a\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u043e\u0431\u044a\u0435\u043c\u043e\u043c 10 MB. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b (\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u043d\u0430\u0442\u044c \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0442.\u0435. \u0447\u0442\u043e-\u0442\u043e \u0432\u0438\u0434\u0430 <code>var a [getSize()]int<\/code> \u0438\u043b\u0438 <code>i := 3; var a [i]int<\/code> \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e):<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">const mySize uint8 = 8  type myArray [mySize]byte  var constSized = [...]int{1, 2, 3} \/\/ \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0430\u043c \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u043a\u043e\u043b-\u0432\u0430 \u044d\u043b-\u043e\u0432<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, <strong>\u043c\u0430\u0441\u0441\u0438\u0432\u044b<\/strong> \u0441 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043d\u043e \u0441 <strong>\u0440\u0430\u0437\u043d\u044b\u043c\u0438<\/strong> \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u043c\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f <strong>\u0440\u0430\u0437\u043d\u044b\u043c\u0438<\/strong> \u0442\u0438\u043f\u0430\u043c\u0438. \u041c\u0430\u0441\u0441\u0438\u0432\u044b <strong>\u043d\u0435 \u043d\u0443\u0436\u043d\u043e<\/strong> \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044f\u0432\u043d\u043e; \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u2014 \u044d\u0442\u043e \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u043c\u0430\u0441\u0441\u0438\u0432, \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0443\u043b\u044f\u043c\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">var a [4]int \/\/ [0 0 0 0]  a[0] = 1  \/\/ [1 0 0 0] i := a[0] \/\/ i == 1<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 <code>[4]int<\/code> \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0447\u0435\u0442\u044b\u0440\u0435 \u0446\u0435\u043b\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u0422\u0430\u043a \u0436\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0447\u0442\u043e \u0432 Go <strong>\u043c\u0430\u0441\u0441\u0438\u0432\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e<\/strong>, \u0442.\u0435. \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u044f \u043c\u0430\u0441\u0441\u0438\u0432 \u0432 \u043a\u0430\u043a\u0443\u044e-\u043b\u0438\u0431\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043e\u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 <strong>\u043a\u043e\u043f\u0438\u044e \u043c\u0430\u0441\u0441\u0438\u0432\u0430<\/strong> <em>(\u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0435\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u043d\u0443\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u044d\u0442\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c, \u0442.\u0435. <code>foo(&amp;a)<\/code>)<\/em>.<\/p>\n<p>  <\/p>\n<p>\u0410 <strong>\u0441\u043b\u0430\u0439\u0441<\/strong> \u0436\u0435 \u044d\u0442\u043e \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u043e\u0434\u0430 \u0432\u0435\u0440\u0441\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043d\u043e \u0441 \u0432\u0430\u0440\u0438\u0430\u0442\u0438\u0432\u043d\u044b\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c (\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u043f\u043e\u0432\u0435\u0440\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430). \u0421\u043b\u0430\u0439\u0441\u044b \u0434\u043e 64 KB \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u044b \u043d\u0430 \u0441\u0442\u0435\u043a\u0435. \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 Go (<a href=\"https:\/\/github.com\/golang\/go\/blob\/36b81acfa19d9fedf6a0cd60c394fd7a7703834e\/src\/runtime\/slice.go#L15-L19\" rel=\"nofollow noopener noreferrer\">src\/runtime\/slice.go<\/a>), \u0442\u043e \u0443\u0432\u0438\u0434\u0438\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">type slice struct {     array unsafe.Pointer \/\/ \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432     len   int            \/\/ \u0434\u043b\u0438\u043d\u0430 (length)     cap   int            \/\/ \u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c (capacity) }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u0441\u043b\u0430\u0439\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043a\u043e\u043c\u0430\u043d\u0434 \u043d\u0438\u0436\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">var (     a = []int{}            \/\/ []              len=0 cap=0     b = []int{1, 2}        \/\/ [1 2]           len=2 cap=2     c = []int{5: 123}      \/\/ [0 0 0 0 0 123] len=6 cap=6     d = make([]int, 5, 10) \/\/ [0 0 0 0 0]     len=5 cap=10 )<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u043d\u0442\u0430\u0439\u043c Go \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 10 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 (\u0432\u044b\u0434\u0435\u043b\u0438\u0442 \u043f\u0430\u043c\u044f\u0442\u044c \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442 \u0438\u0445 \u043d\u0443\u043b\u044f\u043c\u0438) \u043d\u043e <strong>\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441<\/strong> \u043d\u0430\u043c \u0431\u0443\u0434\u0443\u0442 \u0442\u043e\u043b\u044c\u043a\u043e 5, \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>len<\/code> \u0432 <code>5<\/code>, \u0430 <code>cap<\/code> \u0432 <code>10<\/code>. <code>Cap<\/code> \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0451\u043c\u043a\u043e\u0441\u0442\u044c \u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0441\u0442\u043e \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438 \u0440\u043e\u0441\u0442\u0435 \u0441\u043b\u0430\u0439\u0441\u0430 (\u044d\u0442\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0434\u043b\u044f \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438, \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0432 \u0441\u0440\u0435\u0437). \u041f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u043e\u0432\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u0441\u043b\u0430\u0439\u0441 \u043d\u043e\u0432\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 <code>cap<\/code> \u043c\u0435\u043d\u044c\u0448\u0435 <code>len<\/code>.<\/p>\n<p>  <\/p>\n<p><strong>\u0421\u043b\u0430\u0439\u0441\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f &#171;\u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435&#187;<\/strong> <em>(\u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u0430 \u043a\u043e\u043f\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <code>slice<\/code> \u0441\u043e \u0441\u0432\u043e\u0438\u043c\u0438 <code>len<\/code> \u0438 <code>cap<\/code>, \u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432 <code>array<\/code> \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u0442-\u0436\u0435 \u0441\u0430\u043c\u044b\u0439)<\/em>. \u0414\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u0441\u043b\u0430\u0439\u0441\u0430 \u043e\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043a\u043e\u043f\u0438\u044e:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">var (     a = []int{1, 2, 0, 0, 1}     b = make([]int, len(a)) )  copy(b, a)  fmt.Println(a, b) \/\/ [1 2 0 0 1] [1 2 0 0 1]<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u0430\u0436\u043d\u043e\u0439 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e, \u0442\u0430\u043a \u043a\u0430\u043a &#171;\u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c&#187; \u0443 \u0441\u043b\u0430\u0439\u0441\u0430 \u043b\u0435\u0436\u0438\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432 \u2014 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441\u043b\u0430\u0439\u0441\u0430 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0432\u0435\u0437\u0434\u0435, \u0433\u0434\u0435 \u0441\u043b\u0430\u0439\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f (\u0431\u0443\u0434\u044c \u0442\u043e \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u0435 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438 \u0442.\u0434.) \u0434\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430, \u043f\u043e\u043a\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u043b\u0430\u0439\u0441\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d \u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u043d\u043e\u0432\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u043b\u044f \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 (\u0442.\u0435. \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f <code>cap<\/code> \u0441\u043b\u0430\u0439\u0441\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 <strong>\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/strong> \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u0430):<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">var (     one = []int{1, 2} \/\/ [1 2]     two = one         \/\/ [1 2] )  two[0] = 123  fmt.Println(one, two) \/\/ [123 2] [123 2]  one = append(one, 666)  fmt.Println(one, two) \/\/ [123 2 666] [123 2]<\/code><\/pre>\n<p>  <\/p>\n<blockquote><p>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c: <a href=\"https:\/\/habrahabr.ru\/post\/325468\/#slaysy\" rel=\"nofollow noopener noreferrer\">\u041a\u0430\u043a \u043d\u0435 \u043d\u0430\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043d\u0430 \u0433\u0440\u0430\u0431\u043b\u0438 \u0432 Go<\/a>, <a href=\"https:\/\/www.vld.by\/slices-in-go\" rel=\"nofollow noopener noreferrer\">\u0421\u043b\u0430\u0439\u0441\u044b \u0432 Go: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438<\/a>, <a href=\"https:\/\/golangforall.com\/ru\/post\/golang-slice.html\" rel=\"nofollow noopener noreferrer\">\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0438\u043f\u0430 slice \u0432 GO<\/a><\/p><\/blockquote>\n<p>  <\/p>\n<h4 id=\"kak-vy-otsortiruete-massiv-struktur-po-alfavitu-po-polyu-name\">\u041a\u0430\u043a \u0432\u044b \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0435 <strong>\u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440<\/strong> \u043f\u043e \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0443 \u043f\u043e \u043f\u043e\u043b\u044e <code>Name<\/code>?<\/h4>\n<p>  <\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e \u043c\u0430\u0441\u0441\u0438\u0432 \u0432 \u0441\u043b\u0430\u0439\u0441 \u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <code>sort.SliceStable<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">package main  import (   \"fmt\"   \"sort\" )  func main() {   var arr = [...]struct{ Name string }{{Name: \"b\"}, {Name: \"c\"}, {Name: \"a\"}}   \/\/             ^^^^^^^^^^^^^^^^^^^^^ \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441 \u043d\u0443\u0436\u043d\u044b\u043c \u043d\u0430\u043c \u043f\u043e\u043b\u0435\u043c    fmt.Println(arr) \/\/ [{b} {c} {a}]    sort.SliceStable(arr[:], func(i, j int) bool { return arr[i].Name &lt; arr[j].Name })   \/\/                  ^^^ \u0432\u043e\u0442 \u0442\u0443\u0442 \u0432\u0441\u044f \"\u043c\u0430\u0433\u0438\u044f\" - \u0438\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0441\u043b\u0430\u0439\u0441    fmt.Println(arr) \/\/ [{a} {b} {c}] }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u0441\u044f \u043c\u0430\u0433\u0438\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0441\u043b\u0430\u0439\u0441\u0430 \u0438\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 &#171;\u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c&#187; \u0443 \u0441\u043b\u0430\u0439\u0441\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432, \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u0430 <code>sort<\/code> \u043d\u0430\u043c \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043d\u0430\u0434 \u043d\u0438\u043c\u0438. \u0422.\u0435. \u0438\u0437\u043c\u0435\u043d\u044f\u044f \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u0441\u043b\u0430\u0439\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <code>sort.SliceStable<\/code> \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0445 \u0432 \u043d\u0430\u0448\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0435.<\/p>\n<p>  <\/p>\n<h3 id=\"kak-rabotaet-append-v-slayse\">\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 <code>append<\/code> \u0432 \u0441\u043b\u0430\u0439\u0441\u0435?<\/h3>\n<p>  <\/p>\n<p><code>append()<\/code> \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u2014 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432 \u0441\u043b\u0430\u0439\u0441 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439. \u041d\u043e \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0442\u0430\u043c \u0434\u0435\u043b\u0430\u044e\u0442\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e.<\/p>\n<p>  <\/p>\n<p>\u0421\u043f\u0435\u0440\u0432\u0430 <code>append<\/code> \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>len<\/code> \u0438 <code>cap<\/code> \u0443 \u0441\u043b\u0430\u0439\u0441\u0430. \u0415\u0441\u043b\u0438 <code>len<\/code> \u043c\u0435\u043d\u044c\u0448\u0435 \u0447\u0435\u043c <code>cap<\/code>, \u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>len<\/code> \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0430 \u0441\u0430\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0435\u0446 \u0441\u043b\u0430\u0439\u0441\u0430. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e\u0434 \u043d\u043e\u0432\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u043b\u0430\u0439\u0441\u0430, \u0432 \u043d\u0435\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0441\u0442\u0430\u0440\u043e\u0433\u043e, \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u0432 \u043d\u043e\u0432\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432.<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/github.com\/golang\/go\/blob\/36b81acfa19d9fedf6a0cd60c394fd7a7703834e\/src\/runtime\/slice.go#L188-L211\" rel=\"nofollow noopener noreferrer\"><code>\u0423\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0441\u043b\u0430\u0439\u0441\u0430 (\u043c\u0435\u0442\u043e\u0434 growslice<\/code>)<\/a> \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 \u2014 \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440 <strong>\u043c\u0435\u043d\u0435\u0435 1024<\/strong> \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0442\u043e \u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0434\u0432\u043e\u0435; \u0438\u043d\u0430\u0447\u0435 \u0436\u0435 \u0441\u043b\u0430\u0439\u0441 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 ~12.5% \u043e\u0442 \u0441\u0432\u043e\u0435\u0433\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430.<\/p>\n<p>  <\/p>\n<p>\u0427\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c \u2014 \u0435\u0441\u043b\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u043b\u0430\u0439\u0441\u0430 <code>one<\/code> \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u043e\u0434\u0441\u043b\u0430\u0439\u0441 <code>two<\/code>, \u0430 \u0437\u0430\u0442\u0435\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043c \u0441\u043b\u0430\u0439\u0441 <code>one<\/code> (\u0438 \u0435\u0433\u043e \u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d\u0430) \u2014 \u0442\u043e <code>one<\/code> \u0438 <code>two<\/code> \u0431\u0443\u0434\u0443\u0442 \u0443\u0436\u0435 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438!<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">var (     one = make([]int, 4) \/\/ [0 0 0 0]     two = one[1:3]       \/\/ [0 0] )  one[2] = 11  fmt.Println(one, two)           \/\/ [0 0 11 0] [0 11] fmt.Printf(\"%p %p\\n\", one, two) \/\/ 0xc0000161c0 0xc0000161c8  one = append(one, 1)  fmt.Printf(\"%p %p\\n\", one, two) \/\/ 0xc00001c1c0 0xc0000161c8  one[2] = 22  fmt.Println(one, two)           \/\/ [0 0 22 0 1] [0 11] fmt.Printf(\"%p %p\\n\", one, two) \/\/ 0xc00001c1c0 0xc0000161c8<\/code><\/pre>\n<p>  <\/p>\n<p>\u0415\u0441\u0442\u044c \u0435\u0449\u0435 \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043b\u0430\u0439\u0441\u043e\u0432 \u0442\u0443\u0442 \u2014 <a href=\"https:\/\/github.com\/golang\/go\/wiki\/SliceTricks\" rel=\"nofollow noopener noreferrer\">Slice Tricks<\/a>.<\/p>\n<p>  <\/p>\n<blockquote><p>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c: <a href=\"https:\/\/habrahabr.ru\/post\/325468\/#dobavlenie-k-slaysu-append\" rel=\"nofollow noopener noreferrer\">\u041a\u0430\u043a \u043d\u0435 \u043d\u0430\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043d\u0430 \u0433\u0440\u0430\u0431\u043b\u0438 \u0432 Go<\/a><\/p><\/blockquote>\n<p>  <\/p>\n<h4 id=\"zadacha-pro-slaysy-1\">\u0417\u0430\u0434\u0430\u0447\u0430 \u043f\u0440\u043e \u0441\u043b\u0430\u0439\u0441\u044b #1<\/h4>\n<p>  <\/p>\n<p>\u0412\u043e\u043f\u0440\u043e\u0441: \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c 2 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u2014 \u043e\u0434\u043d\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 <code>append()<\/code> \u0447\u0435\u0433\u043e-\u0442\u043e \u0432 \u0441\u043b\u0430\u0439\u0441, \u0430 \u0434\u0440\u0443\u0433\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u0441\u043b\u0430\u0439\u0441, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0430\u043a\u0435\u0442 <code>sort<\/code>. \u041c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0442 \u043b\u0438 \u0441\u043b\u0430\u0439\u0441 \u043f\u0435\u0440\u0432\u0430\u044f \u0438 (\u0438\u043b\u0438) \u0432\u0442\u043e\u0440\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438?<\/p>\n<p>  <\/p>\n<p>\u041e\u0442\u0432\u0435\u0442: <code>append()<\/code> \u043d\u0435 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442 \u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u043b\u0430\u0439\u0441, \u0430 <code>sort<\/code> \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0435\u0441\u043b\u0438 \u043e\u043d \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0431\u044b\u043b \u043d\u0435 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d.<\/p>\n<p>  <\/p>\n<h4 id=\"zadacha-pro-slaysy-2\">\u0417\u0430\u0434\u0430\u0447\u0430 \u043f\u0440\u043e \u0441\u043b\u0430\u0439\u0441\u044b #2<\/h4>\n<p>  <\/p>\n<p>\u0412\u043e\u043f\u0440\u043e\u0441: \u0427\u0442\u043e \u0432\u044b\u0432\u0435\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430?<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">package main  import \"fmt\"  func main() {   a := [5]int{1, 2, 3, 4, 5}   t := a[3:4:4]    fmt.Println(t[0]) }<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041e\u0442\u0432\u0435\u0442<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<p>\u0412\u044b\u0432\u0435\u0434\u0435\u0442 <code>4<\/code><\/p>\n<\/div><\/div>\n<p>  <\/p>\n<p>\u041e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435: \u0422\u0430\u043a\u043e\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u0434\u0430\u0442\u044c <code>capacity<\/code> (\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c) \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434-\u0441\u043b\u0430\u0439\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u0435\u043d &#171;\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u0438\u043d\u0443\u0441 \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0438\u0437 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0445 \u0441\u043a\u043e\u0431\u043a\u0430\u0445&#187;, \u0442.\u0435. \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u044b\u0448\u0435 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u0435\u043d 1 (\u0442.\u043a. \u043e\u0442 \u0447\u0435\u0442\u044b\u0440\u0451\u0445, \u0442.\u0435. \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0432\u044b\u0447\u0438\u0442\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439, \u0442.\u0435. \u0442\u0440\u043e\u0439\u043a\u0443). \u0415\u0441\u043b\u0438 \u0431\u044b \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u043b\u043e \u0432\u0438\u0434 <code>a[3:4:5]<\/code>, \u0442\u043e <code>cap<\/code> \u0431\u044b\u043b\u0430 \u0431\u044b \u0440\u0430\u0432\u043d\u0430 2 (5 \u2014 3 = 2). \u041d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0430 \u0441\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u043d \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u044d\u0442\u0430 \u0448\u0442\u0443\u043a\u0430 \u0432 Go 1.2.<\/p>\n<p>  <\/p>\n<blockquote><p>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c: <a href=\"https:\/\/stackoverflow.com\/a\/27938683\/2252921\" rel=\"nofollow noopener noreferrer\"><code>Slicing a slice with slice [a : b : c]<\/code><\/a>, <a href=\"https:\/\/go.dev\/ref\/spec#Slice_expressions\" rel=\"nofollow noopener noreferrer\">Full slice expressions<\/a><\/p><\/blockquote>\n<p>  <\/p>\n<h3 id=\"kakoe-u-slaysa-zero-value-kakie-operacii-nad-nim-vozmozhny\">\u041a\u0430\u043a\u043e\u0435 \u0443 \u0441\u043b\u0430\u0439\u0441\u0430 zero value? \u041a\u0430\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 \u043d\u0438\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b?<\/h3>\n<p>  <\/p>\n<p>Zero value \u0443 \u0441\u043b\u0430\u0439\u0441\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 <code>nil<\/code>, \u0430 <code>len<\/code> \u0438 <code>cap<\/code> \u0440\u0430\u0432\u043d\u044b \u043d\u0443\u043b\u044e, \u0442\u0430\u043a \u043a\u0430\u043a &#171;\u043f\u043e\u0434 \u043d\u0438\u043c&#187; \u043d\u0435\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">var a []int  println(a == nil, len(a), cap(a)) \/\/ true 0 0 a = append(a, 1) println(a == nil, len(a), cap(a)) \/\/ false 1 1<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u044b\u0448\u0435 \u2014 \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e <code>a == nil<\/code> (\u0441\u043b\u0430\u0439\u0441 &#171;\u043d\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d&#187;), \u0441 \u044d\u0442\u0438\u043c \u0441\u043b\u0430\u0439\u0441\u043e\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f <code>append<\/code> \u2014 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 Go \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u0438\u0436\u0435\u043b\u0435\u0436\u0430\u0449\u0438\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043a, \u043a\u0430\u043a \u0438 \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e \u2014 <strong>\u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0439 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0441\u043b\u0430\u0439\u0441\u0430<\/strong> \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0435\u0433\u043e \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c \u043a <code>nil<\/code>.<\/p>\n<p>  <\/p>\n<p>\u0422\u0430\u043a \u0436\u0435 \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u044f <code>make<\/code> \u0434\u043b\u044f \u0441\u043b\u0430\u0439\u0441\u0430 \u2014 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0435-\u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u044e, \u0447\u0442\u043e \u0447\u0430\u0441\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>  <\/p>\n<h3 id=\"chto-mozhesh-rasskazat-pro-map\">\u0427\u0442\u043e \u043c\u043e\u0436\u0435\u0448\u044c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e <code>map<\/code>?<\/h3>\n<p>  <\/p>\n<p>\u041a\u0430\u0440\u0442\u0430 (<code>map<\/code> \u0438\u043b\u0438 <code>hashmap<\/code>) \u2014 \u044d\u0442\u043e <strong>\u043d\u0435\u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u0430\u044f<\/strong> \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f \u043f\u0430\u0440 \u0432\u0438\u0434\u0430 \u043a\u043b\u044e\u0447-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">type myMap map[string]int<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0434\u043e\u0431\u043d\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c \u0438 \u0441\u043b\u0430\u0439\u0441\u0430\u043c, \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u043c\u0430\u043f\u044b \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043a\u043e\u0431\u043e\u043a:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">var m = make(map[string]int) \/\/ \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f  m[\"one\"] = 1 \/\/ \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043c\u0430\u043f\u0443  fmt.Println(m[\"one\"], m[\"two\"]) \/\/ 1 0<\/code><\/pre>\n<p>  <\/p>\n<blockquote><p>\u041b\u0443\u0447\u0448\u0435 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u0437\u0430\u0440\u0430\u043d\u0435\u0435 (\u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u044f \u0432\u0442\u043e\u0440\u044b\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>make<\/code>), \u0435\u0441\u043b\u0438 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u2014 \u0438\u0437\u0431\u0435\u0436\u0438\u043c \u044d\u0432\u0430\u043a\u0443\u0430\u0446\u0438\u0439<\/p><\/blockquote>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 <code>m[\"two\"]<\/code> \u0432\u0435\u0440\u043d\u0443\u043b\u0441\u044f <code>0<\/code> \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0443\u043b\u0435\u0432\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u0442\u0438\u043f\u0430 <code>int<\/code>. \u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0432\u0438\u0434\u0430 (\u0434\u043e\u0441\u0442\u0443\u043f \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u043a\u0430\u0440\u0442\u044b \u043c\u043e\u0436\u0435\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0434\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0434\u043d\u043e\u0433\u043e) \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u0443\u044e &#171;multiple assignment&#187;:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">var m = map[string]int{\"one\": 1}  v1, ok1 := m[\"one\"] \/\/ \u0447\u0442\u0435\u043d\u0438\u0435 v2, ok2 := m[\"two\"]  fmt.Println(v1, ok1) \/\/ 1 true fmt.Println(v2, ok2) \/\/ 0 false  for k, v := range m { \/\/ \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u0432\u0441\u0435\u0445 \u044d\u043b-\u043e\u0432 \u043c\u0430\u043f\u044b     fmt.Println(k, v) }  delete(m, \"one\") \/\/ \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435  v1, ok1 = m[\"one\"]  fmt.Println(v1, ok1) \/\/ 0 false<\/code><\/pre>\n<p>  <\/p>\n<p>\u041c\u0430\u043f\u044b \u0432\u0441\u0435\u0433\u0434\u0430 <strong>\u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435<\/strong> <em>(\u0432\u043e\u043e\u0431\u0449\u0435-\u0442\u043e Go \u043d\u0435 \u0431\u044b\u0432\u0430\u0435\u0442 \u0441\u0441\u044b\u043b\u043e\u043a, \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c 2 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441 1 \u0430\u0434\u0440\u0435\u0441\u043e\u043c, \u043a\u0430\u043a \u0432 \u0421++ \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440; \u043d\u043e \u0437\u0430\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c 2 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043d\u0430 \u043e\u0434\u0438\u043d \u0430\u0434\u0440\u0435\u0441 \u2014 \u043d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438)<\/em>. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0431\u044b\u0442\u044c \u0442\u043e\u0447\u043d\u0435\u0435, \u0442\u043e \u043c\u0430\u043f\u0430 \u0432 Go \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e <strong>\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c<\/strong> \u043d\u0430 <a href=\"https:\/\/github.com\/golang\/go\/blob\/36b81acfa19d9fedf6a0cd60c394fd7a7703834e\/src\/runtime\/map.go#L116-L130\" rel=\"nofollow noopener noreferrer\"><code>\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 hmap<\/code><\/a>:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">type hmap struct {     \/\/ Note: the format of the hmap is also encoded in cmd\/compile\/internal\/reflectdata\/reflect.go.     \/\/ Make sure this stays in sync with the compiler's definition.     count     int \/\/ # live cells == size of map.  Must be first (used by len() builtin)     flags     uint8     B         uint8  \/\/ log_2 of # of buckets (can hold up to loadFactor * 2^B items)     noverflow uint16 \/\/ approximate number of overflow buckets; see incrnoverflow for details     hash0     uint32 \/\/ hash seed      buckets    unsafe.Pointer \/\/ array of 2^B Buckets. may be nil if count==0.     oldbuckets unsafe.Pointer \/\/ previous bucket array of half the size, non-nil only when growing     nevacuate  uintptr        \/\/ progress counter for evacuation (buckets less than this have been evacuated)      extra *mapextra \/\/ optional fields }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0430\u043a \u0436\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <code>hmap<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432<\/li>\n<li>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e &#171;\u0432\u0435\u0434\u0435\u0440&#187; (\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0432 \u0432\u0438\u0434\u0435 \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u0430 \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439)<\/li>\n<li>Seed \u0434\u043b\u044f \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0445\u044d\u0448\u0435\u0439 (\u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0437\u0430ddos\u0438\u0442\u044c \u2014 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u043a\u043b\u044e\u0447\u0438 \u0442\u0430\u043a, \u0447\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u0441\u043f\u043b\u043e\u0448\u043d\u044b\u0435 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0438)<\/li>\n<li>\u0412\u0441\u044f\u043a\u0438\u0435 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u0438 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 buckets, \u0433\u0434\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f<\/li>\n<\/ul>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/aj\/yg\/nf\/ajygnfp_745tid9futbqteysivc.png\" data-src=\"https:\/\/habrastorage.org\/webt\/aj\/yg\/nf\/ajygnfp_745tid9futbqteysivc.png\"\/><\/p>\n<p>  <\/p>\n<p>\u041d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u0441\u0445\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u2014 \u0435\u0441\u0442\u044c \u0445\u044d\u0434\u0435\u0440 hmap, \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u0435\u0441\u0442\u044c map \u0432 Go (\u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e var, \u043d\u043e \u043d\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u043f\u0430\u0434\u0430\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0432\u0441\u0442\u0430\u0432\u043a\u0438). \u041f\u043e\u043b\u0435 <code>buckets<\/code> \u2014 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043f\u0430\u0440 \u043a\u043b\u044e\u0447-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0442\u0430\u043a\u0438\u0445 &#171;\u0432\u0435\u0434\u0435\u0440&#187; \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043b\u0435\u0436\u0438\u0442 8 \u043f\u0430\u0440. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0432 &#171;\u0432\u0435\u0434\u0440\u0435&#187; \u043b\u0435\u0436\u0430\u0442 \u0441\u043b\u043e\u0442\u044b \u0434\u043b\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0431\u0438\u0442\u043e\u0432 \u0445\u044d\u0448\u0435\u0439 (<code>e0..e7<\/code> \u043d\u0430\u0437\u0432\u0430\u043d\u043e <code>e<\/code> \u2014 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e extra hash bits). \u0414\u0430\u043b\u0435\u0435 \u043b\u0435\u0436\u0430\u0442 \u043a\u043b\u044e\u0447\u0438 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u0430\u043a \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u043a\u043b\u044e\u0447\u0435\u0439, \u043f\u043e\u0442\u043e\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e \u0445\u044d\u0448 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u043a\u043e\u0435 &#171;\u0432\u0435\u0434\u0440\u043e&#187; \u043c\u044b \u043a\u043b\u0430\u0434\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e &#171;\u0432\u0435\u0434\u0440\u0430&#187; \u043c\u043e\u0436\u0435\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u0434\u043e 8 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0439, \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e &#171;\u0432\u0435\u0434\u0440\u0430&#187; \u0435\u0441\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435, \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0435 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0438\u043b\u043e\u0441\u044c.<\/p>\n<p>  <\/p>\n<h4 id=\"kak-rastet-map\">\u041a\u0430\u043a \u0440\u0430\u0441\u0442\u0435\u0442 <code>map<\/code>?<\/h4>\n<p>  <\/p>\n<p>\u0412 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/github.com\/golang\/go\/blob\/36b81acfa19d9fedf6a0cd60c394fd7a7703834e\/src\/runtime\/map.go#L69\" rel=\"nofollow noopener noreferrer\">\u043d\u0430\u0439\u0442\u0438 \u0441\u0442\u0440\u043e\u0447\u043a\u0443<\/a> <code>Maximum average load of a bucket that triggers growth is 6.5<\/code>. \u0422\u043e \u0435\u0441\u0442\u044c, \u0435\u0441\u043b\u0438 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c &#171;\u0432\u0435\u0434\u0440\u0435&#187; \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u0431\u043e\u043b\u0435\u0435 6,5 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 <code>buckets<\/code>. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0430\u0441\u0441\u0438\u0432 <strong>\u0432 2 \u0440\u0430\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0435<\/strong>, \u0430 \u0441\u0442\u0430\u0440\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u043d\u0435\u0433\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u043c\u0438 \u043f\u043e\u0440\u0446\u0438\u044f\u043c\u0438 \u043a\u0430\u0436\u0434\u044b\u0435 \u0432\u0441\u0442\u0430\u0432\u043a\u0443 \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0443\u043f\u043d\u044b\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0447\u0443\u0442\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 <strong>\u044d\u0432\u0430\u043a\u0443\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445<\/strong> (\u043f\u0440\u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u0442\u043e\u0436\u0435, \u043d\u0430\u043c \u0436\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0441\u043a\u0430\u0442\u044c \u0432 \u0434\u0432\u0443\u0445 \u043c\u0435\u0441\u0442\u0430\u0445). \u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u044d\u0432\u0430\u043a\u0443\u0430\u0446\u0438\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<p>  <\/p>\n<p>\u0418\u0437-\u0437\u0430 \u044d\u0432\u0430\u043a\u0443\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u043b\u044c\u0437\u044f \u0438 \u0432\u0437\u044f\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u043c\u0430\u043f\u044b \u2014 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0447\u0442\u043e \u043c\u044b \u0432\u0437\u044f\u043b\u0438 \u0430\u0434\u0440\u0435\u0441 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0430 \u043f\u043e\u0442\u043e\u043c \u043c\u0430\u043f\u0430 \u0432\u044b\u0440\u043e\u0441\u043b\u0430, \u0432\u044b\u0434\u0435\u043b\u0438\u043b\u0430\u0441\u044c \u043d\u043e\u0432\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c, \u0434\u0430\u043d\u043d\u044b\u0435 \u044d\u0432\u0430\u043a\u0443\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c, \u0441\u0442\u0430\u0440\u044b\u0435 \u0443\u0434\u0430\u043b\u0438\u043b\u0438\u0441\u044c, \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0441\u0442\u0430\u043b \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u044b.<\/p>\n<p>  <\/p>\n<h4 id=\"chto-tam-pro-poisk\">\u0427\u0442\u043e \u0442\u0430\u043c \u043f\u0440\u043e \u043f\u043e\u0438\u0441\u043a?<\/h4>\n<p>  <\/p>\n<p>\u041f\u043e\u0438\u0441\u043a, \u0435\u0441\u043b\u0438 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u0438 \u0441\u043b\u043e\u0436\u043d\u043e: \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0430\u043c &#171;\u0432\u0435\u0434\u0435\u0440&#187;, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435, \u0435\u0441\u043b\u0438 \u0432 \u044d\u0442\u043e\u043c \u043d\u0435 \u043d\u0430\u0448\u043b\u0438. \u041f\u043e\u0438\u0441\u043a \u0432 &#171;\u0432\u0435\u0434\u0440\u0435&#187; \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0445\u044d\u0448\u0430, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u043e 8 \u0431\u0438\u0442 (\u0432\u043e\u0442 \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u044d\u0442\u0438 <code>e0...e7<\/code> \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u2014 \u044d\u0442\u043e &#171;\u043c\u0438\u043d\u0438&#187; \u0445\u044d\u0448 \u043f\u0430\u0440\u044b \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f). \u0415\u0441\u043b\u0438 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u043b\u043e, \u0438\u0434\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435, \u0435\u0441\u043b\u0438 \u0441\u043e\u0432\u043f\u0430\u043b\u043e, \u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0442\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u0435\u0435 \u2014 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0433\u0434\u0435 \u043b\u0435\u0436\u0438\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043a\u043b\u044e\u0447, \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u0432\u0430\u0435\u043c\u044b\u0439 \u043a\u0430\u043a \u0438\u0441\u043a\u043e\u043c\u044b\u0439, \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c \u0440\u0430\u0432\u0435\u043d \u043b\u0438 \u043e\u043d \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u043b\u0438. \u0415\u0441\u043b\u0438 \u0440\u0430\u0432\u0435\u043d, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c.<\/p>\n<p>  <\/p>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043c\u0438\u0440 \u043d\u0435 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0435\u043d. \u041a\u043e\u0433\u0434\u0430 \u0438\u043c\u044f \u0445\u0435\u0448\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u0435\u0440\u044f\u044e\u0442\u0441\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u0445\u0435\u0448, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043a\u043e\u0440\u043e\u0447\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432 \u043b\u044e\u0431\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0445\u0435\u0448 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u044b \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0438 \u043a\u043e\u0433\u0434\u0430 \u043f\u043e \u0434\u0432\u0443\u043c \u043a\u043b\u044e\u0447\u0430\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0445\u0435\u0448\u0438. \u041a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u043f\u043e\u0438\u0441\u043a \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0440\u043e\u0436\u0435 \u0447\u0435\u043c <code>O(1)<\/code> (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u044d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u043a\u0435\u0448\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0438 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u044f\u043c\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u0445\u044d\u0448\u0435\u0439), \u0442\u0430\u043a \u0447\u0442\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u0432\u044b\u0433\u043e\u0434\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0441\u043b\u0430\u0439\u0441\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u0436\u0435\u043b\u0438 \u0447\u0435\u043c \u043f\u043e\u0438\u0441\u043a \u0432 \u043c\u0430\u043f\u0435 (\u043f\u0438\u0448\u0438\u0442\u0435 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438).<\/p>\n<p>  <\/p>\n<blockquote><p>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c: <a href=\"https:\/\/habr.com\/ru\/post\/457728\/\">\u0425\u044d\u0448 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 Go. \u0414\u0435\u0442\u0430\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/a>, <a href=\"https:\/\/kodazm.ru\/articles\/go\/kazhetsya-poisk-v-map-dorozhe-chem-o1\/\" rel=\"nofollow noopener noreferrer\">\u041a\u0430\u0436\u0435\u0442\u0441\u044f, \u043f\u043e\u0438\u0441\u043a \u0432 map \u0434\u043e\u0440\u043e\u0436\u0435 \u0447\u0435\u043c O(1)<\/a><\/p><\/blockquote>\n<p>  <\/p>\n<h4 id=\"est-li-u-map-takie-zhe-metody-kak-u-slaysa-len-cap\">\u0415\u0441\u0442\u044c \u043b\u0438 \u0443 <code>map<\/code> \u0442\u0430\u043a\u0438\u0435 \u0436\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043a\u0430\u043a \u0443 \u0441\u043b\u0430\u0439\u0441\u0430: <code>len<\/code>, <code>cap<\/code>?<\/h4>\n<p>  <\/p>\n<p>\u0423 \u043c\u0430\u043f\u044b \u0435\u0441\u0442\u044c <code>len<\/code> \u043d\u043e \u043d\u0435\u0442 <code>cap<\/code>. \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e <code>overflow<\/code> \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 &#171;\u043a\u0443\u0434\u0430-\u0442\u043e&#187; \u043a\u043e\u0433\u0434\u0430 \u043c\u0430\u043f\u0430 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f, \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443 \u043d\u0430\u0441 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c <code>capacity<\/code>.<\/p>\n<p>  <\/p>\n<h4 id=\"kakie-tipy-klyuchey-razresheny-dlya-klyucha-v-map\">\u041a\u0430\u043a\u0438\u0435 \u0442\u0438\u043f\u044b \u043a\u043b\u044e\u0447\u0435\u0439 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u044b \u0434\u043b\u044f \u043a\u043b\u044e\u0447\u0430 \u0432 <code>map<\/code>?<\/h4>\n<p>  <\/p>\n<p>\u041b\u044e\u0431\u044b\u043c <strong>\u0441\u0440\u0430\u0432\u043d\u0438\u043c\u044b\u043c<\/strong> (comparable) \u0442\u0438\u043f\u043e\u043c, \u0442.\u0435. \u0431\u0443\u043b\u0435\u0432\u044b, \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435, \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435, \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438, \u043a\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u044b\u0435 \u0442\u0438\u043f\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 <strong>\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b<\/strong> \u0438\u043b\u0438 <strong>\u043c\u0430\u0441\u0441\u0438\u0432\u044b<\/strong>, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u0438 \u0442\u0438\u043f\u044b. \u0421\u043b\u0430\u0439\u0441\u044b, \u043c\u0430\u043f\u044b \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u0438 \u0442\u0438\u043f\u044b \u043d\u0435 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <code>==<\/code> \u0438\u043b\u0438 <code>!=<\/code>.<\/p>\n<p>  <\/p>\n<h4 id=\"mozhet-li-klyuchom-byt-struktura-esli-mozhet-to-vsegda-li\">\u041c\u043e\u0436\u0435\u0442 \u043b\u0438 \u043a\u043b\u044e\u0447\u043e\u043c \u0431\u044b\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430? \u0415\u0441\u043b\u0438 \u043c\u043e\u0436\u0435\u0442, \u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u043b\u0438?<\/h4>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0431\u044b\u043b\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u044b\u0448\u0435 \u2014 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u043b\u044e\u0447\u043e\u043c \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043c\u044b \u0432 \u043f\u043e\u043b\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043d\u0435 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043c \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0441\u043b\u0430\u0439\u0441, \u043c\u0430\u043f\u0443 \u0438\u043b\u0438 \u043b\u044e\u0431\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 non-comparable \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u0444\u0443\u043d\u043a\u0446\u0438\u044e).<\/p>\n<p>  <\/p>\n<h4 id=\"chto-budet-v-map-esli-ne-delat-make-ili-short-assign\">\u0427\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432 <code>map<\/code>, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c <code>make<\/code> \u0438\u043b\u0438 <code>short assign<\/code>?<\/h4>\n<p>  <\/p>\n<p>\u0411\u0443\u0434\u0435\u0442 \u043f\u0430\u043d\u0438\u043a\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0432 \u043d\u0435\u0451 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c), \u0442\u0430\u043a \u043a\u0430\u043a \u043b\u044e\u0431\u044b\u0435 &#171;\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0435&#187; \u0442\u0438\u043f\u044b (\u0430 \u043c\u0430\u043f\u0430 \u043a\u0430\u043a \u043c\u044b \u0437\u043d\u0430\u0435\u043c \u0442\u0430\u043a\u043e\u0432\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f) \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0438\u043c\u0438.<\/p>\n<p>  <\/p>\n<h4 id=\"race-condition-potokobezopasna-li-mapa\">Race condition. \u041f\u043e\u0442\u043e\u043a\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0430 \u043b\u0438 \u043c\u0430\u043f\u0430?<\/h4>\n<p>  <\/p>\n<p>\u041d\u0435\u0442, \u043f\u043e\u0442\u043e\u043a\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>sync.Map<\/code>. \u0414\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0432\u043e\u043a\u0440\u0443\u0433 \u043c\u0430\u043f\u044b \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0432\u0438\u0434\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">type ProtectedIntMap struct {     mx sync.RWMutex     m  map[string]int }  func (m *ProtectedIntMap) Load(key string) (val int, ok bool) {     m.mx.RLock()     val, ok = m.m[key]     m.mx.RUnlock()      return }  func (m *ProtectedIntMap) Store(key string, value int) {     m.mx.Lock()     m.m[key] = value     m.mx.Unlock() }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"chto-takoe-interfeys\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441?<\/h3>\n<p>  <\/p>\n<p><strong>\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b<\/strong> \u2014 \u044d\u0442\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0438 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f. \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u2014 \u044d\u0442\u043e \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b. \u041e\u043d\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c \u043e\u043f\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438, \u0430 \u043d\u0435 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432. \u0412 \u043e\u0431\u0449\u0435\u043c \u0441\u043c\u044b\u0441\u043b\u0435 \u2014 \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>  <\/p>\n<h4 id=\"kak-ustroen-duck-typing-v-go\">\u041a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d Duck-typing \u0432 Go?<\/h4>\n<p>  <\/p>\n<blockquote><p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u0443\u0442\u043a\u0430, \u043f\u043b\u0430\u0432\u0430\u0435\u0442 \u043a\u0430\u043a \u0443\u0442\u043a\u0430 \u0438 \u043a\u0440\u044f\u043a\u0430\u0435\u0442 \u043a\u0430\u043a \u0443\u0442\u043a\u0430, \u0442\u043e \u044d\u0442\u043e, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0443\u0442\u043a\u0430 \u0438 \u0435\u0441\u0442\u044c.<\/p><\/blockquote>\n<p>\u0415\u0441\u043b\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b, \u0447\u0442\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435, \u0438 \u0438\u0445 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u2014 \u043e\u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441.<\/p>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u043d\u043e <em>(\u043f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u0438\u0437\u043c \u2014 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432)<\/em> \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0432 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u044d\u0442\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043c\u0435\u0442\u043e\u0434\u043e\u0432.<\/p>\n<p>  <\/p>\n<h4 id=\"interfeysnyy-tip\">\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u044b\u0439 \u0442\u0438\u043f<\/h4>\n<p>  <\/p>\n<p>\u0412 Go \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u044b\u0439 \u0442\u0438\u043f <a href=\"https:\/\/github.com\/golang\/go\/blob\/36b81acfa19d9fedf6a0cd60c394fd7a7703834e\/src\/runtime\/runtime2.go#L202-L205\" rel=\"nofollow noopener noreferrer\">\u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a<\/a>:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">type iface struct {     tab  *itab     data unsafe.Pointer }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0413\u0434\u0435 <code>tab<\/code> \u2014 \u044d\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 <strong>Interface Table<\/strong> \u0438\u043b\u0438 <code>itable<\/code> \u2014 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0445\u0440\u0430\u043d\u0438\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0442\u0438\u043f\u0435 \u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0434\u043b\u044f \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0430 <code>data<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043b\u0435\u0436\u0430\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 (\u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0442\u0438\u043f\u043e\u043c).<\/p>\n<p>  <\/p>\n<p>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445, \u043f\u043e\u043c\u0438\u043c\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e, \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430. \u0422\u0435\u043f\u0435\u0440\u044c, \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, runtime Go \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c <code>itable<\/code> \u043d\u0430 \u043b\u0435\u0442\u0443 <em>(late binding)<\/em> \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043f\u0430\u0440\u044b. \u042d\u0442\u043e\u0442 <code>itable<\/code> \u043a\u0435\u0448\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0441\u0447\u0451\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437.<\/p>\n<p>  <\/p>\n<p>\u0417\u043d\u0430\u044f \u044d\u0442\u043e, \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u043f\u043e\u0447\u0435\u043c\u0443 Go \u043b\u043e\u0432\u0438\u0442 \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u0442\u0438\u043f\u043e\u0432 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u043d\u043e \u043a\u0430\u0441\u0442\u0438\u043d\u0433 \u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u2014 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p>\u0427\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c \u2014 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c <code>nil<\/code>. \u041d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u0431\u044a\u0435\u043a\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0432 Go \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u0432\u0430 \u043f\u043e\u043b\u044f: <code>tab<\/code> \u0438 <code>data<\/code> \u2014 \u043f\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c Go, \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0432\u0435\u043d <code>nil<\/code> \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043e\u0431\u0430 \u044d\u0442\u0438\u0445 \u043f\u043e\u043b\u044f \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b (<a href=\"https:\/\/go.dev\/doc\/faq#nil_error\" rel=\"nofollow noopener noreferrer\">faq<\/a>):<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">var (     builder  *strings.Builder     stringer fmt.Stringer )  fmt.Println(builder, stringer) \/\/ nil nil fmt.Println(stringer == nil)   \/\/ true fmt.Println(builder == nil)    \/\/ true  stringer = builder  fmt.Println(builder, stringer) \/\/ nil nil fmt.Println(stringer == nil)   \/\/ false (!!!) fmt.Println(builder == nil)    \/\/ true<\/code><\/pre>\n<p>  <\/p>\n<h4 id=\"pustoy-interface\">\u041f\u0443\u0441\u0442\u043e\u0439 <code>interface{}<\/code><\/h4>\n<p>  <\/p>\n<p>\u0415\u043c\u0443 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 \u043b\u044e\u0431\u043e\u0439 \u0442\u0438\u043f. \u041f\u0443\u0441\u0442\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u043d\u0443\u0436\u043d\u043e \u0432 \u0441\u0430\u043c\u044b\u0445 \u043a\u0440\u0430\u0439\u043d\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445.<\/p>\n<p>  <\/p>\n<blockquote><p>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c: <a href=\"https:\/\/habr.com\/ru\/post\/276981\/\">\u041a\u0440\u0430\u0448-\u043a\u0443\u0440\u0441 \u043f\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u043c \u0432 Go<\/a>, <a href=\"https:\/\/medium.com\/nuances-of-programming\/%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%BE%D0%B2-%D0%B2-golang-79fc176b481a\" rel=\"nofollow noopener noreferrer\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0432 Golang<\/a>, <a href=\"https:\/\/habr.com\/ru\/post\/597461\/\">\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0432 Go \u2014 \u043a\u0430\u043a \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0432 \u043d\u043e\u0433\u0443<\/a><\/p><\/blockquote>\n<p>  <\/p>\n<h4 id=\"na-kakoy-storone-opisyvat-interfeys---na-peredayuschey-ili-prinimayuschey\">\u041d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u2014 \u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0435\u0439 \u0438\u043b\u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0435\u0439?<\/h4>\n<p>  <\/p>\n<p>\u041c\u043d\u043e\u0433\u043e\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f, \u043d\u043e \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043d\u0430 <strong>\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0435\u0439<\/strong> \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u2014 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432\u0430\u0448 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043a\u043e\u0434\u0430\/\u043f\u0430\u043a\u0435\u0442\u0430\/\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>  <\/p>\n<p>\u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0435\u0441\u043b\u0438 \u043d\u0430\u043c \u0432 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u043c\u0435\u0441\u0442\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f &#171;\u0447\u0442\u043e-\u0442\u043e \u0447\u0442\u043e \u0443\u043c\u0435\u0435\u0442 \u0441\u0435\u0431\u044f \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c&#187;, \u0438\u043b\u0438 \u2014 \u0443\u043c\u0435\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 <code>Close() error<\/code>, \u0438\u043b\u0438 (\u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438) \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">type something interface {     Close() error }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u043e \u043e\u043d (\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441) \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435. \u0422\u0430\u043a \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u0437\u043d\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u043d\u0435\u0451 \u043c\u043e\u0436\u0435\u0442 &#171;\u043f\u0440\u0438\u043b\u0435\u0442\u0435\u0442\u044c&#187;, \u043d\u043e \u0442\u043e\u0447\u043d\u043e \u0437\u043d\u0430\u0435\u0442 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e &#171;\u0447\u0435\u0433\u043e-\u0442\u043e&#187;. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u043d\u0432\u0435\u0440\u0441\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438, \u0438 \u043a\u043e\u0434 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0449\u0435 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\/\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>  <\/p>\n<h3 id=\"chto-takoe-zamykanie\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0435?<\/h3>\n<p>  <\/p>\n<p>\u0417\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f \u2014 \u044d\u0442\u043e \u0442\u0430\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435 \u0438 \u0438\u043c \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435, \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u043d\u0438 \u0431\u044b\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u044b.<\/p>\n<p>  <\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u0438, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c \u0438\u043c\u044f \u2014 \u044d\u0442\u043e <strong>\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0435<\/strong> \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0424\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0431\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0438\u043c\u0435\u043d\u0438 \u2014 \u044d\u0442\u043e <strong>\u0430\u043d\u043e\u043d\u0438\u043c\u043d\u044b\u0435<\/strong> \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">func main() {     var text = \"some string\"      var ourFunc = func() { \/\/ \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0435         println(text)     }      ourFunc() \/\/ some string     getFunc()() \/\/ another string }  func getFunc() func() {     return func() { \/\/ \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u043e\u0435         println(\"another string\")     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0417\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0438 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0438. \u041e\u0434\u043d\u0430 \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u043b\u043e\u0432\u0443\u0448\u0435\u043a \u2014 \u044d\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0437\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u0439 \u0432 \u0446\u0438\u043a\u043b\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">var funcs = make([]func(), 0, 5)  for i := 0; i &lt; 5; i++ {     funcs = append(funcs, func() { println(\"counter =\", i) })      \/\/ \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0430\u043a:     \/\/var value = i     \/\/funcs = append(funcs, func() { println(\"counter =\", value) }) }  for _, f := range funcs {     f() }  \/\/ counter = 5 (\u0442\u0430\u043a \u0432\u0441\u0435 5 \u0440\u0430\u0437)<\/code><\/pre>\n<p>  <\/p>\n<blockquote><p>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c: <a href=\"https:\/\/kodazm.ru\/articles\/go\/zamykaniya\/\" rel=\"nofollow noopener noreferrer\">\u0417\u0430\u043c\u044b\u043a\u0430\u043d\u0438\u044f<\/a><\/p><\/blockquote>\n<p>  <\/p>\n<h3 id=\"chto-takoe-serializaciya-zachem-ona-nuzhna\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f? \u0417\u0430\u0447\u0435\u043c \u043e\u043d\u0430 \u043d\u0443\u0436\u043d\u0430?<\/h3>\n<p>  <\/p>\n<p>\u0421\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432 \u043f\u043e\u0442\u043e\u043a \u0431\u0430\u0439\u0442\u043e\u0432 <strong>\u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438<\/strong>. \u041e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <strong>\u0434\u0435<\/strong>\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f (\u0442.\u0435. \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\/\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0431\u0430\u0439\u0442\u043e\u0432). \u0421\u0438\u043d\u043e\u043d\u0438\u043c\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0442\u0435\u0440\u043c\u0438\u043d &#171;\u043c\u0430\u0440\u0448\u0430\u043b\u0438\u043d\u0433&#187; (\u043e\u0442 \u0430\u043d\u0433\u043b. <code>marshal<\/code> \u2014 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0432\u0430\u0442\u044c).<\/p>\n<p>  <\/p>\n<p>\u0418\u0437 \u043c\u0438\u043d\u0443\u0441\u043e\u0432 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0435 \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u044f\u0446\u0438\u0438, \u0442.\u0435. \u043f\u043e\u0441\u043b\u0435 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 &#171;\u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0435&#187; \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p>\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 Go \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0432 json-\u043e\u0431\u044a\u0435\u043a\u0442\u044b. \u041a\u0440\u043e\u043c\u0435 json \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043a\u043e\u0434\u0435\u043a\u0438 \u0442\u0438\u043f\u0430 <code>MessagePack<\/code>, <code>CBOR<\/code> \u0438 \u0442.\u0434.<\/p>\n<p>  <\/p>\n<h3 id=\"chto-takoe-type-switch\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 <code>type switch<\/code>?<\/h3>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u0438\u043f\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u0430 \u043d\u0435 \u0435\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u043e\u0434\u043d\u043e\u0433\u043e <code>switch<\/code> \u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c <code>case<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">package main  func checkType(i interface{}) {   switch i.(type) {   case int:     println(\"is integer\")    case string:     println(\"is string\")    default:     println(\"has unknown type\")   } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0410 \u043c\u043e\u0436\u0435\u0442 \u0432 \u0432\u0438\u0434\u0435 <code>if<\/code>-\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">package main  func main() {     var any interface{}      any = \"foobar\"      if s, ok := any.(string); ok {         println(\"this is a string:\", s)     }      \/\/ \u0430 \u0442\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0443 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b   if closable, ok := any.(interface{ Close() }); ok {     closable.Close()   } }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"kakie-bitovye-operacii-znaesh\">\u041a\u0430\u043a\u0438\u0435 \u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0437\u043d\u0430\u0435\u0448\u044c?<\/h3>\n<p>  <\/p>\n<p>\u041f\u043e\u0431\u0438\u0442\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u043f\u0440\u043e\u0432\u043e\u0434\u044f\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0430 \u0431\u0438\u0442\u0430\u0445 \u0447\u0438\u0441\u043b\u0430.<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">\/\/ \u041f\u043e\u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u0418\/AND (\u0440\u0430\u0437\u0440\u044f\u0434 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0440\u0430\u0432\u0435\u043d 1 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u043e\u0431\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0431\u0438\u0442\u0430 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u043e\u0432 \u0440\u0430\u0432\u043d\u044b 1) println(0b111_000 \/* 56 *\/ &amp; 0b011_110 \/* 30 *\/ == 0b011_000 \/* 24 *\/)  \/\/ \u041f\u043e\u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u0418\u041b\u0418\/OR (\u0440\u0430\u0437\u0440\u044f\u0434 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0440\u0430\u0432\u0435\u043d 0 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u043e\u0431\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0431\u0438\u0442\u0430 \u0432 \u0440\u0430\u0432\u043d\u044b 0) println(0b111_000 \/* 56 *\/ | 0b011_110 \/* 30 *\/ == 0b111_110 \/* 62 *\/)  \/\/ \u0418\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0435\u0435 \u0418\u041b\u0418\/XOR (\u0440\u0430\u0437\u0440\u044f\u0434 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0440\u0430\u0432\u0435\u043d 1 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0431\u0438\u0442 \u0440\u0430\u0432\u0435\u043d 1) println(0b111_000 \/* 56 *\/ ^ 0b011_110 \/* 30 *\/ == 0b100_110 \/* 38 *\/)  \/\/ \u0421\u0431\u0440\u043e\u0441 \u0431\u0438\u0442\u0430 AND NOT println(0b111_001 \/* 57 *\/ &amp;^ 0b011_110 \/* 30 *\/ == 0b100_001 \/* 33 *\/)  \/\/ \u0421\u0434\u0432\u0438\u0433 \u0431\u0438\u0442\u0430 \u0432\u043b\u0435\u0432\u043e println(0b000_001 \/* 1 *\/ &lt;&lt; 3 == 0b001_000 \/* 8 *\/)  \/\/ \u0421\u0434\u0432\u0438\u0433 \u0431\u0438\u0442\u0430 \u0432\u043f\u0440\u0430\u0432\u043e println(0b000_111 \/* 7 *\/ >> 1 == 0b000_011 \/* 3 *\/)<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0431\u0438\u0442\u043e\u0432\u043e\u0439 \u043c\u0430\u0441\u043a\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">type Bits uint8  const (     F0 Bits = 1 &lt;&lt; iota \/\/ 0b00_000_001 == 1     F1                  \/\/ 0b00_000_010 == 2     F2                  \/\/ 0b00_000_100 == 4 )  func Set(b, flag Bits) Bits    { return b | flag } func Clear(b, flag Bits) Bits  { return b &amp;^ flag } func Toggle(b, flag Bits) Bits { return b ^ flag } func Has(b, flag Bits) bool    { return b&amp;flag != 0 }  func main() {     var b Bits      b = Set(b, F0)     b = Toggle(b, F2)      for i, flag := range [...]Bits{F0, F1, F2} {         println(i, Has(b, flag))     }     \/\/ 0 true     \/\/ 1 false     \/\/ 2 true }<\/code><\/pre>\n<p>  <\/p>\n<blockquote><p>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c: <a href=\"https:\/\/tproger.ru\/translations\/bitwise-operations\/\" rel=\"nofollow noopener noreferrer\">\u041e \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445<\/a>, <a href=\"https:\/\/metanit.com\/go\/tutorial\/2.7.php\" rel=\"nofollow noopener noreferrer\">\u041f\u043e\u0440\u0430\u0437\u0440\u044f\u0434\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438<\/a><\/p><\/blockquote>\n<p>  <\/p>\n<h3 id=\"dopolnitelnyy-blok-figurnyh-skobok-v-funkcii\">\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u0444\u0438\u0433\u0443\u0440\u043d\u044b\u0445 \u0441\u043a\u043e\u0431\u043e\u043a \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/h3>\n<p>  <\/p>\n<p>\u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u0438 \u043e\u043d \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 <strong>\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u043a\u043e\u0443\u043f<\/strong> \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0432 \u043d\u0451\u043c (\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d \u0438 &#171;\u0437\u0430\u0445\u0432\u0430\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445&#187; \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0432\u043d\u0435 \u0441\u043a\u043e\u0443\u043f\u0430 \u0440\u0430\u043d\u0435\u0435, \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e). \u0418\u043d\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0434\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u0443\u0441\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443.<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">var i, s1 = 1, \"foo\"  {     var j, s2 = 2, \"bar\"      println(i, s1) \/\/ 1 foo     println(j, s2) \/\/ 2 bar      s1 = \"baz\" }  println(i, s1) \/\/ 1 baz \/\/println(j, s2) \/\/ ERROR: undefined: j and s2<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0430\u043a \u0436\u0435 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 AST (Abstract Syntax Tree) \u2014 \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 SSA (Static Single Assignment) \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e SSA \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0432\u0441\u044e \u0434\u043b\u0438\u043d\u0443 \u0434\u0435\u0440\u0435\u0432\u0430. \u041a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u0435\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043b\u0438\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <em>(\u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0434\u043e\u0445\u0443\u043b\u0438\u043e\u043d \u0441\u0442\u0440\u043e\u043a)<\/em> \u0438 \u043c\u044b \u043f\u043e \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0435\u0451 \u0434\u0435\u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u043e \u043c\u043e\u0436\u0435\u043c \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0441\u043a\u043e\u0443\u043f\u044b \u0442\u043e, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u043c SSA \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 (\u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e).<\/p>\n<p>  <\/p>\n<h3 id=\"chto-takoe-zahvat-peremennoy\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0437\u0430\u0445\u0432\u0430\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439?<\/h3>\n<p>  <\/p>\n<p>\u0412\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u043c \u0441\u043a\u043e\u0443\u043f\u0435 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c, \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0432 \u0441\u043a\u043e\u0443\u043f\u0435 \u0432\u044b\u0448\u0435 (\u043d\u043e \u043d\u0435 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442). \u041e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u0438\u0437 \u0432\u044b\u0448\u0435\u0441\u0442\u043e\u044f\u0449\u0435\u0433\u043e \u0441\u043a\u043e\u0443\u043f\u0430 \u0438 \u0435\u0441\u0442\u044c \u0438\u0445 \u0437\u0430\u0445\u0432\u0430\u0442. \u0422\u0438\u043f\u0438\u0447\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0432 \u0446\u0438\u043a\u043b\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">var out []*int  for i := 0; i &lt; 3; i++ {     out = append(out, &amp;i) }  println(*out[0], *out[1], *out[2]) \/\/ 3 3 3<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u0441\u043f\u0440\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0443\u0442\u0451\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 (\u0434\u043b\u044f \u0441\u043a\u043e\u0443\u043f\u0430 \u0446\u0438\u043a\u043b\u0430) \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441 \u043a\u043e\u043f\u0438\u0435\u0439 \u0437\u043d\u0430\u044f\u0435\u043d\u0438\u044f \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">var out []*int  for i := 0; i &lt; 3; i++ {     i := i \/\/ Copy i into a new variable.     out = append(out, &amp;i) }  println(*out[0], *out[1], *out[2]) \/\/ 0 1 2<\/code><\/pre>\n<p>  <\/p>\n<blockquote><p>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c: <a href=\"https:\/\/github.com\/golang\/go\/wiki\/CommonMistakes\" rel=\"nofollow noopener noreferrer\">Using reference to loop iterator variable<\/a><\/p><\/blockquote>\n<p>  <\/p>\n<h3 id=\"kak-rabotaet-defer\">\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 <code>defer<\/code>?<\/h3>\n<p>  <\/p>\n<p><code>Defer<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430. \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f <strong>\u0432\u0441\u0435\u0433\u0434\u0430<\/strong> (\u0434\u0430\u0436\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0430\u043d\u0438\u043a\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439) \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0430 \u0441\u0432\u043e\u0451 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 <strong>\u043d\u043e<\/strong> \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u043d\u0451\u0442\u0441\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 (\u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e \u2014 \u0432\u043d\u0443\u0442\u0440\u0438 <code>defer<\/code> \u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d \u0437\u0430\u0445\u0432\u0430\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0438 \u0434\u0430\u0436\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430). \u0427\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432\/\u0441\u043d\u044f\u0442\u0438\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a. \u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">func main() {     println(\"result =\", f())     \/\/ f started     \/\/ defer     \/\/ defer in defer     \/\/ result = 25 }  func f() (i int) {     println(\"f started\")      defer func() {         recover()          defer func() { println(\"defer in defer\"); i += 5 }()          println(\"defer\")          i = i * 2     }()      i = 10      panic(\"panic is here\") }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e <code>defer<\/code>, \u043e\u043d\u043e \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0437\u0430 \u043d\u0438\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d \u0434\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>  <\/p>\n<h3 id=\"kak-rabotaet-init\">\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 <code>init<\/code>?<\/h3>\n<p>  <\/p>\n<p>\u0412 Go \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>init()<\/code>. \u041e\u043d\u0430 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u0435\u0440\u0435\u0434 \u0432\u0441\u0435\u043c\u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0447\u0430\u0441\u0442\u044f\u043c\u0438 \u043f\u0430\u043a\u0435\u0442\u0430. \u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 <strong>\u0438\u043c\u043f\u043e\u0440\u0442\u0430<\/strong> \u043f\u0430\u043a\u0435\u0442\u0430.<\/p>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>init()<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0434\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e &#171;\u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u0432&#187; \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0421\u0423\u0411\u0414, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u2014 <a href=\"https:\/\/github.com\/go-sql-driver\/mysql\/blob\/217d05049e5a88d529b9a2d5fe5675120831efab\/driver.go#L83-L85\" rel=\"nofollow noopener noreferrer\">go-sql-driver\/mysql\/driver.go<\/a>).<\/p>\n<p>  <\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044e <code>init()<\/code> \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <strong>\u043d\u0435\u043e\u0434\u043d\u043e\u043a\u0440\u0430\u0442\u043d\u043e<\/strong> \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0434\u0430\u0436\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u043a\u0430\u043a \u0438\u0445 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440.<\/p>\n<p>  <\/p>\n<p>\u0425\u043e\u0442\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>init()<\/code> \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c, \u043d\u043e \u0447\u0430\u0441\u0442\u043e \u043e\u043d\u043e \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u044f\u0435\u0442 \u0447\u0442\u0435\u043d\u0438\u0435\/\u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430, \u0438 (\u043f\u043e\u0447\u0442\u0438) \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 \u043d\u0435\u0451, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0435\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u0432\u0441\u0435\u0433\u0434\u0430 <strong>\u043e\u0447\u0435\u043d\u044c<\/strong> \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u043e\u043f\u0440\u043e\u0441.<\/p>\n<p>  <\/p>\n<h3 id=\"preryvanie-forswitch-ili-forselect\">\u041f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 for\/switch \u0438\u043b\u0438 for\/select<\/h3>\n<p>  <\/p>\n<p>\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u0435\u0441\u043b\u0438 <code>f()<\/code> \u0432\u0435\u0440\u043d\u0451\u0442 <code>true<\/code>?<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">for {   switch f() {   case true:     break   case false:     \/\/ Do something   } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d <code>break<\/code>. \u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u0440\u0432\u0430\u043d \u0431\u0443\u0434\u0435\u0442 <code>switch<\/code>, \u0430 \u043d\u0435 \u0446\u0438\u043a\u043b <code>for<\/code>. \u041f\u0440\u043e\u0441\u0442\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u2013 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 (labeled) \u0446\u0438\u043a\u043b \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c <code>break<\/code> c \u044d\u0442\u043e\u0439 \u043c\u0435\u0442\u043a\u043e\u0439, \u043a\u0430\u043a \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043d\u0438\u0436\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">loop:   for {     switch f() {     case true:       break loop     case false:       \/\/ Do something     }   }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"skolko-mozhno-vozvraschat-znacheniy-iz-funkcii\">\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438?<\/h3>\n<p>  <\/p>\n<p>\u0422\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438, <strong>\u043d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0435<\/strong> \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u0422\u0430\u043a \u0436\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 &#171;\u0434\u0435-\u0444\u0430\u043a\u0442\u043e&#187;, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f:<\/p>\n<p>  <\/p>\n<ul>\n<li><strong>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c<\/strong> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443, \u0435\u0441\u043b\u0438 \u0435\u0451 \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f<\/li>\n<li><strong>\u041f\u0435\u0440\u0432\u044b\u043c<\/strong> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442, \u0435\u0441\u043b\u0438 \u043e\u043d \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f<\/li>\n<li>\u0425\u043e\u0440\u043e\u0448\u0438\u043c \u0442\u043e\u043d\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439<\/li>\n<li>\u0415\u0441\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 + \u0431\u0443\u043b\u0435\u0432\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u2014 \u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c (\u043f\u0440\u0438\u043c\u0435\u0440 \u2014 <code>os.LookupEnv(key string) (string, bool)<\/code>)<\/li>\n<li>\u0415\u0441\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f <strong>\u043e\u0448\u0438\u0431\u043a\u0430<\/strong>, \u0442\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u044b\u043c\u0438 \u0438\u043b\u0438 <code>nil<\/code><\/li>\n<\/ul>\n<p>  <\/p>\n<h3 id=\"dzheneriki---eto-pro-chto\">\u0414\u0436\u0435\u043d\u0435\u0440\u0438\u043a\u0438 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e \u0447\u0442\u043e?<\/h3>\n<p>  <\/p>\n<p>\u0414\u0436\u0435\u043d\u0435\u0440\u0438\u043a\u0438, \u0438\u043b\u0438 <strong>\u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u044f<\/strong> \u2014 \u044d\u0442\u043e \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u044f\u0437\u044b\u043a\u0430, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u0445 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p>\u0412 \u0432\u0435\u0440\u0441\u0438\u0438 <code>1.18<\/code> \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0434\u0436\u0435\u043d\u0435\u0440\u0438\u043a\u0438 (\u0432\u043e\u043e\u0431\u0449\u0435-\u0442\u043e \u043e\u043d\u0438 \u0431\u044b\u043b\u0438 \u0438 \u0440\u0430\u043d\u0435\u0435, \u043d\u043e \u043c\u044b \u043d\u0435 \u043c\u043e\u0433\u043b\u0438 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0432\u043e\u0451\u043c \u043a\u043e\u0434\u0435 \u2014 \u0432\u0441\u043f\u043e\u043c\u043d\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>make(T type)<\/code>), \u0438 \u043e\u043d\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0442\u044c (\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c) \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b, \u0442.\u0435. \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u043e\u0434\u0438\u043d \u0442\u0438\u043f, \u0430 \u0438\u0445 \u043d\u0430\u0431\u043e\u0440\u044b.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u043e\u0432\u044b\u0435 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430:<\/p>\n<p>  <\/p>\n<ul>\n<li><code>any<\/code> \u2014 \u0430\u043d\u0430\u043b\u043e\u0433 <code>interface{}<\/code>, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u043c \u043c\u0435\u0441\u0442\u0435 (<code>func do(v any) any<\/code>, <code>var v any<\/code>, <code>type foo interface { Do() any }<\/code>)<\/li>\n<li><code>comparable<\/code> \u2014 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0442\u0438\u043f\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>==<\/code> \u0438 <code>!=<\/code> (\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f \u2014 <code>var j comparable<\/code> \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443)<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0418 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 \u0438 \u0442\u0438\u043f\u0430\u0445 (\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f \u2014 <code>var j Int<\/code> \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443):<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">type Int interface {     int | int32 | int64 }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u043a <code>~<\/code> \u043f\u0435\u0440\u0435\u0434 \u0442\u0438\u043f\u0430\u043c\u0438 \u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0435 \u0442\u0438\u043f\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 myInt \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043d\u0438\u0436\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">type Int interface {     ~int | ~int32 | ~int64 }  type myInt int<\/code><\/pre>\n<p>  <\/p>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 golang \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0434\u043b\u044f \u043d\u0430\u0441 \u0443\u0436\u0435 <a href=\"https:\/\/pkg.go.dev\/golang.org\/x\/exp\/constraints\" rel=\"nofollow noopener noreferrer\"><code>\u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 (\u043f\u0430\u043a\u0435\u0442 constraints<\/code>)<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>  <\/p>\n<h4 id=\"parametrizovannye-funkcii\">\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/h4>\n<p>  <\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0447\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0438\u0437 \u0434\u0432\u0443\u0445 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043f\u0440\u0438\u0447\u0451\u043c \u0442\u0438\u043f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u044e\u0431\u044b\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">import \"constraints\"  func Max[T constraints.Ordered](a T, b T) T {   if a > b {     return a   }    return b }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0442\u0438\u043f\u044b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0445 \u0441\u043a\u043e\u0431\u043e\u0447\u043a\u0430\u0445. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0442\u0438\u043f\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0438 \u043e\u0441\u043e\u0431\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435.<\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f <a href=\"https:\/\/pkg.go.dev\/golang.org\/x\/exp\/slices\" rel=\"nofollow noopener noreferrer\">\u0441\u043b\u0430\u0439\u0441\u043e\u0432<\/a> \u0438 <a href=\"https:\/\/pkg.go.dev\/golang.org\/x\/exp\/maps\" rel=\"nofollow noopener noreferrer\">\u043c\u0430\u043f<\/a> \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d \u043d\u0430\u0431\u043e\u0440 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<p>  <\/p>\n<h4 id=\"parametrizovannye-tipy\">\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0442\u0438\u043f\u044b<\/h4>\n<p>  <\/p>\n<pre><code class=\"go\">import \"reflect\"  type myMap[K comparable, V any] map[K]V  func main() {   m := myMap[int, string]{5: \"foo\"}      println(m[5])              \/\/ foo     println(reflect.TypeOf(m)) \/\/ main.myMap[int,string] }<\/code><\/pre>\n<p>  <\/p>\n<blockquote><p>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c: <a href=\"https:\/\/habr.com\/ru\/company\/vk\/blog\/462811\/\">\u0417\u0430\u0447\u0435\u043c \u043d\u0443\u0436\u043d\u044b \u0434\u0436\u0435\u043d\u0435\u0440\u0438\u043a\u0438 \u0432 Go?<\/a>, <a href=\"https:\/\/habr.com\/ru\/post\/651229\/\">Golang \u043f\u043e\u0449\u0443\u043f\u0430\u0435\u043c \u0434\u0436\u0435\u043d\u0435\u0440\u0438\u043a\u0438<\/a><\/p><\/blockquote>\n<p>  <\/p>\n<h2 id=\"pamyat-i-upravlenie-ey\">\u041f\u0430\u043c\u044f\u0442\u044c \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0435\u0439<\/h2>\n<p>  <\/p>\n<h3 id=\"chto-takoe-heap-i-stack\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 <code>heap<\/code> \u0438 <code>stack<\/code>?<\/h3>\n<p>  <\/p>\n<p><strong>\u0421\u0442\u0435\u043a<\/strong> (stack) \u2014 \u044d\u0442\u043e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430. \u041e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 LIFO (Last In, First Out), \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432 \u0441\u0442\u0435\u043a \u043a\u0443\u0441\u043e\u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0432\u044b\u043c \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043d\u0430 \u0432\u044b\u0432\u043e\u0434 \u0438\u0437 \u0441\u0442\u0435\u043a\u0430. \u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442 \u043d\u043e\u0432\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u043e\u043d\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u0435\u043a, \u0430 \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0438\u0437 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f), \u043e\u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437 \u0441\u0442\u0435\u043a\u0430. \u041a\u043e\u0433\u0434\u0430 \u0441\u0442\u0435\u043a\u043e\u0432\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f, \u044d\u0442\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0442\u0435\u043a\u043e\u0432\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445.<\/p>\n<p>  <\/p>\n<p>\u0421\u0442\u0435\u043a \u0431\u044b\u0441\u0442\u0440\u044b\u0439, \u0442\u0430\u043a \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d \u043a \u043a\u044d\u0448\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430. \u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0435\u043a\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d, \u0438 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u043e\u0442\u043e\u043a\u0430.<\/p>\n<p>  <\/p>\n<p><strong>\u041a\u0443\u0447\u0430<\/strong> (heap) \u2014 \u044d\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u043f\u0430\u043c\u044f\u0442\u0438, \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u0432 \u041e\u0417\u0423, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u0441\u0442\u0435\u043a\u0430: \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u043b\u0430\u0434 \u0434\u043b\u044f \u0432\u0430\u0448\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. \u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0435 \u0432 \u043a\u0443\u0447\u0435 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u043a \u043d\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043f\u043e\u0442\u043e\u043a\u0435, \u043d\u043e \u0438 \u0432\u043e \u0432\u0441\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438. \u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435. \u041f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432\u0441\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u044e\u0442\u0441\u044f. \u0420\u0430\u0437\u043c\u0435\u0440 \u043a\u0443\u0447\u0438 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043d\u043e, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0441\u0442\u0435\u043a\u0430, \u043e\u043d \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d \u043b\u0438\u0448\u044c \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438, \u0438 \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435.<\/p>\n<p>  <\/p>\n<p>\u0412 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441\u043e \u0441\u0442\u0435\u043a\u043e\u043c, \u043a\u0443\u0447\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u0431\u0440\u043e\u0441\u0430\u043d\u044b \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438, \u0430 \u043d\u0435 \u0441\u0438\u0434\u044f\u0442 \u043d\u0430 \u0432\u0435\u0440\u0445\u0443\u0448\u043a\u0435 \u0441\u0442\u0435\u043a\u0430. \u0422\u043e \u0447\u0442\u043e \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u043a\u0443\u0447\u0443, \u0436\u0438\u0432\u0451\u0442 \u0442\u0430\u043c \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u0440\u0438\u0434\u0451\u0442 GC.<\/p>\n<p>  <\/p>\n<p>\u041d\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u0441\u0442\u0435\u043a \u0442\u0430\u043a \u0431\u044b\u0441\u0442\u0440? \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u0447\u0438\u043d \u0434\u0432\u0435:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0421\u0442\u0435\u043a\u0443 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0441\u0431\u043e\u0440\u0449\u0438\u043a \u043c\u0443\u0441\u043e\u0440\u0430 (garbage collector). \u041a\u0430\u043a \u043c\u044b \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b\u0438, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0438 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0442\u0435\u0441\u043d\u044f\u044e\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f. \u041d\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0442 \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u0442.\u043f.<\/li>\n<li>\u0421\u0442\u0435\u043a \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u043e\u0434\u043d\u043e\u0439 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0435, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 \u0442\u0435\u043c\u0438, \u0447\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043a\u0443\u0447\u0435. \u0427\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/li>\n<\/ul>\n<p>  <\/p>\n<h3 id=\"gde-vydelyaetsya-pamyat-pod-peremennuyu-mozhno-li-etim-upravlyat\">\u0413\u0434\u0435 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u043e\u0434 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e? \u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u044d\u0442\u0438\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c?<\/h3>\n<p>  <\/p>\n<p>\u041f\u0440\u044f\u043c\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0441\u0442\u043e\u043c, \u0433\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0430 \u043f\u0430\u043c\u044f\u0442\u044c \u0443 \u043d\u0430\u0441, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u2014 \u043d\u0435\u0442. \u041d\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u044d\u0442\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e.<\/p>\n<p>  <\/p>\n<p>\u041f\u0430\u043c\u044f\u0442\u044c \u043f\u043e\u0434 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0430 \u0432 \u043a\u0443\u0447\u0435 (heap) \u0438\u043b\u0438 \u0441\u0442\u0435\u043a\u0435 (stack). \u041e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e:<\/p>\n<p>  <\/p>\n<ul>\n<li><strong>\u0421\u0442\u0435\u043a<\/strong> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b (\u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u0443, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432\u044b\u0442\u0435\u0441\u043d\u044f\u044e\u0442\u0441\u044f \u0438\u0437 \u0441\u0442\u0435\u043a\u0430)<\/li>\n<li><strong>\u041a\u0443\u0447\u0430<\/strong> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0431\u0449\u0438\u0435 (shared) \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 (\u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u0438 \u0442.\u043f.)<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">func getFooValue() foo {     var result foo     \/\/ Do something     return result }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>result<\/code> \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0435. \u0418 \u044d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 <strong>\u0441\u0442\u0435\u043a<\/strong>. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443, \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 <strong>\u043a\u043e\u043f\u0438\u044e \u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439<\/strong>. \u0418\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0432\u044b\u0442\u0435\u0441\u043d\u044f\u0435\u0442\u0441\u044f \u0438\u0437 \u0441\u0442\u0435\u043a\u0430. \u042d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0432\u0441\u0451 \u0435\u0449\u0451 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0442\u0451\u0440\u0442\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u043d\u043e \u043a \u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <strong>\u0443\u0436\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f<\/strong>.<\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u043e \u0441 <strong>\u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u043c<\/strong>:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">func getFooPointer() *foo {     var result foo     \/\/ Do something     return &amp;result }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>result<\/code> \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u043e\u0439, \u043d\u043e \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c (\u043a\u043e\u043f\u0438\u044e \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439). \u0415\u0441\u043b\u0438 <code>result<\/code> \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0430 \u0438\u0437 \u0441\u0442\u0435\u043a\u0430, \u043a\u043b\u0438\u0435\u043d\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>\u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439<\/strong>.<\/p>\n<p>  <\/p>\n<p>\u0412 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u043c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 Go \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>result<\/code> \u0442\u0443\u0434\u0430, \u0433\u0434\u0435 \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 (shared) \u2013 <strong>\u0432 \u043a\u0443\u0447\u0443 (heap)<\/strong>.<\/p>\n<p>  <\/p>\n<p>\u0425\u043e\u0442\u044f \u0435\u0441\u0442\u044c \u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435. \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">func main()  {     p := &amp;foo{}     f(p) }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>f()<\/code> \u0432 \u0442\u043e\u0439 \u0436\u0435 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0435, \u0447\u0442\u043e \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>main()<\/code>, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>p<\/code> \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c. \u041e\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u0442\u0435\u043a\u0435 \u0438 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>f()<\/code> \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043a \u043d\u0435\u0439 \u0434\u043e\u0441\u0442\u0443\u043f.<\/p>\n<p>  <\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u2014 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <strong>\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e<\/strong>, \u0430 \u043d\u0435 \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044e. \u0423\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u043c\u044b <strong>\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e<\/strong> \u0445\u043e\u0442\u0438\u043c \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<p>  <\/p>\n<h3 id=\"kak-rabotaet-garbage-collection-gc-v-go\">\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 Garbage Collection (<code>GC<\/code>) \u0432 Go?<\/h3>\n<p>  <\/p>\n<p>Garbage Collection \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043c\u0435\u0441\u0442\u0430 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. \u0421\u0442\u0435\u043a \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u043f\u0440\u043e\u0441\u0442\u043e (\u0443\u0441\u043b\u043e\u0432\u043d\u043e-\u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e), \u0430 \u0432\u043e\u0442 \u0441 \u043a\u0443\u0447\u0435\u0439 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>  <\/p>\n<p>\u0412 \u043e\u0441\u043d\u043e\u0432\u0435 \u0440\u0430\u0431\u043e\u0442\u044b GC \u0432 Go \u043b\u0435\u0436\u0438\u0442:<\/p>\n<p>  <\/p>\n<ul>\n<li>&#171;\u0422\u0440\u0435\u0445\u0446\u0432\u0435\u0442\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u043c\u0435\u0442\u043a\u0438 \u0438 \u043e\u0447\u0438\u0441\u0442\u043a\u0438&#187; (\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439) \u2014 \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u0443\u0447\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0430, \u043a\u0430\u0436\u0434\u0430\u044f \u0432\u0435\u0440\u0448\u0438\u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e (\u043a\u0430\u0436\u0434\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u0434\u0430\u043d\u043d\u044b\u0435) \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u0430 \u043a\u0430\u043a &#171;\u0431\u0435\u043b\u0430\u044f&#187;, &#171;\u0441\u0435\u0440\u0430\u044f&#187;, \u0438\u043b\u0438 &#171;\u0447\u0451\u0440\u043d\u0430\u044f&#187;; \u0434\u0430\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u043e\u0432, \u0432\u0441\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0440\u0430\u0437\u043c\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0441\u0432\u043e\u0438\u043c\u0438 \u0446\u0432\u0435\u0442\u0430\u043c\u0438, \u0438 &#171;\u0431\u0435\u043b\u044b\u0435&#187; (\u043c\u0443\u0441\u043e\u0440\u043d\u044b\u0435) \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u044b (&#171;\u0447\u0451\u0440\u043d\u044b\u0435&#187; \u2014 \u0442\u043e\u0447\u043d\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0443\u0434\u0430\u043b\u044f\u0442\u044c; &#171;\u0441\u0435\u0440\u044b\u0435&#187; \u2014 \u043f\u043e\u0434 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0442\u044c)<\/li>\n<li>Write Barrier, \u0441\u043b\u0435\u0434\u044f\u0449\u0438\u0439 \u0437\u0430 \u0442\u0435\u043c, \u0447\u0442\u043e\u0431 \u0447\u0435\u0440\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438 \u043d\u0430 \u0431\u0435\u043b\u044b\u0435; \u0438 &#171;\u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043c\u0438\u0440&#187; (Stop The World, STW) \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f Write Barrier<\/li>\n<\/ul>\n<p>  <\/p>\n<p>GC \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0440\u0443\u0447\u043a\u0430\u043c\u0438 \u2014 <code>runtime.GC()<\/code>, \u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c \u043d\u0443\u0436\u043d\u043e \u0441 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e (\u0435\u0441\u0442\u044c \u0440\u0438\u0441\u043a \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0438\u043b\u0438 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0446\u0435\u043b\u0438\u043a\u043e\u043c).<\/p>\n<p>  <\/p>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, <strong>GC \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0443\u0447\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432 2 \u0440\u0430\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0435<\/strong> (\u0437\u0430 \u044d\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 <code>Pacer<\/code>; \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e env <code>GOGC<\/code>).<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0440\u0430\u0431\u043e\u0442\u044b GC:<\/p>\n<p>  <\/p>\n<ol>\n<li><strong>Sweep termination<\/strong> \u2014 \u0444\u0430\u0437\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0438:<br \/> \n<ul>\n<li><strong>Stop<\/strong> the World<\/li>\n<li>\u041e\u0436\u0438\u0434\u0430\u0435\u043c \u043f\u043e\u043a\u0430 \u0432\u0441\u0435 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442 safe-point<\/li>\n<li>\u0417\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u043c \u043e\u0447\u0438\u0441\u0442\u043a\u0443 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432<\/li>\n<\/ul>\n<\/li>\n<li><strong>Mark phase<\/strong> \u2014 \u0444\u0430\u0437\u0430 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438 (\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e \u0441 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439, \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0435\u0451 ~25% CPU):<br \/> \n<ul>\n<li>\u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c Write Barrier<\/li>\n<li><strong>Start<\/strong> the World<\/li>\n<li>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u0441\u0442\u0435\u043a\u043e\u0432<\/li>\n<li>\u041f\u0440\u0438 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u0430 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f (<strong>\u043d\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u043b\u043d\u0430\u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0432\u0441\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/strong>)<\/li>\n<li>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c 3-\u0445 \u0446\u0432\u0435\u0442\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u043c\u0443\u0441\u043e\u0440\u0430<\/li>\n<\/ul>\n<\/li>\n<li><strong>Mark termination<\/strong> \u2014 \u0444\u0430\u0437\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0438<br \/> \n<ul>\n<li><strong>Stop<\/strong> the World (\u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439, \u043d\u043e \u0441 \u043d\u0435\u0439 \u043f\u0440\u043e\u0446\u0435 \u0431\u044b\u043b\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c)<\/li>\n<li>\u0414\u043e\u0436\u0438\u0434\u0430\u0435\u043c\u0441\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0437\u0430\u0434\u0430\u0447 \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438<\/li>\n<li>\u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u043a\u044d\u0448\u0435\u0439<\/li>\n<li>\u0417\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0443<\/li>\n<\/ul>\n<\/li>\n<li><strong>Sweep phase<\/strong> \u2014 \u0444\u0430\u0437\u0430 \u043e\u0447\u0438\u0441\u0442\u043a\u0438<br \/> \n<ul>\n<li>\u041e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c Write Barrier<\/li>\n<li><strong>Start<\/strong> The World<\/li>\n<li>\u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u0444\u043e\u043d\u0435<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>  <\/p>\n<p>? \u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u0439 (GC Generations)<\/li>\n<li>\u041d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0443\u043f\u043b\u043e\u0442\u043d\u0435\u043d\u0438\u0435<\/li>\n<li>Stop the World (STW), \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u0430\u0436 \u0434\u0432\u0430\u0436\u0434\u044b<\/li>\n<li>\u041d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0442\u043e\u043d\u043a\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0432\u044b\u0437\u043e\u0432\u0430 GC \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>GOGC<\/code><\/li>\n<li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0430\u043b\u043b\u0430\u0441\u0442 (\u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f <code>make([]byte, 10 &lt;&lt; 30) \/\/ 10 GiB<\/code>), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0443\u0447\u0438, \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u043a\u0430\u043a \u043c\u0443\u0441\u043e\u0440, \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0437\u0430 <code>O(1)<\/code>, \u0438 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c<\/li>\n<li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>sync.Pool<\/code> (\u043e\u043d \u0445\u043e\u0440\u043e\u0448\u043e \u0434\u0440\u0443\u0436\u0438\u0442 \u0441 GC)<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/6246d9fb7637ad1287cbf6d0\" data-style=\"\" id=\"6246d9fb7637ad1287cbf6d0\" width=\"\"><\/div>\n<\/div>\n<p>  <\/p>\n<h3 id=\"kakoe-povedenie-po-umolchaniyu-ispolzuetsya-v-go-pri-peredache-v-funkciyu\">\u041a\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 Go \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e?<\/h3>\n<p>  <\/p>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0442.\u0435. \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e. \u0414\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u044d\u0442\u043e \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">func main() {     var i = 5      byValue(i)    \/\/ 5     byPointer(&amp;i) \/\/ 5 }  func byValue(i int)    { println(i) }  \/\/ \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e (\u043a\u043e\u043f\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439) func byPointer(i *int) { println(*i) } \/\/ \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044e<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"chto-mozhesh-rasskazat-pro-escape-analysis\">\u0427\u0442\u043e \u043c\u043e\u0436\u0435\u0448\u044c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e escape analysis?<\/h3>\n<p>  <\/p>\n<p>Escape analysis \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439.<\/p>\n<p>  <\/p>\n<p>\u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u043a\u043e\u0434\u0430, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u043c\u043e\u0436\u0435\u0442 \u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u044b\u0442\u044c \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u043e \u0432 \u0441\u0442\u0435\u043a\u043e\u0432\u044b\u0439 \u0444\u0440\u0435\u0439\u043c \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0435\u0433\u043e \u0441\u0442\u0440\u043e\u0438\u0442, \u0438\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e &#171;\u0441\u0431\u0435\u0436\u0430\u0442\u044c&#187; \u0432 \u043a\u0443\u0447\u0443. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u0438 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u043f\u0440\u0438\u0447\u0438\u043d \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0433\u043e \u0437\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 escape-\u0430\u043d\u0430\u043b\u0438\u0437\u0430: <code>go build -gcflags=\"-m\"<\/code> (\u0442\u0430\u043a \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u043b\u0430\u0433\u0438 <code>-N<\/code> \u0434\u043b\u044f \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439, <code>-l<\/code> \u0434\u043b\u044f \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f &#171;\u0438\u043d\u043b\u0430\u0439\u043d\u0438\u043d\u0433\u0430&#187;).<\/p>\n<p>  <\/p>\n<blockquote><p>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c: <a href=\"https:\/\/habr.com\/ru\/post\/497994\/\">\u042f\u0437\u044b\u043a\u043e\u0432\u0430\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0430 escape analysis<\/a>, <a href=\"https:\/\/mayurwadekar2.medium.com\/escape-analysis-in-golang-ee40a1c064c1\" rel=\"nofollow noopener noreferrer\">Escape Analysis in Golang<\/a><\/p><\/blockquote>\n<p>  <\/p>\n<h2 id=\"soncurrency-konkurentnost\">\u0421oncurrency (\u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c)<\/h2>\n<p>  <\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0435\u0441\u044f \u043a \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0437\u043c\u0443 \u0438 \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435.<\/p>\n<p>  <\/p>\n<h3 id=\"kak-ustroen-myuteks\">\u041a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u043c\u044c\u044e\u0442\u0435\u043a\u0441?<\/h3>\n<p>  <\/p>\n<p>Mutex \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 <strong>MUTual EXclusion<\/strong> (\u0432\u0437\u0430\u0438\u043c\u043d\u043e\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435), \u0438 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043e\u0431\u0449\u0438\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u0430 <code>atomic<\/code> (<code>atomic.CompareAndSwapInt32<\/code> \u0438 <code>atomic.AddInt32<\/code>), \u0442\u0430\u043a \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043c\u044c\u044e\u0442\u0435\u043a\u0441 \u043d\u0430\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 \u043d\u0430\u0434 <code>atomic<\/code>. \u041c\u044c\u044e\u0442\u0435\u043a\u0441 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0447\u0435\u043c <code>atomic<\/code>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u0434\u0440\u0443\u0433\u0438\u0435 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u043d\u0430 \u0432\u0441\u0451 \u0432\u0440\u0435\u043c\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438. \u0410 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c <code>atomic<\/code> \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430.<\/p>\n<p>  <\/p>\n<p>\u0412 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0437\u0430\u0449\u0438\u0442\u0443 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u2014 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 <code>Lock()<\/code>, \u0430 \u043f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\/\u0447\u0442\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u043c\u0435\u0442\u043e\u0434 <code>Unlock()<\/code>.<\/p>\n<p>  <\/p>\n<h4 id=\"v-chem-otlichie-syncmutex-ot-syncrwmutex\">\u0412 \u0447\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u0438\u0435 <code>sync.Mutex<\/code> \u043e\u0442 <code>sync.RWMutex<\/code>?<\/h4>\n<p>  <\/p>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e <code>Lock()<\/code> \u0438 <code>Unlock()<\/code> (\u0443 <code>sync.Mutex<\/code>), \u0443 <code>sync.RWMutex<\/code> \u0435\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b <strong>\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f<\/strong> \u2014 <code>RLock()<\/code> \u0438 <code>RUnlock()<\/code>. \u0415\u0441\u043b\u0438 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0447\u0442\u0435\u043d\u0438\u0438 \u2014 \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code>RLock()<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0442\u0435\u043d\u0438\u044f, <strong>\u043d\u043e \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u0437\u0430\u043f\u0438\u0441\u0438<\/strong> \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u0441\u0447\u0451\u0442\u0443, <code>RWMutex<\/code> \u044d\u0442\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u0438\u0437 \u0434\u0432\u0443\u0445 \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u043e\u0432.<\/p>\n<p>  <\/p>\n<h3 id=\"chto-takoe-synsmap\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 <code>syn\u0441.Map<\/code>?<\/h3>\n<p>  <\/p>\n<p>\u041a\u043e\u0440\u043e\u0442\u043a\u043e \u2014 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c <code>map<\/code>.<\/p>\n<p>  <\/p>\n<p>Go, \u043a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u044f\u0437\u044b\u043a\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u043c \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f concurrent \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u2014 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445. \u041d\u043e \u0442\u0438\u043f <code>map<\/code> \u043d\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u0435\u043d \u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430. \u0422\u043e \u0435\u0441\u0442\u044c \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u0435\u043d \u2014 1000 \u0433\u043e\u0440\u0443\u0442\u0438\u043d \u043c\u043e\u0433\u0443\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0437 map \u0431\u0435\u0437 \u043e\u043f\u0430\u0441\u0435\u043d\u0438\u0439, \u043d\u043e \u0432\u043e\u0442 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0432 \u043d\u0435\u0451 \u0435\u0449\u0451 \u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u2014 \u0443\u0436\u0435 \u043d\u0435\u0442.<\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u043e-\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a <code>map<\/code> \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>sync.RWMutex<\/code>, \u043d\u043e \u043e\u043d \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u044f\u0434\u0435\u0440 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 (\u0432 <code>RWMutex<\/code> <a href=\"https:\/\/github.com\/golang\/go\/blob\/36b81acfa19d9fedf6a0cd60c394fd7a7703834e\/src\/sync\/rwmutex.go#L61\" rel=\"nofollow noopener noreferrer\">\u043f\u0440\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0435 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435<\/a> \u043a\u0430\u0436\u0434\u0430\u044f \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u0435 <code>readerCount<\/code> \u2014 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u0447\u0451\u0442\u0447\u0438\u043a, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>atomic.AddInt32()<\/code>, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0441\u0431\u0440\u043e\u0441\u0443 \u043a\u044d\u0448\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u044f\u0434\u0435\u0440, \u0438 \u043a\u0430\u0436\u0434\u043e\u0435 \u044f\u0434\u0440\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438 \u0436\u0434\u0451\u0442 \u044d\u0442\u043e\u0442 \u0441\u0431\u0440\u043e\u0441 \u0438 \u0432\u044b\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 \u043a\u044d\u0448\u0430 \u2014 \u044d\u0442\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>cache contention<\/strong>).<\/p>\n<p>  <\/p>\n<p><code>sync.Map<\/code> \u0440\u0435\u0448\u0430\u0435\u0442 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 <strong>cache contention<\/strong> \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u043a\u043e\u0433\u0434\u0430 \u043a\u043b\u044e\u0447\u0438 \u0432 map \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b (\u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u043e) \u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0442\u0435\u043d\u0438\u0439, \u0447\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0435\u0439.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 <code>sync.Map<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">var m sync.Map  m.Store(\"one\", 1)        \/\/ \u0437\u0430\u043f\u0438\u0441\u044c one, ok := m.Load(\"one\") \/\/ \u0447\u0442\u0435\u043d\u0438\u0435  fmt.Println(one, ok) \/\/ 1 true  m.Range(func(k, v interface{}) bool { \/\/ \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u044d\u043b-\u043e\u0432 \u043c\u0430\u043f\u044b     fmt.Println(k, v) \/\/ one 1      return true })  m.Delete(\"one\") \/\/ \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435<\/code><\/pre>\n<p>  <\/p>\n<blockquote><p>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c: <a href=\"https:\/\/habr.com\/ru\/post\/338718\/\">\u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 \u043d\u043e\u0432\u044b\u043c sync.Map \u0432 Go 1.9<\/a><\/p><\/blockquote>\n<p>  <\/p>\n<h3 id=\"kakie-eschyo-primitivy-sinhronizacii-znaesh\">\u041a\u0430\u043a\u0438\u0435 \u0435\u0449\u0451 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u043d\u0430\u0435\u0448\u044c?<\/h3>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0431\u044b\u043b\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0432\u044b\u0448\u0435 \u2014 \u0434\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <strong>\u043c\u044c\u044e\u0442\u0435\u043a\u0441\u044b<\/strong>. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b:<\/p>\n<p>  <\/p>\n<h4 id=\"syncwaitgroup\"><code>sync.WaitGroup<\/code><\/h4>\n<p>  <\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0446\u0438\u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0436\u0434\u0430\u0442\u044c \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0433\u043e\u0440\u0443\u0442\u0438\u043d (\u044d\u0442\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 <code>CountDownLatch<\/code> \u0432 Java). \u041e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043d\u0430\u0431\u043e\u0440\u0430 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439. \u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">var wg sync.WaitGroup  wg.Add(1) \/\/ \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u043d\u0430 1 go func() {     fmt.Println(\"task 1\")     &lt;-time.After(time.Second)     fmt.Println(\"task 1 done\")      wg.Done() \/\/ \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u043d\u0430 1 }()  wg.Add(1) \/\/ \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u043d\u0430 1 go func() {     fmt.Println(\"task 2\")     &lt;-time.After(time.Second)     fmt.Println(\"task 2 done\")      wg.Done() \/\/ \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u043d\u0430 1 }()  wg.Wait() \/\/ \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u043c\u0441\u044f, \u043f\u043e\u043a\u0430 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 == 0 \/\/ task 2 \/\/ task 1 \/\/ task 2 done \/\/ task 1 done \/\/ Total time: 1.00s<\/code><\/pre>\n<p>  <\/p>\n<h4 id=\"synccond\"><code>sync.Cond<\/code><\/h4>\n<p>  <\/p>\n<p>\u0423\u0441\u043b\u043e\u0432\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f (<strong>CONDition variable<\/strong>) \u043f\u043e\u043b\u0435\u0437\u043d\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0433\u043e\u0440\u0443\u0442\u0438\u043d (<code>Broadcast<\/code>), \u0447\u0442\u043e \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u0430\u043d\u0430\u043b\u0430. \u041c\u0435\u0442\u043e\u0434 <code>Signal<\/code> \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441\u0430\u043c\u043e\u0439 \u0434\u043e\u043b\u0433\u043e-\u043e\u0436\u0438\u0434\u0430\u044e\u0449\u0435\u0439 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0435. \u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">var (     c  = sync.NewCond(&amp;sync.Mutex{})     wg sync.WaitGroup \/\/ \u043d\u0443\u0436\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430      free = true )  wg.Add(1) go func() {     defer wg.Done()     c.L.Lock()      for !free { \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u0440\u0435\u0441\u0443\u0440\u0441 \u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d         c.Wait()     }     fmt.Println(\"work\")      c.L.Unlock() }()  free = false                  \/\/ \u0437\u0430\u0431\u0440\u0430\u043b\u0438 \u0440\u0435\u0441\u0443\u0440\u0441, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441 \u043d\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 &lt;-time.After(1 * time.Second) \/\/ \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b free = true                   \/\/ \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u043b\u0438 \u0440\u0435\u0441\u0443\u0440\u0441 c.Signal()                    \/\/ \u043e\u043f\u043e\u0432\u0435\u0441\u0442\u0438\u043b\u0438 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0443  wg.Wait()<\/code><\/pre>\n<p>  <\/p>\n<h4 id=\"synconce\"><code>sync.Once<\/code><\/h4>\n<p>  <\/p>\n<p>\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u043a\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430 \u0432\u0441\u0451 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0434\u043d\u0443-\u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>Do<\/code>, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0443\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u043a\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">var once sync.Once  for i := 0; i &lt; 10; i++ {     once.Do(func() {         fmt.Println(\"Hell yeah!\")     }) }  \/\/ Hell yeah! (\u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f 1 \u0440\u0430\u0437 \u0432\u043c\u0435\u0441\u0442\u043e 10)<\/code><\/pre>\n<p>  <\/p>\n<h4 id=\"syncpool\"><code>sync.Pool<\/code><\/h4>\n<p>  <\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 GC \u043f\u0443\u0442\u0451\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 (\u043f\u043e\u0442\u043e\u043a\u043e-\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e). \u041f\u0443\u043b \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u043f\u0440\u043e\u0431\u0443\u0436\u0434\u0435\u043d\u0438\u0438 GC, \u043d\u043e \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c \u0438\u0445 \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442. \u0423 \u043f\u0443\u043b\u0430 \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0438 \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0437\u0430\u0431\u043e\u0442\u0438\u0442\u044c\u0441\u044f \u043e \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438.<\/p>\n<p>  <\/p>\n<blockquote><p>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c: <a href=\"https:\/\/habr.com\/ru\/post\/277137\/\">Go sync.Pool<\/a><\/p><\/blockquote>\n<p>  <\/p>\n<h3 id=\"kakie-tipy-kanalov-suschestvuyut\">\u041a\u0430\u043a\u0438\u0435 \u0442\u0438\u043f\u044b \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442?<\/h3>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0442\u043a\u043e, \u0442\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0435 (<strong>\u043d\u0435\u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c<\/strong>) \u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0435 (<strong>\u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435<\/strong>), \u043e\u0431\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 FIFO (first in, first out) \u043e\u0447\u0435\u0440\u0435\u0434\u0438.<\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u043d\u0430\u043b \u2014 \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u0432\u044f\u0437\u0438, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e (\u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e) \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u041f\u043e\u0442\u043e\u043a\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u0435\u043d, \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f &#171;\u043f\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044e&#187;. \u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 <em>(\u0438\u043b\u0438 \u0442\u0440\u0443\u0431\u0443)<\/em>, \u043e\u0442\u043a\u0443\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0438 \u043f\u043e\u043c\u0435\u0449\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435. \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u0430\u043d\u0430\u043b\u0430 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e <code>chan<\/code> \u2014 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u0435 \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u0430 <code>c := make(chan int)<\/code>, \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0438\u0437 \u043a\u0430\u043d\u0430\u043b\u0430 \u2014 <code>data := &lt;-c<\/code>, \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u2014 <code>c &lt;- 123<\/code>, \u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435 <code>close(c)<\/code>.<\/p>\n<p>  <\/p>\n<p><strong>\u0417\u0430\u043f\u0438\u0441\u044c<\/strong> \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u0430\u043d\u0430\u043b <strong>\u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043f\u0430\u043d\u0438\u043a\u0443<\/strong>.<\/p>\n<p>  <\/p>\n<p>\u0427\u0442\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 <strong>\u043d\u0435\u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439<\/strong> \u043a\u0430\u043d\u0430\u043b \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0443 \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0439 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0435. \u0427\u0435\u0440\u0435\u0437 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0438\u043b\u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 (<strong>\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c<\/strong> \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0441\u0442\u044c \u043a\u0430\u043d\u0430\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f <code>val, isOpened := &lt;- channel<\/code>, \u0433\u0434\u0435 <code>isOpened == true<\/code> \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043a\u0430\u043d\u0430\u043b \u043e\u0442\u043a\u0440\u044b\u0442; \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0435\u0440\u043d\u0451\u0442\u0441\u044f <code>false<\/code> \u0438 \u043d\u0443\u043b\u0435\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>val<\/code> \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043a\u0430\u043d\u0430\u043b\u0430; <code>isOpened == false<\/code> \u0435\u0441\u043b\u0438 \u043a\u0430\u043d\u0430\u043b <strong>\u0437\u0430\u043a\u0440\u044b\u0442 \u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435<\/strong> \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0438\u0437 \u043d\u0435\u0433\u043e).<\/p>\n<p>  <\/p>\n<p><strong>\u0411\u0443\u0444\u0435\u0440\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b<\/strong> \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0434\u043b\u044f <code>make<\/code> \u2014 <code>c := make(chan int, 5)<\/code>, \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u043d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0431\u0443\u0444\u0435\u0440 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d. \u041f\u043e\u0434\u043e\u0431\u043d\u043e \u0441\u043b\u0430\u0439\u0441\u0430\u043c, \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u0438\u043c\u0435\u0435\u0442 \u0434\u043b\u0438\u043d\u0443 (<code>len<\/code>, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438, \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445) \u0438 \u0435\u043c\u043a\u043e\u0441\u0442\u044c (<code>cap<\/code>, \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0430\u043c\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430 \u043a\u0430\u043d\u0430\u043b\u0430):<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">c := make(chan string, 5)  c &lt;- \"foo\" c &lt;- \"bar\" close(c)  println(len(c), cap(c)) \/\/ 2 5  for {     val, ok := &lt;-c \/\/ \u043e\u0431\u0440\u0430\u0442\u0438 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 - \u0447\u0438\u0442\u0430\u0435\u043c \u0438\u0437 \u0443\u0436\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u0430      if !ok {         break     }      println(val) } \/\/ \"foo\" \/\/ \"bar\"<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u0438 \u0446\u0438\u043a\u043b <code>for val := range c { ... }<\/code> \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0447\u0438\u0442\u0430\u0442\u044c \u0441 <strong>\u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0445<\/strong> \u043a\u0430\u043d\u0430\u043b\u043e\u0432 (\u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u0441\u0435 \u0435\u0449\u0435 \u0436\u0438\u0432\u0443\u0442 \u0432 \u0431\u0443\u0444\u0435\u0440\u0435).<\/p>\n<p>  <\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0441\u0443\u0436\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0430\u0445\u0430\u0440 <strong>\u043e\u0434\u043d\u043e\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445<\/strong> \u043a\u0430\u043d\u0430\u043b\u043e\u0432 (\u0443\u043b\u0443\u0447\u0448\u0430\u0435\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0442\u0438\u043f\u043e\u0432 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043ce, \u0447\u0442\u043e, \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 \u043e\u0448\u0438\u0431\u043e\u043a):<\/p>\n<p>  <\/p>\n<ul>\n<li><code>c := make(&lt;-chan int)<\/code> \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f<\/li>\n<li><code>c := make(chan&lt;- int)<\/code> \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0422\u0430\u043a \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0432 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0434\u043d\u043e\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043a\u0430\u043d\u0430\u043b\u0430 (<code>func write(c chan&lt;- string) { ... }<\/code>) \u2014 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0438\u0437 \u043d\u0435\u0433\u043e \u0447\u0438\u0442\u0430\u0442\u044c, \u0430 \u0441\u043c\u043e\u0436\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043b\u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0435\u0433\u043e.<\/p>\n<p>  <\/p>\n<p>\u0427\u0438\u0442\u0430\u0442\u044c &#171;\u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e&#187; \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>select<\/code> (\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>select<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u043c\u044b\u043c, <strong>\u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c<\/strong> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f <code>default<\/code>):<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">c1, c2 := make(chan string), make(chan string) defer func() { close(c1); close(c2) }() \/\/ \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u0438\u0431\u0440\u0430\u0442\u044c\u0441\u044f  go func(c chan&lt;- string) { &lt;-time.After(time.Second); c &lt;- \"foo\" }(c1) go func(c chan&lt;- string) { &lt;-time.After(time.Second); c &lt;- \"bar\" }(c2)  for i := 1; ; i++ {     select { \/\/ \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u043c\u0441\u044f, \u043f\u043e\u043a\u0430 \u0432 \u043e\u0434\u0438\u043d \u0438\u0437 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0451\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435     case val := &lt;-c1:         println(\"channel 1\", val)      case val := &lt;-c2:         println(\"channel 2\", val)     }      if i >= 2 { \/\/ \u0447\u0435\u0440\u0435\u0437 2 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u0445\u043e\u0434\u0438\u043c (\u0438\u043d\u0430\u0447\u0435 \u0431\u0443\u0434\u0435\u0442 deadlock)         break     } } \/\/ channel 1 foo \/\/ channel 2 bar \/\/ Total execution time: 1.00s<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0432 \u043e\u0431\u0430 \u043a\u0430\u043d\u0430\u043b\u0430 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u0438\u0434\u0443\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f (\u0438\u043b\u0438 \u043e\u043d\u0438 \u0443\u0436\u0435 \u0442\u0430\u043c \u0431\u044b\u043b\u0438), \u0442\u043e <code>case<\/code> \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u043d <strong>\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e<\/strong> (\u0430 \u043d\u0435 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443 \u0438\u0445 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f, \u043a\u0430\u043a \u043c\u043e\u0433\u043b\u043e \u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f).<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0438 \u043e\u0434\u0438\u043d \u0438\u0437 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u0438 \u0441\u0435\u043a\u0446\u0438\u044f <code>default<\/code> \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u0442\u043e \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <code>waiting<\/code> \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0438\u0437 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u043d\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d.<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432 <code>select<\/code> \u0443\u043a\u0430\u0437\u0430\u043d <code>default<\/code>, \u0442\u043e \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u043d \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u043a\u0430\u043d\u0430\u043b\u044b \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 (\u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c <code>select<\/code> \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f <strong>\u043d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u043c\u044b\u043c<\/strong>).<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c (<a href=\"https:\/\/github.com\/golang\/go\/blob\/36b81acfa19d9fedf6a0cd60c394fd7a7703834e\/src\/runtime\/chan.go#L33-L52\" rel=\"nofollow noopener noreferrer\">src\/runtime\/chan.go<\/a>) \u043a\u0430\u043d\u0430\u043b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">type hchan struct {     qcount   uint           \/\/ \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u0431\u0443\u0444\u0435\u0440\u0435     dataqsiz uint           \/\/ \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c \u0431\u0443\u0444\u0435\u0440\u0430     buf      unsafe.Pointer \/\/ \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0431\u0443\u0444\u0435\u0440 \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u0430\u043d\u0430\u043b\u0430     elemsize uint16         \/\/ \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432 \u043a\u0430\u043d\u0430\u043b\u0435     closed   uint32         \/\/ \u0444\u043b\u0430\u0433, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439, \u0437\u0430\u043a\u0440\u044b\u0442 \u043a\u0430\u043d\u0430\u043b \u0438\u043b\u0438 \u043d\u0435\u0442     elemtype *_type         \/\/ \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043a\u0430\u043d\u0430\u043b\u0435     sendx    uint           \/\/ \u0438\u043d\u0434\u0435\u043a\u0441 (\u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435) \u0432 \u0431\u0443\u0444\u0435\u0440\u0435 \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0437\u0430\u043f\u0438\u0441\u044c     recvx    uint           \/\/ \u0438\u043d\u0434\u0435\u043a\u0441 (\u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435) \u0432 \u0431\u0443\u0444\u0435\u0440\u0435 \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0447\u0442\u0435\u043d\u0438\u0435     recvq    waitq          \/\/ \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0433\u043e\u0440\u0443\u0442\u0438\u043d, \u043e\u0436\u0438\u0434\u0430\u044e\u0449\u0438\u0445 \u0447\u0442\u0435\u043d\u0438\u044f \u0438\u0437 \u043a\u0430\u043d\u0430\u043b\u0430     sendq    waitq          \/\/ \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0433\u043e\u0440\u0443\u0442\u0438\u043d, \u043e\u0436\u0438\u0434\u0430\u044e\u0449\u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043a\u0430\u043d\u0430\u043b     lock     mutex          \/\/ \u043c\u044c\u044e\u0442\u0435\u043a\u0441 \u0434\u043b\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043a\u0430\u043d\u0430\u043b\u0443 }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043c\u044c\u044e\u0442\u0435\u043a\u0441, \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0435\u0442 \u043a\u0430\u043a\u043e\u0435-\u043b\u0438\u0431\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u043a\u0430\u043d\u0430\u043b\u043e\u043c, \u043a\u0440\u043e\u043c\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 lock-free \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u043f\u0440\u0438 \u043d\u0435\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u0430\u0445.<\/p>\n<p>  <\/p>\n<p>Go \u043d\u0435 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u0431\u0443\u0444\u0435\u0440 \u0434\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0445 (\u043d\u0435\u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445) \u043a\u0430\u043d\u0430\u043b\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0431\u0443\u0444\u0435\u0440 \u0440\u0430\u0432\u0435\u043d <code>nil<\/code> \u0438 <code>dataqsiz<\/code> \u0440\u0430\u0432\u0435\u043d \u043d\u0443\u043b\u044e. \u041f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u0438\u0437 \u043a\u0430\u043d\u0430\u043b\u0430 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0451\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a: \u0437\u0430\u043a\u0440\u044b\u0442 \u043b\u0438 \u043a\u0430\u043d\u0430\u043b, \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u043e\u043d \u0438\u043b\u0438 \u043d\u0435\u0442, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043b\u0438 \u0433\u043e\u0443\u0440\u0442\u0438\u043d\u044b \u0432 send-\u043e\u0447\u0435\u0440\u0435\u0434\u0438. \u0415\u0441\u043b\u0438 \u043e\u0436\u0438\u0434\u0430\u044e\u0449\u0438\u0445 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0433\u043e\u0440\u0443\u0442\u0438\u043d \u043d\u0435\u0442 \u2014 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442 \u0441\u0430\u043c\u0430 \u0441\u0435\u0431\u044f \u0432 <code>recvq<\/code> \u0438 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f. \u041f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u043e\u0439 \u0432\u0441\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0442\u0441\u044f \u0441\u043d\u043e\u0432\u0430, \u0438 \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 <code>recvq<\/code> \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043e\u043d\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043e\u0436\u0438\u0434\u0430\u044e\u0449\u0443\u044e \u0447\u0442\u0435\u043d\u0438\u0435 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0443, \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0435\u0451 \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438, \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0435\u0451 \u0441\u0442\u0435\u043a \u0438 \u0441\u043d\u0438\u043c\u0430\u0435\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443. \u042d\u0442\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0432\u043e \u0432\u0441\u0451\u043c \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435 Go, \u043a\u043e\u0433\u0434\u0430 \u043e\u0434\u043d\u0430 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u043f\u0438\u0448\u0435\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 \u0441\u0442\u0435\u043a \u0434\u0440\u0443\u0433\u043e\u0439 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0433\u043e (\u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e) \u043a\u0430\u043d\u0430\u043b\u0430 <code>make(chan bool, 1)<\/code> Go \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442 \u0431\u0443\u0444\u0435\u0440 \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>dataqsiz<\/code> \u0432 \u0435\u0434\u0438\u043d\u0438\u0446\u0443. \u0427\u0442\u043e\u0431\u044b \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043a\u0430\u043d\u0430\u043b, \u0441\u043f\u0435\u0440\u0432\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a: \u043f\u0443\u0441\u0442\u0430 \u043b\u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u044c <code>recvq<\/code>, \u043f\u0443\u0441\u0442 \u043b\u0438 \u0431\u0443\u0444\u0435\u0440, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043b\u0438 \u043c\u0435\u0441\u0442\u0430 \u0432 \u0431\u0443\u0444\u0435\u0440\u0435. \u0415\u0441\u043b\u0438 \u0432\u0441\u0451 \u043e\u043a, \u0442\u043e \u043e\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u0431\u0443\u0444\u0435\u0440, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>qcount<\/code> \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043b\u0435\u0435. \u041a\u043e\u0433\u0434\u0430 \u0431\u0443\u0444\u0435\u0440 \u043f\u043e\u043b\u043e\u043d, \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0442\u0438 \u0441\u0435\u0431\u044f \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u0439 (\u043d\u0435\u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439), \u0442\u043e\u0435\u0441\u0442\u044c \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442 \u0441\u0435\u0431\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0438 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0431\u0443\u0444\u0435\u0440\u0430 \u0438 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043a\u0430\u043a \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u0430.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438 <strong>\u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0438<\/strong> \u043a\u0430\u043d\u0430\u043b\u0430 Go \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0432\u0441\u0435\u043c \u043e\u0436\u0438\u0434\u0430\u044e\u0449\u0438\u043c \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430\u043c \u0438 \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u0438\u0445. \u0412\u0441\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u043d\u0430\u043b\u0430, \u0430 \u0432\u0441\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u043b\u0438 \u043f\u0430\u043d\u0438\u043a\u0443\u044e\u0442.<\/p>\n<p>  <\/p>\n<blockquote><p>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c: <a href=\"https:\/\/habr.com\/ru\/post\/490336\/\">\u0410\u043d\u0430\u0442\u043e\u043c\u0438\u044f \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0432 Go<\/a>, <a href=\"https:\/\/habr.com\/ru\/post\/308070\/\">\u041a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u043a\u0430\u043d\u0430\u043b\u044b \u0432 Go<\/a>, <a href=\"https:\/\/medium.com\/@victor_nerd\/%D0%BF%D0%BE%D0%B4-%D0%BA%D0%B0%D0%BF%D0%BE%D1%82%D0%BE%D0%BC-golang-%D0%BA%D0%B0%D0%BA-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%8E%D1%82-%D0%BA%D0%B0%D0%BD%D0%B0%D0%BB%D1%8B-%D1%87%D0%B0%D1%81%D1%82%D1%8C-1-e1da9e3e104d\" rel=\"nofollow noopener noreferrer\">\u041f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c Golang \u2014 \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043a\u0430\u043d\u0430\u043b\u044b. \u0427\u0430\u0441\u0442\u044c 1<\/a>, <a href=\"https:\/\/medium.com\/@victor_nerd\/golang-channel-internal-part2-b4e37ad9a118\" rel=\"nofollow noopener noreferrer\">\u0421\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0432 Golang. \u0427\u0430\u0441\u0442\u044c 2<\/a><\/p><\/blockquote>\n<p>  <\/p>\n<h4 id=\"chto-mozhno-delat-s-zakrytym-kanalom\">\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u043c \u043a\u0430\u043d\u0430\u043b\u043e\u043c?<\/h4>\n<p>  <\/p>\n<p>\u0418\u0437 \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>for val := range c { ... }<\/code> \u2014 \u0432\u044b\u0447\u0438\u0442\u0430\u0435\u0442 \u0432\u0441\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0447\u0442\u043e \u0432 \u043d\u0451\u043c \u0435\u0441\u0442\u044c, \u0438\u043b\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">for {     if val, ok := &lt;-c; ok {         println(val)     } else {         break     } }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"rasskazhi-pro-planirovschik-gorutin\">\u0420\u0430\u0441\u0441\u043a\u0430\u0436\u0438 \u043f\u0440\u043e \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a (\u0433\u043e\u0440\u0443\u0442\u0438\u043d)<\/h3>\n<p>  <\/p>\n<p><a href=\"https:\/\/github.com\/golang\/go\/blob\/f296b7a6f045325a230f77e9bda1470b1270f817\/src\/runtime\/proc.go#L19\" rel=\"nofollow noopener noreferrer\">Goroutine scheduler<\/a> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u043c \u0437\u0430\u0434\u0430\u0447\u0438 (work-stealing) \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u0432\u0432\u0435\u0434\u0435\u043d \u0435\u0449\u0435 \u0432 Go 1.1 \u0414\u043c\u0438\u0442\u0440\u0438\u0435\u043c \u0412\u044c\u044e\u043a\u043e\u0432\u044b\u043c \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 Go. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0435\u0433\u043e \u0441\u0443\u0442\u044c \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442:<\/p>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/golang\/go\/blob\/f296b7a6f045325a230f77e9bda1470b1270f817\/src\/runtime\/runtime2.go#L395\" rel=\"nofollow noopener noreferrer\"><code>G<\/code> (<strong>\u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430\u043c\u0438<\/strong>)<\/a> \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b Go<\/li>\n<li><a href=\"https:\/\/github.com\/golang\/go\/blob\/f296b7a6f045325a230f77e9bda1470b1270f817\/src\/runtime\/runtime2.go#L473\" rel=\"nofollow noopener noreferrer\"><code>M<\/code> (\u043c\u0430\u0448\u0438\u043d\u0430\u043c\u0438 aka <strong>\u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438<\/strong> \u0438\u043b\u0438 <strong>\u0442\u0440\u0435\u0434\u0430\u043c\u0438<\/strong>)<\/a> \u2014 \u043f\u043e\u0442\u043e\u043a\u0438 \u041e\u0421, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0447\u0442\u043e-\u043b\u0438\u0431\u043e \u0438\u043b\u0438 \u0436\u0435 \u0431\u0435\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c<\/li>\n<li><a href=\"https:\/\/github.com\/golang\/go\/blob\/f296b7a6f045325a230f77e9bda1470b1270f817\/src\/runtime\/runtime2.go#L552\" rel=\"nofollow noopener noreferrer\"><code>P<\/code> (<strong>\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\u043c\u0438<\/strong>)<\/a> \u2014 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0426\u041f (\u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u044f\u0434\u0440\u043e); \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0430\u0448\u0435\u0433\u043e Go \u043a\u043e\u0434\u0430, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0438\u043b\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f \u043f\u0430\u043c\u044f\u0442\u0438<\/li>\n<\/ul>\n<p>  <\/p>\n<p><strong>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430<\/strong> \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e <code>G<\/code> (\u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c) \u0441 <code>M<\/code> (\u0433\u0434\u0435 \u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c) \u0438 <code>P<\/code> (\u043f\u0440\u0430\u0432\u0430 \u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f).<\/p>\n<p>  <\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 <code>M<\/code> (\u043f\u043e\u0442\u043e\u043a \u041e\u0421) \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u0434\u0430, \u043e\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0432\u043e\u0439 <code>P<\/code> (\u0426\u041f) \u0432 \u043f\u0443\u043b \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 <code>P<\/code>. \u0427\u0442\u043e\u0431\u044b \u0432\u043e\u0437\u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 Go \u043a\u043e\u0434\u0430, \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0435\u0433\u043e. \u0422\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435, \u043a\u043e\u0433\u0434\u0430 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f, \u043e\u0431\u044a\u0435\u043a\u0442 <code>G<\/code> (\u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430) \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0443\u043b \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445 <code>G<\/code> \u0438 \u043f\u043e\u0437\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0434\u043b\u044f \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b.<\/p>\n<p>  <\/p>\n<p>Go \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0435\u0434\u043e\u0432, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u0445 \u044f\u0434\u0435\u0440 (\u0435\u0441\u043b\u0438 \u0432\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0435) \u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043d\u0430 \u044d\u0442\u0438 \u0442\u0440\u0435\u0434\u044b \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u0433\u043e\u0440\u0443\u0442\u0438\u043d \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442. \u0412 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u044f\u0434\u0440\u0435 \u0426\u041f \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u0433\u0440\u0443\u0442\u0438\u043d\u0430, \u0430 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e.<\/p>\n<p>  <\/p>\n<p>\u0422\u0440\u0435\u0434\u044b <code>M<\/code> \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 <code>P<\/code> \u043a \u0434\u0440\u0443\u0433\u043e\u043c\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 \u0442\u0440\u0435\u0434 \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432, \u0432 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u041e\u0421 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u044d\u0442\u043e\u0442 \u0442\u0440\u0435\u0434 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u0447\u0442\u0435\u043d\u0438\u0435 \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0441 \u0434\u0438\u0441\u043a\u0430) \u2014 \u043c\u0430\u043b\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u0430 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430, \u0447\u0442\u043e \u0441\u043f\u0440\u043e\u0432\u043e\u0446\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u044d\u0442\u043e\u0442 \u0432\u044b\u0437\u043e\u0432, \u043d\u043e \u0438 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435, \u0447\u0442\u043e \u0441\u0442\u043e\u044f\u0442 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 <code>P<\/code>. \u0427\u0442\u043e\u0431 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u043e \u2014 Go \u043e\u0442\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 <code>P<\/code> \u0438 \u043f\u0435\u0440\u0435\u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0435.<\/p>\n<p>  <\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043c\u043d\u043e\u0433\u043e\u0437\u0430\u0434\u0430\u0447\u043d\u043e\u0441\u0442\u0438 \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u041e\u0421 \u044d\u0442\u043e &#171;\u0432\u044b\u0442\u0435\u0441\u043d\u044f\u044e\u0449\u0430\u044f&#187; (\u0432\u0441\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0432\u0441\u0435\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e, \u0432\u0441\u0435\u043c \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f) \u0438 &#171;\u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u0430\u044f&#187; (\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0441\u0442\u043e\u043b\u044c\u043a\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u043c \u043d\u0443\u0436\u043d\u043e, \u0438 \u0441\u0430\u043c\u0438 \u0443\u0441\u0442\u0443\u043f\u0430\u044e\u0442 \u0434\u0440\u0443\u0433-\u0434\u0440\u0443\u0433\u0443 \u043c\u0435\u0441\u0442\u043e). \u0412 Go \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <strong>\u043d\u0435\u044f\u0432\u043d\u0430\u044f \u043a\u043e\u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c<\/strong>:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0413\u043e\u0440\u0443\u0442\u0438\u043d\u0430 \u0443\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043c\u0435\u0441\u0442\u043e \u0434\u0440\u0443\u0433\u0438\u0441 \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043a \u0432\u0432\u043e\u0434\u0443-\u0432\u044b\u0432\u043e\u0434\u0443, \u043a\u0430\u043d\u0430\u043b\u0430\u043c, \u0432\u044b\u0437\u043e\u0432\u0430\u043c \u041e\u0421 \u0438 \u0442.\u0434.<\/li>\n<li>\u041c\u043e\u0436\u0435\u0442 \u0443\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043c\u0435\u0441\u0442\u043e \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043b\u044e\u0431\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430\u043c\u0438)<\/li>\n<li>\u0415\u0441\u0442\u044c \u044f\u0432\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043d\u0430 \u0434\u0440\u0443\u0433\u0443\u044e \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0443 \u2014 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>runtime.Gosched()<\/code> (\u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430, \u043d\u043e \u043e\u043d\u0430 \u0435\u0441\u0442\u044c)<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041e\u0447\u0435\u0440\u0435\u0434\u044c FIFO (first in \u2014 first out) \u2014 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0433\u043e\u0440\u0443\u0442\u0438\u043d \u043e\u0431\u0443\u0441\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0440\u044f\u0434\u043e\u043c \u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u0430<\/li>\n<li>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0442\u0440\u0435\u0434\u043e\u0432 \u2014 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u0440\u0435\u0434\u043e\u0432 \u0447\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u044f\u0434\u0435\u0440 \u0426\u041f<\/li>\n<li>\u0417\u0430\u0445\u0432\u0430\u0442 \u0447\u0443\u0436\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u2014 \u043a\u043e\u0433\u0434\u0430 \u0442\u0440\u0435\u0434 \u043f\u0440\u043e\u0441\u0442\u0430\u0438\u0432\u0430\u0435\u0442, \u0442\u043e \u043e\u043d \u043d\u0435 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u043e\u043c Go, \u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 &#171;\u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d&#187; \u0440\u0430\u0431\u043e\u0442\u043e\u0439, \u0432\u0437\u044f\u0442\u043e\u0439 \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439 \u0433\u043e\u0440\u0443\u0442\u0438\u043d \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441 \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0440\u0435\u0434\u043e\u0432<\/li>\n<li>&#171;\u041d\u0435\u0438\u043d\u0432\u0430\u0437\u0438\u0432\u043d\u043e\u0441\u0442\u044c&#187; \u2014 \u0440\u0430\u0431\u043e\u0442\u0430 \u0433\u043e\u0440\u0443\u0442\u0438\u043d \u043d\u0430\u0441\u0438\u043b\u044c\u043d\u043e \u043d\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041e\u0447\u0435\u0440\u0435\u0434\u044c FIFO (\u043d\u0435\u0442 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0437\u0430\u0446\u0438\u0438 \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f)<\/li>\n<li>\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f (\u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0433\u043e\u0440\u0443\u0442\u0438\u043d)<\/li>\n<li>\u0413\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0442\u0440\u0435\u0434\u0430\u043c\u0438, \u0447\u0442\u043e \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043a\u044d\u0448\u0435\u0439<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/6246d9fb5af7f3126792b5f8\" data-style=\"\" id=\"6246d9fb5af7f3126792b5f8\" width=\"\"><\/div>\n<\/div>\n<p>  <\/p>\n<blockquote><p>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c: <a href=\"https:\/\/habr.com\/ru\/post\/141853\/\">\u0413\u043e\u0440\u0443\u0442\u0438\u043d\u044b: \u0432\u0441\u0451, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u0437\u043d\u0430\u0442\u044c, \u043d\u043e \u0431\u043e\u044f\u043b\u0438\u0441\u044c \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u044c<\/a>, <a href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/527748\/\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u0438 \u043a\u0430\u043a\u043e\u0432 \u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440?<\/a><\/p><\/blockquote>\n<p>  <\/p>\n<h3 id=\"chto-takoe-gorutina\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430?<\/h3>\n<p>  <\/p>\n<p>\u0413\u043e\u0440\u0443\u0442\u0438\u043d\u0430 (goroutine) \u2014 \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0430\u044f\u0441\u044f \u043a\u043e\u043d\u043a\u0443\u0440\u0435\u043d\u0442\u043d\u043e \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430\u043c\u0438 \u0432 \u0442\u043e\u043c \u0436\u0435 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435.<\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0435\u0451 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e <code>go<\/code> \u043f\u0435\u0440\u0435\u0434 \u0438\u043c\u0435\u043d\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 (\u0438\u043b\u0438 \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u043e\u0439) \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>  <\/p>\n<p>\u0413\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u043e\u0447\u0435\u043d\u044c \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u044b (~<strong>2,6Kb<\/strong> \u043d\u0430 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0443). \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u2014 \u044d\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0442\u0435\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u0432\u0435\u043b\u0438\u043a, \u0445\u043e\u0442\u044f \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0441\u0442\u0438. \u041e\u0431\u043b\u0430\u0441\u0442\u044c \u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u0430 \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0441\u0442\u044c <em>(\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u0441\u0435\u0442\u044c\u044e, \u0434\u0438\u0441\u043a\u043e\u043c, \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445, \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u044b\u043c \u043c\u044c\u044e\u0442\u0435\u043a\u0441\u043e\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u043c \u0438 \u0442.\u043f.)<\/em><\/li>\n<li>\u041a\u043e\u0433\u0434\u0430 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0435\u043b\u0438\u043a\u043e \u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u044b\u0438\u0433\u0440\u044b\u0448, \u043d\u0430\u0433\u0440\u0443\u0437\u0438\u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u044f\u0434\u0440\u0430<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0421\u0430\u043c\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 600 \u0431\u0430\u0439\u0442, \u043d\u043e \u0434\u043b\u044f \u043d\u0435\u0451 \u0435\u0449\u0451 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0438 \u0435\u0451 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u0442\u0435\u043a, \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u0442\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 2Kb, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u043c\u0435\u0440\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 <em>(\u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 1 \u0413\u0411 \u0434\u043b\u044f 64-\u0440\u0430\u0437\u0440\u044f\u0434\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0438 250 \u041c\u0411 \u0434\u043b\u044f 32-\u0440\u0430\u0437\u0440\u044f\u0434\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c)<\/em>.<\/p>\n<p>  <\/p>\n<p>\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0413\u043e\u0440\u0443\u0442\u0438\u043d\u0430\u043c\u0438 \u2014 \u0441\u0443\u043f\u0435\u0440 \u0434\u0435\u0448\u0435\u0432\u043e\u0435, <code>O(1)<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c, \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0433\u043e\u0440\u0443\u0442\u0438\u043d \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435. \u0412\u0441\u0451, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u044d\u0442\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c 3 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u2014 <code>Program counter<\/code>, <code>Stack Pointer<\/code> \u0438 <code>DX<\/code>.<\/p>\n<p>  <\/p>\n<h4 id=\"v-chem-otlichiya-gorutin-ot-potov-os\">\u0412 \u0447\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u0438\u044f \u0433\u043e\u0440\u0443\u0442\u0438\u043d \u043e\u0442 \u043f\u043e\u0442\u043e\u0432 \u041e\u0421?<\/h4>\n<p>  <\/p>\n<ul>\n<li>\u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438\u043c\u0435\u0435\u0442 \u0431\u043b\u043e\u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 (\u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0434\u043e <strong>2 \u041c\u0431\u0430\u0439\u0442<\/strong>) \u0434\u043b\u044f \u0441\u0442\u0435\u043a\u0430 \u2014 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043d \u0445\u0440\u0430\u043d\u0438\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0435\u0441\u044f \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u0438\u043b\u0438 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u044d\u0442\u043e\u043c\u0443 go-\u043f\u043e\u0434\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0441\u0442\u0435\u043a\u043e\u043c, \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u043a\u043e\u043b\u043e <strong>2 \u041a\u0431\u0430\u0439\u0442<\/strong>. \u0421\u0442\u0435\u043a \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b, \u043f\u043e\u0434\u043e\u0431\u043d\u043e \u0441\u0442\u0435\u043a\u0443 \u043f\u043e\u0442\u043e\u043a\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0445\u0440\u0430\u043d\u0438\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0438 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043d\u043e, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c; \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0441\u0442\u0438 \u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c\u0441\u044f<\/li>\n<li>\u041f\u043e\u0442\u043e\u043a\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u0435\u0435 \u044f\u0434\u0440\u0435, \u0430 \u0443 go \u0435\u0441\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a (m:n) \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u043a\u0441\u0438\u0440\u0443\u044e\u0449\u0438\u0439 (\u0440\u0430\u0441\u043a\u0438\u0434\u044b\u0432\u0430\u044e\u0449\u0438\u0439) \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u043a\u0438 (m) \u043f\u043e \u043f\u043e\u0442\u043e\u043a\u0430\u043c (n). \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u043b\u044e\u0441 \u2014 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043e\u0432\u0435\u0440\u0445\u0435\u0434\u0430 \u043d\u0430 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430<\/li>\n<li>\u041f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a Go \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <code>GOMAXPROCS<\/code> \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u043e\u0433\u0443\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043a\u043e\u0434 Go. \u0415\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0430\u0432\u043d\u043e <strong>\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 (\u044f\u0434\u0435\u0440) \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430<\/strong>, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0435 \u0441 8 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\u043c\u0438 (\u044f\u0434\u0440\u0430\u043c\u0438) \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 Go \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0430 8 \u043f\u043e\u0442\u043e\u043a\u0430\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u0421\u043f\u044f\u0449\u0438\u0435 \u0438\u043b\u0438 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u0438 go-\u043f\u043e\u0434\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442. Go-\u043f\u043e\u0434\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u0432\u043e\u0434\u0430-\u0432\u044b\u0432\u043e\u0434\u0430 \u0438\u043b\u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u0430\u0445, \u0438\u043b\u0438 \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0445\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 Go, \u043d\u0443\u0436\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u043e\u0442\u043e\u043a\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043d\u043e GOMAXPROCS \u0438\u0445 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442<\/li>\n<li>\u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0438 \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0445 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c, \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u043e\u0442\u043e\u043a \u0438\u043c\u0435\u0435\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0430 \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u043e\u0431\u044b\u0447\u043d\u043e \u2014 \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0438\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c). \u0423 \u0433\u043e\u0440\u0443\u0442\u0438\u043d \u043d\u0435\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0443. \u0422\u0430\u043a \u0440\u0435\u0448\u0435\u043d\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044f\u0437\u044b\u043a\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u043f\u043e\u0442\u043e\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u0437\u043b\u043e\u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u044e\u0442<\/li>\n<\/ul>\n<p>  <\/p>\n<h4 id=\"gde-allociruetsya-pamyat-dlya-gorutin\">\u0413\u0434\u0435 \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u043b\u044f \u0433\u043e\u0440\u0443\u0442\u0438\u043d?<\/h4>\n<p>  <\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f <strong>stackful<\/strong> \u2014 \u0442\u043e \u0438 \u043f\u0430\u043c\u044f\u0442\u044c \u0434\u043b\u044f \u043d\u0438\u0445 (\u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435) \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u0435\u043a\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0442\u0435\u043e\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0435\u0441\u043b\u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0442\u044c\u0441\u044f \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u0438\u043b\u0438\u043b\u0430\u0440\u0434 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0435\u0431\u0435 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u0435\u043a\u0430.<\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0441\u0430\u043c\u0438\u0445 \u0436\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0433\u043e\u0440\u0443\u0442\u0438\u043d \u043f\u0430\u043c\u044f\u0442\u044c \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0441 \u0445\u0438\u043f\u0430 (\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c &#171;\u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e&#187; \u0445\u0438\u043f\u0430, \u0442.\u0435. \u043e\u0431\u044a\u0435\u043c\u043e\u043c \u043f\u0430\u043c\u044f\u0442\u0438 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u0442\u044c \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0435).<\/p>\n<p>  <\/p>\n<blockquote><p>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c: <a href=\"https:\/\/hixon.ru\/o-zhizni\/dostuchatsya-do-nebes-korutiny-gorutiny-i-prochie-rutiny.html\" rel=\"nofollow noopener noreferrer\">\u0414\u043e\u0441\u0442\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u043d\u0435\u0431\u0435\u0441 \u2014 \u041a\u043e\u0440\u0443\u0442\u0438\u043d\u044b, \u0413\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u0438 \u043f\u0440\u043e\u0447\u0438\u0435 \u0420\u0443\u0442\u0438\u043d\u044b<\/a>, <a href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/586108\/\">Go: \u043a\u0430\u043a \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0435\u043a\u0430 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b?<\/a><\/p><\/blockquote>\n<p>  <\/p>\n<h4 id=\"kak-zavershit-mnogo-gorutin\">\u041a\u0430\u043a \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0433\u043e\u0440\u0443\u0442\u0438\u043d?<\/h4>\n<p>  <\/p>\n<p>\u041e\u0434\u0438\u043d \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u2014 \u044d\u0442\u043e \u043f\u0440\u0438\u0441\u0442\u0440\u0435\u043b\u0438\u0442\u044c <code>main<\/code> (\u0448\u0443\u0442\u043a\u0430). \u0420\u0430\u0431\u043e\u0442\u0443 \u043e\u0434\u043d\u043e\u0439 \u0433\u043e\u0440\u043e\u0443\u0442\u0438\u043d\u044b \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u0437 \u0434\u0440\u0443\u0433\u043e\u0439. \u041c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0438\u0445 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e (\u0443\u0447\u0438\u0442\u044c \u0441\u0430\u043c\u0438 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0442\u044c\u0441\u044f).<\/p>\n<p>  <\/p>\n<p>\u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f 2 \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u2014 \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 <code>context.Context<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">import (     \"context\"     \"time\" )  func f(ctx context.Context) { loop:     for {         select {         case &lt;-ctx.Done():             println(\"break f\")             break loop          default:             println(\"do some work\")             &lt;-time.After(time.Millisecond * 100)         }     } }  func main() {     ctx, cancel := context.WithCancel(context.Background())      for i := 0; i &lt; 3; i++ {         go f(ctx) \/\/ \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c 3 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b     }      &lt;-time.After(time.Millisecond * 50)     cancel() \/\/ \u043e\u0442\u043c\u0435\u043d\u044f\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442, \u043d\u0430 \u0447\u0442\u043e \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0445\u043e\u0434\u043e\u043c     &lt;-time.After(time.Millisecond * 60)      \/\/ do some work     \/\/ do some work     \/\/ do some work     \/\/ break f     \/\/ break f     \/\/ break f }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u0430 \u0434\u043b\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439 \u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f (\u0447\u0430\u0441\u0442\u043e \u0434\u043b\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0443\u0441\u0442\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <code>struct{}<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u0435\u0441\u0438\u0442):<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">import (     \"time\" )  func f(c &lt;-chan struct{}) { loop:     for {         select {         case &lt;-c:             println(\"break f\")             break loop          default:             println(\"do some work\")             &lt;-time.After(time.Millisecond * 100)         }     } }  func main() {     const workersCount = 3      var c = make(chan struct{}, workersCount)      for i := 0; i &lt; workersCount; i++ {         go f(c) \/\/ \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c 3 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b     }      &lt;-time.After(time.Millisecond * 50)      for i := 0; i &lt; workersCount; i++ {         c &lt;- struct{}{} \/\/ \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c 3 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u043a\u0430\u043d\u0430\u043b (\u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b) \u043e \u0432\u044b\u0445\u043e\u0434\u0435     }     \/\/ \u0412\u041e\u041e\u0411\u0429\u0415 - \u0446\u0438\u043a\u043b \u0441 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u041d\u0415 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c, \u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u043a\u0430\u043d\u0430\u043b     close(c)      &lt;-time.After(time.Millisecond * 60)      \/\/ do some work     \/\/ do some work     \/\/ do some work     \/\/ break f     \/\/ break f     \/\/ break f }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"keysy-ispolzovaniya-konteksta\">\u041a\u0435\u0439\u0441\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430<\/h3>\n<p>  <\/p>\n<p>\u041f\u0430\u043a\u0435\u0442 <code>context<\/code> \u0432 Go \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u043f\u0440\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u0445 \u0441 API \u0438 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 production-grade \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445. \u0421 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0435\u0434\u043e\u043c\u0438\u0442\u044c \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u044b \u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443, &#171;\u043f\u043e\u0448\u0430\u0440\u0438\u0442\u044c&#187; \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 middleware), \u0438\u043b\u0438 \u043b\u0435\u0433\u043a\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u043c.<\/p>\n<p>  <\/p>\n<h4 id=\"contextwithcancel\"><code>context.WithCancel()<\/code><\/h4>\n<p>  <\/p>\n<p>\u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0438\u0437 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0435\u0439 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f \u043f\u0435\u0440\u0432\u044b\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u0442\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e &#171;\u043e\u0442\u043c\u0435\u043d\u044b \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430&#187; (\u043f\u0440\u0438 \u0435\u0451 \u0432\u044b\u0437\u043e\u0432\u0435 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0442 &#171;\u043e\u0442\u043c\u0435\u043d\u0435\u043d&#187; \u043d\u0435 \u0431\u0443\u0434\u0435\u0442), \u0430 \u0432\u0442\u043e\u0440\u044b\u043c \u2014 \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442. \u0412\u0430\u0436\u043d\u043e \u2014 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043e\u0442\u043c\u0435\u043d\u044b \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f, <strong>\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u0442<\/strong>. \u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0442\u043c\u0435\u043d\u044b \u0441\u0430\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0438 \u0432\u0441\u0435 \u043a\u043e\u0442\u043d\u0435\u043a\u0442\u044b, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043d\u0435\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442 \u0432 <code>ctx.Done()<\/code> \u043f\u0443\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0438 \u0432 <code>ctx.Err()<\/code> \u043e\u0448\u0438\u0431\u043a\u0443 <code>context.Canceled<\/code>.<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">ctx, cancel := context.WithCancel(context.Background()) fmt.Println(ctx.Err()) \/\/ nil  cancel()  fmt.Println(&lt;-ctx.Done())      \/\/ {} fmt.Println(ctx.Err().Error()) \/\/ context canceled<\/code><\/pre>\n<p>  <\/p>\n<h4 id=\"contextwithdeadline\"><code>context.WithDeadline()<\/code><\/h4>\n<p>  <\/p>\n<p>\u0422\u0430\u043a \u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u043e\u0442 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043c\u0435\u043d\u0438\u0442\u0441\u044f <strong>\u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e<\/strong> \u043f\u0440\u0438 \u043d\u0430\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0435\u043c\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u0442\u043c\u0435\u0442\u043a\u0435, \u0438\u043b\u0438 \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0442\u043c\u0435\u043d\u044b. \u041e\u0442\u043c\u0435\u043d\u0430\/\u0442\u0430\u0439\u043c\u0430\u0443\u0442 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0438 \u0435\u0433\u043e &#171;\u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u0432&#187;. <code>ctx.Err()<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 <code>context.DeadlineExceeded<\/code>. \u041f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u0432:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">ctx, cancel := context.WithDeadline(     context.Background(),     time.Now().Add(time.Millisecond*100), ) defer cancel() fmt.Println(ctx.Err()) \/\/ nil  &lt;-time.After(time.Microsecond * 110)  fmt.Println(&lt;-ctx.Done())      \/\/ {} fmt.Println(ctx.Err().Error()) \/\/ context deadline exceeded<\/code><\/pre>\n<p>  <\/p>\n<h4 id=\"contextwithtimeout\"><code>context.WithTimeout()<\/code><\/h4>\n<p>  <\/p>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e <code>context.WithDeadline()<\/code> \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0430 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u2014 <code>time.Second<\/code>):<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">ctx, cancel := context.WithTimeout(context.Background(), time.Second*2)<\/code><\/pre>\n<p>  <\/p>\n<h4 id=\"contextwithvalue\"><code>context.WithValue()<\/code><\/h4>\n<p>  <\/p>\n<p>\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 &#171;\u043f\u043e\u0448\u0430\u0440\u0438\u0442\u044c&#187; \u0434\u0430\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 \u0432\u0441\u0451 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u0435 \u0434\u0435\u0432\u0435\u0440\u043e &#171;\u043d\u0438\u0436\u0435&#187;. \u0427\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0447\u0442\u043e\u0431 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043b\u043e\u0433\u0433\u0435\u0440 \u0438\u043b\u0438 HTTP \u0437\u0430\u043f\u0440\u043e\u0441 \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0435 middleware (\u043d\u043e \u0432 9 \u0438\u0437 10 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e, \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0430\u043d\u0442\u0438\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u043c). \u041b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u044f\/\u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 (\u0442\u0430\u043a \u043a\u0430\u043a &#171;\u0432 \u043d\u0451\u043c&#187; \u043e\u043d\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u043a\u0430\u043a <code>interface{}<\/code>):<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">import (     \"context\"     \"log\"     \"os\" )  const loggerCtxKey = \"logger\" \/\/ should be unique  func PutLogger(ctx context.Context, logger *log.Logger) context.Context {     return context.WithValue(ctx, loggerCtxKey, logger) }  func GetLogger(ctx context.Context) *log.Logger {     return ctx.Value(loggerCtxKey).(*log.Logger) }  func f(ctx context.Context) {     logger := GetLogger(ctx)      logger.Print(\"inside f\")     println(logger) }  func main() {     var (         logger        = log.New(os.Stdout, \"\", 0)         ctxWithLogger = PutLogger(context.Background(), logger)     )      logger.Printf(\"main\")     println(logger)      f(ctxWithLogger)      \/\/ main     \/\/ 0xc0000101e0     \/\/ inside f     \/\/ 0xc0000101e0 }<\/code><\/pre>\n<p>  <\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/6246d9fc101f9e0b2753e41d\" data-style=\"\" id=\"6246d9fc101f9e0b2753e41d\" width=\"\"><\/div>\n<\/div>\n<p>  <\/p>\n<blockquote><p>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c: <a href=\"https:\/\/habr.com\/ru\/company\/nixys\/blog\/461723\/\">\u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 \u043f\u0430\u043a\u0435\u0442\u043e\u043c Context \u0432 Golang<\/a><\/p><\/blockquote>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c <code>ok == true<\/code> \u0434\u043e \u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430, \u043f\u043e\u043a\u0430 \u0432 \u043a\u0430\u043d\u0430\u043b\u0435 \u0435\u0441\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f (\u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043e\u0442\u043a\u0440\u044b\u0442 \u043e\u043d \u0438\u043b\u0438 \u0437\u0430\u043a\u0440\u044b\u0442), \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <code>ok == false<\/code> \u0430 <code>val<\/code> \u0431\u0443\u0434\u0435\u0442 \u043d\u0443\u043b\u0435\u0432\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u043d\u0430\u043b\u0430. \u041f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u0431\u0443\u0434\u0435\u0442 \u043f\u0430\u043d\u0438\u043a\u0430 (\u0430\u0432\u0442\u043e\u0440\u044b \u044f\u0437\u044b\u043a\u0430 \u0442\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u043b\u0438 &#171;\u0438\u0431\u043e \u043d\u0435\u0444\u0438\u0433 \u2014 \u043a\u0430\u043d\u0430\u043b \u0437\u0430\u043a\u0440\u044b\u0442 \u0437\u043d\u0430\u0447\u0438\u0442 \u0437\u0430\u043a\u0440\u044b\u0442&#187;).<\/p>\n<p>  <\/p>\n<h3 id=\"kak-zadetektit-gonku\">\u041a\u0430\u043a \u0437\u0430\u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0442\u044c \u0433\u043e\u043d\u043a\u0443?<\/h3>\n<p>  <\/p>\n<p>\u041f\u0438\u0448\u0435\u043c \u0442\u0435\u0441\u0442\u044b, \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0438\u0445 \u0441 \u0444\u043b\u0430\u0433\u043e\u043c <code>-race<\/code> (\u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u043d\u0442\u0430\u0439\u043c \u0431\u0443\u0434\u0435\u0442 \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430\u043c\u0438 (\u0435\u0441\u043b\u0438 \u043d\u0435 \u043e\u0448\u0438\u0431\u0430\u044e\u0441\u044c), \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 &#171;\u0436\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u0443\u0435\u0442&#187; \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u043f\u0430\u043c\u044f\u0442\u0438). \u042d\u0442\u043e\u0442 \u0444\u043b\u0430\u0433 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u0434\u043b\u044f <code>go test<\/code>, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f <code>go run<\/code> \u0438\u043b\u0438 <code>go build<\/code>.<\/p>\n<p>  <\/p>\n<p>\u0414\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0433\u043e\u043d\u043a\u0438 \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f (runtime library) C\/C++ ThreadSanitizer.<\/p>\n<p>  <\/p>\n<p>\u0422\u0430\u043a \u0436\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u044e \u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u044b, \u043f\u0440\u043e\u0432\u043e\u0446\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0433\u043e\u043d\u043a\u0443. \u041a\u043e\u0434 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435, \u043d\u043e \u0434\u043b\u044f \u044d\u0442\u0430\u043f\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e \u0438 \u043d\u0435 \u0442\u0430\u043a \u0432\u0430\u0436\u043d\u043e. \u0410 \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440) 100 \u0433\u043e\u0440\u0443\u0442\u0438\u043d \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0438\u0442\u0430\u044e\u0442 \u0438 \u043f\u0438\u0448\u0443\u0442 \u0447\u0442\u043e-\u0442\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435.<\/p>\n<p>  <\/p>\n<p>\u0412\u0430\u0436\u043d\u043e \u0438 \u0435\u0449\u0451 \u043e\u0434\u043d\u043e \u0432\u044b\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043d\u0438\u0435 \u2014 &#171;<strong>\u0415\u0441\u043b\u0438 race detector \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0433\u043e\u043d\u043a\u0438, \u0442\u043e \u043e\u043d\u043e \u0443 \u0432\u0430\u0441 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u0435\u0441\u0442\u044c; \u0435\u0441\u043b\u0438 \u0436\u0435 \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u2014 \u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e \u0435\u0433\u043e \u043d\u0435\u0442<\/strong>&#171;.<\/p>\n<p>  <\/p>\n<h2 id=\"testirovanie\">\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h2>\n<p>  <\/p>\n<p>\u0414\u043b\u044f unit-\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (aka \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u043e\u0433\u043e) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432\u0438\u0434\u0430 <code>go test<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0447\u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0441 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430 <code>Test<\/code> \u0432 \u0444\u0430\u0439\u043b\u0430\u0445, \u0447\u0442\u043e \u0438\u043c\u0435\u044e\u0442 \u0432 \u0441\u0432\u043e\u0435\u043c \u0438\u043c\u0435\u043d\u0438 \u043f\u043e\u0441\u0442\u0444\u0438\u043a\u0441 <code>_test.go<\/code> \u2014 \u0432\u0441\u0451 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e.<\/p>\n<p>  <\/p>\n<p>\u0412\u0430\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0430\u043c \u043a\u043e\u0434 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b \u0442\u0430\u043c, \u0433\u0434\u0435 \u043e\u043d\u0438 \u0443\u043c\u0435\u0441\u0442\u043d\u044b).<\/p>\n<p>  <\/p>\n<h3 id=\"tdt-table-driven-tests-tablichnoe-testirovanie\">TDT, Table-driven tests (\u0442\u0430\u0431\u043b\u0438\u0447\u043d\u043e\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435)<\/h3>\n<p>  <\/p>\n<p>\u042f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b\u0445 \u043a\u0435\u0439\u0441\u043e\u0432 \u043f\u0435\u0440\u0435\u0434 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c &#171;\u043e\u0434\u0438\u043d \u043a\u0435\u0439\u0441 \u2014 \u043e\u0434\u0438\u043d \u0442\u0435\u0441\u0442&#187;, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043e\u0442\u0434\u0435\u043b\u0438\u0442\u044c \u0447\u0430\u0441\u0442\u044c \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 \u0432\u0441\u0435\u0445 \u044d\u0442\u0430\u043f\u043e\u0432 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 tear-down (\u043d\u0435 \u0437\u043d\u0430\u044e \u043a\u0430\u043a \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e-\u0440\u0443\u0441\u0441\u043a\u0438). \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438 \u0435\u0451 \u0442\u0435\u0441\u0442 \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">package main  func Sum(a, b int) int { return a + b }<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"go\">package main  import \"testing\"  func TestSum(t *testing.T) {     for name, tt := range map[string]struct { \/\/ \u043a\u043b\u044e\u0447 \u043c\u0430\u043f\u044b - \u0438\u043c\u044f \u0442\u0435\u0441\u0442\u0430         giveOne, giveSecond int         wantResult          int     }{         \"1 + 1 = 2\": {             giveOne: 1, giveSecond: 1, wantResult: 2,         },         \"140 + 6 = 146\": {             giveOne: 140, giveSecond: 6, wantResult: 146,         },     } {         t.Run(name, func(t *testing.T) {             \/\/ setup here              if res := Sum(tt.giveOne, tt.giveSecond); res != tt.wantResult {                 t.Errorf(\"Unexpected result. Want %d, got %d\", tt.wantResult, res)             }              \/\/ teardown here         })     } }<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"imya-paketa-s-testami\">\u0418\u043c\u044f \u043f\u0430\u043a\u0435\u0442\u0430 \u0441 \u0442\u0435\u0441\u0442\u0430\u043c\u0438<\/h3>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0438\u043c\u044f \u043f\u0430\u043a\u0435\u0442\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 \u0441 \u0442\u0435\u0441\u0442\u0430\u043c\u0438 (<code>foo_test.go<\/code>) \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u0441\u0442\u0444\u0438\u043a\u0441\u043e\u043c <code>_test<\/code> (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u0438\u043c\u044f \u043f\u0430\u043a\u0435\u0442\u0430, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0438\u0448\u0443\u0442\u0441\u044f \u0442\u0435\u0441\u0442\u044b <code>foo<\/code>, \u0430 \u0438\u043c\u044f \u043f\u0430\u043a\u0435\u0442\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435 \u0432 \u0441\u0430\u043c\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0441 \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u2014 <code>foo_test<\/code>), \u0442\u043e \u0432 \u0442\u0435\u0441\u0442\u0430\u0445 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0432 \u043d\u0435-\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c &#171;\u043a\u0430\u043a \u0438\u0437-\u0432\u043d\u0435&#187;, \u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0431\u043b\u0430\u0437\u043d\u0430 \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0435, \u0447\u0442\u043e \u0432 \u043f\u0430\u043a\u0435\u0442\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f. \u041f\u043e \u0438\u0434\u0435\u0435, \u0432 \u043e\u0434\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f 2 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0444\u0430\u0439\u043b\u043e\u0432, \u0438\u043c\u0435\u043d\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f, \u043d\u043e <code>*_test<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430.<\/p>\n<p>  <\/p>\n<p>\u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u0441\u0442\u0438\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c API, \u0430 \u043d\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b, \u0442.\u0435. \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u044c\u0441\u044f \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043a\u0430\u043a \u043a &#171;\u0447\u0435\u0440\u043d\u043e\u043c\u0443 \u044f\u0449\u0438\u043a\u0443&#187;, \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e.<\/p>\n<p>  <\/p>\n<h3 id=\"staticheskie-analizatory-lintery\">\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u044b (\u043b\u0438\u043d\u0442\u0435\u0440\u044b)<\/h3>\n<p>  <\/p>\n<p>\u0423\u0436\u0435 \u0434\u0430\u0432\u043d\u043e \u043d\u0430 \u0432\u0441\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u0436\u0438\u0437\u043d\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 <a href=\"https:\/\/github.com\/golangci\/golangci-lint\" rel=\"nofollow noopener noreferrer\">golangci-lint<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0449\u0438\u043c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043b\u0438\u043d\u0442\u0435\u0440\u043e\u0432 \u0432 &#171;\u043e\u0434\u043d\u043e\u043c \u0444\u043b\u0430\u043a\u043e\u043d\u0435&#187;. \u0423\u0434\u043e\u0431\u0435\u043d \u043a\u0430\u043a \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e, \u0442\u0430\u043a \u0438 \u043d\u0430 CI.<\/p>\n<p>  <\/p>\n<h3 id=\"oshibka-v-benchmarke\">\u041e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0435<\/h3>\n<p>  <\/p>\n<p>\u041f\u0440\u043e \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438 \u2014 \u0438\u043d\u043e\u0433\u0434\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u0435\u0439\u0441 \u0441 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">func BenchmarkWrong(b *testing.B) {     for i := 0; i &lt; b.N; i++ {         ourFunc()     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u044d\u0442\u043e \u0432\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0435\u0451 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043a\u0430\u043a inline-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442, \u0447\u0442\u043e \u0432\u044b\u0437\u043e\u0432\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u043e\u0431\u043e\u0447\u043d\u044b\u0445 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 (side-effects), \u0442.\u0435. \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0441\u0440\u0435\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432\u044b\u0437\u043e\u0432 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0434\u0430\u043b\u0451\u043d. \u041e\u0434\u0438\u043d \u0438\u0437 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f \u0432\u044b\u0448\u0435 \u2013 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0443\u0440\u043e\u0432\u043d\u044f \u043f\u0430\u043a\u0435\u0442\u0430. \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">var result uint64  func BenchmarkCorrect(b *testing.B) {     var r uint64     for i := 0; i &lt; b.N; i++ {         r = ourFunc()     }     result = r }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u043d\u0430\u0442\u044c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 side-effect \u0438 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u0447\u0435\u043d.<\/p>\n<p>  <\/p>\n<h3 id=\"chto-pro-funkcionalnoe-testirovanie\">\u0427\u0442\u043e \u043f\u0440\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435?<\/h3>\n<p>  <\/p>\n<p>\u0422\u0443\u0442 \u0432\u0441\u0451 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0438 \u0442\u044f\u043d\u0435\u0442 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0442\u0435\u043c\u0443 \u0434\u043b\u044f \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430. \u0414\u043b\u044f HTTP \u043f\u043e\u0441\u043e\u0432\u0435\u0442\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/www.postman.com\/\" rel=\"nofollow noopener noreferrer\">postman<\/a> \u0438 \u0435\u0433\u043e CLI-\u0432\u0435\u0440\u0441\u0438\u044e <a href=\"https:\/\/github.com\/postmanlabs\/newman\" rel=\"nofollow noopener noreferrer\">newman<\/a>. \u0415\u0449\u0451 \u043a\u0430\u043a \u0432\u0430\u0440\u0438\u0430\u043d\u0442 &#171;\u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u043f\u0440\u043e\u0441\u0442\u043e&#187; \u2014 \u044d\u0442\u043e <a href=\"https:\/\/hurl.dev\/\" rel=\"nofollow noopener noreferrer\">hurl<\/a>.<\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0437\u0430-mock-\u0438\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0433\u043e HTTP API \u2014 <a href=\"https:\/\/github.com\/jmartin82\/mmock\" rel=\"nofollow noopener noreferrer\">jmartin82\/mmock<\/a> \u0438\u043b\u0438 <a href=\"https:\/\/github.com\/lamoda\/gonkey\" rel=\"nofollow noopener noreferrer\">lamoda\/gonkey<\/a>.<\/p>\n<p>  <\/p>\n<h2 id=\"profilirovanie-pprof\">\u041f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 (<code>pprof<\/code>)<\/h2>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f &#171;\u0440\u043e\u0434\u043d\u044b\u043c\u0438&#187; \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438 \u0432 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0435 \u0441 Go \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043f\u0430\u043a\u0435\u0442 <code>pprof<\/code> \u0438 \u043e\u0434\u043d\u043e\u0438\u043c\u0435\u043d\u043d\u0430\u044f \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430 <code>go tool pprof<\/code>. \u041f\u0440\u0438\u0447\u0438\u043d\u0430\u043c\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u0442\u0430\u0442\u044c:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/li>\n<li>\u0412\u044b\u0441\u043e\u043a\u043e\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438<\/li>\n<li>\u0412\u044b\u0441\u043e\u043a\u043e\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0435\u043c\u043f\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u043c \u2014 \u0441 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u043c\u044b \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0431\u0435\u0440\u0435\u043c \u0441\u0442\u0435\u043a-\u0442\u0440\u0435\u0439\u0441, \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0435\u0433\u043e \u043a\u0443\u0434\u0430-\u0442\u043e, \u0430 \u0432 \u043a\u043e\u043d\u0446\u0435, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u0432 \u0441\u0442\u0435\u043a-\u0442\u0440\u0435\u0439\u0441\u0430\u0445 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0440\u0430\u0437\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043c\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c, \u043a\u0430\u043a\u0438\u0435 \u0438\u0437 \u043d\u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u0430 \u043a\u0430\u043a\u0438\u0435 \u043c\u0435\u043d\u044c\u0448\u0435. \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043d\u0438\u043c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u044d\u0442\u0430\u043f\u043e\u0432 \u2014 \u0441\u0431\u043e\u0440 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u0438 \u0435\u0451 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f + \u0430\u043d\u0430\u043b\u0438\u0437. \u0421\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0432\u044b\u0437\u043e\u0432\u044b \u043f\u0430\u043a\u0435\u0442\u0430 <code>pprof<\/code>, \u043b\u0438\u0431\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432 HTTP \u0441\u0435\u0440\u0432\u0435\u0440.<\/p>\n<p>  <\/p>\n<h3 id=\"primer-ispolzovaniya-pprof\">\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f <code>pprof<\/code><\/h3>\n<p>  <\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u043b\u0433\u043e. \u041e\u0431\u0440\u0430\u043c\u0438\u043c \u0432\u044b\u0437\u043e\u0432\u044b \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e-\u0442\u044f\u0436\u0435\u043b\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0432 <code>startPprof<\/code> \u0438 <code>stopPprof<\/code>:<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"go\">package main  import (     \"os\"     \"runtime\/pprof\"     \"time\" )  func startPprof() *os.File { \/\/ \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f     f, err := os.Create(\"profile.pprof\")     if err != nil {         panic(err)     }      if err = pprof.StartCPUProfile(f); err != nil {         panic(err)     }      return f }  func stopPprof(f *os.File) { \/\/ \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f     pprof.StopCPUProfile()      if err := f.Close(); err != nil {         panic(err)     } }  func main() { \/\/ \u043d\u0430\u0448\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f     var (         slice = make([]int, 0)         m     = make(map[int]int)     )      pprofFile := startPprof() \/\/ \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435      \/\/ \u0442\u0443\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \"\u0442\u044f\u0436\u0435\u043b\u0430\u044f\" \u0440\u0430\u0431\u043e\u0442\u0430     for i := 0; i &lt; 10_000_000; i++ {         slice = append(slice, i*i)     }      for i := 0; i &lt; 10_000_000; i++ {         m[i] = i * i     }      &lt;-time.After(time.Second)     \/\/ \u0430 \u0442\u0443\u0442 \u043e\u043d\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f      stopPprof(pprofFile) \/\/ \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (<code>go build -o .\/main . &amp;&amp; .\/main<\/code>) \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0444\u0430\u0439\u043b \u0441 \u0438\u043c\u0435\u043d\u0435\u043c <code>profile.pprof<\/code>, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0440\u0430\u0431\u043e\u0442\u044b. &#171;\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u043c&#187; \u0435\u0433\u043e \u0432 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u0432\u0438\u0434\u0435 <code>svg<\/code> \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>go tool pprof -svg .\/profile.pprof<\/code> (\u043d\u0430 Linux \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 <code>graphviz<\/code>) \u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0435\u0433\u043e (\u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432 \u0432\u0438\u0434\u0435 <code>profile001.svg<\/code>):<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/xp\/y5\/zy\/xpy5zy7f3zoixmwzbf8840hbc6o.png\" data-src=\"https:\/\/habrastorage.org\/webt\/xp\/y5\/zy\/xpy5zy7f3zoixmwzbf8840hbc6o.png\"\/><\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439\u0441\u044f \u0433\u0440\u0430\u0444 \u0432\u044b\u0437\u043e\u0432\u043e\u0432. \u0418\u0437\u0443\u0447\u0430\u044f \u0442\u0430\u043a\u043e\u0439 \u0433\u0440\u0430\u0444, \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e\u043b\u0449\u0438\u043d\u0443 \u0440\u0435\u0431\u0435\u0440 (\u0441\u0442\u0440\u0435\u043b\u043e\u0447\u0435\u043a) \u0438 \u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0443\u0437\u043b\u043e\u0432 \u0433\u0440\u0430\u0444\u0430 (\u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u043a\u043e\u0432). \u041d\u0430 \u0440\u0435\u0431\u0440\u0430\u0445 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043e \u0432\u0440\u0435\u043c\u044f \u2014 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0434\u0430\u043d\u043d\u044b\u0439 \u0443\u0437\u0435\u043b \u0438\u043b\u0438 \u043b\u044e\u0431\u043e\u0439 \u0438\u0437 \u043d\u0438\u0436\u0435 \u043b\u0435\u0436\u0430\u0449\u0438\u0445 \u0443\u0437\u043b\u043e\u0432 \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0441\u044f \u0432 \u0441\u0442\u0435\u043a-\u0442\u0440\u0435\u0439\u0441\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u0435 \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e <code>runtime evacuate_fast64<\/code> \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0421\u0432\u044f\u0437\u0430\u043d\u043e \u044d\u0442\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0438\u0437 \u043c\u0430\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u044d\u0432\u0430\u043a\u0443\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u0430\u043f\u044b \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0442\u0451\u0442. \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u044d\u0442\u043e (\u0430 \u0437\u0430\u043e\u0434\u043d\u043e \u0438 \u0441\u043b\u0430\u0439\u0441) \u0432\u0441\u0435\u0433\u043e \u0432 \u0434\u0432\u0443\u0445 \u0441\u0442\u0440\u043e\u0447\u043a\u0430\u0445:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">var (   slice = make([]int, 0, 10_000_000)    \/\/ \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0430\u043b\u043b\u043e\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u0432 \u0441\u043b\u0430\u0439\u0441\u0435   m     = make(map[int]int, 10_000_000) \/\/ \u0438 \u0432 \u043c\u0430\u043f\u0435 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 )<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c \u0432\u0441\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u043d\u0435\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u043d\u043e\u0432\u0430, \u0438 \u0432\u0438\u0434\u0438\u043c \u0443\u0436\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0434\u0440\u0443\u0433\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/t0\/vp\/sq\/t0vpsqvhpscvxj95bhf7djge4cg.png\" data-src=\"https:\/\/habrastorage.org\/webt\/t0\/vp\/sq\/t0vpsqvhpscvxj95bhf7djge4cg.png\"\/><\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0443\u0447\u0448\u0435, \u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u043c\u0435\u0441\u0442\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 (\u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e) \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u2014 \u043d\u0443\u0436\u043d\u0430 \u043b\u0438 \u043d\u0430\u043c \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043c\u0430\u043f\u043e\u0439 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 (\u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0451 \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u0441\u043b\u0430\u0439\u0441\u043e\u043c), \u0438 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u2014 \u0442\u043e \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c (\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c) \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043d\u0435\u0451.<\/p>\n<\/div><\/div>\n<p>  <\/p>\n<h3 id=\"tak-kak-zhe-profilirovschik-rabotaet-v-principe\">\u0422\u0430\u043a \u043a\u0430\u043a \u0436\u0435 \u043f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435?<\/h3>\n<p>  <\/p>\n<p>Go runtime \u043f\u0440\u043e\u0441\u0438\u0442 \u041e\u0421 \u043f\u043e\u0441\u044b\u043b\u0430\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b (<code>man setitimer<\/code>) \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0441\u0438\u0433\u043d\u0430\u043b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a. \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0431\u0435\u0440\u0435\u0442 \u0441\u0442\u0435\u043a-\u0442\u0440\u0435\u0439\u0441 \u0432\u0441\u0435\u0445 \u0433\u043e\u0440\u0443\u0442\u0438\u043d, \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0435\u0435 \u0432 \u0431\u0443\u0444\u0435\u0440 \u0438 \u0432\u044b\u0445\u043e\u0434\u0438\u0442.<\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u043a\u043e\u0432\u044b \u0436\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430?<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u2014 \u044d\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430, \u0432\u0435\u0449\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0437\u0430\u0442\u0440\u0430\u0442\u043d\u0430\u044f \u0432 \u043d\u0430\u0448\u0435 \u0432\u0440\u0435\u043c\u044f. \u0412 Go \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043a\u0430 100 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u0418\u043d\u043e\u0433\u0434\u0430 \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u043b\u043e<\/li>\n<li>\u0414\u043b\u044f \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0441\u0431\u043e\u0440\u043e\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <code>-buildmode=c-archive<\/code> \u0438\u043b\u0438 <code>-buildmode=c-shared<\/code>, \u043f\u0440\u043e\u0444\u0430\u0439\u043b\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u042d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0441\u0438\u0433\u043d\u0430\u043b <code>SIGPROF<\/code> (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442 \u041e\u0421) \u043f\u0440\u0438\u0434\u0435\u0442 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u043e\u0442\u043e\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f Go<\/li>\n<li>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 <code>user space<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0430 Go, \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u044f\u0434\u0435\u0440\u043d\u044b\u0439 \u0441\u0442\u0435\u043a-\u0442\u0440\u0435\u0439\u0441. \u041d\u0435\u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438\u043d\u043e\u0433\u0434\u0430 \u043a\u0440\u043e\u044e\u0442\u0441\u044f \u0438 \u0432 \u044f\u0434\u0440\u0435<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e Go runtime \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e \u0441\u0432\u043e\u0435\u043c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435. \u0412\u043d\u0435\u0448\u043d\u0438\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0437\u043d\u0430\u044e\u0442 \u043e \u0433\u043e\u0440\u0443\u0442\u0438\u043d\u0430\u0445. \u0414\u043b\u044f \u043d\u0438\u0445 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0438 \u0442\u0440\u0435\u0434\u044b.<\/p>\n<p>  <\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/6246d9fce635030b64de8068\" data-style=\"\" id=\"6246d9fce635030b64de8068\" width=\"\"><\/div>\n<\/div>\n<p>  <\/p>\n<blockquote><p>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c: <a href=\"https:\/\/habr.com\/ru\/company\/badoo\/blog\/301990\/\">\u041f\u0440\u043e\u0444\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u043d\u0430 Go<\/a><\/p><\/blockquote>\n<p>  <\/p>\n<h2 id=\"kompilyator\">\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440<\/h2>\n<p>  <\/p>\n<p>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0430\u0448\u0435\u0433\u043e (\u0433\u043e\u0432\u043d\u043e)\u043a\u043e\u0434\u0430 \u0432 \u043a\u0430\u0448\u0443 \u0438\u0437 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u041f\u0435\u0440\u0432\u043e\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0442\u0435\u0431\u0435, \u0432\u0442\u043e\u0440\u043e\u0435 \u2014 \u043c\u0430\u0448\u0438\u043d\u0435.<\/p>\n<p>  <\/p>\n<h3 id=\"iz-kakih-etapov-sostoit-kompilyaciya\">\u0418\u0437 \u043a\u0430\u043a\u0438\u0445 \u044d\u0442\u0430\u043f\u043e\u0432 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f?<\/h3>\n<p>  <\/p>\n<p><code>cmd\/compile<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b Go \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d \u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0435 \u0444\u0430\u0437\u044b:<\/p>\n<p>  <\/p>\n<ul>\n<li><strong>Parsing<\/strong> (<code>cmd\/compile\/internal\/syntax<\/code>) \u2014 \u0441\u043e\u0440\u0435\u0446 \u043f\u0430\u0440\u0441\u0438\u0442\u0441\u044f, \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0442\u043e\u043a\u0435\u043d\u044b, \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e<\/li>\n<li><strong>Type-checking and AST (Abstract Syntax Tree) transformations<\/strong> (<code>cmd\/compile\/internal\/gc<\/code>) \u2014 \u0434\u0435\u0440\u0435\u0432\u043e \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 AST, \u0442\u0443\u0442 \u0436\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043c\u0430\u0433\u0438\u044f \u043f\u043e \u0430\u0432\u0442\u043e-\u0442\u0438\u043f\u0438\u0437\u0430\u0446\u0438\u0438, \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u044d\u0442\u0430\u043f\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0440\u0442\u0432\u044b\u0439 \u043a\u043e\u0434 \u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 escape-\u0430\u043d\u0430\u043b\u0438\u0437<\/li>\n<li><strong>Generic SSA (Static Single Assignment)<\/strong> (<code>cmd\/compile\/internal\/gc<\/code>, <code>cmd\/compile\/internal\/ssa<\/code>) \u2014 AST \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 SSA (\u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u043d\u0438\u0437\u043a\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f), \u0447\u0442\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439; \u0442\u0430\u043a \u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f (\u0442\u0443\u0442, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0446\u0438\u043a\u043b\u044b <code>range<\/code> \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 <code>for<\/code>; \u0430 <code>copy<\/code> \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u043f\u0430\u043c\u044f\u0442\u0438), \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 <code>nil<\/code> \u0438 \u0442.\u0434.<\/li>\n<li><strong>Generating machine code<\/strong> (<code>cmd\/compile\/internal\/ssa<\/code>, <code>cmd\/internal\/obj<\/code>) \u2014 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0435 \u0448\u0442\u0443\u043a\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u043d\u043e-\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 (\u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0438 \u041e\u0421), \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043d\u0430\u0434 SSA \u0441\u043d\u043e\u0432\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0440\u0442\u0432\u044b\u0439 \u043a\u043e\u0434, \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b, \u0440\u0430\u0437\u043c\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0435\u043a\u043e\u0432\u044b\u0439 \u0444\u0440\u0435\u0439\u043c; \u043f\u043e\u0441\u043b\u0435 \u2014 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0441\u0451 \u044d\u0442\u043e \u0434\u043e\u0431\u0440\u043e \u0432 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0439 \u0444\u0430\u0439\u043b<\/li>\n<\/ul>\n<p>  <\/p>\n<blockquote><p>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c: <a href=\"https:\/\/medium.com\/german-gorelkin\/introduction-to-the-go-compiler-1aa6bedc4407\" rel=\"nofollow noopener noreferrer\">\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 Go<\/a><\/p><\/blockquote>\n<p>  <\/p>\n<h3 id=\"staticheskaya-kompilyaciyalinkovka---chto-eto-i-v-chem-osobennosti\">\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f\/\u043b\u0438\u043d\u043a\u043e\u0432\u043a\u0430 \u2014 \u0447\u0442\u043e \u044d\u0442\u043e, \u0438 \u0432 \u0447\u0435\u043c \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438?<\/h3>\n<p>  <\/p>\n<p>\u041b\u0438\u043d\u043a\u043e\u0432\u043a\u0430 (\u043d\u0443 \u0438\u043b\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u0430) \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u044d\u0442\u0430\u043f \u0441\u0431\u043e\u0440\u043a\u0438. \u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043b\u0438\u043d\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438\/\u043b\u0438\u043d\u043a\u043e\u0432\u043a\u0438 (\u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0441\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0431\u0443\u0434\u0443\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u0432 \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u0430\u0439\u043b) \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 <code>CGO_ENABLED=0<\/code> (\u0442.\u0435. <code>CGO_ENABLED=0 go build ...<\/code>). \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043c\u043e\u0436\u043d\u043e \u0431\u0435\u0437\u0431\u043e\u044f\u0437\u043d\u0435\u043d\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 docker-\u043e\u0431\u0440\u0430\u0437\u0435, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043d\u0430 <code>scratch<\/code> (\u0442.\u0435. \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u043c \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u0440\u0438\u0441\u0442\u0430\u043b\u044c\u043d\u043e \u0447\u0438\u0441\u0442\u0430\u044f \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430).<\/p>\n<p>  <\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u044d\u0442\u043e \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u0438\u0432\u043d\u043e\u0441\u0438\u0442 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c:<\/p>\n<p>  <\/p>\n<ul>\n<li><code>C<\/code>-\u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d, \u0441\u043e\u0432\u0441\u0435\u043c (\u0447\u0430\u0441\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0438\u0437 stdlib Go \u043e\u0442 \u043d\u0435\u0433\u043e \u0437\u0430\u0432\u0438\u0441\u044f\u0442, \u043a \u0441\u043b\u043e\u0432\u0443, \u043d\u043e \u043d\u0435 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0445)<\/li>\n<li>\u041d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <strong>\u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439<\/strong> DNS-\u0440\u0435\u0437\u043e\u043b\u044c\u0432\u0435\u0440<\/li>\n<li>\u041d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 <code>x.509<\/code> \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 MacOS X<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0418 \u0435\u0449\u0451, \u0435\u0441\u043b\u0438 \u0438\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 docker <code>scratch<\/code>, \u0442\u043e \u0442\u0430\u043a \u0436\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0432 \u0432\u0438\u0434\u0443:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0414\u043b\u044f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u044f HTTP \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 HTTPS \u0432\u0430\u0448\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c, \u0432 \u043e\u0431\u0440\u0430\u0437 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u0440\u043d\u0435\u0432\u044b\u0435 SSL\/TLS \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u044b <code>\/etc\/ssl\/certs<\/code><\/li>\n<li>\u0424\u0430\u0439\u043b \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0437\u043e\u043d\u044b (<code>\/etc\/timezone<\/code>) \u0442\u043e\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c, \u0447\u0442\u043e\u0431 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0434\u0430\u0442\u043e\u0439\/\u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c<\/li>\n<\/ul>\n<p>  <\/p>\n<blockquote><p>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c: <a href=\"https:\/\/stackoverflow.com\/a\/45722910\/2252921\" rel=\"nofollow noopener noreferrer\">Docker scratch &amp; CGO_ENABLED=0<\/a>, <a href=\"https:\/\/habr.com\/ru\/post\/249449\/\">\u041a\u0440\u043e\u0441\u0441-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0432 Go<\/a>, <a href=\"https:\/\/zagirov.name\/post\/go-dns\/\" rel=\"nofollow noopener noreferrer\">Go dns<\/a><\/p><\/blockquote>\n<p>  <\/p>\n<h3 id=\"kakie-direktivy-kompilyatora-znaesh\">\u041a\u0430\u043a\u0438\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0437\u043d\u0430\u0435\u0448\u044c?<\/h3>\n<p>  <\/p>\n<p>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 Go \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b (\u043f\u0438\u0448\u0443\u0442\u0441\u044f \u043e\u043d\u0438 \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e <code>\/\/go:directive<\/code>), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 (\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a, \u0438 \u0442.\u0434.) \u043d\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u044f\u0437\u044b\u043a\u0430. \u0412\u043e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0438\u0445:<\/p>\n<p>  <\/p>\n<h4 id=\"golinkname\"><code>\/\/go:linkname<\/code><\/h4>\n<p>  <\/p>\n<p>\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e\u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439. \u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <strong>\u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/strong> \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u0422\u0440\u0435\u0431\u0443\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u0430 <code>unsafe<\/code> (<code>import _ \"unsafe\"<\/code>). \u0424\u043e\u0440\u043c\u0430\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">\/\/go:linkname localname [importpath.name]<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">import (     _ \"strings\" \/\/ for explodeString     _ \"unsafe\"  \/\/ for go:linkname )  \/\/go:linkname foo main.bar func foo() string  func bar() string { return \"bar\" }  \/\/go:linkname explodeString strings.explode func explodeString(s string, n int) []string  func main() {     println(foo())                    \/\/ bar     println(explodeString(\"foo\", -1)) \/\/ [3\/3]0xc0000a00f0 }<\/code><\/pre>\n<p>  <\/p>\n<h4 id=\"gonosplit\"><code>\/\/go:nosplit<\/code><\/h4>\n<p>  <\/p>\n<p>\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0432\u0441\u0435 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u0435\u043a\u0430.<\/p>\n<p>  <\/p>\n<h4 id=\"gonorace\"><code>\/\/go:norace<\/code><\/h4>\n<p>  <\/p>\n<p>\u0422\u0430\u043a \u0436\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 &#171;\u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442&#187; \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0433\u043e\u043d\u043a\u0438 (race detector) \u0434\u043b\u044f \u043d\u0435\u0451.<\/p>\n<p>  <\/p>\n<h4 id=\"gonoinline\"><code>\/\/go:noinline<\/code><\/h4>\n<p>  <\/p>\n<p>\u041e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e &#171;\u0438\u043d\u043b\u0430\u0439\u043d\u0438\u0433\u0430&#187; \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041e\u0431\u044b\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, escape-\u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u0438\u043b\u0438 \u0431\u0435\u043d\u0447\u0430\u0440\u043a\u0438\u043d\u0433\u0430.<\/p>\n<p>  <\/p>\n<h4 id=\"gonoescape\"><code>\/\/go:noescape<\/code><\/h4>\n<p>  <\/p>\n<p>\u0422\u043e\u0436\u0435 &#171;\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f&#187; \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430, \u0441\u043c\u044b\u0441\u043b \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e &#171;\u044f \u0434\u043e\u0432\u0435\u0440\u044f\u044e \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0438 \u043d\u0438 \u043e\u0434\u0438\u043d \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 (\u0438\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u043d\u044b\u0445) \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u043e\u043c\u0435\u0449\u0435\u043d \u0432 \u043a\u0443\u0447\u0443 (heap)&#187;.<\/p>\n<p>  <\/p>\n<h4 id=\"gobuild\"><code>\/\/go:build<\/code><\/h4>\n<p>  <\/p>\n<p>\u042d\u0442\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0443\u0441\u043b\u043e\u0432\u043d\u0443\u044e \u0441\u0431\u043e\u0440\u043a\u0443. \u0422\u043e \u0435\u0441\u0442\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c &#171;\u0440\u0430\u0437\u043c\u0435\u0447\u0430\u0442\u044c&#187; \u0442\u0435\u0433\u0430\u043c\u0438 \u0444\u0430\u0439\u043b\u044b, \u0438 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0438\u0445 &#171;\u043d\u0430\u0431\u043e\u0440\u044b&#187; (\u0442\u0435\u0433\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e, \u0430 \u0442\u0430\u043a \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>!<\/code> \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f &#171;\u043d\u0435&#187;). \u0427\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0439 \u0442\u0435\u0433 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <code>ignore<\/code> \u2014 <code>\/\/go:build ignore<\/code>) \u0447\u0442\u043e\u0431 \u0444\u0430\u0439\u043b \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0443\u0447\u0430\u0432\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0441 \u0431\u043e\u0440\u043a\u0435 \u0438\u0442\u043e\u0433\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c 2 \u0444\u0430\u0439\u043b\u0430 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">\/\/ file: main.go \/\/go:build one  package main  func main() { println(\"one!\") }<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"go\">\/\/ file: main2.go \/\/go:build two  package main  func main() { println(\"two!\") }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418 \u0441\u043e\u0431\u0435\u0440\u0435\u043c \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 <code>-tags<\/code> \u0434\u043b\u044f <code>go build<\/code> \u0438\u043b\u0438 <code>go run<\/code> (\u043e\u0431\u0440\u0430\u0442\u0438 \u0432\u043d\u0438\u043c\u0435\u043d\u0438\u0435 \u2014 \u043a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u0444\u0430\u0439\u043b \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u0433):<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\">$ go run -tags one . one!  $ go run -tags two . two!<\/code><\/pre>\n<p>  <\/p>\n<h4 id=\"gogenerate\"><code>\/\/go:generate<\/code><\/h4>\n<p>  <\/p>\n<p>\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435 <strong>\u0432\u043d\u0435\u0448\u043d\u0438\u0435<\/strong> \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u0437\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 <code>go generate<\/code>. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0438\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0447\u0442\u043e \u0434\u043e\u0436\u043d\u044b \u043f\u0440\u0435\u0434\u0448\u0435\u0432\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u2014 <code>\/\/go:generate go run gen.go<\/code> \u0433\u0434\u0435 <code>gen.go<\/code> \u044d\u0442\u043e \u0444\u0430\u0439\u043b, \u0447\u0442\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 <code>\/\/go:build ignore<\/code> \u0442.\u0435. \u0438\u0441\u043a\u043b\u044e\u0447\u0451\u043d \u0438\u0437 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0434\u043b\u044f \u043d\u0430\u0441 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\/\u0438\u043b\u0438 \u0446\u0435\u043b\u044b\u0435 <code>.go<\/code> \u0444\u0430\u0439\u043b\u044b):<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">package main  \/\/go:generate echo \"my build process\" func main() {     println(\"hello world\") }<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">$ go generate my build process<\/code><\/pre>\n<p>  <\/p>\n<h4 id=\"goembed\"><code>\/\/go:embed<\/code><\/h4>\n<p>  <\/p>\n<p>\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 &#171;\u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c&#187; \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u0432 Go \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0422\u0440\u0435\u0431\u0443\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u0430 <code>embed<\/code> (<code>import _ \"embed\"<\/code>). \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0442\u0438\u043f\u044b <code>string<\/code>, <code>[]byte<\/code> \u0438 <code>embed.FS<\/code>. \u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<p>  <\/p>\n<pre><code class=\"go\">package main  import _ \"embed\"  \/\/go:embed test.txt var hello string  func main() {     println(hello) }<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"plaintext\">$ echo \"hello world\" > test.txt  $ go run . hello world<\/code><\/pre>\n<p>  <\/p>\n<blockquote><p>\u0427\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c: <a href=\"https:\/\/pkg.go.dev\/cmd\/compile#hdr-Compiler_Directives\" rel=\"nofollow noopener noreferrer\">pkg.go.dev\/cmd\/compile<\/a>, <a href=\"https:\/\/bdemirpolat.medium.com\/golang-compiler-directives-dc61820add40\" rel=\"nofollow noopener noreferrer\">Go Compiler Directives<\/a>, <a href=\"https:\/\/habr.com\/ru\/post\/269887\/\">\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u043e\u0434\u0430 \u0432 Go<\/a>, <a href=\"https:\/\/pkg.go.dev\/embed\" rel=\"nofollow noopener noreferrer\">pkg.go.dev\/embed<\/a><\/p><\/blockquote>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/658623\/\"> https:\/\/habr.com\/ru\/post\/658623\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u2014 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u043d\u0430\u0432\u044b\u043a. \u0418 \u0434\u0430\u0431\u044b \u043f\u0440\u0438\u0432\u043d\u0435\u0441\u0442\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432 \u044d\u0442\u0430\u043f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u043a \u0438\u043d\u0442\u0435\u0440\u0432\u044c\u044e \u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c Golang \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 (\u0438 \u043d\u0435\u043c\u043d\u043e\u0436\u043a\u043e \u0442\u0435\u0445\u043b\u0438\u0434\u0430) \u0440\u0435\u0448\u0438\u043b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u0439 \u0437\u0430\u043c\u0435\u0442\u043a\u0435 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 FAQ \u0442\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0437\u0430\u0434\u0430\u0432\u0430\u043b, \u0437\u0430\u0434\u0430\u0432\u0430\u043b\u0438 \u043c\u043d\u0435 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u044b\u043b\u0438 \u043c\u043d\u043e\u0439 \u043d\u0430\u0439\u0434\u0435\u043d\u044b \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0441\u0435\u0442\u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043e\u0442\u0432\u0435\u0442\u0430\u043c\u0438 \u043d\u0430 \u043d\u0438\u0445. \u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u044c\u0441\u044f \u043a \u043d\u0438\u043c \u043a\u0430\u043a \u043a \u0448\u043f\u0430\u0440\u0433\u0430\u043b\u043a\u0435 (\u0435\u0441\u043b\u0438 \u0437\u0430\u0442\u0443\u043f\u0438\u0448\u044c \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u044c\u044e \u2014 \u0431\u0443\u0434\u0435\u0442 \u0433\u0434\u0435 \u043f\u043e\u0434\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c) \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0431\u043e\u0440\u0443 \u0442\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0442\u0435\u0431\u0435 \u0441\u0442\u043e\u0438\u0442 \u0443\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435.<\/p>\n<p>  <\/p>\n<p>\u042f \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u043a\u043e\u043f\u043d\u0443\u0442\u044c \u0432 \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u0447\u0443\u0442\u044c \u0433\u043b\u0443\u0431\u0436\u0435 \u0447\u0435\u043c, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0430\u0434\u043e \u0431\u044b \u2014 \u0447\u0442\u043e \u0431\u044b \u0443 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f \u0431\u044b\u043b \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441, \u043d\u043e \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 &#171;\u0430 \u043f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0442\u0430 \u0438\u043b\u0438 \u0438\u043d\u0430\u044f \u0448\u0442\u0443\u043a\u0430&#187;. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043a\u0440\u0430\u0439\u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0438 \u0441 \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 \u043d\u0430 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438, \u0447\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0434 \u043e\u0432\u0442\u0435\u0442\u0430\u043c\u0438 \u2014 \u0442\u0430\u043c \u0432\u044b \u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044b\u0435 \u043e\u0442\u0432\u0435\u0442\u044b.<\/p>\n<p>  <\/p>\n<p>\u0414\u0430, \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043e\u0431\u044a\u0435\u043c\u043d\u044b\u0439 \u043f\u043e\u0441\u0442, \u0438 \u0432\u0440\u044f\u0442\u043b\u0438 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u0434\u0443\u043c\u0447\u0438\u0432\u043e \u043e\u0441\u0438\u043b\u0438\u0442\u044c \u0437\u0430 \u043e\u0434\u0438\u043d \u043f\u043e\u0434\u0445\u043e\u0434, \u043d\u043e \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0432 \u0435\u0433\u043e \u0432 \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0438 \u043e\u043d, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u0441\u043e\u0441\u043b\u0443\u0436\u0438\u0442 \u0432\u0430\u043c \u0434\u043e\u0431\u0440\u0443\u044e \u0441\u043b\u0443\u0436\u0431\u0443 (\u0447\u0438\u0442\u0430\u0442\u044c \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e \u0447\u0430\u0441\u0442\u044f\u043c, \u043d\u0430\u0445\u043e\u0434\u044f\u0441\u044c \u0432 \u043c\u0435\u0442\u0440\u043e \u0438\u043b\u0438 \u043c\u0435\u0436\u0434\u0443 \u0432\u0435\u0447\u043d\u044b\u043c\u0438 \u0441\u043e\u0432\u0435\u0449\u0430\u043d\u0438\u044f\u043c\u0438; \u0434\u0430 \u0438 <code>Ctrl + F<\/code> \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043e\u0442\u043c\u0435\u043d\u044f\u043b). \u0415\u0449\u0451 \u0435\u043c\u0443 \u043e\u0447\u0435\u043d\u044c \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u043e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u0432\u043e\u043f\u0440\u043e\u0441\u0430\u043c\u0438, \u043d\u043e \u0443 \u0445\u0430\u0431\u0440\u0430\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c TOC (\u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043e\u0431 \u044d\u0442\u043e\u043c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445 \u2014 \u0441\u0434\u0435\u043b\u0430\u044e \u0435\u0433\u043e \u0440\u0443\u043a\u0430\u043c\u0438). \u041e\u0431 \u043e\u0447\u0435\u043f\u044f\u0442\u043a\u0430\u0445, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043b\u0438\u0447\u043a\u0443.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-331380","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/331380","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=331380"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/331380\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=331380"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=331380"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=331380"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}