From 47b508d8208290153940f02bc01675b1907cc937 Mon Sep 17 00:00:00 2001 From: dablelv Date: Tue, 24 May 2022 10:06:27 +0800 Subject: [PATCH] upd --- book.json | 6 +- docs/assets/images/logo.jpg | Bin 392184 -> 0 bytes docs/docs/.gitignore | 1 + docs/docs/LICENSE | 201 +++ docs/docs/assets/images/banner.png | Bin 0 -> 107282 bytes docs/docs/assets/images/favicon.ico | Bin 0 -> 1150 bytes {assets => docs/docs/assets}/images/logo.jpg | Bin .../gitbook/fonts/fontawesome/FontAwesome.otf | Bin 0 -> 124988 bytes .../fonts/fontawesome/fontawesome-webfont.eot | Bin 0 -> 76518 bytes .../fonts/fontawesome/fontawesome-webfont.svg | 685 ++++++++ .../fonts/fontawesome/fontawesome-webfont.ttf | Bin 0 -> 152796 bytes .../fontawesome/fontawesome-webfont.woff | Bin 0 -> 90412 bytes .../fontawesome/fontawesome-webfont.woff2 | Bin 0 -> 71896 bytes .../lib/config.js | 74 + .../lib/log.js | 16 + .../lib/plugin.js | 370 ++++ .../style/plugin.css | 216 +++ .../gitbook/gitbook-plugin-code/plugin.css | 37 + .../gitbook/gitbook-plugin-code/plugin.js | 91 + .../gitbook/gitbook-plugin-disqus/plugin.css | 4 + .../gitbook/gitbook-plugin-disqus/plugin.js | 75 + .../fontsettings.js | 240 +++ .../gitbook-plugin-fontsettings/website.css | 291 +++ .../gitbook/gitbook-plugin-github/plugin.js | 14 + .../gitbook-plugin-highlight/ebook.css | 135 ++ .../gitbook-plugin-highlight/website.css | 434 +++++ .../gitbook-plugin-insert-logo/plugin.css | 0 .../gitbook-plugin-insert-logo/plugin.js | 0 .../gitbook-plugin-livereload/plugin.js | 11 + .../gitbook/gitbook-plugin-lunr/lunr.min.js | 7 + .../gitbook-plugin-lunr/search-lunr.js | 59 + .../gitbook/gitbook-plugin-search/lunr.min.js | 7 + .../gitbook-plugin-search/search-engine.js | 50 + .../gitbook/gitbook-plugin-search/search.css | 35 + .../gitbook/gitbook-plugin-search/search.js | 213 +++ .../gitbook/gitbook-plugin-sharing/buttons.js | 90 + .../gitbook-plugin-sidebar-style/plugin.css | 3 + .../gitbook-plugin-sidebar-style/plugin.js | 29 + .../gitbook-plugin-splitter/splitter.css | 22 + .../gitbook-plugin-splitter/splitter.js | 128 ++ .../footer.css | 15 + docs/docs/gitbook/gitbook.js | 4 + .../apple-touch-icon-precomposed-152.png | Bin 0 -> 4817 bytes docs/docs/gitbook/images/favicon.ico | Bin 0 -> 1150 bytes docs/docs/gitbook/style.css | 9 + docs/docs/gitbook/theme.js | 4 + docs/docs/index.html | 1144 ++++++++++++ docs/docs/package-lock.json | 1052 +++++++++++ docs/docs/package.json | 5 + docs/docs/search_index.json | 1 + docs/docs/styles/website.css | 8 + ...\350\200\203\346\226\207\347\214\256.html" | 1125 ++++++++++++ ...\347\233\256\345\270\203\345\261\200.html" | 1224 +++++++++++++ ...\347\232\204\346\214\207\351\222\210.html" | 1147 ++++++++++++ ...\345\220\210\347\220\206\346\200\247.html" | 1152 ++++++++++++ ...\267\350\264\235slice\345\222\214map.html" | 1221 +++++++++++++ ...344\273\2161\345\274\200\345\247\213.html" | 1155 ++++++++++++ ...\347\232\204\345\214\272\345\210\253.html" | 1164 ++++++++++++ ...\346\224\276\350\265\204\346\272\220.html" | 1142 ++++++++++++ ...270\255\344\275\277\347\224\250defer.html" | 1157 ++++++++++++ ...\346\234\211\346\225\210\347\232\204.html" | 1155 ++++++++++++ ...44\271\210\346\230\2571\346\210\2260.html" | 1119 ++++++++++++ ...\350\257\257\345\244\204\347\220\206.html" | 1243 +++++++++++++ ...\347\220\206\346\227\266\351\227\264.html" | 1182 +++++++++++++ ...70\211\346\226\271atomic\345\214\205.html" | 1144 ++++++++++++ ...\345\261\200\345\217\230\351\207\217.html" | 1163 ++++++++++++ ...\345\205\245\347\261\273\345\236\213.html" | 1180 +++++++++++++ ...\346\240\274\345\274\217\345\214\226.html" | 1131 ++++++++++++ .../10.\345\207\275\346\225\260.html" | 1387 +++++++++++++++ ...\345\205\203\346\265\213\350\257\225.html" | 1185 +++++++++++++ .../12.\346\235\202\351\241\271.html" | 1165 ++++++++++++ ...\344\273\243\347\240\201\350\241\214.html" | 1207 +++++++++++++ ...\345\255\227\347\254\246\344\270\262.html" | 1145 ++++++++++++ ...\350\265\226\347\256\241\347\220\206.html" | 1212 +++++++++++++ ...\345\210\235\345\247\213\345\214\226.html" | 1517 ++++++++++++++++ ...\350\257\257\345\244\204\347\220\206.html" | 1332 ++++++++++++++ .../7.\346\263\250\351\207\212.html" | 1247 +++++++++++++ .../8.\345\221\275\345\220\215.html" | 1432 +++++++++++++++ ...\347\250\213\346\216\247\345\210\266.html" | 1433 +++++++++++++++ .../0.\345\257\274\350\257\255.html" | 1103 ++++++++++++ ...\350\216\253\350\264\252\346\235\257.html" | 1250 +++++++++++++ ...\350\212\202\345\210\207\347\211\207.html" | 1141 ++++++++++++ ...\345\231\250\345\256\271\351\207\217.html" | 1171 ++++++++++++ ...\346\216\245\346\226\271\345\274\217.html" | 1226 +++++++++++++ ...\345\216\206\346\226\271\345\274\217.html" | 1294 ++++++++++++++ ...\345\256\232\345\205\203\347\264\240.html" | 1233 +++++++++++++ ...\347\234\201\345\206\205\345\255\230.html" | 1185 +++++++++++++ ...\345\255\230\345\257\271\351\275\220.html" | 1187 +++++++++++++ ...\345\234\250\346\240\210\344\270\212.html" | 1356 ++++++++++++++ ...\347\224\250\345\257\271\350\261\241.html" | 1239 +++++++++++++ ...\345\205\263\344\272\216\351\224\201.html" | 1564 +++++++++++++++++ ...\347\250\213\346\225\260\351\207\217.html" | 1322 ++++++++++++++ ...\345\244\215\346\211\247\350\241\214.html" | 1262 +++++++++++++ ...\347\237\245\345\215\217\347\250\213.html" | 1306 ++++++++++++++ .../lib/config.js | 148 +- .../lib/log.js | 32 +- .../lib/plugin.js | 740 ++++---- .../style/plugin.css | 432 ++--- .../gitbook-plugin-sidebar-style/plugin.css | 4 +- .../gitbook-plugin-sidebar-style/plugin.js | 58 +- docs/index.html | 14 +- docs/search_index.json | 2 +- docs/styles/website.css | 4 - ...\350\200\203\346\226\207\347\214\256.html" | 14 +- ...\347\233\256\345\270\203\345\261\200.html" | 14 +- ...71\347\233\256\345\270\203\345\261\200.md" | 175 ++ .../.DS_Store" | Bin 0 -> 8196 bytes ...\347\232\204\346\214\207\351\222\210.html" | 14 +- ...ce\347\232\204\346\214\207\351\222\210.md" | 47 + ...\345\220\210\347\220\206\346\200\247.html" | 14 +- ...ce\345\220\210\347\220\206\346\200\247.md" | 45 + ...\267\350\264\235slice\345\222\214map.html" | 14 +- ...13\267\350\264\235slice\345\222\214map.md" | 114 ++ ...344\273\2161\345\274\200\345\247\213.html" | 14 +- ...6\344\273\2161\345\274\200\345\247\213.md" | 51 + ...\347\232\204\345\214\272\345\210\253.html" | 14 +- ...10\347\232\204\345\214\272\345\210\253.md" | 60 + ...\346\224\276\350\265\204\346\272\220.html" | 14 +- ...12\346\224\276\350\265\204\346\272\220.md" | 29 + ...270\255\344\275\277\347\224\250defer.html" | 14 +- ...4\270\255\344\275\277\347\224\250defer.md" | 52 + ...\346\234\211\346\225\210\347\232\204.html" | 14 +- ...57\346\234\211\346\225\210\347\232\204.md" | 49 + ...44\271\210\346\230\2571\346\210\2260.html" | 14 +- ...\344\271\210\346\230\2571\346\210\2260.md" | 12 + ...\350\257\257\345\244\204\347\220\206.html" | 14 +- ...31\350\257\257\345\244\204\347\220\206.md" | 139 ++ .../.DS_Store" | Bin 0 -> 6148 bytes ...\347\220\206\346\227\266\351\227\264.html" | 14 +- ...04\347\220\206\346\227\266\351\227\264.md" | 86 + ...70\211\346\226\271atomic\345\214\205.html" | 14 +- ...\270\211\346\226\271atomic\345\214\205.md" | 38 + ...\345\261\200\345\217\230\351\207\217.html" | 14 +- ...50\345\261\200\345\217\230\351\207\217.md" | 58 + ...\345\205\245\347\261\273\345\236\213.html" | 14 +- ...14\345\205\245\347\261\273\345\236\213.md" | 84 + ...\346\240\274\345\274\217\345\214\226.html" | 14 +- ...1.\346\240\274\345\274\217\345\214\226.md" | 25 + .../10.\345\207\275\346\225\260.html" | 14 +- .../10.\345\207\275\346\225\260.md" | 272 +++ ...\345\205\203\346\265\213\350\257\225.html" | 14 +- ...25\345\205\203\346\265\213\350\257\225.md" | 71 + .../12.\346\235\202\351\241\271.html" | 14 +- .../12.\346\235\202\351\241\271.md" | 49 + ...\344\273\243\347\240\201\350\241\214.html" | 14 +- ...2.\344\273\243\347\240\201\350\241\214.md" | 99 ++ ...\345\255\227\347\254\246\344\270\262.html" | 14 +- ...3.\345\255\227\347\254\246\344\270\262.md" | 31 + ...\350\265\226\347\256\241\347\220\206.html" | 14 +- ...35\350\265\226\347\256\241\347\220\206.md" | 97 + ...\345\210\235\345\247\213\345\214\226.html" | 14 +- ...5.\345\210\235\345\247\213\345\214\226.md" | 420 +++++ ...\350\257\257\345\244\204\347\220\206.html" | 14 +- ...31\350\257\257\345\244\204\347\220\206.md" | 230 +++ .../7.\346\263\250\351\207\212.html" | 14 +- .../7.\346\263\250\351\207\212.md" | 135 ++ .../8.\345\221\275\345\220\215.html" | 14 +- .../8.\345\221\275\345\220\215.md" | 318 ++++ ...\347\250\213\346\216\247\345\210\266.html" | 14 +- ...01\347\250\213\346\216\247\345\210\266.md" | 332 ++++ .../0.\345\257\274\350\257\255.html" | 14 +- .../0.\345\257\274\350\257\255.md" | 1 + ...\350\216\253\350\264\252\346\235\257.html" | 14 +- ...07\350\216\253\350\264\252\346\235\257.md" | 162 ++ ...\350\212\202\345\210\207\347\211\207.html" | 14 +- ...27\350\212\202\345\210\207\347\211\207.md" | 30 + ...\345\231\250\345\256\271\351\207\217.html" | 14 +- ...71\345\231\250\345\256\271\351\207\217.md" | 65 + ...\346\216\245\346\226\271\345\274\217.html" | 14 +- ...74\346\216\245\346\226\271\345\274\217.md" | 125 ++ ...\345\216\206\346\226\271\345\274\217.html" | 14 +- ...15\345\216\206\346\226\271\345\274\217.md" | 197 +++ ...\345\256\232\345\205\203\347\264\240.html" | 14 +- ...07\345\256\232\345\205\203\347\264\240.md" | 143 ++ ...\347\234\201\345\206\205\345\255\230.html" | 14 +- ...02\347\234\201\345\206\205\345\255\230.md" | 88 + ...\345\255\230\345\257\271\351\275\220.html" | 14 +- ...05\345\255\230\345\257\271\351\275\220.md" | 91 + ...\345\234\250\346\240\210\344\270\212.html" | 14 +- ...66\345\234\250\346\240\210\344\270\212.md" | 268 +++ ...\347\224\250\345\257\271\350\261\241.html" | 14 +- ...15\347\224\250\345\257\271\350\261\241.md" | 144 ++ ...\345\205\263\344\272\216\351\224\201.html" | 14 +- ...1.\345\205\263\344\272\216\351\224\201.md" | 489 ++++++ ...\347\250\213\346\225\260\351\207\217.html" | 14 +- ...17\347\250\213\346\225\260\351\207\217.md" | 238 +++ ...\345\244\215\346\211\247\350\241\214.html" | 14 +- ...15\345\244\215\346\211\247\350\241\214.md" | 155 ++ ...\347\237\245\345\215\217\347\250\213.html" | 14 +- ...32\347\237\245\345\215\217\347\250\213.md" | 216 +++ styles/website.css | 4 - 191 files changed, 65056 insertions(+), 1205 deletions(-) delete mode 100644 docs/assets/images/logo.jpg create mode 100644 docs/docs/.gitignore create mode 100644 docs/docs/LICENSE create mode 100644 docs/docs/assets/images/banner.png create mode 100644 docs/docs/assets/images/favicon.ico rename {assets => docs/docs/assets}/images/logo.jpg (100%) create mode 100644 docs/docs/gitbook/fonts/fontawesome/FontAwesome.otf create mode 100644 docs/docs/gitbook/fonts/fontawesome/fontawesome-webfont.eot create mode 100644 docs/docs/gitbook/fonts/fontawesome/fontawesome-webfont.svg create mode 100644 docs/docs/gitbook/fonts/fontawesome/fontawesome-webfont.ttf create mode 100644 docs/docs/gitbook/fonts/fontawesome/fontawesome-webfont.woff create mode 100644 docs/docs/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 create mode 100644 docs/docs/gitbook/gitbook-plugin-anchor-navigation-expand/lib/config.js create mode 100644 docs/docs/gitbook/gitbook-plugin-anchor-navigation-expand/lib/log.js create mode 100644 docs/docs/gitbook/gitbook-plugin-anchor-navigation-expand/lib/plugin.js create mode 100644 docs/docs/gitbook/gitbook-plugin-anchor-navigation-expand/style/plugin.css create mode 100644 docs/docs/gitbook/gitbook-plugin-code/plugin.css create mode 100644 docs/docs/gitbook/gitbook-plugin-code/plugin.js create mode 100644 docs/docs/gitbook/gitbook-plugin-disqus/plugin.css create mode 100644 docs/docs/gitbook/gitbook-plugin-disqus/plugin.js create mode 100644 docs/docs/gitbook/gitbook-plugin-fontsettings/fontsettings.js create mode 100644 docs/docs/gitbook/gitbook-plugin-fontsettings/website.css create mode 100644 docs/docs/gitbook/gitbook-plugin-github/plugin.js create mode 100644 docs/docs/gitbook/gitbook-plugin-highlight/ebook.css create mode 100644 docs/docs/gitbook/gitbook-plugin-highlight/website.css rename docs/{ => docs}/gitbook/gitbook-plugin-insert-logo/plugin.css (100%) rename docs/{ => docs}/gitbook/gitbook-plugin-insert-logo/plugin.js (100%) create mode 100644 docs/docs/gitbook/gitbook-plugin-livereload/plugin.js create mode 100644 docs/docs/gitbook/gitbook-plugin-lunr/lunr.min.js create mode 100644 docs/docs/gitbook/gitbook-plugin-lunr/search-lunr.js create mode 100644 docs/docs/gitbook/gitbook-plugin-search/lunr.min.js create mode 100644 docs/docs/gitbook/gitbook-plugin-search/search-engine.js create mode 100644 docs/docs/gitbook/gitbook-plugin-search/search.css create mode 100644 docs/docs/gitbook/gitbook-plugin-search/search.js create mode 100644 docs/docs/gitbook/gitbook-plugin-sharing/buttons.js create mode 100644 docs/docs/gitbook/gitbook-plugin-sidebar-style/plugin.css create mode 100644 docs/docs/gitbook/gitbook-plugin-sidebar-style/plugin.js create mode 100644 docs/docs/gitbook/gitbook-plugin-splitter/splitter.css create mode 100644 docs/docs/gitbook/gitbook-plugin-splitter/splitter.js create mode 100644 docs/docs/gitbook/gitbook-plugin-tbfed-pagefooter/footer.css create mode 100644 docs/docs/gitbook/gitbook.js create mode 100644 docs/docs/gitbook/images/apple-touch-icon-precomposed-152.png create mode 100644 docs/docs/gitbook/images/favicon.ico create mode 100644 docs/docs/gitbook/style.css create mode 100644 docs/docs/gitbook/theme.js create mode 100644 docs/docs/index.html create mode 100644 docs/docs/package-lock.json create mode 100644 docs/docs/package.json create mode 100644 docs/docs/search_index.json create mode 100644 docs/docs/styles/website.css create mode 100644 "docs/docs/\345\217\202\350\200\203\346\226\207\347\214\256.html" create mode 100644 "docs/docs/\347\254\254\344\270\200\347\257\207\357\274\232\351\241\271\347\233\256\345\270\203\345\261\200/\351\241\271\347\233\256\345\270\203\345\261\200.html" create mode 100644 "docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/1.\344\270\215\351\234\200\350\246\201\346\214\207\345\220\221interface\347\232\204\346\214\207\351\222\210.html" create mode 100644 "docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/2.\347\274\226\350\257\221\346\234\237\351\252\214\350\257\201interface\345\220\210\347\220\206\346\200\247.html" create mode 100644 "docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/3.\345\234\250\350\276\271\347\225\214\345\244\204\346\213\267\350\264\235slice\345\222\214map.html" create mode 100644 "docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/4.\346\236\232\344\270\276\344\273\2161\345\274\200\345\247\213.html" create mode 100644 "docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/1.\346\226\271\346\263\225\346\216\245\346\224\266\345\231\250\344\270\272\345\200\274\345\222\214\346\214\207\351\222\210\347\232\204\345\214\272\345\210\253.html" create mode 100644 "docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/2.\344\275\277\347\224\250defer\351\207\212\346\224\276\350\265\204\346\272\220.html" create mode 100644 "docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/3.\344\270\215\350\246\201\345\234\250for\345\276\252\347\216\257\344\270\255\344\275\277\347\224\250defer.html" create mode 100644 "docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/3.\345\271\266\345\217\221\347\274\226\347\250\213/1.\351\233\266\345\200\274Mutex\346\230\257\346\234\211\346\225\210\347\232\204.html" create mode 100644 "docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/3.\345\271\266\345\217\221\347\274\226\347\250\213/2.channel\345\244\247\345\260\217\350\246\201\344\271\210\346\230\2571\346\210\2260.html" create mode 100644 "docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/4.\351\224\231\350\257\257\345\244\204\347\220\206/1.\351\224\231\350\257\257\345\244\204\347\220\206.html" create mode 100644 "docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/1.\344\275\277\347\224\250time\345\214\205\345\244\204\347\220\206\346\227\266\351\227\264.html" create mode 100644 "docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/2.\344\275\277\347\224\250\347\254\254\344\270\211\346\226\271atomic\345\214\205.html" create mode 100644 "docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/6.\347\250\213\345\272\217\350\256\276\350\256\241/1.\351\201\277\345\205\215\344\275\277\347\224\250\345\217\257\345\217\230\345\205\250\345\261\200\345\217\230\351\207\217.html" create mode 100644 "docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/6.\347\250\213\345\272\217\350\256\276\350\256\241/2.\351\201\277\345\205\215\345\234\250\345\205\254\345\205\261\347\273\223\346\236\204\344\270\255\345\265\214\345\205\245\347\261\273\345\236\213.html" create mode 100644 "docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/1.\346\240\274\345\274\217\345\214\226.html" create mode 100644 "docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/10.\345\207\275\346\225\260.html" create mode 100644 "docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/11.\345\215\225\345\205\203\346\265\213\350\257\225.html" create mode 100644 "docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/12.\346\235\202\351\241\271.html" create mode 100644 "docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/2.\344\273\243\347\240\201\350\241\214.html" create mode 100644 "docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/3.\345\255\227\347\254\246\344\270\262.html" create mode 100644 "docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/4.\344\276\235\350\265\226\347\256\241\347\220\206.html" create mode 100644 "docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/5.\345\210\235\345\247\213\345\214\226.html" create mode 100644 "docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/6.\351\224\231\350\257\257\345\244\204\347\220\206.html" create mode 100644 "docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/7.\346\263\250\351\207\212.html" create mode 100644 "docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/8.\345\221\275\345\220\215.html" create mode 100644 "docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/9.\346\265\201\347\250\213\346\216\247\345\210\266.html" create mode 100644 "docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/0.\345\257\274\350\257\255.html" create mode 100644 "docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/1.\345\217\215\345\260\204\350\231\275\345\245\275\357\274\214\345\210\207\350\216\253\350\264\252\346\235\257.html" create mode 100644 "docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/2.\351\201\277\345\205\215\351\207\215\345\244\215\350\275\254\346\215\242\345\255\227\347\254\246\344\270\262\345\210\260\345\255\227\350\212\202\345\210\207\347\211\207.html" create mode 100644 "docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/3.\346\214\207\345\256\232\345\256\271\345\231\250\345\256\271\351\207\217.html" create mode 100644 "docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/4.\345\255\227\347\254\246\344\270\262\346\213\274\346\216\245\346\226\271\345\274\217.html" create mode 100644 "docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/5.[]struct{}\347\232\204\351\201\215\345\216\206\346\226\271\345\274\217.html" create mode 100644 "docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/6.\345\210\207\347\211\207\345\210\240\351\231\244\346\214\207\345\256\232\345\205\203\347\264\240.html" create mode 100644 "docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/1.\344\275\277\347\224\250\347\251\272\347\273\223\346\236\204\344\275\223\350\212\202\347\234\201\345\206\205\345\255\230.html" create mode 100644 "docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/2.struct\345\270\203\345\261\200\350\200\203\350\231\221\345\206\205\345\255\230\345\257\271\351\275\220.html" create mode 100644 "docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/3.\345\207\217\345\260\221\351\200\203\351\200\270\357\274\214\345\260\206\345\217\230\351\207\217\351\231\220\345\210\266\345\234\250\346\240\210\344\270\212.html" create mode 100644 "docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/4.sync.Pool\345\244\215\347\224\250\345\257\271\350\261\241.html" create mode 100644 "docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/1.\345\205\263\344\272\216\351\224\201.html" create mode 100644 "docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/2.\351\231\220\345\210\266\345\215\217\347\250\213\346\225\260\351\207\217.html" create mode 100644 "docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/3.\344\275\277\347\224\250sync.Once\351\201\277\345\205\215\351\207\215\345\244\215\346\211\247\350\241\214.html" create mode 100644 "docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/4.\344\275\277\347\224\250sync.Cond\351\200\232\347\237\245\345\215\217\347\250\213.html" create mode 100644 "docs/\347\254\254\344\270\200\347\257\207\357\274\232\351\241\271\347\233\256\345\270\203\345\261\200/\351\241\271\347\233\256\345\270\203\345\261\200.md" create mode 100644 "docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/.DS_Store" create mode 100644 "docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/1.\344\270\215\351\234\200\350\246\201\346\214\207\345\220\221interface\347\232\204\346\214\207\351\222\210.md" create mode 100644 "docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/2.\347\274\226\350\257\221\346\234\237\351\252\214\350\257\201interface\345\220\210\347\220\206\346\200\247.md" create mode 100644 "docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/3.\345\234\250\350\276\271\347\225\214\345\244\204\346\213\267\350\264\235slice\345\222\214map.md" create mode 100644 "docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/4.\346\236\232\344\270\276\344\273\2161\345\274\200\345\247\213.md" create mode 100644 "docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/1.\346\226\271\346\263\225\346\216\245\346\224\266\345\231\250\344\270\272\345\200\274\345\222\214\346\214\207\351\222\210\347\232\204\345\214\272\345\210\253.md" create mode 100644 "docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/2.\344\275\277\347\224\250defer\351\207\212\346\224\276\350\265\204\346\272\220.md" create mode 100644 "docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/3.\344\270\215\350\246\201\345\234\250for\345\276\252\347\216\257\344\270\255\344\275\277\347\224\250defer.md" create mode 100644 "docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/3.\345\271\266\345\217\221\347\274\226\347\250\213/1.\351\233\266\345\200\274Mutex\346\230\257\346\234\211\346\225\210\347\232\204.md" create mode 100644 "docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/3.\345\271\266\345\217\221\347\274\226\347\250\213/2.channel\345\244\247\345\260\217\350\246\201\344\271\210\346\230\2571\346\210\2260.md" create mode 100644 "docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/4.\351\224\231\350\257\257\345\244\204\347\220\206/1.\351\224\231\350\257\257\345\244\204\347\220\206.md" create mode 100644 "docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/.DS_Store" create mode 100644 "docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/1.\344\275\277\347\224\250time\345\214\205\345\244\204\347\220\206\346\227\266\351\227\264.md" create mode 100644 "docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/2.\344\275\277\347\224\250\347\254\254\344\270\211\346\226\271atomic\345\214\205.md" create mode 100644 "docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/6.\347\250\213\345\272\217\350\256\276\350\256\241/1.\351\201\277\345\205\215\344\275\277\347\224\250\345\217\257\345\217\230\345\205\250\345\261\200\345\217\230\351\207\217.md" create mode 100644 "docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/6.\347\250\213\345\272\217\350\256\276\350\256\241/2.\351\201\277\345\205\215\345\234\250\345\205\254\345\205\261\347\273\223\346\236\204\344\270\255\345\265\214\345\205\245\347\261\273\345\236\213.md" create mode 100644 "docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/1.\346\240\274\345\274\217\345\214\226.md" create mode 100644 "docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/10.\345\207\275\346\225\260.md" create mode 100644 "docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/11.\345\215\225\345\205\203\346\265\213\350\257\225.md" create mode 100644 "docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/12.\346\235\202\351\241\271.md" create mode 100644 "docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/2.\344\273\243\347\240\201\350\241\214.md" create mode 100644 "docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/3.\345\255\227\347\254\246\344\270\262.md" create mode 100644 "docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/4.\344\276\235\350\265\226\347\256\241\347\220\206.md" create mode 100644 "docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/5.\345\210\235\345\247\213\345\214\226.md" create mode 100644 "docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/6.\351\224\231\350\257\257\345\244\204\347\220\206.md" create mode 100644 "docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/7.\346\263\250\351\207\212.md" create mode 100644 "docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/8.\345\221\275\345\220\215.md" create mode 100644 "docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/9.\346\265\201\347\250\213\346\216\247\345\210\266.md" create mode 100644 "docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/0.\345\257\274\350\257\255.md" create mode 100644 "docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/1.\345\217\215\345\260\204\350\231\275\345\245\275\357\274\214\345\210\207\350\216\253\350\264\252\346\235\257.md" create mode 100644 "docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/2.\351\201\277\345\205\215\351\207\215\345\244\215\350\275\254\346\215\242\345\255\227\347\254\246\344\270\262\345\210\260\345\255\227\350\212\202\345\210\207\347\211\207.md" create mode 100644 "docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/3.\346\214\207\345\256\232\345\256\271\345\231\250\345\256\271\351\207\217.md" create mode 100644 "docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/4.\345\255\227\347\254\246\344\270\262\346\213\274\346\216\245\346\226\271\345\274\217.md" create mode 100644 "docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/5.[]struct{}\347\232\204\351\201\215\345\216\206\346\226\271\345\274\217.md" create mode 100644 "docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/6.\345\210\207\347\211\207\345\210\240\351\231\244\346\214\207\345\256\232\345\205\203\347\264\240.md" create mode 100644 "docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/1.\344\275\277\347\224\250\347\251\272\347\273\223\346\236\204\344\275\223\350\212\202\347\234\201\345\206\205\345\255\230.md" create mode 100644 "docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/2.struct\345\270\203\345\261\200\350\200\203\350\231\221\345\206\205\345\255\230\345\257\271\351\275\220.md" create mode 100644 "docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/3.\345\207\217\345\260\221\351\200\203\351\200\270\357\274\214\345\260\206\345\217\230\351\207\217\351\231\220\345\210\266\345\234\250\346\240\210\344\270\212.md" create mode 100644 "docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/4.sync.Pool\345\244\215\347\224\250\345\257\271\350\261\241.md" create mode 100644 "docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/1.\345\205\263\344\272\216\351\224\201.md" create mode 100644 "docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/2.\351\231\220\345\210\266\345\215\217\347\250\213\346\225\260\351\207\217.md" create mode 100644 "docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/3.\344\275\277\347\224\250sync.Once\351\201\277\345\205\215\351\207\215\345\244\215\346\211\247\350\241\214.md" create mode 100644 "docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/4.\344\275\277\347\224\250sync.Cond\351\200\232\347\237\245\345\215\217\347\250\213.md" diff --git a/book.json b/book.json index 5371fd3..2084bba 100644 --- a/book.json +++ b/book.json @@ -1,5 +1,6 @@ { "title":"Go 编码建议", + "author": "Dablelv", "links" : { "sidebar" : { "个人站点":"https://dablelv.github.io/dablelvweb", @@ -12,7 +13,6 @@ "website": "styles/website.css" }, "plugins": [ - "insert-logo", "custom-favicon", "splitter", "disqus", @@ -24,10 +24,6 @@ "popup" ], "pluginsConfig":{ - "insert-logo":{ - "url": "https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg", - "style": "background: none; max-height: 100px;" - }, "disqus": { "shortName": "go-coding-advice" }, diff --git a/docs/assets/images/logo.jpg b/docs/assets/images/logo.jpg deleted file mode 100644 index fd8f125ef3a80c491a3d535279db4dbd43d5b5b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 392184 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%0A>~-G!5I&wToGx{W}N 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 >hN@2+rJ`Fv9px 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

rv&At&RUgV-z;@9BD25Nm9%SZw(#BD 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≯+h=8}Tv>R-Skvw`ZAwTiRn4`+eU;v5%tmJj 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%0ABDiOgPjlI!7HYHL2HsraW;h94zoxW0Jg(k

w&1_PW3!a3(~Qqh54wj&1| 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 Jsxg-5|JifQNTmP( diff --git a/docs/docs/.gitignore b/docs/docs/.gitignore new file mode 100644 index 0000000..723ef36 --- /dev/null +++ b/docs/docs/.gitignore @@ -0,0 +1 @@ +.idea \ No newline at end of file diff --git a/docs/docs/LICENSE b/docs/docs/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/docs/docs/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/docs/docs/assets/images/banner.png b/docs/docs/assets/images/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..5d28c15de7f452e1b51e2067451444a34479cd09 GIT binary patch literal 107282 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 literal 0 HcmV?d00001 diff --git a/docs/docs/assets/images/favicon.ico b/docs/docs/assets/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..22d346e7223b35d667f768a538a5b1caae4c0777 GIT binary patch literal 1150 zcmbVLJ!lj`6n?w&W}_J8Dvgy^q6n+lE*2&n1VI!}FbFn+AU0yJa28@G7TQ=CAt>g= zMlSB|nY+!h@scwpY9NRZ(E~*gEEGYsaQt4ztH`%ej+@`jNo_wF3Jqv{{0S+|CW7Y@>au(mLFG{+vqF)LNvV*{&UuDeD%D? zJ67k9FW5Vr!TF6*izWR;odKe7E0J;0r)TXs*yHPqeB9AVTdUkxv{1y>vd2vKxNfWM zx+%W7sAlu6h57$6m->dw)xQ1ylsXh-YNVX0!2_A{hcYMdQ>PN7&R{up4pzD(;ver) Q;CIb%@Xl0*j5&JvH>fWE>;M1& literal 0 HcmV?d00001 diff --git a/assets/images/logo.jpg b/docs/docs/assets/images/logo.jpg similarity index 100% rename from assets/images/logo.jpg rename to docs/docs/assets/images/logo.jpg diff --git a/docs/docs/gitbook/fonts/fontawesome/FontAwesome.otf b/docs/docs/gitbook/fonts/fontawesome/FontAwesome.otf new file mode 100644 index 0000000000000000000000000000000000000000..d4de13e832d567ff29c5b4e9561b8c370348cc9c GIT binary patch literal 124988 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ÐT?>-5aYhU|+1c>&YMpPK5x#-mbV zhqm2t2$w17dyG~W6{Cd&8!1QqcOdwSXaZn1En4FY^m?5LZnu&vEL#%oV8ylCNk$wG-tUMvMWHJdfs4~(sGWc6; zrYSZ$RcN7uUXjn3^t6n$4D}s0BRw`&5W5|diXmrWlj7oH)Z4sl#8X(>_=%zd6b6C1mM5*VpF>x6gfxu>sJ2eX*Pcif{rdZuM>`U#`pAPW|Aq%nmU`4I73BcA?o80C13 z@xO{Z`j$i-BUz1P&;>FGGtYswFc`cC${HKx$(Ii7Wb=pI_rV9Z#`q`t?Btb8t*E~& zE;~0d56Z?lrP)GmMMnK$l{l|~yP6bI2lz^e*PH}_ya(>1KT#y-&@Jvhyq}j##B%lQ zc_qbeLLp%ozoxH(_o-_OvWiPWa#j`z<9DxW_)&Eze_vfCUr}=~=Y;yk$)LyzY5L6M zd#-~bm0x&tXi#}X%PtJ6?s=bZ8>_;z;>k^+t62A(UAuEj3@Ij_Dr5Q*JxY|Z;(qRQe%{^DHRTwO3YwsCQ5Xlbdh$Jfn80CS|7 z)9TzYPoa7?)you+A0bCh5xK>2yVXaVvx*yq{638Dw#8xd)iakDHf|G?CGw320x#cJ zks;sxNo+113)r}auiKcv*bxDchQmE;B;v85S*u!l4{(IsCYGBsZ?8qsvwb!;! z13#1=?A|)cF4l${K$>@q$usl%m%KP^|&Wk>8W^*V2?L5d1RQb1n&FW0M%iEJ!IuO{(|0(Ue zvOaWRe7LtolS*c%RlF^fJ?J${BxtpSPwqiVVewI(RNfa&pm!LnFhj&zdGa#Iq+#Q~ zPfWIB0l+ppP0?VzW9{9trK!#Tx<+~bSkR&aE7VYpU$JQO>L6hzkj3=UARIFvhxb)H zezSn3@7);wGp{^JoHZNa6(qgQ5UeS3UL!>iphxK z=?5%AUZRDWvIW$^=W~Q_I>1JU04IPKA?o!b`EdIJex?jCY!eSmI#JwIkWMnhsAbm= zfKPq{KINbq-9)#7b+{J^I7tw5*rRPE2T!wrQ?1bO|Kn{Iki&BY%C`u-DqRR??h7c| zAgPS~$WTaU^&?MFzI$5bNp0H(a|%Z{0SX!l`?Kw|2V@|xysst20C$cj6G)F+qiG*p zuU7n$e#nU~AlbTPaUoF}G*r_rK{v^P&qz-*>LGZYXpGO;bj%Lu;gs-5`KMsj>f?+c zv460Oui!6f)gBAE zlxvW1`ODsf*8mFzF(rjPvIqbc zxCiN`BQ8?@_6~HtLmLz{5ns)UtpFQ10pU9C0ZbEwx%WY=ya*xRq zRdf<6tq+;};Ktr_ASg#19sw!rT{1vkexwBOjYng@`HX+l>kYCEh@$qJ$53Cne{^8D zuNoRje^+c1z!%n^mXY5|v)VZz*xOxj+vw~vP(8r8rGAr8;}%fljNKNSNR7!OFoCEl<_YPGF_}pFJmB+?oXM`qJPNY8YzUnz+jd zF|d92rz?@+jG%b1*w9uBZkxr)(#lv`D-?)GmIQgA?*sdriZiDIS^-_=6+hvX5Clra zMov6vX=bF=pYU$Es}M!-CBm9O`yl0tm_KF%WOHY;JHp%pO9Y4-d}!HX*#h)yxK#a? zA1yyhbtH}wN0D%BVzXYAW zpd`OMtHORP84|F;d#jflSXdnA4+t8f20UvRKzW-%`#c?O?rP%q17=05?+7&ZkLMPi z+*0H2On{GJ4RNL;exVbO2#zHS3VeQ)CuPJ`r+4VB^>$zsFK}r&VlW55QSy|5}hBMi`$zY;-w2vuifglCczM_j~9v;9f~*; zCMR9o2|J(mQoS&D13^{|`Bu|rB8wEA!5M4A-NiegA@!0kpVp%VwY{t1Ew(J&;_v?p zW!$PFTl)g~h*e(1=64A}^=J!PiUaVCzvAJ}m72J>Fl}r(Kwb&tTi{VUTv9lfO(%)Y z5x^iDYl=otO28w*KN$%Bm4V=@u$Z7B_@5%()kx+7$+ZRA2MtDV62@qeLU~(jP6Z-` zJXQdmRH{MWvrTjCur}zRfKZ4uW}|1#qEl+}H4CLNr0PrtFv{PxjhiZ+vzN)q5nDQ* z4S%}+=Q&rO5j#6ju$l3SVG8k2W<2u$x#7EW=Yfe-C?9LdC+K5t;~H#%qFzVV(d1e4 zcI{Zg(_*m?QxF-H6{yAp!KeX(@&Q!VEwd%E-M4J?I4xkE^O^ej(~H3_fJ~Gc5{O$n zk$Be%2u&_7G8F){^-6TVGLZRfJfb}ihl8UC0-ux7L4Kp*0nc%Q;50@akIASy;HmIB z6BF)*(kyv9LNxEfIXuoy|T1c-8P7=tqkx^ z7jA%Ig9eHstP_DgJX9N$=A8j0RaK=Wl>+>NRV9Hwg4n0so%=EV%aHH+-r{P8j0&cE z9@9V7^iR5HFdY>v^s%gFLMFz3Fc zZ|hN^&4bNzGA>)J5@EIDj^a=rQ#!H_!3_sMgZ4meSz}==tY!6*^rcytM%qb-u3aM? zN|vy69|k7}=xXv%Ev^7!Lf=WWg5(ImfMQv7^U{a|#I zhlV7@gbQ2$0_x-Xzf_ajlewyvBUL{>qMPSb@}_{YrT(gr(10Lb*~4)DQiYi7SyG#pb1_{mVVA7bDtZx!fva@;Ru=fO6)@h`+?MdQWL;O zEbv;JAVC0(%E*XA-{1P?;Oa3M0(`?=HQ*+(A+AM&m|{CA#-k%$@PE>M z-Mo4Xgg`b(>AJj42N=-@h@^_3?=Kk7M+ODNght5ME}(})-oBC-iw-XoLUIF*;YIQ< z?uDa_r7BXAL*BmxeeQzN%)%V`;Y;LV0r^u+{v?M(*L@`vM3!iCLgkmn=Av6HQ4uGM zf*nLF_=FKJ#iGISZv!p~SLlzi{eQll+x*-5aHI-RQNFZ_w`>^%*`ZTEAXu7I$S}a} z3fbmCf+h9`01(25)J%fTg1B3{cO(uRS zWpSM+1?=^s(lMXPNDtA1ZtRm60EE3chiKtXKA|?kn{yaPzxV_^y)|i`Uo|pAiCZ7$5_}G8qBZ6BdIJq#+}uj+koilGim3*2nIk3zh7_EF3m+%069G z)21YffzJSuU||Abl@A;70GK(hD!9zoz@tIE!=xEgO_{11-wJO%PdAe`CM6xz3#z)E z6<#4>F%b|O=*{Ltg&9NC(kh$*M;t9sxztKqymtC}#-+rj#0y|2`Zp5<4QYRbr6;NA z8v2Csi4XGMq4Fv6uY|P0CMq&X5Lk=t*Z@xE<@9H4NQ#YBc~<(?7UmhVGkNh7HZn6m zhFsNP4c!!M^#*NbUTnU)uA;IQY>-J%hF(s7WhxCtWmT$lXhZ^!v5|-juB_5fTvn}m zxf5JPmLV1dQG5l8*kkk}y$tf8t*IR7ilDCE zC=)|1px1L@#;{^n(SZ}+6F*{-^$`3{ji+|)*32ujz*(#;UFlaqtIriTOQkmG?1`5J zcv~ogtDv1^hyjYliF5<+6*#t4WK{ImAy<7a zS-k0Ri`=51pIUav+fFRuJW2Phq}zJ(;mL>fPjjDx(yc!Yz?7pOt^7OhS>w-VNSF2G zBP8*ZtXSyC#)c71+g1qnNb#{s9|zf12kT(&2TXIOAEx8MWkrP@lR*r27vLqKnyS^% zW0}5g0{ujQ*3d8q7DldJl(d=GpHj{l5TD3%n4|F+gC|0 z;-2JVmqC9EPyQw!w~(G{G+XvQ5UR$A>rFayojOw66QI#i`W)EHZPrt}RP@)BnQ8wm z%FWeLJ2e7q?YAtXg9X9@G}QcpbSWd&YV=hftm*ku`0H=N9wU8HrMvPO+2mmTM^GoS z6V{A%zrFjvoEXsu{XoWZKK}kb{HLsse_54a-YKgtE34xFV5`dfA;#F)zLSjAh}C4Y zf*!I|OUu*VE>FWUK&PXjqMJy)0Gq>DY7Cvz!e<^xYid%FGYAOO(KFNlQI%;laS`9V zYJT}#HNp`;!e_8ws&9s$Kzq*p47@y08$#4EVn%lY0{jDug3d*lpRdq0F%V40vWaAX z8`3-WpKC=D}ZQpY3W9gChf#e9&Ho}1! zCwq=$Uy^lL1mlLi1)@q1G#=JqKJIJPvGl+GC~r=)vZ~y{y2TOyruIKeH91_KN5{4|z@kQxA2ei4 z!y)`3#}x3XeFxTCtUAzH^c;7$0dy|1MkwA9nUth~qb#djzH#+6+!fg?#VZBrK8b52 zn>4O>SsFz06g2<;`^WP8L=I7bfG6UwBPRX5P;p>%z{e4~WWBJ(5$+?gJNMIHrPt0M z3<^BSdoN)U*}VY^vbL$cX2h)*rXl{X6CJMt+j-EOg{w2`ocY?Xm{fLS$;Ie{>Y5+Z z4hg@|BG5<-=@@wSa$r>$8{KkX!pN=8<`<%#L*oRa3`SP?#c*;Up6LJlO51t!3nUuU zk!Yawi`|2e>_5NQGZ1zV^KtINnxl(&%jfLk)oT_DbaZ<>87;f8`siY5+oCnt=FoOb zw)p6pi*Vr&U@sm$dO;de8~}G%7xJmNj9C4O7yq*t7+E+vFt#trSu#Nx>A+;QEktmw zPLD=kMRMo{ZtIr#sI5Y3sU84PP%AA%pPGSTVUIP#Ch(CF5n&;!p!{9MeDy<&+NY?A zD;W#-qr0#w3P?&$Pp+Z%(D?d2cbxTADKZ(9ahb^TJYPy+@f??i6P)5R1)E|rM zd9mne`vDPX#VzPUhoKOw0T=H}SKyKvDRc#9t^$ej1Nc{I-kYvaIv>E47bvtq4fJIQ zr-AB)rFFRi$)glV9U8kUG7@r);JO4M5=qg3dWeb4j?FJnP0$qN$3|xJN@o}>!GCaA zCgpKhhNAQ%e`_)d;KS1(;0l@5m`%THBq{^q253FG4RO8pp$u8l6EceC9LD?w+kRV$ z*?Gp2CQSKB9xHk}P*8@RG9%e-yqA%ZA!LKJuZkrbU;`k1ZE44P9*&W00um)}L1eHg z2qsA_8x$NJ8YwZTnS%XN+)DiI+ng}^jL0sCEtCSyanD9h* zBK^1GS~?Ltt@z)u1nCf%Dtf?rfuG-`KT6#>WyU!NfPpz>?{nkEjk^aezyBXUI7mu0 zd^qlWh3^4`3EMZqKQr&#Juv7gG}wLb-o0_Z{<=|t{FKQv9L(SC;~Euj_x{(eapTAR zh!nvg(k(}0|8-gYuA`el3^Ef)f|D|3@*IiNMR$nU&fV=#LK2LoP zBq?VF%;=LdpfQorrBBw`)5de^yc@b$lOT~t>67H*s5hVhndOC%%j`e+A4vd1J=nsN z8K>h<%l8|}u)4FV3v^1|W+NYXYZYOgFUZS+d~>}Pty#Ee(V9z()Ly>f{y~EC;#I)4 zI?6Z4&?%maRm;dQ&;2pH4pDkqm5Xsh?j|0&{z`oq`o(Zh@FUEHp2h3IWE95JEE)Cs zF&X>L3MdhN;g(1@p#*OsJUVa9fz?{2r`AEi=cXy9VPN+fZH8KxTZ8ae0rI!u6hv(pB4c z*dnUQr$gi@XDRi7I^R^{5iUn5NL>i%3$>nPuiQaAYmsyRW6-RtiI3SWU?^9k4buB% z1=|N_mqeCIW=+^VT@|+PQg&D>1z0L!ri2Ysq7i~-8(u$~&PW7Xh|6U)Tfv2iK~yR_b79VlhY~N zsmpxoprSLxP7~o)`CaVvJ%-K}8(5@BAv_iAT8V0LutwrbuE5m)GD3g`n@x#|5=i$T zeh0F(CeAM)w?qqxDr?%$62kbz_y+G#6KBPC-=Zpb2bY?M&7^yo9kDxu010B)tVm;Q ziq33pd1e=xogbI4&d*QJ&KAs_#V08##*FM7dobuYaz)@UJ>L7&L_wU$!o;?Psm`b< z-mR{w2=*}w#JL^3m*Vt{%F=?WRQrmQ%J3|IxLJ4Fi41${`{OT(Oa%)b?h_s&8xRXW z)C4QqoH+6aJPqaauPr<+^G2uQ7eFg~A!-)}E}OF+asZ?Jw}82X`UfLmlK9I$Q&4}B z!(P(7G1*R65Uj#POp^JohZPck1M}TL+WiQ+n~MtKuofeXr-Il+R5CPg8rY<~6mM(* z#~-Y)L~fMqDE$@C2)^!MeU5wi<&Te>h+JM`+*KN&{(=qE#zbNoEi9p$K@`#0BdO*I z5tazq@mgbqdKMe7DJ4aU%k!8Q8B_a#t@)7oA00UNd@Kryn=cp5e4=CtRfg0kr!6S%IR7 z`lBHKRgvWE9*_r>`jT(uZ+aj?6(P=#XxG*By-5>z+6sh+@^8`%NA44nthgEIdWGCn zoTr+{eR$V-(*h@{;jWXSY4Ak+nfcS+TgPv$`pNyzDEVc~V<$~3X#jHT@5g_iC)JuO zH_1%Asnkf6s0SNdo%HFUM|d>uYsa8M+Mv9D3b8gXTQ#5Epv+;~E!{rglGnM-$1&tL z+P%>Hpkb6JPf=M%wT%v@m0p0`1&7e8KzbLkCl%z{uAgWMNk@aT{{Ttc3t!l>g8=P* zq(H{sXe=hnC{D`2A2Ym#)Dx@(MM*`)P`!m~Zz1vA!>0tN1P7^*_>GNiiUR%!0r(^}n7r zpq^a67=|YOHvOcL4)v${tsn?q>rPYFf?z5Jk%V8n$(LzZAL;@4MY*_(>p_DH1F)o!jESoSsxoRS<=tIrd!DtbZpQK-a;a^KmEkup4z}x*+>H5 z7u+C!RJn)Vs>DNq7n@XhD#-6HVEwKpKdZ?p7_ns9RL3oSlVyz#C$2pn!}H+n^#lzm zEaJ(xDZZ9lw<1YbqSjf?U}>{7nb z7gsW#siry}*|~2m=SevpxaCr1$G7H3R_G+7j@?K~&sLpx#2CpY?(DXR-jZD=-mtA& zQGnGH#o_cb642_nF1* z>$7o`C%9EJGUNHR`!?<0(z5-K&h3*=*|jsIs}FqrAI&ta{QriiW#kUmjb zDLJxx_W%AVjdH+#@thc*KR3mbX@HmlV(3Sd>y;P`QS1$Ryy!{E76JGj&8(3=kG&k~@pzSj~zS^JtkkJZ^{UAK?)wVuV3BZ`&gk_SIRu0X--sUNe5xk@W}Ftra!(bzEjJ8kBb@JJWjP z7TQlk`;9zt-x?=dRFsxp$WQvVdxLuQ!GikgYN>sw2t+&ZfmY~fNBdytNu*n9w9SNH zXBJi%Fc$wy3rHWhI-^O)ZfTrO4J>Am#(oqiI2lO*1%w1800IdZsQXZz2lPk+_1^C? zFk){^jRpqu#8#AONa1zfD?5*I7kvaU%qKEp?CKy!V+SJuRYD)h&PzC`y%JJJCUzh# z6Fl+;@E6K@R|X1qu#2Z!biZw3t!;ZIYiWlhVKQjKlfTFrEl@%d5UTs&48clS?=*Pd zw+2Gg(;r)*)w2Oa*c``cu8K_7b~RabK0bwRqR_;OO#+4^XM`r1(DbGW=z#8p9fCpV zfaW4a%lINoEBw;=ij`=8(>O5)$CMorkrSrzj`H_KB1W3rvvTLY2u|2eBbdb8yySe% z!J_@Oe0%3bR(v5BY7v1Delh;Qij8kfh23s!X%CmVj;jQioZV5Bi zrh9a!ESdC8_dDj_kiRE)|Nh(xg{p_8Nsob6%=7`#HAStp3H1qIuTAzy_1osZE8i#A zYkzEoqLrAkfyWMgeLi0Cc>?J-ezDqNwbzOgZfpL$wva;#t4_xOmB)5|Z5yvxoj|)+ zf9`d;ggc&ptF82q!srF*r@x*|9Wi3U)IozLK73h}UXW49`xYMvIjA|)gl0u$qA{36 zH~Q4M=5e`IHCcN#@R@nB5u}{bePa+*n*5ARcSk!pRAG#@0$qEeK1vsn7+o4(5?-8D zl3IjVkUl&mEG{%ZFh4L?QJPQ~m&HZv1Cl~Q0y6@2!N{SHijRs_q*d#x_o%b7)6%l| zt9iFil-$eOlU5UdAo{f9e&^!kO5a*gn50Y6gr;~UMuY(hjwHgMbX1j| zo1LrA%Pc>5FbDj1P}|K=15b|}i96}vmmfWT@=W&kao1woz3_|78ZEL+& zY~QkN^A?NqIcM|EC+-Y#_w@v^U>k0$!YkD)GsF;PNd7#fBAI;_V}FbnCO=juZuQYLHlwngqdD_0g2NxH7lAq}&8Ud{9bYa!^WYI!Kb! zQD_!$`H>~4U78t)ObM_`CutHYLaKMi`^I~FCI@T}bMT6S(w%8vB#k6^>Ady6#j|d2 zy&46aSQc_SeRY0*>L^2Gc4S6yR-i60Iixf&Gb%w5mzWq4qJDcA0Wm>Qp^%X?nP)P| zBrGQ^Jw72JK^LAG8XguA78M+k6{$-~NQ~Eqys3Vv-3A(fi4y*SnevlOgWTsZ7nHT}^UJ^reYV+1l5+ zjIG?0v)7wzawr^_w-@tqnwSpHf7l3 zt+d;^Td4p}POccKU7Ioivol^vI#(Lt_5A+I%Ml5u{nf>|0;yZ9^)}`LNcJ6%$Y;a!pcVxePLsjjfETiP(eZ#SE`g z%4yx{w9|ki!frsHpjuyDkW-Xh6qO&En+84PvwKb{e7GW_RMn0NJ ztsJSvO4@gBa&uHmR6V$Qrm#{dm`jsODiAyw@Q`S)l99)b1viJaMC2svbU7JqMQ6*- zRFN?bgquyQriuL`#r`Q`|00EzS;YyKTHc}B%XG*wGUzVp_dB4_ra6g*q`YJWsMXU_ zxX_rW$n5Z(i0X*yL_1%LTLtuSOMyIH%r#_4bXM%r+e z$mEABYno1~;r%lj-s&X005o74G!kAwBZ0gSrj3%iz#{s%u}aSRuof98-I^}+t@bUJ z7+-gpOL?nr%(%erAOaMUJFNQ zh(wTKU=gP=0EI16iP*=|k=l2QJI#%THy9E8-%Fv7XOR5D|18BXMRcd_NKjXj9vGp6 zu+3A5Vc!@4+9`+%(}!x}VpEdidB2!2e;>6~=RmSa3tEt?WUaWN(7iFN9z^2v@6{C+ zH%8Q3(k+5FBlHJwO{wVJ6;%X65Wrncw`+SEJ1|^rC+16KP`9$M8$Fl*WiGWiOBZRN zNei#ED>0cxNAjW#xvCVKTnlHF`KvliTP{E5!3yD;6K064aa5@C|A{xU!gLcwF=QGK-LB6;v*S$ z7NF+TM6NP*HIeRzv~W;g{CtB;S24nbJk+XYDP~EoSGlUfWEI9$;HLrEEb!EwD1vnr zxWTyk0~IDxoCF)g|BkzlL7mDJyTYpOy+|ufO;8iOsH{|hqf(}-*|iD<;Qhui;M_W; zW5uonN$+*j11_5Cn>5j`WY=8q#l0g&=5R=0|q6-`2@Zj0U z^ZB1EQ-Ruaa6-c2|9@Q?>AJkTaNWP866UJxnl-pa49tSjz`nai(dLjrkS^A&z7mm+ z$*K|3Lo1CzO$OsKypfh|!im1UdOhahr-as3D!Z@VkRH)eaq09cOlNgpPm_5B=OkTE z=H2xi+M`D|*$=Lzsz(o0AXA|p#IU5g=a_VvV;m*zO^QL`IIvd~nAKOhYIu938R>?| zRYOb$OVrDVS@3hCxpg^ z#>Y#3CyV%a{7z7iG?FH#^*G=44i4*i+VlnwN({X6Fd^8{xc}_PAZxo@+t|oUJ75|c zYwxy6EG)uigqs$Vfe#3aoX!{Lj3e%n9S9~T;hslW$;*WXw!v?&r=CkoicLd0&uDn} zM$57cX=$1K0eyANA$17Zg(B5nSzL0wR6@#SlmApTzx~f5K1)AGQEPa3W zD4NZI$6H6=uZK>qeCOS-{J+-xbmqc6o?Iru^s?Nzl`dlkdJh9T2z?zk9LVIMYBKZ{ zrmw>|-S0_%gF@R(zJBkLJ(KkcIwWtxeA-t{`#zaZhU9UN^w(<6?p3HFC?hxeLcCa2 zIc2WhC=Q&w*@C^yke900JWl#@+f4N;hYi!guqjtXJW04_KU>Pd%K)vA02}J$tVDi4 z*g#)g1|~L^l;O`^P>~lsjW0AmVA=pncPkqV4RssqE|^UYL>Ycn9l) zU*TA!NBWJ_e!iVYJ7P|4{--#+t^m4A_CRuLBFJ4#%=+uvjbO;b1B@0Kzf`ZHk*k9` z1@kUj26+x|%#F7H%vhN|9w(OW8RET^z=eFSOfs?nG{7#~U-iE(k(CzFH0k z0N~u=N5l!kf0F^&9xJ4UzS?)ox!xZskp#Jc^^Fbn^H#rQrX^cvf;6FAG*!b~3#M>o zmXodbxd+OR@U{-vmh6z=#J!1?B{U@;Yf&R`)M)*Ghq+PKj+$~^zsl^0sT+KO!_=MjaNw|S27^mr9fbI_#PXa%+SU?tRC|}MQ~bY< z?uq;N3vXL1x>m_Z!l#l0Ta2gWAkYU1}D8J-&6-A~o$@CmFwXe-f|F z$w^Jk=GvkUZCbCU{pygj|5RGs-fFjuqp5PAWS@9nPW8P&O~ge^yl=9PkJ?v`?h!0L zY11B!srN!8_)Bt%38;+RUyJaJ99wg$JN{A)5IvOFc`^dj9p6w$Z80yz!!EldkkV0j( zu1a6cOGj%eEMjsRvKkMm2}T!|gFwTn4hl+14CZi(SGUeNJWb=^5EX!A-An%U4t6E$ zG~L{tPLdJsj_K&gkJ9D)&wrT6KOd`}KgKm?l~+!0T+Vk5sT20dRpc>FLt4Ozd+H=) z`G4jTFk5P1-QUiN~%oA|lcva1q1>@@m%&xsH+mo=lScBK}(AJQ*?h`K!Om z`1`^LCTnlTzI|#TQI0@OufHiD$Cb$8q>)4=Eg~XPlOs4(|Bch6GvmPWCbeMub|WDd zE3?!SM>iisD<1fF=DMD8NPmhsKvG3u(h*E7FOMcRdLuFkG zD5~XodFVYfo0NmDS-;%Dw}eVu4u5F@QX_+SQYcG|(RoKBJQw~++h>oQxkR~Zj%$%S zXMOC!);~dxWwd8)<%>?Px*Ea3wLXT4j|fW+(=6Y3`bta9(W9k2`Rpzu?56STHXmo_ z5Dso@8zwO(EGbH}XiMw0`+d@#aT@^ z$!WwOMy!*~TXXR?k3?cTcSiI|#VX*QH`6}lPYjAEqO=KcBu1~PTGbcfj&?k7^{j8b8;l3LZmQuGo3O?UAYo$a@ zclqL~CC%Wsu*f4lhZ0MTagNMU%G{b1uXUH`358=aas)_bI=_1kFX4Aef}!vLC(>`m zpPYEpSjk+opMGSD#+Yjbs5stK5d#^rQGO_}-o1naT;Nj%vV`d|8u9ac$~w8fmJ?RW zni}^WDd3^w&14wT^K#X;%CR!M;Vai2`y!f8DoZObQ^Q}~QPYBk2m5dA(UNWcij~_atX>Z-IJVpW!A>m1EVQOTmmoJ5nnN#`4kDS$9IkR!Oge;0f zrZQECz7eZ)SBI~*94-!J9HO^-Zqsxvk$HO?N&6PWH@H33b>)VDrAf0I+a+_yJ2 z6zrOpXedL1y6wf!HY>Wi(@?VYEU0<%zbdoY4}! zd-jhXZoS&W|1J!DXKJc+m02K$PzXLuR#|#knVR$+{V&=F2~bSHsE1Ucp*^is+Ed5v+2?49Mpi)&BJr{cYRE!i$ZoqMe%odmWS&8bI zhY`3xWyksDb9wQ4-E#~rrQh7RI;3vAv&Spss%s^6GJECuCj0dq7=)I@EeTu7eFDOb zx0shMr+0=-b+-hzO!ZUA%?n@LYCan1wg)`Pkfs#O<$?iKOU7%Hk{4U#RW4iew@4YN zGMvXi$y_f?>+@R|)y>uH+7%z+ z!MAK)v1bXiAX8JLdEzaHmJx8cP+@*Mo^lt=>tw`$@sPU=2ZlN6Jl-xqYz0-_()E~h~2nMUj>qpL?wSA%q3rk53g8`FgDmN)P z^f*IXn3p@OuML8!gTX`U6^ZLoFyc^oAZ!Uth4NnyVITR&yt?kNW?) z^?~&>#2B91(ASJ}h_lbOZrcb`mtBZRH95vy+FO13J`j<9gtAf#)7I*?2>^!8 zVif~9by=;l4jHp`@<9lx&`przd*SR7>gCN3r9GLOa++r3n8c#wqGEMtqZJ*2KCCQqVA-drR4knu`kyiqrVx!uMpAIFpIe z=f&r1$osN_ylkZWL5h9)3Gp!#mR1;944rJ5LE;hDXJ_Q38oGs!5YqYsnD&D}wfmDx zk`rhXX@hzJh?;wL?lsb_QPk?I7lfVCZ^8Md`Njl}o5lCYPPJn9p6U@D7OJ&Ju;EwviQj7uAtRF_` zV=&i`jKK%X$(Xmbqf6Nj4%#tTFX_agG)naa;i{@9oKcuT;W4}_A=>24hGdrJ09)=% zb3lD#5)G8QGh6~W_()Tri$EcZmArARaEql^VyTYmX}g--LKK_cO5<*mNyOm@anyhY zeio9~R=CV1lX<~UMClxGm0(+G2U4A!DmHo6yNab9bg#rhGZQGJe91y_V*@RJM8D90 z@8|Gj@RLIb-c)vJe#_{*C5i{ZGBA+bhHpu%ejCle$ANAGbuyNNAvuFLPBtTbUJb|P?K6D1l>ajP z70_6HU*VfqeIt~2d9yxe<{cY7TcM+>Vbl>H)$clP^xb(5J{z`;JMBPZvtKMHYX2v( zbLUzN9X4v@!i7#wy2VY-`H>b!ov-Pdj$$BNVezk_zm2@Uu&H}Neu2f&qq=L(O|+bp zTg{hpE5Vxe+KO&1+9 znNVF&r20tetB~4B;_^4?7J;Xcp|IKibFxcVVbOBqyJO#EC{D>8Qfa)7+N7pNrTL{s zl77i2yxeCiR2BA=8BBKuxhx|Vj=wJ?Lp-isuep`3I4Ku%(-@UQpe`~@eLMBngodSO zMw1C*-_t{vAtPoCJ+f}#G*C#MG|rhu7Vf%7K4`g_iRw;^59Q%$z8GjZ{E|krbZnC~ znJx|_^F=F6c|~d)5?weDO$5QQ5r;Ta2x;wFY9XojJvRoC-p0W}ub-Rho*Q@LchvKq zor@to*Wgj*?&{~^wyV~!zM-nNo-10-MhA;a#gSVa;J*6GBELddA`Cy-q9CWiPI)r% zWb6rUO(c_;8k3o=&Pmf7(zy%yPGrs?*su|=ETiJR?IJYsiTdoEx|7+t{B86MKRis; z8l8OW*2K7Ne9>ZvmLtduh4S>A6h8bqo##wH890=Vw9Jod^NvtMxja73zFr^0&7;hA z0EpG<%~@LvTeurVU|-8kidTc%EiQ#y5Z;WDktsMCP$wd3!?5tWDfKTiOEYc$}%c@b9Dij<#5E!o{72K z4bt-vF5rji#{g*>WdP-7h9#tX{ z%Z=<8r&-)Y2VyhQiFQO8LtQLpf}H9-n8a~E(!r1D*dugws-i1O9Lat{2d$&ik#->3 zl5a%0FncjvSb`mOaRHE0_Ayy$NuL?587tYRbUG`h```hvNvC1(63n+0M|Slj(_+c& zMl$Y4OThv?mvMp{9Vd)XbbS@X(y8!cYVbXkV2X%6rublrIV|rE5Q?zyy0XF=VO9bJDrbT5pn|^q9lolOf6(k8>c9Q>xhFn4{&db)G=Dsu zGoH?+zeE2s4|HQQ!e5_%K>8_ujx9W=Q>z;Dj_+!nkY$s#Z3^uhNX>$&$?wOJ8O1NM z2q&vCHmo{%Ri{35I^%Lk?y5{`mNus<`UmuV=U!~3qmt>$Nvmnk(5is|G~|(k7W5$6 zv;N{8q@bhmxQ{OBC9sJMfXf3-2>M13fzMWE!3lTQim`%I7YT7LPiQcL;?POah;b0` z7>e%zp|@xy><-{l3yXjj!27b}3DU?u<>wEkeVpls8bD@O0Xz(KRNk7rzlh98B(R3M zW*wJB)?X(xo|E?#XeTYuJurpPDkNL_IM090le1l8S&|RdiU_1fOyZgs%&eNC`DB9U z`kCNfm<70XF8xA{eC1L2v28ZD?*8|lKWQG^t8BW#gYs(*e`&NK-o`#b z&t6Hn6jrh+Ej^>O!gH2bxf0D{@*a2iN#mc-)dUiBSLj3l-)FB}L;G@R;o-V)jrbna z#PY=+pYeb?^+tmB6f*i6(p;ybB!p0@pV#`OR2jBf;rnUOm@#Th21BBXKr0m-xJvmC2buhi5K|LQx#Q8o` zeHU||06PV#8#?hz#i4t@9t3K%$HN8G42+3iSW#BtX(@t_Q;^@G|q{5Z6YBnNy9QY`9C3XjTf3vpFF1MOd8NJ=d$$) zsuW#^TWoka{aZTP{j-p@_P%zWOT*E+KEFeMJ+|^3K(4of9+#4j>kj{|Cq0E-zgy%{ z#3a|iqhA#31NZQ+%I4qs7fs)PaSt5YnVIS7oaljE{lcQi zlBoRPvXHFk=p{=mmRw^pl9JLBHL)=X$aM+|N{q;hzP8w6@e(F6AsPAbQF+nX30!&# z6P=fr23MtVA*m384lR@Rjj7V&z0a<(QnPoI~^@7)_&6ra89ON(pQ7{PrF`!MXj zX9wqb%kj#(bL-A6Yo32VQ9E}=(KOA}sbQY;_%(i`mako5Z& zsmw1TD1`5tCJ)#fz9)e@9i3O4Uy`0~QMUKu7inpVXV1t7rwOZp*?)iIxM%#2V^2e~ z$XrcT8|eq*#=#x<`qNKoUvy_^StM58-Qe;ni8KpBzy%4Vped~9-JdIYCd51tIw!5qmu#YV#XJ*^USkHNr%AYJ!i}^0i0(t31IG=8RxpP|dK+W%0}6 ztX&NLVB^e;HDn&kY{?|Oi)-9!b}gYcQ9e;V#qpJ;3e|TNC5KyTzC@{-_M)fZ<$yT} zD_P-*{P&TFLjDOS@=Bz$Z{)~HZ{{kR;E$nNLq3k7eY`>ZCZ~4sVvw!)FQ-8_1ic78Sc6=V)%b}& z=8Ze8`=??n=0oA;TP?NxEhjAARwb?yS6NVRNM@s|CfX!z zTaa%Fz_0;K8oRnyVe_|rCtSmFE%5+0KH6GqC5!$T2ONn2g3J( z-i@IrYOrOuIb`KJ@m(K9D2*S%%zoC=LnMTTkV9lDmXcsnG1NdvV7Jjd5JCM1NHlJX@sOY}ho zk=f{z%p%w?IZ)i49Vs-m15hqBbxWvp%Xo(52c!qZi6Tw45Ji$2mK~-Gi?;+|!NB;% zhWSb8ooIPrUQkIC7oV4(Q~=<6T4oL}psaw6isOrQ#o3nd1{;`aLveMDdZ$ue5nUdd z50YjP{zmA#h2qjHCGE3NMtt3Qn8ofr-!5u`rWTr02LQeC%gXF;dH1^i^lt?N?oo@< z3bZFJ$~UhEAjiO}bCx_RJ323cLlT>TNy*Gg&C*QAX|~Dp356FESz)>*{oQB=U07}6OZC4c4S;=0S>N=&Tjr_)nKfwEq z=%?^hE*hX&gEMPIm>cKaiuvy4f}s=SD$Lo_x)PHXAy(6nt!vYSnBoUVBx6XLz|UKw?NZPV_E%ZkbEZz# zX3hL6%XgbKiBWx5OYwRPyf|=;@19yBoAoUNXVL(6S<0@J{8V{dR6JCq!(`i~1asw z1TyVuVMR_F;m|f3yMuCOXkkSLX{R& zlWWim|A;Kt8W%w65!{?T)^70M4#{7uU+9ucbc_B^!NY=lKbx6+ebJ+DuV4T6(W2{< zR&Us4@5hPEHzAq9QAr_|h+LJ@&GB^63aS}xd1S|i>NOhL109JT(@reB?#9P^Cb_$- zk=JSjk?T@n88PBHy;+}B7gx(&t#7&hHD2{9pnD%(zm9z@nmlRIqDhk%UH_Ido}q;O z_+z>>ew}6=U7G#t$9#B^uBxc8u&_#37@=5k31XE$L4%pCxO|C!yRax+7Z4t z$%;WBnAHeD_;gR{qGtx6Y6mc=y~xVv zJV+o}26{Qe@iMNV-@}+%F}6XbbrKP;6_aDU0l^gEAk+06>HyZ@#p>eO&M*>YMIDV{ zOxH_@v>YvCMOJ(x><6cr@ueJK6b1Vx3@!vgyulcsBZ0?gc-M!SegY$}n=sSD9`-lw zfZw$4>=`8m=FVvLLMu%H{HoZU7|9V!dG`L=tOJJ|!W%Wk-(*(vWCzf?A+F&byIk<< z?cSY~;LVrF%M1nO72W)8p1!`GfdxTju^hxKB6nv6@^9;Vq3!CfmrPQ2#iNk`66y?? zNIHz&2qz?8om0MpG%J2L?q(_4*;svKT1V%_Zahwrn z)$8QB5$yr-~){b=IE!Q7i#85srWba(GXE=_N=d)v422Ru*d4&a~el;?r< zXO|qBU#cKBcgV!QC1-mkJmU^DV^f@c_!d6Wxx%3-LXiR}QI4kWKzUs*pL-yu7OGLV zyw5D0swSfcfHFq`=hSGR121{f0tgY`&_LQgj83D;lX$w(i+&7~;i#qo@LDV-fgI9b z(SVGBr2$o0#sDI7BR!V>!ud7W=eqj2`o(Upc2%5QP(5Xm`ZK?&n-_3?t_J%Ce?@Eo z#6{s&+*6%bS;V*hS}$=2szE7F#&02`$CCk^-=WP0)Ziauj~Z?bJ`ATm#&qV}Y2W#S zP)qLS2EXoF3cG8`M=ejuhbM3xX8inuo z(Cobr>D3o-!q5nEkR{7Q$rjNW!5Vu0mG^fy)Ysc_L_;|p8KSG-!O>c>yyWy5qCH9` zkO}ZfMTwt@pW&k9fOjjC^cY5tQ;x$IIx6d+rVWB1*=%Z!n{TaKdWow#sXGWIJs)g} zuDK_jx?$tD;`_pWc=384Xnn>7Hbu3b0-zC&#sTExa;~?%)@Ta@im%t~OQm2t0AJ=9 zT?|yZb@!mVdqw_9+ULZdeFd1|fLB@x;M#%W)0ASz7^TpG!A-{&{Fb9{E^R0^_bAX! z$=TVFq@_*RR_Gu*lq)gT7=@BU(4$6Ds<|n^F8GgU?-7i&m2rX0l|raOACezo8JS-i zSE>PgzO*z43_kgV`ckBRpzed(x+L#CZtyzd9a`L45%XvJJ8%Hrkh^*gUb8#Lzx!b#%*pyUVipFhs zO?@)&F4!bD?5%Ccux!Yv_0Dju6KyOqT)jP9lNG`z?d%WA{rejl_ItTP!&tQWpIP!+ zoXol<@Ah%)uFN&VyEdbtPQb` zmhpN+A~apvLFJ7^RjiMSf$}oelQiwSHPh);%;dtULjq)l1-XTp{5RwqX40{VPO`C`lZw=-Sk^2})oq1P#Uppg_bb<0c+M(O1y4njwb2t*JM35`sby&MO23eF)DK_T|Sv4B6ZS9k6a7E7xIshHHO zj)V8$jX^^7fVhpFXT?Qk*I}Ke1cD?cl1V9c%TX%M_Dl3!G zN@@f8teCJU9t+x*itIZ2u^rZg&Cw4@9A@> z(E_222iFFmP~&9!nDtmNIRrfSE~#|t*VOc7>T?UC7)NGKCF|0jq}|SbazOEkT>P3m z#zsbSY$O=!SYaB*bT8fwDv=pPRfp*NUk>KhE_ItWK@ACyO>_oHflGYI*F=7wD@!fY zm6hS|{UKC-pA4B!rf9Hw6L>whKXH4oww?d-^&uF1m0CjdC;a2*Q3*p}U8FIlhGc;v z;1^8IdkXnRhJ{@>Cs{H?g0v1ZTy=A!jZ^}^RQN?ST|R6y z6sSQuIzkp5YsiCl{VRE%!H~z*fyETh{|+(}gkLkEJ7!>XbyyV}4P5mIdDrvKUs(*# zMlr%D8A+j|SnyiBop~I@K3aTja(A7R7cZXNU4HVl#g70h_)7NZ+O*cBqVPL{&6u(h)%o8ua|YggPL-w^>L zqciD`jiZ~Xi6PLUz%6u#Tcjd6J}xy*4G?HDWH;A2a6$On!I$Y=y)ki@2aThk27h5mCj(i=AfZFxH=t=_$DVCn|c&!6nU%LeTB4{Njtz{`ih>U{&tXaqs{ z9E@)U&`B`c=x;*shlR^KA|tpUhL}vYNCH<1LJWq?96jH7qN1|0NKstXnAf1W*5R;v z>yF@+yZL$U<6VH+T=)%uvvqZ4XAf{4O)oEy!D`VAZaygftk?4YRr>*e{ondPp|n8o zBO6R{SW#qki|}i0PoamE*%kK5&09|%FSs>f!ug&QC}NmrDMoy>Y#x3$k-`YB+F< zeK?_~xP+o2&_yemOOy<(df{u%ej@5Cx=-7mGj(jOb5{AyysVjErUCZ+GvO}r^>!l$*2_|0H zzZcSBy!sn~p1Ui7aESi-CDP|IdH*uVQiL?&2reush0+Sfqc7QyW{;))I6J`txigmS zlW9+0ybVf+vhX6%JUy00$0Wuk@M2q63KI}o>;b;aatTCd(DUcf<7inf3oZ&T<-mwh zT2xfV8?Os}SY++kA~IRP(F$2`cz7`1h5Vs<6BI1tB)XO=8C0WeK~h@Gld-9+E{P<9 zqIo)}Iuz|7!|ULhLO0>!CBvXw(TUs{8N~A*D3Q|fk@i0eMoSBj)~rRu{htz0$f5=- z*&n7x16iUKy69+j*SL*d(Og1!cuKg&&COr{r~IT-F0Yo5L5lgrIusB3WHp&wLWbNT z*4$Mx=*TNF>6F4yS8u4-6cwc;6!H6`pKaWw_FGS9L_2c{z9~+@A&RKTz?9I-CMUy)jP@?_pgO-V&cQ~_TWlJ2DU zRpdFh(HVYfGQM*tTU-p1JHEAb@6{XX8{Sv#TRA_auWzbzjjy8Gw*aC{yCU8F{5T)q zG^ahjigKJbUCb7j=+Ucx@uCfuQmZD~^~8MC3vBpEskk%esPz!_5NGSTb2!XKf>aOm zqW|4U!Vf)!335~uN3`t{tmy5AKm&hpolc-L)pX_}Ofmc43VI78b#>gl6_@LqaFIBV3eAooTH@5^(&Uo;}*@BF`iCP1C6Y5(Ie=f zil0ATdjv$Tr!Rhahr99M>mSGzwU|%MQ7QHhdU&+4p8|7%DL(6^%}^id`}jdF z+3^j#04_Z+UIAz*SE$sZuw`PPSK#g}=ly|1J?sx^b%~Bu_~cfH*JyIG(=u|fZE+*g z=A{?@2jxJ}8XOR+Uz+wP4T53juP06r#%@vDpi zK~Jsnbj$9om0aV&Txmmk$+rHxgT-ZUka@VwmwEFVmgNoyoE&EPuYWGJ6 zRr0xUOm#rM+b*>@gZQx3tw9&sP^n~OOAKvPwqQc{&{wrzOgmFEuqc6 zaee%VsBt@|udh3K^w{ykO$YUtb~U**t|dPk85 zFu=5f3COF8tU}|Fo|Vh1T!6HCpHbD5W8Oung{eg;P+Lk**QJ9j;Qhgf)iZZU&o;iQ zHSnT+l|mmCnGu0#YK9)sRF~GOii`fO2x_dS%pKZCqw+|IPfgI|)z<49G%A;q$72GU z`IG*imsgzxp9IA8Dx>`i{53JLDH2#b4sSurUgQm>MWkD%%2HCGhc4|CxDIA6?YW-! zx35^!>aR%1FGw!bL_{VhMDh0iforPl6|`p?Vdj!P`s_5lCfdU-!Bw+)Yi@-jzqx94 zkpE^s`|>rdehRl6cSG-M4%TO6*YTTouM1iozdm7yefD~V%GO@rw6j%%G&5w7s$5>? zKRfhwoBL*GhppS4b|tJl=%ny3+Z(k{Q&E{+gizT;V)-w!x{5eqP*!fCvL)Ned;3fB z8pCTLh1S{h+*J7RXQS=Qo}Eonx4-YOR}$=U7@pj(mB`!&$uaf8Ged5ZJm9Ks(<#$G zT{w+jHh1G1%Bc5hk(o9{yF^PSeD(DDSKO7`ZI_X}MEWYRF}A?xHb;}YoLTX{ct0#m z=TjVJDS?iQ!)kQJ#g@W-;XY$LWMx*vh86qhLc=7?ti{-|Pv&16e{8tr?b|hb2z1Gc zOLR41#Sl6)C+MUmLU+ZASwxogH2&SGXAdSFa0&@chzsLJ**a1FBlZ01F;5_Hke168 zfixncu;NwutBO|&eQh>?ix4H4#wNtYC#0qTeZl2!bIIAJnKH|7=R7_(F*zwEHhNp! z*63{tI?4sU^(Az+hW48CkSMM+k>2;4&-m}I1ut$^Qj$6)ak!n0+PffV|Mj!Ko-g8Z z8}pkp4=d6D>PS~-1*RlXJLFNA0BEorb-f0y!D2u$y8x#n^N1bPV*)@U3u-+n(d8p%y#PhMACwSAZR|{+2JS-fP&aY0uiSo;N0T z4Pp0z6nC*tE|(Rx8`Poj;>%XApeDTPL2?FDO+LE_halXEIU=o)AgKGx_f5auOSiAO+IcZ*!Mc*dEz*EFMJ>QAwl{;&3w9*^(qglO*oj)kke4HKO-X}JtG5(>%%Qv8`tDI zdpNkoudHxA+Cr&m^N^0D0F7rDC39?5jiENFr-$>;d$vMqj=n|#7n?AuI=M0*QbMqax& zuPSu#wA|tmv%G#AiK166s;X)W4{G++#DybU%a@L5@jBvq(8ZDrqciq;6l_m*w*2c{ zLuqww&SA?|vOBjm^K|kl*o%t5&UwVe6yzjiNKb%G7O`3Qr$;_UYeWr?ICptuS#@Jg z1IB3n;y8=H=td?si'NS^o{z1ZKlHsAybrl=JE7AP369ntV%vB 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 CDx5C> literal 0 HcmV?d00001 diff --git a/docs/docs/gitbook/fonts/fontawesome/fontawesome-webfont.eot b/docs/docs/gitbook/fonts/fontawesome/fontawesome-webfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..c7b00d2ba8896fd29de846b19f89fcf0d56ad152 GIT binary patch literal 76518 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%0DyT{kunD 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⋙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 z + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/docs/gitbook/fonts/fontawesome/fontawesome-webfont.ttf b/docs/docs/gitbook/fonts/fontawesome/fontawesome-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f221e50a2ef60738ba30932d834530cdfe55cb3e GIT binary patch literal 152796 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

=v_rA!CPE#mM^4@)}X7qf;At+v)G*FZd&; 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 ALjV8( literal 0 HcmV?d00001 diff --git a/docs/docs/gitbook/fonts/fontawesome/fontawesome-webfont.woff b/docs/docs/gitbook/fonts/fontawesome/fontawesome-webfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..6e7483cf61b490c08ed644d6ef802c69472eb247 GIT binary patch literal 90412 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%0Ded40&XED0GYFoIh+AV*?9!MR5pBW?X_8Bp zK%Pi2&3!RUu9|qRP>4Z35>46R3-HSVQAZLeK|VoiF$JlT%hYN$P{~XnOQBRrwNe$3 zDkDcHp>LA~P6d z5;fR}J~SHToEBnMNz2J6@w`HcLpUx~OvPyi9!FGCnG$S!Nu$wVjzF!}7&Oz=YOP5N zluDpAY5uI%+w?#pQ9`*)A?4JNnR$45&%afA$Ec1MfKwMKS$_D?H&7v0tL4cbzLBen zPQeDPlx3w_N%C3nIgoP-8K(mC6YFKN^$A)18?Vabue>3{1M~AAzEmi_{6Wd~e6Lb{ z-=lJU_M=wD{rH(ghD>k)+VUf((EkY5=@l&~=XksKuU9Qu4%g8d8OKWX$(xqn1@$U=vss>j z&UTv)_xlSZeOiTS27(|;QR&_oo@&VMd<8K5?=eOImlmT%QOJXL!Tyye(QT*$-F9*% z*#9f>W1tI6J=q&SNmHXo9uajhj*RR%G9Uu721J-Fd`gHhd>XKq%TqSWLrubCXE~Li zuEulHFZb%qoX$;LAPb7tM0^VbNg3I|m2gIJznp`D-#uc@4v1}tk?g+`dxJ6<5{&Qh zYvTi^EYtu<%y^QE33`A2h(BQ9Xi_#nE+b+69x^D4*yE019|CeB*x}d$R>_s<4@xkN z7@H+2h}_|_(i@#xH3X9Cf-9@uzwhR88kGgGaz-|3lv)OhVs&1NN~Lfafmx}S5nFg= z4B3lDg@=NT8WnyX0iHq$)?Kw5n%Ks$z1Rs?T9!2ys2OI9u)o%eqa1Y9p{vuBphS62 z&rrmo?HmP%+nijX33FEf_=9ds89K))0VB5sXXVN?5RU4+dVSlip`gZ?FM%}cTs!Cx zvRkeUj-}URwR1i?$S?v}mI=2=a!%Ba$>Q1tqZbt`EDit$_A~Jt4gYQ5hBp#GV%++X zFxgngVF8klmS}*7(B-s8AnZK2wdru=S6g{b{h@;ij)n{kSUPd=P(6CPeH!Ktaa;m# zSaJho0mEQsaa#LtXfZl5FF6l~QzId8ol)GaA`+8FVKkKAMxAXpQ!(P2pA`k07Dn>kT@+i0w=sV?xguZi1YNXzCXwX)?u?)Ig7tC16huq z*9bgy-7nOlPa9@2N*Z@6MxvP8h(4%$_QY>!g3sp8y`AHwjD+E2%nvfM#?A^hc^?3VDn)u zIO^gzZq!B%Mpid{x{fvKpS2stjL}E^kS{9YA#eCCGgF?_lsrvbK;A9v72mB%4z?Tw z`wki!jYa&nnf)`KLMHSH!WXuqPH%bqVHw1`!J26?rc3x_j#j8N@ET}RRi)0qsYUP={P;@WeTT2$$5#TmJpMzcE=^BL@D*utX*mw`JdXpI z*9lzM%f5r#i)iIyvPc3&hdgr3?U-zYW{UayJf-77K-7>1Zu7D4%$QRB$2;;{+Z@$% zrZ4RnV+VHI*wt%V?p?9tjyI1!`dleztu3q8yGlcm_@C~mgfG5iz8ZadyDhgs7g=)s zM}Pwh-*^}8MPI$taqpKyK=4@i52v~hZUBrjkUnepnD%MopZ;q~j?annnuL;LE=rF% zQY*m(;DOG^#sV_n>)mL^Je!X7Vah~jNI3%|yoks;{|$~ukD|w)f1VEG(0Az3CZNTO z*VosA=Hy+>>(8Udfhu_y9nR=^-I!zSc|9Y84&wk$0E^H2 z?2#`PPEa0NKDlWa2t0NeSndSpUb|=AwprRLWo=WesVR~(yt;bm@Ws`u@4jd4^;6X@ zzr3cgsI{RayQR8jXxpNyHAi4i-XGQ+`V`3jdDp_Hqk-(Dca+|8{C4!koe~TBdd-e$ zhN0@}+GwOMtFEoBF6;W0t9MM%dUKTVnsCV=F>U+Bwg)2aCb6iA2|hJ1G8pitb7q1{ z24eoASU{qs((y4P!0FSYf^S&Xj3;8wWPq>yQtcmhqb>KHXgkt&;`}!!9F7z1um-FX z6JANVdZnkIXm3B^kWiP=5>~g9O1LVia39)|d`?IJ{*T1U(i8WImlO7D(j}+azY-J( z(68L2CyM+O!6!(sBwPN0h>6ilPH+1s>PB6t`=8rRfYy`mqxVyOX=kGM-#-ajPr$^( zBy-z8LHyxAgQZ`)&g7!5Pd15eXg7TVI&#mrzDC=LJ~)r(wSVI_oQ8XRR38f!;?c+m ziX?*hIv_^wWK%OnOgEx}CJ-SUNv04`3pVkhse2xSxt_48&?zbLbIDHwc3C~V^^u=nYmeN)$BmCfd>Jj;r1?ffM!fB4#%vVHlBB781miYh7UFw z%ZFN+^sK^6wMxy&gSjn*b=d_D9?&14g%^&Yqn~eud)@(S@JNw{XRh40`|#jUKk5 z%v7;J)JtjcQPjJ{6=I}{P>Xa0YJedOBO1nBqykUReG}a_w=^xM`lk1E)ycn)Fxg9{ zPAzfrZ5~!yIv3scW^uLdy_>3Y)_kf~|I1Z-tfal5XhKmzd&#j{*T2;2Pu(@g%ElJt z%+DzpTXw7lWmOlG;(kxbT+qR2r<)9supLy&u17v26I zirx3Wk-QJhJnAkgcg$MQIo(lQ?Do5H#=Tji6%gMVuc740t{V8X@ZjY%^SJ>wv06<1 z4Wi~y060L$ze|Z`qt8I3#NiN~I-6n!$uFTObfyzQ4kZo)P*UmpEz&oOm9O|lh=Q^xg=CRdPP}| zKXY-gt}**`N3*@Ku&G_{8@vs|Z8SLN#M8aZBb!5C$CP^kt;JlN-c{_6qn8VY6o%>x z;q-wbu`@MQaj<*T$o8=BinO#PqeHVbw5~28Jc2` zfz5ela{*cvlC3tjeFT@c87!{+NQQv8PvG@&PS{9Xed!D-t#5H1gd^^{?f$)GwszOLU?6w!=+T37 z(e6QO7FIt|TQy|zbJumWO$ASUz%U;$aN^)umF=N4Dda2?qrXG)56OL+67{Gt70Iug zOG;Z?%1TYsXV0J~RJ8593cUV`Ql6c;;W4w+A8=)wjn3Q=CFo6S$-IWU%9+ej3mlB) z-r?6C%kOzEcO0BDDZ@QJdF!}Gejf;ycZ@9qlNl&^t}*J#T=yJAW6Pr1NuWbrUj8~ycl!HU7!#a-av`_Xr|#cPdbmh~FLB~uI;c;rg9N2Hr6e08up-22TjC-b>tq}QV~V;W7?d84U~8I1 zw5F6x7(vMv_cqZn4B1Z?U}A`G*%0n40gA&B_G}AOD z;FTG5Muiq&QmbsJVMI&{88-g!$kO3)jZ__%WL0V&r`htNpXaW#ITJdZpZOE);WFVRc_+GlJ64RR}1dMPurj>^Z z__6)O`#@1QynHgiL5B1PVQ>bxn3o`m5M()`y`dAk4%%~b z?ZNODg<=Z4zbHUb0!8RYSKwZB=1#N6Z7Zm>x5<)2&<8JorWYRuC8yw`ZOdbS*i%Oe z+zA}_-VPl1G4i%hI2Z_{$&Q>{yCXLTe06EU5#|YjiHtPBjiZ}J=T7k!#q#+y*kN7Eij!h>FY|J+Q_N>4@^ z{dfN>I%X8^{`=?EnE?acZ9J!DvwL3L1~>HlRDYbn;n;(Bw z6W2Qv2~fep$7L^eNGqD|OQx z5F~np#IyFs8H?7O+=u!!`8s-a*ZTEW?1ZmSL#;rEYxBTGmSmeyk4RYyB>2qxz|Knq zhb)CN2Npt4{z5ibiSKm+-)k$TCsW#I!Yqkr5F(}%zzB`B!R(|{+}*$u0o-l`br|%z zZNei=;NghIxsfNLJvW()_@Y1_ynG4ax{_TvkL2b&oMW+NGvtu7}cmm61ttBi7nksHzW9VWR1q`7Q49G7KrI$62g zysCuGrSt5ejDSTVXBVr&xHYn^ZPUhlEZw|Q=y zy1phpcI@g!AOt?NdfD2cX>lO2DkA3-RcF8jPtOqdVgJg_f{8!W%sia;7iMyL8VCmm_W_K?mxBf_tnKu3J}6*Xh#| zDw%$|Kao!KhhhBm>7FjKQ#t@d&JS=LQi((l{xKKjAZlPNRZNs`r+mv3Z3^N!1h*l< z*~2qAUPpbTbEe~TJUg+N6Jn!G_ts~gK|ekN(Y^`mad7MU31BuPaBn1t_CW|{PkF8*ZHTtMYDOSTF3r@UftO|bZy`ueV6thgGu(+j+mm03uxm`>!hW&*ZA4^>^ zc4Wmj5PnlJa_kjXJiH!$Q#k?$#*V1`2Cjb?TrrSTNLC~4g-v9Ckq|NArE_2`D)wDr{tTp4R|K)Ti0e`$!lD`AAVYz5{^1qfAJ7M!0rY>Q;LFpx*oACrV)wkhWzg1Nrj6$I@<^e(UrfTqcw!K2jwqb^p_ZkFNrVQC;v-fA{Yeiostv=Sl_(F6Eq_t z@as(wL<%7@=!11*`$DkWZ}Zy_o{-OS7Wgj$Z!1ReOn#4r>v@O39D#HK_S+j`x|29R zDJ&I`qUV^CaoF9HK&eFmFA|g)#7_4+Ef?ur;h7!87m0x*+CoeK;04OBuL5R31d<#% zOP*-(p+$ST?nGtB(4NP^+;#bPcI^Q-_~+vE&dyE zVIHpf8MwiR-@$r8Dfy@1bI(YX3f_nYq90twPo;c<>p zu+A=FY#weATV<~E4-OBlXn1M$`H}N#md|b;%>b#J1I(C~*~_cvj5xpAniZh6^rTwm z)7nYKKo;#7v2x{zktn0>8n=?!rToX7XwAD7AAm-B&h1Tq{?4E`G zadfdKJwLn{)B`95=)onS{B-Y)p7 zByg`1+=%J;7_q%K#()mEIU<7P>BLUx+PO1%el)0m2NTTA=;?RfK}!}e&8QhXN`6Tx zqV4DZ`OZ7cksbwV#^)=6TkOB%E&%ojo5WmTHlDGXsTpLJf~2Vh0!rk71>nwrL<1PX zp3#rvcp)NUEUZMpsJhnV_jOD5L%GRys|CUaGYKbDrAi1Pxb&WDZ}!9?3f!(0i(Mscce~#;8=w z8y>6Y6*9U1OiU9P3p1>t#>eYmQ<^?QmW_@_|6))Z<-piv3>mX^AW&oHOmO&2gKjJw z?XhQ1)W|*he6k=i|KL}>rS0mwd=J!hkyM9rYleoz4!A^NF%}RXL;IAi8 zcsc>zF>=w5(67P;PnC%$aMdhI#r;LVS#aTb zZ8)aMQlr*rh-F|#C1pVqBg%dP0GNP#<;ft9gay(YuPZ`2kEs_NPT_&|r!$7&t}EKE zm<<~@Y}zo4*6)=!fAPr|&GNm}1%>kJf9)G}--hX>P`5|E1*`%Iuxg8Z4^k)|LmN;r z+VGe{q1!8e1~SkFnP=pCRW};ab8^xR>q7W%k6tBj8auX0uF~%TTIrl=IhB<;d-O{A zmR-BH$dx!zBRg>L-~kya`1EV9JxvM{4LHGOM%cp~D3Pk7hEXG^Y1BMwEgqbg_=2PU z%QL}*6w&NL(Sd0LG48Yj^sfifw;(Z$=th87g%c7_^ss@k%O=vp8fQ1+|ERZquNfYT zk3!O`jYa1K={bv!k-1`R@*lh^oY1QSW0y@#CP2RgA6^i%x&=sTk=HU7*;nBm_@ykgx{=-5vsuM_>a411Pd7Sq22ZH^Kx$6fHzoP6kf^Gk~?bG#e z1W=%NOlkDL*xWQYI%7k@yv6jIk*iRh+s32A8k^f`EI!@&VX+UI19K+tt*?^MfG&G% z-o{Vcf)IcXY4S(8+r<7Z&2Qr~50N=MkXmQulpfFELBdg)Dc%ifKW6+S9HgT$J+CJz zGN7f2XB)q$f1n4)(hWe~foe8_U+i)cnkE6;5zRm9Qv5X6Ay4xMeqkgFa7tncvb z!*JiA*0uWq*j3;!4~(uinHv^uIsmUL%qh&Pk7_`7qT2N1gPylp%`J(>qMwECB*jOV z;oBjTr^{ojKp?7WnSdI`)vruL5N=Gahnuwa6_aKTF?)^9bhqM$46thY+&XK9(c}hJ z>8;V^(GF7sed4@uF;?iC+P=2o@HezkUaF94q2^PYsNK|^)G_MM)EVkKkOqkV0a3aU z^@StRJjRp3_Qs2Z4O1b9_QW_(fb;NSvyXIOPppsnF&7b;5^gflbr~lJON3c9kP#>% zEU=*aM&wiGFy|rr@R;Eg7(=qh5jGn*4*_`*l0=pe!IMaVKwa7_8^UkI5-c9~@vZB00k$C}OlA9~k`Rw4!{q3;=JMlk=xF?3bE& zyG$1xlVRb~OzARR_DJV^2bTtAEH9NxjeItg(x%vp+#=d$bvk5D`{Y=bC-YjB3^SI+ zn1Bq^YV&I{hshPRTa9+P!;~8tTx@%hQ89VI5HLH!`FMTDH=H*3< z#(bbSJ3^b&T)vpkWm>!Q{7sMFxFIK$vt$WAY`F39o6heP(pKe$^5)LX3+1jNX<*Am z9d&%V$yrV_tPB(14LBUi47##{51?~@{Nu|n1IeAm67LM9$(C*lWCNOIfI-gWD40T8 zCzW!1<`5u(`BI*fNezJ^Opz|%No!#~m#@q*te;~}Gnv#;>EzhptbjQHi)N}f4RRZG zz7lmT+nJ#%lU5Yfk6Wy_v}B~N&q;)<(-uDr%~sEztiW`14m!u13xbj6v{wim@WN&H z?3p!d&ppc)is-)!7u|f#&7~GoS5Vhb zw+LPU31X_?)Y>2fSYjxy>ve$6rsS-opT&A5vAy1H0z#(}wGLsG)ToC2n$+D80SQGpy z?6$pUcd3eIENPgC9`lFCfu?^2a}095T5GiD_+mj%rdB0Unhf@wV7wx;$yXgJsP#7) zX6%}gd=hGcV|Q)5uD}m}Pi{I_3PztkjgH8Q+lw1Y&|}wWoAZm%V_Tv3yt25txtRGL z9|_s2@B4NTQ?6>vuQ@Q?>c?DL3pJiPN&THV3s@inUQh+5QWPH!fLOp|BriaS>_)Oi2{EpZ7Zft^&uzq?oBTMzP6yY;Jl#n3C64HvId9;vdCOans9+M!Pi5-|A!sUsm%SK`9jygfi zDCy0U2z&OaJSU)az0HB=YMh$kS2F@OL`-O%$jWiKu)3lC&K)~I#k6OGBS&NccUIf* zZ1fp9f>+1o^q6WUl}y@Vy~1#Rixrmjkmoo;gZpEw=t6u*r#zW!Ff$wE&%Yyyhyms+)Q&hHIm zl~}bhAn~bZcuK7*C14dkCrLCg5?F)2ef8Dy@~zjDK|srOX}mx9XZ$s(Ec z1?EmXcwCO47E)WOgVckV8u??&V^eBB1$Su=Cpfvs6!E}x0hEKIB?Oa$=zIy1B$kf~ z$pb8$@fnw(gyI??II9-~=w>k^27dFE3}OvFQY4h;45G7p%s`3{X!-?>@M+kW<_Y;6 zK3a#FIvrH#O*RXd9QLMpN$RCe?R7(D3@UY$ z>lxJ`9-NS}O$u&q4yzl+N&~r|O@*V>1+c!U@}NPuNSl)RNL>p==hONuYucdbuSRE$b_Mh3O7o*u5&t3Favnkd^U( z_n7eQ%;3X|mSVCO(YF?Bs1P*-uf*dq{kn|0mbz73hw*|MAuze<V1%k4U%d@urUmSD>7{n!LOk`r(4m zq>e>ZvAHwKv?YVH4QBRdcriDzdXUc}JMA1j_0zIytIDLdxjWPSf%?*Fi`uMpS@nxE zeVM?s=qlq9>8$@5>2)eraG@8i*V5_EVw4F&F7y!i>j!H}ii-1-Ypr_~#ns^VN)XZWeksY4GA@CTi&tQ^l84~QOuf7-~zRJ+#PxOMU$G1+rxxIkt?tRhS@Q1?{iz-0v$X|WYhf^;HK8HV#U0yYH zei$WCTzv73&j9Tdw4b@Bz^^p)0_d8s~6AGj*4`VbioIDM>3phD?LC(>O^y&`L!GR!@1Ce@7a}dOX&6;`; zQR};)Anr&CRsTbn{`YbjgtFZ@+|xK>_3{z)Q^IZT_7xTR?$!^$`pprv0g1ex!17Qc z>StsTA4j_NbUlywm!S?$z6M2EXb>@QO*w;!drl+!?~Vk~xwQjJ}_E$7?It zP$0usGqKF8xkzT1jaTAz)OFN;5y3emU`&z?Oc)lzFf2sGbTQ0hRv{n)t8xOy)#W3E zjUlR7?!JE_J0q$aF_C`3+b<&=b(YF)^*fx|^_l5u-qyU_RUC8oe z2$5WmP$W06)thEA1xb-#)(~=WmCn{U@faZfi??>3r-l?qhVhOJ2k&o(|1pvvVh@Mi zVmF!WR+}TuYUQZ z)PGase~gG@U6ALng#LCLiFX9duH&DS`kBJh0HDq$KsSuz;JE}t^&}wfbII;LpCR4C z`lrP!Ace_(!5b2u&BDB!_{YHCozc@2%$SQlKJb<}&%E^v&90h%C`rAA=Nous@`L%S zdS{;`bpU-l7v4crcw)Qg*<8KPMwSXP!pJZS2qTLasF9^YcwUYQXjdn%!UN<})X@!x zk^p#fwN_^YkE!+IJDf&MMx9Wqw~$ySpilWB;wWYe)j=pog6GSK`m~Y&@jToI=pouq z;57@1s=~xMh=@Wh5x`D~6wu>@X3ifF2uM~bmphBRJ}~Ii?y@<}jiC}}p(4F(?5eho z2WS5Iz$3$p?ISg5U^BXK;}2Jl+4+Y#V{Vu=rnD@p)Yh?W_)>pW+nBKp#R~eNMa`oM zfYRh-HrgEKhQfL}F7c#g+Ew!L-|Twc7oFU?q2)@)@Hu0HiyrOh`f74jWM76C?7Izs zU2|U9JHcN$b^4V{cST>G(wbGC?lR|=&8gSw79L_~bC$xM%T6ma0%OfZYrq&mrcLzn z0!6*sRvr^3p#vgThe1Gu#S5NEQ0in!8<~yboFD6h^c4m;7rqRB`@YXS-k^+uh2E$R z82E_+xqDE!bsf}BnVuF5*};giDfQ-(z@V1Ih#61JrJ0EjE_iyPK~bKyWZcqyhh}#! z%aeLcnci4&W7fQVvoFH;Kl4D1T;+2>l>&P6H5%{Ws65TEw3X9#j7^hj9GNz@wEl+t z-7{AXDeQb|I+*{&;)Qn0g4Q7qE}wJHyp_hurQ=KL0`_a+#}^v|&?y0a7l=S2@A%=<(I0-uP5q6Je$1hEQ#=PIH|Ezy#(5eQ@Q9=JJ^nGwM1iC(_o zCymex>39lBC%(I40kV9OeuGm8uO_%|4dc-tNQDR(SvUmGp_hUl%kkQF2#P*6%olGF{Lu|z4B8=lx?OBVLj%axn>VLg!MZaztjIuhas6T zI2;C;Fo63>;Ut9*3F|D`Bft(u1N$SgIcA_3ARmQFkT9pEnNh--mj@RH9gd(QIX-z; zA~I}PBq1K*_|8S(rREjoW->A#SKo@HY};DIgQJ~$gJ4S6@~Hou47xcf&mZ`!jYcMFb#!h3!IyQdxZ zhTuQy!{Pey=+PrX9&hOSdmch>KhhhX_0Tt9izhT{)ZOTf_csIiJ0Y(S1BLHzMnAq2 zA~pw#3l#H1>f73J|6eX(ZPR8wkvR$W#CiDD2+ok1z|To&!ErOOniD+Q6U}MCk+ZId zSZa914GJd{3kldlB2+gXCq|s?4@f*Imt>f@Go=yrE^*mJGEyUF9#SNi&3RvzDDb@Q+*f z;qO$8{J3OSD6 zIu(tRvtaUjo}M4Php)4#EzRkzQ{z!|AhT-cp(FPKm|f7QFN`QyXGW2OXBf!yUWd(O z$-8=xYpGMIgz}S+Q%8pGAD-ckD`)GJ86S*`%~)q^a8|C-fRl4tXC$A|Nwgal?wm1X z>d^V9UQ;<~Vtfzkd2V4=2~hR>!6WORjfx8R=@bYLT+BSF)sHN6zWs9t3&!X;I5TQo2k{^g|lp5FA= zn92}Ij|2*1V1X-FqH(~{$pgvjN3m9&B-iQ8mFUfq9B>uj;nXp#MaSkjyMLyj_O{3W z_40|&AMA?PuU=j-q}F@wr3sBsyzz2{RH=tmRg6X@E&sz?Z~mb|s#de^^lC<}mX*Im zzj}^LTfOTF+kx99jVcqh0aL)?{sEp2g^@0J;#Gs*#lF|$VYD|wpB8*Bc6Fk!g#c#M z-@NL~R*=|w<|1s*wzEqJ&^I8hQ0D8-uJZ!mHH+Ett!Kc{o*Qs2y_y!8cdDzC z?iB4Km;v??m4b!~b*bhkD`Gfvy+F=5tvBm(F<+!lkwwT$;gDZK(YWlES1b+(KG>0| zIUWWv^;dVCf3xH2t2>y2 zj;rAlOUPBo0iBCf7Zp`U&Y4V~khD+w&MR(-R98pPOr!B=Ry91(U;FBTKK&qGnu(U3 z+Ya31pX?VlcQ>MUZ~PR*&~Y>b9S1S60nReiD$pH)F$fxVeZQVn>eojcV>6By6?l5ZCSD`$)|kCl5B%z zVa#D{z?jS2<~Fyv2_YbE5+LDDfIw&nxgZDmHur%^n}i%tl7^JrPMV}io22=sX$rPA z{AOk)TQ)T9x8Ls{Kd^RZXJ=<;W@p~KdGp@qZN=-qeau1T9!v`#U>;^3VV+=~XI^5? zGQVXmh&aG3wU%UKyPpmT`H6ImrN*eNh!9{XAyI}HZF2<3PlRSLP>fl8#1(S_d>MWoD2)dw0 z;&Sp9lMK2%I$rPri=hDGj>Eb=GU#UwP6H4s0rk|T0G5E1u^P{_$;Pv+BPm&nT685k zv{+}gWN>GV$?OGVa*FXaknuK`VX^AL4sAdSZr78$zq8nd=MBl79^P_C%Rk-R%-j9(O{^wvxNs^&~^@wl|5nf z=8?0jqk-%DO)M}=FY{7V3j&?3 z$MHX|qHsgj?;v|}{ZJmRH>GpvZkf!8Pmf8ZmJGeoXmlh=m0&oRZj{Nu3_jh6(||_6 zflLjUCzmEUO!%K8NuorDfWxd(qZhdJ&huazI;v$;IhmYCcR?1s1}3~Lg`oA^Ic>)% z312;Y4v?esVYDk11kgjA2B$wQ;lZjZ(C_|_Upy^k{Qv^3>NHR((CbG)`L~})(Ul>u zLuK1%x#$&i7Wgzf(H9@*fo&ZSH-!ne7+3{3RD_-dKYxn8>bwj7y(rZi?w8LtZaf2K zwO4I=>7`AXzXlHxoNr|G_7~~SMm+9rVdT{FHIc_~3`-ao%)juM{lyn}u?h5yOT6HT zmPvpKN(3`|Kl%;ISZO>Dnl3hg8IuN~o1?ERniOh*0d#yR)Pd<)YV;8bubj>P?(Cym z4=(^i-ZItqht567is5Tb& z8)Z2UY8T$M>9H7%kTTpqsE#b5=myaX4&5Qi1%?1-w*x*qk=(HHc$O@9F+(FdZxg8Z zBul^|%sjkt?YXm`@7wqJ*>jOK{NXkLzd3a18vxONufK3)&B<5V4jgEE<>Z<$74E}!KU7tLDY{{Cpm%n}D)EnHY4r$qhefuVqaaY#Oo!fDLSwA*9Z0F8loosHN zbN>7cb~|_H;i}G&zT#Q)c#)qzf#>K6T{a05|L1b(>#n;&NE1*=D2=fJ{v(@llF>#F z=nI>1CJEyM`sl`Ce%rVAcVyoG?bbBQS*?$4p|T;#K`TW)ZWLS&1q2I%YF-E3=c? z&Fsh2`UGJ0*FyAJOu`L* zt~jSffnsbhU?y959;ZO=Pe}`wI)nAYgV|Z8j2aE*$}?p)wbiUl3;G=rrhONB z6g2c>k9JN&AMjbPzmDEpx^!Q{-yInR4t0h%gZxwuZ$^gKQ83w?;U&LG1sPuM?aW^P z(5c}|d&Vpsp4lT${O5dngIHQ{OJ=r=2L@A-uQEq&&P(?e2tZ*pB}vSda-d-qtOUv} z`Ed;XrFi`9q?iafz1FffGGL3jStSg|lzZBa9&KaM(YAZ;X#;JQ`ByIIS61eO$MVAP z$8a8aEWZ+LBlnJyge{AYa;5Dr1iJlagL^z?C=73+^eA8Oo41@8KWp>)DYn@^GENn=RqU(@lDD@_yQX^DSsqH~|ijHRufEBb6q15{P451>FC1g|5G_s+%6 z2I_@?V(;UR5GQpZ5M<-B6&pvE;~a5dOQaXn$1M#+zY=w=MV0F}?a3YA0)bCr?;=S$ z8LQjuf~VgS#V6Wije-*ZciQS^d*(s{(L@DowiPi+E_St$mL%5}5l7K^#=+ z)6Fiy-HrWD>MiQ6j}&{GCa!KyJ%m|+xi|>^(>n8vyTq^;zjiNXHVuFw@X<_k?|)ot z!ye!wH_(TB3^?a&jDh5r@jtJ-=xajcp?ASIU{ZA8t#6@r)W$|}%!{2b!-wBO-@`>u03p|&%uFV}a5 zwNMQrdIuMAuuOC|JlNUEa?~e9=bzv~8UT@5h|w45IvJypV{`?2$PimcTuI?OJQvk4 zcQVKD1Wm;Af``I2|MDRy8j$|egDWwSjwRdXIv;VvX(Di$#E${1>rVZzUI|Pt-cP0( z!GJ$JhM`yI1j)>aU@$a>Ok1S;?!tK?M*o!+9#^cv(U zg;JrC8@!n+i(aQt@k&-fQ-OQ;+|+sCraiJW?+E|+_ssC+cXR_X?RmEOedpWq?3n{} z@4PIeyw^}UE=LPmBVl4n6pp}R4oVFW8l;fZ%UD6+98#;)C@48D*_n}?oZ(F7IHh33 zkq%A}SXt-sn{K=9rivxEE}UxpC>&NAvr5ZyLc4NYp^z(QS16~fG;750&m8NH-4WYA zh+#QMNZH%zD~)R`avcX!!M+n~kaBNEXd-D@Y^JtmyMth$BlIbjYq z=n!3qQ?Yv%2wW#?mqwM<8=jy2tM9bR;ll?tEp(+^V+M4I!|UpjZhn%QO+|)nnVy#h znWdvYvAKE9ofLH#2QD$B%p^DeYw5;acf4`s-KCFP(5p_PUbnX(Z_^7e@DU(=p{MK} z{51Q_wmL!a#j!=N4VqW~#fB75Ttc3bzYvqUl;SjVB;RJSrOsJmz^}EsPgSN^-;Z|e zUX*T6$16G_fPbO4*gfV0h>!4Xn8zJXW? zz?UQ$W>bb_PpKYyW}`b6Nu7p##roe$oOv1iGBj>BY74DjRG*nyzi54^4M9dCW4Y*q zdOaKu^(iKh9Gz*jT8-e#7AH8h`|!s)BjmGD1ANqIO);Uu!@EDal3Nqb%naA$ULiaj zyvA@5z7z8^J|Y!j1f4J5tGfhtUD&ibFM!lLE2qySdq()jMbP{2w{-)nh`|GYTd!1X z|7`QaAm`CeM(lB94~T937(I*oQbJNuoru#u3iOA!e6>eo*n|G87k72YQ;GYb#AdFi z&qV4i7-o1O-3YdT7+8!?EE}WcTdi*T0<>Z6gu|EqeChB6d|LkI-C!;1phC;p@uH!t zJpS59R9lju^>@FyTue^;X6 z-s9CE0BirEex!>87(xVGWPHaf#WBRLJpMJ--l%^2|F%J?1@<>reALKX+oIM-w9zodnPwGa#UC<+R!SkAW zNZsR;L9h$eH(>AC2>icp1pJZLmdun{<%Mz}o3n`C!9>VTZf>4CCU#?d*-^0P=zrKs zq#L|`)W1j$qS*gouzHf@e)LgC|LkM9UUahQv)LUZ5i~IUOj*VPXkJ*b)g+uK(MC1d4%}UgSmx zJm)W*JbB?f@O19QtV`?C*@q6zUP@K&GCV%*?-0pTq34gb^f}9xoddr%qRw9%j$ZX^9OeP(m3MO9;4(W(#gLCP;R@ zFkNJbB_Hj?HX!NI)9NbC>FCF&-$BRwFTc3AUMjoo^Q|jB97p?4V!A#VPwkYs4`a zPE0jqifk#4L&uEn=~}f1UF{Sw7bM1@vp5E~p(M7yF$A~aM5g%{ z+7S1de~U0tmmFeK(!NJoy`Wo5dS6$c)8Z}{>D7dG^p7V$eQx>o>&EQitG8H^f$F)o z=k`4MdTdlO5n@u0tFwIOp+hs5Kg*VhosVAj9H+SLevLX)GS&>!Tt8TK&w`A5p9h+> zj5Sl~X#7*G8-hio`;|QaS|2Fu?CN?b{6JX`9il!IWj%4u6uOipg`Tr#uv=sDpU$I~ zcF1I2OoVm}>p7neJ0-@Sy7bHQ>U%rnR-90_b9m4Bb=WB}{?w&^GS9+m9Gz#&sLw+) zV=_XHZtv;?L4Ws07DV79u^RDuc6SRHs}GF44?K^e_a5H-*>(k?EOZm}*hH}qZ{W4y z8)AJXiZ`xy*M?n_gr5EQ0rclR2F;$Ywj2ifN44T-J26pw=5>SNbupufC+LliNY8l) zujqsbw>DlEiWn}II)PkD7^2T7a$9DL&mZ3mb;JRi;@?JCU@)K$WGS+Ix%^r5L5#-# zlQIJLvvPSpPTUdht`b~;D~vu6Z#*kfK|BvV3Ua#IM~r+{d`std*UhW++YtGX$U}C4 zr7>hhfLY!yHh{2;v?TZiv5y}W5?Yrsh|#;LPWTKmQ^k5o^vz!H!~{0N5&LNZbRJ_y znXc|kw7nQ~wTqA3+TC062_(#!(BB=8PfP+4C%=w9f^Up*7BjJT z@r1tBk)1HIF5t}6F=vL`qm~fkDEv}=uv_dd>Vk7rXiCAq#ob#kTf6DhtFw;+?ZfVd z6{lubZ%LD9Ds1MQVwYN`$sI4)o9ip88^?!(lPil-R3AQm4*iszmTWUajc<6anLRoG z%#(Xp{AIZA4#A1B^Yn(*F191h)`8~sB&cSnC9hk3LZI& zqOavO6z0lO$FrJ-c?;rl>D9RHw&3+dh#-3~B7z6iJ*VsJpy;#9OtlgLtq{fI!4YgC z7OW67>*G*e1QX6cm5|uCtPk-}r(IZ3wt3pFy1{@Ql$0t-5)2xtw0HoYQC&JkDc7{D z`{uzJGamc~;nS+&KOV(o9a!F2wdxJ@&B5P1jHYaxzv>NG+$iJaj$DsFl)tBC-dO2` z{$^HXGHw%0HF7~(6ZRJhXm~6Wd|LPBiEoBB^Rq}M=mPrYja8Gkfc;PW{vgho`ap?c zbcwh+1}Y==;8wsZmY~D$(BWT~sZv5%--X9PeYembQT1iWPhu~vFDrF~Z?v_f?)&1~Zt~AuK4VJ%EL{cu zr)#P!iR(rS|Dg5rF=GL6L8q^VvPoFuo*cVPQbXJjDY;W^(sH_@2*jIMR(bOX!%HYP+yLlS6Qr95T|^ zJr2K*rK&FmJgc>~qVI#C2F*l=@&B2iCWyXoZ3PVI4_1Tzh?##`!k}<#q_wk^B`44t z#nr;oRk!bHCN|eN34P`Wea1Wu{Zy5r>*-9NKJI-J*PA1Jf5)#cX|?8#HnUcH>DL{Y zFZ+QyJi<9+TL1j!&d7#m_%}3JS(-QaXEv~r&Cj>DQvXKaB7s5b>61x(cdjUnxbgd8 z!uy$jS(eX5znHVY?oh$Yq*&3!i}+s6ZI}+NpuS2{DK?CbP7pDd z*F;ESw#XpyvF>q^xmpIqNH{tR1%*{(Jw4gySIeIM*tp?RP zr&3#gQn4NL~Q_T!zI)Mb}K?-nTI^P!z0wcg= zFdwW0Pk^)FGWZ%qp%Q;Sf+*&ucw%OrNV|!*Vvk!Aq+tqzA`#ON1%!YZ_%ehT2#qJU zomt|>OD!P;Z2*`t?`#%x0}i;LK?L|orm{IO||?1f@Bj!bnSK*T?ulAt&C z9A5PqZLEa=5xE75Mdal?nFNj~=nJvLy2~PpRDob3+Nik1B#|!!Z1fIA3UwNVfcQ=m zLAS#Nv;=^W97)Z{B1!Z#h?hwj9{Zow}xi}7wA|2%$)Q*`y=l29+uIK4!`1>h`!%pe{UeiMBy1=jPZrA~=Q z%?cTk3>*;S$a>$*1_%J3TMaDY*P(j5>{-i0)7!y zj(ADLS@8i8KGi6e5_}?c>y!NuG^F4aDQ0t-YHUXSkgbJT1?@{zW5l2r zz7DdTDH#EGNh;qmyuPKSZTjEVq%68+#R&ML)F6Nfkw9UiIXWWxTg%v@G0y|Y8>EtC zb&4QUq^8+amQ<%zZ&V2WMukkK83r@lsl3XoW}!S=uF+VkL1=NR-6Yixv6Qnc`i{;7yud*S*m6sa9?u)8i~0^qQtK2sGQer`RD7yC z0}fZqq{>FWTmVMB)tPEhJFF=RxinQ}L4TJu*tnEbqkWh&S=HaB;@MK4W{6FlqcEAZ zwyQ7M8e|SbYD!jGwJO=^()fa$>^XHGLuS6$n#{g0)v>Hfmz4*SP}|q{-~aXffw^;l zAWvJLF5`Igqm<>~yO5Je6aYs+xW5@&&|TW>GL4>P<@|t`S=T0Dx&IU}9d@v+u1aGq z^`-NiAcqo}pp_b+CBZ;Jo>Holm8XFbtghOVeN!Xv+z{}MQCYa( zyfW>?REY(q%anO?1AweyG&I7Q=+U}*skC4C;zak+p#397x%ti4RC1GwKWq z76M&arA+EosnRlWn?yIMwS!hDl>T`Ee?5eKKdLNUTv4)ZDkp=OvKuT4m11Q7jPoYb z-Xf=&WlgDlBcLEq<#vFfb-42+8TA~`Nne`WXGdV3U#VC*P^&J&Wv{3FLVp?HU!+`l zAL{SAhlT>M;WqUZ+c->-BtnSy;!~zq;D2h`Hg)Q@=+dd%nwqvn$Cu69dh2h_0}m*> zy#4ogPR(a?2F+hH^x2tdQzkVHbSsA+LZ=@@AAR)VhNacjj)GkB&{X>9RKBS1xLRM9 zMa|1C_JY#EBWBL;cVxV8*_2r$>ihcAwJg-yN_<25j0%p3>l?)UR;5$q%vxqP@pi)W z^yEWO4|~8E8;UU-f_Zj4$NMS#vBn~*vw{H3rz18b&zr6u&a&(v$k$1Ie!?k{Axo!!O6)e$}JN;~JFQaVq zy(mhXv~lAkF|_Bxh0fa{MGmA;wsD&>nTWe?p*$T~hxv5QUQOYroRq1zT2--Gh+K^b zcpau!U!jWd0=18?^-r$4(poina+MISn(VLT7{bR!TR}t==68yA@5fNYUwe!sV`<`J zwM?%vrF4}kCX47*1XD7&uBe!$=NU+Cgc3{9tBANb3~a6S_bNiPsb?91{r{poEMC_B z|5P4`xzYc#^1!b0Sn#N2{wF1o{&FeUf9w53j>K~}i`dJ6`qD7OT}o1qAMTiIbPKnD zy2se?y4;v_I=N7B2AwllmCCFvr7}eizO#9& zEkGOQBWa-=v7I;- z8zD|aqqqlO!|937T=6N60dYUF?L^>@BSfDFBot+64~jt2i^u~p+#FmnT&MId`H(N> z<6&&iTJ@}(&Ka*ENUWvPhM~Q0lLJ|fiEN$2kEr}$8?hwG9RmvX2_nL5`tXLu9K9AzqSxNYt_G3mdGpOZd7Z_onD{S_edFo6Ak4X~& zhOoQ*1QWZ2t`&(pC^xlc4pQ?qzv!8o`0La;t~YlQ?n$>uzc(?=dj}>QdU_Id4KnZ%Qyrxf!Mhk#rafu+E_S`h7;A>H8Ae3a)H!W+b z&ysMr2L|x0w7)l4#R3Ft*gy~LA-=1f2;PB}@iHOO1Js!R$i$V@1sLiX%u8Kc+Brat zxv7<^p2M{b!Rsui#?Rff2~OKIcP^N41pRo=%J+{*;!>S!gBO)ji5L?%~t zP*Ts~=>U(N_`PGt;*m`xSuC0x+MReZ2pu~XzY~eY#r&a43GF6&tbV3~8OyRYE}-@T9sj3sNqu zoz8BsDXUVAOmqhOi)q@LX(sR&x^-AtRZvh>!0noJ``%4^Z=W=9$&6-BU#I7qXDk`m z!Q3d83lr}I(J&jqS+@VZ8=8n$;Fr=+*`PsXG@vaY*>_H@Sytt6R4uDf?0EaB=LCmC zcp+#=$y5>cj%G-wSS~{?k8Mt)UP=m!{AXi-cijSZUv}o>JvUJ!y{`YHA6{=|Ozu~W^*QKYgJN?%UJ!QhA?0x>Tva`6i zJMlR9cZxom9W%Nt@bv7jWIvF3r!R9fI;oAIuw$xNxzx>*8ozoS(Wc!p7?_e%c>yJz->|fXHiTTb7RkSv9lTrtbt(Hkbx<@AEX_ zZ(PI>FfP(8PSFk|8N>k?0c{!FEdH2U;qTFXUN@dahcMHKpI@G=uS79R&>^aeccD!4F;yjj zm#~EY6d{brW(@5z0#EUINmK~1t~ew$Z;IiL1j*JUOYe$y{zA;ZLj~|rvq&Q7;klyI z$15$N8Xk4bJ#b*|;=Caf4$SrD!)15?ADBM|Ju>l*!^drzRbHzRG!#{WFbSbgQuVo7 zZDp}h51MS5Uq@FYnfYvC{(4|;bVlQL(`XBPZO{;P(BZ9;AClJ>Ut@4!lS*nexy;33 z*)esH)m@R+`m?Ik=fbsfYv;aNnLDeKF^pCW$b)zLYu7r8&}DCEp!ed%fqBvq{+z+O zon3v8t_L$IHXiOtpv%c!1#opSE94`1#4ym6;I2hkE`l#hfDKKK7;=)&K{YC3s{%5t zNx!x51erM|{90GBFcbD&(Nd2h^)2Z0=qL3p53L0Ez^d2u=#P&FBktJ~!ju+u{_UP~=m_zO za{7*zdi%=9*k(x4MO+ zDsRdwRDdPo;St`hAG3_oEL=TATQ{-cLU)C1_qzLJ6>v&)$mnXs7ndEFlU$ThXb#G67FJDEZyq;tgK_pq z5ti|)nTDJANOhrF9o+>!cNbO{DD*0H8U4il@hfXhN&j55*_v$!yKT!- z!6!2&Csb<7gQCxqxZvy-Gx^pKCs5!5}LD5p|ELl1;{v)Cfz066y!ALV+y#ac1nEDm$a>qB9Tm|h+H?Ob`_!{Zl^zCE)WBFL$ zdosA5_!(l}n8=UF@9xa5Dj6aYzzb$4KQXDazEqqhh6M10F(fc=zga$gNI}WsK`CjI zH>6I~HdjT9MPj&r&Y(UA{%i+!^2g&j0Wm1@Mxd^Q62cS{Xla`Ees*V*BEkL`%BSca-=T0Yd&OOi`vqKYq3H#zM>gjbVvw?af zNvxt@$Hr8c(t(JzN&tP$LWV>`!3b#wv}CB+7=ooZeU!NIRBJF1{rF&f3K6?Ch_yIN z(O*2`+B!fNR~kT;U%a$$!A{F))Aq*bjJXH?syi^Zeq*W*6RQ-{faT9Qg6biIg2nZi zK2<$tcA2bF)h2nB7e^nHg**C5uguD=d=*os+VDAbRhGY&OU)ag7;V_88=T`GAc z_6{g1BQsy-HuRRiwhIqN_%+8c$&`mQ-B@#{*vuQu0*&=32)BD(?)pE7oAn&YHDdajOtV3fB25>U^gioADxY8jKml#6x<9?^|Mz!IyAhjsRZyb+bj1T*ZlQNko_l8{Xk zPT$ut>gIc^2A7(!zjv^x?SJ#BQ2BphTs<`9WH7&2TO|6a1|nx@wt5}b6fS*^&I=(P%t(->21 zE<@e4rXj8YTCGB(mHJg0R-5N<$lv$dmsurFD$ked{zcNgue|KJzA>ZsUB7_@3Yzu$ z1{DWYET>d!l){Xmb<ZoNu_50RVuFN2F(skH~5BR9EGp7 z39Y=H>Xa}t&LVhZASh!!L5mCs_&;nTgf7|yk3HBl7}-JFS@bD929HIX@HJ>d_Ormz zgd(tw2s+6Pnv6uJlSHv(&eexwS#iXZ)N zoZT6m9e%J8T)jc3B=YKyWDK8)%V}UzW1c7nFe7mfjr8;i5Z_tlW9nrA>S&kxN};I; z)z6HDe4?7Y8c-lMKp?t`ZO~K_f^kh=gF{W#(}_fosC3}vIfXBVeyTR(pbo;}_MqDn z40_x_ZbNWbFgUE!v-sFz{Ku_dTt9rt;$xiyjxSwy{JyV_a~qB?TY4N{bbgBd`^+ux zu37W$Eoa!12)%>OqUG-%oG^C(1vmozh&B+H3Scb<*5!p{3lE_yhc|y+U(lc!ZLj}k z^I>%5&_Y=#4=mUZ?*6l(uyqIA(f^o1#CBR-gn-O4$@28h>g!4gw`$1Bj7a(R$w9eG(%56Q-1T1pg) zY=G^HwxOSa9IOIzbl{nd8=u(-@>HBEE8ny9Tn$jzY|8X8>HW{4zo(DE!E~S){N@r* zeilw5&nyf(cw^Pzma+-=yWEa&VJ2J-M+zT{-9UTsUj5fhjI6QbIx@tu1w zkO*p+;Vz&dqIqN?T0%xl_wbC0FYz%@QUD3>3bk&#L~FKRCqlkw(xyq1HUXbJvroF* zy=KFTl$7*7nR0Vh|B-k2ZZ9&MW#$U=nI%K&Z#Je zcm~&7FZy>Q3mvKnjmbgG!FLddTsx*3U96}it>5@*J&w+PwQXV;o-J^KeXapT zc>Vt(deP}E8juP0JNU?ie$lIsqt>ssZv6^`ABRGCV#j3%0a`2?;6QJHfMY2o|FrZ#TBn<1FcC2qgNq=ptVVY}zxMU+{Yp4+u!7v zZ(mrMR6PZRFYPsimN+h{z7)W->Op<1;4J{QhoV0^X2Yk8qSrP90M4?;H;R{z;oZ_= zm|E`a)46L#1vs4J0blqBz+zAUz21R;t$uHRum}p75&()|s2B}&M3IiY>Ml|POjYu@ zogLxY1Uzjylf*2+T7{Z7SEe4l?mfK7dJbKFZ{520Ko%GXvflgj1``b2 zXmyj~I7Y$&(gkZaOpruh5EkCNaYEnMABK93N}kbj#NHogS*@7^T{cdYmc`b7wn@V( z$!iDqzwih!Yn2j%QrU9IhSTv?ss*JoRk-$(4N6F=pc?!q`to&&1%m7U86O2=bE}!j zAm})N?5?@o_;Up^Wx&h@SvQ_Zv@WwAVv6Ac0qDsj_#~LHu($m1`>$6;t;f($KJ;w_ zER22(Mhph#Ltnj%?te}4+j4fsg*(1NKY{&?ikYai{q*Vf(-H=*-txUi_P`$S;60C^ z`O!Id>`Oxxj;mnZM?eugfX<+gqa!z~;i8S8a)snHd5DZFNctE5I^9vQGafgzf*>0r zVu~OcLoC(#go4E*u@OTcg0-RM@I2_T0b&;9B>@XAJI5HzPz^YCEBX=*m|w0Rc-L%& zVu>o}yJdlmLUOHdv{a)=<}Kq(HQV(jUwyW3a*eB^Ooo?F=4@-}*Q|H?)%3Jd_blhB{ktZu{-nE$)JQq1@PeuPu76v|)h zpF6ZPMUeSCkSouGf?g$Mr;Jck37vl^P5l`9?H5}}-*}3B5EOy?4sB~*aqEghuf2L`<<^z+w%*C7F5I(j zQv1%Fo$Zs>?O8Z~6_D=x9#o%xiu5F~vhzwSI=QxTR4JJD#UH`6vXT96L8oHt6D|I3 zKQOtBpQ&U9QhzrNan*|17E)?lNTP2M)Vn0Cp24dV0%S&DaLgcAm#>@n8ZbWdw@UCVNVaL1YfprmM;F%495{E> z{5?0lIly=I)v05a-nsf|?=)})Ugj^~vFi_TY-!=1S0;_R=cmmhmjPkvvAz$1=AVb7 z@9=~(1uVA)r&TR`_$l!C$Y}!$9$K`uW6hXJBL{!78_IO>_~BN0rNc+baW0 zGrejyNpIkw&sH`C{ZLq4&3z3@@Tu^LceN-N8gqsQZ?3cFRAe|!a=meM-~6FvKBo@6 zTg^wpqf1w8o_A!*ID_o_2`8JY3;87SVEfmF)$f4mGxLWGEK*vlQmS7%e*D}pcXn8% zR9Fg%>@yzg@?FE~vIQ+5bi%AzlZxb)^8j`eD>@ymPYxP)c{#ZvE0=cu+!)4+k5ft zJ>`K^jTW!=T*~HMg9kOw8x&r+sp*L=H9L2_c5a712}s zoEcu?K9@Q#ws5Y1i=fS54h?s9%iMAfkiZEOyeHr}#o$Mj-T z##o7|Z%JQ0`XF!o+S9XU+&i^jauomVt6TP-)_A2bUx77~SW@()67p+r!EhtjKxa}@Rbz(Y5 zw6x|W*o4N>mAh?oyF#uQrlmiIamn|(7IjR2!CF0LtVLZ}#~f&5LP&_Ec)FJ8fGHu& zMcN}Qa~&Xys13o?m2~T{G!gRK6g!Hx=%Q9(LbzQ|Ob=nWcTP0eqkS~g+kua2v6&L* zgkm$%x%<~xp#P#laa(bCQizJGBg8ipUKJ8aba&O+ME_Kg8@3vb0mtHL^wD=XruDiy zi{W86Zm7DReZqq|7uqLW-4JJPN|n2O55?@zEoS5YSv!m+R^~6fAljI}_@Zca9>0F! z1zD&4KWmyhZ=7A%HER3cwU-gEqq3M%f)y(hL6c&w6tmXw%(MkWJxu|aTdG}~zTf6y49i|0*?(GftW=J+W=Issa(ZkVLA#E)+4RjMm5 zVcgcv&EOHW+ls_fhZv8KqFj+9`73d2Q~UK`mz>-jM?Y}Ut&%R8Q2;VkA!_$ou^T)H z^3c1e5xol;Qk^{)^r`xXK&vLYn7jnuq2a>feUJwptiv}i>>=q^K7`-x!r%ErI!C#v z9u5^jb&FfNKNdl1iWjS!n#O<|2pegVye*gSOwDSi_NFi_TBR~sshuwX(L|M{IBD&z zS*bf|N{HK*`vd;!J5vcDBt-&qTf?axA5lGjE88jpgyG~QO>3(tZnZ*LFS-xCe^UQQshkCBg~rS~)GljbVSmr~=pBy&&&iWax4*Qma(gMFYcKnt z_?hgT;Ng-^@Z2yzPWbZ7fYuF+T@@m7YQH<+Caxv;AoWc}oWt0_4QuudYDP!izGK7K zlqBz6H|LfOsCWxZfBS7Pf>d~5?W?H0s2{IM;#eNYp%My(rtBn};>eTTq7L}v_4STy z|Mu3FH-{8AO&C!*-z|}D{}$-KMcW_6jUj!kzgmjv45#HZm@Sn0Ev4SUS>u4@z=rQm z&767aJNg}E9K-(u_dp3FXH+l~)2J}qKcoF^&=?@RMaljKjjV`k*qo+X@ca((T zaP&TjrEQyhUZ-N0Fsprj-N95=w^j}}zJ}s|t z@M!&lp-B&V?;bs6nI+F0?B|<3Q>t2B7G4ELcChW=qN!*E5RQQ=AgP;Xx-;uGscijr z^x2rJzxvha?N)HBLdx{O!C}c>2DJcS4G!FaB}_ZRRebz$bj!ydg9#`8dV(I}Xq(3?-5^m_j)8&@J1o40GCBNs)k(B=d_iXh z(G3Ve;HP?eew_m^ulTJ%iF8vez?$ zco-#mhIBK=9@~J4!Lz#zAz?s%cAQV?#qwmh8@o<>*iJC5@;_VN=NEIaygba=AQRky|X26<;AQ z8@q<~=K)R}aB2*Z%3v z{bPRr>hsrLSaiI>Ztd?wTZ2PjpawMk_D3*kTHlS6hpru3YSjS158rTSysuK-dJ%~} zg<)_vi?I`=GZG_`E=I{GV8d-Mr~{44ZBH<`Th9;emJOJ~tPo{o+Jvd`A< zxG$E;fxR2=xcDP|`g@uYZAUw~avWy)cO>Uafc|RBq*L8jZ`^4KW!v8?`dT+sPN4=GIxwYvE z^TbkxYPsMuzQ(+4{Os>KhoIS~>+)A@5}|bPF-_c=z=YIP9I(M2&)~C3C!S$M+oZ*R zkcpq8k(OgEQ4-zt5QL@FJcW}2t7<9u{luZtUR*TN5_ZfPse$@P))d9KWmJyY8h z&s?u=GNuIFb)Ia0Sxv^M`3K%TFn?4=O_@L2Q|At(7|RCXuQI4in`sYay5^Nf^hQNb zy#WD_atGyCsA3GGB{o7n8tSF+vUYfBG+GMa(;Lz7Uq?5o9+xP`He1Ma;1Rd~sdikqXAjYjoDEn+ z7xCmVt;bEpSDD(bC?b-g9D-y)wO`N**-1)edaB&A`kkA%d>)uzZ_W!_YUhy8!I_6I zI{5nS9e;l4hjaTwAoQERfC-jm2ivDwvXcx}rGC&Ly|ScIKNT=rEZG)=Ri&RlU$3%S zLwfL3pDCvNf}~VdUS=CK_~y4)@3|>;m?fNNuHFCc{zb!XKlj&%4t`;N<_q+jKP5kZ z(__0FDqW?u8Ng<1C{tyyM1a}C*Zkbe5m|>7Z)wp%*#*JUM?u_QK6+^WqRE8w9f&toeEF;`|Ji5FEec*2%+mZJb(G(lB?9&s&q5 zCYS5ofw2Lt0f5jjSCTtW*e5NyED#P34Al4%?es+Z_Um>QT)nOnopi%iz4{tml>&SO zJ+C6Y{c$%zI+D8uMzJus*30WQmw-)Up%NWpZQo@r&)7pi>&1(Epf$S^{i!9&A!66C zpr_3{I0~}b_v~p$m+=vNPs-5RT_}3sdl$Up(LL>5PYvr)^n`E^-j;YhysjmCxHk_c z<^WoMsjaSSAGTNf{L|J6CfaiTtJYZ9U7!C!6ZF=daxoPQ<1$c#X9~RzFmq3}yhSDX zu5+=O2#!Q=d9;nhaKLVseC%WmhP11ZG=qV4N+ylDI%*7?nG6`Zpdtq*ITLMkm$)&F z#zz9x6+y41noTBiDkx(IbzWtKBuAoGPRFmVF`{1zLZRZ}dp`RtW`{>kCW>Cvhp8cU zcrk7&t`8jZj)CVc59-7mq&l6k&p>r+iOy_p z+yeli&$N`9rP9IP4#qoJx>Q51!Az?Y+F^DHIl7X;G2#@X#0?^`bCVr9OS17jrS(hz5bX^GZp$6!(7z?w6m^ z_1SRZJZnD&MbKFU zR>taBqDKhu_@~yGc#u*APPS&>{{8zlf{W+^C`N_XCV?<&oy1&&zY8yV`0USTA6^uW z2f!cq?PquF-`6=6Tm;4V|HbGL=Gr852A#nVfEGMfUweH`QPG;$K^Y#eWnx$yn_1Tw z_HtLb7+27v3wjJhia?Yq@d=K41pl*x8PPA%ALfH)Xvchz4O14MIt3PWaY@sNuNdMI#*hs_5g|{3VnAF%$UqSZTbkLV&b#$$VJ5f$ z_o1hvKfH>HUzHZ~g);@UzVmK2iC#+CP^S#8Q01CHNvBLQA$m8QVTo==Z<%sc(c9R6 z;44dlEUpcI39=(oM0}_Eoq*bydk7j9MW5u2WH~RYR%VEbm7+@!GFjlc^w=?WK=byk zSDQfNm3`|`7R5e@Odp4$&#b;sZm2VqUs(MNijJH912_V{0!My;t!>eFCuTx0rM9Vl zDgd{%wLX7h*198~%xMIman2`4*3CNc{M+JW5XW|i%T~m7mVwE_{D5c^ZgTn!)JvJ8 z`$x9{fJdN4EwL#MugrM-*Gs1lvYnls?2qUq7)?}mqfM+wDYc_5@4SPy*riIPl)Eg& zOSWgxT)6#XeE57!s3R*hW=x2?92x@`MU zd?1PL*3$$eagMH9z2ZB0{=I+HQ0EyN(K5i zqd%FqH=o-79K873hBuZObXi(kdhX0klSk>Kqi%b6!*Y9-gw4n_mE)1Ww(o``cYX9K zDBd=><@AGJKK#d(qefZKvmgy7siA!glc4ujKzFyO7kb7E1kUbqtLZ+o8e;lNl@l-p z4f=?xxvw}FBCz<-LwNkyh~#>$MVNn~oX^it=37w*`Wkgu^OY&qmlwbkYpP6cPL`?j zw9sD{|BNn4k%U5$l#+ajS9$c4af3|Bg>o+2xP8^C?Z#|QUYKkeH13n5 zO0VQN6}2wz^(GRUzxo3DqSp&i;f++(aIde%^!xc(8xO`YW@;)!S3d>{dGCp7cjETM z-Cp7aR9}~%H{!|71x1BwBPb5iRRys$5muY*t{~dN1x#PF*d2wIIo@Lwno`*jVEQr3J zQwrGrdEgQ0;&qqrzIEo7-4`a_wj>4Qjs2C4uWC%YWD)e}OH)Dr;;)V1p=Odz`%4wu zm+fia_rkvIjSF_4zs?WvFzP3+mmgq)A|R-txDigHLu`=ZUQm}tRMW*PDxg5S8ftCO z9)g(VOyqCbmY5r3;2AO7W$q`SZq>lzP&9GOa>7U(N}u|G56c?@{M> zCuhw%`5oZs8SL)O6xYXd)Pv89>&tB>y)jio_xP%veKMU|RdQx}PM;KGrBc!$Smmw% z1^VOc60=25_hO}Sdw8y~{5ZNk3}LRNiP+G_r8&3-+{Ew>kF9iIV5uGlT@9xY%^y1E z@FI~lh7+xD?%{C~tRL!ZkEnY9Gf^AzgGVD1|6glY0v|<{=Id2;RrOhY zRCo1}zS389=jcw-S2}0sAO>@xW_Ta8}V>cUg4> zbrya*6iq{AO6V)hSS&tD z74g;t6@bFm5ZhdYLS>|u3-1wff>6oc$<(DYnRH#&Tju4=;AJ(96LQVn!fqjXsK7?q zteUDkJw6redHi#WkJSL2P#Y~;9O|RDc!Jq)Ni_j9PhNkbJUQLnl*g&vtWE)D2)`(m zlQ^jgDW3ypfegnLaxpg=ft^-hGCSn7DyTh|VlCJ_Y%P*-1R2Z42LW~jc|x=a0umG( z(g3cI5s>Bx+KWUY@hlLA_(Z~Sx5%3Vu+N%qrfs{=L0AOt8fx=LYLyx}-+iQMkw+^?zoa(k@kFvhoqTYn4Z(0?&TVXn$|-K_q?;{Ju1yga!h z({o2<<~#)CWc0uY@yV4t1lL!+Bst*L8`wM@g&} z%3_4IH3Q1yrC2|t{JXIGum`arF%Dncaq;C!JXc=b{L|T(xy`6c6gHAAz7?B@EyPx1o1rR@8@0qRiYB1JaCDU| zAXP$yTtib&j06(b8%29>cxajbRwDeGX8Jh;MyQB(MIj1`k z@&;<^LqjLgs?4I)tVtz&I5sOOA*`VPDF+(ysd$O#34&5UqH^oeqxT`zj$;qp1Rn(d zfsN}$Rqy;xScOl|`REdtF?lxUgE1d_QPk&i5%r?Bn?M=5B4XrC4tNnsA4Uudr^_UF zSu~<$qSro@cLCln!2luzO*UajCY&g2iB9D3^5B`6P2Vpj?jtD4(;cmXCx?G4@m$go zYeW}>q-W%VXs)>u=gcHx$})MSRbS(exA>Hv5`T@}ir+ANR+;-mn5=L0)-*>;2o2FQ z7}V$a3?`Gom!}U7_E0*z@cGw_HmKjDVz~dn zeKunMNDrI0*kP6W$mG7{mAwpq=TU&M121|Op2p)Iz9n9sFL&{t`0cq87h8eBYty^* zU~ZSMMXylkTYOz}aXfD&?FDIbsiq&Ob^`reD_zrWs~j^?51$SHPi3*P%+Rt%ID~o# z-|Q5=p38Y%QV&q#8|mTunR}0lM`p1`sKfT4{czE7D&QV*p@Pb(h+84n#F+?9yWBjb z#Lxg~o)Tz}1ZwfaF?k4!hY0Y<4Nm4p6GZs!QCO@yxNZTOLWtl+*b^Tg^!TFY9g7eR z51rHo94@afX3p%)zHuu1y4s_DO0A~S@a?San)=%^$21=NP>$TU=ExtMMo>MdBF&TJ ztXP;YnKUc4NLLZhl8*3@V>+x6hfc8y7sxeF&sFIb9t9~k%OHY<>EOiOWr$>HQ^%NUn8Wt~4| z!q%xKiX{ovioTK#K#+=qqXPG`c@1Sp%2Wiv=cK!z3o!XYidjv{+i>nw-C0V1|3A&x zx|_m1U9s5_OT=x3lauBgjT1cGix+L}%QqxOQ|1AJkI)P=`8BUdF6YPsPN1 zcF>~15oik>AQZu4kdRq<=@W4j39n}aLfwc62n`L9gv3@LxqFESn^Cvkh|^N)ASb}j z$TSW!&o5l8_l=3j>}sPD*QIqVenBgzxX!d|-$5;fN^?KCrOC4$OR6b09xhJAK8>0tHThZ%!>f^~OD{LU?Gl zu-8YVYBcn}KpFy2{;ef1V%69LsK;OkQ57vCAS)Q&IY&q+rwhtFQVb;C21vhnf)eYP z%cS5rWFXPz2u=(;xw}w4JBkA=S_IYt6d5n_X_}C>6cs=!*<784BZxXBl90%1-Fcr^ zmu?NJnyH98`)6T~f=?v^KqjO^DIBlj!E4!XLuC||@+-kf;n6?|MJ2ox0}g!xWWcO7 zzUF1Dd8XHnlfLtS02YX%0+hn{ zCX?UWV*K+4t;yqW*Z=E0xzhsFczK8~CuSJ72UE|4tAsi3LRq=HJm^o5?y3+U18FiH z@)lS1Dr^0|Vtl3_gf+LA$L9y$y~U3Q00l_kYPXtI_HFRIcrn-~{B`WOPb=+-n#eQN z1>4PjP@X>?YTa&O4>;`YWDORN&;!PM+x4t1Ak2D8OB!`2LRBCo@jxeyk+b2iH67Xm zP=)bJzy^>WDJTljTB{g`0!b4?y1f*>Et>DR2nS#TQk92N55aeNQRFTmf*G(zzuCv) zeldjuhA5uPaZ>oR`FS(wz-5!4NSS0ZCCyL<{2)*-(ch>xDA)AN1xj#io6(rL{2**n zvC1`Rp^>f#5q~?c&{U=fp`0(YfHf*+qioTMA`kASUnF9sK)?T&!r6xAUSWydIC+&l zXg_eP5lm3fzr<57_BeTkQD;|^$zOduCREk7b+=^}0_xt@wlz)aCOPhB^%oDxZnH{x30;SmHB&+(=J?}UaG zT69BhM-ux*j8p<$lG(Ox|MJY%Z5u9Zn>pD{*SGCEeG*JK;jT}Gel;}2IP$yJHWzD& zWOD5K?!IhS+wo==FL?7hug4Z%TG^X7&f>lvJpa+qqmK@KwC&riu9~#{uTMR5?%Xp| z+cdt}Er*1oa{=kT=c!-6kQw9IvlsvHROMyi)s~fO{cP|3)1(LRc8e(}`ks57E7h%B2!O7#bpivO7VDU|2L)2@-lFEqIQMi5>?c03!Ov zIaTZ`VIi~GLq*&pXLjzoAzmyqSJgdo>==k0JAf-)Wm8fnlk(Gmth1sA+!hUWjp?+E zTknwF(-^CWwwv@|?3Ka+eBD0Aswhj}^w?uJ-S9M9SY-M{c=!DeK-LneU3vcvvpC{z zpu4fJ^A&zq=-TGVW_CET2{*g=={{9`JUtMf?4&jo9j$#{gViCmw znp>`U6)rmbpaQ}6NuqP~cJF1b;aUgHM|i(c9aPEWq~3Suq{FRxQl?Y~ zl_oFzgihbdZN%kTojS^R(?!>W3Y!blUM8y1F>-t(09UVut>Z{-cbcWNoZ7*$RvkWr z?eMlwdBWSl&cL-6qsgJ>v=qC^L2_Y^EMOH*uM@uH#vsXoi&w9M0Za?W;d(d@XcQ6> zMwsNtBw`YZ3A)TV=rCOJYs$qsNy8)!n?&l!g94Y5P(;gez~)5fogbv~6bxgiH#ict zEwyU@9UbV+SmKkwXL-=hqm5m zU=(@jkI4aW_v(t9BU|V^pWR)=@^-C#!iIdcigGmNtIGWvlJtgxd3nK*mn60R3RQlS zgHoy8o5sVAys^-g=eN=KmaMASxaukznDPHg16OA^ATfy!!jKMBLA6K+>nFe6W}uX4 zam@%750MTw;c`Z&iE6xc5*^feH8G7=D+ikZHfl0JB4E1fkVkcn2x?>PK8<|^OdP=1 zC&hj77B5bV71xEL#ihmF-QAtyUVQQ5#l0-cvK05leG4tn0%a+-`1POM_uVCzyIdxD z^JbEnWahm|e)ID3e#)3pU2nOX+Eo?GtVu`}NJu%^n6+EtFyGZS6%xGtYZMzSycn0I`d(ki7 zRu}joD5aMQpwL`E*rS`{P1ftR zRcTC@`fwERcpd|-memlwK2q-J6$9-ypG#41u-aDaqt}hWk1^+H2_HTYg9|r7xYUnR z13Ct26`Urixq9gzCkAvGK)8zgBI!`3g`H;e1-0S4g9%@+d$Nb^vzt+J?x*jM73+gH zOZ4>WWx~*o^oCLyL!)4XdKB2N`B$zw`Co z$uJ!MqQ38m5S=4To93P79X=i1nb5au80&6hhCGwjKDJ&T6@d}3;7I@V8Mq@?ES4F@ zmXXjl><$^s-zTny?(tYkjEHc*kOLxyo|JVCG}{IN0EPN^szu)p!6qa_89hikFx2kJ z>(jhZvSfRYC#_*Jf#pfSX_T1)*)hewS#bQADGdo6LBfwloQg6^@={{rj%t}b1j!Hz zaemC^xvPvU|Mv(84qha*y)7+OW*$(J{)Jga5HX%xJYb95|FxgHI~@-ow+Q7Do8Gns zce;2@+q|mO5qs#1U}d+s?YBsi5wBU0IHeMp1BZ-P9jD+Jw%v@`N3VwdKwUqt=iqUp zwaN3|u=CDRNtQkP#lC?O91nlAV?_v(vT*aP;&g9J|{InT1#P=RzTUB)>xGI%V zV16t3Dq~U;mu*YSK&cetb)J$Wo>APORFl$Ot*+=$wU=gSqq5(nQz z?-R!|zlXBw9QUhBrX;Y9^qf~HGJAiqjeOqQJT{K2lfaTpoY&zuUn`$trf#I-^B#kL z{==WMPdg0t_#f$J=6nY0wa0$p0vV(2mOP&=lEUdub?6S{<htOIf;zd&YORK z2&xk}o3%T^I#%PMxXT;oT6W(#Gx~rRUiPK3l6!rg36y{HW4C&u9DSTAKSC<5sX ztwZXC1;S~vVWERQWk0)3>F$;y*Q zLknEDv9z_cw6r?5<;SB+Jm|iefKJb#q32arTv}c{Jv~v2QLnuPNs}rHtygjoVB0C3U|wE22JAHTeja){kim1M>DM(~Yi_ zKL+T#LKn7oOy4!mRMLR6W7g4d7y=IYOYZla`ewZ)ebDZRBSYEcH9T2 zK>Q^V1M+ndO8oVafoa_q5ZU~hv2}MXyzbTOeA&0aAp4E~M_aN;>V)Wl?50Qk%fD}y zY*S2B_nm7VSbqG-A@6Ku>g5|TQ=K_r&Zke>s9&E|3I7OrS+xE@yP*%0%r~12;^_F% zUTvH^=*#vq)vt3m>C#FdzzR_oGLno^Jdr3Mmz>r+s6i>EAv-bcYX=u_Jx$Q}M0a!+ zz&#xik~Ja5m&y4W+eeO%_9%1s8X2A14Bq$(zZR4h)J@vLN9Pswka9qNgzwE~;4v|& zSQ55O$uxeAvAnna+IlNAaeb=+BBx*7CG~DZiUQ~_hW0i(Gqk{+(hynEq_x30!}Qpk*P>7d*2-+t^LB**(WSQiExFho?Mn@m}v& z_27et9|?BDitalyaCp2{BDd^giGrR|vp^O)@!>>iw5dr0I!8*)b&!kxlUS|aXIXcu z;BGsR&Z^`(SL>exSpB`x_XZt0UoD}CsqsA;!W*el(FIyCVPqs&t8%Fa9`5l)ckw(%G)dRlok~Z7>NJeeDU-q?GAYH zV0f02{WQPbGzF>LVJU(DOxoU=-WClouJjHJz+FP;{`q%*Zir!ez>AU7(@9(=3Z~eu zPBTN?@zJ#PK2)hbzPFP;-u?V~ zyv(qEBB)ckOt+1rDfo---e=ux4;+X~X0!fR-J*PnC@8ylwX$Z@OTBtp?xpijphTZ= z&Lyo+Gz!r|bxfD0Vjc>nHew>0S%un@e({Toq_)b_*s9YHtfHaj9}l>`XGzj+0hF5+ zRhs)^OpPxxjL8luAK{UKQ^*{A*xG_!THto8G4X&RCR zCUjdBbL3yb;!57tQrDvUq&C7guf5= z;veh)8E?PQ0m&|g(Ccr_9P3ya|9EE>3ATbOeJnz6$rb=+w}b7Bfe>zaN!Pp?pcNIU4YQ^sa#Z?a|F*YTPNh zSeWcROwNh)F}an8i9M}kw9V)EY z!yaQFjgCk7eWgcu>1>)te;r}oXlb8QY-;h>Sj^oB`2bT-2>U^7vqt-+sa6OEC ziLRq5Ccu`v=ObQS(Sto(mKr+=eG)y}Id!SO5GzXM>U&F;8NzS`0*7y!p-Lm}mFkop+Alx&kwMLQ3`V4ltAiCiRjTcK)OjSKMsD{o@U#O~Qs4{#`8D645sk(osc#4M9<)-BjJvAtEt3cVhp!o58Qq7lnp zQ0TrE9MjmR=Zie;Tg2_cL4o7bV&<7K!{m{Gs#zxFizJ?uuS4I(r8Mm^!_s0S#QIYz zt{m@25zl2KY{o^?9@#C6#%|(&faD(26K?XwHH*2<@xn_5DxIV%zd!Fcw#PP}hDujz z+q2VI&skAH+ULDQ!e+%^3W_S)Gn}5c4rfI?qmzzEQz%eG8pek42jyz>&B(HsgyKmV zv1KdosLgv*pQ}}r{zMujS_s@_fLMlrw)(9c4f#0N8Ae0kW%%S*&H@Tw<5}J?wNxVH z*4u3&EWQ@fVu<{L#$jI~wYxoI7u1ex$K;n4?PYH%;dS=f%(eS|NBm>2hdRyI>Q_jA3*Tb_g3XyGGn56bl1Ci7L0zu0uA=fi0V>qPr|S? z8%f#OnuMR>{5A6@gzF_$?jrnatKLXSt@P&zuV<;eZK8SKBe3Y3qfLFs?ASM{_h}vu z%7=({-7EB@yG)Mf-Nd%52P8dvhCDhVB?9V#@~%VfrT2$J&znh0wyrAadHT3an&>(dK*6$Tc2@R}FB%g0si<6OV!mNNccs81>lCn}hPL3>mbbRFT+ybS34WoJ zl#GD!wIIQg0D8i>f~md(_k)r$p{1YuD%Ul?pf^_ zX6~E0z^wjK8m;exNay1r@Y&~9MxT-P5kW)#k2L73LJ*;F*|`*#`=o?|<$ncUgDTHx ztEVM#A_7}1w{2*7I_BTu9MqPn{-pBH7^QTr09LT8PMIVyMRP8bGHX`M%zFFz4YxbF z884Yx+a(=q*k||Tni3GLb3ftpj%PTy;m0ep#E0p-G0F0cuJUUB;}1;|O&h))^5M?z z)BRk}^TiADzVA0&y5yBSb`hPKm7d9`xJhd}wV8U`k*%EHugHjMa-AfbO4>?lndxUZ z`PWJMg-8CTT*Wp+f#F7l9TQwhss{{`FoF8eO*Or^_UR(RbK05N^ouxK_!HL=b5z^=U(y%ulZXC>UjDU(MekWzK+;TQJYH;bzk6`YJk#TkxDg@R(mv z@ce{daERf2%RGmbBRk;KZ2NOVU)9c%*;7Cc2)6k25TEXY@k*W4@^{o?e_hD?>ly}C zAR(sH*jp;^jCgd4a?B5Jhy+_+`&s%L=-Qy5L+of8rok0xgrsc0B&w~D?3^Ya95 zqKU#ZJOww=yJ2pglAF&0U}m18n;6%yFi#mNGyqH<`9=yo9cF_R3Y3t-D8ZYJb{O(O z^dhAKrNLNNHH*>IdOBO0jvSBgro`N0TY`8JR(J5MTlu6RUj9bXq)&n zG62?x*g`S{@__-{0LDlFEFLk0Bt>zC5=s-7Mry%o5DQ3Z6n7}GG{7Q~4@Qn;LkWap zLGUeNnukOYMMxf$NGJ}3U?=8u2!M!3vY`0yF~jj?VoHbj5P3*0l<+-vIDr=I6mgBj zL9yK9JrYJl4ZwB~r$_*btZl|iNjs{ zi@8xWc~hvODa>v&dS%xy5V##Fx~mZ=xElP@v9Tl)^7AU$MbG;iDC?g#S*p)}U zk&aH^wLuAmN=RdrCeFef_I!}ND5+3s2%1F#AME*_8nOx{1|hUaYla%^HXxT!G@(2Y zVvBSSsOWAHavDVy$^{|XNjrrG?DiqIPz<4b5Wr44BNVV3j~qgg-gAZ%%A}P-wRUTe z3n=P)?r>t6bPFioE;)+rULYK6Ajx8=c~2BsgyOju3C9^o-WfXG10du78HfK7Ga^Z5 zsC17HnTO)K7kgtMP8$D?pYr3o>C$P2X=RmrzpTZ$0Na0>eFCN!Uqf{(yCYT zMiV+E_`09TH0Fh-=Uy9YxH$gHD3F9}b_kxx^}*dcBu`{R;N~5oC-Qgj@D3UJw>WTF z-#7Gf@o+0&F?!i|a2;PEdii$UYJ9yqr6j`o1v=qFLy5Gs8uCL0iA2rnAZNIQu@Sk?h<al^~c9=iAP1gF~IQ+3rl_ZARw z*hy7LE^q=TCf6-EEOqcDN7y7_j@ljw^rrH4Pu@#0UKV3C;vgLRb=d}4Vk{Ez1BJ6A z)gv+(#8`?CmV75WVtg%Aeb;@a{^+h4(QRyI{<^o#ATr~pcG>jLRc&(P?Uu-0X%)Wn z?WF!8wRPShGd8JTf#p^ssDAC*Zt-KtcPmP8IoxZobtu#QEL>H^fQ}+7{Lo%BgubT1 z$4#(}BL6|?>3YF!lzP94x?uawUhuNmnEzDf)s*inHO~F!ANxjVN2BJeIW<|Avc|`k zoJtRh4YY(w_g`e(*S}f01`l8Q>6X z|4wbum_Xk^Qhen%W_e9}6GH%ZpP0Z_?y+8oQ9BobcWhAUR~Ibm2+LrJ1!~8%3=)wO zoOQR(=^4-Yi?0j7Y{LBmMnms()tsU3rmIIt6K*vhTNzvqqk;O9XBquYcXKEOZ$h zRi(M5O*L+)UNkar%8Ie@C#T|=?BEmV%j7HT^{x?lDhIj=5bZ67^s>+n z!-?0rQU@!QrqS5y=$f=u#vdtrbUqZO)8iX0ueL`(OEUPrmvZ; zSu4a)p>Bpco0)DQI#i%Wm#I1S_$cHa#lyF~p}e{G_x z%WkZ84xy(~FTLFPnYHMjzxSTmA;`y>`J}eOGYw$a9JRk$=-?JI)jv+1>0>^htI=Ud zbs}|uwcp$9P(jkoPU-rZVMKLW<&|6NSGEysjL`$c5tz|9>P_x*oy1Ysc!Hc|Q!Bce ziTAH6y_w%R#^+9R93D^~t8Tr@XSs4ula!EzZHLdy_VhRg}2h*bwb8A72kDc*srba5Y0t~p4vRq-Z=g~ z^)lLlyt8-UO!f5U<$R^!j3b{WpK14!1=G*T;83-(B0(JvRh}>V?j<%;OOqW7e}}ab zM7}kzHFWLwu|D$>NK97rjaZ%*ey7>qs0bvG?4_@vFjbJ)ut)qQ zVDgeDLQ&SZ-Ov4f2fXpOYbQzA?f9)x$&ZH_*E{co2|v)^%5iYx4Lq4}PxJFCD(Hfm zwCeIuwWI#0DnIXyjv~TkcE$L$33rB@s@1QF4L^AKyN52d@*Osp<9YUg0&t6lyhrA` z>^tdfKdYl+Gy0$9UARN^`EHQRM(3(l|07rEuMT?b^_`oDnjeM>*}ph(n%CSZepc&u z8fPnM@c0N5ZH&ui$p$An@p5ZO1G^wBgHwJ+-1j=uuZjmQ*vFFxS_3z)r*yhTcRJ+L zr+919y!)jVx}yC#%e5R4>W(2*s|p_)T;u888s0B(jgDWLnF zRw|*+A!%Mh!Q^#k$@?Lzsfc^IegX30eqnL&)RKQvw@_WLzp2lUO#TJGXi9*sySsCg z%gkgN@s{G2{!s3i-fsYo)kSrFj1NNSU_=4O{BV ziD*uO3ed6Jma8?E0ja5?C*`0X=6@;QKIlp5Vd+pR=#ebhh8$&Mt>lr@_A|{n?|S#E ze#ta60<*g;esj?PFMo6434S?ejK1|UEk{hh?F(7P|7ux{G|_J`t#Dx^v6-%ZHW%t| zm5TSal1uPvc>%xC>k0nT?N;-;|NaQx%q;1tBe2#a@rfoeTU2;1Jg=zXt3&=jRX0r% zB3U6!rixl&%=y}?kemc1Dy-`YoM;jqPAV)>JEzxh-Ksj3%Ky3{mi97nH*W*ha$6p@ zENy1I|0VROI4Hf|lg1{uQW*kHCru5xp{ zOVwHfVOdUD+*8#+16Uu~b`G*BHh>Mx_1z5bf14tdeGyFp&tbxqCs7Y>hT*zn4u1C0 zB9Z$_2G=tq@sq{-uBXD%i)y#I4b7?Y{stqQw#79K_RcEh3{>%zpQ zt2MO)?&U{q57wJ9ff_QGFc$>kl(=KR+g*VAf2sQ)pU?~Oo1D?mo*4+$ IH>08b4`|GD*#H0l literal 0 HcmV?d00001 diff --git a/docs/docs/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 b/docs/docs/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..7eb74fd127ee5eddf3b95fee6a20dc1684b0963b GIT binary patch literal 71896 zcmV(_K-9l?Pew8T0RR910T|c-4gdfE0#wKV0T_7z1ObTv00000000000000000000 z0000#Mn+Uk92y`7U;u^!5eN#1yHJMdO93_lBm5dc6WY?}?kwoQRxJ870r-=0+y%ha*vYuUCUJ?P7_3+uzWik9+_!7nxs;V)%a4RNH^ zc4m8B@+|{zEa^4NCck}}OyG(NDl>kjf{My9O=ulWG&(tIM-}fv z6A!D373NE?xA$4-m)kO95k0xyK*tYODl4ALJ?*1sxjWyV^(D%2EPtO@;-V@{l;!qur0sm1n1+kORV!d6824Ou#3nIYjy1X(qjdu#foYPG3KvYpHl^J$>L@W~;6gmmj7y}hY+ z*%10elngK%mf>)kmtk|3oM#F%vwyz-seUsri!-}CbFaX$3j#~BowRibi*&DU5|l^-9DojV1KmJ3&?*~yNK2{0#ZVN1ITpSs z)hb)%mHH+owyJyZ;=@2|SH_isxWXiDHvg^j1gB#B94B6P$PL*D(x<}Z8c<=-s-GKJNgzh3?2GDRN3z0T&pzuKy5 zEZSgX?$}|6u@yprg9vvZe-G1=dzY9MP9KfI`m zF9dV4DyyHdvHNuonakq%Z})dn-%>?ILFE+}GmvqYT!PvdS_xd~FC$J2OUk!l z%#~<%=S>TDVW41I*<5F4PW=Cb00Hpk(YL$<@W$Mu>H*$ccI?5)Ybyi#10WFyc^d*9 zT@NTbOSECo`VV?Eur>U~%9S8~$K91%FJ7^dkl=ePDPVU1KT4Jdkx*U?+GziVn*ZNm z5Ly&~RfHJE5TKH{G%~ix3^0v@=3$)LA+`D8|9u8QJP8m}&P_bPBfQPx@EC?6#+x9u z_1@$IZu4!I$0sO?FCpgIyQv4-cKPrfii?1^7rz$?-~k8_VYCtR5D9|~OhT-9L7|MZ z&De)b9BvT`c?5=3T5ZKWH2FWU$uXUn9o&g#QBPhznSb=-(SMJQ-jlvWk2wzDF+&Fj zixv%P5LUoIrnI-)X}9XCEb=T(;%1}UX}6kK6DwIl!(PUnZ zodpVo#2~T5(+Y{UT;*~#?fFdq>}+jWzVpj zD^#_xDk=o!(`H4DWN{OkJvuTv8G>h)GALN?mvB`^Dw6v;T-*|(!jWpiqsT=X5~if+ zT4dex{{WPu<$a27AAm8mrz`uHrR?V_Y-t%O9ovX_rx3$c&hVA6Bo#2 zibMgz3{CqOigan0Pz_xxP-+aq|pHZq*@VyYNgA0bOntBr=*fq$trp zf#s#7I(cL%p^{>X@XF{2lg&y7f}C4Q(;7v;kT#5viE9Wy&5+EwCzjj)kRrnuIJn~d z8SwB(@QWf7H*Au8PaAU+2!v2Hh)RT(Pwoc7+>>S!ny{Qf_$DcjfMiNw30-cw6_;oT zX!TY6tNIn@lSpj-W&ED<{KH5V1Bvl?jGsC z`Q`?Ajw5S8mx(Y~Ib>C?OKO{rN|o7DG{A!W zKxQzo9Pl%yi|_Dq0=LZg_SM&WL6iam@eQqQ_k1MjZ+}l6>AlS+Hyy7(u#cGxs;~Xc zJcK^~TJqb>FOVsX?3mj#XLSbATwbev44iR1j7dJ=qq>QRaJ&shK$roRrpOwmVOFnY zk<*Uh(7UD^95cl936EzFwE$se_i4K1OLLI3yD1-LN?r46eN&0ddyx{SOU(6ewwp-y z=bgwyta}0?KhM+53EWKrej{?$(j>QR0C<15+oE^SCNT(@peREXs>Rn&ef#7Ke3=oA z_V!J?3^qY9^Dt-|LjYLq@~~|4&@Kf}tBxjR+bnrrG#1y_4jcr84UAJ#f}xkqIKI6#y3LRuRw7X9+t-{VpMl=_71_HYDN^Hev z?aq{SHIAAMAK#cAZ@TV4Y&A1-Po%t8GI;;ctaZLWtj-=ynw;sG4qs?4H(YmT*6N~l zH@miZdmd1TpS5_9)aPnNHa@sq{MO$URk71S0B1)Mjjh?ASS}d$zvPlj-z?|pt%Lm2 zzKS4|W17$mRVh*>SV0&JlpMg+R2#D}vOOhYGjpZZZIkO}V!Gg&iY5%kZpc|zna*gP zgL5{;u;|*d>#OP*xi++MzI-X5GNr*Q>*NnR6PnLAGAd>V^I52JGd=sosl8eXxHT<4IFVcG1Jv9|5oy6{Yrq88XTyGE4pP*}UJPOtX zdw({brBa!E7I2Jbj;;<5E9Y0+C!V>!*^!3nZsTxfR>0XAR# zvlqsjOG9K#ST$fs`QcYK*tM-S-&eu}E0+Y{l_F)N*OU@VG@G?yO{q>vXdrgGPAQDT z1p`ir8s`vmTh}V{W#Cc2+SHBhQO&7nr5VO}L2-jdJW z!tr90Qc~v%E((!#Yy5{nWaqT?G-%Ya>CM2{ts^~}Yr#1*_;OX>9e5VMoG^7yp5 z(Xy!snhKviAS%84VECkXgF9W}aIB?NERQbwm%<*G5pGX$6?aTDuwawnI7ARFdC}ak zwed&n=_i^jF)t<$tNyi)9$PBJQTc69k&a8Dl`jIiKW#tY50ZMs|;h8LrF#Bo~_5egI$UBiPF#4>~$OIauLay&K@ zX^#xuRO#VpcrY1`4~4XZi+w@)h6iXa$suYibVB&I&r|796R_bv)76ptIS^aJ!Hre- z&kJ;ihj52R-@c$m@av0uDnBbKX=J;vziLB13U}cY>hI`p*5V2JM>k;D>m>Ud*xWKL zy!2PNqc_$vf|DAxVNpw}N}ne(+{xIG{Qio1NuhECG{Rn#YK45b9q}Yb4TWy-qNft> z=p~-^>r024RwC()MD7NG8{Xh5I9|sk5W(lqU0TH{h%Vlm`_OrJMaM>6qFnTrT<2@1 zShLW`*nRdGLad2(GqOcS-t4k0XmI0X2&7uhBgt8^#|KAJq^rMq(HA|DHj?eHH~p9< zsJ##xGHjB7*|w{k2FWBNRM2XtC@i2wpP5^&fSm7JZD$Z_S=P)yg;*Mz%c%JDnrq@Y zXhu>|xV}M`lyN#JyxD@eqseVU_b-SPSmoSmNK*OU|sZ0d(*s%Kb3MY;B+8{X~j1ICPM?FR_k_x$rs zikcbS^{mX+pp4uXN!aM+aB$&E7j;}o+bpAe=_-JfaOWYObIP;0oQb%4wZhZZ?A&8s z3(o~>k-Ph3m#=W)6jKPlVe3Mx}X#Ch5)4y95VuCAzuMi;`fhkJLI})p)z-c9*Zwk*{R! zoFhPXr1LjY60$HcnO7gNx5%q%-p$n9z%uzDO+?1BJ6cS!N}@$ zJGcJ2rsBMV1>n2YOjmmk5Sq0~MD?sdm~X=x<7Q$sHjn7=x@C4U0nRrs1bUysU|FcR zbgqNN0=2AlH*qiIweEX0wP;_5sLalehDK&)%FzEI6qSgmk4e6N8C&jGXzMeg_S%~J zRJ@?BZ_x{Zs94*~@=9QSz(Cmj8=iUFvX)AQkL7oS)k5Zkb^CUp00S&&L2%lS8t`jH zXee`KcDjwn-I}<7xc%fMfgCCiV$+F>0cy98YsQLsbm?uz<; zo<<#oY6S1*plE5h@up~87iwLuNzy1e-Kdd}|s zHuY&lM)(BZFh#4}IRPZWvmpH2daniN3yDPC4}>tT;n@|Wbm2VErvS_Kj$`P@K}ip+ zf`3{JnNf$!C}RM}moU!-pO@e&*AYAeQ{sIdA%fB#`3{>TXGxbxLj{S7J*ih~|= zOy!4Vm0Hvq#Zf^&BBunwW)*ok{~^U1))`tjSG^(i!*>nuRw=*enD(=Z?#ANzcotCv zb*U(FfANyZ>+puUc`f;XNH`dI8QNwZvNNl2lXE*l>9oR7*r5vBlWR7=!Txx6fiL+m z=kUhG9zyjtG;L`Y^U3%ijZ&J1kkDL2FqBu)GG!14sdjiW`|$Gs9j~_K(Vl%!M9S(Il?dnH%lK zv^Qmpe)<~=rHk9>Jf<=MHstZ;(2dh+{@Xu49$dJx&V#=)>1QUuAYmLL86g0cI?DaY zOh6jD6{PTGtZk5jcXGR0X8dw+GJi}7X?t*!muZ?)4?PTc9c*OegpGws;aIgwCPAcD z*6rRKUB)oD)Rg6GG7^;_<&-LG?f<`0<&Kto>79m(+r>#b@~e~<$#;mW=6xGOqvh=+ zHm81{kAIXL$su|mqnh=mFV>$sfJ=Zw93;r^s@!!ScUHR+&D(Ab8vaBRoka(M5^QAj zE`8}Vxa`@mJjrC093k|D-b=7(wJRf+)=kM0&ER869hwSAS|gJ)R|AJsLPAhc=#m2zRBr9#=dK-oESBt5vPq%@>ch>>aVi$+hP5ap)n>L^QdM6#4tB2fav#1q1# zx$$sPBk4N&Q}6Haya>19_MI)nR`AXS;DPUKV)?LdJ5IJ0ZcS`3QeSe5(YDMIkERg7 zqa@>FPgHj(cp$}6b=$gu>G0gfJ38<$7~*tWdv^KvHkkx1Y+@NtEWj8letj7%`{!uF zV$0JpF~Vqrtc^5l6AVv|ftziV%hV2dQILX$;wbSCO|5j0gPal*kg$R_Z(t!6zkx?6 zd>suEuqruqYEBHY7sB-7Mq0M#A5lqcJ3RWTAvBAaBP1;aSL{?kIdWl@q~%@sWga43=cx;YfCu z(K3u|?K(`;LG)Zibaz017;IzdLFE+;_v%M z$j@^#eua_G}wUL8&CQvDjh3$X~fN!g2m)ZXLx>x*MdpbI_$dv?b4n* z#ac8i+v39p9*XaiL;ezLHLnSx@c!uFe;tpsm7k|K=J)OP6n0i51YB67LL1YRphO_- z^oKRuXAe2ob??kazS*H?+uSXeiy&8O0&Od}c;T~DI>g%o_i9o!LWOIHf2+xl)*h_3 ztdVz*9C9_W*sg?rCJ5*CG~rCy%f132q@BYMu5(Az%KMv)-NG9a4=f`$mPg`l6F#!P zPZ<&8!tnR?%dcsrghb-8onSH^PJYQ>A)>PqIqy$W{Xc5O;(soS>ChUz@?T5*FvfvG zZuH=*Cs&V4#M^A5sQFo-t_B8 z<+h;*v9>%Y)uP)xw-0BLC4iIrWj^|=Ie_Yy`Y-FzB_{*=)kyRaZ9bq9Z2E+lG>T#D z|0T1Y%(FY@o_S;@XV+>ub(~KCjfj=C_GFn>k1%YF_21e|>xET2xUCY0|NkVY@u0kG#-Sl=VH%hbHBe^{(sl4NHLU zD8NmDr|>yRz=;t)h+SC}ViOJO!r62v1P4X74q<1TMzTn+^`J&|?L)4GvhotG)@7AZ z5Tnju%xo$c1XJ2%?O!ELvAXZ1y6l`Ia~5dZI*SvUD4fnroK(lG`J7SCrPK%L6ako{ zm?SDzng_F1t1WTm(!bn`7;DnkEuHzoNuy525+N@gj-`s}SC*riDpHf8YWdA7R_Zxw z)ILVLRN+KfRWgwqJ2O411l5=)nU;bnQtHvFjF<)V<<|_$c?Hom$GO-M9`eK%LwRnX zM=gx;$^G~70;LGI_9Z-*Jxeh7~QK{bpC^=PxP zlVC->h_tUEiQH{5IyzV(syS1yD*!gZzvex;nGzVclJig{NzCf?5$0f0%D)u748e6b z57~b>^5?bVFCA~YIH~eN8n1FoeqN4;qg>`pH;5R%rD= zF3YkjVON2%t4zzL@Xjdvum@jzOvSV65vSfVkk8Gpoz}Fy609-EVS0jO=iQ?q zZ!+E9(8&BRZd|!Cg*+r4&!zh`l{6T_R+ql&moQEoDx|AT09x@^mGhBQV34MD!Q~!9 zKiige%VjLyhG-{i$O8hNC@-Icc&~kc6pweWk*VxhaB8ilYqf=6-gL^Ui+r+KM9(wmrjp5M>BhJOJa1#DEsr{oi@^*RmVy*2hc<|b&A@g6(@VQ)cN#1`wse9} zvjNA?{a={<^fDE=AC?m@`(0UBSdq$?jI*lIDqdGnvG@C2`YX2E9BlSxA>I%U@PF3(J+M ztfsBhx8>NCgBL2iNgQe04N2QIv-#QW>WipmG0+JhP&>pGMhK-H+qBAe!+8&nE9_C| zVAgmDG59jeVipd0hR7a}?|HQV(M+;uE{xme*RwAyKh#=_(~*LD+IOpIcYlB0sPnS7 z-w*BMv$9OCf5AkUd2*+|b9Z4#&aD@E+F=P69(Ggn>$2{hO{$%eki%9IETpd7G(C}B zN)JLv3>!n#Ll&9dD_H+4;|TNqQhNw}IkO<$6@L;2(?m=NSan0+I1HJuM={%_Qn3`B z;L2s0oW2#|;-jA#mlA5ZZ3PqGI&&1l&qv;q;L)SrFM7z+247M@9 zE5ML(Ue^|t&K)hSe2#AIU{yG1^yM$a?j}6@ZFI8*jYmQp+T7c{--pv_G&dS$gv{thY@% zso^>8Xp9xyfulP5A z&Ymi^Hn37#N2sjTp*de0$89+zBd_{yiY_M}`~GUBa7Fb=MsDw!F1tpi(5&}upEV5+ zc#Xq>$$onGLc^FFcAhOHdVtGM`}h7k8a7R`(=%6FW|`Ss5@(FDb=EZWGUcaV)q&lK#75UB6X!8(A%gQm}-A0g?6;8(_EfrEfX3UsLXma2wWxrNT zD=b=W-nP({n>QirDyOAHWjQJxUoBZjL`O*kD_E?O_>s#*zv61#VX`4gkw5ubae8XXRy-$pT}F*%7So`7 zC3LAHOQxGfDmQ2ZJuunSVj<5XgWR}fTA`^|p3-BX5Q;VpLkM|`H2x{t^HWG9uEnv| z4MUAwe5YvYM3MqeI?L1db^3!WNs_!W7Y*u;y|9YP3+ii0TycpPk18yl{zX4gzfCwA zMVlxk04U0ycwDgu@w~zo9VC_lAEQ8NX!cpBG)%`3DJvzVM%emVC#sf#_@f>{@2fo1 z+E@;+GYYja*7Qm>d$50OqJ8Zn2Q@}LhaQR zIzTCNR0t)^CzB(B#fa)wDdC%%)Im|(skvm3^pRneYzv^d-wp$mlt?a$);UD0+)+xK z=KoPx8jF-oA(g@)54w(CDk24y57Umjnk)vk;VLPq9KPD&aeA7F9Z*(CUU8$~S*aZQ z%Ed{=Qg}MSX<&TEl$$)1h@Gg++oAO&rK*=!i@rS2L^V)m&O|1z^m{NjkU&sDZ7X>- z7muSSBBBaY#cR<-sFAXda`f8AV7zFbch!2eYzVdH9Mau^DJ~^pNdDdRL12Z7x6mLNG~%JO65XGv7phC=n6oE> zptAKH#9Fl!n40TS)UFwt9BRR|K1HvL4O8~M6|W79PTYWoLV*eL`EU+%#?}%F71I;R zr5;USc?dG8q?>J%BYtzsy2qHJ0viUI{?qoER4bWAY2lSHBzFrR_ zy-Oc5B?e;KgIujUDaweBs^%CV;i6Dt z%E@}kToytRZoR;{r20VH&6n=3AoQk-SU-WL+cJP2>w;Afj-n$*^x9#YrH^NEhSX_X zF{>d)s!AhNDzqTZW-p-;w;)CT*m%m;PtY1qDkr&% zk$qtlV7+&;MJ3Zb$si;3BC7T73AutHAhS#Egpy)22p?pwC!9RtHH90YE2G**2YObA zZJlg#+3{rBcg5YlBNq049((6%9{Dx2i}LOpae4d<)hvYeJ}$444j56X*w4mHa*)r3Hg#W4PGZc`M*l=Yl!gi3dFvo+kme;!U`i}0K(dp8A3-nvJ zC4~CbGpb+URm9O`@3w&8B!6Od=LN0X<ezUYv~I*si+OJ^6Ro! z&r@lX_@lQnqv;Gg7lC6C0E943?jzaAN%2QB7kg=Db(#PI{-155Hrix1Iu@Nk(lFjS z-H*j5;(3s7;N*_3hAAIaar+XD1rCx{x2WZ5V~QQZO&7%UF_-hIoe!yHFTtr?(K1R- zBj7=rdnPRSB3PJ{lC*`fE+KJiL5>V4ono)W4unO9)zviz1g#vK4}pg}!+`mV_ZRB6 z0RaUH5~LT|tlX7VhV}s+WS#Vama}_70BV<*1_}fO0uns&&w~=9__Ey&@b7Ez=Y{}I zb$fv)4N4a6L9Tzpgx|j)b6a4ugT*M~@mhZ}syCdTwQ{_5itJHj7L2!6t_r(Wsg`ZY z+^$etOV|M8?Qbn5GlFAw`_Q2u^Jf64dtqshX!mp7E@MAqgpECUKnAJsrQ^n>60OfN zUg(2JW1Q%Yty^SqqM-^6GP=G1o&moPJN*5Sh$0$ZTV&f6*gVqHF~#60aSK#+Nm4sylw~t)AG~wOWa*ZE6s?U+4A>TiB}?~)_os;Fn#93B$sHiJp~?P zZ56^)(~>Ey;V6_<+JJBj=HDoMV~3CHdi$3#f|u&ZT)_{FDSd73G@Y!W0)G zRjqE%p%JNR+KafkBNAA0gvW`6t)xl{cHXm%DA&v>x|TRdjIf4Y=pZ$~={Lsh;m)M& z16#WbP_EkG%BW+Xq5klP!KFpxN7AaioXv&Oub`j0Tf|o(2+N@g*1cjV2&U5-mE4|6 z-cTp39j|Cz*a2Fbz($2H|1JxfwaHxp_B9A!3u4PTVYW+`Lm`kW9x23{Dgp0L05M$p z3%iOk#QsVhC&RJ{LMN1~fu+zKhL_~);SVYfd-7X98niik3~^*$r^9gBUY~86mSCG0 z++cPS?Q2r#i_q({JZy2gy4<#}RB^!0gk{VKRi7?npdB&1CoAud&Dl1`?lka@!j=Y2qL=sQ2Ky<$JdPyXH^N!yOG)>$o?ZCJ$sIsf|Vk zmuku-n;a0Gk{Hl2X}*3+4c;)gmP?`Qe!6!@{zWbxbiVW(|}#%bw<%R>0=W6<&xuB`!{*Hy()Y%2&@I-@!%K|DuEL^Vm@6`Q~+2kMgz)t z%O@bmdx_P=5)4rDOrlGGm})M5DO4g+;{+C{v6R#sP%(n>Ses{Q@*}SrFB$rTUm(8p zxhE9y9$r?XrLj|+5yo6OESGZkkp3jIHC2Wfg60wM;WQ7rB{iVv=X>R6X!js~a|k|| zaxU9QiJ<77Q7)*o8kGm6E)8HdUMpB55_P?%hT*%#_nSE%y_mk+Gd3*S8c?e38(7awbfK^z~Z};x7DQWo*IL)s6gm{SgENK0Z!AHb;c(jq&zY__lQ2 zkOuV)S2$QzWN6ULH0>(C#?q?83-qfLMGGd9JY;B0;2Rea)LEoXG|Sog501{CZhy${ zZMe!as=son;=|~D(Vic6q9~n+OjOPCwUL%r?c@fYVXv@s+{{cSQZoXZs-GDgwL|b1 z;GqKtdkZJeY|b>U;eb|Xjjq`Y;u%J?M{V8p&7xV8p_Cu_pdek={4xh`hDN!Iqjuzk zY};^m$ABU$-S-S2b@KXci|42VxJ-hp)@bm?Qj1{NRHP)ddoeR50-Shfs?~v$O0{0K1PBX{ zC()8f7^%SJ2oV_|q1sD*}^;7XqG8jw^ELl%fn0r{&Av|rml;t%W^%>`ynr7qmy zMStM9X!MK51Hm6K(T}G)oAPjdIOH9hN!CkyLW@#Hu5wOgA(7B!!oJCV12YT(Z1}h3GZ@<62 zd~md_+eA{`DB;Qh_#F!nx_#H0!Z4Qqa5OdIGwFI8g2O3+4rh7xZId22a*+>?o@d8W z*AJ28mPc${1u>t2quHizdqrNibjxni_illCOZq#Bngpd*3j79hz~@aI&x{tD@YKSjx(X4d<3S_NN^!C z7UbEf0?HfuYdexfc??vOg~A}~+yJMP^5fRQ%cL-w98K{9gd}DJ0#M?_rE{R`b#8Jj zrK+Az1jnyjEj#A^W<4r70I>zeiMn{Se|bhEd+pX4Q}HV-(45BrCVuK{T6SQUuReOd zl;PSmztnQ~AxsFAhkQg{o}iY(8&&Q=Sr;QF=}MZ4u7?;?==O)W&86R;7f-9iVA4JI z4^)nWt&u6cEOTPzx1*F=_SlE#Jy6{ixuxigQ9ip&hb}~{qfB@~sM*7znAPkDsh8-& zfml<5`*bg|F@9)mw&Q>jwq5?Ays~S3&zX+3_LK+rQufgmjfMAC^GKdDC6mzVbTI?L zum9Cn5KoDp_R|0*r4nM^V3L?pK*s`m?(B5GXM&oX#AieHzPd`++QI|$ohoQphJD;?Nm2|KZ+S4XvIHC(KTuI7DzbGd-~&II_qb#CpM zt&$0*LxGk?V{K_ScU?ZKx3o_VwVWP0>1%I#xODToKTHAaH?<_0Bthm17vd40Q|-g< zT82=Yh02%6d;$H^B==J(IyKCZ|P=SSHgy2yF|YB{HH{tO53k3vfSG4W+!-q{4cp83-n0L ziV|y;XUQUi=D~TV5!>=spl1qeOBh5CTliiPh6RX=maFIS6 zl%SCGX6jb@!3#~$_puMy=D+Pu6GMWBoX?eeOtj>ToX`kd$2IuSB!ISqBhR<(ybl^y z-(cixS3ARYivJY1OtHc+&dWXezxYikk|TB_wuUAmn%#_@fwn7bcYASY&2_fhHPz!o zc#*KVbPQ40U2FViWzS@nvcw+CE74LJ*{6Y z=uwJYY7ToZw(X&xO*PjpSV@@&hPwFzVJ>*H5pFg8N3YiG2m5b60>MHsIe6Xwa0&ZU z$wVq^EQr_bm`f0M&DXx(Sj=aUh{L;V^J8cVn5S8A5+4PZIswM^f_)itMr;eNBxz#H zq<1zfNDf<~J!y`$F`q;c?SAfGkI_f^5T4S^+Jao^UJ!MO2RLq2<6?5_di6Q%ON zC=aBtFDxTb6>G-g7MA z2^@hIDzrzA^Cqp(DthnY@4g3<1|>1bc*UBd!14oc$gZ9C(Ra(hNaci?%nEY8nT>u> zF^-<4n6)`P2|K1P&pN9hm^1izx2pyXhh~ABj4DC8bV6U>_sTF#4JvOh&wNvC6$l@3 zHF5O$y^ETb37|3R#=h-3TsUJN>Z--OV2bs^wtgKdhl|161GN{sK#&ZWs>^WkFEgK# zB|GDnyE!oiw2cm3LFE)`L*pq*$zI=b_;tFo#JD=ctF!P|POWG|DD z;B=Zcxswi59dzM`=%=6Yg;aTgUX@zTP})?`3Mpq<=9Go4DdQI;jFi&~10QLg6tKFH z=HS&5vQS1delM-p5>3JCs@Ow2XVLL!Y-CcJIF}oaBm&h^Dp@Q}Wv9q0tE{lrS~)%A zT1I50i)<{KJBi)3#S0h8N=at$!NH+3SXQ)0;qJl4OUs0`1Bfb!%bdk^Rle;46)TPJ z#P71zcGXU7X%o@W?7b|{+8SM=gtBrSe*!Jf025sD7gjH4*>4=AT0P%b%a`M6WqOPi z!K=V-d1*@Czn%t%uo=Z8srYr9s>^y!?|iQ4)-S0(nt%33X~zN1wcu>}FfaI(fMT>clQ6%XDJP#pJa|gx5_zREr-awknAn2FqZg5Sx{Gsc?B@RaFJERnzT4 zyWUiFiP0liY&UC&`T5L3vRXX9E+ypC26NrxKV4*G&NAg&3xk``jQw-+P-@& znO|mfL@m+mn`6s16ma7tqsB}u)-c*ei)pW8dZeh}5-OMKSp0-5WAKMt%)MBpCrefW zRJtrp>l%Af2{F@JSF_efGsya{;e~_&lB{%Q-GmHs%?xE&h^G${W}!GYP)cf^&!};~ zdzAQ)2LkI0QXoIT(_EaQ~0}QOuG7k<=w-rqdqL7*F)-PW+NWBRU>@w z!B*fS{(Q5OVNi2gW2eZRY;V46zt){3r?G+L6gutli{+2B#B?hq(PEY5xk(agbXp^W zyZQ-M7bYsubPkm9rTrYeYt1>HCH8#tQb^^A(eI=!-gZl1h4YWj zJZ+ zFM1g15?=1r_o<{Egn;CDkWoyIG5dLey;DSjLdCj&DZtS}b*y7)XHHD*Ilp2zSc6rn zj6dA7yhu`YJ?uvH!m&{s&+aKfjN$-deftu3O1SEsV~ntR{EYV?)IO2fDp-zH62t-+@fPtu zt4)Rn0W?;-0QBOzQW-O$0az^2H|3+j*954v7dJKGs7Fz7ke!?IV0@6k^$Z@Z2NBNN z8;=e$zvfbIWr$r53S!{>Yoe9a6`x%?8@8;R=R+kj)Y2)KzYOLah!g;a`(=r*%O20j zs;F}N4=0%ejIC^_50xE236@Q!ViZQg|EF?!WZM;UxCT=qJg8cl?cGV~Ne*%(vch(2 zj7N}Kue~B`)kzA_Dw7zE>3M&|KwnphH@bUL8lxC;n>*RaA*_TsNg7yOp5GzXMJoL) zat$Qs)W@?|yEf%ky2#kUYQ+6tr5O@d4qc(@XOK4{ln`|N1gf!TF$^t-YazEfCn)Re zyhZrJZnYdm+8%F6i16!HDpdh5n_KLL&J=I;9?U{u^V|3xrca(9edcLmM(EY1q|GCD z>aIyFhx*z*0W;DQ!FDBL5O;}^p_Xe=%@P*u(lKNUdYz%$?5;WKhNqKOo{-=DLD$8| z4j$Q${=_n?c=v=E$+=pUz_2K4pdp-UTjIRMI>e4^j>5qIWamL(sRfpWCJk4E+XeA@ zIx~6^&DWwIEu%D|8lyM-7j2@c>)`FFSWcEfi8?wGnuyb}R^^}Rz>e;(7HR?hkX`(5 zpE{Hn90;k<5(Ld!u?ia0{H%A%wv%M8?tT2hX|^1fKVZ`&HCcFHw|6B>d~3GQ)ni5^U7ysEqAkQsWB6JlO#-M z@@4dL1>er8nsq7Vq5NjB3JmY50C-GjAr~H!s+j>8y3n=TGP2`IjCb{c{!3x@dWpv& z1PDE$jI_s*;u=6wLqb&R$B)6Dq;K;R2w?~xe*u_;5tlJZHiQN)=d>1&0e~=mQd>?1 z6(1sb*CX=}JA_LxQQE<9gd1&{v+@~CBV&!MP|)G1xN0^QXHNBYlcrC|q@;=>EVzDl{19@$4pp|gTs_cGf69WQKHapw;}lsUZVU6Nh(kp{t;ide6DP7t`xm~Z%D7!vMTtu zd2dwFMKhcXjqO9ZZ4kd4(L`20l|Klc$~}9rB+oBksP*&y>q&j1q-`TJ(GGfwrE5dW zp(+?mHzP~l#7K4FcyN>5gNnlo?!Pe7`|_j~Bl8bzhv2-}?2Z~jwszfQIAlqZ-E00vdu4AoJ<>u9!4%Z{jgG>C?xPMO)A0Ev5F%-=E z?0o$osyWP*`WO5~^MQmDkN-j*^FvDusKB+TfY1%kSa9-OUe?*aN#jjz2iU{iESoJK z2{HuApjrBKF7?CwxMtDWw_|_ovsH0L)enR$@34Rv_(Kmk7%4*}%2QGq)&}d!>(*tm zD<~8j%)VY|IG_S5FKVKE4ynmpqeM#g9=YtuwGqhQnNm5^I>h2W(Ur|Zi)Z7{y7q3% zU0b&x_M>{mld!lLNXGM!m^m!W5Z@T~S4e8d?)OE-RrpoI%Qx~%N9FfzhU|%;H~Y2C zd{qENK)S!Qb=3aa>k?(dh0CRH6AVUUP}&1yS2~6tiM3@z^}?mArG-v3^ zJ5*O3;qWk4!n>3|GE~3d?7Ipp9PZv~$wTIy$~MB`+DqE3uUHB<+S3&3JhFG#>cUc1 zj0N@`qwsQ(f2G|;)4(pJ8R!s?lACoDI zk7>fmz`h9De26v_D`UlsCtesrq-^X*=B{Te99RB}64$?mxwRLV>{}EQ?KTS*P^@yR zkq{dgv%ulL^gh2|%D-|_8n&)}G`8_-;Pxws*<%FIr}x-NZJ1p~JFniRdZuV`qr}*# z0^17qGNJMaQ<(iUe}q!-SB9#Ap@Z1x#!%f$ z?9h^x6(t0lJ~?UB z5&3amHwz&S>J*KN;5ZTit|hZeC=1U|vf)Kjtt*#HbRG52?ZGH}e7Jh7I+{WMp7~=w zxG~MF`51_XIt8Mg?U;4iafER+p|}!`Nh?;+;VwpyWN)3dsU%!-X8a;(U2={_hig># z8V}IQFVz*dKN@8!k2V>sd=d%&7v7fy1$Y>?h&9avlj}Y}diz0wc6w-$0N3_pF&+qW z9FO$q1(}EU6Ed%5AaL)|KF%4qZjH%)P3hFNait%3c-7;lTOQkDc!A}gNa}h6pim$@J4VqRsuAOPlZ~RL-u`%3ga7CTF)+LD_EeYFTrU$FbpTMNr&<6~hwh zzjF^?p!%_QsvVE&&kb>A+YNe%09KzT{=W4Kg;pzT59MH92|PKm(h5j#zScYl^O;TMSq7VD82%3qq9wi;V)C~7SR zBvRA~%lvF-vFgyA)|3_09oMo5X;q_^-Mh=P&YOnik_PWov43j9rq|kn>h{Yeh?8om zz$u=f((hgv7c1(M$T1)m13AXdm&-0QoI4}dVfsHsa3^$qkJm z)&|qDtOds}u1rrD8g@^OopG#!lO_`D$EXZ;zcuk_Ia^}yJMS_LJ5Na2lms)Vc6fmk zjH%#?i)ZQdVhWm4aKxUzLNHu)rKnq5AV94A@^HUp(7awCTA^-+IatAoVILNR*UUww z$4gMfLjAhy@(&h+mLZ*@A$$k%kb+;Jwc<2F!Hejj3x6LHfQN2`Yx(02p;=+rNwL;w zE9>SbRX>mXjzr3mES3I!>mX`On;;QVQRk=WB%n&MHa?LFzrn8q;{_kxWa4qZjSqzb z0@z+W8e5dapb~I!7z>6Y!2MsOj)x*Zh9ru`4Quac-&($0_V>%51 zYkXYZ_5=hXCK48OCkqn8^ySE$=tGz~E1N^mXM&gQ>~=zrO-C)%a^8iIrF&I<@xhxk z&!7D%T(tM?V@r2F#6$vwl2LOop@ii$ilbYJ>C-J`N5yc`@&0=jln+O-_KI?6x?#4g zMQVB$RD_@^ZDag~you@(oXv0K-aBI7slQ$B?pj)1{Kcyit>hC?I?$u$oL<8XZ8HWBb>Kx# zAkeX>0=NQ6&GSFA%Ox!8$)iCHnXU73r{@EZAmpzKHN zPT3T254=T!%6op^8Tefn8^y~Jdvw$CLHC1qIs<{>GlO|@g1_4=u_-?CmYhLiKi@N#}*jNF_ia??=vyl6#ttb7?)lUI`HghjN$x|4FcJ7E`~oO7bSs2Bva=?jlR|VNtFe2PdoSgtR!>6c{U^}Gk!l+45Y?BgZO7|)lnU` zfdJ`1v*ydQC2lC5j^{sw;^sF}Iki7PdFrebAtu6$SO3LBpa;g!-MuP}t?+a5V-pi2 zrezwJO`S#@43Sg7~&X-C6qNvUVJMDOG z09z169{{$n+dAkQ%p0}6bzp!vWqFGgko4(U?zJTza=Wh)zVikvOyM@H_w_QdySke_ zcE9@q)!XO}(s=7;dswUvKj4;KHVK#~e4(lt9?sx~?TW2|2|QgRZ$J?&H^ zRQVZjUIdLy_s9k0(fOEi)YH4skREppO5^aQpAU1p1(KLcFQwrpr+krq$*?36;4Zza&^ zQP9$;Fo#q70o~Qb;S1**ek@=~nrtzPq*j>!QXL#`>l0~Ihsr{l1Z?=Ap3)fA1hcsT zE@6|^FAY;L?=`PQWXkg|Pt+~#{0Zo{XdjRk?W;D^J?QSE@WUq&D>iNlg*tKIjE z7hvd=n`*52wH5Z{nW1zb8uNdLN%oaU@o-01_eQfx53guPmS9MU5++iTjoYM--LRyE zPA13Llhl+HL8SalPqZ`>0W|U3%t8&%-1wzF4t^T`QI~4smik1&8L_U!1dqrRsVJ7M z=DI!q7Sx7LM>PTN*aOKZvbKkDysJ$I6xBOy#EcEEs)iF@;H`hcHZQ3#e29VAE1j3O zu!)I2cW)i*#i$~z_TmML6$pRneC4ipxX+B7`mZo3s$UEeP`la!2!R!OENgLfL%UP? zbQVzrE&C$~T7!!@wc`b6Ot^`d^dubASog}G!ygtYr_9YEdv40j*h0tcU+~T*qojdiDoFqf1CQy^c@Io{dB# z>Y}st7pMZevtX{4b=Rn}T)9O@n1bJ+?J^a(I_wRwm%18d|H!bi;*NQ7hz+q__Xd_H zxE`?vH?e8}iIiku5LD_7F5!Z{D$+-TG+*EQd}DvoBgX^rkw7mT;3@)E+Dd#k`Px`u zaoB5jRq)#WzF@ipfDKXqH}Bu%vjzR{58^IDAzzvh(>fR%3ybMP$k+Lb-Hmtm_dmg) zwFb(YfHAX?Sxo~l-lKvV-2wRl4fkEDxI;DZADJ>v>t7Z-dfaK%E%}c=pGrLZYL_k* zf^P3oLNL7|1(PZZ)rX(Q3F2m&&bw%Opf}I?SQyV-W=C}`$3zfD8*!%!_1!;cWE9`f z6XscKzzHAVQ2B%e|NNP6hp&74&%*fiK#cV@y(lld{6I*g zOP(LYN|Cqju%|L;chaq$h5MHf#4>2dG1a-p*DXGY_t$ z3O6iFYR;-O?7~Z={CIM@8shUe8yU61E8s2NJLS}fFieO?Qovc~N}58Szi2Idg@tap z4QSRKns+t`0-KExw(=gsi2uu#R;aoKO{JdCbW)BGPC}3`J&8F|{hzbsZsOw;`?AjF zq#anuMgw`RrH<((HNRNwx7ghc7%L6h(``I+fVXA<}8e2Q!Zgxqq*p9`C`j; zKTD~T8ddn%a56U9w;+{sIH5j*c{lWfvHvG@+QPfzat4dfTpSvLWdz8CgIl?{^KKdb zB9@^P8}BUW@_;yVs;~ul)*jngj2$HH0H+SQS|C}QaV$24cio_=;2&`IbWFMTn9me> z0nO-woS3LgZHbOYo@&VrI&tSJRdwnDEX8}LAF;IXU2&SurQ4a+8r$H|mrO<~!Bm3n zTOs*SiHHPnJ?h!%gS2RzAndtoMQY%9&d*&uD0I5%y4DZE)DB|5dMxl4Ox{Uyyss!<*%ho-wF0NMW|UMTi|dw z^pI&Lgc8X4ld@n1izfJd>oV7TE4Wu{JK}Oq#i~oS#VSw!A%+meELx@95(?AOPX-3X z<8S1xWj@ss{a}GnEbx}7pRc>jaCfcm6aL_W!#&d;`1Aso9$UgQ!!Z~Vie|YlP}a~- zxx(d@9J6Qdm5t%fJml4y0$=peVmnH@HP!(qii+u!C>x_VQ|=}ME+fhIuK0YJ{75W* z?~!$9RelLogR98>6_UC!(K?2=>2|;WqZ`Lr{!G8odTXd(VaSD?dRaECk|@eU_iX;# z-`1wjQ*O;qB{(V2HtuHO3QC$&*~ZFY#jM4(KQt=&3!Gx@kzyVKSgPDXe#B#KguL8t z&Pq|dO2*SXG8KREr;qt^X@-1ThxR_;KV`{bF}e*G^ulslgu{$J52P0(_T{+v8?F+G z-74}Mnu{v-u=5DwL4?r*-~wB2gOwy%_{nrOsunzUS&k~1Z&7iX-1N^rsU=8P(SIRL z!xk#iLM`V3(1`+S>3#aZGPVrgMx$j6(tb4gK^0q48oo=RVeivW_iVWQ)_;bpVN^Px zWKG#trLCwV70g!=&0(JE*<;QM(IYw?_y5|y{q5E1N2wHhzuA~GMCKfoi`gYvQ9mA_ zHD~owPFX{<$|&-NC5d6`R2(j_`b9&H+7+&B-&w5zBRC0U|2gv+sSI0?7QjPWi{Km6 zI~T>;-@P`;b}J*x_Lj<>WnXC@)OLGn-LvAXI?cD=iWhDMn{SyEY6J{l{6190rjF%--NaDJ z{1gI2Wvi5=Kug&C$ktL*CouXEG6X2Fr5M%s!&7SZ@>q7^!h-*PD}%@j@4AG+Gfi-u7T05PGUGgCw#l|ZfcL(sB%y{pGq?m#Q># zvbRvp3Mx>-V7PH#T?h4>6_Njjs83WR>+F=+VU4-c9nCXCN=$<5nE`6G%K*hXsQ31L2A@sE+qTMlZhGSgM} ziu5B}-enR*#J~*S)Kg+aEJCxskJE3B*G+mhxfbl7{Y(*!dQwItFWnRZ!^hR0tz*3) zXZ(77wzqd1tv7VjO3irm78!yKH7EPSH0p48E*NN5kjgBVF%xNbGrXGNuoKi%D@;b1 zRe2{T#E)-D6{VaKb&+=4RM7Es3{i(Xig_v)I@-$&MDz4s42>pK>a+IAt>*(9ax0OO z`(;Aks)q+Zuk0WatT+9BfwkG0D)QEIcFJCETbmJ+X4d%H;_YWxhiUypk2QCu`2=ul zqatS`UYl={TqIc^`m4qM#zz6D;a=Qu)V0J;!%&De(#T$2yO}?)Kc@h}=8;EZp9mNF z0Z^}SHED|KUF{~FIvO<=xGMP$l81?u(Vn~-!1T3(SQ(-Qw+z1c%>+0G zE7_@JKd=-sT|Yf?sD>W24;ob&GV4__WjK>J;w$~{CZcd3mVQcs6wwH5vSi3H~>e=l5sa|QQ zsJ*heE6%7$Pn9-y6OovY^*`VY{t{1wg;pmDHRcl!Nf? zY@vnEoVQT-w8xKu9;6I!TIGPq;k4`eafa{v~3=-THmX9PR#AGI4Sg z0+dMN)aZ#3gxv^ck|1^XCj^g6e-fia_7_=QAi~MSr@$jpV5$Cr8|Ya`baBOSmxLhs zU=kmpUl%FQqWZrUx74c?GfAqj+0oEjsraI0I<0~a>O#}tQX#Iel2|KMt%+h7=fw6P z0F$MZT9_U*{(uo~_oL!K|J>Y0!C;+M zCyzwb-t&V8LPZxAWSGmWAS<8NMOA(moV138npw{QqDejjO}DLWxH*$cqRH%-OK2g% zTBy^;Y|fnHqvFR)ol;}O6w!D_XlB3)GEQZjh+#!p87ZYPj(gk{s-&V`z_@v6Gh{@$ zP1`v9G>Cy%gsENyW5Ian799^wrBa?|6kC&BIsvdtVm9DZMu?YtCu@J^?4hqmA%>KR z_cj-(T5(U?BL?#yFH*^)1{gW^Z}l7QKj+A_YjB*&cbZ9Lgfez$@Sk=i-mScblzDJR&ZleWJg{moR+o_qn#G*^Rt2bTEeP zps&4tJ4Fe@p!R%i_LLfP)gE?dn~{TP2<$CMBLy!~19Z+t5pHJ*+XuJO zKKYHY8@aC&oOplw8zbgIz6QnvL_x|Hlk+=uJVgWK%g zcqoCZj#RSB!Ls3@AN zC>9ec+L8r%MYCS*sf;OqL~s+hG2!(}haykwA{Ozexg$ur^k0<=l>1&268Gljxns8{ z@9V3uz2ws$zmR_@hcQuQ;W&@0#NFNKUU<2@I)=Aq(1t9AJ;x7Zw(K8;CKBjHbI&y0 z-Bs;Mg{nw9215R=fRfh{!|6&0HZcoum^^`U9G2jQ*ztrf7@UY%zXACD4Y@`PQUraV z`a^tT_;_hJXLPJ+z&s`Ti{rO`XMVSK{)D(j@`%a14$f_E$g_1bqw@E+FF&Sn%c%mD zK`YB=tHop0Cb4z<=oQ*Dv|JLcJ1U`5l70WP88Oon`^TFKQsF=@}@f;iDp)v z?-oEpG!W3x3<=!TCW*hEOb0~kyK8r=r1k%=VJwGy?T>iY6agz~W4qM;jvrwR$=hZx zy?S~;YiqXa(7Xq0q<&T0(4^eSjdFKn`?>Pq93f(Oas1i|fj6S@L%GC^fdvB4sE>OS zPQwq$-~4)lt9j_qp0C=GA_P^ZDA!d7G`%{}DixIG61MR9Aw0>6*p zGA^m-q03f0*m&H8U_(bU=~UcZNt8@Ld`S`>7JMO+wedlW{JrGP7ZO|SI)|MgP8Q8rZ2}Fwhj*MeYORW2Cz)XxmE-!ig=3yk#JydRkm*nb0F*U{-N))C1*eO|rGMa2(q8xGZK%>=r{rOTPE zj;S~9_|a&8ZR+r_lgur_US*y&(DGW#9&_8kMYTR^dkraETGsCzBfk&w`&yP;&xKUw z?ilacJhvkhPE4pCbmclPIF z*HHdA24Jzjm?fb~zMPK3bNUkcJnW^kFGN3)u;INjOE#}Aj%Ql~C7PWB2#Jp<>ZD!2 zG7hh$R%T2wCjVpSz9v*;G^3C5avG&Q{1NhWw(w_e8)CfOdO-TtoY#73@!IY7ef+(h z1w&m2Jz-o-LlI-1qW8hH-$qeB$uow^>zn9e8R}6uFF=P>^~xQs|G)^zt~{4(B%hSf zMdhwbWr+eF01%Th=B1Z4c$ULMMK+#E`q?OoFk=AIs=wqpBz;Lg@@KzK!dCNT6u+;X zjICxl7+Jler)yc>RDfeyA^qtt2+&Wb9S*uoUumDL&g&W(>2a4TEA90yj+@Biw_saj zQb{A;UrX%?A)+3#FdGJUQ5La1XKYH;j@sMj%4FXRZytrq6YAE+Y5wBpV_RPb>)N`7 zgWmT3HN?xcvoGA-Fm;7Wo}6T@_Xs!U&mBCJ)fFm8&JM2?n)tvqOi;N0(syng(+jfA zXLO}tTCQBlo0zW`%#g_Ha0N*!fUuZnT0E|ntkF`eh5pv4{B)C+i-`C7iIQF0k~3xE z!LTxQOxGJGPPh8bAvrlWadA@+qZ&;nWC)@t0Q@iJ0L@@G+Aqwp>;p6%_NH$Ce%<9p zuk6FG!w0kB4jSM27*GOZ?sHZR7{{dBRmg)cVWb#t=Jo1neLgCtU=% z`*|t_2&Dx{pCPR*%bYeW2um8fA~C&m8ee=P?J0hkK@@kD`VBXV_FXCN1vX7A<17q68h@p7h%hck+RyGn1<13$QbC6@!QJFB{JdHBpX;YAYt#GK>6Ab+lH zQ#{~r6r5hBmmXf0GS_HyW(|VBdC?)5kEk)^Iu8yFqW(`sYtks8GHqT3MAqyegUU-?%0cJ=G1;Ttz{rmYecR?wq0?&MZVG@x7#?YPZ59 zDJ}{%J#b$`*A$w)amOPi70}qgon~P-amG{}TirVK_j)v!b)o2$t#p`1ToeAZ`;~sy z%6`}TOHKrC-8lqdPk&z$V!;Q=u(Uq=gb0*}?G?>GB89ucLb>%=lzlWyVN8UC&YWM% z8N1M|uexVYbJ@6U>m;&PXyy4=JLh^;%TsMSz2x+O?Hu7}H?hx^AZD{1;rxY%JkY%~^yt{b*4oE-0)h_VZIY^+t z`F(TrJVbKdv8w%~Hw($gi~%idCv{(*(i907TmrrCXUw(ieh)%>xB|2nm7Ki`6Oh-Y zKtzeuF3PnaC>VlQ4kGxpnOzL8$9sDUJS)JqryyD&(h{QUM}%1`SnB|md<;CZja~)k z6x+RA&p>QAE@bHi;cZ}i zf)YkynUT{!=IBa2^_NK;CGwRtsfPt_lPb(GU2AtcGE+PWjDkr$qaI*P43XMNNIneV8o0l*r$M9whi>OfF) z;SNuSm>Q!b02o!d0cyk6i0DC@fIM;vfRLsf<@YQ&KibD>`Q2%cNnBt_?@A!xQM_Lb z;7GkPB(g8lzFbG-2M{Ajil}`J4;RCW4j(Imn>HY%$y8CX_(9!Hg@OTS!Ghm|EG{o^ zvRW>v$3r0YlU=qF5!B_NuYgr8CJ}&*1yG^^n7Z_UDUgZT&{w`VbahSSfK$#C83G|s zWzYvAUqvT};?oB7Dv*|*PP3t?h@VhJB@jKXlORju)_U@j$=SkH%7_2|wG?l#Dp89l z1j2yLV+e>}y2^j}=*5eY7(lCPsAGAV^52aylt8i_fAX!fsl=2)F=j@6EzIn(_pbfU zSvunv>ld(awE(*k73R0a^H{yXJg+c6&YHUO)n`m}hCXyrWXTJYXsaIVsVS%n#nmL^ z400ta+cCqNmg5^|CbyDG+O1YJ8<0FR&kR0OabM5MCRfrl!(MtV&2Co#`UV5zI_t!p z8PV3upf5l-luIgu+xHd=&ocBzgE2gGr#3gxM(q*6C}}Q})0w7m0n6#_V*qw~d3#rk zdm;)ZK?(wvhfWG=1R$iOSa-C^w7$!(31HUkjvjHfm65WALgi4gi=i<4Sa-BIpk4V@ zym0$QXWJn{*mCm$0*&52{XNPGAPN3AB6VjMI1vDpvoZ_^GdrtAc}UPc&l?`YfC3(m zq{AC3ZUY=RwbYH)IA6W&T;~EHq?+}6$K``Xd$d+>ep}~^WpWGd*5rtfb$1*Ny`iAI z&|})Vg1dKPOjzgqew&XO>n)h1>bbX(S$jJfw6FU%Cs-s_bZbjN6(uFre%8e-b-wg7 zV6@W9XpvV?rw0eOGhFZ({m0&UV{f7dJ7yfyy=L)3s^y)I{6imcoyYT;kFg-ycpt90 zJ8#qmyQ#iBH{S|f`^-1qaq8M$#;I>s0Y9#$ju<~$SWOd;TN-xv_bj4Xo$tt74!1C` z%La2mR~fFszFcSU<6h%t01IQw!cK`@n#1U(qJ6wux0`xr76!s*rvu>rlXjIkgK>j7 z5uXQbn>4#+>9zUt@=Dpf+Jn&1dtH(C2*tTD7xbRYIo7&@CK(iJ7S%Y1b0)7KU=Xi= zIaWLhJ*QvvoWfK-8aB_94?R~~N4mJ?>bDiYJAVG`jTbJWqHF$r@ah`i*cUf!#uiPQBbMP2 z$U($R3b{@j7${VQJ4!a{hdqWNVAeqk_83Eb1eshxZn*)7*(#BL+r7OH)-9}4Fs7Xj z@habcF4?XDcO9@8yJPBa3>eB6SuE5NdgJ3+j0FjVcqAVKRa4Ix zaz+veEB2Y!%J=+HIR<1;J`F`i6k`>x;L};w$6{i!yN`IiwkC69?NZ zTA3iUg6nGcq3&mAu6W(xT|VibU5Q@A;2`}Z zI~=rU6}nK1(UYNu1MP-L*ilGZ0ey3Jx0bJ3Lk)culWQ?)yV%8;_L8hx701XANFN?l zZ7NdcKvIwqJt~g~VHb4AVHfx7>6Kt~|0G+=0SW=8egD-*$Cp1iB%c4#`ELSgK-I5K zom+2}kHj@vr;2;5xs$j-eLO?Xc*TAdH2SXUK;e<-CO4@lqS-P{EVZ;^L;Cb)l%35LXTZVG<96qSKur(q9wqSFnYBJ#xDQl z+`xhgf3{J;UJJTqse@^uBsQGrA5!UPQbu#Q9T(F8pX5auY4$*4F~51DQhP4Jv&X#J zhmoG^ynFkI5wm*SHKWG%%>7(qh8*t}yAP|uG*W5*z}T z{*RLd+FNO?!&{9Z8Kta_ivjw0&&jY;&{L4H3|lAkiIuT@6Bv|lKyZ6QiZS(tg75rl1Nk)}9%p(WNl&|s;tRJX@~tT%qg(OLv7Bjh5Eh;ac}i?EN&#q}W~T<%)QHH& z03ud#F2ePR?=bGl>D3v`jg`3@88gmlHhT~@dA;^Pb2c$-jZfGaI@&Nqb8=U)hd zbBKA6t@`ufZuU9wZv7oTH}Cdw6Ut7AyInBD)outG%|4SL!9-#qu=R|<^QcWIW;w~F z8=?{)CIH14%uvxyE2Cq$XN2+)1F?3FW_`E3?6C_rdtf%)KHz0xd~ICyu(k(o4~G=b zh6Wa&=`xWCY=Y1#pnM9KISECkf$$*MSJO~rGAv*v0$v37?Wvpzps)?GLOdU0OrnY| z5(v1e4_`L1tU`K|r99K9KeGyIXk<+AoEg0Ev73Z-PMw|mld|{W%0Wz%dc%=Tn?6ZOjaT&ac9c4 zHVy367+KEH%iW-XqwI=uqYF5~nur0|c9wgW$!-}I!-@6p3I$gv2rUb>t&N1f6sX?v zu@V!+X_32dfl61T{HYS0| z#wU~aEjcpQZaG-iuK9btKlz*2EP#hKNu}lr119wh^7Bj1^I7z5Wbqc>u@2mZHNbLn zI8r9>E1LHC^+cAVIy`Vmyf=@6qvY)sUjle;MX`E$w+}Mz^oF)1m2FDuDZX!DbU5U;XaBUYktQYqdD8tZ1$73KH=OO5ym?{ii?*UBU@V) zaiC0&NN~$@9EqG^P^%g8^|sJY0vzqAA7k;{Giv>o;D|Weq5P`=#l}n-^hp8i!wM@RQWup+xJ7XSkZ zaj4CWLzPSrRCeThR^y+BU$teb8vheY%dgf&+YXlkRtFws%Oi|505A?DW`!;!oanor zJLWb~MRb-eYqcxAd`_rW0?bjvuQ72bjetPP0yP7C6o*vOfV)-aPRB>%#E;#xf`L1r z{(<3OoN>uMS)2I z+skBbYi!BtEn&*v^>#zcEZfDw|eDcYOKOl{8uUQ*`fO)FrR7!(TtINZC@LNcu*X zGABl7PX>{YSp`o9Whtr15m>pAxELQw zcF}Pedh4JtnTQLg)sLstS$Hq@N6?F(M7TEa=dpk?l{dc>fu*bwi>0Pzj+v2hm7Iyp zNVpQIFu=iZ_=%h&PkGHIThB^5R`#8r1zvu8@Xb5SSOCAjp9EFkzc_%u?w&zud6>>m z*Le)F-(b1HD(x>rcpHHv#jaQCo0n}LbWTFWV}rDtU){yzEvFPO&%-=07!}6|O(@R0 zSq#$(OddVvTkqtY0QX&&en?r=+6#FCOT}BWF0$)~Bb3chwnZ z@5OiPkXBfLnD6#>!=j@Gi!UXh6jv4@*mFQq0It#J8eD(th zquE6{8Ni>M9NVX`(x&8E!r4y}ssBNtlH;<=DJfmn(8ryJ|NcF;m1VgsMcrkM#2=SH zp?}f0?c8^0^$)*|ZX6p6;Gd)b`UuJ)&X%FW`|uX9Ta+>dMk-UmY;@QMe9 ztKOb>fDd9Wtf>DHTwp>KBr9rSMbYxK@ESJ5_oysGaFwJ?2@^l^#y5TQ;hCJ?hEQN+ zdXTja5c3e&3gU5s<{PWC$(6l+ee40FC5;Q;eVh%*IrQy6aX>96b>~k}lMl=TSarUE zER=-s_ekt-TiuS82Zek|e|W@ZbZ;^M0|o{8^;g%fsa{=W4Tr=$vyrxj1muspzln)M zaUz695+-ZnuRddJ)>ex+PBH~vp&=T6)bKDAvWP5+3$wrL>^?KP5_bRNju@x;ee#xK z*NsG@Tlyr4ZN^c_EY)}=FC_HWE5?Vb-zdUI*RX&vM6+q}PkZBPi>gE4Gz4Y;&~su; zu6_99w`fsulGe28xLtW@31a!Z=KK}YhVGi%b<1^ACWN)qhbZsu;=|+cgtt!cnA-UJ z$r|mdJm3!0|DHy2N4+B45Z+LU63z2PbW4ZyM{{eD2jxGO}$T z5Ch$5g0#NJEY<{T5J8o|`m;%0+TUr~OAP=W%uov!J%=;w8?;@Xp^ySAe-}&9H*3$( z$5?-VlAHJm*DM2wunFS8dg1`TRx2^7K+8>+M>v2?O+}g&6LxV_DZk!d5CjN=0{j+M ztk~XoWc8&>)8j`R!j6y2S&uYsPs>uNaK8}#G(dmbtcIgR0+}Q!If@FRx~AQ(nV?Tx zTYK+J(tMZeOOKde*Nqr$QoBdea?R0Mh1Jz|7E8*KX$|K2M>P&dQKkmerS$fSq&zFs z(Bfuev)tuz!taF#*BT96LwUR9JTr85QcYC_a@S%_J+1867UF@qy|GB;9d9h205AGKGF-35U}~WwfIMSUkd_OGwV)wpK1ryyb9Ky98e4 zU4gvx$L5ny(+ZkY7j@ySs{LeivQ1sgm~RvshO#q(>LDyhERF&&$9_A-9%^8(x>?l) z=w`eo$<@`XZq)g%WuN^<@&<}p7RlR44{9r&qehMK8)A}eqH*V%`c0?!$>p-f)Q(TB zL1>ZZEI^$g(*hvV-~^>&I~`V^3$^-Q+s>b!&&G%h;VT>yGEk1yn=YmNrhTj}^{ zZ0a)@b}zPVWKLr=4_-~JwP@RzK}c)?ncY?Cp;;5!wQB(a&I?Q4fTvaJr=?gYrre#! z;miav2&JmeS;RhCn5hLi)JznibRl{mZdKy`E!A&g^2I|8! zLu+&9LbH;padZx&1xzI5;C(XT9B8)o(qVGSzvS|Tb6u4tG0v%G$=T#;8a{rRd`Myo7P|-Z{I-3mjJqxsB7mFe5B0DSmLFw)eysvw?_vQDyFs8DSLnjhgs%VJ2ugYsU?)9RP-sRO@ zoJwfsODGju{<4{u`DDVTa{2AD49)dqVlrzY_m+vU@I`lto*4s{!q`9H#lY}0Xc#@4 z4wzsZL?HX-8Gt0Ik&&(RTm*uZ2{d!jVBs~G6??XKb=5pzhXcVOtQGK{0nwal*D6F8 zs)K2~N`s3l{ibdL^_*iff%rc)z|8}@(&XjE&|cN~O8ZxqUkNUO52__D0&zqvSIMtT zVRjwU-k%fV(_^_#1Q$UVXLT9;QgF9U+RvsZ>4+^e5gp%t#&aF>S{X3UVpf(+siDc1 zNZF|{Zd$1nVQdy%#geD6(9?}h!pJx9mWKE%R2kKQ(4r!AmUjI~!!fa~4O(It%E8ZX zt0{0pFgE#a#Ue=~d;V??`txSVpphSqE%C|n5pkPbxE3r%|5#6V&pHb})4P7+)^kPC z&Wbg^UzG_#0gx%tIO4GQjN$Uu>wC7u_|TK^07F2$zh`~3*l|EySlF}Qi7FE&67&iM z#a{Biz}^GpH|K+_IyW6zHXq|)7Ekpav^OIK>61NP+mQqFs5GOhb`of>Qa8V`|JWdK zoUnATSJ*UC9n}=4=q1zWgIS&in>)9vN&3z$U8?{7T^G?{eaZEyNtC17#EF|x!gaJ) z8u>X+T9%sMQD4^Xk%PjRF^^M0wXv`4V(j<^L}KT>%Kx&l?Sh)ef}%DC^6kqQ1r6-T_RGga@z;2varE zl06!G00@8q90Rzwbuc#3VV+%ZE~QiV7gVu`L6P|^D}Eqtf3i8z6?CTJO?Z0}J+hqo z7CB`R&n2XpVA^4wIKx4AFYm_Xlf}ap_TJOVzGwtp{ZlH-o;>XmHSI3>jP7ohAfktq z!bAkj^=5cW%AKU8Wo9s}Od12ABkyk>vMt(TGuvYx_;hIq_)*;K=XaOqWNK+3MroKED6| z4F5Too4a@L>ZM)%_4I;G{q^d38MtOG5e7OuGd()u9n_9suwQFbO@hKJ#ine3zON=G z&FMU5)4w6*LGw0c+>~HNjohzAD$@1)~7Imt6?mYjaX zMk|2qWFH_$6NlEk4CD^{ow}+eJjz;A<=D4D3{)%?GUCqIT>ds4t zWHwgco>sx0E07on9wlTMV0`%!`7=aXRFdME5SXEVNtWc9J*(rSNxV1CHLjOMs~B7_ ze0>WPOb!EJ@<>^}x;g5(AK-`x=H>l57r4?GXHS%CCmru-|3amDL1}@}+n7{2R_eblWTjV3OwJ8q#3T&I4MFeCHU?`<6*R)21X1f#c4^loE&3i!VGj;= z*j5Rwt1W?OFvmua6C=q8?una~$L$W4$N;kg$b`_sxXjV`qlij03u2T2V&g8h82_N! z-AR(59E#n}`_eV~8h+fkg4|j&>W8YxXbl+c;(hVh7&9bEotWY|bhO?d-e0p2N<6av z-Id-0lF)^rt{r+T#}ysk(~;rMrFIJkB)wPO%}b6Pva8!ab|2Rm`M9MWT~}H=b?eKW z9V<@-t3Rc8kbGa_Dz&D^#A?zFW1daCA zED~`{0y|WHw;syF%Y96JV`J&ou2RW;GI-O3NoY;{a@T8}v2x7`iRYxprJBM()gEnM zF>pgNUNzp10%=h;VBU&$#R=x5vTXtS(BYtDY3 z1jMA^G0oFG=Jng&`JaR1eMUY13^qd~2!dA8YgZ|yt^*!Pjvo18!Czw8UKPavR0^J0 z8`Z%$7BhYRJGS!S2jA~A;H%^*q2 zA}I^S)bVm74xsT`bemGl{ww_+I|~w(Ve0FVqzsfY=?l9r6a+o>byp_&i$4eVqZ}&_ zQ=7s(3(CrcMI+n005~)Dtd>mzjW-5_FTq>oyt);e{=q~3pOWweXZ~+oO_eKertX zjnZqlfgf5L10}y9LwFVpWKAx_ER>yy_n2b8_&zLd3(ZBqUO9VIx@3Esroj-G5hfEJ zz7yu`j9ervQW55{*&<%stVt5YcELlFO7?l9p*9`hL_W;?gX;15|I6vIG`hy`oM`az z*#D}$A29y49_W&pF5n;UvEH3NmB=z(*MAcKAOe53A7UP%WYl_UzYM_3AwJGzn3?FI z+2h}03H5ITvs(2eHa&}EUq}i6aJvjI?iD4i$^-H4-mBZ=Ga)iW^Ady?8W3htN?6e%VykcxCja~@4Z?LCsMWWBP;G(vb1m3VV=7~#^$ zFN?hmYykN>3XZz5;IjF^QVz}oEk@?I{9{H~E7}rf!e-OLZ2@qPY=8U8sCoQ!Gwyg> zJZrh<@DtHfMYQvR(H(+H*xO7=zw7-mL4qg;%5HzUabpLGo?F;|5@Bw`HXc_qI0`7vycDb{NZkZtB~YPxO~~_DQP7(!XkB96yaDQO~Es~s--iPly}7k zMjlHZ`;+@WC)f-|pWC`;#*=sAHO0exrBx= z5A8re!#+Sf`gxkVL4W@hohE=z8B}X>&G$%?Yn5ppKg%49%Ni>(U5;ijd)3e{kFEfu3YlQx>eU57z!T2@oBg%8B``6Y*1m%u zIo4K!h09lVSo$65>pgVzrRus10^dspJ~G@U4R{Q4I)7n(ij)owhD&Sfq={FrnDq@x zxw6lzua(KJUmej~i2$`iH#R#vAv>}K`8O}TSMKO+^GB@pofTk@+bZukHM65Mzt6y& zxdv3NNs&pa<^n@Oz06-;f#yrmmC{+adM98;7?RQ5R-UU-JNr}j4pmWG zgoK#6&^W-~uW(&rLib=(gp?q?*n!d;_PRpq-qza$#CfgsiNbupKiKoYp)E8#)h)+A zoAU&p4Hdn5?xy?ayz02`N~^JyXbUdvcCc`a^F&Dq2Y!B|Vm*=SrOVq&CsdtCy7-BB z%n2gXQcQ*>I*8MtK7DmxP}^c+zTU4JsH{V>gO z>?`i>BFLnbPLotWM+F~8oE#WZV-!-wE--R9SD@CKnvzLPQx}PmZ&$o9W&-^?Rs0V9 zN^dHth8?cov9PCBvA$~6fyM>mqEtx%l^Uf)yE1p0fH@{ZHF%nf2Lvy}>&CHQsW2&{ zB9P35NXPPIwuBIwoItgDXXJE=9^#+qR*@VP!%dg6!|CCYV1|>a)+1vj#cvlDiH*$1 zS!KE?yU-t)5?De@23Y*g=7N!oQ%z1HN6K9yb*(Ax0szQ`J|W##5UNf%*r9E2hKuGA zsi-3J)rKLMS`S;^PMOh^!-%gkrM`k5Lvu~?qtg5zB6mC)B#rI3@4LBWS)@`yPS$4{ zJ6L4LA&AHgWny$MzyEC&7E{2oLXd58A&;5d=e~lotEbocfjo?We)%0EQp|AyV8%>d z3XPdGjwQ4qIniOza@aMOn;3V4{jylUtCbie66~>ZK-Ad?trla1$vFz=^6}qM&IV-l zsK_`K+lPp9gDbeUlj)G_5P9Sk13t70O^CwiIbYPM&7(drO!%lWOf}*JxdzE#404ePmOF=v5mKy0+GKO3%d^FX zVXfO8J>oG<+Myw5PSh#_fOqnOmsdgF5cuD5LW(nu2{Yr|Y2-hzEOao_)luJ+DS7H( zC*2i^rZZeGp3hcU68kW12GGy!%6cyddL6J4(|+Pa7bX-M4jU15b`r3;!1g|LP6KNq znhjEG5T==c-m$I5J&pbK5eTnNvn!dbR{Ul>Imr%YQ(>jji~Ce*o_kChk<}11=alaf zS9hc<`_q!L>I;vX7Uds|Zca&Q4Cqj5MH>X}ziO!`DGHcP{Lqa%+lMx+ZrarTKHrlY z{jiK%Nljvflc=J2d8wRh$eKbhVR@J1|8Mwhsw5oNZFEV!8(D)^HU#eW(MHA|e8zhg z>Ak+b_8_M~dmySYCAmJJU6GeCE^t5V=Q%D@K$)>iu1(Jju3Oo#q4jN^2RHiHQf?(h z!3raS4snSkGEQ0M28V3?*go8Hfavflj6ARX0e|{?BrYPmYt=bm)6*_xXB1|yo}8JD zZ-U9S7p9Ubi%XmmQX<>4J?Z4_#n-l~sE2M0;>u5+)ZwfQ2q`t_cIDWaqw~u4G~B4G zx$~cbo?M-*CpcL}Q@RPmC%^AL;e@B$nz{+p0Lzh68y3s@y8=ZcXP{W!-1BbB{=kMN z;hF{l8UE4X?$`spY{RZ@LRFRJt0cE609CvMck&o#M?jYYpoky$uKPR(@Po^=h$;h6 zhMkjN!+}YS!Jx6?L|w#s;jZt}&#LTti z{;?vfn-x-JPk=zg6ZRr^Z>(iMYPFJwWcG8yYv2jeHL{SMC&P>&5Tme@TVx??;wkcX zMh^=6C<);jVJI^$KOr5kzp;46e=TeH=i-#uNp#Qe}|1tn2M z+ePr_LKc0(;rx1_(lMXNJX6Z-)h7olCx^pB@&1(ZAlkW_hvlu(Ae68#i*%+1xWdn9;7pgVqcEwMA_ z9pUWSG)No82r3r}1XdjlaXWtD{K_-`V$zR`kRa*0F(CofS6{z8x9JXIkh}sGpr0{J zD9+qa5&o&pX-eMd`b#eH2hs)q*#(AlkMX-h>^=qrmZn;v#1k)hJ<~k7Jrtwvhc=$d zalq4N$ zoVK;3;xlXw=Z?V5vtJsvIbvS@Oo23@6Paa??#+_suT@2=opCbKzN3CZtAJq$eF>J- z*J+2{wD7jCanDAqG3{bx>Yhx#)Ins#1=5V!*_LxmcrP3!MMnr$XW&hV7fjjce%H8i zJcl$&F!kGXtt+)0P6B0v2z6qedJ>RSx57v=u(XLrm=e4XL_trf5`yS!Fy>UvJ>kNj z9C>MkGYq{%2p=mB26X@vV;jS$;?CyNNs|QINk@9_Y&Ey5TDORZoTeHsBSvX!bpVCo zU=R?Sz5no$Z6~_XAv1kzp0K+ib3JLjL4#?&6L}d`xlK05s$6b3*Jm9Nu)K*Hu8LjB zBt#b{@Z$h14urtiS~74}!h8qfK}wXy;ss0)II4z{gcU(O077Cpx%7l}y(8LD%bsTn ziUx2}rOz49D_eBqyH_~8bMo%#v>;wN;~4T(NEV4Rj3L_%j^{5CP31(qb0Al^@h7uN z#5K-z0=;CjlG262QtcqzUNE(0F4{_rV;xy;&+n%E8a_LIW7}wvfXWe3B*Zm47SF1Z1g>H50_lZ;8M6jyGbZdrKj(dn{iLE=d zL_h5Mf7QPNXqu+F!R|&b#0fCW>$$64E3#AQ))A`9{odJetPwbI94o!;vR7YIHVe+a zco2sx`Fj8<*&Xmbu7fkw@KI+ls;A6BSSB7Wqg!XkM^|uH8`hIycV^)rnf}Oc+!kp( zs}`NO`S+c+umVTy+Jl8FMV{MmURBGogHU(UFpm6Gdp&A7=8OZTH0<| zSla&CeQQ;_-Rj?Oo^s+bVfK>K4&R_T!Vt3AFfpS1G8#OoINf0*IcePD{;-S@^)2gG zi>kkLb3zw3o+!iCae}<@C%Z~#ypky%un*y}{H{)NCULPHFQ(-jD&ADpqvxhsMZ7Ji5nlPI@4Q zlgCOt^ofPB;H{ppG0mKTp6Y?K=uHb?cFCgwv!p^dx$wbA4`P>SR1=c#GBz>JWb)?_ zhs=x*wo%0RjOg?BR5a7^AiD`C;qVS)5jb&kkqpa+G!U7dQ&`tLxu&VCsU{zXK^Vu~ zJJfSY3Y_2F&w%4iU4Tte-S9~po=3`0u4@i=1kCBfJ0w*fW_6o0O(cm+^vB3|7I#&UKVj!IqgHg1amhk?!$}`#u#H$Q#(Nz zKyj}+44_*9=`4e^(Wj0u8nDBa$ zA%7nM`pDu?{Deja9|OuHTQ-7GkrVo`wudsTx4Za1E3*6v)_>hYc-Xdx{+x9abA8u} zycG+k8HYJ18n$&@Ovkum%JX5 zC_wD&7XaYllN*meD9n?xNCQ^Svw`CGb+L~5R&!;OX-ssh%o@L!#nL~wr>AdgB2xrS z$^}Eoq<$?6liFGn^H?+`rM0#ti-3=~MX(m9ti z;aQoQSVkH(U582=L(_pX_(tO5RG*{+=ua0r$~@?i0P5rvOJzpv{)XD_nM(gLGRts_ zd4|Y=)fHczL}^Xs4F+{!!Z%0*7MtmRD&36Ub&m!ML2Ky{d6BbPKQUNuw2s&<==97_ z$AX^q*WP!oU`S#s!*dI!6AENQxJ?61EN$4du<-e!1 zZPC*C>7FD|kYcsbqTqQQa;}nU-FH9~cIW|MvH|sRB%gEJy;vn1nD%qSmZ!0y0R=U+xROUrV@f?sg&Y%y*kM zy~~7yCS<nJuH8`qd09;Y-OLkY&@sS0RUYIOh*Y}(iYyK%F7JUinlo%Qo5y|((PxQGPb^4 z5c93Kj>QPM<_SzsrNPM+rq5`ML7TcUm0Ul7_Rj%beAy=w6Jt)AND=CQ`AQPQ|CwG3sEwDtEGc~(g{?9`zz#Uwt3FDXQAZZh*M!Ufr$>tLcXbx;E*VLbuLrS@C{L}E*yY4 zPX&}$Obd*F9G`c+k(`3T6fK78&fuMGKjeU*xrhaNZ)v!U1Ff!>X||&&wTec3 z|8o>G+QI1l@m+>l1>B9qRo`w{^M2WWn9Wamt%^uU+7B_ES)lY@VWsCwJ(-Moagu~g zKv={gYTx=VaoKKanIoS&mXAmP!N4K?xpXN8yttkLj%&Janvn- z?6~Vh%d@NJUksW*VP+q?GOi_CvIe*z4;?3-0P0HMMA^AcAD+cZtd*97<)O0%3iv~w zA)V(8G8IdvfmIZ52FPH7DE!R&Un~BrsSSiR_rDzZ4PCE0#hJ%-Y#{eMB{2z{pss_v z)gKpbt3Pahk^kGeE6@OUTTq-IL`#kr+QxbKOj;6tzL%1dIwFvQ`6Zpz*-`j({}`n! z->Q)PCe-hWcXu9)7#qmdL|{=C8bg~!%Z}zMBX}<`gy;dhPo;^Zr-r<)C^$Iw2*Bsn zXB9dL&YHbpNrfVR4(BH&$Gc>{ulrggf;vuY#%m0Oo-#?aH;&$o<5-IFlO%~%Dbhe! zk?cM-_*X@!YPCa)vgH&60fm6Ce;lV9N4JQU zN#ekl%%@ODunKB4m?HK%Zi`+84`BvM+sOt)BC8K3U=b{`rx0TdIqWwmzI=_E}Y?wmKMj;`Dfq-a_WHFq5JztPs3$f3kJU>M|BeCq-PO;BVheNW`!ra@jyU$LqTP6Btg?uV* z3LqT~$p`?k)-jw~>}--g>HaQ5Ysa6DE2Z<%en%`$><6*%7hlp5*%~!EvK)?CnwVDI z*SGExfRHV^tl_23=qJ$VR9)Gp^mJOvx5g2>&cQ3qt9!jGSwt9`WwnFT(AI4Oq;K-t)8P$--!Bto+NL~haL46;o>J8I4D!11PXyr& z0JVp^&{Df3KOaZLG05uWtWob61}jeF`;T@TcDZUa>>eA|J~xn6#F1S;Xuxxlyc6} zjW2#`SBi=T;v4E?O-aCH)hS-9mpVC8#jZ2R@Hn{c(K4J~c&u+=W^VQE^}?0oR%N>_ z85Sq8c=X-NTK|I)CAclmnTjChGm~K0m#5p7NKabPtn5IGY@q_3VC{rxsqwJ%=VZ4} zJM92<+YOc8on*{fIkTNNz6yBbK7D~qwuw`>DO>t8*H=C7!-qaNz6tK}I?W8^anYeY;V{G$T ztwZTFzIU0eL%E;x8!l9N5jWl?bSP!GSv1*IUTD|ahCkn}`W-Jnb>r)pK!L`+jB|CE`{KOUYuFgU-{u`a8*XYu%`YFyl0$Zd4mK}czlh6B zdl*d(P*uqp7>gzTJlw6v^h#Aot}4z8q$@!bHy{s7z;2-S-`KU0v~`Dh?o4l~{TY0( zL&>qr?HFyCSxTBGqwFP{tqE8p-*T6-8@&W`%VSKe>R-P@Nc}jFdf(hx{Mj0l?Q3O6 z$z?hD-jd1n`U%_9q`_MoEW8v$eoD=W=`#D1go%YEQMB8@KL=}u;Y4vjc{c5j$pPwU z&AEoU0&r25S2Ef9-`AfKEB_%PXnu1ZnDv%@a@Js-t(2L;C2EwXehZ?4YPI8M+sYc)65$?Kpn z^s($4XSjSjTfgWlM`5foVf{G1o57CLXw*!TXr^gWHN|NfHl`atJ{p{&EPe6xn(22* z2?6I@1M=WNK&7*8(6SThBPtAH>Oz_+64=~ze?tepk1P{?f!#UNL&f10eF(833#|++ z-FzE>+?VXHFo@v$$oF958dHs1tom9S_ueia$AuUpQ7}Y5T)&4$hr(s38H1a)te+l@ z_J`;k#JCJF89h%9PlfK=8XfNnfExTW{o&Bi!<$MLQ)^h?A(&!Q6$iP0p!X@xpmhI2 zu8q#l)Ww%1?E~;uY4@@p9A&}b=8#l(5BQU5v!Q7y&Bi?pjNXuqjL)hBZ23(cUxwJ* zz5xc+!FCeglvlrWPA)+zA8&$AHBkPpvNCVT!xjXD^nbOO$i8pwNM z^O(Os*PCz*4+tXB9{F_}Vb^sJ26&>vx}gHF5RM%CO!6WU(RoDzA^=He0|Kz?_hhCt z&@+#fVr=~BjnuzYKw|Jjs>~%5G41zY)E6ig&7ZE((!U;+bAgs;E9? zFTM(V5;H1oqM<&a&Orq&eVO_FgM|&#$Cx1%H_O(~>FFWx(ERzx2Vqes=j-}_#Jb}> z7#}ai@{CviVtHsR9mUbel>^J&=UvvBiB$|^OyXGe#Eh+`AoG{g{s1Pr=p7px@IcS< zRfc}CD?`d}hHwK3v}JAzhJapgg&l~*w9ttyrJ8aZWi)_X*4&XbyCBA4LOA4)kk?%p z8qbz*jr6`(?rEP;S`Hv!lYte|XJAi35+H0XPq2^E-L^nE*a>)!R$VV4AJya#434m{ zIjg&U83CX#wrPL%mA4R`S{R8v*m^4gUBMVPr4a<&c8D~r+iYz>OQ+#kVEDeIil9OriC4I!41OA?- zT;+S^%D=dlM>76BXvSoE?_KXmJm>G;;vRD@Yb`%U&_X5P9Frj^3d-oK%cvL>ua|)2 z?>lUz%cwD%+puKPklrne87C>W&XHszAbE2;mIu!o8F^jJ*N#9==JQ3TC8vWc-BYu0 zdFw9vvuhe-1g9McTLNROFUYlouyg*q$@DV1a|YQ42chBV7T%IgSg(~o^q%hXH+Bd2 zwvz84x0M_DN|YffLPmV7dP!kMR7P%e4mTE4oB4{h+_f)piA2_G~tTt%HPQO%JS~ezIx|FLuY;^>y>VP(i>A7^MDzoHb9Z z&o67d2RReBaMgUo5tb)G7gmT|FvYFA1A#vhVdsg3^ZQ`;A*0u|_u9&&k_rAd=A=&v z5T1?)`DsJGTVya-PeKZ@Yp^n$IyakT@{rbQKsGPE9%76Py9SbPQxM=}9{0gsZt|O# z^tegUYc2!;`G{N8r;*AJxVcc!W2D{$=^IGiqdOEH5PPk&gVozp$E--G^s=w}`POCZq?#q-h?8G03G_$7F zFQ0E4!$^XtZ)Nj(>rTL?R!3qlkoW;%JF$`QY8Tgo1*9Ch8XLJKj2~ckDH2-^@9r{y zC{f&g39dA_`t_Lo;x~~dywxm_EIPw#r$o%GtJf& z#OAi1Z$_*u#@_R?W;CIa%raJo#+fK7z2+Aq;N=m>OF1F??4ZWG;~SqpCx)8y9nydC z$l$u@UE21zB%l#noJ$jgHP{+A?6%v!^zvwWT4)JL5eUzMf7>R!`uf3Xdh#31^>Yve zOoe~+p*`;Sh|Z-(eUKA?^%qlv0GeE)$&k|>w=}MD4bVmBuLH9nDzL&1;}sg{d;M+h z`|Ii2F)QqFn*MrOBZ}$doIvO_N!QWd*>X@OXCc>9{ijb~rOo`|D?mL5D3VRuPFSS# zF`%rV@){!=4QF%?DJ(gQ>M3T6%?P6d&_4K=7iGPr{X5lKR}B*voN1P8#;!^S36ul{ z4ooU<>^?{MRvYKSWAZ*kh4E-c&;kEKZowWus2voJ0(bv!zvL0T{YC#KM=i927&TYF zI%by+GBd!fA~cU$t7W+HE}>y%4zjsh#Sx-H346HsGoCf=hee zX%1NjU`OB?Pq-``**cIHp+8lzyeeAfJFyyz4xP*QZOib#BT>#QJh!)Cb-`}bs0OvK1~vqB)2JjQxkc+D7l3t@ucg>!rz+;B8!?MkF{4MsSp5*=oGBR-rED zsmM{2fqt|B3*&Qx}0p9+HJJ644G^sd=_Fv`iv1(447DH<_|d z$`C<%&9Pq#ObGQjNPA-w&(uslF?r6^x(l1yml8FphlV0NO9;_0Sn|S#Jm4yK;9m5K z9idM(`0)*&)T_2A0#@#H~D@9gu(u;7yzk5q1$55(4geVh%H&?*~f#)$qBp- z8GcYb`lG9sbd%iRnOY=}yQGHkf4p(32$Xn&wmAWMLc~mK`#;;4*PBOf2=DRe&evlg zT$eRBs&LI%Yv0V7gG^J3qBRY~p>-@2LJNtFd&-3?SVBXKuU72sVJ&84wz<&U0=DY7 z(F$mUqMNBecsyA`GOXM+gBsY!zLAMX+;)S_bAAV9o;CYuUf!ub1eg8Qh~bnaD6&(IDc+M6?|rYCqxQO!1qWT96&P1nJI0tjwA!kw<_Ho#H6jAHAjL@1J%cWS8`8n za1J#>GiOrgdF4iV)5XP$Zlg+Jry8ufIkV#6CF7^nH0rlK+JDX2eo&wL*jw+{{n-Y9 zcv*f<1)$mQk;8%}MdvDx;LX0lH_aYHvL6wNdB)iJF-sw_VM%@KI+E(?=>j||?`G9> z-I{LM$uF!W!nnncH_7Ks6(0mIi~NUQ*#BM#0R*?rul^O7VB5N}?6!(tr(%&7o;`g8 zecihQ^t#ZbJeNi_!@1qkeg&5(fcYq)yS=yG>8-i2YR=i;tMeX+e58ZQK!K5Yw$aaf z$5_7+ggt?DqcVrXjL?4D$kN!^V6{r`R^mk~;>LNW_>tw@}L}gqG^TwZU*9;gS}4q?6CjI z=qXvK7sXNKJ~sPAeJFHjxg>c>@o|+i16&iCDMZZ6_tu=i*0?CVJTi5Qorevkqk8H^ ztlD^grT{S7=*&-+)~YD^lzfAyRD4{Npb^L!0vVRn{6S`VY@tpkfd^y=!%k@3RV-!& zH3Gt=CyBQ0KSuh9Sob16geni2+%ZI@e8{#>9qqQyA}@%UX1o417fmbB7&I1L#UC*+ z&B4h`VP6EGl8w^=n`+s>m^4jE-;iCC?E#q@9-CwUTJL_v-T#L0p>LAzd`I}1s6Nz0 z0jC^+aA^|tCVqNkWIFy0fRJGyGKz@t-^^1)h>Nf9 zdZzFCYZSXa@a9Q3UtdIod#b+0%ep?n6T3wY9qZ8z0Wg_!lS!hN>!e%2-#6%i6XeMOL4He{71h_TbtG&fY|ouyNdK0* zXVUS8e!Suw28Xxx!TUp3BrcAj9$v8XPom4mmyRJ^;_ckRA<8AVY#mkw+8Evv{0|GLdGA;0&X?L|VfG2rm+l}*);0244e0r?0zRCDvBWssbP;) z;jC4LxEx2KEl%eH8x)ku(r7iEWBkH}nu(PN_wE$57wMT560#$fPW!hqj8O3Qzsn@$ zc!SGXypq&ykPTNGS;-4hTjq~bp#FYGAYp(%X7Z87%?=vNvtUA!v3E*IPU}2Vg2)^VDqsR;XU`j-PqLAj4piaZO< z#QQ@sglX3jaxo<)8N1Eh^;5=%0khre5!LHGW)PXr7OPa;zW&C^Y^W#0LNQ(0aHv4n z1Ji1^ZHw*TazRSafM@E|6G>Q4%+C+51yz^`@AdC$NQkEA=rUyKj`jTNwRxJ9ym)2G z`+38W?4^~*5)%}v@bA2`PA5rky|cu8zbD<3v6-kK9Q?QMvKi|g`kiQ!M%A5DHL@~Pb zSPd%+nuG~v&i^(jd8$EP1$M){QPNHjFr9fQj!j6{i$SMa%l)KHSZQg<1=0#mc~CsR zi`Yt^&`4PjB{Uf?F_Ak{xHc6CZ*S*jd?ryYxFoa=4W?Ms_*G4_7?E6YDW=3?rHHO} zEK-w2=E?9FL^z2_X)b~%81Qa=NQ{ZjFf~AwR7eo7*+UW(o5++A_+S$hO6_y#jIQRz zh-|AZbdZJiK*Gb$w5W<|Ni+drNIxclJOJRxMa4+; zIXiSkNV;R&rbPIj961}Pb61GnF$Ti0fhwbL6UyS4bW;L5YeAMhfQPvy%7>@9b&I8Y z&39AzoRoXnb)Vg%L!Kg4)Z$mhKMS5o1x+41tfU`1 zIo^F=({IVy#)d8D@dhK!E1x99{HK)rrahIq7ya&x_S$r3t=EUpFw#+P-E%IxMk7aI zwcE2V>B7!p%0`_Gv=W**YI_9;M_>kX96ds;WHQ6Xdu;L&1LbS1b&cpU_i{)kVZRvc z*C77V%jjZPy4{GX;q3_c>yGzF%jiemAhS3=&XG9}ZT8y#W2@hu- zIb^R3AwP8#Amf|AEtUL4 zi4%v!g+}m?j!U#IIe6SXm^S$8o|@JJ5KB#Av?gIK7ihu5@Bj zV-thP!DPzQLj0 zsmAr0{`r>1#ZurMo1p%*yENZp-<=6ToeIUM@teD|)69G;FFpY@N7J;`=-=O;$#`EL z+G0xbd0WRw_TbME(%o(inBB0!UNPW-W`6<|#`!Q2Vp8Qh^B18>hJVePd@|1&lO8?a zZ*{T}Z`ZnQ%MTzu zljM@@T$E>$L~!;Bzm(X{XU{r4QUHVulS&BCKL7xd^5`i^xBBjXLo3hyNSnS--+9LZ z{bcb{$;;QSfKj8{&EsAj=+ZuEHFMHsCmDOW4#Xmjh3NWw$LKIoX#kfNhCw$s2hah? zxD$L}4gkpf8_3xci!xK)MZ-COl3j-hWSDAml|LiV-(X=XDNx*jXrjU!iWe$x9?o!22Up89#Oj-F$#>%>jsdPbOeo`c?8(A)e#MmUR3wq2Hh@FYEK6a_K<`hm{P|4_n&*Q( zk>ZoTEH|#be7V**rnaE2WbN{xpU>U+slM`X%e@BeV|@TsHpC2uru#Bev69FG0AqRi z^1ny6kNzz$s+51Ks|8w)pxgdpp3>Wg?tdcLn?8^!;VJ)>gfYEy2rY33jJy~ZY`h6P zm8L%@ytG>i>J?zgImPbK61%DxGpI~2*m6dx^#*0 zP8B>Ro;iGN_<3~5AnTFWBNq0G>{1xZvD{+)g&i{BV@c2$%<;=6ADfE=Rct)(us__v z-C`I~6!^p@aKXy$%P7a8{^OR7o5sP`Iw`xCM9+_D1&H7riNnN;%1bA8B_e0kQQi)6 z?NGh6qFgGeC=)x{&63fY6w&plc1bg8$KV~;5a+Z|C)Sm3swfxlJdRHz?c}IxtA)sg zfSm3B{oK3n&!2tfYNYkS$fJQpo4nm3Qj^ zAdSh{$;G8i?3CFj9L|h09@YHf(mm7>wS9SA`KTzkeBcuE%H=B(ru}Zpv|7qxPm{8Y zp-{WY)4ozR3z-Z+J&9r9CzAqqQ|7El=Ak-%N>@eG74)7X^(Y)#n5)QWFq(f|aE(K& z->S8o_>GT8^E|3{9b}qklSBEhSo{iEaFU7#Z5L*F=T(F10JdIy?jc6(kLrkVFUkS; zamG&Gg6&9}nmZ^Xc10e@dmq5`OGJRoxzz~15Zgw^`kJv=JPVg?1@KZ!;+n)br=0rI z(ftwJr^PHp72XDU{ds;pdZ(Y~W;wnHi5t^w@-ic|5Nr@n_V8^C*6gK*_K!JuJxzN` zLkucyXZHSu>st=fQ*6N{f-XE7z=kT7+?+;CWoNc7hE>=(1*9kye8GY39d@lQogzjm>z*-K#BthXB2pr z>uOn*ppNpnM;HsLS#fyW)BopPY9v?J)Hz;1N-nf_s+c~bH=d01+3MC1R>tE=DDN%r z`Eflj+$IMm>4oanwH)3Yv_lY?sG_l@RS`|R9e}p;>crTRp@%Z*PTNGXjdyV}S6)*q z=OmRfY$#E-yJX4^{P?{*C)`3#3^30q1H6oc znL55XJ<|4&g0?_eJ}#zE91fDx&Hc-A6GEQ0$BCpzRz!8v4-Zb$sodfNaa5QyZj%j^k#DA)kdGDh>2U^x;P#4r=aBdv;2{OQQL! zS;nAKqAn7z{&Dx_R})Mi1mYwBn0sIE>Sj?d*GaGmZ!L3_YU_1tIbr6~)6QlgSY+M=M;AlXUQt5NL=&Pr`i;E14C zHvCJv{#E0gdQAsjxgUn##qC7npLTkhe&!3io012uWi8F^eC5ZJd zh!MsK>MF?Ne%}?s+Hu!K1&Jf7go4%*<~UC*s}^6%>$`>3gwy+|I-$#ZxuLb{L!6ZM zUlQ-|P;}|7bz84i_}=nV26-2F@Z8tcRtSMK*L}RMB3mPrRf~Dd@zx@NlvQcgO9Mf$ zPlM%Wley3vj!q=ZB4Z)|RakziR~Pwp_4-W!W(T4`dX(0ve}MsZ7#r`M_}RZ`=J=_2;6|4eRQgWF!|ywsNQsDt1-R9sOjm<;#3x_iO!X3 zUwm~8=oD9jr^~I z!`8;ZW)|$+w?GfCvRB(&?7;=c%?%Fk_Oj3&-_cxiWGzkiJYj45XmDr-Cd_yZUb?+92|2l7#-I^$mq_8nY8kvSh4}fPWM|T$hPnvQ!zBes1zmjqs zDhxnog^^hF8oSw#Ifo@+HM;yIwFbau)FgxMY7yh2U4>3x*_;Jr1&dBEj0?sEDkPZ< zcsW@u2-uN9l_4$6tP3MUow+m%aoH_#yFVI<=>#%(L>YVynEiq06z&8<+9$2xS~1Ec zgMH79^3z0vmZa7sXPoQp6E!bO1X#;i*jtko|2oFZMy*jhsYXBBFr`m6Wd&H14yL>l zc)jm-9vig$E~ew0Om5e(Ta0eh&9^S!01NS<)%6@9Z|=&NFz=bEdpFDCY%_QFm<>HE zmQQlsb}2q_=jeJ$$Xwts@%P9o{3F}Y5LW#M1_%S2ai44q4KBm+(9p_de=@sdfVL!< zUq^BA7v|wB&*F^?6cEEVGJB#stx@f*7`eR2PETs0S<~=Mcss>L zddd5v!(9i;A~unzw7Hf5D4FE1@I|xd@#K6uix@LenZ54t!XOrJ&{HDU4LR7Br@)E zKi_Y1=J2IGkG(GIeZMeY*g3#`D0-jI?dSbW%v*1jrxeoL+?o~FKk5%2&=m{T)ns%e(nEccX^cPS9bL6{3$UHLw=Ak!wu5=K zB9$=-AnU!O_UUvc8kch1zq7=7#A?vd@J)dBF12GG^oE+*u5%l{_WcnA2_TE)_zwQk z1BV@Mqlh@%nL0qfHo7w@FEQx;A_7z#=~Sxh^lUPcphu3cXW2uHj*|N*NGQS-Qj1bK zO+R}Unb_jXiE*^6e~nH?M#8dT<^UqVnj`UL^_r_zIF2w7VilhjUc`_)m)x#2teVGn z##`G%W?7ECT$j(99vRcVNVjx1h4Z0uLCPCjJ>XLqR2ZLiknV(nbKxnpes+bu+jdMq z06jp$zewO@Iz8=RO5tSW9{4(sUJ#Hs$r@rqpfE=gE61~7Tu=}>RVNXr>GXVuLjSyt z5&O(-J>GrCZ_eK+D8v=2j@cY%Oh+^H+t9uR=`-Dd8)@hStyIFTdHY3LR+ttDH>yHc zOP-d5CqMoWrQb9$DFcgVbEL-Y(dYTD1N`7^7|>hYCO#E55rhaI^M`ABiSZ4d6BLQx+q-RBNd(F>YQ)78<$<4ST@I!z8z)2yh**S1Qo*=* zvF-W>@z~StSa`^qzQWp}8H*Xq`aNIWQtR*V`)Z%s+`0}oU>o>RyZ<@<(#3SO)FtEi zYkOXR^p109a;TZI&Yv(-ys0%&6+m)Ea>CzmKUasP8N|USqVpP-rD2^+$)J6)CeE@n=k6z zAtrboSj%0{4S_8-dqlP~@kcy6eo%0eu&9Ijn_KRp6eZvTasFsRI8IZ(@4Dt zIii03s`=e{S-;1tkI+D2q(Bit5-3SQVoOj7N;ncRz099lv$e0PZe~?of2R7$)6`{D zia;Wg6Qa4Q=)eS)GU_{}gkIuLso%H~1g!%}qL`DI`J0kY9hVsI0MG$`vk8Z@WRrqE zUGk5&SF_i`2h>~GETo1fz&-l3eA2*H zY$+rA@`F*`+mF4tH?Yym6@eYmXm`P_kk z;kQ5AB|yY@7VSDB^GfdK!O0!6sNwbZtr2pW1rskdPF-zC-Mb~{xdRf%onv^#occbsV6q%+f1oKlav^ZqwXV*m6$QFl;qV1nj z2;5R%`rgbd5j#!Jzls|@#`Ebw!4Y9&2t{Q7l$?Lpf+mC1hBubw@CI3AGT)FptGXtK zMoqe~s}rQoo_U33xa=@z-+Q_!gKx4da(KgiON6`@gea~dR9Dc;%eIoAKP9h-2M{t$ zNq66h2de*8$lR?+Dx`pEd7dLtJYiyr&`Y}3t0~AO+9g&|QLYG&(Hw<^sz{x%5^kQY zFHMQ#7D^(OBW(}5RV-kpsD-=17t63Yn8If&5bT<#*CHhCdW|~KmK9-o78C2v- zJy$xrhsIWkAh1txDD^KU&Y=w+wrOIH?Bj`5KnLGG;J%8_M03l7Ml~XUXf}rWY5V3GbTED0!?cTCww-YKi zS}p@t|0**>C0|8Y-S66O)#%VV+BD>`TDH<#;5wvO2e0$)1ejE2s-HK z?HBQWBuJ0+V9MZjyQ0pV9<-P(Rt;n&!!4wH?ACho4$aO$$vDJ@O8=<%zE%1 z!Q#}Z`OiG6yHyiUO-^@$n=5WC?_3$==U}UaO};{+C~p?~vn7k{Y8@;lpS`^(6!>`3 z{1Xt@PX5K}rgidavZ$T(RqOhkS+;3PqqQx^IX4hx0pz!&kW@YDJC?bZ9~f-rkhV5^ zkT$eYy1VQC;otBou!3TC(qfu-#=ss_{E7L`ABg!ZOfM~T9x1fmj5|Z694YUyd3af2Xr}r}4FjE!3aeD!UVt#_LKtFA04=7z+j2Oz} zVS4FPYp|Y0T2mD#aB<)@uLsy|uR{H^_o;^)rU8iFSNge%XyN$Pu>m9lo#0dir|0zI z6Le2Z5yR8zbDu@3u*sELO{rY8HKs;cRqI#64Szx>0IKqSd!E!{IEJz^CJ3GjZI037eCdwTeHG(F*3FW%{4a8H8m!g$lU#i*mn>vNp|1YVG>)feLCEpJso@v zdqs?d{oYX+xMi(%;ZjQXDO7-whfHUP@aS=G+4}J7S2`U>!Y#+fhZeU<$z+Q779Sdq zUG|(fUHNa|Fd8!)pWKbzIx7 zhBc~`(>K|BY}v16WN05eYlA% zvAJsB+JDGoP1PyM=zL91X{uV%8;_xILXu=L^u(#H@g6Kn3YHfOTq0pmC76v0AGI`& zFM=VSXq13-ijkEXcgD~3oKfw-zgaSuf?d?IN}Prz6v{=g62KItdKw^6rO{ytLJh0Z z94yuDmty|SsvT+X&-3_)vsay-OaDz7;+#VX1;aoTJb35eP8O8W^YgzS&YS40yLaw~ zo!#_($6lZHH`Id%eXRvp03Ui+3p@jlX_Ed=_rE5w2y!KJm+XVMc|S4is@byoDbKo! zXR9Q5c+AU90tg2z>1I}k1DP(TBFwa%gh5sAw!7xSfd?DOA%bZ+-0Bmk+V_$?2vfah zODH^Z^?UUd zO@ta=c1X$BsBon3hl7AnC5bM{HkZAHnlKOHum_HNh>}UH|4uS5I$OYC!trq9!_r)P zM|D8gOQW?E7%WOt2Mus&c4%!9JO>zY$so~cI7sj==0yXwj9IzV{llU5wdK4{TPoiX z*zB3@ISwTZ4iYVgo0_Ty4GJnTj3y2a{*Og%*g2|OaZW&78&HH$yax}!E;1C96f=N+ zOtJVhF8P;2-5=s!N9@*9B-^LsYAas<|MWT@E2&avcTDi>IR|VB8DYrZWq^!t>ya`_ zP4vQJ8z-?}cto-(SL5^_rJmc#c|s^Pf83_>X={dLQFrr7b8<6?YmAuNj5zk;32vi1 z^Mef`ZyriYe0v~}_&6Y^LS-a1FhKFCix$=`#{$nW6`W@J*F3+n)qr!q1{-abpE7o0 z!TcxjNg^tSnu$Lja6H&?&e-=M?D=)s?4mbHtM{C~lY&t;jPKJ3Zp&$-g?gIPY{U$T zA3{U%rnBFDpEaD84>lZgq5i?+uokcRoY z+10QDTu`0y;$6x>BbVFezpT&kVQ0-QI0hPpK~{+)jm5YOlpVsA=Ww0j8xv}+gTY}C zGS~G1yfEICw+vPiZs&|NZ9|q>a-soT1+?fa6>DeGuD6=ciF7N3nWQrjeL*lh$+UC< z%P!E(vd-MT$@y%KQBkq?YP#F;mfOavl*kB{m1lP+?|f^RolT}ouzd?sCC1*-T;z5g zp}JRFyG_yUcaH3%1`8xCpQI?v*%D%;Ww1ktkt^TfB*Ql#)TV@L93M?X3Ax?S+nK2l ze6~xlt;Qf(V&V8qGa48bVC2ZjW4en3qzIvfds^*9!NBi7gCl$T3Y&F-GorxNrFjk$ z)@U;ebVJ1lNB;B<{Pq^slmv~6g1d7w42%{%s;f$*emgR-Oa4th>WA3=q6hLJA?~PG zDXp^A5ICo@Sdq*7iBdebk;vG_F<*Lvf2*PufJ&!{JX6@h5f zQ7XQ0=%g>`WB78he7$^_Y`SG%HhH`Uw0irUljf}rBhCCQ;c-IB7OTz=0 zD97-#OLFu3C4uNIj$$W2iJkFXD8H^h?@|-5i_-bmM9;SdinYCbn_#=!E}22p4l}m- zHjwMOlN9j?rDG#Df- z5G6~K0UI3>D@nRu$obFZF7AQrsKbc!h*P>E^rf>PI0nEHY%N|Hx$>ScxZEq$HM_?g z8*SuJ_}7pKG3a(#`P9wnQ0;-B-UBv;znN9&ozyCaN-MSR?~G0AM&Z8B2rl^5guB$e z&bicB^h=kU)LhluIC^@mvLNPm9EJQoYg@LdzF0qo5dE6A&EwV|hpN~vq-zA#)}xZc zOsCq6*l!@u&^pzlfSV)L0E+cKkY~$E18tUquu*)k%YEE^m$mU$W4jHf!2Re|coh z1#nDZu2gTBD* zA7YXqqQ>mW-ZlTSx7TQ;ZRHP3E77@j zTJIAK_T%!QrrS$I8(k0~;w4LQ;iKAf<-Q=hxxHhMw$=?R##R3d6sn3_zsqi;8RZfT4U)g!bj*ef-`t2Gwyzs466i#PPv8X7E2 zmS#%-P3~w*+)Xrn{?jz7ER7qJYp%h9RtyaiVr@mnDf@m|>(lY?x#*-rs;EiS zeMNDxqvw`;`{K!3rP>@PE(@Y8nlrJ%A)_h!r|^^}&~`AbFZv{Jr|ZB)&@+Ip02n^V zR~l6b=(`2iz{9K)mOeho{mTKr7Qhhe5Uw8rG;olG>0Z}GOJ`IHu)M|0BR?Ngv;5{3 zF!a>XImGfROkwWy6aa9Mf(MnrXLnK5bJZ$Z-5b4nH8FPVn404RUcX*jy^N$(Su!)? z7i7r3(K~LjTvf`Kp<9!y-L+hyBR@GzWj#;Wm1aV!3*o1{k(I~TBE-WzK#xODn_atUzr=Hs=|qu?-^M2;UFP#QQ5G&em1R1n}-?+6`#f9JT7d7z35MR zOYwAB&cx(a<|XdG%Bo&Ffz*VZ%y=+WeTVLGjynDK{EaXZK<{xC@wv3UOL%sKjFzeWt221N+S`T0zglp! z*0yzVtaGt6mhh^D$R$%waYcD=Nb~P=8~C+)!_$$CLmQyhEEM0N%!#P8IJ(;uH?4G5 z5S6en*m1lG?aLFwg3{^S&mT#hOn0ve(?Bw`-9Z0xsTtbZF;pEP-7p@811NQYnkdUj zG;Z5NW*{l4G$J>$A>GNDYZ_ly6X#mUP)2U3BqyQmlq%F-W!o$$Rt&_|pR?HB?66F3 z(Z(ZJf<3*{F^RG@>9CDQ{uYjwmimvlJU{~@iHPf%4I6ehuG;_d-0354x(C*8MUPz! z@nDLh<7+GMX1;V(sIvea6ZP&2;C|N<4)l}9I2a<0NRXEPlF3}cf6%e*DW?%pRFG(gN zb*T35SGC$=|57QDX!I-EEIq@w;T6?B0^t^Dnd5+DLr2;RD%O#xGLorgSx5Qx*&lc< zJt-bY(|WwRty3fB0?`hqc|$zw{@h3u1I)v>L*xS2{I!df8@E@2!U6-dfwED2C0$@f zUL;-&<(nEoX!I{VFbQlijA4XuG_ek!#iM5 zE5A8?TZE#MW$b<>Q}Y>(DLhE`?DHHJcSL3OW43DD17c(*FatyK)oiFd9I)dJ8;dBC4u~SvWadku3Ei`L7y@Xeb(@V&%BaD zheL#$_=a?Wga#ySI&`$@MM@@Mw5@sXktTG_exx}F@Y=p>qmV)szR*sY_d-w+48&yS z#nwK2Qtf4z6m#Q}I_1hWX?k}W$VzT6i-|93PGiR<7q^h2?eCnbNJrRZRrsc2vdn9a zovP&KVLU#OCmnXlR>;<&i!S;3UoIrC4QT^+1Jw&_&36B4YKpoLfBea?$UZr~*K4C1 z5d_{$GxYUvuFLriiue}aa@A$M%;e<%JA~(ES9dpd_Ozm5j5eUwdJiY%!sdLPwl5yA z@~&I3;Uz;Ok0!?CCgxk~!f!ZKO|8kCEw~5=j!)J;q&y<0lXcSMjP2}XCKpno+uUxK z>+-uUS3rSQvAV76-oD-XK%45krn5N?gZ%RG$^8OUJc`M${kzdNYiMM3J{HohfsQgZ@+& zlHjGA6;k6>;ac|XZ5-Fz*U-3k#`p3Xx!V17_(Yn0SXt^2?1REm#muh=bPp*BF%AX= z)%Kkg_BamZ73={!zV+Vq)nS&*Tpvp?_H+BviWRfV`%TMdrAuSRO;#)~Dc^WFQ@9H- znq>3Qwn7I4f3O+&@3HycX62WaI=%hMf#j1PY04RxIyJQX?zN3kV-a-;)qDN44W&})6vU&de$|s zZ|PhUos!pHpQ|$HRc?7)B5c2360AAe4G$Myk1 zE1c{G-DNqF(a|X}v{URQ`E9q{H3=NQHB!NP;{xB7^E`reIG0Yk{^MZGc#nkfNxx%MK*u+Gv*AHq#_CUMH;RwMaXpqwQ9z-6a2r@0oQdQaXlvhckE%Wr;f1 z%el|BN+(&YJL!ACcantON_50{rZ*+0KF+k%q|3HARLxEP^_EIzNjlDtioR)SrCJ>Q z&BnCQGZr4Vpl`0#Yc*vV9rcIr3FA;k!mY5`*`x*j6Szg7f9jh>mhwbP+rfZ5<8i}x zPi-bpMZxETeOLu5QStLeW0o<%ys_LQkdJAsEj|do1qXLvvK)?`2D)p^BbufKMWoYy zn7K1^%FA)ix#gebKaqhGvJaRPCrI~=vd%`@KJx{v(c=H{0u`IxlYxYcC< zSs<;=xZ?566bT@tYDyS2SVyYiuuua>UAb@jhf^?}m7ib%|59-+%oC(L3i<+Nn*VPN zdtcS6!i@F5^>aNj;A2t6(K%9s9bq9Q!Rso8H^?+yEfDdlnOq2)i6t26y)@jDhnjD` zs9(y_0Ss@)<0BDHXnQAF?+fQrqR(t^*1GbNhb877XE*4!p4=MYAB16)UtgcKZjjd+ z7e`H2G+qOreLCNU^;v|k#(mjkAXtnTwsbz99c;#KB>E3-rGUVe(@kSq#Tw>G_Jc*% zFK8OSTv0}ar{eOm`ffI&%CsERg|HFf*{K2FIn>PT>}Y#|Xl<42ver+K2YffH;^$HV zkW7lsI{#S9I{uTI)-BGZCG5D*zpew|yt>&ft${k@7g!}<9{ip$dWr%w8y^1Mj1F?Ug^9nwCDuIXZHt%b0sF1{9>AXwXg3>)-#_83 z{ra%ojK^k2>MDgj)|;@~I{e@J8$Hldw4-S30h1^6hX>WWFK(PMdpLa+>iUu;^t_6k z!AV4Uxat65xb^@Kq2U4bPxAE5-mVTt*TZ(kXjgYo!u~ZW6wc1lMc2KUo<7u4ez5s_ z(Nk=t_z!L*wqs{|JD(eNY&Egwi5AD#CZvvb+HhX?`ExiTE~s$fu4;>a0&YNbRc|lk zc@Mp$!CcCKQMZ3TZzp>(n~m=K@E)zF?CQ0&-HvVUoqgWZVmN{#=(c{r4K~woy!ris zm`i~(17V~{b;m1nPRE!r`w^Bx!Y|@pA1B(7G+T)!=ZJum#|`F4Przugz9XHyYgNto zo_fG+0q;cH!p+&|#F`a0%^Uw8S9>20+g@du4b(6?C>NHP4{c&*#rsPfIPyCk*ilxR z)r+{eVs|h{rWq8+(L>{DG5^F%lf%KtbccAky@pYV&avBdZ*uM&3VPPYQF67@z=WAh zg+37`gas5(ijrz)hX}JRhJ!LUGyG9Z42^F0%(Ut64Jc(7016)(??bC{F)q_1y_;7a z)~QEPsm=9#%{WR*Wpd~tLtOEM{!RM≠dR0E9ICQ{-tcR;@{R^I5P#1GUH!p=-{c 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 literal 0 HcmV?d00001 diff --git a/docs/docs/gitbook/gitbook-plugin-anchor-navigation-expand/lib/config.js b/docs/docs/gitbook/gitbook-plugin-anchor-navigation-expand/lib/config.js new file mode 100644 index 0000000..5340037 --- /dev/null +++ b/docs/docs/gitbook/gitbook-plugin-anchor-navigation-expand/lib/config.js @@ -0,0 +1,74 @@ +require('./log'); + +const defaultConfig = { + // 标题是否显示层级序号 + showLevel: true, + // 页面内的序号是否与 summary.md 中官方默认主题生成的序号相关联 + associatedWithSummary: true, + printLog: false, // 是否打印日志,就如同自己使用了prism,但是很容易写错他的定义,比如css写成了csss,文章太多的话,生成出错,但是找不到是那篇文章,打开该选项就能定位了 + multipleH1: true, // 多H1模式么?一般正常的文章一个md文件只有一个H1标题,这个时候就适合关闭该选项,生成的标题不会多一个 1. 出来 + // 模式:分为三种:float:浮动导航、pageTop:页面内部顶部导航、null:不显示导航 + mode: "float", + showGoTop: true, //是否显示返回顶部摁扭 + float: { //浮动导航设置 + floatIcon: "fa fa-navicon", + showLevelIcon: false, //是否显示层级图标 + level1Icon: "fa fa-hand-o-right", + level2Icon: "fa fa-hand-o-right", + level3Icon: "fa fa-hand-o-right" + }, + pageTop: { + showLevelIcon: false, //是否显示层级图标 + level1Icon: "fa fa-hand-o-right", + level2Icon: "fa fa-hand-o-right", + level3Icon: "fa fa-hand-o-right" + }, + // 官方默认主题 层级开关 + themeDefault: { + showLevel: false + } +} + +/** + * 处理默认参数 + * @param defaultConfig + * @param config + */ +function handler(defaultConfig, config) { + if (config) { + for (var item in defaultConfig) { + if (item in config) { + defaultConfig[item] = config[item]; + } + } + } +} +/** + * 处理所有的配置参数 + * @param bookIns + */ +function handlerAll(bookIns) { + var config = bookIns.config.get('pluginsConfig')['anchor-navigation-expand']; + var themeDefaultConfig = bookIns.config.get('pluginsConfig')['theme-default']; + handler(defaultConfig, config); + handler(defaultConfig.themeDefault, themeDefaultConfig); + + if (config.hasOwnProperty("isRewritePageTitle") && config.isRewritePageTitle) { + console.error("error:".error + + "plugins[anchor-navigation-expand]:isRewritePageTitle 配置只支持0.3.x 版本," + + "请到https://github.com/zq99299/gitbook-plugin-anchor-navigation-expand查看最新版本的配置项"); + console.log(""); + console.error("error:".error + + "plugins[anchor-navigation-expand]:isRewritePageTitle Configuration only supports 0.3.x version," + + "Please check here https://github.com/zq99299/gitbook-plugin-anchor-navigation-expand for the latest version of the configuration item"); + } +} +/** + * 本类中 config 单例共享 + * @type {{config: {showLevel: boolean, associatedWithSummary: boolean, mode: string, float: {showLevelIcon: boolean, level1Icon: string, level2Icon: string, level3Icon: string}, top: {showLevelIcon: boolean, level1Icon: string, level2Icon: string, level3Icon: string}, themeDefault: {showLevel: boolean}}, handler: handler, handlerAll: handlerAll}} + */ +module.exports = { + config: defaultConfig, + handler: handler, + handlerAll: handlerAll +} diff --git a/docs/docs/gitbook/gitbook-plugin-anchor-navigation-expand/lib/log.js b/docs/docs/gitbook/gitbook-plugin-anchor-navigation-expand/lib/log.js new file mode 100644 index 0000000..4af71d3 --- /dev/null +++ b/docs/docs/gitbook/gitbook-plugin-anchor-navigation-expand/lib/log.js @@ -0,0 +1,16 @@ +var colors = require('colors'); +colors.setTheme({ + silly: 'rainbow', + input: 'grey', + verbose: 'cyan', + prompt: 'grey', + info: 'green', + data: 'grey', + help: 'cyan', + warn: 'yellow', + debug: 'blue', + error: 'red' +}); + +module.exports = colors; + diff --git a/docs/docs/gitbook/gitbook-plugin-anchor-navigation-expand/lib/plugin.js b/docs/docs/gitbook/gitbook-plugin-anchor-navigation-expand/lib/plugin.js new file mode 100644 index 0000000..e9541c2 --- /dev/null +++ b/docs/docs/gitbook/gitbook-plugin-anchor-navigation-expand/lib/plugin.js @@ -0,0 +1,370 @@ +var cheerio = require('cheerio'); +var slug = require('github-slugid'); +var Config = require('./config.js'); + + +/** + * 处理toc相关,同时处理标题和id + * @param $ + * @param option + * @param page + * @returns {Array} 返回处理好的tocs合集 + */ +function handlerTocs($, page, modifyHeader) { + var config = Config.config; + var tocs = []; + + var count = { + h1: 0, + h2: 0, + h3: 0 + }; + var titleCountMap = {}; // 用来记录标题出现的次数 + var h1 = 0, h2 = 0, h3 = 0; + $(':header').each(function (i, elem) { + var header = $(elem); + var id = addId(header, titleCountMap); + + if (id) { + switch (elem.tagName) { + case "h1": + handlerH1Toc(config, count, header, tocs, page.level, modifyHeader); + break; + case "h2": + handlerH2Toc(config, count, header, tocs, page.level, modifyHeader); + break; + case "h3": + handlerH3Toc(config, count, header, tocs, page.level, modifyHeader); + break; + default: + titleAddAnchor(header, id); + break; + } + } + }); + // 不然标题重写就没有效果,如果在外面不调用这句话的话 + page.content = $.html(); + return tocs; +} + +/** + * 处理锚点 + * @param header + * @param titleCountMap 用来记录标题出现的次数 + * @returns {string} + */ +function addId(header, titleCountMap) { + var id = header.attr('id') || slug(header.text()); + var titleCount = titleCountMap[id] || 0; + titleCountMap[id] = titleCount + 1; + // console.log('id:', id, 'n:', titleCount, 'hashmap:', titleCountMap) + if (titleCount) {//此标题已经存在 null/undefined/0/NaN/ 表达式时,统统被解释为false + id = id + '_' + titleCount; + } + header.attr("id", id); + return id; +} + +/** + * 标题增加锚点效果 + * @param header + * @param id + */ +function titleAddAnchor(header, id) { + header.prepend('' + + '' + + ''); +} + +/** + * 处理h1 + * @param count 计数器 + * @param header + * @param tocs 根节点 + */ +function handlerH1Toc(config, count, header, tocs, pageLevel, modifyHeader) { + var title = header.text(); + var id = header.attr('id'); + var level = ''; //层级 + + if (config.showLevel) { + //层级显示仅在需要的时候处理 + count.h1 += 1; + count.h2 = 0; + count.h3 = 0; + if (config.multipleH1) { + level = count.h1 + '. '; + } else { + level = ' '; + } + // 是否与官网默认主题层级序号相关联 + if (config.associatedWithSummary && config.themeDefault.showLevel) { + level = pageLevel + '.' + level; + } + if (!modifyHeader) { + level = ''; + } + header.text(level + title); //重写标题 + } + titleAddAnchor(header, id); + tocs.push({ + name: title, + level: level, + url: id, + children: [] + }); +} + +/** + * 处理h2 + * @param count 计数器 + * @param header + */ +function handlerH2Toc(config, count, header, tocs, pageLevel, modifyHeader) { + var title = header.text(); + var id = header.attr('id'); + var level = ''; //层级 + + if (tocs.length <= 0) { + //一级节点为空时,生成一个空的一级节点,让二级节点附带在这个上面 + // 在显示层级的时候不乱 + if (config.showLevel) { + count.h1 += 1; + } + tocs.push({ + name: "", + level: "", + url: "", + children: [] + }); + } + + var h1Index = tocs.length - 1; + var h1Toc = tocs[h1Index]; + if (config.showLevel) { + count.h2 += 1; + count.h3 = 0; + if (config.multipleH1) { + level = (count.h1 + '.' + count.h2 + '. '); + } else { + level = (count.h2 + '. '); + } + if (config.associatedWithSummary && config.themeDefault.showLevel) { + level = pageLevel + '.' + level; + } + if (!modifyHeader) { + level = ''; + } + header.text(level + title); //重写标题 + } + titleAddAnchor(header, id); + h1Toc.children.push({ + name: title, + level: level, + url: id, + children: [] + }); +} + +/** + * 处理h3 + * @param count 计数器 + * @param header + */ +function handlerH3Toc(config, count, header, tocs, pageLevel, modifyHeader) { + var title = header.text(); + var id = header.attr('id'); + var level = ''; //层级 + + if (tocs.length <= 0) { + //一级节点为空时,生成一个空的一级节点,让二级节点附带在这个上面 + if (config.showLevel) { + count.h1 += 1; + } + tocs.push({ + name: "", + level: "", + url: "", + children: [] + }); + } + var h1Index = tocs.length - 1; + var h1Toc = tocs[h1Index]; + var h2Tocs = h1Toc.children; + if (h2Tocs.length <= 0) { + //二级节点为空时,生成一个空的二级节点,让三级节点附带在这个上面 + if (config.showLevel) { + count.h2 += 1; + } + h2Tocs.push({ + name: "", + level: "", + url: "", + children: [] + }); + } + var h2Toc = h1Toc.children[h2Tocs.length - 1]; + + if (config.showLevel) { + count.h3 += 1; + if (config.multipleH1) { + level = (count.h1 + '.' + count.h2 + '.' + count.h3 + '. '); + } else { + level = (count.h2 + '.' + count.h3 + '. '); + } + if (config.associatedWithSummary && config.themeDefault.showLevel) { + level = pageLevel + "." + level; + } + if (!modifyHeader) { + level = ''; + } + header.text(level + title); //重写标题 + } + titleAddAnchor(header, id); + h2Toc.children.push({ + name: title, + level: level, + url: id, + children: [] + }); +} + +/** + * 处理浮动导航:拼接锚点导航html,并添加到html末尾,利用css 悬浮 + * @param tocs + * @returns {string} + */ +function handlerFloatNavbar($, tocs) { + var config = Config.config; + var float = config.float; + var floatIcon = float.floatIcon; + var level1Icon = ''; + var level2Icon = ''; + var level3Icon = ''; + if (float.showLevelIcon) { + level1Icon = float.level1Icon; + level2Icon = float.level2Icon; + level3Icon = float.level3Icon; + } + + var html = "

    "; + for (var i = 0; i < tocs.length; i++) { + var h1Toc = tocs[i]; + if (h1Toc.name){ + html += "
  • " + h1Toc.level + "" + h1Toc.name + "
  • "; + } + if (h1Toc.children.length > 0) { + html += "
      " + for (var j = 0; j < h1Toc.children.length; j++) { + var h2Toc = h1Toc.children[j]; + if(h2Toc.name){ + html += "
    • " + h2Toc.level + "" + h2Toc.name + "
    • "; + } + if (h2Toc.children.length > 0) { + html += ""; + } + } + html += "
    " + } + } + html += "
"; + return html; +} + +function handlerPageTopNavbar($, tocs) { + return buildTopNavbar($, tocs) +} + +function buildTopNavbar($, tocs) { + var config = Config.config; + var pageTop = config.pageTop; + var level1Icon = ''; + var level2Icon = ''; + var level3Icon = ''; + if (pageTop.showLevelIcon) { + level1Icon = pageTop.level1Icon; + level2Icon = pageTop.level2Icon; + level3Icon = pageTop.level3Icon; + } + + var html = "
    "; + for (var i = 0; i < tocs.length; i++) { + var h1Toc = tocs[i]; + if(h1Toc.name){ + html += "
  • " + h1Toc.level + "" + h1Toc.name + "
  • "; + } + if (h1Toc.children.length > 0) { + html += "
      " + for (var j = 0; j < h1Toc.children.length; j++) { + var h2Toc = h1Toc.children[j]; + if(h2Toc.name){ + html += "
    • " + h2Toc.level + "" + h2Toc.name + "
    • "; + } + if (h2Toc.children.length > 0) { + html += ""; + } + } + html += "
    " + } + } + + html += "
"; + + return html; +} + +/** + * 添加返回顶部按钮 + * @param tocs + * @returns {string} + */ +function buildGoTop(tocs) { + var config = Config.config; + var html = ""; + if (config.showGoTop && tocs && tocs.length > 0) { + html = ""; + } + return html; +} + +function start(bookIns, page) { + var $ = cheerio.load(page.content); + var modifyHeader = !//.test(page.content) + + // 处理toc相关,同时处理标题和id + var tocs = handlerTocs($, page, modifyHeader); + + // 设置处理之后的内容 + if (tocs.length == 0) { + page.content = $.html(); + return; + } + var html = ""; + if (!//.test(page.content)) { + var config = Config.config; + var mode = config.mode; + if (mode == 'float') { + html = handlerFloatNavbar($, tocs); + } else if (mode == 'pageTop') { + html = handlerPageTopNavbar($, tocs); + } + } + html += buildGoTop(tocs); + page.content = html + $.html(); + var $x = cheerio.load(page.content); + $x('extoc').replaceWith($x(buildTopNavbar($, tocs, page))); + page.content = $x.html(); +} + +module.exports = start; diff --git a/docs/docs/gitbook/gitbook-plugin-anchor-navigation-expand/style/plugin.css b/docs/docs/gitbook/gitbook-plugin-anchor-navigation-expand/style/plugin.css new file mode 100644 index 0000000..f6703bd --- /dev/null +++ b/docs/docs/gitbook/gitbook-plugin-anchor-navigation-expand/style/plugin.css @@ -0,0 +1,216 @@ +/** 浮动导航 */ +#anchor-navigation-ex-navbar { + background-color: #fafafa; + border: 1px solid rgba(0, 0, 0, .07); + border-radius: 1px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + background-clip: padding-box; + padding: 5px 10px; + position: fixed; + /*background-color: rgba(255,255,255,0.98);*/ + right: 50px; + top: 68px; + font-size: 12px; + white-space: nowrap; + z-index: 999; + cursor: pointer; + text-align: right; + max-height: 70%; + overflow-y: auto; + overflow-x: hidden; +} + +#anchor-navigation-ex-navbar ul { + display: block; + text-align: left; + padding-right: 10px; + padding-left: 10px; + list-style-type: none; +} +#anchor-navigation-ex-navbar input { + margin-left: 90%; + display: block; +} +#anchor-navigation-ex-navbar input:checked { + margin-left: 0%; + display: block; +} + +/* #anchor-navigation-ex-navbar div:active { + display: block; +} */ +#anchor-navigation-ex-navbar input:checked~ul { + display: none; +} + +#anchor-navigation-ex-navbar ul li a { + text-decoration: none; + border-bottom: none; + font-size: 14px; + color: #364149; + background: 0 0; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + position: relative; +} + +#anchor-navigation-ex-navbar ul li a:hover { + text-decoration: underline; +} + +#anchor-navigation-ex-navbar ul li .title-icon { + padding-right: 4px; +} + +/*对应官网皮肤主题颜色*/ +.book.color-theme-1 #anchor-navigation-ex-navbar { + background-color: #111111; + border-color: #7e888b; + color: #afa790; +} + +.book.color-theme-1 #anchor-navigation-ex-navbar ul li a { + color: #877f6a; +} + +.book.color-theme-2 #anchor-navigation-ex-navbar { + background-color: #2d3143; + border-color: #272a3a; + color: #bcc1d2; +} + +.book.color-theme-2 #anchor-navigation-ex-navbar ul li a { + color: #c1c6d7; +} + +/* 返回顶部 */ +#anchorNavigationExGoTop { + position: fixed; + right: 50px; + bottom: 68px; + background-color: #fafafa; + border: 1px solid rgba(0, 0, 0, .07); + border-radius: 1px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + background-clip: padding-box; + z-index: 999; + cursor: pointer; + font-size: 12px; + padding: 5px 10px; + color: #364149; +} +/*对应官网皮肤主题颜色*/ +.book.color-theme-1 #anchorNavigationExGoTop { + background-color: #111111; + border-color: #7e888b; + color: #afa790; +} + +.book.color-theme-2 #anchorNavigationExGoTop { + background-color: #2d3143; + border-color: #272a3a; + color: #bcc1d2; +} + +a.anchor-navigation-ex-anchor { + color: inherit !important; + display: none; + margin-left: -30px; + padding-left: 40px; + cursor: pointer; + position: absolute; + top: 0; + left: 0; + bottom: 0; +} + +a.anchor-navigation-ex-anchor i { + margin-left: -30px; + /*color: #000;*/ + vertical-align: middle; + font-size: 16px !important; +} + +h1, h2, h3, h4, h5, h6 { + position: relative; +} + +h1:hover a.anchor-navigation-ex-anchor, h2:hover a.anchor-navigation-ex-anchor, h3:hover a.anchor-navigation-ex-anchor, +h4:hover a.anchor-navigation-ex-anchor, h5:hover a.anchor-navigation-ex-anchor, h6:hover a.anchor-navigation-ex-anchor { + display: inline-block; +} + +.book .book-body .page-wrapper .page-inner section.normal { + overflow: visible; +} + +/* 页面内顶部固定导航 */ +#anchor-navigation-ex-pagetop-navbar{ + border: 1px solid rgba(0, 0, 0, .07); + border-radius: 1px; + background-clip: padding-box; + padding: 5px 10px; + background-color: #fafafa; + font-size: 12px; +} + +#anchor-navigation-ex-pagetop-navbar ul { + text-align: left; + padding-right: 10px; + padding-left: 10px; + list-style-type: none; +} + +#anchor-navigation-ex-pagetop-navbar:hover ul { + display: block; +} + +#anchor-navigation-ex-pagetop-navbar ul li a { + text-decoration: none; + border-bottom: none; + font-size: 14px; + color: #364149; + background: 0 0; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + position: relative; +} + +#anchor-navigation-ex-pagetop-navbar ul li a:hover { + text-decoration: underline; +} + +#anchor-navigation-ex-pagetop-navbar ul li .title-icon { + padding-right: 4px; +} + +/*对应官网皮肤主题颜色*/ +.book.color-theme-1 #anchor-navigation-ex-pagetop-navbar { + background-color: #111111; + border-color: #7e888b; + color: #afa790; +} + +.book.color-theme-1 #anchor-navigation-ex-pagetop-navbar ul li a { + color: #877f6a; +} + +.book.color-theme-2 #anchor-navigation-ex-pagetop-navbar { + background-color: #2d3143; + border-color: #272a3a; + color: #bcc1d2; +} + +.book.color-theme-2 #anchor-navigation-ex-pagetop-navbar ul li a { + color: #c1c6d7; +} + + + + + + diff --git a/docs/docs/gitbook/gitbook-plugin-code/plugin.css b/docs/docs/gitbook/gitbook-plugin-code/plugin.css new file mode 100644 index 0000000..a68fcdc --- /dev/null +++ b/docs/docs/gitbook/gitbook-plugin-code/plugin.css @@ -0,0 +1,37 @@ +#code-textarea { + height: 0; + position: fixed; + top: -1000px; + width: 0; +} + +.code-wrapper { + position: relative; +} + +.code-wrapper i { + color: #c1c7cd; + cursor: pointer; + font-size: 12px; + font-weight: bold; + position: absolute; + right: 1em; + top: 1em; +} + +.code-wrapper pre { + background: #f7f8f9; + border-radius: 3px; + counter-reset: line; + font-size: 15px; +} + +.code-wrapper pre > code > span.code-line:before { + counter-increment: line; + color: #c1c7cd; + content: counter(line); + display: inline-block; + font-size: 12px; + margin-right: 1.5em; + width: 1em; +} diff --git a/docs/docs/gitbook/gitbook-plugin-code/plugin.js b/docs/docs/gitbook/gitbook-plugin-code/plugin.js new file mode 100644 index 0000000..555d724 --- /dev/null +++ b/docs/docs/gitbook/gitbook-plugin-code/plugin.js @@ -0,0 +1,91 @@ +require(['gitbook', 'jQuery'], function(gitbook, $) { + + const TERMINAL_HOOK = '**[terminal]' + + var pluginConfig = {}; + var timeouts = {}; + + function addCopyButton(wrapper) { + wrapper.append( + $('') + .click(function() { + copyCommand($(this)); + }) + ); + } + + function addCopyTextarea() { + + /* Add also the text area that will allow to copy */ + $('body').append('",pe.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var Qe=te.documentElement,Je=/^key/,Ke=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ze=/^([^.]*)(?:\.(.+)|)/;de.event={global:{},add:function(e,t,n,r,o){var i,s,a,u,c,l,f,p,h,d,g,m=Fe.get(e);if(m)for(n.handler&&(i=n,n=i.handler,o=i.selector),o&&de.find.matchesSelector(Qe,o),n.guid||(n.guid=de.guid++),(u=m.events)||(u=m.events={}),(s=m.handle)||(s=m.handle=function(t){return"undefined"!=typeof de&&de.event.triggered!==t.type?de.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(qe)||[""],c=t.length;c--;)a=Ze.exec(t[c])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h&&(f=de.event.special[h]||{},h=(o?f.delegateType:f.bindType)||h,f=de.event.special[h]||{},l=de.extend({type:h,origType:g,data:r,handler:n,guid:n.guid,selector:o,needsContext:o&&de.expr.match.needsContext.test(o),namespace:d.join(".")},i),(p=u[h])||(p=u[h]=[],p.delegateCount=0,f.setup&&f.setup.call(e,r,d,s)!==!1||e.addEventListener&&e.addEventListener(h,s)),f.add&&(f.add.call(e,l),l.handler.guid||(l.handler.guid=n.guid)),o?p.splice(p.delegateCount++,0,l):p.push(l),de.event.global[h]=!0)},remove:function(e,t,n,r,o){var i,s,a,u,c,l,f,p,h,d,g,m=Fe.hasData(e)&&Fe.get(e);if(m&&(u=m.events)){for(t=(t||"").match(qe)||[""],c=t.length;c--;)if(a=Ze.exec(t[c])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h){for(f=de.event.special[h]||{},h=(r?f.delegateType:f.bindType)||h,p=u[h]||[],a=a[2]&&new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=i=p.length;i--;)l=p[i],!o&&g!==l.origType||n&&n.guid!==l.guid||a&&!a.test(l.namespace)||r&&r!==l.selector&&("**"!==r||!l.selector)||(p.splice(i,1),l.selector&&p.delegateCount--,f.remove&&f.remove.call(e,l));s&&!p.length&&(f.teardown&&f.teardown.call(e,d,m.handle)!==!1||de.removeEvent(e,h,m.handle),delete u[h])}else for(h in u)de.event.remove(e,h+t[c],n,r,!0);de.isEmptyObject(u)&&Fe.remove(e,"handle events")}},dispatch:function(e){var t,n,r,o,i,s,a=de.event.fix(e),u=new Array(arguments.length),c=(Fe.get(this,"events")||{})[a.type]||[],l=de.event.special[a.type]||{};for(u[0]=a,t=1;t=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==e.type||c.disabled!==!0)){for(i=[],s={},n=0;n-1:de.find(o,this,null,[c]).length),s[o]&&i.push(r);i.length&&a.push({elem:c,handlers:i})}return c=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,tt=/\s*$/g;de.extend({htmlPrefilter:function(e){return e.replace(et,"<$1>")},clone:function(e,t,n){var r,o,i,s,a=e.cloneNode(!0),u=de.contains(e.ownerDocument,e);if(!(pe.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||de.isXMLDoc(e)))for(s=v(a),i=v(e),r=0,o=i.length;r0&&y(s,!u&&v(e,"script")),a},cleanData:function(e){for(var t,n,r,o=de.event.special,i=0;void 0!==(n=e[i]);i++)if(He(n)){if(t=n[Fe.expando]){if(t.events)for(r in t.events)o[r]?de.event.remove(n,r):de.removeEvent(n,r,t.handle);n[Fe.expando]=void 0}n[Re.expando]&&(n[Re.expando]=void 0)}}}),de.fn.extend({detach:function(e){return q(this,e,!0)},remove:function(e){return q(this,e)},text:function(e){return Le(this,function(e){return void 0===e?de.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return A(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=j(this,e);t.appendChild(e)}})},prepend:function(){return A(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=j(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return A(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return A(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(de.cleanData(v(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return de.clone(this,e,t)})},html:function(e){return Le(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!tt.test(e)&&!Ge[(Xe.exec(e)||["",""])[1].toLowerCase()]){e=de.htmlPrefilter(e);try{for(;n1)}}),de.Tween=I,I.prototype={constructor:I,init:function(e,t,n,r,o,i){this.elem=e,this.prop=n,this.easing=o||de.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=i||(de.cssNumber[n]?"":"px")},cur:function(){var e=I.propHooks[this.prop];return e&&e.get?e.get(this):I.propHooks._default.get(this)},run:function(e){var t,n=I.propHooks[this.prop];return this.options.duration?this.pos=t=de.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):I.propHooks._default.set(this),this}},I.prototype.init.prototype=I.prototype,I.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=de.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){de.fx.step[e.prop]?de.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[de.cssProps[e.prop]]&&!de.cssHooks[e.prop]?e.elem[e.prop]=e.now:de.style(e.elem,e.prop,e.now+e.unit)}}},I.propHooks.scrollTop=I.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},de.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},de.fx=I.prototype.init,de.fx.step={};var ht,dt,gt=/^(?:toggle|show|hide)$/,mt=/queueHooks$/;de.Animation=de.extend(U,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return d(n.elem,e,$e.exec(t),n),n}]},tweener:function(e,t){de.isFunction(e)?(t=e,e=["*"]):e=e.match(qe);for(var n,r=0,o=e.length;r1)},removeAttr:function(e){return this.each(function(){de.removeAttr(this,e)})}}),de.extend({attr:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return"undefined"==typeof e.getAttribute?de.prop(e,t,n):(1===i&&de.isXMLDoc(e)||(o=de.attrHooks[t.toLowerCase()]||(de.expr.match.bool.test(t)?vt:void 0)),void 0!==n?null===n?void de.removeAttr(e,t):o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:(e.setAttribute(t,n+""),n):o&&"get"in o&&null!==(r=o.get(e,t))?r:(r=de.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!pe.radioValue&&"radio"===t&&de.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,o=t&&t.match(qe);if(o&&1===e.nodeType)for(;n=o[r++];)e.removeAttribute(n)}}),vt={set:function(e,t,n){return t===!1?de.removeAttr(e,n):e.setAttribute(n,n),n}},de.each(de.expr.match.bool.source.match(/\w+/g),function(e,t){var n=yt[t]||de.find.attr;yt[t]=function(e,t,r){var o,i,s=t.toLowerCase();return r||(i=yt[s],yt[s]=o,o=null!=n(e,t,r)?s:null,yt[s]=i),o}});var xt=/^(?:input|select|textarea|button)$/i,bt=/^(?:a|area)$/i;de.fn.extend({prop:function(e,t){return Le(this,de.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[de.propFix[e]||e]})}}),de.extend({prop:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return 1===i&&de.isXMLDoc(e)||(t=de.propFix[t]||t,o=de.propHooks[t]),void 0!==n?o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:e[t]=n:o&&"get"in o&&null!==(r=o.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=de.find.attr(e,"tabindex");return t?parseInt(t,10):xt.test(e.nodeName)||bt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),pe.optSelected||(de.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),de.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){de.propFix[this.toLowerCase()]=this}),de.fn.extend({addClass:function(e){var t,n,r,o,i,s,a,u=0;if(de.isFunction(e))return this.each(function(t){de(this).addClass(e.call(this,t,X(this)))});if("string"==typeof e&&e)for(t=e.match(qe)||[];n=this[u++];)if(o=X(n),r=1===n.nodeType&&" "+z(o)+" "){for(s=0;i=t[s++];)r.indexOf(" "+i+" ")<0&&(r+=i+" ");a=z(r),o!==a&&n.setAttribute("class",a)}return this},removeClass:function(e){var t,n,r,o,i,s,a,u=0;if(de.isFunction(e))return this.each(function(t){de(this).removeClass(e.call(this,t,X(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof e&&e)for(t=e.match(qe)||[];n=this[u++];)if(o=X(n),r=1===n.nodeType&&" "+z(o)+" "){for(s=0;i=t[s++];)for(;r.indexOf(" "+i+" ")>-1;)r=r.replace(" "+i+" "," ");a=z(r),o!==a&&n.setAttribute("class",a)}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):de.isFunction(e)?this.each(function(n){de(this).toggleClass(e.call(this,n,X(this),t),t)}):this.each(function(){var t,r,o,i;if("string"===n)for(r=0,o=de(this),i=e.match(qe)||[];t=i[r++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else void 0!==e&&"boolean"!==n||(t=X(this),t&&Fe.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||e===!1?"":Fe.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+z(X(n))+" ").indexOf(t)>-1)return!0;return!1}});var wt=/\r/g;de.fn.extend({val:function(e){var t,n,r,o=this[0];{if(arguments.length)return r=de.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=r?e.call(this,n,de(this).val()):e,null==o?o="":"number"==typeof o?o+="":de.isArray(o)&&(o=de.map(o,function(e){return null==e?"":e+""})),t=de.valHooks[this.type]||de.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&void 0!==t.set(this,o,"value")||(this.value=o))});if(o)return t=de.valHooks[o.type]||de.valHooks[o.nodeName.toLowerCase()],t&&"get"in t&&void 0!==(n=t.get(o,"value"))?n:(n=o.value,"string"==typeof n?n.replace(wt,""):null==n?"":n)}}}),de.extend({valHooks:{option:{get:function(e){var t=de.find.attr(e,"value");return null!=t?t:z(de.text(e))}},select:{get:function(e){var t,n,r,o=e.options,i=e.selectedIndex,s="select-one"===e.type,a=s?null:[],u=s?i+1:o.length;for(r=i<0?u:s?i:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),i}}}}),de.each(["radio","checkbox"],function(){de.valHooks[this]={set:function(e,t){if(de.isArray(t))return e.checked=de.inArray(de(e).val(),t)>-1}},pe.checkOn||(de.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Tt=/^(?:focusinfocus|focusoutblur)$/;de.extend(de.event,{trigger:function(t,n,r,o){var i,s,a,u,c,l,f,p=[r||te],h=ce.call(t,"type")?t.type:t,d=ce.call(t,"namespace")?t.namespace.split("."):[];if(s=a=r=r||te,3!==r.nodeType&&8!==r.nodeType&&!Tt.test(h+de.event.triggered)&&(h.indexOf(".")>-1&&(d=h.split("."),h=d.shift(),d.sort()),c=h.indexOf(":")<0&&"on"+h,t=t[de.expando]?t:new de.Event(h,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=d.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:de.makeArray(n,[t]),f=de.event.special[h]||{},o||!f.trigger||f.trigger.apply(r,n)!==!1)){if(!o&&!f.noBubble&&!de.isWindow(r)){for(u=f.delegateType||h,Tt.test(u+h)||(s=s.parentNode);s;s=s.parentNode)p.push(s),a=s;a===(r.ownerDocument||te)&&p.push(a.defaultView||a.parentWindow||e)}for(i=0;(s=p[i++])&&!t.isPropagationStopped();)t.type=i>1?u:f.bindType||h,l=(Fe.get(s,"events")||{})[t.type]&&Fe.get(s,"handle"),l&&l.apply(s,n),l=c&&s[c],l&&l.apply&&He(s)&&(t.result=l.apply(s,n),t.result===!1&&t.preventDefault());return t.type=h,o||t.isDefaultPrevented()||f._default&&f._default.apply(p.pop(),n)!==!1||!He(r)||c&&de.isFunction(r[h])&&!de.isWindow(r)&&(a=r[c],a&&(r[c]=null),de.event.triggered=h,r[h](),de.event.triggered=void 0,a&&(r[c]=a)),t.result}},simulate:function(e,t,n){var r=de.extend(new de.Event,n,{type:e,isSimulated:!0});de.event.trigger(r,null,t)}}),de.fn.extend({trigger:function(e,t){return this.each(function(){de.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return de.event.trigger(e,t,n,!0)}}),de.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){de.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),de.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),pe.focusin="onfocusin"in e,pe.focusin||de.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){de.event.simulate(t,e.target,de.event.fix(e))};de.event.special[t]={setup:function(){var r=this.ownerDocument||this,o=Fe.access(r,t);o||r.addEventListener(e,n,!0),Fe.access(r,t,(o||0)+1)},teardown:function(){var r=this.ownerDocument||this,o=Fe.access(r,t)-1;o?Fe.access(r,t,o):(r.removeEventListener(e,n,!0),Fe.remove(r,t))}}});var Ct=e.location,jt=de.now(),kt=/\?/;de.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||de.error("Invalid XML: "+t),n};var Et=/\[\]$/,St=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;de.param=function(e,t){var n,r=[],o=function(e,t){var n=de.isFunction(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(de.isArray(e)||e.jquery&&!de.isPlainObject(e))de.each(e,function(){o(this.name,this.value)});else for(n in e)V(n,e[n],t,o);return r.join("&")},de.fn.extend({serialize:function(){return de.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=de.prop(this,"elements");return e?de.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!de(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!ze.test(e))}).map(function(e,t){var n=de(this).val();return null==n?null:de.isArray(n)?de.map(n,function(e){return{name:t.name,value:e.replace(St,"\r\n")}}):{name:t.name,value:n.replace(St,"\r\n")}}).get()}});var qt=/%20/g,Dt=/#.*$/,Ot=/([?&])_=[^&]*/,Lt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ht=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ft=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Pt={},Mt="*/".concat("*"),$t=te.createElement("a");$t.href=Ct.href,de.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Ht.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Mt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":de.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Q(Q(e,de.ajaxSettings),t):Q(de.ajaxSettings,e)},ajaxPrefilter:G(It),ajaxTransport:G(Pt),ajax:function(t,n){function r(t,n,r,a){var c,p,h,b,w,T=n;l||(l=!0,u&&e.clearTimeout(u),o=void 0,s=a||"",C.readyState=t>0?4:0,c=t>=200&&t<300||304===t,r&&(b=J(d,C,r)),b=K(d,b,C,c),c?(d.ifModified&&(w=C.getResponseHeader("Last-Modified"),w&&(de.lastModified[i]=w),w=C.getResponseHeader("etag"),w&&(de.etag[i]=w)),204===t||"HEAD"===d.type?T="nocontent":304===t?T="notmodified":(T=b.state,p=b.data,h=b.error,c=!h)):(h=T,!t&&T||(T="error",t<0&&(t=0))),C.status=t,C.statusText=(n||T)+"",c?v.resolveWith(g,[p,T,C]):v.rejectWith(g,[C,T,h]),C.statusCode(x),x=void 0,f&&m.trigger(c?"ajaxSuccess":"ajaxError",[C,d,c?p:h]),y.fireWith(g,[C,T]),f&&(m.trigger("ajaxComplete",[C,d]),--de.active||de.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=void 0),n=n||{};var o,i,s,a,u,c,l,f,p,h,d=de.ajaxSetup({},n),g=d.context||d,m=d.context&&(g.nodeType||g.jquery)?de(g):de.event,v=de.Deferred(),y=de.Callbacks("once memory"),x=d.statusCode||{},b={},w={},T="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(l){if(!a)for(a={};t=Lt.exec(s);)a[t[1].toLowerCase()]=t[2];t=a[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return l?s:null},setRequestHeader:function(e,t){return null==l&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==l&&(d.mimeType=e),this},statusCode:function(e){var t;if(e)if(l)C.always(e[C.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||T;return o&&o.abort(t),r(0,t),this}};if(v.promise(C),d.url=((t||d.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),d.type=n.method||n.type||d.method||d.type,d.dataTypes=(d.dataType||"*").toLowerCase().match(qe)||[""],null==d.crossDomain){c=te.createElement("a");try{c.href=d.url,c.href=c.href,d.crossDomain=$t.protocol+"//"+$t.host!=c.protocol+"//"+c.host}catch(e){d.crossDomain=!0}}if(d.data&&d.processData&&"string"!=typeof d.data&&(d.data=de.param(d.data,d.traditional)),Y(It,d,n,C),l)return C;f=de.event&&d.global,f&&0===de.active++&&de.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!Ft.test(d.type),i=d.url.replace(Dt,""),d.hasContent?d.data&&d.processData&&0===(d.contentType||"").indexOf("application/x-www-form-urlencoded")&&(d.data=d.data.replace(qt,"+")):(h=d.url.slice(i.length),d.data&&(i+=(kt.test(i)?"&":"?")+d.data,delete d.data),d.cache===!1&&(i=i.replace(Ot,"$1"),h=(kt.test(i)?"&":"?")+"_="+jt++ +h),d.url=i+h),d.ifModified&&(de.lastModified[i]&&C.setRequestHeader("If-Modified-Since",de.lastModified[i]),de.etag[i]&&C.setRequestHeader("If-None-Match",de.etag[i])),(d.data&&d.hasContent&&d.contentType!==!1||n.contentType)&&C.setRequestHeader("Content-Type",d.contentType),C.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+Mt+"; q=0.01":""):d.accepts["*"]);for(p in d.headers)C.setRequestHeader(p,d.headers[p]);if(d.beforeSend&&(d.beforeSend.call(g,C,d)===!1||l))return C.abort();if(T="abort",y.add(d.complete),C.done(d.success),C.fail(d.error),o=Y(Pt,d,n,C)){if(C.readyState=1,f&&m.trigger("ajaxSend",[C,d]),l)return C;d.async&&d.timeout>0&&(u=e.setTimeout(function(){C.abort("timeout")},d.timeout));try{l=!1,o.send(b,r)}catch(e){if(l)throw e;r(-1,e)}}else r(-1,"No Transport");return C},getJSON:function(e,t,n){return de.get(e,t,n,"json")},getScript:function(e,t){return de.get(e,void 0,t,"script")}}),de.each(["get","post"],function(e,t){de[t]=function(e,n,r,o){return de.isFunction(n)&&(o=o||r,r=n,n=void 0),de.ajax(de.extend({url:e,type:t,dataType:o,data:n,success:r},de.isPlainObject(e)&&e))}}),de._evalUrl=function(e){return de.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},de.fn.extend({wrapAll:function(e){var t;return this[0]&&(de.isFunction(e)&&(e=e.call(this[0])),t=de(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return de.isFunction(e)?this.each(function(t){de(this).wrapInner(e.call(this,t))}):this.each(function(){var t=de(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=de.isFunction(e);return this.each(function(n){de(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){de(this).replaceWith(this.childNodes)}),this}}),de.expr.pseudos.hidden=function(e){return!de.expr.pseudos.visible(e)},de.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},de.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Wt={0:200,1223:204},Bt=de.ajaxSettings.xhr();pe.cors=!!Bt&&"withCredentials"in Bt,pe.ajax=Bt=!!Bt,de.ajaxTransport(function(t){var n,r;if(pe.cors||Bt&&!t.crossDomain)return{send:function(o,i){var s,a=t.xhr();if(a.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(s in t.xhrFields)a[s]=t.xhrFields[s];t.mimeType&&a.overrideMimeType&&a.overrideMimeType(t.mimeType),t.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest");for(s in o)a.setRequestHeader(s,o[s]);n=function(e){return function(){n&&(n=r=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,"abort"===e?a.abort():"error"===e?"number"!=typeof a.status?i(0,"error"):i(a.status,a.statusText):i(Wt[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=n(),r=a.onerror=n("error"),void 0!==a.onabort?a.onabort=r:a.onreadystatechange=function(){4===a.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{a.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),de.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),de.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return de.globalEval(e),e}}}),de.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),de.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(r,o){t=de(" + + + + +
+
+ +

results matching ""

+
    + +
    +
    + +

    No results matching ""

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/docs/package-lock.json b/docs/docs/package-lock.json new file mode 100644 index 0000000..06d705d --- /dev/null +++ b/docs/docs/package-lock.json @@ -0,0 +1,1052 @@ +{ + "name": "go-coding-advice", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "dependencies": { + "canvas": "^2.9.1" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz", + "integrity": "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/canvas": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.9.1.tgz", + "integrity": "sha512-vSQti1uG/2gjv3x6QLOZw7TctfufaerTWbVe+NSduHxxLGB+qf3kFgQ6n66DSnuoINtVUjrLLIK2R+lxrBG07A==", + "hasInstallScript": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.15.0", + "simple-get": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "dependencies": { + "mimic-response": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nan": { + "version": "2.15.0", + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + }, + "dependencies": { + "@mapbox/node-pre-gyp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz", + "integrity": "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==", + "requires": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "canvas": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.9.1.tgz", + "integrity": "sha512-vSQti1uG/2gjv3x6QLOZw7TctfufaerTWbVe+NSduHxxLGB+qf3kFgQ6n66DSnuoINtVUjrLLIK2R+lxrBG07A==", + "requires": { + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.15.0", + "simple-get": "^3.0.3" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "requires": { + "mimic-response": "^2.0.0" + } + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "requires": { + "yallist": "^4.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "nan": { + "version": "2.15.0" + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "requires": { + "abbrev": "1" + } + }, + "npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "requires": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "readable-stream": { + "version": "3.6.0", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.2.1" + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + }, + "simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "requires": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "string_decoder": { + "version": "1.3.0", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "tar": { + "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "util-deprecate": { + "version": "1.0.2" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } +} diff --git a/docs/docs/package.json b/docs/docs/package.json new file mode 100644 index 0000000..69fea91 --- /dev/null +++ b/docs/docs/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "canvas": "^2.9.1" + } +} diff --git a/docs/docs/search_index.json b/docs/docs/search_index.json new file mode 100644 index 0000000..8f3d4ce --- /dev/null +++ b/docs/docs/search_index.json @@ -0,0 +1 @@ +{"index":{"version":"0.5.12","fields":[{"name":"title","boost":10},{"name":"keywords","boost":15},{"name":"body","boost":1}],"ref":"url","documentStore":{"store":{"./":["\"img\"","&&","(faq)","05","2009","2022","21","22:12:52","=","===","ask","c++","code","coder","comment","common","console.log(\"plugin","e.target.tagnam","effect","frequent","function(e){","gitbook该文章修订时间:","go","golang","gopher","gopher,想更好地管理","go,以及第三方书籍","go,这应该是入门必读最佳读物。","java","languag","layout,给出布局建议。一个清晰的项目结构,能帮忙我们高效有序的管理与日俱增的业务代码。不会随着代码量的递增,项目代码变得凌乱而不堪入目。","mistak","popup....\");document.onclick","power","program","project","pr,它将会变得更好。","question","review","specif","standard","tour","wiki","window.open(e.target.src,e.target.src)}img{cursor:pointer}","|","不仅易用,也很易学,这得益于与之匹配的丰富学习资料。go","之势。","也是不错的选择。","互动勘误","代码,想写出更加高效易读的","代码,想让自己拥有一个更好的编码风格,","内容简介","写出更优质的代码。","前言","功能实践","各个公司或组织,都有各自不同的","向","和","如果你对文章内容有任何疑问和建议,欢迎在应相应章节下留言探讨。","如果是","如果是想全面了解","如果是想深入了解","官方","官方文档","官方的入门指南","官方网站已有系统全面的指导文档,新手可以快速通过官方资料,轻松上手。此外,第三方资料,也有百家争鸣之势。有介绍","实践建议,帮助我们更好的使用","年诞生以来,因其出色的并发能力和简单易用的低门槛,已在各大厂商的后台高并发业务场景崭露头脚,甚至有取代传统后台服务开发语言","开发经验的","想离","最佳实践更近一步,建议看看本书。","本书为开源书籍,希望得到大家的协同共建,不断迭代丰富。如果有你的建议和","本书主要分为四个方面:","本书所述内容谈不上是","本书由来","本书由来内容简介目标读者互动勘误","本文所述内容均为参考意见,并非标准。其中许多是","本文结合官方编码建议,大厂编码规范、开源技术书籍和自身项目经验,尽可能以简短的语言给出一套行之有效","源码应该是你的首选,再结合精彩的第三方分析,如","源码进行剖析介绍实现原理的,有介绍高并发场景下实战指导的,也有介绍使用","的共同追求。为书写效率更高的代码,本文将结合","的初学者,建议先略过本书,了解下","的最佳实践更近一步。","的最佳实践,但希望能够帮助广大","的通用准则,其他扩展内容也参考了很多官方指南,包括但不限于。","目标读者","编码建议的。至此,本书应运而生。","编码建议,让您的代码高效易读。","编码规范,但大同小异。规范是一种倡导,不遵守并不代表错误,但当大家都遵守规范时,你会发现,整个世界将变得整洁有序。","编码风格","编码风格从简洁易读的角度出发,参考","虽然简单,但其功能特性却不单一。其丰富的语言特性,在使用时还是有很多不同的姿势。本书从功能特性出发,给出","语法知识和语言特性与,也建议先略过本书。go","语言圣经","语言基础和实战的,有对","语言实现原理,还是建议先略过本书。虽然本书略有涉及,但不够全面。go","语言特性,从常用数据结构、内存管理和并发,三个方面给出相关建议。","语言自","语言设计与实现,应该会大有收获。","进行高性能编程的,等等。很遗憾的是,没有发现一个系统介绍","那么到底是谁适合阅读本书呢?如果你是一位有","项目布局","项目布局参考业界认可度较高的","高性能编码","高效的代码是我们每一个",",并结合自身项目团队编码规范,力争给出全面、认可度较高的编码风格,帮助大家写出风格统一的简洁高效的代码。"],"第一篇:项目布局/项目布局.html":["\"img\"","#","&&","(travis、circle、drone)配置和脚本放在",")、容器(",")、操作系统(",")包配置和脚本放在","/api","/asset","/build","/build/ci","/build/packag","/cmd","/config","/deploy","/deploy。","/doc","/exampl","/githook","/init","/intern","/internal/app/myapp","/internal/pkg/","/pkg","/readme.md","/script","/src","/test","/test/data","/test/testdata。请注意,如果你需要忽略目录中的内容,go","/third_parti","/tool","/vendor","/web","/websit","01","05","1","1.13","1.前言2.项目布局2.1","19:54:14","2.1","2.2","2.3","2.4","2.5","2.6","2.7","2.项目布局","2022","3.小结","639","=","===","ami","api","application)。","asset","build","ci","cmd","cn.md。","code","comm","commit","compose、kubernetes/helm、mesos、terraform、bosh)。注意,在一些存储库中(特别是使用","config","console.log(\"plugin","deb、rpm、pkg","deploy","doc","docker","e.target.tagnam","exampl","function(e){","git","gitbook该文章修订时间:","githook","github","github/hashicorp/terraform/makefile。","go","go1.4","godoc","golang,目前官方团队并未提供权威规范。不过不用担心,我们依然有一个规范可以参考,那就是业界推崇的","gopher","https://proxy.golang.org","iaas、paas、系统和容器编排部署配置和模板(dock","init","intern","internal,所有名为","iso","java","kubernet","layout","layout。","list","logo,readm","main","makefile(如果有的话)变得小而简单,例如","markdown","modul","modules。从","modules,我们并不需要","offici","openapi","packag","page","pkg","popup....\");document.onclick","power","project","readm","readme.md","readme_zh","readme,相得益彰。","script","spa(singl","specification。","src","standard","supervisord)配置。","swagger","sysv)和进程管理(runit,","test","third_parti","tool","ui。","upstart,","util","vendor","web","websit","wikipedia","window.open(e.target.src,e.target.src)}img{cursor:pointer}","|","下面,就像不应该拥有","不应该拥有的目录","不应该拥有的目录/src3.小结参考文献1.前言","不管是什么语言,开发什么项目,一个稍大的项目,必然要面临如何管理项目结构布局的问题,因为一个简洁清晰的布局是项目可读的关键。","不要在该目录下放太多的代码,如果代码可以被其他项目导入使用,请放到","中引用的图片等。","中的代码,作为项目的主应用目录。目录也可以包含多个可执行文件,子目录名称一般与可执行文件相对应(如:/cmd/myapp","中,而应用的共享代码可以放在","丰富的示例将帮助用户更加便捷快速的了解上手一个项目,再加上","代码目录","代码目录/cmd/internal/pkg/vendor2.3","以后,go","们努力的结果。此项目布局是通用的,建议并非强制,当然我们最好遵守,因为这能让我的项目布局看起来更加规范,易于交流和维护。","作为他们的模块代理服务器)。使用","你实际的代码可以放在","你的项目结构布局看起来应该像下面这个样子。","你还可以在","使用","信息是否符合规范。","公有库代码(外部项目可以使用)","公有库代码(外部项目可以使用)。","关于项目的设计文档,用户的使用文档等(除了","其他目录","其他目录/docs/tools/examples/third_party/githooks/assets/website2.7","函数,调用","初始化信息","初始化信息。","参考文献","可执行文件目录","可执行文件目录。","含有","和","外部依赖库","外部依赖库。","外部辅助工具","外部辅助工具。","如","如不同环境(测试、正式)的服务配置信息。","如放置测试工具和测试依赖数据。对于较大的项目,有一个数据子目录是有意义的。例如,你可以使用","如果代码不可复用或者你不希望其他项目使用,请放到","如果你不使用","如果发现此项目布局规范并不适用自己的项目,可在其基础上适当做出改变,不要泥古拘方。","如果手动管理依赖包可以将依赖包放到该目录,当然推荐使用依赖包管理工具","存放","导入代码。","将你的","将你的云(","将更加人性化,如","应用程序和公共库的示例","应用程序和公共库的示例。","应用程序特定组件,如静态","应用程序的组件","应用程序目录","应用程序目录/web2.5","应用程序项目的基本布局,是社区","开始,官方推荐使用新的依赖管理系统","或","打包和持续集成","打包和持续集成。","执行各种构建、安装、分析等操作的脚本","执行各种构建、安装、分析等操作的脚本。","持续集成配置与脚本","整体风格","整体风格2.2","有些","有些语言自身提供了目录结构规范,但对于较为年轻的","服务对外接口","服务对外接口。","服务应用程序目录","服务应用程序目录/api2.4","构建依赖包","格式的说明文档,是用户了解一个项目最直观的入口。如果有需要,添加不同语言的","注意,1.11","测试相关","测试相关。","源码目录","源码目录。","生成的文档之外)均可以放在该目录。","的子目录都不能被导出。","目录。","目录下。","目录下,","目录内部增加一些代码结构来区分共享和非共享的。虽然它并不是必须的(尤其是小的项目),但是最好能从视觉上区分包的用途。","目录的项目结构是一种常见的布局模式,但并不是所有人都接受它,一些","目,但这通常发生在开发人员有","社区的人并不推荐它。","私有库代码(仅本项目使用)","私有库代码(仅本项目使用)。","简体中文","系统初始化(systemd,","背景。不同类型的代码应该有自己的目录,而不是全部放到","资源、服务器端模板和","起,从编译器层面限制该目录不可被导出,而且不只是项目根目录下的","还会忽略以“.”或“_”开头的目录或文件,因此在如何命名测试数据目录方面有更大的灵活性。","还启用了模块代理功能(默认使用","这些脚本帮助根目录下","这是","这样的目录,因为这些名称含义太泛了,违背了单一职责原则。","这里放不希望被其他应用程序或者库导入的代码。注意:从","这里放希望被其他应用程序或者库导入的代码,所以在这里放东西之前要三思。","这里是服务对外接口的实现,定义接口时,我们应该遵循","进行自动化管理。","通常只包含一个简单的","通用应用目录","通用应用目录/configs/init/scripts/build/deployments/test/readme.md2.6","部署的应用程序),这个目录被称为","部署相关","部署相关。","配置信息","配置信息。","钩子","钩子。","钩子,可以帮忙我们在代码提交时完成一些检测,比如分支名称和","页面,则在这里放置项目网站数据。","项目依赖的第三方工具,比如","项目工具","项目工具。","项目布局","项目文档","项目文档。","项目用到的相关资源文件,比如项目","项目确实有一个","项目网站数据","项目网站数据。","项目说明","项目说明。","项目资源文件","项目资源文件。","项目配套工具,实现这些工具可以使用从",")。"],"第二篇:代码风格/1.格式化.html":["\"img\"","%d,","%s\",","&&","//","05","1.格式化","2022","21","21:18:14","=","===",">","a,","b)","bad","console.log(\"plugin","e.target.tagnam","err","err.error())","err:%v\",","file","fmt","fmt.printf(\"%v这里要空格%v\",","function(e){","gitbook该文章修订时间:","go","gofmt","gofmt,如","goland","good","id","logger.errorf(\"num","logger.errorf(\"num:%d,","num,","popup....\");document.onclick","power","set","tool","watcher","window.open(e.target.src,e.target.src)}img{cursor:pointer}","中可勾选","主体风格占位符主体风格","代码必须用","使用制表符进行缩进,使用空白符进行对齐。","占位符","在保存代码时可设置自动执行","字符串占位符,如果输入数据来自外部,建议使用%q进行安全转义。","工具格式化。","并指定作用范围。","格式化字符串中多个占位符之间要有空格。","的","通过%v打印错误信息时建议加冒号。"],"第二篇:代码风格/2.代码行.html":["!=","\"img\"","%v","%v\\n\",","&&","(int(bar)","+","...","//","0","0)","0,","05","1","1,","13,","144,","2","2,","2.0,","2.代码行","2022","21","21,","21:18:32","233)","3,","3.0}[i","34,","5,","55,","55,89,","8,","80","800","89,",":=","=","===",">","[]float64{1.0,","bad","bodi","console.log(\"plugin","e.target.tagnam","err","fmt.printf(\"%f\\n\",","fmt.printf(\"%v","foo","foo()","func","function(e){","gitbook该文章修订时间:","gofmt","good","i]","import","int","int(bar)","nil","popup....\");document.onclick","power","res,","res.ret","return","struct","tag","v","v+1","v+1)","var","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","||","}","一行代码不要超过120列,超过的情况,使用合理的方法换行。","不必要的空行","不要添加没必要的括号。","作为下标不留空格","作为入参不要留空格","作为输入参数或者数组下标时,运算符和操作数之间不需要空格,紧凑展示。","例外场景:","函数体第一行不要换行。","函数调用和对调用结果的处理,是紧密相连的,不能加空行。","函数长度不能超过","工具生成的代码","括号和空格","换行方式","文件长度不能超过","模块语句","的逻辑。","行。","行数","行长度换行方式不必要的空行括号和空格行数行长度","语句前不要换行。","运算符和操作数之间要留空格","运算符和操作数之间要留空格。","遵循","采用惰性换行,换行前应尽可能占满当前行不留空位。"],"第二篇:代码风格/3.字符串.html":["\"","\"img\"","\"rsp","\"tom,jerry,spike\"","\"unknown","%v","%v\",","&&","+","//","05","2022","21","22:19:54","3.字符串",":=","=","===","[]string{\"tom\",\"jerry\",\"spike\"}","`unknown","bad","code","code)","code,","console.log(\"plugin","e.target.tagnam","error:\"test\"`","fmt.sprintf(\"rsp","function(e){","gitbook该文章修订时间:","go","good","is\"","list","map","msg","msg)","name:\\\"test\\\"\"","popup....\");document.onclick","power","receiv","str","var","wanterror","window.open(e.target.src,e.target.src)}img{cursor:pointer}","不要使用字符串表示","和","字符串字面量","字符串拼接","支持使用原始字符串字面值,可以使用反引号来表示原生字符串。在需要转义的场景下,我们应该尽量使用使用反引号表示字符串,避免转义。","结构。","行内字符串拼接时,出于性能的考虑,待拼接字符串数量较少(fmt.sprintf()。"],"第二篇:代码风格/4.依赖管理.html":["\"../net\"","\"bar/testutil\"","\"encoding/json\"","\"fmt\"","\"foo\"","\"github.com/olivere/elastic/v7\"","\"github.com/xxxxxxxx/utils/formatlog\"","\"github.com/xxxxxxxx/xxxserver/pkg/formatlog\"","\"go.uber.org/atomic\"","\"golang.org/x/sync/errgroup\"","\"img\"","\"myproject/controller\"","\"myproject/models\"","\"os\"","\"strings\"","\"xxxx.com/proj/net\"","&&","(",")",".",".形式导入包",".,因为它使程序难以阅读,比如使用","//","05","15:40:04","2022","22","4.依赖管理","404","=","===","bad","bar/testutil,后者导入","baz","console.log(\"plugin","e.target.tagnam","elast","foo","foo_test","foo。所以我们使用import","foo,让测试文件假装是包","fork","function(e){","git","git.code.oa.com/group/myrepo","gitbook该文章修订时间:","github","github.com/astaxie/beego/orm","github.com/xxx/xxx。内部包是指不能被外部","go","go.sum文件必须提交,不要添加到.gitignore规则中。","go1.11","goimport","good","import","init","mod","modul","packag","popup....\");document.onclick","power","public","vendor","window.open(e.target.src,e.target.src)}img{cursor:pointer}","一份。","上的包要确认活跃度,不知名的包可能会被下架或出现不兼容的版本升级情况,必要情况下可","不要使用相对路径导入内部包,应该使用完整的路径引入包。","中,因为它使用","了。","以上必须使用","会自动添加依赖的包,并移除未引用的包。把依赖包按字母序升序排列,并对包进行分组管理。通过空行隔开,默认分为标准库包和非标准库包(第三方包和内部包)。","作为依赖管理的项目不要提交","使用","依赖规范import","内部包","包名和","只能用于测试文件,且必须是为了解决循环依赖,才能使用。","在这种情况下,测试文件不能在包","外部包","如引入","导入的包按照先后顺序应该分为三组:","工具自动格式化引入的包名,import","带域名的包名都属于外部包,如","引入第三方包要慎重。","必要时给包起个别名","标准包","模式。go","的一部分,尽管它不是。除了这一种情况,不要使用import","的包。","目录。","目录下,而不是具体业务目录下。","管理依赖的项目,","规则为准。","规范","规范依赖规范","规范原则上以","该包已经","路径名不一致时,或者多个相同包名冲突时,使用别名代替会有更好的可读性。","这样的标识符,不知道其是顶级标识符还是导入包中的顶级标识符。","通用的功能包,应该放在"],"第二篇:代码风格/5.初始化.html":["\"\"","\"\",","\"0\",","\"a\"","\"add\"},","\"bar\"","\"bar\"}","\"config\",","\"config.yaml\"),","\"doe\",","\"error\"","\"foo\"","\"foo\"}","\"img\"","\"john\",","\"my_env\"","\"subtract\"},","&&","&_config)","&config)","&t{name:","(","(myerror)",")","+","...","//","0","0,","05","0},","0,但不够直观","0,更加直观","1","1)","15:43:51","2","2)","2022","22","3","3)","5.初始化",":=","=","==","===","[]int","[]int{}","[]string)","[]struct{","_","_config","_defaultfoo","_e","add","add1","add2","admin:","append(nums,","area","b","bad","bad:","blue","bool","cap)","cloud","color.new(0x0000ff)","color.new(0x00ff00)","color.new(0xff0000)","config","console.log(\"plugin","const","cwd,","database/sql、编码类型注册表等;","defaultfoo()","e.target.tagnam","envvar","err","error","error()","f","f()","false,","firstname:","float64","foo","foo()","foo(m","foo{","func","function","function(e){","gitbook该文章修订时间:","give","good","googl","green","handl","handle(info)","i/o","i/o,包括文件系统、网络和系统调用。","in64(0)","inconsist","info,","init()","init()初始化","init(),当","int","int64","iota","ioutil.readfile(","isempty(","k","k1:","k2:","k3:","lastname:","len(s)","loadconfig()","m","m1","m2","m[\"key\"].(info)","m[k1]","m[k2]","m[k3]","magic”。","main()","make()","make([]int)","make([]int,","make(map[t1]t2)","make(map[t1]t2,","map","map[string]interface{})","map[t1]t2","map[t1]t2{","map[t1]t2{}","map初始化","map,这样可以在初始化时指定元素。","middlename:","multipli","myerror","myerror{}","new(t)","nil","nil。","nil,另一个不是),并且在不同的情况下(例如序列化),这两个切片的处理方式可能不同。","num","op","oper","or,","os.getwd()","panic","path.join(cwd,","popup....\");document.onclick","power","raw,","red","return","s","s1","s2","slice","slice。","slice申明变量避免使用","slice,这意味着,","sptr","sptr.name","string","struct","struct{}","struct初始化","subtract","sval","test","true,","true}","type","t{name:","user","user{","user{\"john\",","user{}","v1","v1,","v2","v2,","v3","v3,","var","var。","volum","want","want:","window.open(e.target.src,e.target.src)}img{cursor:pointer}","x","yaml.unmarshal(raw,","{","{add,","{give:","{subtract,","}","}{","不可避免时,init()","不管是全局切片还是局部切片,使用","不能满足这些要求的代码可能要在","个或更少的字段,则可以在测试表中省略字段名称。","仅将相关的声明放在一组。不要将不相关的声明放在一组。","优先使用","使用make()初始化,并指定容量。","使用字段名初始化结构体。","例外,如果是相似的一组变量,请使用","例外:在字段名提供有意义上下文的地方可以显示指定零值。如表驱动单元测试中的测试用例,即使字段为零值,限制指定零值,通过字段名可清晰地表达用例的含义。","例外:如果","例外:如果有","全局变量使用","全局变量申明使用","关键字并省略类型。","关键字申明,一般情况下其类型与表达式的类型一致,这种情况下可省略其类型。","凡事无绝对,某些情况下,init()","函数中被调用(或程序生命周期中的其他地方),或作为","函数之间的关系可能会使代码变得脆弱和容易出错;","函数本身的一部分。特别是打算给其他程序使用的库应该特别注意代码行为的完全确定性,","函数的顺序或副作用。虽然","函数而不是字面量,因为这样看起来更容易和申明区分开来。","切片","切片是有效的切片,但它不等于长度为","切片,代码会更加简洁清晰。","创建。","初始化","初始化结构指针变量使用字面量","初始化结构指针变量时,请使用&t{}代替new(t),可以与结构体初始化在代码风格上保持一致。","包含固定的元素列表,则使用字面量初始化","变量申明的位置尽量靠近使用的地方。","另外,分组使用的位置没有限制,我们也可以在函数内部使用它们。","可能更可取或是必要的:","和其他形式的确定性预计算的优化。","因此","在写入时会","基于当前目录","声明","声明到一组。","声明和初始化在视觉上很相似","声明和初始化在视觉上是不同的","声明结构,因为这样更加简洁,其各个字段值为字段类型对应的零值。","声明零值结构使用关键字","如果全局变量仅在单个函数内使用,则应该定义为局部变量。","如果在声明中省略了结构的所有字段,请使用","如果表达式的类型与所需的类型不完全匹配,请指定类型。","容量大小。","对于变量、常量的声明,相似的声明应该放在一组。类型的定义同样适用。","就近申明。","尽可能地在初始化时提供","尽可能避免使用","局部变量使用短变量声明形式(:=)。","已经明确了返回一个字符串类型,因此我们没有必要显式指定类型。","应该做到:","或者为了更好的可测试性","是一个有效的","是一个有效的长度为","显示指明","来代替。","由于","申明","申明变量","的","的切片(一个为","的非","相似的声明放在一组。","省略结构中的零值字段。","空切片使用","类型。","类型的实例,但是我们要","而不是执行“init","而非","虽然默认为","记住,虽然","读写安全","返回一个","避免使用","长度为","非零值","顺序是明确的,但代码可以更改,","(1)不能表示为单个赋值的复杂表达式;","(1)您不应明确返回长度为零的切片。应该返回nil","(1)无论程序环境或调用如何,行为都必须是完全确定的;","(2)可插入的钩子,如","(2)要检查切片是否为空,请始终使用","(2)避免依赖其他","(3)对","(3)避免访问或操作全局变量和环境状态,如机器信息、环境变量、工作目录、程序参数/输入等;","(3)零值切片(用var声明的切片)可立即使用,无需调用","(4)避免"],"第二篇:代码风格/6.错误处理.html":["!=","!ok","\",","\"b\",","\"c\"}","\"fmt\"","\"img\"","\"log\"","\"time\"","%s\",","%v\",","%v\",err))","&&","(","(error,","(int,",")","*","+0x48","+0x65","...","//","//手动抛出","/users/dablelv/work/code/test/main.go:14","/users/dablelv/work/code/test/main.go:16","0","05","10:48:42","15:47:37","2022","2022/03/27","22","3","44","6","6.错误处理",":=","=","==","===","======begin","[4]","[]string)","[]string{\"a\",","[running]:","_","```go","argument","arr","arr[4])","bad","code","comma","console.log(\"plugin","continue,","creat","defer","do()","e.target.tagnam","err","err)","err.error())","error","error\")","error)","error:","errors.new(\"an","errors.new(fmt.sprintf(\"modul","error。","etc.","except","exception\")","exe.run()","exec","f()","fail","failures)的主要根源。如果发生错误,该函数应该返回错误,让调用方决定如何处理它。","fast","fmt.errorf(\"modul","fmt.errorf(\"run","fmt.errorf(\"som","fmt.errorf。","fmt.fprintln(os.stderr,","fmt.println(\"======aft","fmt.println(\"======begin","fmt.println(err)","func","func()","function(e){","geton","getone()","gitbook该文章修订时间:","go","good","goroutin","goroutine,必须在入口处捕获","handl","i.(string)","import","index","int)","len(args)","length","log","log.fat","log.fatalf","log.println(\"exec","log.println(\"hello,\",","log.println(debug.stack())","main","main()","main.main","main.main.func2()","nil","nil,但是满足其他逻辑进入到","normal","ok","ok。","os.exit(1)","out","packag","panic","panic(\"an","panic(\"nil","panic(44)","panic/recov","panic:","panic。","panic。因为","panic。因此,请始终使用","panic。每个自行启动的","panic,因为这样可以记录错误的同时结束程序,方便排查问题。","panic,并打印详细堆栈信息或进行其它处理。","panic,建议使用","pointer","popup....\");document.onclick","power","rang","record","recov","recover();","recover。","required\")","return","run(arg","run(os.args[1:])","run(os.args[1:]);","runtim","slice","someth","t","t,","time.second)","time.sleep(1","us","var","window.open(e.target.src,e.target.src)}img{cursor:pointer}","work======","work======\")","x","x,","xx.close()可以不用显式处理。","xxx:","y","y,","{","||","}","}()","一个可能引发的问题就是","下面是一个反面示例,其他","不是错误处理的合适策略,仅当发生不可恢复的异常(如","不要包装系统调用错误,并给出一些没意义的附加信息。","不要随便","中使用,一般用来捕获程序运行期间发生异常抛出的","中无法捕获当前","中调用才会生效。","中需要使用","优雅地处理错误。","作为函数的值返回,必须对","作为函数返回值且有多个返回值的时候,error","使用","值将引发","包中使用","包中程序初始化是一个例外,如程序启动时,文件无法打开或数据库无法连接导致程序无法正常运行可使用","原则。","只有在","只能在当前","可显示使用空标识符(下划线)忽略。","在","在业务逻辑处理中禁止使用","块内,读取","处理","处理panic","处理recov","处理类型断言error","如果","如果不关心是否成功,可显示忽略","如果为","如果出现失败应该立即返回error,如果继续处理,则属于特殊情况需要添加注释。","如果函数返回值需用于初始化其他变量,则采用下面的方式。","对于其它的包,可导出的接口也不能有","式","式。如果不关心是否成功,ok","引用)时,才可以","当y与err都为空时,函数的调用者会出现错误的调用逻辑","必须在","必须是最后一个参数。","或","或程序主动抛出的","捕获最晚要在当前","是级联失败(cascad","显示处理","最顶层将其捕获,在其他","来取代","模拟","生成带参数的","用于捕获","的","的异常,禁止滥用","程序将意外终止并输出:","类型断言","类型断言使用","类型断言的单个返回值形式如果断言失败将产生","结束程序而不是","被捕获。","越界运行时抛出的","运行结果:","进行处理,或使用空白标识符忽略。对于defer","采用独立的错误流进行处理。","错误判断独立处理,不与其他变量组合判断。"],"第二篇:代码风格/7.注释.html":["\"","\"img\"","%s\",","&&","(","(/*",")","*/","*/)","*/,","*attrmodel","*common.context)","+","...","....","/*","//","05","1","15:50:17","1。","2022","22","2。","3。","4。","7.注释","=","===","aliases)都必须有注释说明。","bad","basic","bool","bool)","c","code","config\"","console.log(\"plugin","const","constant","data","definition)和类型别名(typ","demograph","done","driven","e.target.tagnam","email","faketim","flagconfigfil","flagconfigfile1","flagconfigfile2","flagconfigfile3","flagconfigfile4","fmt.sprintf(\"fak","fullnam","func","func(usernam","function(e){","functions.","future.","gener","gitbook该文章修订时间:","go","good","html.","implement","int","iota","isloc","islocal,","local","math","mathemat","mayb","name","newattrmodel(ctx","newtattrmodel","output","packag","popup....\");document.onclick","power","printinfo(\"foo\",","printinfo(nam","provid","region","region,","return","review","statu","status)","status=","statusdon","statusinprogress","statusreadi","storageclass","string","string)","string,","struct","such","templat","textual","time.tim","todo","true","true)","true,","type","unknownregion","user","username)","var","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","不要用注释删除代码。","中英文之间应该有空格。","函数信息描述\"。","函数名","函数注释","函数调用中意义不明确的实参可能会损害代码可读性。当参数名称的含义不明显时,请为参数添加","前都应该被删除,除非添加注释讲解为什么不删除,","包信息描述。","包名","包如果有多个","包注释","变量名","变量和常量注释","后面要有空格。","命令行参数。","命名清晰的地方,不要添加无意义的注释。类型注释","块注释即在代码块前给出一个总的说明,然后每行变量或常量的末尾给出详细注释,这样看起来更加简洁。","大块变量或常量定义时的注释方式。","存储类型","对于上面的示例代码,还有一种更好的处理方式是将上面的","导出与非导出接口均需要有注释。","导出的函数和方法(结构体或接口下的函数称为方法)都必须有注释。","并且标明后续处理建议(如删除计划)。","必要情况下字段给出注释。","或者","所有注释掉的代码在提交","接口注释","描述\"。","描述\",斜线后面紧跟一个空格。","文件中(一般是和包同名的文件)即可。","文件,只需要出现在一个","族群","是属性数据层操作类的工厂方法","标准库时间的类型别名","样式注释","格式为//","格式为:\"//","每个包都应该有一个包注释。","每个需要导出的变量和常量都必须有注释说明。","每个需要导出的类型定义(type","每个需要导出的自定义结构体或者接口都必须有注释说明。","注意,如果方法的接收器为不可导出类型,可以不注释,但需要质疑该方法可导出的必要性。","注释对变量和常量进行简要介绍,放在常量或变量定义的前一行。独行注释格式为:\"//","注释对结构进行简要介绍,放在结构体定义的前一行。格式为:\"//","注释描述函数或方法功能、调用方等信息。格式为:\"//","注释结束添加点或句号,参考标准库源码注释。","特殊实现需要注释。","用户结构定义了用户基础信息","程序中每一个被导出的(大写的)名字,都应该有一个文档注释。","类型名","类型换成自定义类型。将来,该参数可以支持不仅仅局限于两个状态(true/false)。","结构体信息描述\"。","结构体内的可导出成员变量名,如果是个生僻词或意义不明确的词,必须要单独给出注释,放在成员变量的前一行或同一行的末尾。","结构体名","结构体注释","解析函数应该注明解析字符串的范例,并明确不能处理的异常情况。","该注释对类型进行简要介绍,放在定义的前一行。","返回指定用户名的完整名称。","通用","通用包注释函数注释结构体注释变量和常量注释类型注释接口注释在编码阶段同步写好类型、变量、函数、包注释,注释可以通过godoc导出生成文档。","避免参数语义不明确。","配置文件的命令行参数名","配置文件的命令行参数名。","需要描述谁,在什么场景下,如何使用接口。","非导出的函数,如果比较简单,不需要注释。"],"第二篇:代码风格/8.命名.html":["\"/api/v3/projects/%s/merge_request/%s/commits\"","\"1.0.0\"","\"bar\")","\"foo\",","\"http\"","\"https\"","\"https://git.code.oa.com\"","\"img\"","\"john\",","\"john@example.com\",","%q","%q\",","&&","(","(e","(f","(format","(https://golang.org/ref/spec#predeclared_identifiers)。","(https://rakyll.org/styl","(n","(string","(system",")","*notfounderror)","*resolveerror)","...","//","05","15:54:25","20","2022","22","8.命名",":=","=","===",">","[]byte)","[]data){}","[predeclar","[style","allow","api","apiclient、repoid、userid;","apiclient;","append","appvers","array","bad","blog","bool","broken\")","byte","c","c,","call)","cap","car","classesuid","close","common","complex","complex128","complex64","console.log(\"plugin","const","constants:","context.context,","conversion)","copi","customer、wikipage、account、addressparser,它不应是动词。","data","dataetl(ctx","data、info","delet","e.file)","e.path)","e.target.tagnam","echart","email","email:","er","err","errbrokenlink","errcouldnotopen","errnotfound","error","error()","error)","errormessag","errors.a","errors.new(\"could","errors.new(\"link","errors.new(\"not","error。","err。","etldata(ctx","f.err","f.error","f.str","f.string","fals","file","filterhandlermap","float32","float64","fmt","fmt.sprintf(\"/api/v3/projects/%s/merge_request/%s/commits\",","fmt.sprintf(\"fil","fmt.sprintf(\"resolv","foo","foo)","found\")","found\",","func","function(e){","functions:","getlinecount()","getmrcommitsuri()","gitbook该文章修订时间:","go","goechart","good","guidelin","handleerrormessage(error","handleerrormessage(msg","has,is,can","helper","http","i/o)","identifiers]","imag","info","int","int,","int16","int32","int64","int8","interfac","iota","languag","len","linecount","linecount,","make","map","md5","me,this,self","mrcommitsuri","msg","name","net/url","new","nil","notfounderror","open\")","optohandl","packag","packages/)。","packages]","panic","paniclinesparsing(){}","parsepaniclines(){}","path","popup....\");document.onclick","power","print","println","rang","read","read(p","reader","reader,writer。","real","recov","recover()","resolveerror","return","rune","scheme","slice","sliceindex","specif","start","start([]byte)","stop","stop()","str","strconv","string","string()","string)","struct","syscal","tgithost","to/for。","true","type","types:","u","uid","uidarray","uidslic","uidsliceslic","uint","uint16","uint32","uint64","uint8","uintptr","urlarray","urlarray;","user","username:","user{","util","util、common、misc、global。packag","value:","var","verifyflow)","vet之类的工具会正确地指出这些和其他情况下的隐式问题。","window.open(e.target.src,e.target.src)}img{cursor:pointer}","xxx.pb.go,gotest","xxx_test.go","zero","{","}","一起使用。","三个以上函数的接口名,类似于结构体名。","不用复数。如","不要使用2/4来表达英文","不要使用大而全的无意义包名。","不要用宽泛、无意义的名字,如:","不要轻易使用别名。","两个函数的接口名综合两个函数名。","二维切片或数组。","代码生成工具自动生成的代码可排除此规则(如协议生成文件","传输协议。","但我们仍然可以在的包内将其和","作为后缀,如","作用域内隐式覆盖","作用域较大的名字(全局变量),不要使用缩写,要有明确的意义。","作用域较小的名字(局部变量/函数参数),尽量使用简短的名字。","作用域隐藏内置","保持","全局量中不要包含格式化字符,否则必然违反就近原则。","其他情况都应该使用该名词原有的写法,如","函数名必须遵循驼峰式,首字母根据访问控制决定使用大写或小写。","函数命名","函数应该以动词开头。","加密传输协议","包名应该为小写单词,不要使用下划线或者混合大小写,使用多级目录来划分层级。","包名谨慎使用缩写。当缩写是程序员广泛熟知的词时,可以使用缩写。例如:","包命名","匹配。","单个函数的接口名以","只有一个源文件的包,包名应该和文件名保持一致。","名字应该追求清晰且越来越收敛,符合‘单一职责’原则,而不是像common一样,什么都能往里面放,越来越膨胀,让依赖关系变得复杂,不利于阅读、复用、重构。注意,xxx/utils/encryption这样的包名是允许的。","命名不能采用","命名规则基本保持和结构体命名规则一致。","和","在使用预先分配的标识符时编译器不会报告错误,但是诸如go","在视觉上是相似的","多行初始化。","多行定义。","好。","好,sliceindex","如","如无必要,不要起和包相同的名字。","如果变量为私有,且特有名词为首个单词,则使用小写,如","如果是枚举类型的常量,需要先创建相应类型。","字符串的搜索存在二义性","字节数组读取接口。","对于存储为全局变量的错误值,根据是否导出,使用前缀","对于自定义错误类型,请改用后缀","导出以下两个错误,以便此包的用户可以将它们与errors.i","导出全局变量。","导出全局常量。","小写,如果有多个单词使用连字符分隔。","小汽车结构申明。","尽量不要用拼音命名。","尽量采取有意义、简短的包名,尽量不要和标准库冲突。","工具自动生成文件","常量命名","或","或者","接口命名","接收器的名称在函数超过","推荐以类名第一个英文首字母的小写作为接收器的命名。","文件名应该采用小写,并且使用下划线分割各个单词。","文件命名","方法接收器命名","明文传输协议","更多可参考","未导出全局变量。","未导出全局常量。","概述了几个内置的,不应在","比","比如多个班级下的学生id。","特有名词时,需遵循以下规则:","现在是明确的","的一部分。","的名字和目录一致。","私有量和局部量规范一致,均以小写字母开头。","等单词开头。","简单明了的包命名,如:time、list、http。","类型,则名称应以","结构体名应该是名词或名词短语,如","结构体命名","结构体的定义和初始化格式采用多行。","缩略语要么全小写,要么全大写。","而不是net/urls。","若量类型为","虽然这些使用内置标识符的自定义字段可以编译通过,但对","行的时候不要用单字符。","要好。","要好,i","要比","详细的专有名词列表可参考这里。","语言规范","读取整个给定的字节数据并返回读取的长度","这个错误没有被导出,因为我们不想让它成为公共","这个错误没有被导出,因为我们不想让它成为我们公共","这个错误被导出,以便这个包的用户可以将它与","这类意义太宽泛的结构体名。","这类易混淆名称。","进行匹配。","通用","通用规则","通用规则项目命名包命名文件命名函数命名结构体命名接口命名量命名通用常量命名方法接收器命名错误命名避免使用内置名称命名是代码规范中很重要的一部分,统一的命名规范有利于提高代码的可读性,好的命名仅仅通过命名就可以获取到足够多的信息。","避免使用","避免使用内置名称","采用有意义、简短的文件名。","采用驼峰命名方式,首字母根据访问控制采用大写或者小写。","里面的下划线)。","量名不应该以类型作为前缀/后缀。","量名应该是名词,进行时和过去式可以做形容词,成为量名的一部分。","量名遵循驼峰式,根据是否导出决定首字母大小写。","量命名","错误命名","错误示例:urlarray,应该写成","非缩略语则应该使用驼峰命名。","项目中使用的标识符","项目命名"],"第二篇:代码风格/9.流程控制.html":["!=","!allowuserlogin","\"\"","\"a\"","\"b\"","\"darwin\":","\"img\"","\"linux\":","&&","+=","...","//","0","05","1","10","100","16:56:50","2,","2022","22","3,","4,","5}","9.流程控制",":=",";","=","==","===","[]int{1,","_,","```go","allowuserlogin","arg","args[0]","array","b","b,","bad","bar","bool","case","cfg.decode(data)","cfg.decode(data);","codeusing(f,","console.log(\"plugin","d)","d,","data,","default:","default。","defer","delete(m,","e.target.tagnam","else。","err","error","errorcod","errors.new(\"miss","f,","f.close","f.close()","f.stat()","fals","file\")","file.chmod(0664)","file.chmod(0664);","fmt.printf(\"%s.\\n\",","fmt.println(\"linux.\")","fmt.println(\"mac","fmt.println(&v)","fmt.println(cfg)","foo","foo()","foo(bar","foo(key","freebsd,","func","function(e){","gitbook该文章修订时间:","good","goto","goto,其他框架或底层源码推荐尽量不用。","handl","ifforrangeswitchreturngoto程序退出方式if","if。","int","int)","ioutil.readall(f)","ioutil.readfile(name)","ioutil.readfile(name);","key","key)","key.expired()","len(args)","len(str)","log.fat","log.fatal(\"miss","log.fatal(err)","m","main","main()","name","nil","openbsd,","os","os\")","os)","os.args[1:]","os.open(name)","packag","pathkey","pathkey:","plan9,","popup....\");document.onclick","power","rang","return","return。","run()","run();","runtime.goos;","someth","str","string)","sum","switch","true","urlkey","urlkey:","v","var","window.open(e.target.src,e.target.src)}img{cursor:pointer}","windows...","{","}","一旦有错误发生,马上返回。","不必要的","不要使用双重否定。","业务代码禁止使用","中退出程序且只退出一次。","之外使用函数调用的结果,则不应尝试缩小范围。","仅在","使用","使用os.exit或者log.fatal*退出程序,而不是panic。","使用了","函数中调用os.exit或log.fatal*且只调用一次。如果有多个错误场景停止程序执行,请将该逻辑放在单独的函数并从中返回错误。","则需要以","判断字符串是否为空,这样更加直观。","判断条件较为复杂时,考虑封装成函数。","又如","在","多个相似","如果只需要第一项(key),就丢弃第二项(value)。","如果只需要第二项,则把第一项置为空标识符(下划线)。","如果在","如果我们调用","如果需要在","对两个值进行判断时,被比较的值放在左边。","对于","将不会被执行","尽早","当程序的多个函数具有退出能力时会存在一些问题:","循环变量的地址不要存储。","循环变量的地址指向的是同一个变量,我们可以通过赋值给一个同名的变量,通过变量逃逸,来达到取不同地址的目的。","必须要有","打印的是不同的地址","打印的是相同的地址","把简单的逻辑判断放前面,复杂的逻辑判断放后面。","接受初始化语句,尽可能缩小变量作用域。","替换。","最小化变量作用域。","用","的两个分支中都设置变量,则可以将其替换为单个","程序退出方式","类型的变量,应直接进行真假判断。","结束。","这会精简main()函数,并将所有关键业务逻辑放入一个单独的、可测试的函数中。","通常可以简写为","队列里的函数调用,这增加了跳过重要清理任务的风险。","需要有一个缺省处理逻辑","(1)不明显的控制流:任何函数都可以退出程序,因此很难对控制流进行推理;","(2)难以测试:退出程序的函数也将退出调用它的测试,这使得函数很难测试,并跳过了尚未被运行的其他代码;","(3)跳过清理:当函数退出程序时,会跳过已经进入"],"第二篇:代码风格/10.函数.html":["!=","\"application/json\"","\"application/json\",","\"img\"","%v\",","&&","&something{}","(*node,","([]userinfo,","(f","(lat,","(map[uint64]userinfo,","(n","(s","*","*bookingservice)","*foo)","*node","*node)","*someth","*something)","+1,一个","...","...string)","...uint64)","//","0","05","1","1)","10.函数","16:00:37","1,不要使用魔法数字。","2","2022","22","3","3.14","5",":=","=","==","===",">=2","[]int)","[]string)","_,","addarea","addarea(area","append(s.areas,","area","area)","bad","bool","bytes.newbuffer([]byte(req)))","calccost(n","calccost(s.weights)","close()","console.log(\"plugin","const","const,","continu","cost()","data","db.query(v)","defer","defer。","e.target.tagnam","err","error","error)","fals","field","fields,","fields.close()","filtersomething(valu","float64","float64)","float64,","foo(getids())","foo(ids)","func","func()","function(e){","getarea(r","getids()","getlength(r","getuserinfobatch","getuserinfobatch(uid","gitbook该文章修订时间:","good","hasarea","hasarea(area","http.get(url)","http.post(url,","id","inccounter()","inccountern()","info","info,","int","int。","iscontinue,","jsoncontenttyp","locat","location()","log.printf(\"invalid","long","map。","map,slice,chan,interfac","metrics.incrcounter(cntcachemisskey,","modifyuserinfo(user)","new(order.areaorder)","newsomething()","nil","p.processunity()","parent1","parent1()","parent2","parent2()","pi","popup....\");document.onclick","power","process(v)","r","rang","resp,","resp.body.close()","ret","ret,","retcod","return","rsp,","s.area","s.areaorders[area]","s.hasarea(area)","s.lock()","s.unlock()","slice","someth","split()","splitn()。","sql","srverr.errareaconflict","stop()","string)","struct,","struct{","true","type","v","v)","v.call();","v.f1","v.send()","v:","valu","var的后面。","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","{...}","}","}()","不存在。如果不允许部分失败,使用","不要传递指针。","不要返回多个用于控制流程的状态。","不要这样使用","个,如果超过,请封装成新的类型。","个,或有相同类型的返回值,或者从上下文中不清楚返回值的含义,使用命名返回,其它情况不建议使用命名返回。","中执行。","从函数名开始算第一层,当函数的嵌套深度超过4层,往往会导致圈复杂度过高,函数变得复杂不可读,我们可以通过拆分函数的方式来减少嵌套深度。","代码也可以优先处理条件不满足或错误的情况,尽早返回或继续循环来减少嵌套。","入参&返回值成员函数局部变量defer减少嵌套(圈复杂度)魔法字面量函数分组与顺序入参&返回值","入参和返回值个数均不能超过","入参和返回值均以小写字母开头。","入参和返回值顺序根据关联性排在一起。","减少嵌套(圈复杂度)","函数分组与顺序","函数应按粗略的调用顺序排序。","函数应该放在","函数进行资源的释放。","判断是否有错误发生之后,再","单函数圈复杂度最大值","即可。可参考标准库包的","同一文件中的函数应按接收者分组。","和","和一个","圆周率","如下面这个函数的第二个参数是没有必要的,大部分时候都是","如果传入的参数通常是固定的,考虑通过实现多个函数实现默认参数。","如果字符串字面量出现","如果局部变量仅被使用一次,且不能起到解释逻辑的作用时,应该删除局部变量,直接内联。","如果操作成功,再","如果方法不使用类的成员,应该实现为非成员函数。","如果非成员函数要使用类的多个属性时,应该实现为成员函数。","导出的函数应该放在非导出函数前面","尽量用","尽量用值传递,非指针传递。","局部变量","嵌套深度不能超过4层。","应当使用如下的方式:","建议调整为这样:","当存在资源管理时,应紧跟","成员函数","或者","批量查询函数返回值使用","批量获取用户信息(允许部分失败)。","批量获取用户信息(需全部成功)。","按照上面的规则,下面给出好坏文件内容布局示例。","有时后我们需要根据多个","条件不满足或出现错误应尽早返回。","构造函数应该放在其他函数之前,如newxyz()/newxyz()。","查询对应的值,可能会出现部分失败的情况,如某个","次,则禁止使用,用一个有名称的常量代替,可读性更好。","正常逻辑不应该在","注入","添加成功或出错。","由于函数是按接收者分组的,因此普通工具函数应在文件末尾出现。","示例,实际不要这么查询,防止","禁止在循环中使用","类型为","继续使用","继续使用field","表示执行是否成功,而不是用","表示执行状态的返回值应该放在最后。","返回值超过","返回值,如果允许部分失败使用","还是","释放资源。","除了","魔法字面量"],"第二篇:代码风格/11.单元测试.html":["\"\",","\"1\",","\"192.0.2.0\",","\"192.0.2.0:8000\",","\"192.0.2.0:http\",","\"1:8\",","\"8\",","\"8000\",","\":8000\",","\"http\",","\"img\"","&&","*testing.t)","//","01","05","11.单元测试","2","2022","21:44:06",":=","=","===","[]struct{","_,","assert.equal(t,","bad","console.log(\"plugin","e.target.tagnam","err","err)","example_test.go。","func","func(t","function(e){","gitbook该文章修订时间:","give","give:","good","host)","host,","import","net.splithostport(\"192.0.2.0:8000\")","net.splithostport(\"192.0.2.0:http\")","net.splithostport(\"1:8\")","net.splithostport(\":8000\")","net.splithostport(tt.give)","popup....\");document.onclick","port)","port,","power","rang","require.noerror(t,","string","t.run(tt.give,","test","testexample。","testsplithostport(t","tt","tt.wanthost,","tt.wantport,","wanthost","wanthost:","wantport","wantport:","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","})","},","}{","使用表驱动的方式编写用例,代码看上去会更简洁。","倍(1600","分组等其他规范细节和普通文件保持一致。","单元测试文件名命名规范为","单测文件行数限制是普通文件的","开头,例如","每个重要的可导出函数都要首先编写测试用例,测试用例和正规代码一起提交方便进行回归测试。","测试用例的函数名称必须以","由于单测文件内的函数都是不对外的,所有可导出函数可以没有注释,但是结构体定义时尽量不要导出。","行)。单测函数行数限制也是普通函数的2倍(160行)。圈复杂度、列数限制、","表驱动测试."],"第二篇:代码风格/12.杂项.html":["\"img\"","&&","05","1.基本类型偏执通用场景结构体2.单一职责包&文件函数3.goroutine4.应用服务5.常用工具1.基本类型偏执","12.杂项","17:03:00","2.单一职责","2022","22","3.goroutin","4.应用服务","5.常用工具","=","===","console.log(\"plugin","e.target.tagnam","errgroup.group。","function(e){","gitbook该文章修订时间:","go","gofmt","goimport","golint","goroutin","goroutine一定要梳理清楚","int。","javascript","jslint","panic","popup....\");document.onclick","power","readme.md","recover。","recover,很容易发生","return","rpc、db","struct","tag","time.second,不要使用","vet","window.open(e.target.src,e.target.src)}img{cursor:pointer}","一个函数内不应该混杂多个实现细节,需要将独立的逻辑封装成函数。","一个函数只负责一个职责。","一个文件中出现多个结构体时,需要注意观察是否有重复的成员。","一个结构体中,成员较多,且多个成员有明显关联关系,需要封装新的结构体。","一次循环尽量只做一件事,不用担心多次循环。","中的","代码与官方推荐的格式保持一致,于是所有格式有关问题,都以","出现状态/类型等字眼时,需要使用枚举。","函数","包&文件","同一层级的逻辑细节不要拆分。","启动的","因为其他","复杂的执行/错误信息,需要定义结构体保存。","如果要开启多个线程执行一组动作,并且要等待全部完成后继续后续逻辑,考虑使用","导出的函数/变量的职责必须与包&文件职责高度一致。","导致整个进程退出。","工具可以帮我们静态分析我们的源码存在的各种问题,例如多余的代码,提前","应用服务建议有","应用服务必须要有接口测试","意义不明的成员变量,应该定义类型描述作用。","抛出的异常。如果启动的","时间类型尽量使用内置定义,如","是否符合标准等。编译前先执行代码静态分析。","是无法捕当前","最好有","有时候你会看到某个类里有很多基本类型字段,但是你隐约地能区分出某些字段好像应该在一起,如手机号和带区号的电话号码、描述某个日期范围的开始日期和结束日期,它们应该有一个真实的载体,如联系方式类和时间范围类)","本身在代码规范方面做了很多努力,很多限制都是语法要求,例如左大括号不换行,引用的包或者定义的变量不使用会报错。此外","没有","的","的基础上增加了自动删除和引入包。","的工具,主要功能就是检测代码中不规范的地方。","的结果为准。","的退出机制,防止泄漏。","的逻辑,","相关操作需要独立封装","结构体","自动格式化代码,保证所有的","解决,","解析、校验、计算的逻辑应该进行分离","说明文档,介绍服务功能、使用方法、部署时的限制与要求、基础环境依赖等","读、写、计算的逻辑应该进行分离","还是提供了很多好用的工具帮助我们进行代码的规范。","通用场景","遇到","配置文件的读取,和对象初始化应该分开,不要让对象自己根据配置文件初始化,保证构造函数足够简单","除了包的主逻辑文件中内容允许导出,包内的辅助函数都应该是非导出的。","需要判断当前文件是否应该归属于当前包,主要以职责进行判断。",",vet",",大部分的格式问题可以通过",",此工具在",",类似",",而不应全部零散放在一个大类型中。"],"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":["\"img\"","&&","*_type","*itab","...","//","05","08","1.不需要指向","16","19:22:09","2022","=","===","_type","bad","bar(&foo)","bar(foo)","bar(i","console.log(\"plugin","data","e.target.tagnam","efac","fmt.println(unsafe.sizeof(foo))","foo","foo{...}","func","function(e){","gitbook该文章修订时间:","go","good","ifac","interfac","interface{}","interface{})","map、slice、channel","popup....\");document.onclick","power","runtim","string","struct","t","tab","type","unsafe.point","var","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","一种是不含任何方法的空接口runtime.eface:","一种是带有一组方法的接口runtime.iface:","为什么可以这样,因为接口实质上在底层用两个字段表示:","具体可以看下","包两种接口类型的定义。","当然,凡事无绝对。如果需要修改接口变量本身,那么应该使用指向接口变量的指针,当然你必须清楚自己在干什么。","我们几乎不需要使用指向接口的指针,应该将接口直接赋值给接口,这样在传递过程中,实质上传递的底层数据仍然是指针,即不存在值拷贝的情况。","我们可以看下接口变量的内存宽度。","源码","的底层结构后,我们应该知道在传递过程中一般也不需要使用指向它们的指针。","的指针","类似地,在了解","(1)一个指向某些特定类型信息的指针;","(2)一个指向具体数据的指针。如果存储的数据是指针,则直接存储。如果存储的数据是一个值,则存储指向该值的指针。"],"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":["\"img\"","&&","(*handler)(nil)","(*handler)(nil)将无法编译通过。","(h","*handler)","*handler)、切片和映射是","*http.request)","*zap.logg","...","//","05","08","19:22:09","2.编译期验证","2022","=","===","_","api","bad","console.log(\"plugin","e.target.tagnam","func","function(e){","gitbook该文章修订时间:","good","h","handler","http.handler","http.responsewriter,","interfac","log","loghandl","loghandler)","loghandler{}","nil;对于结构类型是空结构。","popup....\");document.onclick","power","r","servehttp(w","struct","type","var","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","上面这三条是编译器对接口的检查机制,","合理性","在编译时验证接口的合理性,这包括:","如果*handler与http.handler的接口不匹配,那么语句var","实现了接口;","对于指针类型(如","赋值的右边应该是断言类型的零值。","错误地使用接口会在编译期报错。所以可以利用这个机制让部分问题在编译期暴露。","(1)导出类型的部分","(2)导出或非导出类型实现了接口且属于某类型的一部分(匿名嵌套);","(3)任何其他情况都违反接口合理性检查,终止编译并通知用户。"],"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":["\"img\"","#","&&","(bucket","(can","(d","(s","(use","*","*[]*bmap","*bmap","*driver)","*mapextra","*stats)","...","//","05","08","19:22:09","2022","2^b","3.在边界处拷贝",":=","=","==","===","[]trip)","alive,","allow","approxim","array","avoid","b","ba","bad","bmap.overflow","both","bucket","bucket.","buckets.","buckets;","builtin)","cap","cell","cmd/compile/internal/reflectdata/reflect.go.","compiler'","console.log(\"plugin","contain","copy(d.trips,","count","count==0.","counter","d.settrips(trips)","d.trip","defer","definition.","detail","e.target.tagnam","elem","encod","evacu","evacuated)","extra","field","first","flag","format","free","func","function(e){","gitbook该文章修订时间:","go","good","grow","half","hash","hash0","header","hiter.","hmap","hmap.buckets.","hmap.extra.oldoverflow.","hmap.extra.overflow","hmap.oldbuckets.","hold","however,","incrnoverflow","indirect","inline,","int","items)","k,","keep","key","len","len()","len(s.counters))","len(trips))","less","live","loadfactor","log_2","make","make([]trip,","make(map[string]int,","map","map.","map[string]int","mapextra","maps.","mark","mu","nevacu","nextoverflow","nil","non","note:","noverflow","number","oldbucket","oldoverflow","option","order","overflow","pointer","pointer.","pointers.","popup....\");document.onclick","power","present","previou","progress","rang","result","result[k]","return","runtime.hmap:","runtime.slice:","s.counter","s.mu.lock()","s.mu.unlock()","scan","see","seed","settrips(trip","size","size,","slice","snapshot","snapshot()","src/runtime/map.go","src/runtime/slice.go","stat","stats.snapshot()","stay","store","struct","such","sure","sync","sync.mutex","trip","trips)","trips[0]","trips[0],但不会影响","type","uint16","uint32","uint8","uintptr","unsafe.point","up","us","v","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","不再受互斥锁保护,可能会引发并发读写的错误","作为函数参数传入时,如果您存储了对它们的引用,则用户可以对其进行修改。","你是要修改","包含了指向底层数据的指针,因此在需要复制它们时要特别注意。","吗?","和","在","在接收","在返回","底层核心数据结构","我们可以找到","我们可以找到切片的底层数据结构","或","时,同样的,请注意用户对暴露内部状态的","时,请记住当","源码文件","现在是一个拷贝","的修改。","返回当前状态。","这里我们修改"],"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":["\"img\"","&&","(",")","+","//","0","05","08","1","19:22:09","2022","4.枚举从","=","===","_","add","add=0,","add=1,","assign","bad","blank","bytes","console.log(\"plugin","const","e.target.tagnam","enum","first","float64","function(e){","gitbook该文章修订时间:","go","good","identifi","ignor","int","iota","kb","logoutput","logtofil","logtofile=1,","logtoremot","logtoremote=2","logtostdout","logtostdout=0,","multipli","multiply=2","multiply=3","oper","popup....\");document.onclick","power","subtract","subtract=1,","subtract=2,","type","valu","window.open(e.target.src,e.target.src)}img{cursor:pointer}","并没有关键字","开始","开始。","开始,如果需要使第一个值为有意义的值,我们应该从","当然,凡事无绝对。如果第一个枚举值为零是有意义的,如当零值是理想的默认行为时。","来定义枚举类型,引入枚举的标准方法是声明一个自定义类型和一个使用了自增器","由于第一个值从","的","组来表示枚举值。","表示连续的非类型化整数常量,它的值是对应常量的下标(从零开始),它可用于构造一组相关常数:","预先声明的标识符"],"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":["\"img\"","&&","&s1{}","&s2{}","(s","*s)","*s2)","//","05","08","1.方法接收器为值和指针的区别","19:22:09","2022",":=","=","===","address","console.log(\"plugin","data","e.target.tagnam","effect","f","f()","func","function(e){","gitbook该文章修订时间:","go","interfac","map[int]*s{1:","map[int]s{1:","pointer","popup....\");document.onclick","power","read()","read。","read,也可以调用","return","s","s)","s.data","s1","s1)","s1ptr","s1val","s1{}","s2","s2ptr","s2val","s2{}","sptr","sptrs[1].read()","sptrs[1].write(\"test\")","str","string","string)","struct","struct{}","sval","svals[1]","svals[1].read()","svals[1].write(\"test\")","type","valu","var","vs.","window.open(e.target.src,e.target.src)}img{cursor:pointer}","write(str","write。","{","{\"a\"}}","{}","}","下面代码无法通过编译,因为","中一节","从前文可知,可取址的值可以调用接收器为指针的方法,但这里为何不能将值","你只能通过值调用","使用值接收器的方法既可以通过值调用,也可以通过指针调用。带指针接收器的方法只能通过指针或","做了说明,因为接收器为指针的方法会修改接受器,为了避免产生这种错误的行为,便禁止将值赋给和指针接收器方法集匹配的接口。","取址。","呢?","在","指针既可以调用","接收器为值和指针的方法在调用方式上是有区别的。","方法中没有使用值接收器。","是一个值,而","的","类似的,使用值接收器和指针接收器来实现接口,在判断与接口是否匹配时,也存在一定的区别。","编译不通过,因为无法对","调用。","赋给接口"],"第三篇:功能设计/2.函数/2.使用defer释放资源.html":["\"img\"","&&","//","05","08","19:22:09","2.使用","2022","=","===","bad","console.log(\"plugin","defer","defer。","e.target.tagnam","function(e){","gitbook该文章修订时间:","p.count","p.lock()","popup....\");document.onclick","power","return","unlock","window.open(e.target.src,e.target.src)}img{cursor:pointer}","使用","分支时,很容易遗忘","当有多个","提升可读性是值得的,因为使用它们的成本微不足道。尤其适用于那些不仅仅是简单内存访问的较大方法,在这些方法中其他计算的资源消耗远超过","的开销非常小,只有在您可以证明函数执行时间处于纳秒级的程度时,才应避免这样做。使用","释放资源","释放资源,诸如文件和锁。"],"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":["!=","\"img\"","%w\",","&&","'defer'","'for'","*db.row)","...","//","05","08","1.将","19:22:09","2.将","2022","3.不要在",":=","=","===","`fields`","bad","call","console.log(\"plugin","db.query(...)","db.query(.....)","defer","defer,因为这可能会导致资源泄漏(poss","defer,因为释放资源不会尽可能早地发生(在每次迭代结束时),只有在","defer,资源将在不需要时被立即释放。","e.target.tagnam","err","err)","error","error:","fields,","fields.close()","fmt.errorf(\"db.queri","foo(r","foo(rs);","func","func()","function(e){","gitbook该文章修订时间:","handl","leak,","loop)。","nil","popup....\");document.onclick","power","resourc","return","rows.next()","someth","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","}()","不是基于代码块的,而是基于函数的。你在循环中分配资源,那么不应该简单地使用","函数才会被执行。这带来的后果就是,如果迭代次数过多,那么可能导致资源长时间得不到释放,造成泄漏。","如果有一个类似上面分配资源的代码段,我们应该将其包裹在一个函数中(匿名函数或有名函数)。在该函数中,使用","尽可能地避免在","循环中使用","放在匿名函数中","放在有名函数中然后调用之","语句之后(所有迭代之后),即所在函数结束时,defer","调用有名函数"],"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":["\"img\"","&&","&smap{","(m","*smap","*smap)","//","05","08","1.零值","19:22:09","2022",":=","=","===","api,但又没有明确说明,既导致了模糊的文档,又泄露了","bad","console.log(\"plugin","data","data:","defer","e.target.tagnam","func","function(e){","get(k","gitbook该文章修订时间:","good","m.data[k]","m.lock()","m.mutex.lock()","m.mutex.unlock()","m.unlock()","make(map[string]string),","map[string]str","mu","mu.lock()","mutex","mutex、lock","new(sync.mutex)","newsmap()","popup....\");document.onclick","power","return","smap","string","string)","struct","sync.mutex","sync.rwmutex","type","unlock","var","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","作为其他结构体一个字段时,应该使用值而不是指针。即使该结构体不被导出,也不要直接把","及其方法是","和","导出的字段和","嵌入到结构体中。","方法是","是有效的","是有效的,所以指向","的实现细节。good","的实现细节,对其调用者不可见。","的指针基本是不必要的。","部分会导致字段","部分可以做到字段","零值"],"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":["\"img\"","&&","//","0","05","08","1","1)","19:22:09","2.channel","2022","64)",":=","=","===","bad","c","channel","console.log(\"plugin","e.target.tagnam","function(e){","gitbook该文章修订时间:","good","int)","int,","make(chan","popup....\");document.onclick","power","size","window.open(e.target.src,e.target.src)}img{cursor:pointer}","为","为零。任何其他尺寸都必须经过严格的审查,而不是拍脑袋给出一个大致的值。我们需要考虑如何确定大小,什么原因会导致","在高负载下被填满并阻塞写入者,以及当这种情况发生时系统会发生哪些变化。","应为","应该足以满足任何情况!","或","或无缓冲","或是无缓冲的。默认情况下,channel","是无缓冲的,其","要么是"],"第三篇:功能设计/4.错误处理/1.错误处理.html":["!=","\"fail","\"failed\"","\"img\"","\"new","%q","%v","%w","%w\",","%w。","&&","¬found)","¬founderror{file:","(e","*notfounderror","*notfounderror)","//","05","08","1.错误处理","1.错误类型2.错误包装1.错误类型","19:22:09","2.错误包装","2022",":=","=","===","api","bad","bar","can't","check","console.log(\"plugin","creat","custom","dynam","e.file)","e.target.tagnam","err","err)","errcouldnotopen","error","error\")","error()","error.","errors,","errors.a","errors.as(err,","errors.i","errors.is(err,","errors.new","errors.new(\"could","errors.new,但对于后者,我们必须使用","error。","file","file)","file}","fmt.errorf","fmt.errorf(","fmt.errorf(\"fil","fmt.sprintf(\"fil","foo","foo.errcouldnotopen)","foo.open(\"testfile.txt\");","foo.open();","foo:连接被拒绝”。","found\",","func","function(e){","gitbook该文章修订时间:","good","gracefully。","handl","level","new","nil","notfound","notfounderror","open\")","open()","open(fil","packag","panic(\"unknown","popup....\");document.onclick","power","return","s,","static","store.new()","store:","string","string)","struct","to\"之类的短语来保持上下文简洁,当错误通过堆栈向上传递时,它会一层一层被堆积起来:","top","type","var","window.open(e.target.src,e.target.src)}img{cursor:pointer}","ye","{","}","为你的错误添加上下文,","使用","例如,使用errors.new表示带有静态字符串的错误。如果调用者需要匹配并处理此错误,则将此错误导出为变量以支持将其与errors.is匹配。","函数。","前缀)。","另外请参考:don't","否则,尽可能在错误消息中添加上下文","和","在为返回的错误添加上下文时,通过避免使用\"fail","在调用失败时传播错误有三个主要方式:","声明错误可选的方式很少,在选择合适的错误申明方式之前,应考虑以下几点。","如果是这样,请参阅错误包装部分。","如果是静态字符串,我们可以使用","如果是,我们必须通过声明顶级错误变量或自定义类型来支持","如果没有要添加的其他上下文,则按原样返回原始错误。","如果调用者不需要匹配它,则使用fmt.errorf,如果调用者确实需要匹配它,则自定义","它们将成为包的公共","对于动态字符串的错误,","对于大多数包装错误,这是一个很好的默认值,但请注意,调用者可能会开始依赖此行为。因此,对于包装错误是已知变量或类型的情况,请将其作为函数契约的一部分进行记录和测试。","您会收到更多有用的错误,例如“呼叫服务","或","或自定义错误类型。","指导","无错误匹配。","来混淆底层错误,调用者将无法匹配它,但如果需要,您可以在将来切换到","标签或日志中的","根据调用者是否应该能够匹配和提取根本原因,在","格式之间进行选择。","添加上下文生成新错误。","添加上下文生成新错误;","然而,一旦错误被发送到另一个系统,应该清楚消息是一个错误(例如","的一部分。","请注意,如果您从包中导出错误变量或类型,","这将保留原始错误类型和消息。","这样就不会出现诸如“连接被拒绝”之类的模糊错误,","这非常适合底层错误消息有足够的信息来追踪它来自哪里的错误。","错误匹配","错误匹配。","错误消息","(1)如果调用者应该可以访问底层错误,请使用","(1)调用者是否需要匹配错误以便他们可以处理它?","(1)返回原始错误;","(2)使用","(2)错误消息是否为静态字符串,还是需要上下文信息的动态字符串?","(3)使用","(3)我们是否正在传递由下游函数返回的新错误?"],"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":["\"img\"","\"time\"","&&","*","*/)","*/,","...","/*","//","0","05","08","1","1.使用","15190)。如果您比较两个时刻,则差异将不包括这两个时刻之间可能发生的闰秒。","19:22:09","2000}","2022","24","2}","3339","365","60","7","8728),也不在计算中考虑闰秒(issu",":=","=","===","```go","`json:\"interval\"`","`json:\"intervalmillis\"`","`time.adddate`。但是,如果我们想保证某一时刻比前一时刻晚","bad","believ","bool","config","console.log(\"plugin","datetim","day","e.target.tagnam","encoding/json","falsehood","float64,并在字段名称中包含单位。","func","function(e){","gitbook该文章修订时间:","good","int","int)","interv","intervalmilli","isactive(now,","line","maybenewday","month","newday","poll(10)","poll(10*time.second)","poll(delay","popup....\");document.onclick","power","programm","return","rfc","start","start,","stop","string","struct","t.add(24","t.adddate(0","time","time.dur","time.duration)","time.duration,因此该单位包含在字段的名称中。","time.format","time.hour)","time.millisecond)","time.pars","time.parsedur","time.rfc3339","time.sleep(delay)","time.sleep(time.duration(delay)","time.tim","time.time,在比较、添加或减去时间时使用","time.time,如果底层驱动程序支持则返回;","time.unmarshaljson","timestamp","time。","type","window.open(e.target.src,e.target.src)}img{cursor:pointer}","year","{","{\"interval\":","{\"intervalmillis\":","}","。","一分钟有","一周有","一天有","一小时有","一年","不支持","中使用。","中定义的格式时间戳。默认情况下,time.unmarshaltext","中的方法。","为什么常识性的认知是错误的呢?因为地球自转的不均匀性和长期变慢性,会存在时间修正的情况,比如闰秒,闰年等。","代码即注释","作为","使用","使用此格式,并可通过","例如,在一个时间点上加上","例如,由于","分钟","列转换为","包不支持解析闰秒时间戳(issu","包处理时间","包,因为它有助于以更安全、更准确的方式处理这些不正确的假设。","和","回到第一个例子,在一个时间时刻加上","因此,在处理时间时始终使用","在","在处理时间的瞬间时使用","天","字符串,并通过","字符串;","对外部系统使用","小时","小时并不总是产生一个新的日历日。","小时,我们应该使用`time.add`。","小时,我们用于添加时间的方法取决于意图。如果我们想要下一个日历日(当前天的下一天)的同一个时间点,我们应该使用","尽可能在与外部系统交互中使用","尽管这在实践中并不成问题,但请记住,time","当不能在这些交互中使用","当在这些交互中不能使用","或","支持","支持将","方法支持将","时间处理看似简单,实则不然。关于时间的错误假设通常包括以下几点:","时,请使用","时,除非达成一致,否则使用","是几秒钟还是几毫秒?","标志:flag","秒","编码为","表达时间段","表达瞬时时间","还有更多,具体可参考","通过","通过其","(1)command","(2)json:encoding/json","(3)sql:database/sql","(4)yaml:gopkg.in/yaml.v2",";"],"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":["\"img\"","&&","(f","(f*","(int32,","*foo)","//","05","08","1","1)","19:22:09","2.使用第三方","2022","=","==","===","alreadi","atom","atomic.bool","atomic.swapint32(&f.running,","bad","bool","console.log(\"plugin","e.target.tagnam","f.run","f.running.load()","f.running.swap(true)","foo","foo)","func","function(e){","gitbook该文章修订时间:","go.uber.org/atom","good","int32","int64","isrunning()","popup....\");document.onclick","power","race!","return","run","running…","start","start()","struct","sync/atom","type","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","不建议使用","包","包的原子操作对基本类型","等)进行操作,因为很容易忘记使用原子操作来读取或修改变量。","类型。","通过隐藏基础类型为这些操作增加了类型安全性。此外,它还包括一个易用的"],"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":["\"img\"","&&","&signer{","(s","*signer","*signer)","*testing.t)","//","05","08","1.避免使用可变全局变量","19:22:09","2022",":=","=","===","assert.equal(t,","bad","console.log(\"plugin","defer","e.target.tagnam","func","func()","function(e){","gitbook该文章修订时间:","good","newsigner()","now","now)","now:","oldtimenow","popup....\");document.onclick","power","return","s","s.now","s.now()","s.sign(give))","sign(give))","sign(msg","sign.go","sign_test.go","signer","signwithtime(msg,","somefixedtim","string","string)","struct","testsign(t","testsigner(t","time.now","time.now,","time.tim","timenow","timenow()","type","var","want,","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","}()","中。","函数直接注入到使用方","可变全局变量在使用时,可能会被其他地方修改,导致程序运行时出现意外情况。","我们可以通过依赖注入的方式将依赖注入到使用方,这样便可以避免使用全局变量,进而避免了依赖的全局变量被错误修改的可能。","比如下面将依赖的"],"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":["\"img\"","&&","(l","*abstractlist","*abstractlist)","*concretelist)","...","//","05","08","19:22:09","2.避免在公共结构中嵌入类型","2022","=","===","abstractlist","abstractlist。相反,只需手动将方法写入具体的列表,委托给抽象列表的方法。","abstractlist,如果嵌入的类型是","add(","add(entity)","bad","concretelist","console.log(\"plugin","e.target.tagnam","entity)","func","function(e){","gitbook该文章修订时间:","good","interfac","interface,而不是结构体,这将为开发人员提供更大的灵活性来改变未来,但仍然泄露了具体列表使用抽象实现的细节。","l.list.add(e)","l.list.remove(e)","list","popup....\");document.onclick","power","public。为了保持向后兼容性,外部类型的每个未来版本都必须保留嵌入类型;","public,那么字段是","remove(","remove(entity)","struct","type","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","{}","}","产生模糊的接口文档指","假设您使用共享的","即使嵌入兼容的抽象列表","又没有明确说明,会产生模糊的接口文档。","实现了多种列表类型,请避免在具体的列表实现中嵌入","尽管编写这些委托方法是乏味的,但是额外的工作隐藏了实现细节,留下了更多的更改机会,还消除了在未能描述出潜在接口的模糊文档。","嵌入类型会泄漏实现细节、禁止类型演化和产生模糊的接口文档。","很少需要嵌入类型,虽然它可以帮助您避免编写冗长的委托方法。","无论是使用嵌入结构还是嵌入接口,都会限制类型的演化。","是一个实体列表。","是各种实体列表的通用实现。","泄漏实现细节指","添加将实体添加到列表中。","的实现是","的实现细节,被到处泄露了;","禁止类型演化指","移除从列表中移除实体。","获得了同名嵌套类型字段","被导出的字段和方法全部成为了","被导出的字段和方法,在","(1)向嵌入接口添加方法是一个破坏性的改变;","(2)从嵌入结构体删除方法是一个破坏性的改变;","(3)删除嵌入类型是一个破坏性的改变;","(4)即使使用满足相同接口的类型替换嵌入类型,也是一个破坏性的改变。"],"第四篇:最佳性能/0.导语.html":["\"img\"","&&","0.导语","05","18","2022","22:23:35","=","===","coder","console.log(\"plugin","e.target.tagnam","function(e){","gitbook该文章修订时间:","go","popup....\");document.onclick","power","window.open(e.target.src,e.target.src)}img{cursor:pointer}","代码的稳健、可读和高效是我们每一个位","的共同追求。本篇将结合","语言特性,为书写高效的代码,力争从常用数据结构、内存管理和并发编程三个方面给出相关建议。话不多说,让我们一起学习","高性能编程技法吧。"],"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":["!ok","\"img\"","&&","&num)","*testing.b)","...interface{})","...uint64)","//","0","0,","0.2511","05","08","0;","0x1}))","1","1.841","1.优先使用","1.反射虽好,切莫贪杯","1000000000","12","1226868","127.0.0.1","13026195","145.3","16","19:22:09","2,","2.60ghz","2.少量的重复不比反射差","2022","2130706433","296","3,","3.809","3.慎用","4","4,","5,","6,","60","7,","8,","80","81.96","8249469","9750h","978.2","9}",":=","=","===","@","[]byte)","[]interface{}{uint64(1),","[]uint64","[]uint64,","[]uint64{1,","_,","allocs/op","amd64","append(t,","b/op","bad","bench=.","bench=benchmarkntohl.*","benchmarkdeletesliceelm","benchmarkdeletesliceelms(b","benchmarkdeleteu64liceelm","benchmarkntohl","benchmarkntohl(b","benchmarkntohlnotusebinari","benchmem","binari","binary.bigendian,","binary.read","binary.read(buf,","binary.writ","binary.write标准库","buffer","byteorder,","bytes.newreader(bys)","c","console.log(\"plugin","core(tm)","cpu","cpu:","darwin","data","data。data","deletesliceelm","deletesliceelms(i","deleteu64liceelm","deleteu64liceelms(i","e.target.tagnam","elm","encoding/binari","err","error","fmt","fmt.println(ntohl([]byte{0x7f,","fmt2.少量的重复不比反射差3.慎用","fmt,因为前者性能更佳。","func","function(e){","gitbook该文章修订时间:","go","goarch:","goos:","gorm、xorm","i7","int","intel(r)","interface{}","interface{})","interface{},","io.reader,","io.writer,","ip","json、orm","key","len(elms))","len(i))","m","m[v]","m[v];","main/reflect","make([]uint64,","make(map[interface{}]struct{},","make(map[uint64]struct{},","map","ns/op","ntohl","ntohl()","ntohl(bi","ntohlnotusebinary(bi","ok","order","pass","pkg:","popup....\");document.onclick","power","r","rang","read","read(r","reflect","reflect.makeslice(reflect.typeof(i),","reflect.valueof(i)","return","set。","size","size(v","slice","strconv","struct{}{}","t","test","uint32","uint32(bys[2])","uint32(bys[3])","uint64","uint64(3),","uint64(5),","uint64(7),","uint64(9)}","v","v)","v.len())","varint","w","window.open(e.target.src,e.target.src)}img{cursor:pointer}","wirt","write","write(w","w。data","{","|","}","下面以我们熟知的","下面看一下二者的性能对比。","下面看下剥去反射前后二者的性能差异。","中的字节数。","中,因为","为","为什么性能上会有两倍多的差距,因为","从","从切片中过滤指定元素。注意:不修改原切片。","从结构化二进制数据","以外类型的切片进行过滤,拷贝一次代码又何妨呢?可以肯定的是,绝大部份场景,根本不会对所有类型的切片进行过滤,那么反射带来好处我们并没有充分享受,但却要为其带来的性能成本买单。","使用反射并且很慢。如果有需要用到这两个函数的地方,我们应该手动实现这两个函数的相关功能,而不是直接去使用它们。","其中数字与字节序列的转换可以用如下三个函数:","写入到","函数为例,看看","函数将","切片过滤掉指定的元素。","创建新切片,过滤掉指定元素。","利用","利用反射,我们可以实现一个类型泛化支持扩展的切片过滤函数。","包如何实现。","包实现了数字和字节序列之间的简单转换以及","包的性能相较于针对具体类型实现的版本,性能差异非常大。","包针对大端字节序将字节序列转为","可以看到,反射涉及了额外的类型判断和大量的内存分配,导致其对性能的影响非常明显。随着切片元素的递增,每一次判断元素是否在","可见使用反射实现的","呢?","和","基本数据类型与字符串之间的转换,优先使用","如将","如果我们针对","实现上利用反射来达到范型的效果,在运行时进行类型的动态判断,所以带来了一定的性能损耗。","对整数采用的便是这种编码方式。","将","将网络字节序的","当使用反射时,请问一下自己,我真地需要它吗?","很多时候,我们可能只需要操作一个类型的切片,利用反射实现的类型泛化扩展的能力压根没用上。退一步说,如果我们真地需要对","必须是固定大小的值或固定大小值的切片,或指向此类数据的指针。","必须是指向固定大小值的指针或固定大小值的切片。","是一种使用可变字节表示整数的方法。其中数值本身越小,其所占用的字节数越少。protocol","是不确定的类型,会发生变量逃逸,触发堆内存的分配。所以,可预见的是当元素数量增加时,性能差异会越来大。","有时,我们需要一些工具函数。比如从","构建","标准库函数","框架","的","的二进制表示形式写入","的编码和解码。varint","等。","类型手动实现一个","类型时的实现。","网络字节序解析到","而不是","该函数也是参考了","语言提供了运行时动态获取对象的类型和值以及动态创建对象的能力。反射可以帮助抽象和简化代码,提高开发效率。","语言标准库以及很多开源软件中都使用了","语言的反射能力,例如用于序列化和反序列化的","读取到","转为主机字节序。","过滤指定元素。注意:不修改原切片。","运行上面的基准测试。","运行上面的基准测试,结果如下:","返回"],"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":["\"img\"","&&","*testing.b)","05","08","0;","1.379","1.582","19:22:09","2.962","2.避免重复转换字符串到字节切片","2022","3.00ghz","748467979","8","878246492","9700",":=","=","===","@","amd64","bench=benchmarkstringtobyt","benchmarkstringtobyt","benchmarkstringtobyte(b","benchmarkstringtobyteonc","console.log(\"plugin","core(tm)","cpu","cpu:","e.target.tagnam","func","function(e){","gcflags=\"","gitbook该文章修订时间:","go","goarch:","goos:","hot","i7","intel(r)","main/perf","n\"","ns/op","ok","pass","path","path,即热点路径,顾名思义,是你的程序中那些会频繁执行到的代码。","pkg:","popup....\");document.onclick","power","slice,因为重复的切片初始化会带来性能损耗。相反,请执行一次转换并捕获结果。","test","window","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","上,那么其对性能的影响将被放大。这里解释下","不要反复从固定字符串创建字节","差距不是很大,但是随着字符串长度的增加,差距将会越来越明显。此外,如果这种重复的转换在","看一下性能差异,注意需要禁止编译器优化,不然看不出差别。"],"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":["\"img\"","&&","//","0","05","08","0;","1.指定","1000000","166.0","17.81","19:22:09","2.指定切片容量","2022","3.指定容器容量","4","64","66930670","7032921","8",":=","=","===","_","_,","allocs/op","append","append()","b/op","bad","bench=^benchmarkjoinstr","benchmarkjoinstrwithoper","benchmarkjoinstrwithsprintf","benchmem","bucket","capac","capacity)","console.log(\"plugin","const","e.target.tagnam","f","file","files,","function(e){","gitbook该文章修订时间:","go","good","hashmap","hint)","ioutil.readdir(\"./files\")","len(files))","length,","m","m[f.name()]","make()","make([]t,","make(map[string]os.fileinfo)","make(map[string]os.fileinfo,","make(map[t1]t2,","map","n","ns/op","popup....\");document.onclick","power","rang","size","slice","test","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","不同。map","不同,slice","不是一个提示:编译器将为提供给","与","初始化切片时提供容量信息,特别是在追加切片时。","初始化的时候提供容量信息。","向","因此,在将元素添加到","在尽可能的情况下,在使用","在运行时可能会有更多分配。","容量提示","容量提示2.指定切片容量尽可能指定容器容量,以便为容器预先分配内存。这将在后续添加元素时减少通过复制来调整容器大小。","容量时,仍可能发生分配。","执行基准测试:","提供容量提示会在初始化时尝试调整","提示并不保证完全的抢占式分配,而是用于估计所需的","操作将导致零分配(直到","时为","时,甚至在指定","是在没有大小提示的情况下创建的;","是有大小提示创建的;在运行时可能会有更少的分配。","注意,与","的","的大小,这将减少在将元素添加到","的容量分配足够的内存,这意味着后续的","的数量。","的长度与容量匹配,在此之后,任何","都可能调整大小以容纳其他元素)。","重新分配内存。"],"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":["\"bar\",","\"baz\"","\"foo\",","\"img\"","&&","*testing.b)","+",".","//","0","05","0;","1.813","1.行内字符串拼接2.非行内字符串拼接1.行内字符串拼接","13","157.2","15:46:40","17.53","2.非行内字符串拼接","20.95","2022","3.00ghz","30079785","30748495","31543916","31663521","36.39","37.34","39.58","4","4.字符串拼接方式","40.60","60079003","64","665341896","70638928","7520017","8","9700",":=","=","===","@","allocs/op","amd64","b/op","bench=^benchmarkjoinstr","benchmarkjoinstrwithbytesbuff","benchmarkjoinstrwithbyteslic","benchmarkjoinstrwithbytesliceprealloc","benchmarkjoinstrwithoper","benchmarkjoinstrwithoperator(b","benchmarkjoinstrwithsprintf","benchmarkjoinstrwithstringsbuild","benchmarkjoinstrwithstringsbuilderprealloc","benchmarkjoinstrwithstringsbuilderprealloc(b","benchmarkjoinstrwithstringsjoin","benchmarkjoinstrwithstringsjoin(b","benchmem","byte[]","console.log(\"plugin","core(tm)","cpu","cpu:","e.target.tagnam","fmt.sprintf()","func","function(e){","gitbook该文章修订时间:","go","goarch:","good","goos:","grow","grow:","i7","intel(r)","main/perf","ns/op","pkg:","popup....\");document.onclick","power","s1,","s2,","s3","string.builder也提供了预分配内存的方式","test","window","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","下面看下二者的性能对比。","且预先分配容量的拼接方式性能最佳。","从性能出发,兼顾实现的便捷与代码可读性,如果待拼接的字符串不涉及类型转换且数量较少(fmt.sprintf()。","从结果可以看出,strings.join()、strings.builder、bytes.buffer和byte[]","优化后的版本的性能测试结果如下。可以看出相较于不预先分配空间的方式,性能提升了很多。","使用了","先看下其性能测试的对比。","只能简单地完成字符串之间的拼接,非字符串类型的变量需要单独做类型转换。行内拼接字符串不会产生内存分配,也不涉及类型地动态转换,所以性能上优于fmt.sprintf()。","可以看到,二者的性能差距很大,快达到一个数量级了。所以在不影响代码可读性时,行内字符串尽可能地使用运算符","基准测试结果如下:","字符串拼接还有其他的方式,比如strings.join()、strings.builder、bytes.buffer和byte[],这几种不适合行内使用。当待拼接字符串数量较多时可考虑使用。","所以如果对性能要求非常严格,或待拼接的字符串数量足够多时,建议使用","执行基准测试结果如下:","来拼接而不是fmt.sprintf()。","的性能相近。如果结果字符串的长度是可预知的,使用","综合易用性和性能,一般推荐使用strings.builder来拼接字符串。","能够接收不同类型的入参,通过格式化输出完成字符串的拼接,使用非常方便。但因其底层实现使用了反射,性能上会有所损耗。","行内字符串的拼接,主要追求的是代码的简洁可读。fmt.sprintf()","行内拼接字符串为了书写方便快捷,最常用的两个方法是:","运算符","运算符+","预先分配容量这种方式。"],"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":["\"img\"","&&","*item","*testing.b)",".","//","0","0,","05","08","0;","1","1.[]int","1.[]int2.[]struct{}3.[]*struct4.小结go","1024)","12","1514","1521","19:22:09","2.60ghz","2.[]struct{}","2022","2124","2165","22","2290372","236.2","239.1","27","27169","3.00ghz","3.378","3.[]*struct","30914","38799","4.小结","46161","5.097","5.[]struct{}","5043324","5076255","534.8","535705","556436","752077","773634","8","9700","9750h",":=","=","===","@","[1024]byte","[1024]byte,如果每次遍历","[]*item","[]int","[]int。但如果迭代的元素较大,如一个包含很多属性的","[]item,都会进行一次值拷贝,所以带来了性能损耗。","[]struct","allocs/op","amd64","b/op","bench=.","bench=benchmarkrang","bench=intslice$","bench=pointer$","benchmarkindexintslic","benchmarkindexpoint","benchmarkindexstructslic","benchmarkindexstructslice(b","benchmarkrange1","benchmarkrange1(b","benchmarkrange2","benchmarkrangeindexstructslic","benchmarkrangeintslic","benchmarkrangepoint","benchmarkrangestructslic","benchmem","console.log(\"plugin","core(tm)","cpu","cpu:","darwin","e.target.tagnam","func","function(e){","gcflags=","genitem","genitems(n","genrandomintslic","genrandomintslice()","genrandomintslice(n","gitbook该文章修订时间:","go","goarch:","goos:","i7","id","index","index。如果使用","int","int)","intel(r)","int,一个是类型是","item","main/perf","main/rang","make([]*item,","make([]int,","make([]item,","n","n)","ns/op","num","n禁用了编译器对切片遍历的优化。如果没有该选项,那么上面三种遍历方式没有性能差别。","ok","pass","pkg:","popup....\");document.onclick","power","rand.seed(time.now().unixnano())","rang","range。二者在功能上没有区别,但在性能上会有区别吗?","range,建议只迭代下标,通过下标访问元素,这种使用方式和","range,有时候甚至会有上千倍的性能差异。对于这种场景,建议使用","struct","test","tmp","type","val","window","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","下标时,性能比","中元素时,性能非常差。","为什么编译器会对上面的测试代码进行优化呢?因为代码实际上只取最后一个切片元素的值,所以前面的循环操作可以跳过,这样便带来性能的提升。如果是下面的代码,那么编器将无法优化,必须遍历拷贝所有元素。","为例。","值好很多。从这里我们应该能够知道二者性能差别之大的原因。","函数用于生成指定长度元素类型为","切片","切片元素从结构体","则不存在拷贝。","只遍历","可以看出,两种通过","同时迭代下标和值,则需要将切片/数组的元素改为指针,才能不影响性能。","后,for","和","在迭代过程中返回的是元素的拷贝,index","如果","如果切片中是指向结构体的指针,而不是结构体呢?","就没有区别了。如果想使用","性能没有差别,但是","执行性能测试结果:","无需去除编译器优化,基准测试结果如下:","时获取的是值拷贝,对副本的修改,是不会影响到原切片。","是一个结构体类型","替换为指针","此外,因","生成指定长度","生成指定长度的随机","由两个字段构成,一个类型是","的切片。从最终的结果可以看到,遍历","的性能几乎一样,如基本类型的切片","的性能几乎是一样的。而且使用指针还有另一个好处,可以直接修改指针对应的结构体的值。","的性能将显著地高于","的遍历方式","类型呢?","类型的切片,下标与","结构体,那么","运行测试结果如下:","迭代的元素较小,那么","遍历","遍历切片或数组有两种方式,一种是下标,一种是","遍历性能几乎没有区别。","那么对于稍微复杂一点的","需要注意的时,上面运行基准测试时,使用编译选项","首先看一下遍历基本类型切片时二者的性能差别,以",",item"],"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":["!=","\"img\"","&&","*testing.b)","//","0","0,","05","08","0;","0。","1.截取法(修改原切片)","1.截取法(修改原切片)2.拷贝法(不改原切片)3.移位法(修改原切片)4.性能对比5.小结go","1000:","100:","10、100、1000","10:","14897282","1652146","17466486","19:22:09","1,我们要删除所有的","2.拷贝法(不改原切片)","2022","2124237","21915","21952129","22176390","258662","2714158","2724","3.00ghz","3.移位法(修改原切片)","3161318","325194","359.9","3615","4.性能对比","423.7","432049","5.427","5.小结","50.78","5007","54.68","56067","578.4","6.切片删除指定元素","65.07","762.1","8","85.22","9700",":=","=","===","@","[]int","[]int,","_,","a[:0]","a[:j]","a[j]","amd64","append(tgt,","append(tmp,","bench=.","benchmarkdeleteslice1","benchmarkdeleteslice1(b","benchmarkdeleteslice2","benchmarkdeleteslice3","benchmarkdeleteslice4","console.log(\"plugin","core(tm)","cpu","cpu:","deleteslice1","deleteslice1(a","deleteslice2","deleteslice2(a","deleteslice3","deleteslice3(a","deleteslice4","deleteslice4(a","e.target.tagnam","elem","func","function(e){","getslice(n","gitbook该文章修订时间:","go","goarch:","goos:","i7","index","index,记录下一个有效元素应该在的位置。遍历所有元素,当遇到有效元素,将其移动到","int)","intel(r)","j","j++","len(a))","main/slic","make([]int,","n)","ns/op","ok","pass","pkg:","popup....\");document.onclick","power","rang","return","slice","slice。","slice,但是共用原始","slice,将要删除的元素过滤掉。缺点是需要开辟另一个","test","tgt","tmp","v","v)","window","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","上进行修改。","且","为例给出具体实现。","从基准测试结果来看,性能最佳的方法是移位法,其中又属第一种实现方式较佳。性能最差的也是最常用的方法是截取法。随着切片长度的增加,上面四种删除方式的性能差异会愈加明显。","假设我们的切片有","创建了一个","删除切片指定元素一般有如下几种方法,本文以","删除指定元素。","利用一个下标","加一。最终","原切片长度为","和","基准测试代码如下:","实际使用时,我们可以根据不用场景来选择。如不能修改原切片使用拷贝法,可以修改原切片使用移位法中的第一种实现方式。","并没有提供删除切片元素专用的语法或函数,需要使用切片本身的特性来删除元素。","应该后移一位。","方式一","方式二","测试结果如下:","生成切片函数如下:","的位置就是所有有效元素的下一个位置,最后做一个截取就行了。这种方法会修改原来的","的切片进行测试,来上下上面四种实现的性能差异。","的底层数组。这样也不需要额外分配内存空间,直接在原","的截取删除指定元素。注意删除时,后面的元素会前移,下标","的空间,优点是容易理解,而且不会修改原","该方法可以看成对第一种方法截取法的改进,因为每次指需移动一个元素,性能更加。","这种方法最容易理解,重新使用一个","这里分别对长度为","这里利用对"],"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":["\"fmt\"","\"img\"","\"unsafe\"","&&","(","(d","(s",")","0","05","08","1","1.不占内存空间2.空结构体的作用2.1","1.使用空结构体节省内存","19:22:09","1mb","2.1","2.2","2.3","2.空结构体的作用","2022",":=","=","===","_,","add(key","bool","c/c++","chan","channel","close()","console.log(\"plugin","delete(key","delete(s,","door","door\")","door)","door,在这种情况下,door","e.target.tagnam","fmt.println(\"clos","fmt.println(\"open","fmt.println(s.has(\"bar\"))","fmt.println(s.has(\"foo\"))","fmt.println(unsafe.sizeof(struct{}{}))","func","function(e){","gitbook该文章修订时间:","go","golang","has(key","import","int","key)","main","main()","main.go","make(set)","map","map[string]struct{}","ok","open()","packag","popup....\");document.onclick","power","return","run","s","s.add(\"bar\")","s.add(\"foo\")","s[key]","set","set)","set。","set)、add、del、clear、contain","string)","struct{}","struct{})","struct{}{}","type","unsafe.sizeof","window.open(e.target.src,e.target.src)}img{cursor:pointer}","worker(ch","{","}","不发送数据的信道","不发送数据的信道2.3","不需要发送任何的数据,只用来通知子协程(goroutine)执行任务,或只用来控制协程的并发。这种情况下,使用空结构体作为占位符就非常合适了。","个字节,那假设","中有一百万条数据,就会浪费","中空结构体","中空结构体仍占用","中,我们可以使用","事实上可以用任何的数据结构替代。","仅包含方法的结构体","仅包含方法的结构体1.不占内存空间","作为集合(set)使用时,可以将值类型定义为空结构体,仅作为占位符使用即可。","可以看到,go","因为空结构体不占据内存空间,因此被广泛作为各种场景下的占位符使用。一是节省资源,二是空结构体本身就具备很强的语义,即这里不需要任何值,仅作为占位符,达到的代码即注释的效果。","因此呢,将","在","在部分场景下,结构体只包含方法,不包含任何的字段。例如上面例子中的","如果想使用","字节。","实现集合(set)","实现集合(set)2.2","无论是","是不占用内存空间,不像","有时候使用","来代替。事实上,对于集合来说,只需要","的完整功能,如初始化(通过切片构建一个","的实现,通常使用","的空间。","的键,而不需要值。即使是将值设置为","等操作,可以使用开源库","类型,也会多占据","计算出一个数据类型实例需要占用的字节数。","语言标准库没有提供","运行上面的例子将会输出:","还是","都会浪费额外的内存。因此,在这种情况下,声明为空结构体最合适。"],"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":["\"img\"","&&","//","0","05","08","0。","1","1.","1.for","1.为什么需要内存对齐2.go","12","19:22:09","1。","2","2.for","2.go","2.struct","2022","2,从第","2,因此,必须空出","3","3.for","3.合理的","32","4","4.空结构与空数组对内存对齐的影响","4,因此,demo2","4,因此,必须空出","4,此时,内存已经是对齐的,从第","8","=","===","align","array","array'","a、b","b","c","console.log(\"plugin","cpu","demo1","demo1:","demo2","demo2:","demo3","demo4","demo4{}","e.target.tagnam","each","element","f","field","fmt.println(unsafe.sizeof(demo1{}))","fmt.println(unsafe.sizeof(demo2{}))","fmt.println(unsafe.sizeof(demo3{}))","fmt.println(unsafe.sizeof(demo4{}))","func","function(e){","gitbook该文章修订时间:","go","guarante","int16","int32","int8","languag","largest","main()","popup....\");document.onclick","power","same","size","size)为单位访问。如","specif","struct","struct{}","type","type.","type:","unsafe.alignof","unsafe.alignof(x)","unsafe.alignof(x.f)","unsafe.alignof(x.f),unsafe.alignof(x)","valu","variabl","window.open(e.target.src,e.target.src)}img{cursor:pointer}","x","x,","x,unsafe.alignof(x)","x,计算","{","}","个位置开始占据","个字节的数据,一次读取","个字节那么只需要读取","个字节,cpu","个字节,偏移量才是","中","中比较特殊。没有任何字段的空","从这个例子可以看到,内存对齐对实现变量的原子性操作也是有好处的。每次内存访问是原子的,如果变量的大小不超过字长,那么内存对齐后,对该变量的访问就是原子的,这个特性在并发场景下至关重要。","位的","作为一门追求高性能的后台编程语言,当然也不例外。","作为其他","作为结构体最后一个字段时,需要内存对齐。因为如果有指针指向该字段,返回的地址将在结构体之外,如果此指针一直存活不释放对应的内存,就会有内存泄露的问题(该内存不因结构体释放而释放)。","其中函数","内存对齐前变量","内存对齐规则","内存对齐规则3.合理的","占据的内存空间大小为","占据空间一致,而","变量的值只需要一次访存。","变量的值需要两次访存,第一次访存得到前一个字节,第二次得到后两个字节。内存对齐后","可以看到,demo3{}","可以看到,同样的字段,因排列顺序不同,会导致不一样的结构体大小。","各占","各占据","和没有任何元素的","因为内存对齐的存在,合理的","因为这一点,空","因此","因此,在对内存特别敏感的结构体的设计上,我们可以通过调整字段的顺序,将字段宽度从小到大由上到下排列,来减少内存的占用。","始终以字长访问内存,如果不进行内存对齐,可能会增加","字节。","字节即可。","字节的空间。","字节,与字段","字节,即额外填充了","字节,那么","对于","对于任意类型的变量","对于数组类型的变量","对于结构体类型的变量","对齐系数决定了字段的偏移和变量的大小,两者必须是对齐系数的整数倍。","布局","布局4.空结构与空数组对内存对齐的影响1.为什么需要内存对齐","布局可以减少内存占用,提高程序性能。","布局考虑内存对齐","或空","接下来逐个分析,首先是","描述了内存对齐的规则。","是第一个字段,默认是已经对齐的,从第","是第三个字段,对齐倍数为","是第二个字段,对齐倍数为","是第二个字段,对齐系数为","次。","每一个字段","每个字段按照自身的对齐系数来确定在内存中的偏移量,一个字段因偏移而浪费的大小也不同。","用于获取变量的对齐系数。","的","的倍数,从第","的内存占用为","的大小为","的字段时,一般不需要内存对齐。但是有一种情况除外:即当","的对齐系数决定,也是","的对齐系数由","空结构与空数组在","等于其中的最大值。","等于构成数组的元素类型的对齐系数。","简言之:合理的内存对齐可以提高内存读写的性能,并且便于实现变量操作的原子性。","编译器一般为了减少","至少为","访存指令周期,提高内存的访问效率,会对变量进行内存对齐。go","访存次数。","访存的单位是","访问内存并不是逐个字节访问,而是以字长(word","访问内存的吞吐量。比如同样读取","访问内存的次数,加大","读取","这么设计的目的,是减少",",unsafe.alignof(x)",",字长为"],"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":["\"","\"img\"","#","&&","&st","&{storag","(faq)","(non","*st","*testing.b)","./main.go:5:12","./main.go:5:12:","./main.go:9:12:","//","0","0,","05","08","0;","1","1.局部切片尽可能确定长度或容量","1.局部切片尽可能确定长度或容量2.返回值","10","10)","1024","12","1342947","1427","1708","186127288","19:22:09","2.60ghz","2.返回值","2022","216.2","2242","27.40","2861","3.742","3.865","3.908","3.减少逃逸,将变量限制在栈上","3.小的拷贝好过引用","380626","4.402","4.返回值使用确定的类型","43268738","464974","5.小结","5194722","6.454","692400","80","8192","832418","893.6","9750h",":=","=","===","@","[1024]int","[capacity]int","allocs/op","amd64","argument","arr","array","arrayfibonacci","arrayfibonacci()","ask","b/op","bench=.","bench=benchmarkret","bench=benchmarkslic","benchmarkarray","benchmarkarray(b","benchmarkifc","benchmarkretptr","benchmarkretvalu","benchmarkretvalue(b","benchmarkslic","benchmarksliceescap","benchmarkslicenoescap","benchmem","build","capac","capacity)","command","console.log(\"plugin","const","constant","copy/copy.go","copy/copy.go:17:6:","copy/copy.go:18:11:","copy/copy.go:5:6:","core(tm)","cpu","cpu:","d","darwin","e.target.tagnam","escap","flow:","frequent","func","function(e){","gc","gcflags=","gcflags=\"","gitbook该文章修订时间:","go","goarch:","goos:","heap","heap:","i7","inlin","intel(r)","interface{}","interface{}。","l\"","l\",如果发生内联,那么将不会出现变量的逃逸,就不存在堆上分配内存与回收的操作了,二者将看不出性能差异。","line","m","main","main()","main.go","main/copi","make([]int,","m查看编译器对上面两个函数的优化决策。","ns/op","number","number)","number)}:","ok","packag","pass","pkg:","popup....\");document.onclick","power","question","retptr()","return","retvalue()","s1","size)","slice","sliceescap","sliceescape()","slicefibonacci","slicefibonacci()","slicefibonacci()函数中分配的局部变量切片因为要返回到函数外部,所以发生了逃逸,需要在堆上申请内存空间。从测试也过也可以看出,arrayfibonacci()函数没有内存分配,完全在栈上完成数组的创建。这里说明了对于一些短小的对象,栈上复制的成本远小于在堆上分配和回收的成本。","st","struct","test","type","valu","var","vs","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","{heap}","}","一般情况下,对于需要修改原对象,或占用内存比较大的对象,返回指针。对于只读或占用内存较小的对象,返回值能够获得更好的性能。","下面以一个简单的示例来看下二者的性能差异。","下面看一下性能对比。","下面看下二者的性能差异。","中的变量只要被引用就一直会存活,存储在堆上还是栈上由","从测试结果可以看出,对数组的拷贝性能却比使用切片要好。为什么会这样呢?","从输出结果可以看到,使用变量(非常量)来指定切片的容量,会导致切片发生逃逸,影响性能。指定切片的长度时也是一样的,尽可能使用常量或数值字面量。","以","以上仅列出了部分变量发生逃逸的情形。实际上,go","值传递会拷贝整个对象,而指针传递只会拷贝地址,指向的对象是同一个。传指针可以减少值的拷贝,但是会导致内存分配逃逸到堆中,增加垃圾回收(gc)的负担。在对象频繁创建和删除的场景下,返回指针导致的","其他","内部实现决定而和具体的语法没有关系。","函数中定义的局部变量切片逃逸到了堆。","函数均可内联。slicefibonacci()","发生逃逸,在堆上申请切片","变量大小不确定(如","变量较大(栈空间不足)","可以看到,arrayfibonacci()","可见,函数返回值使用","和","基准测试结果如下:","处理。在知道常见的变量逃逸场景后,我们在编码时可以有意识地避免变量发生逃逸,尽可能地使用栈空间,而非堆空间。","处理,函数返回后就会直接释放,而堆上分配的内存使用完毕会交给","如果使用局部切片时,已知切片的长度或容量,请使用常量或数值字面量来定义。","如果变量类型不确定,那么将会逃逸到堆上。所以,函数返回值如果能确定的类型,就不要使用","官方也在","对","小的拷贝好过引用,什么意思呢,就是尽量使用栈变量而不是堆变量。下面举一个反常识的例子,来证明小的拷贝比在堆上创建引用变量要好。","开销可能会严重影响性能。","成本,可提高程序性能。","我们来看一下编译器编译时对上面两个切片的优化决策。","我们还是以上面斐波那契数列函数为例,看下返回值为确定类型和","我们都知道","方式传递后,再加上其长度不可扩展,考虑到性能我们一般很少使用它。实际上,凡事无绝对。有时使用数组进行拷贝传递,比使用切片要好。","明确地告诉我们,我们并不需要知道变量是分配在栈(stack)上还是堆(heap)上。golang","栈上分配内存比在堆中分配内存有更高的效率。因为栈上分配的内存不需要","版本的大小限制可能不一样。一般是","的性能差别。","知道变量逃逸的原因后,我们可以有意识地避免变量发生逃逸,将其限制在栈上,减少堆变量的分配,降低","编译器对变量的逃逸分析决策远比我们想像的要复杂。我们只能尽可能地去勾勒而无以绘其全貌。go","编译器而言,超过一定大小的局部变量将逃逸到堆上,不同","编译时可以借助选项","运行上面的基准测试结果如下:","运行上面的基准测试,将得到如下结果。","返回值类型不确定(不能确定大小)","返回地址","返回引用(引用变量的底层是指针)","返回指针","返回指针3.小的拷贝好过引用4.返回值使用确定的类型5.小结变量逃逸一般发生在如下几种情况:","返回时,编译器无法确定返回值的具体类型,导致返回值逃逸到堆上。当发生了堆上内存的申请与回收时,性能会差一点。","那么多大的变量才算是小变量呢?","里面的","长度或容量不定)","闭包","需要注意,运行上面基准测试时,传递了禁止内联的编译选项"],"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":["\"img\"","&&","&bytes.buffer{}","(n","(p","*pp","*pp)","*testing.b)","...","...interface{})","//","0","05","08","0;","1","1.简介2.作用3.如何使用4.性能差异5.在标准库中的应用1.简介","10000)","1020","10240","11987966","12","1246887","19:22:09","2.60ghz","2.作用","2022","3.510","3.如何使用","4.sync.pool","4.性能差异","5.在标准库中的应用","64","97.12","9750h",":=","=","===",">","@","[1024]byte","a)","a...)","accord","add","ag","alloc","allocations.","allocs/op","amd64","approxim","avoid","b/op","back","bench=.","benchmarkbuff","benchmarkbufferwithpool","benchmarkbufferwithpool(b","benchmem","buf","buffer","buffer,","bufferpool","byte","bytes.buff","cach","cap(p.buf)","console.log(\"plugin","contain","core(tm)","cost.","cpu","cpu:","darwin","darwin/amd64","data","e.target.tagnam","each","encoding/json。以","encountered.","entri","err","error","error)","fals","fmt","fmt.printf()的调用是非常频繁的,利用","format","format,","fprintf","fprintf()","fprintf(os.stdout,","fprintf(w","free","free()","func","func()","function(e){","gc","get()","gitbook该文章修订时间:","go","go1.17","goarch:","goos:","grab","hard","https://golang.org/issue/23199","i7","int,","int32","intel(r)","interface{}","interface{},因此需要类型转换。","invocation.","io.writer,","io.writer,printf()","json.unmarshal(buf,","limit","main/pool","make([]byte,","maximum","memori","n","n,","name","new","new(pp)","new(student)","new:","newprint","newprinter()","ns/op","number","obtain","ok","one.","os.stdout,相当于直接输出到标准输出。这里的","output.","p","p.doprintf(format,","p.error","p.fmt.init(&p.buf)","p.free()","p.panick","p.wraperr","pass","per","pkg:","place","pool","pool.","popup....\");document.onclick","power","pp","ppfree","ppfree.get().(*pp)","ppfree;","printer'","printf","printf()","printf(format","proper","properti","put()","remark","requir","return","reus","same","save","see","size","specifi","standard","state","store","string","string,","struct","stu","stu)","student","studentpool","studentpool.get().(*student)","studentpool.put(stu)","sync","sync.cach","sync.pool","sync.pool{","sync.pool。","sync.pool,例如","test","type","us","usag","var","variabl","version","w.","w.write(p.buf)","window.open(e.target.src,e.target.src)}img{cursor:pointer}","write","written","{","}","},","一句话总结:用来保存和复用临时对象,减少内存分配,降低","传的是","假设我们有一个“学生”结构体,并复用改结构体对象。","函数。","函数创建。","函数即可。对象池中没有对象时,将会调用","函数的参数是一个","则是在对象使用完毕后,放回到对象池。","包下的一个组件,可以作为保存临时取还对象的一个“池子”。个人觉得它的名字有一定的误导性,因为","包为例,我们看下其是如何使用","压力。","可以将暂时不用的对象缓存起来,待下次需要的时候直接使用,不用再次经过内存分配,复用对象的内存,减轻","和","复用","复用对象","复用对象,每次操作不再有内存分配。","字节缓冲器为例,利用","对于很多需要重复分配、回收内存的地方,sync.pool","对象池,每次只执行","对象能够极大地提升性能,减少内存占用,同时降低","对象,避免重复创建与回收内存,来看看对性能的提升效果。","带来一定的负担,严重的时候会引起","我们以","我们可以看一下最常用的标准格式化输出函数","操作,及做一次数据拷贝,耗时几乎可以忽略。而内存分配和回收的耗时占比较多,因此对程序整体的性能影响更大。从测试结果也可以看出,使用了","方法来获取和放回池子中。","是","是一个很好的选择。频繁地分配、回收内存会给","是一个更合适的名字。","是可伸缩的,同时也是并发安全的,其容量仅受限于内存的大小。存放在池中的对象如果不活跃了会被自动清理。","标准库也大量使用了","测试结果如下:","然后调用","用于从对象池中获取对象,因为返回值是","用的就是","的","的。","的使用方式非常简单,只需要实现","的压力,提升系统的性能。","的定义。","的毛刺,而","继续看","这个例子创建了一个","里装的对象可以被无通知地被回收,可能"],"第四篇:最佳性能/3.并发编程/1.关于锁.html":["!=","\"\"","\",\"","\"fmt\"","\"golang.org/x/sync/errgroup\"","\"img\"","\"main/list\"","\"sync\"","\"sync/atomic\"","%","&&","&node{","&withlocklist{}","(","(if","(l","(multipl",")","*lockfreelist)","*node","*testing.b)","*withlocklist)","+=","//","05","08","0;","1.1","1.2","1.关于锁","1.无锁化1.1","10","1000000","12","145690","1906","19:22:09","2.60ghz","2.减少锁竞争","20","20%)","20%)。","2022","2406","2462","3.1","3.2","3.3","3.优先使用共享锁而非互斥锁","303693","4124","432386","485917","498673","50","50%)","50%),rpct","532350","8,7,6,9,5,4,3,1,2,0","80","80%)","80%),rpct","8074","9,8,7,6,5,4,3,2,0,1","9.532","9750h",":=","=","==","===","@","_","amd64","any).","atom","atomic.valu","bench=.","benchmarkconcurwritemapwithlock(b","benchmarkconwritemapnoshard(b","benchmarkmutexreadmor","benchmarkmutexreadmore(b","benchmarkmutexrwequ","benchmarkmutexwritemor","benchmarkrwmutexreadmor","benchmarkrwmutexrwequ","benchmarkrwmutexwritemor","benchmarkwritewithlocklist(b","bigcach","break","c++11","ca","cache、freecach","concurwritemapwithlock","concurwritemapwithlock()","concurwritewithlocklist","concurwritewithlocklist(l","console.log(\"plugin","convert","conwritemapnoshard","conwritemapnoshard()","core(tm)","cpu","cpu:","cur","cur.next","cur.value)","dablelv@dablelv","darwin","defer","e.target.tagnam","errgroup.group","errgroup.group{}","fmt.sprintf(\"%v\",","format","free","func","function(e){","g","gitbook该文章修订时间:","go","goarch:","golang","goos:","gorouin","goroutin","head","head.(*node)","headnode,","i/o","i7","implement","import","int)","intel(r)","interface{}","interface{})","invok","l","l.head","l.head,","l.head.compareandswap(head,","l.head.load()","l.head.load().(*node)","l.mu.lock()","l.mu.unlock()","list","lock","lock()","lock)。在使用锁时,对获取锁的目的操作做了区分,一种是读操作,一种是写操作。因为同一时刻允许多个","locker","lockfreelist","lockfreelist)","m","m0","m1","m[i]","main","main/mutex","make(map[int]int)","make(map[int]struct{})","make(map[int]struct{},","map","map[int]int","map。","map。此时我们可以将每个协程拉取的结果写入到一个临时对象,这样便将并发地协程与同一个变量解绑,然后再将其汇聚到一起,这样便可以不用使用锁。即独立处理,然后合并。","mb0","method","mu","mu.lock()","mu.rlock()","mu.runlock()","mu.unlock()","mu0","mu1","mutex","n","n)","next","next:","nil","node","ns/op","num","num)","object","ok","operand","opmapwithmutex","opmapwithmutex(rpct","opmapwithrwmutex","opmapwithrwmutex(rpct","packag","pass","pkg:","popup....\");document.onclick","power","push","push(v","reactor","readers,","requir","return","rlock()","rlocker()","rpct","runlock()","s","singl","string","string()","string,","struct","struct{}{}","sync","sync.mutex","sync.mutex3.2","sync.mutex{}","sync.rwmutex","sync.rwmutex3.3","sync.rwmutex{}","sync.waitgroup","test","time.sleep(time.microsecond)","type","unlock","unlock()","v,","valu","value:","var","verb","wg","wg.wait()","window.open(e.target.src,e.target.src)}img{cursor:pointer}","withlocklist","withlocklist)","writer","{","}","}()","、go","一般来说,有如下几种情况:","上面的实现有几点需要注意一下:","下面再看一下链表","不分片写入一个","个协程并发写入","个协程并发写入链表","个数的增多而线性扩展。很多语言都提供","中的","串行无锁","串行无锁2.减少锁竞争3.优先使用共享锁而非互斥锁3.1","串行无锁是一种思想,就是避免对共享资源的并发访问,改为每个并发操作访问自己独占的资源,达到串行访问资源的效果,来避免使用锁。不同的场景有不同的实现方式。比如网络","为了模拟上面的情况,简单地写个示例程序,对比下性能。","为读操作占比。","互斥锁的作用是保证共享资源同一时刻只能被一个","以一个简单的示例,通过对map[uint64]struct{}分片前后并发写入的对比,来看下减少锁竞争带来的性能提升。","优秀的本地缓存组件","使用互斥锁读写","使用读写锁读写","入参","写锁与读锁是互斥的,如果存在读锁,写锁阻塞,如果存在写锁,读锁阻塞。","写锁之间是互斥的,存在写锁,其他写锁阻塞。","则阻塞等待。","利用硬件支持的原子操作可以实现无锁的数据结构,原子操作可以在","加写锁","加读锁","加锁","加锁是为了避免在并发环境下,同时访问共享资源产生的安全问题。那么,在并发环境下,是否必须加锁?答案是否定的。并非所有的并发都需要加锁。适当地降低锁的粒度,甚至采用无锁化的设计,更能提升并发能力。","包和","协程调用","占用了,其他的","占用,一个","原子操作(如","可以看出无锁版本比有锁版本性能高一些。","可以看到,通过对分共享资源的分片处理,减少了锁竞争,能明显地提高程序的并发性能。可以预见的是,随着分片粒度地变小,性能差距会越来越大。当然,分片粒度不是越小越好。因为每一个分片都要配一把锁,那么会带来很多额外的不必要的开销。可以选择一个不太大的值,在性能和花销上寻找一个平衡。","可见读多写少的场景,使用读写锁并发性能会更优。可以预见的是如果写占比更低,那么读写锁带的并发效果会更优。","和","场景下将单","多线程模型改为主从","多线程模型,避免对同一个消息队列锁读取。","大部分业务场景是读多写少,所以使用读写锁可有效提高对共享数据的访问效率。最坏的情况,只有写请求,那么读写锁顶多退化成互斥锁。所以优先使用读写锁而非互斥锁,可以提高程序的并发性能。","如果加锁无法避免,则可以采用分片的形式,减少对资源加锁的次数,这样也可以提高整体的性能。","如果并发无法做到无锁化,优先使用共享锁而非互斥锁。","将元素插入到链表的首部","并发写入有锁链表","库),可以用于实现无锁数据结构,如无锁链表。","循环多次尝试,直至成功。","性能对比","性能对比1.无锁化","我们以一个简单的线程安全单向链表的插入操作来看下无锁编程和普通加锁的区别。","我们分别对两种链表做一个并发写入的操作验证一下其功能。","我们可以通过在访问共享资源前前用","所谓互斥锁,指锁只能被一个","执行当前包下的所有基准测试,结果如下:","接下来,我们测试三种情景下,互斥锁和读写锁的性能差异。","提供了两个导出方法用来使用锁。","提供了两种锁,互斥锁(sync.mutex)和读写锁(sync.rwmutex),读写锁便是共享锁的一种具体实现。","提供了五个导出方法用来使用锁。","操作的基准测试,对比一下有锁与无锁的性能差异。","操作,即调用compareandswap()方法进行插入,如果插入失败则进行","方法对资源进行上锁,在访问共享资源后调用","方法来释放锁,也可以用","方法获得锁后,其他请求锁的协程都会阻塞在","方法,直到锁被释放。","无锁化主要有两种实现,无锁数据结构和串行无锁。","无锁单向链表","无锁单向链表的简单实现","无锁数据结构","无锁数据结构1.2","有锁","有锁单向链表","有锁单向链表的简单实现","有锁并发写入","有锁链表的字符串形式输出","标准库","比如","注意,多次运行上面的main()函数的结果可能会不相同,因为并发是无序的。","用来调节读操作的占比,来模拟读写占比不同的场景。rpct","的并发读写。","的情况下保证并发安全,并且它的性能也能做到随","的操作耗时很短,所以每次睡眠一微秒(百万分之一秒)来增加耗时,不然对共享资源的访问耗时,小于锁处理的本身耗时,那么使用读写锁带来的性能优化效果将变得不那么明显,甚至会降低性能。","看下二者的性能差异:","获取读锁,所以是一种共享锁。但写锁是互斥的。","获得。共享锁指可以同时被多个","获得的锁。","表示读写一致(各占","表示读多写少(读占","表示读少写多(读占","设为","语句来保证互斥锁一定会被解锁。在一个","读写一致(各占","读写锁是一种共享锁,也称之为多读单写锁","读写锁的存在是为了解决读多写少时的性能问题,读场景较多时,读写锁可有效地减少锁阻塞的时间。","读多写少(读占","读少写多(读占","读操作。","读锁之间不互斥,没有写锁的情况下,读锁是无阻塞的,多个协程可以同时获得读锁。","返回读锁,使用","这里我介绍的是后台微服务开发经常遇到的一种情况。我们经常需要并发拉取多方面的信息,汇聚到一个变量上。那么此时就存在对同一个变量互斥写入的情况。比如批量并发拉取用户信息写入到一个","这里需要注意的是,因为每次读写","进行","都实现了分片功能,每个分片一把锁,采用分片存储的方式减少加锁的次数从而提高整体性能。","释放写锁","释放读锁","释放锁","链表节点","首先根据互斥锁和读写锁分别实现对共享","(1)无锁单向链表实现时在插入时需要进行","(2)为了方便打印链表内容,实现一个string()方法遍历链表,且使用值作为接收者,避免打印对象指针时无法生效。"],"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":["\"fmt\"","\"github.com/panjf2000/ants\"","\"img\"","\"runtime\"","\"runtime/debug\"","\"sync\"","\"time\"","%v","%v\\n\",","&&","&wg)","(","(max",")","*sync.waitgroup)","+0x11b","+0x65","+0x72","+0x75","+0x8f","...","//","/users/dablelv/work/code/test/main.go:16","/usr/local/go/src/fmt/print.go:265","/usr/local/go/src/fmt/print.go:274","/usr/local/go/src/internal/poll/fd_mutex.go:147","/usr/local/go/src/internal/poll/fd_mutex.go:239","/usr/local/go/src/internal/poll/fd_unix.go:262","/usr/local/go/src/os/file.go:176","/usr/local/go/src/os/file_posix.go:49","0","05","08","0;","0s","0x0)","0x1,","0x1})","0x8,","0x8})","0xc0000ac008},","0xc12ea62f50})","0。","1","1)","1.1","1.2","1.协程数过多的问题1.1","1000","1000)","10000","10000)","100000","100000)","100ns,相对于线程的微秒级耗时切换,性能表现非常优秀,但是仍有开销。","1048575)","108668","1142025","1158408","19:22:09","1m","1,错误输出文件描述符为","2","2.0027m","2.2","2.限制协程数量","20","2022","2022/03/06","20:37:02","20:37:03","20:37:04","20:37:05","2^31","2k","2kb","2,标准输入的文件描述符为","3","3)","3.协程池化","30.9523m","4","4.小结","4gb/2kb","4gb,那么至多允许","5","6","7","8","9","997200n","99n",":=","=","===","[running]:","_","```go","```shell","ant","ants.newpool(10000)","ants,我们简单地使用其默认的协程池,直接将任务提交并发执行。默认协程池的缺省容量","cal()","ch","channel","channel,在没有被接收的情况下,至多发送","common","concurr","console.log(\"plugin","const","cost","cost,","cpu","createlargenumgoroutine(1000,","createlargenumgoroutine(10000,","createlargenumgoroutine(100000,","createlargenumgoroutine(num","debug.setgcpercent(","descriptor)来访问文件,标准输出的文件描述符为","e.target.tagnam","file","file/socket","fmt.fprintln({0x10c00e0,","fmt.printf","fmt.printf(\"gc","fmt.println(...)","func","function(e){","g","gc","gitbook该文章修订时间:","go","golang","goroutin","http","import","int,","internal/poll.(*fd).write(0xc0000ae060,","internal/poll.(*fd).writelock(...)","internal/poll.(*fdmutex).rwlock(0xc0000ae060,","jeffail/tunni","linux","main","main()","main.go","main.main.func1(0x0)","make(chan","mani","math.maxint32","math.maxint32。","newpool","num","oper","os.(*file).write(...)","os.(*file).write(0xc0000ac008,","p,","packag","panic:","panjf2000/ant","per","pool","popup....\");document.onclick","power","processor","run","runtime.gc()","runtime.gomaxprocs(1)","set","singl","size","socket","src/runtime/runtime2.go里面,我们可以找到","struct{},","struct。","sync.waitgroup","sync.waitgroup。","t","time.now()","time.since(t)","total","us","var","wg","wg.add(num)","wg.wait()","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","{0xc12cadf690,","{0xc12ea62f90,","}","~","上例中创建了缓冲区大小为","上面的例子只是简单地限制了协程开辟的数量。在此基础之上,基于对象复用的思想,我们可以重复利用已开辟的协程,避免协程的重复创建销毁,达到池化的效果。","上面的分析目的是为了尽可能地量化","下面以","个任务,达到了协程并发控制的目的。","个协程同时存在。那如果协程中还存在着其他需要分配内存的操作,那么允许并发执行的协程将会数量级地减少。","个协程的并发,2^31","个数字。","个消息则被阻塞。开启协程前,调用ch","为例,简单介绍其使用。","为并发而生。goroutin","亿个,每个协程内部几乎没有做什么事情。正常的情况下呢,这个程序会乱序输出","从日志中可以很容易看到,每秒钟只并发执行了","使用","保证","关闭gc改为手动执行","内存开销","写并发程序的时候随便起个成千上万的","函数引起的,fmt.printf","创建","前面的例子过于极端,一般情况下程序也不会无限开辟协程,旨在说明协程数量是有限制的,不能无限开辟。","协程池化,我们可以自己写一个协程池,但不推荐这么做。因为已经有成熟的开源库可供使用,无需再重复造轮子。目前有很多第三方库实现了协程池,可以很方便地用来控制协程的并发数量,比较受欢迎的有:","协程的代价","协程的代价2.2","压力)。","去执行另外一个协程,下面看一下协程之间切换的耗时。","只设置一个","可以利用信道","可见一次协程的切换,耗时大概在","呢?goroutin","如果我们开辟很多协程,但不会导致程序崩溃,可以吗?如果真要这么做的话,我们应该清楚地知道,协程虽然轻量,但仍有开销。","如果自定义协程池容量大小,可以调用","对单个","将格式化后的字符串打印到屏幕,即标准输出。在","并不是必须的,例如","开销","开销。我们可以利用runntime.gosched()让当前协程主动让出","当创建的","手动gc","控制并发处理的任务数量,就不需要","数量,复用协程,达到更高效执行任务的效果。","方法来实例化具有给定容量的池,如下所示:","时间上,协程调度也会有","是一个简单易用的高性能","是由","服务,每个请求天然是并发的,此时使用","来回收,如果无休止地创建大量","毫无压力,但当我们起十万、百万甚至千万个","池,实现了对大规模","的","的内存,在源码","的压力。","的并发操作个数超过了系统上限,这个报错是","的开销。虽然官方宣称用","的开销主要是三个方面:创建(占用内存)、调度(增加调度器负担)和删除(增加","的空间,那么假设计算机的内存是","的缓冲区大小来实现。","的调度管理和复用,允许使用者在开发并发程序的时候限制","程串行执行","程到运行结束,占用的内存资源是需要由","程势必会带来性能影响,甚至程序崩溃。所以,我们应尽可能的控制协程数量,如果有需要,请复用它。","程占用约","程后,势必会造成对","程序会像预期的那样顺利的运行吗?","程序崩溃","程序崩溃1.2","程数量越多,gc","程的结构定义type","程(goroutine)是由","空间上,一个","简而言之,系统的资源被耗尽了。","系统中,标准输出也可以视为文件,内核(kernel)利用文件描述符(fil","系统地资源是有限,协程是有代价的,为了保护程序,提高性能,我们应主动限制并发的协程数量。","约为","耗时越大。","虽然轻量,但天下没有免费的午餐,无休止地开辟大量","调度开销","轻量的开销将被放大。","运行时管理的轻量级线程。通过它我们可以轻松实现并发编程。但是当我们无限开辟协程时,将会遇到致命的问题。","运行时管理的轻量级线程,通过它我们可以轻松实现并发编程。go","运行的结果是程序直接崩溃了,关键的报错信息是:","运行结果如下:","运行输出:","这个例子实现了","这行代码去掉呢?那程序很可能会因为内存不足而崩溃。这一点更好理解,每个协程至少需要消耗","那如果我们将","限制协程数量","限制协程数量3.协程池化4.小结1.协程数过多的问题",",若缓存区满,则阻塞。协程任务结束,调用"],"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":["\"img\"","&&","&config{","(","(amd64/386),","(o","(to",")","*config","*once)","*testing.b)","//","0","0,","05","08","0;","1)","1.732","1.简介2.原理2.1","12","13339154","19:22:09","2.1","2.2","2.60ghz","2.原理","2022","3.006","3.使用","3.性能差异","670438965","87.46","9750h",":=","=","==","===","@","action","action.","allow","amd64","architectur","architectures.","argument","atomic.compareandswapuint32(&o.done,","atomic.loaduint32(&o.done)","atomic.storeuint32","atomic.storeuint32(&o.done,","back","be","bench=.","benchmarkreadconfig","benchmarkreadconfigwithonc","benchmarkreadconfigwithonce(b","ca","calcul","call","called,","calls,","captur","caus","compact","complete.","config","config.init(filename)","config.once.do(func()","consid","console.log(\"plugin","context","copi","core(tm)","cpu","cpu:","darwin","darwin/amd64","deadlock.","defer","delay","differ","do(),参数","do(f","do:","done","doslow(f","e.target.tagnam","each","even","exactli","execute.","f","f()","f,","f.","fall","fast","fewer","finished.","first","first'","func","func())","function","function(e){","futur","gitbook该文章修订时间:","given","go","go1.17","goarch:","goos:","gopath","gopath:","goroot","goroot:","guarante","guarantee:","here","hot","i7","immediately,","implement","incorrect","indic","init","initi","inlin","instanc","instruct","intel(r)","intend","invocation.","invok","liter","m","main/onc","mean","more","multipl","mutex","mutex,","necessari","new","niladic,","note:","ns/op","o.don","o.done,在热路径上是比较好理解的。如果","o.doslow(f)","o.m.lock()","o.m.unlock()","object","offset)","offset)。在机器码中,偏移量是随指令传递的附加值,cpu","ok","on","onc","once.","once.do(f)","once.do(func()","os.getenv(\"gopath\"),","os.getenv(\"goroot\"),","outlin","packag","panics,","pass","path","path.","path”","path)是程序非常频繁执行的一系列指令,sync.onc","perform","performed.","pkg:","place","popup....\");document.onclick","power","readconfig","readconfig()","readconfigwithonce()","requir","return","returned;","returns,","returns.","run","second","simultan","site.","slow","stackoverflow","string","struct","sync.onc","sync.once?","test","time","times,","two","type","uint32","until","us","use.","valu","var","version","wait","whether","window.open(e.target.src,e.target.src)}img{cursor:pointer}","winner","without","words,","{","}","})","“hot","下面看一下","中保证了","为什么放在第一个字段就能够减少指令呢?因为结构体第一个字段的地址和结构体的指针是相同的,如果是第一个字段,直接对结构体的指针解引用即可。如果是其他的字段,除了结构体指针外,还需要计算与第一个值的偏移(calcul","为什么是第一个字段。","为什么是第一个字段?","为什么是第一个字段?3.性能差异1.简介","仅提供了一个导出方法","从字段","保证函数只会被执行一次和多次执行,二者的性能差异。","做一个二次判断,来保证任务函数只会被执行一次,done","函数中,通过对成员变量","函数是当所在的","函数类似,但有区别。","初始化函数仅执行了一次,避免了多次重复初始化,在并发环境下很有用。","前有一段注释,说明了done","参考","变量仅初始化一次,初始化完成后驻留在内存里。","变量初始化过程中,所有读都被阻塞,直到初始化完成;","只会被修改一次。","可以在代码的任意位置初始化和调用,因此可以延迟到使用时再执行,并发场景下是线程安全的。","可能会被多个协程并发调用,为了提升性能(减少执行时间和内存占用),使用","在多数情况下,sync.onc","在热路径中,done","实现线程安全。果不其然,和上面的猜想一致。","实现非常简洁。do()","当且仅当第一次访问某个变量时,进行初始化(写);","我们以一个简单示例,来说明使用","我们看下二者的性能差异。","执行测试结果如下:","抛去大段的注释,可以看到","指令,也就是说,这样做能够提升性能。","放在第一个字段,能够减少","是","是一个比较好的方式。","是只会被执行一次的函数,一般为对象初始化函数。","标准库提供的使函数只执行一次的实现,常应用于单例模式,例如初始化配置、保持数据库连接等。作用与","源码","源码2.2","热路径(hot","用来保证函数只执行一次。要达到这个效果,需要做到两点:","的修改是一个互斥操作。在执行任务函数前,对","的判断,来决定是否执行传入的任务函数。执行任务函数前,通过锁保证任务函数的执行和","程的情况下,函数仍然只执行一次,比如锁。","线程安全,保障在多","结构,其有两个变量。使用","绝大部分场景都会访问","统计函数执行次数,使用锁","编译后的机器码指令更少,更直接,必然是能够提升性能的。","考虑一个简单的场景,函数","被用于控制变量的初始化,这个变量的读写满足如下三个条件:","计数器,统计函数执行次数;","避免重复执行","需要做一次偏移值与指针的加法运算,才能获取要访问的值的地址。因为,访问第一个字段的机器代码更紧凑,速度更快。","需要读取环境变量,并转换为对应的配置。环境变量在程序执行前已经确定,执行过程中不会发生改变。readconfig","首次被加载时执行,若迟迟未被使用,则既浪费了内存,又延长了程序加载时间。"],"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":["!condition()","!done","\"img\"","\"start","\"wake","$","&&","&cond{l:","(c","(often","*","*cond","*cond)","*mutex","*rwmutex),","*sync.cond)","...","//","05","08","1","1.简介2.使用场景3.实现原理4.使用示例5.注意事项1.简介","1s,一方面是模拟耗时,另一方面是确保前面的","2.使用场景","2022","22:45:54","3","3)","3.实现原理","3s,确保所有操作执行完毕。","4.使用","4.使用示例","5.注意事项",":=","=","===","all\")","allow","announc","any.","associ","assum","atom","awoken","befor","broadcast","broadcast()","c","c,","c.","c.broadcast()","c.checker.check()","c.l","c.l.lock()","c.l.unlock()","c.l,因为","c.wait()","call","call.","caller","case","ch","chan","chang","channel","channel,每个协程阻塞在一个","checker","close","close(ch)","cond","cond)","condit","console.log(\"plugin","copi","copycheck","correctli","done","dure","e.target.tagnam","each","event.","execut","execution,","fals","first","fmt.println(name,","func","function(e){","gitbook该文章修订时间:","go","goroutin","goroutine.","goroutine。","goroutine。如果其他协程调用了","goroutine。当共享资源的状态发生变化时,sync.cond","goroutine。当共享资源的状态发生变化的时候,sync.cond","goroutine,无需锁保护。","goroutine,无需锁保护。broadcast","held","hold","if,是因为当前协程被唤醒时,条件不一定符合要求,需要再次","implement","instead,","l","l.","later","lock","locker","locker)","locker。因为","loop:","l}","l(互斥锁","main()","main.go","make","make(chan","method.","mutex","mutex/rwmutex","mutex,或读写锁","new","newcond","newcond(l","nocopi","notifi","notifylist","notifylist.wait、notifylist.notifi","notifylist。如果这个队列被复制的话,那么就在并发场景下导致不同","observ","occurr","on","panic。","point","popup....\");document.onclick","power","read","read(\"reader1\",","read(\"reader2\",","read(\"reader3\",","read()","read(nam","reader","reader1","reader2","reader3","reading\")","rendezv","requir","resum","resumes,","return","returning.","returns.","run","runtime_notifylistadd(&c.notify)","runtime_notifylistnotifyall(&c.notify)","runtime_notifylistnotifyone(&c.notify)","runtime_notifylistwait(&c.notify,","rwmutex),当修改条件或者调用","select","signal","signal()","signal.","stackoverflow。","start","string)","string,","struct","struct{})","suspend","sync","sync.cond","sync.cond?","sync.mutex","sync.newcond(&sync.mutex{})","systems,","t","t)","time.sleep(time.second","time.sleep(time.second)","true","true。","true,调用","type","typic","unless","unlik","unlock","us","use.","var","variable,","wait","wait()","wait(),处于等待状态。main","wake","window.open(e.target.src,e.target.src)}img{cursor:pointer}","write","write(\"writer\",","write()","write(nam","writer","writing\")","{","}","上,由接收数据的协程在数据接收完毕后,逐个通知。总之,需要额外的复杂度来完成这件事。","不能被复制","不能被复制的原因,并不是因为其内部嵌套了","与","个","个等待条件变量","中内置一个","中的暂停了","为","主要原因是","主调对条件的检查,使用了","之间操作的","互斥锁","从等待队列中按照顺序唤醒,先进入等待队列,先被唤醒。","会一直阻塞。","会将主调加入条件变量的通知列表,需要修改条件变量,所以主调在调用","会自动释放锁","使用","依旧可以继续使用。这可能就是“全能”与“专精”的区别。","充当条件变量实现","内部是维护着一个","内部维护了一个等待队列,队列中存放的是所有在等待这个","函数前,需要先获得条件变量的成员锁,原因是需要互斥地变更条件变量的等待队列。在","函数最后暂停了","创建","前要加锁","前需要对条件变量进行上锁,主调加入条件变量的通知列表后再解锁。","加锁,并且继续执行","协程都执行到","即多个","只唤醒任意","可以实现,看起来代码更加简洁,那么","可以用来唤醒一个或所有因等待条件变量而阻塞的","可以用来通知等待条件发生而阻塞的","可以用来通知被阻塞的","可以通过","后会进行解锁操作,避免重复解锁引发","后面的代码。","和","唤醒了该协程,那么","唤醒所有等待条件变量","唤醒所有等待的协程。","唤醒顺序","基于互斥锁/读写锁,那它和互斥锁的区别是什么呢?","定位于同步,用于一发多收的场景。虽然","定位于通信,用于一发一收的场景,sync.cond","实例时,需要关联一个锁。","实例都会关联一个锁","实际上","实际上,我们可以使用无缓冲","就能搞定了。","已无法继续使用,而","并不是同一个,这会导致出现有些","我们实现一个简单的例子,三个协程调用","我们想象一个非常简单的场景:","或","或互斥锁,那么只能有一个协程可以等待,并读取到数据,没办法通知其他的协程也读取数据。","执行runtime_notifylistwait会挂起调用者所在的","指针复制是没有问题的。","指针,对于","接收数据,接收完成后,将","操作来达到一发多收的效果,但是","方法在结束阻塞时,会重新给","方法时,必须加锁。","既然","时传入的","是基于互斥锁/读写锁实现的条件变量,用来协调想要访问共享资源的那些","是有区别的,channel","更多关于","有一个协程在异步地接收数据,剩下的多个协程必须等待这个协程接收完数据,才能读取到正确的数据。在这种情况下,如果单纯使用","来实现。","每个","用于阻塞调用者,等待通知。","用来协调想要访问共享资源的","用来解决这类问题。","的","的区别?","的四个成员函数定义如下:","的存在还有必要吗?","的定义如下:","的打印顺序是随机的。","的讨论可参考","程同步。通过","程间的同步。","程,以此来实现多个","程,即保存了一个通知列表。sync.cond","等待下次被唤醒。为了保险起,使用","等待通知,直到","等待,一个","等待,另一个协程调用","经常用在多个","结构来接收通知就行了。","置为","而非","能够确保被唤醒后条件一定符合后,再执行后续的代码。","表示广播通知,其他的","语言在标准库","调用","运行结果如下,注意","运行输出如下,注意","返回前,会重新上锁。重新上锁的原因是主调在","还是以上面给出的同步示例,这里换作","这个时候,就需要有个全局的变量来标志第一个协程数据是否接受完毕,剩下的协程,反复检查该变量的值,直到满足要求。或者创建多个","通常用来保护共享的临界资源,条件变量","通知协程","通知所有等待的协程。","通知队列","通知(事件发生)的场景。如果是一个通知,一个等待,使用互斥锁或","阻塞等待的条件。"],"参考文献.html":["\"img\"","&&","05","09","2022","22:37:19","=","===","advic","atom","cheney","code","comment","console.log(\"plugin","dave","e.target.tagnam","function(e){","gitbook该文章修订时间:","github.com/golang","github.com/ub","github/dgryski/go","go","go/guid","golang","golang内存分配逃逸分析","golang梦工厂","gopherzhang","go语言最佳实践go","go语言的内存逃逸分析","high","layout","perfbook","perform","popup....\");document.onclick","power","proverb","readabl","review","standards/project","stefno","window.open(e.target.src,e.target.src)}img{cursor:pointer}","workshop","|","代码风格","功能设计","博客园","参考文献","最佳性能","极客兔兔","深度解密go","的原理与使用场景","考点汇总","语言之sync.pool","语言高性能编程","项目布局代码风格功能设计最佳性能项目布局"]},"length":44},"tokenStore":{"root":{"0":{"1":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}},"5":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}},"8":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"9":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.013888888888888888},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.006016847172081829},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.009884678747940691},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":1.6851851851851851},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.018808777429467086},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.007220216606498195},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.018223234624145785},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},")":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.007220216606498195},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.015945330296127564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"}":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},",":{"docs":{},"但":{"docs":{},"不":{"docs":{},"够":{"docs":{},"直":{"docs":{},"观":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"更":{"docs":{},"加":{"docs":{},"直":{"docs":{},"观":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},".":{"2":{"5":{"1":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{}},"docs":{}},"docs":{},"导":{"docs":{},"语":{"docs":{"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":10}}}}},";":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.015945330296127564},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.013740458015267175},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.011389521640091117},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"x":{"0":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"1":{"docs":{},"}":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}},"8":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"}":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"docs":{},"c":{"0":{"0":{"0":{"0":{"docs":{},"a":{"docs":{},"c":{"0":{"0":{"8":{"docs":{},"}":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"docs":{}},"docs":{}},"docs":{}}}},"docs":{}},"docs":{}},"docs":{}},"1":{"2":{"docs":{},"e":{"docs":{},"a":{"6":{"2":{"docs":{},"f":{"5":{"0":{"docs":{},"}":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}},"docs":{}},"docs":{}}},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"s":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"1":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{}},"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"n":{"docs":{},"s":{"docs":{},",":{"docs":{},"相":{"docs":{},"对":{"docs":{},"于":{"docs":{},"线":{"docs":{},"程":{"docs":{},"的":{"docs":{},"微":{"docs":{},"秒":{"docs":{},"级":{"docs":{},"耗":{"docs":{},"时":{"docs":{},"切":{"docs":{},"换":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"表":{"docs":{},"现":{"docs":{},"非":{"docs":{},"常":{"docs":{},"优":{"docs":{},"秀":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"仍":{"docs":{},"有":{"docs":{},"开":{"docs":{},"销":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"2":{"0":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"4":{"0":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.009404388714733543}}}},"docs":{}},"4":{"8":{"5":{"7":{"5":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"8":{"6":{"6":{"8":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},":":{"4":{"8":{"docs":{},":":{"4":{"2":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},".":{"docs":{},"函":{"docs":{},"数":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":10}}}}},"、":{"1":{"0":{"0":{"docs":{},"、":{"1":{"0":{"0":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"1":{"4":{"2":{"0":{"2":{"5":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"5":{"8":{"4":{"0":{"8":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"9":{"8":{"7":{"9":{"6":{"6":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{},".":{"docs":{},"单":{"docs":{},"元":{"docs":{},"测":{"docs":{},"试":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":10}}}}}}}},"2":{"2":{"6":{"8":{"6":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"4":{"6":{"8":{"8":{"7":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.01567398119122257},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.018223234624145785},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.00916030534351145},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},".":{"docs":{},"杂":{"docs":{},"项":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":10}}}}}},"3":{"0":{"2":{"6":{"1":{"9":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"3":{"3":{"9":{"1":{"5":{"4":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"4":{"2":{"9":{"4":{"7":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}}}},"4":{"2":{"7":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"4":{"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}}}},"5":{"6":{"9":{"0":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{}},"docs":{},".":{"3":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}}},"8":{"9":{"7":{"2":{"8":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"5":{"1":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"9":{"0":{"docs":{},")":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"您":{"docs":{},"比":{"docs":{},"较":{"docs":{},"两":{"docs":{},"个":{"docs":{},"时":{"docs":{},"刻":{"docs":{},",":{"docs":{},"则":{"docs":{},"差":{"docs":{},"异":{"docs":{},"将":{"docs":{},"不":{"docs":{},"包":{"docs":{},"括":{"docs":{},"这":{"docs":{},"两":{"docs":{},"个":{"docs":{},"时":{"docs":{},"刻":{"docs":{},"之":{"docs":{},"间":{"docs":{},"可":{"docs":{},"能":{"docs":{},"发":{"docs":{},"生":{"docs":{},"的":{"docs":{},"闰":{"docs":{},"秒":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"2":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"7":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}}},"docs":{},":":{"4":{"0":{"docs":{},":":{"0":{"4":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}},"docs":{}},"docs":{}}},"3":{"docs":{},":":{"5":{"1":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"docs":{}},"docs":{}}},"6":{"docs":{},":":{"4":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}}},"7":{"docs":{},":":{"3":{"7":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"docs":{}},"docs":{}}},"docs":{}},"5":{"0":{"docs":{},":":{"1":{"7":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"docs":{}},"docs":{}}},"4":{"docs":{},":":{"2":{"5":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"6":{"5":{"2":{"1":{"4":{"6":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"6":{"docs":{},".":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},"docs":{}}},"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},":":{"0":{"0":{"docs":{},":":{"3":{"7":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}},"docs":{}},"docs":{}}},"docs":{}},"5":{"6":{"docs":{},":":{"5":{"0":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"7":{"0":{"8":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"4":{"6":{"6":{"4":{"8":{"6":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{},":":{"0":{"3":{"docs":{},":":{"0":{"0":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},".":{"5":{"3":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"8":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},"docs":{}},"docs":{}}},"8":{"6":{"1":{"2":{"7":{"2":{"8":{"8":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456}}},"9":{"0":{"6":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{},":":{"2":{"2":{"docs":{},":":{"0":{"9":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}},"docs":{}}},"docs":{}},"5":{"4":{"docs":{},":":{"1":{"4":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.007220216606498195},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.006589785831960461},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":3.3619047619047615},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":1.7037037037037035},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.010344827586206896},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},".":{"1":{"3":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"2":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"3":{"7":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}},"docs":{}},"docs":{}},"5":{"8":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}},"docs":{}},"docs":{}},"7":{"3":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}},"docs":{}},"8":{"1":{"3":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"4":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{}},"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}},"前":{"docs":{},"言":{"2":{"docs":{},".":{"docs":{},"项":{"docs":{},"目":{"docs":{},"布":{"docs":{},"局":{"2":{"docs":{},".":{"1":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}}},"docs":{}}}}}}},"docs":{}}},"格":{"docs":{},"式":{"docs":{},"化":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":10}}}}},"基":{"docs":{},"本":{"docs":{},"类":{"docs":{},"型":{"docs":{},"偏":{"docs":{},"执":{"docs":{},"通":{"docs":{},"用":{"docs":{},"场":{"docs":{},"景":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"2":{"docs":{},".":{"docs":{},"单":{"docs":{},"一":{"docs":{},"职":{"docs":{},"责":{"docs":{},"包":{"docs":{},"&":{"docs":{},"文":{"docs":{},"件":{"docs":{},"函":{"docs":{},"数":{"3":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"4":{"docs":{},".":{"docs":{},"应":{"docs":{},"用":{"docs":{},"服":{"docs":{},"务":{"5":{"docs":{},".":{"docs":{},"常":{"docs":{},"用":{"docs":{},"工":{"docs":{},"具":{"1":{"docs":{},".":{"docs":{},"基":{"docs":{},"本":{"docs":{},"类":{"docs":{},"型":{"docs":{},"偏":{"docs":{},"执":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}},"docs":{}}}}}}},"docs":{}}}}}}},"docs":{}}}}}}}}}}}},"docs":{}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"指":{"docs":{},"向":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":3.333333333333333}}}}}},"占":{"docs":{},"内":{"docs":{},"存":{"docs":{},"空":{"docs":{},"间":{"2":{"docs":{},".":{"docs":{},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"的":{"docs":{},"作":{"docs":{},"用":{"2":{"docs":{},".":{"1":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},"docs":{}}},"docs":{}}}}}}}}}},"docs":{}}}}}}},"方":{"docs":{},"法":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"为":{"docs":{},"值":{"docs":{},"和":{"docs":{},"指":{"docs":{},"针":{"docs":{},"的":{"docs":{},"区":{"docs":{},"别":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":10}}}}}}}}}}}}}}},"将":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}},"零":{"docs":{},"值":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":3.333333333333333}}}},"错":{"docs":{},"误":{"docs":{},"处":{"docs":{},"理":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":10}}}},"类":{"docs":{},"型":{"2":{"docs":{},".":{"docs":{},"错":{"docs":{},"误":{"docs":{},"包":{"docs":{},"装":{"1":{"docs":{},".":{"docs":{},"错":{"docs":{},"误":{"docs":{},"类":{"docs":{},"型":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}},"docs":{}}}}}}},"docs":{}}}}},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":3.333333333333333}},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"节":{"docs":{},"省":{"docs":{},"内":{"docs":{},"存":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":10}}}}}}}}}}}},"避":{"docs":{},"免":{"docs":{},"使":{"docs":{},"用":{"docs":{},"可":{"docs":{},"变":{"docs":{},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":10}}}}}}}}}}}},"优":{"docs":{},"先":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}}}}}},"反":{"docs":{},"射":{"docs":{},"虽":{"docs":{},"好":{"docs":{},",":{"docs":{},"切":{"docs":{},"莫":{"docs":{},"贪":{"docs":{},"杯":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":10}}}}}}}}}}},"指":{"docs":{},"定":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308}}}},"行":{"docs":{},"内":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"拼":{"docs":{},"接":{"2":{"docs":{},".":{"docs":{},"非":{"docs":{},"行":{"docs":{},"内":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"拼":{"docs":{},"接":{"1":{"docs":{},".":{"docs":{},"行":{"docs":{},"内":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"拼":{"docs":{},"接":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}},"docs":{}}}}}}}}}}},"docs":{}}}}}}}},"[":{"docs":{},"]":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"2":{"docs":{},".":{"docs":{},"[":{"docs":{},"]":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"3":{"docs":{},".":{"docs":{},"[":{"docs":{},"]":{"docs":{},"*":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"4":{"docs":{},".":{"docs":{},"小":{"docs":{},"结":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}},"docs":{}}}}}}}}}}}},"docs":{}}}}}}}}}}}}},"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}},"截":{"docs":{},"取":{"docs":{},"法":{"docs":{},"(":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},")":{"2":{"docs":{},".":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"法":{"docs":{},"(":{"docs":{},"不":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},")":{"3":{"docs":{},".":{"docs":{},"移":{"docs":{},"位":{"docs":{},"法":{"docs":{},"(":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},")":{"4":{"docs":{},".":{"docs":{},"性":{"docs":{},"能":{"docs":{},"对":{"docs":{},"比":{"5":{"docs":{},".":{"docs":{},"小":{"docs":{},"结":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}},"docs":{}}}}}}},"docs":{}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}},"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"为":{"docs":{},"什":{"docs":{},"么":{"docs":{},"需":{"docs":{},"要":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"2":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}},"docs":{}}}}}}}}}},"局":{"docs":{},"部":{"docs":{},"切":{"docs":{},"片":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"确":{"docs":{},"定":{"docs":{},"长":{"docs":{},"度":{"docs":{},"或":{"docs":{},"容":{"docs":{},"量":{"2":{"docs":{},".":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}},"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}},"简":{"docs":{},"介":{"2":{"docs":{},".":{"docs":{},"作":{"docs":{},"用":{"3":{"docs":{},".":{"docs":{},"如":{"docs":{},"何":{"docs":{},"使":{"docs":{},"用":{"4":{"docs":{},".":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"5":{"docs":{},".":{"docs":{},"在":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{},"中":{"docs":{},"的":{"docs":{},"应":{"docs":{},"用":{"1":{"docs":{},".":{"docs":{},"简":{"docs":{},"介":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"docs":{}}}}}}}}}}},"docs":{}}}}}}},"docs":{}}}}}}},"docs":{}}},"原":{"docs":{},"理":{"2":{"docs":{},".":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}}},"docs":{}}},"使":{"docs":{},"用":{"docs":{},"场":{"docs":{},"景":{"3":{"docs":{},".":{"docs":{},"实":{"docs":{},"现":{"docs":{},"原":{"docs":{},"理":{"4":{"docs":{},".":{"docs":{},"使":{"docs":{},"用":{"docs":{},"示":{"docs":{},"例":{"5":{"docs":{},".":{"docs":{},"注":{"docs":{},"意":{"docs":{},"事":{"docs":{},"项":{"1":{"docs":{},".":{"docs":{},"简":{"docs":{},"介":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"docs":{}}}}}}},"docs":{}}}}}}},"docs":{}}}}}}},"docs":{}}}}}}},"docs":{}}},"关":{"docs":{},"于":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":10}}}}},"无":{"docs":{},"锁":{"docs":{},"化":{"1":{"docs":{},".":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}}},"docs":{}}}},"协":{"docs":{},"程":{"docs":{},"数":{"docs":{},"过":{"docs":{},"多":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"1":{"docs":{},".":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}}},"docs":{}}}}}}}}}},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.018518518518518517}}},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"魔":{"docs":{},"法":{"docs":{},"数":{"docs":{},"字":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"我":{"docs":{},"们":{"docs":{},"要":{"docs":{},"删":{"docs":{},"除":{"docs":{},"所":{"docs":{},"有":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}},"错":{"docs":{},"误":{"docs":{},"输":{"docs":{},"出":{"docs":{},"文":{"docs":{},"件":{"docs":{},"描":{"docs":{},"述":{"docs":{},"符":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}},"m":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"b":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}},"s":{"docs":{},",":{"docs":{},"一":{"docs":{},"方":{"docs":{},"面":{"docs":{},"是":{"docs":{},"模":{"docs":{},"拟":{"docs":{},"耗":{"docs":{},"时":{"docs":{},",":{"docs":{},"另":{"docs":{},"一":{"docs":{},"方":{"docs":{},"面":{"docs":{},"是":{"docs":{},"确":{"docs":{},"保":{"docs":{},"前":{"docs":{},"面":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}},"2":{"0":{"0":{"0":{"docs":{},"}":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}},"9":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}},"docs":{}},"2":{"2":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},"/":{"0":{"3":{"docs":{},"/":{"0":{"6":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.022779043280182234}}},"docs":{}},"2":{"7":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},".":{"9":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},"%":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}},":":{"3":{"7":{"docs":{},":":{"0":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}},"3":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}},"4":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}},"5":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"1":{"2":{"4":{"2":{"3":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"3":{"0":{"7":{"0":{"6":{"4":{"3":{"3":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"6":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}}},"9":{"1":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"5":{"2":{"1":{"2":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}},":":{"1":{"8":{"docs":{},":":{"1":{"4":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}},"docs":{}},"3":{"2":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}},"docs":{}},"docs":{}}},"docs":{}},"4":{"4":{"docs":{},":":{"0":{"6":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}}}},"2":{"1":{"7":{"6":{"3":{"9":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"4":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"9":{"0":{"3":{"7":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},":":{"1":{"2":{"docs":{},":":{"5":{"2":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}},"docs":{}},"docs":{}}},"9":{"docs":{},":":{"5":{"4":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}},"docs":{}},"docs":{}}},"docs":{}},"2":{"3":{"docs":{},":":{"3":{"5":{"docs":{"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456}}},"docs":{}},"docs":{}}},"docs":{}},"3":{"7":{"docs":{},":":{"1":{"9":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}},"docs":{}},"docs":{}}},"docs":{}},"4":{"5":{"docs":{},":":{"5":{"4":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"3":{"3":{"docs":{},")":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}}}},"6":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}}},"9":{"docs":{},".":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}}},"docs":{}},"4":{"0":{"6":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"6":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}},"docs":{}},"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.018018018018018018}}},"5":{"8":{"6":{"6":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"7":{"1":{"4":{"1":{"5":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"6":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"2":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},".":{"4":{"0":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}}},"8":{"6":{"1":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"9":{"6":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.017241379310344827},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},".":{"0":{"0":{"2":{"7":{"docs":{},"m":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}},"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}},"1":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"2":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"3":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},"4":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"5":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"6":{"0":{"docs":{},"g":{"docs":{},"h":{"docs":{},"z":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"7":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"9":{"6":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}},"docs":{}},"docs":{}},"docs":{},"项":{"docs":{},"目":{"docs":{},"布":{"docs":{},"局":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"代":{"docs":{},"码":{"docs":{},"行":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":10}}}}},"单":{"docs":{},"一":{"docs":{},"职":{"docs":{},"责":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}},"编":{"docs":{},"译":{"docs":{},"期":{"docs":{},"验":{"docs":{},"证":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":3.333333333333333}}}}}}},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":3.333333333333333}},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":3.333333333333333}}}}},"场":{"docs":{},"景":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"将":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":1.6666666666666665}}}}}}}}},"错":{"docs":{},"误":{"docs":{},"包":{"docs":{},"装":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}},"避":{"docs":{},"免":{"docs":{},"在":{"docs":{},"公":{"docs":{},"共":{"docs":{},"结":{"docs":{},"构":{"docs":{},"中":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"类":{"docs":{},"型":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":10}}}}}}}}}}}},"重":{"docs":{},"复":{"docs":{},"转":{"docs":{},"换":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"到":{"docs":{},"字":{"docs":{},"节":{"docs":{},"切":{"docs":{},"片":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":10}}}}}}}}}}}}}}}},"少":{"docs":{},"量":{"docs":{},"的":{"docs":{},"重":{"docs":{},"复":{"docs":{},"不":{"docs":{},"比":{"docs":{},"反":{"docs":{},"射":{"docs":{},"差":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}},"指":{"docs":{},"定":{"docs":{},"切":{"docs":{},"片":{"docs":{},"容":{"docs":{},"量":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}},"非":{"docs":{},"行":{"docs":{},"内":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"拼":{"docs":{},"接":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}},"[":{"docs":{},"]":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}},"拷":{"docs":{},"贝":{"docs":{},"法":{"docs":{},"(":{"docs":{},"不":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"的":{"docs":{},"作":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":5}}}}}}}},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"作":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}},"减":{"docs":{},"少":{"docs":{},"锁":{"docs":{},"竞":{"docs":{},"争":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"限":{"docs":{},"制":{"docs":{},"协":{"docs":{},"程":{"docs":{},"数":{"docs":{},"量":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":10}}}}}}}},"原":{"docs":{},"理":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"^":{"3":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{},"b":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}},"}":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},",":{"docs":{},"从":{"docs":{},"第":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}},"因":{"docs":{},"此":{"docs":{},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"空":{"docs":{},"出":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}},"标":{"docs":{},"准":{"docs":{},"输":{"docs":{},"入":{"docs":{},"的":{"docs":{},"文":{"docs":{},"件":{"docs":{},"描":{"docs":{},"述":{"docs":{},"符":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}},"k":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"b":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"3":{"0":{"0":{"7":{"9":{"7":{"8":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"3":{"6":{"9":{"3":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{}},"docs":{}},"7":{"4":{"8":{"4":{"9":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"9":{"1":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{},".":{"9":{"5":{"2":{"3":{"docs":{},"m":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"1":{"5":{"4":{"3":{"9":{"1":{"6":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"6":{"1":{"3":{"1":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"6":{"3":{"5":{"2":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"2":{"5":{"1":{"9":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}},"3":{"3":{"9":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.013513513513513514}}},"docs":{}},"docs":{}},"4":{"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}}}},"5":{"9":{"docs":{},".":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}}},"docs":{}},"6":{"1":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"5":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"docs":{},".":{"3":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}}},"7":{"docs":{},".":{"3":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}}},"8":{"0":{"6":{"2":{"6":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"7":{"9":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{}},"9":{"docs":{},".":{"5":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}}},"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.009111617312072893},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},".":{"0":{"0":{"6":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{},"g":{"docs":{},"h":{"docs":{},"z":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}},"docs":{},"}":{"docs":{},"[":{"docs":{},"i":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}},"1":{"4":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.00510204081632653}}},"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"2":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"3":{"7":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"5":{"1":{"0":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"docs":{}},"docs":{}},"7":{"4":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"8":{"0":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"6":{"5":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"9":{"0":{"8":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{},"小":{"docs":{},"结":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"的":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"好":{"docs":{},"过":{"docs":{},"引":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":10}}}}},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}},"在":{"docs":{},"边":{"docs":{},"界":{"docs":{},"处":{"docs":{},"拷":{"docs":{},"贝":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":2.5}}}}}}}},"不":{"docs":{},"要":{"docs":{},"在":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":3.333333333333333}}}}},"慎":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"指":{"docs":{},"定":{"docs":{},"容":{"docs":{},"器":{"docs":{},"容":{"docs":{},"量":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":10}}}}}}}},"[":{"docs":{},"]":{"docs":{},"*":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}},"移":{"docs":{},"位":{"docs":{},"法":{"docs":{},"(":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"合":{"docs":{},"理":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"减":{"docs":{},"少":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"将":{"docs":{},"变":{"docs":{},"量":{"docs":{},"限":{"docs":{},"制":{"docs":{},"在":{"docs":{},"栈":{"docs":{},"上":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":10}}}}}}}}}}}}}}},"如":{"docs":{},"何":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"优":{"docs":{},"先":{"docs":{},"使":{"docs":{},"用":{"docs":{},"共":{"docs":{},"享":{"docs":{},"锁":{"docs":{},"而":{"docs":{},"非":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}},"协":{"docs":{},"程":{"docs":{},"池":{"docs":{},"化":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":3.333333333333333}}}},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"实":{"docs":{},"现":{"docs":{},"原":{"docs":{},"理":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"s":{"docs":{},",":{"docs":{},"确":{"docs":{},"保":{"docs":{},"所":{"docs":{},"有":{"docs":{},"操":{"docs":{},"作":{"docs":{},"执":{"docs":{},"行":{"docs":{},"完":{"docs":{},"毕":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}},"4":{"0":{"4":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}},"docs":{},".":{"6":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}}},"1":{"2":{"4":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{}},"2":{"3":{"docs":{},".":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}}},"docs":{}},"3":{"2":{"0":{"4":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"3":{"8":{"6":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{}},"6":{"8":{"7":{"3":{"8":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"4":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"6":{"1":{"6":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"4":{"9":{"7":{"4":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"8":{"5":{"9":{"1":{"7":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"9":{"8":{"6":{"7":{"3":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.041379310344827586},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},".":{"4":{"0":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{},"依":{"docs":{},"赖":{"docs":{},"管":{"docs":{},"理":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":10}}}}}},"应":{"docs":{},"用":{"docs":{},"服":{"docs":{},"务":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}},"枚":{"docs":{},"举":{"docs":{},"从":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":3.333333333333333}}}}},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"方":{"docs":{},"式":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":10}}}}}}}}},"小":{"docs":{},"结":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"性":{"docs":{},"能":{"docs":{},"对":{"docs":{},"比":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}},"差":{"docs":{},"异":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"与":{"docs":{},"空":{"docs":{},"数":{"docs":{},"组":{"docs":{},"对":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"的":{"docs":{},"影":{"docs":{},"响":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"使":{"docs":{},"用":{"docs":{},"确":{"docs":{},"定":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":5}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":3.333333333333333}},"示":{"docs":{},"例":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},",":{"docs":{},"d":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}},"docs":{}}}}},"必":{"docs":{},"须":{"docs":{},"空":{"docs":{},"出":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}},"此":{"docs":{},"时":{"docs":{},",":{"docs":{},"内":{"docs":{},"存":{"docs":{},"已":{"docs":{},"经":{"docs":{},"是":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"的":{"docs":{},",":{"docs":{},"从":{"docs":{},"第":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}},"g":{"docs":{},"b":{"docs":{},"/":{"2":{"docs":{},"k":{"docs":{},"b":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"docs":{}},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"至":{"docs":{},"多":{"docs":{},"允":{"docs":{},"许":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"5":{"0":{"0":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"4":{"3":{"3":{"2":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"7":{"6":{"2":{"5":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},".":{"7":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"%":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},",":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}},"1":{"9":{"4":{"7":{"2":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"3":{"2":{"3":{"5":{"0":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{}},"docs":{}},"4":{"docs":{},".":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}}},"5":{"7":{"0":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"4":{"docs":{},".":{"6":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}}},"5":{"6":{"4":{"3":{"6":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{}},"docs":{},",":{"8":{"9":{"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}},"docs":{}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}},"6":{"0":{"6":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"7":{"8":{"docs":{},".":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}}},"docs":{}},"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},".":{"0":{"9":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"4":{"2":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":10}}}}},"常":{"docs":{},"用":{"docs":{},"工":{"docs":{},"具":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}},"[":{"docs":{},"]":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":5}}}}}}}}}}}},"小":{"docs":{},"结":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"在":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{},"中":{"docs":{},"的":{"docs":{},"应":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}},"注":{"docs":{},"意":{"docs":{},"事":{"docs":{},"项":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"}":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}},"6":{"0":{"0":{"7":{"9":{"0":{"0":{"3":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"3":{"9":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}}},"docs":{}},"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},")":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517}}}},"5":{"docs":{},".":{"0":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}}},"6":{"5":{"3":{"4":{"1":{"8":{"9":{"6":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"9":{"3":{"0":{"6":{"7":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"7":{"0":{"4":{"3":{"8":{"9":{"6":{"5":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"9":{"2":{"4":{"0":{"0":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},".":{"4":{"5":{"4":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{},"错":{"docs":{},"误":{"docs":{},"处":{"docs":{},"理":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":10}}}}}},"切":{"docs":{},"片":{"docs":{},"删":{"docs":{},"除":{"docs":{},"指":{"docs":{},"定":{"docs":{},"元":{"docs":{},"素":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":10}}}}}}}}}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"7":{"0":{"3":{"2":{"9":{"2":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"6":{"3":{"8":{"9":{"2":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"4":{"8":{"4":{"6":{"7":{"9":{"7":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"5":{"2":{"0":{"0":{"1":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},"7":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"6":{"2":{"docs":{},".":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}}},"docs":{}},"7":{"3":{"6":{"3":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},".":{"docs":{},"注":{"docs":{},"释":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":10}}}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"8":{"0":{"0":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}},"7":{"4":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"%":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},",":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}},"1":{"9":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.00683371298405467}}},"docs":{}},"docs":{},".":{"9":{"6":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{}}},"2":{"4":{"9":{"4":{"6":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"3":{"2":{"4":{"1":{"8":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"5":{"docs":{},".":{"2":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}}},"7":{"2":{"8":{"docs":{},")":{"docs":{},",":{"docs":{},"也":{"docs":{},"不":{"docs":{},"在":{"docs":{},"计":{"docs":{},"算":{"docs":{},"中":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"闰":{"docs":{},"秒":{"docs":{},"(":{"docs":{},"i":{"docs":{},"s":{"docs":{},"s":{"docs":{},"u":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}},"docs":{}},"8":{"2":{"4":{"6":{"4":{"9":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{},".":{"4":{"6":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}},"docs":{}}},"9":{"3":{"docs":{},".":{"6":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}}},"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}},"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.03125},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.050314465408805034},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.04332129963898917},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.020689655172413793},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},",":{"7":{"docs":{},",":{"6":{"docs":{},",":{"9":{"docs":{},",":{"5":{"docs":{},",":{"4":{"docs":{},",":{"3":{"docs":{},",":{"1":{"docs":{},",":{"2":{"docs":{},",":{"0":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},".":{"docs":{},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":10}}}}}},"9":{"7":{"0":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"5":{"0":{"docs":{},"h":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"docs":{}},"8":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}}},"docs":{},".":{"1":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"docs":{}},"docs":{}}},"9":{"7":{"2":{"0":{"0":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},".":{"5":{"3":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{}},"docs":{},"流":{"docs":{},"程":{"docs":{},"控":{"docs":{},"制":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":10}}}}}}},"}":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},",":{"8":{"docs":{},",":{"7":{"docs":{},",":{"6":{"docs":{},",":{"5":{"docs":{},",":{"4":{"docs":{},",":{"3":{"docs":{},",":{"2":{"docs":{},",":{"0":{"docs":{},",":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{},"\"":{"0":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},"1":{"9":{"2":{"docs":{},".":{"0":{"docs":{},".":{"2":{"docs":{},".":{"0":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498}}}},":":{"8":{"0":{"0":{"0":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},"\"":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.006578947368421052}}}},"docs":{}}},"docs":{}},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.012269938650306749}}}},":":{"8":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}},"docs":{}}},"8":{"0":{"0":{"0":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498}}}}},"docs":{}},"docs":{}},"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.012269938650306749}}}}},"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.034482758620689655},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01845018450184502},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"i":{"docs":{},"m":{"docs":{},"g":{"docs":{},"\"":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"r":{"docs":{},"s":{"docs":{},"p":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.022988505747126436}}}},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"\"":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"/":{"docs":{},"d":{"docs":{},"e":{"docs":{},"b":{"docs":{},"u":{"docs":{},"g":{"docs":{},"\"":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},",":{"docs":{},"j":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{},"s":{"docs":{},"p":{"docs":{},"i":{"docs":{},"k":{"docs":{},"e":{"docs":{},"\"":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"\"":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}}}}},"u":{"docs":{},"n":{"docs":{},"k":{"docs":{},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}},"s":{"docs":{},"a":{"docs":{},"f":{"docs":{},"e":{"docs":{},"\"":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},".":{"docs":{},".":{"docs":{},"/":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"/":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}},"\"":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976}},"}":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886}}}}},"z":{"docs":{},"\"":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886}}}}},"\"":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"/":{"docs":{},"j":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"\"":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}}},"o":{"docs":{},"o":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635}},"}":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886}}}}}},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"e":{"docs":{},"d":{"docs":{},"\"":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"u":{"docs":{},"b":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"o":{"docs":{},"l":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"/":{"docs":{},"e":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"i":{"docs":{},"c":{"docs":{},"/":{"docs":{},"v":{"7":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613}}}},"docs":{}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"/":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{},"s":{"docs":{},"/":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"/":{"docs":{},"p":{"docs":{},"k":{"docs":{},"g":{"docs":{},"/":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"n":{"docs":{},"j":{"docs":{},"f":{"2":{"0":{"0":{"0":{"docs":{},"/":{"docs":{},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{},"s":{"docs":{},"\"":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}}}},"o":{"docs":{},".":{"docs":{},"u":{"docs":{},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},"i":{"docs":{},"c":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"x":{"docs":{},"/":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},"/":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"y":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"l":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613}}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"s":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613}}}}}}}}}}}}}}}}},"_":{"docs":{},"e":{"docs":{},"n":{"docs":{},"v":{"docs":{},"\"":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"\"":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}},"o":{"docs":{},"s":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}},"u":{"docs":{},"b":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"\"":{"docs":{},"}":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},"\"":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"/":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},"i":{"docs":{},"c":{"docs":{},"\"":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"j":{"docs":{},"/":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}},"\"":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335}},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.012269938650306749}}}},"a":{"docs":{},"\"":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}},"d":{"docs":{},"d":{"docs":{},"\"":{"docs":{},"}":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"p":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"/":{"docs":{},"j":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{},"\"":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}},".":{"docs":{},"y":{"docs":{},"a":{"docs":{},"m":{"docs":{},"l":{"docs":{},"\"":{"docs":{},")":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}}}}}}}}},"\"":{"docs":{},"}":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"d":{"docs":{},"o":{"docs":{},"e":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635}}}}}},"a":{"docs":{},"r":{"docs":{},"w":{"docs":{},"i":{"docs":{},"n":{"docs":{},"\"":{"docs":{},":":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}},"j":{"docs":{},"o":{"docs":{},"h":{"docs":{},"n":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"@":{"docs":{},"e":{"docs":{},"x":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}},"\"":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"\"":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"i":{"docs":{},"n":{"docs":{},"u":{"docs":{},"x":{"docs":{},"\"":{"docs":{},":":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}},"/":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{},"/":{"docs":{},"v":{"3":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"s":{"docs":{},"/":{"docs":{},"%":{"docs":{},"s":{"docs":{},"/":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"_":{"docs":{},"r":{"docs":{},"e":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"/":{"docs":{},"%":{"docs":{},"s":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"s":{"docs":{},"\"":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"\"":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.012269938650306749}}}},"s":{"docs":{},"\"":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},".":{"docs":{},"o":{"docs":{},"a":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"\"":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}},":":{"8":{"0":{"0":{"0":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}},"w":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"&":{"docs":{},"&":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.013888888888888888},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}},"_":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"{":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}},"d":{"docs":{},"{":{"docs":{},"l":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"t":{"docs":{},"{":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}},"s":{"1":{"docs":{},"{":{"docs":{},"}":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}},"2":{"docs":{},"{":{"docs":{},"}":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}},"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"{":{"docs":{},"}":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"{":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}}}}}},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"{":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}},"t":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{},")":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"{":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},":":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"{":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}},"u":{"docs":{},"m":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}},"{":{"docs":{},"s":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"a":{"docs":{},"g":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}},"g":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}}},"(":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.04516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.010830324909747292},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.0380952380952381},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"f":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.009868421052631578},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.029411764705882353}},"a":{"docs":{},"q":{"docs":{},")":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"*":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"v":{"docs":{},"i":{"docs":{},"s":{"docs":{},"、":{"docs":{},"c":{"docs":{},"i":{"docs":{},"r":{"docs":{},"c":{"docs":{},"l":{"docs":{},"e":{"docs":{},"、":{"docs":{},"d":{"docs":{},"r":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},")":{"docs":{},"配":{"docs":{},"置":{"docs":{},"和":{"docs":{},"脚":{"docs":{},"本":{"docs":{},"放":{"docs":{},"在":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"i":{"docs":{},"n":{"docs":{},"t":{"3":{"2":{"docs":{},",":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}},"docs":{}},"docs":{},"(":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"f":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"m":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}},"y":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}},"a":{"docs":{},"p":{"docs":{},"[":{"docs":{},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"6":{"4":{"docs":{},"]":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}},"x":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"i":{"docs":{},"p":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}},"e":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}},"/":{"docs":{},"*":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"h":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353}},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"s":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"g":{"docs":{},"o":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"/":{"docs":{},"s":{"docs":{},"p":{"docs":{},"e":{"docs":{},"c":{"docs":{},"#":{"docs":{},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"_":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"k":{"docs":{},"y":{"docs":{},"l":{"docs":{},"l":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"s":{"docs":{},"t":{"docs":{},"y":{"docs":{},"l":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},"o":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"s":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.011904761904761904},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.029411764705882353},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.017543859649122806}},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"*":{"docs":{},"n":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{},"(":{"docs":{},"n":{"docs":{},"i":{"docs":{},"l":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}},"将":{"docs":{},"无":{"docs":{},"法":{"docs":{},"编":{"docs":{},"译":{"docs":{},"通":{"docs":{},"过":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}}}}}}}},"[":{"docs":{},"]":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}},"l":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.03550295857988166},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335}},"a":{"docs":{},"t":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}},"b":{"docs":{},"u":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}},"c":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}},"a":{"docs":{},"n":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},"d":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537}}},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},"p":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"a":{"docs":{},"m":{"docs":{},"d":{"6":{"4":{"docs":{},"/":{"3":{"8":{"6":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}},"o":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},"f":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"=":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.034482758620689655},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0421179302045728},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.033210332103321034},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.019736842105263157},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.008237232289950576},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.015306122448979591},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.037037037037037035},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.0392156862745098},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.016304347826086956},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.05714285714285714},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.04411764705882353},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0390625},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.012531328320802004},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.026845637583892617},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.01444043321299639},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.023076923076923078},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.022900763358778626},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.015945330296127564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.008880994671403197},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},"=":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.006016847172081829},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.007782101167315175},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.026359143327841845},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.006802721088435374},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},"=":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{},"b":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"e":{"docs":{},"q":{"docs":{},"u":{"docs":{},"a":{"docs":{},"l":{"docs":{},"(":{"docs":{},"t":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.06134969325153374},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}}}}}}}}}}},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}},"o":{"docs":{},"c":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"u":{"docs":{},"m":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"m":{"docs":{},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"d":{"6":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}},"docs":{}}},"p":{"docs":{},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"、":{"docs":{},"r":{"docs":{},"e":{"docs":{},"p":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{},"、":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"d":{"docs":{},";":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}},";":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},",":{"docs":{},"但":{"docs":{},"又":{"docs":{},"没":{"docs":{},"有":{"docs":{},"明":{"docs":{},"确":{"docs":{},"说":{"docs":{},"明":{"docs":{},",":{"docs":{},"既":{"docs":{},"导":{"docs":{},"致":{"docs":{},"了":{"docs":{},"模":{"docs":{},"糊":{"docs":{},"的":{"docs":{},"文":{"docs":{},"档":{"docs":{},",":{"docs":{},"又":{"docs":{},"泄":{"docs":{},"露":{"docs":{},"了":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}},"(":{"docs":{},"n":{"docs":{},"u":{"docs":{},"m":{"docs":{},"s":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635}}}}}}},"s":{"docs":{},".":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"s":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}},"t":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"g":{"docs":{},"t":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"m":{"docs":{},"p":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.006578947368421052}}}}}},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"i":{"docs":{},"m":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}},",":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}},"d":{"docs":{},"d":{"1":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}},"2":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}},"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.01904761904761905},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}},"(":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}},"=":{"0":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"1":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"docs":{}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}},"(":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.01775147928994083}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.01020408163265306}},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}},"g":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"s":{"docs":{},"[":{"0":{"docs":{},"]":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}},"docs":{}}}},"r":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"[":{"4":{"docs":{},"]":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"docs":{}},"a":{"docs":{},"y":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.008152173913043478},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.013793103448275862},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"'":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}},"f":{"docs":{},"i":{"docs":{},"b":{"docs":{},"o":{"docs":{},"n":{"docs":{},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"i":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}}}}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},"s":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"s":{"docs":{},")":{"docs":{},"都":{"docs":{},"必":{"docs":{},"须":{"docs":{},"有":{"docs":{},"注":{"docs":{},"释":{"docs":{},"说":{"docs":{},"明":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},"g":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}}},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.006589785831960461}}}}}}}}}}}},"c":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},"s":{"docs":{},"/":{"docs":{},"o":{"docs":{},"p":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.01567398119122257},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.018223234624145785},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},".":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}},"\"":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"i":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549}}}}}}}},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}}},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":3.3431372549019605},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},"i":{"docs":{},"c":{"docs":{},".":{"docs":{},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549}}}}}},"s":{"docs":{},"w":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"3":{"2":{"docs":{},"(":{"docs":{},"&":{"docs":{},"f":{"docs":{},".":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"n":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},",":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"3":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"(":{"docs":{},"&":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"s":{"docs":{},"w":{"docs":{},"a":{"docs":{},"p":{"docs":{},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"3":{"2":{"docs":{},"(":{"docs":{},"&":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"3":{"2":{"docs":{},"(":{"docs":{},"&":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}}}}}}}}}},"b":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.047337278106508875}},"。":{"docs":{},"相":{"docs":{},"反":{"docs":{},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"手":{"docs":{},"动":{"docs":{},"将":{"docs":{},"方":{"docs":{},"法":{"docs":{},"写":{"docs":{},"入":{"docs":{},"具":{"docs":{},"体":{"docs":{},"的":{"docs":{},"列":{"docs":{},"表":{"docs":{},",":{"docs":{},"委":{"docs":{},"托":{"docs":{},"给":{"docs":{},"抽":{"docs":{},"象":{"docs":{},"列":{"docs":{},"表":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"是":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}},"[":{"docs":{},":":{"0":{"docs":{},"]":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}},"docs":{},"j":{"docs":{},"]":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"j":{"docs":{},"]":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"、":{"docs":{},"b":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},".":{"docs":{},".":{"docs":{},".":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"c":{"docs":{},"c":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}}},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}},"g":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"n":{"docs":{},"y":{"docs":{},")":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"t":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"s":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},"(":{"1":{"0":{"0":{"0":{"0":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"简":{"docs":{},"单":{"docs":{},"地":{"docs":{},"使":{"docs":{},"用":{"docs":{},"其":{"docs":{},"默":{"docs":{},"认":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},"池":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"将":{"docs":{},"任":{"docs":{},"务":{"docs":{},"提":{"docs":{},"交":{"docs":{},"并":{"docs":{},"发":{"docs":{},"执":{"docs":{},"行":{"docs":{},"。":{"docs":{},"默":{"docs":{},"认":{"docs":{},"协":{"docs":{},"程":{"docs":{},"池":{"docs":{},"的":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"容":{"docs":{},"量":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"w":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"c":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.05555555555555555},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.017241379310344827},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.007104795737122558}},"+":{"docs":{},"+":{"1":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.06896551724137931},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},"r":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456}}},")":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}},",":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}},"u":{"docs":{},"s":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"(":{"docs":{},"f":{"docs":{},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}},"m":{"docs":{},"m":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}},"o":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"i":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},"a":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}}}}}},"p":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"、":{"docs":{},"k":{"docs":{},"u":{"docs":{},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"/":{"docs":{},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"、":{"docs":{},"m":{"docs":{},"e":{"docs":{},"s":{"docs":{},"o":{"docs":{},"s":{"docs":{},"、":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"、":{"docs":{},"b":{"docs":{},"o":{"docs":{},"s":{"docs":{},"h":{"docs":{},")":{"docs":{},"。":{"docs":{},"注":{"docs":{},"意":{"docs":{},",":{"docs":{},"在":{"docs":{},"一":{"docs":{},"些":{"docs":{},"存":{"docs":{},"储":{"docs":{},"库":{"docs":{},"中":{"docs":{},"(":{"docs":{},"特":{"docs":{},"别":{"docs":{},"是":{"docs":{},"使":{"docs":{},"用":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"x":{"1":{"2":{"8":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"docs":{}},"docs":{}},"6":{"4":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"docs":{}},"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"t":{"docs":{},"e":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"'":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"n":{"docs":{},"s":{"docs":{},"o":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"p":{"docs":{},"l":{"docs":{},"u":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}},"t":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.007220216606498195},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.014760147601476014},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.047619047619047616},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"s":{"docs":{},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}},"i":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.00842358604091456},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.011086474501108648}},"\"":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01845018450184502}}},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},".":{"docs":{},"d":{"docs":{},"o":{"docs":{},"(":{"docs":{},"f":{"docs":{},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"u":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"e":{"docs":{},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}}}}}}}}}}}}},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.01358695652173913},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},"c":{"docs":{},"r":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.07100591715976332}}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"(":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"n":{"docs":{},"o":{"docs":{},"s":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.014209591474245116}},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.007104795737122558}}},"i":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.008880994671403197}}}}}},"l":{"docs":{},"o":{"docs":{},"r":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"(":{"0":{"docs":{},"x":{"0":{"0":{"0":{"0":{"docs":{},"f":{"docs":{},"f":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}},"docs":{}},"docs":{},"f":{"docs":{},"f":{"0":{"0":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}},"docs":{}},"docs":{}}}},"docs":{}},"docs":{},"f":{"docs":{},"f":{"0":{"0":{"0":{"0":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}},"docs":{}}}}}}}}},"p":{"docs":{},"i":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"y":{"docs":{},"(":{"docs":{},"d":{"docs":{},".":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"p":{"docs":{},"y":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},":":{"1":{"7":{"docs":{},":":{"6":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"docs":{}}},"8":{"docs":{},":":{"1":{"1":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}}},"docs":{}},"5":{"docs":{},":":{"6":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"docs":{}}},"docs":{}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"s":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.02050113895216401}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}},".":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"=":{"docs":{},"=":{"0":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"docs":{}}},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.008152173913043478}}}}}}},"r":{"docs":{},"e":{"docs":{},"(":{"docs":{},"t":{"docs":{},"m":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"l":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}}},"m":{"docs":{},"d":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"/":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"a":{"docs":{},"l":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},".":{"docs":{},"m":{"docs":{},"d":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"a":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"p":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"a":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}},"(":{"docs":{},"p":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"l":{"docs":{},"l":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.024390243902439025},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"e":{"docs":{},"d":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"r":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.007104795737122558}}}},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}},"c":{"docs":{},"c":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},"(":{"docs":{},"n":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}},"s":{"docs":{},".":{"docs":{},"w":{"docs":{},"e":{"docs":{},"i":{"docs":{},"g":{"docs":{},"h":{"docs":{},"t":{"docs":{},"s":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}},"u":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}},"s":{"docs":{},"e":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.006589785831960461},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"n":{"docs":{},"'":{"docs":{},"t":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}},"c":{"docs":{},"h":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"e":{"docs":{},"、":{"docs":{},"f":{"docs":{},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}},"u":{"docs":{},"s":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"l":{"docs":{},"o":{"docs":{},"u":{"docs":{},"d":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"s":{"docs":{},"e":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},"c":{"docs":{},"h":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"e":{"docs":{},"s":{"docs":{},"u":{"docs":{},"i":{"docs":{},"d":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}},"w":{"docs":{},"d":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"e":{"docs":{},"l":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"n":{"docs":{},"u":{"docs":{},"m":{"docs":{},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"(":{"1":{"0":{"0":{"0":{"0":{"0":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{},"n":{"docs":{},"u":{"docs":{},"m":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"e":{"docs":{},"r":{"docs":{},"、":{"docs":{},"w":{"docs":{},"i":{"docs":{},"k":{"docs":{},"i":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"、":{"docs":{},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"、":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{},"它":{"docs":{},"不":{"docs":{},"应":{"docs":{},"是":{"docs":{},"动":{"docs":{},"词":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.00916030534351145}},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{},"e":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}}}}},"f":{"docs":{},"g":{"docs":{},".":{"docs":{},"d":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},";":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},"h":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"a":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.037037037037037035},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.015985790408525755}},",":{"docs":{},"在":{"docs":{},"没":{"docs":{},"有":{"docs":{},"被":{"docs":{},"接":{"docs":{},"收":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"至":{"docs":{},"多":{"docs":{},"发":{"docs":{},"送":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}},"每":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"在":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}},"g":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"n":{"docs":{},"e":{"docs":{},"y":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}},"p":{"docs":{},"u":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.027586206896551724},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"/":{"docs":{},"c":{"docs":{},"+":{"docs":{},"+":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"b":{"docs":{},"r":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}}}}}}}}}}}}}}}}},"l":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.010657193605683837}},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}}}}}}}}}}},",":{"docs":{},"因":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"w":{"docs":{},"a":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}}}}}},"e":{"docs":{},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"g":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}},"a":{"docs":{},"c":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}},"x":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"e":{"docs":{},"_":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},"。":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}}},"c":{"docs":{},"t":{"docs":{},"l":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}}},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}},"e":{"docs":{},".":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}}}}},"c":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}},"u":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"e":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"r":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.018518518518518517},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.042801556420233464},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.06260296540362438},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.027210884353741496},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.03067484662576687},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.06153846153846154},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.04377104377104377},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693}},".":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{},")":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.03508771929824561},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}},":":{"docs":{},"%":{"docs":{},"v":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.019455252918287938},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.02138157894736842},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.004942339373970346},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.00510204081632653},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.023076923076923078},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.02356902356902357},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},":":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.009727626459143969},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}},"\"":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"\"":{"docs":{},"`":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}}}}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.006578947368421052},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.013468013468013467}}}},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.006802721088435374},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}},"s":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}},"(":{"docs":{},"\"":{"docs":{},"a":{"docs":{},"n":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"l":{"docs":{},"d":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}}}},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"k":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"m":{"docs":{},"i":{"docs":{},"s":{"docs":{},"s":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"m":{"docs":{},"o":{"docs":{},"d":{"docs":{},"u":{"docs":{},"l":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"但":{"docs":{},"对":{"docs":{},"于":{"docs":{},"后":{"docs":{},"者":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"必":{"docs":{},"须":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}},"a":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"s":{"docs":{},"(":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},",":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}},"i":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"s":{"docs":{},"(":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},",":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}},",":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}},"m":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"g":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}},".":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.007782101167315175},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.03067484662576687},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}},"b":{"docs":{},"r":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"k":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"l":{"docs":{},"d":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}}}}}}}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{},".":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613}}}}},"s":{"docs":{},"e":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"e":{"docs":{},"m":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.02527075812274368}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.012531328320802004}}}},"n":{"docs":{},"v":{"docs":{},"v":{"docs":{},"a":{"docs":{},"r":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"/":{"docs":{},"j":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}},"。":{"docs":{},"以":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203}}}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}}}}}}}}},"u":{"docs":{},"m":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"t":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.03550295857988166}}}}}},"r":{"docs":{},"i":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"t":{"docs":{},"c":{"docs":{},".":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}},"l":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"(":{"docs":{},"c":{"docs":{},"t":{"docs":{},"x":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"v":{"docs":{},"a":{"docs":{},"c":{"docs":{},"u":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}},"e":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"t":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"s":{"docs":{},"c":{"docs":{},"a":{"docs":{},"p":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893}}}}}}},"f":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.022058823529411766},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.026845637583892617},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.022172949002217297}},"r":{"docs":{},"e":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"b":{"docs":{},"s":{"docs":{},"d":{"docs":{},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.037037037037037035},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.017509727626459144},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.014760147601476014},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.02138157894736842},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.014827018121911038},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.03741496598639456},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.012269938650306749},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.010869565217391304},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.029411764705882353},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.03305785123966942},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.016835016835016835},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.013513513513513514},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0392156862745098},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0390625},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.03550295857988166},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.022556390977443608},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.021660649819494584},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.04678362573099415},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.02050113895216401},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.01282051282051282},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.01984732824427481},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.01366742596810934},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.011086474501108648},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.014209591474245116}},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.008869179600886918}},"(":{"docs":{},"e":{"docs":{},")":{"docs":{},"{":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"s":{"docs":{},".":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.007782101167315175},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.03125},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693}},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}},"t":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}},"l":{"docs":{},"l":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}}}}}}},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},".":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}},".":{"docs":{},"c":{"docs":{},"h":{"docs":{},"m":{"docs":{},"o":{"docs":{},"d":{"docs":{},"(":{"0":{"6":{"6":{"4":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},";":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}},")":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}},"}":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308}}}},"/":{"docs":{},"s":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}},"s":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"(":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"s":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.011086474501108648},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976}}}}}}},"'":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"e":{"docs":{},"l":{"docs":{},"d":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"s":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.023076923076923078}}},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.023076923076923078}}}}}}}}}}}}}},"n":{"docs":{},"i":{"docs":{},"s":{"docs":{},"h":{"docs":{},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}},"m":{"docs":{},"t":{"2":{"docs":{},".":{"docs":{},"少":{"docs":{},"量":{"docs":{},"的":{"docs":{},"重":{"docs":{},"复":{"docs":{},"不":{"docs":{},"比":{"docs":{},"反":{"docs":{},"射":{"docs":{},"差":{"3":{"docs":{},".":{"docs":{},"慎":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}},"docs":{}}}}}}}}}}}}},"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}},"(":{"docs":{},"\"":{"docs":{},"%":{"docs":{},"v":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}},"这":{"docs":{},"里":{"docs":{},"要":{"docs":{},"空":{"docs":{},"格":{"docs":{},"%":{"docs":{},"v":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}}}}},"f":{"docs":{},"\\":{"docs":{},"n":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}},"s":{"docs":{},".":{"docs":{},"\\":{"docs":{},"n":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}},"g":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}},")":{"docs":{},"的":{"docs":{},"调":{"docs":{},"用":{"docs":{},"是":{"docs":{},"非":{"docs":{},"常":{"docs":{},"频":{"docs":{},"繁":{"docs":{},"的":{"docs":{},",":{"docs":{},"利":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}},"l":{"docs":{},"n":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{},"a":{"docs":{},"f":{"docs":{},"t":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"b":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"u":{"docs":{},"x":{"docs":{},".":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"c":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"s":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}},"&":{"docs":{},"v":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}},"c":{"docs":{},"f":{"docs":{},"g":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}}},"u":{"docs":{},"n":{"docs":{},"s":{"docs":{},"a":{"docs":{},"f":{"docs":{},"e":{"docs":{},".":{"docs":{},"s":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"o":{"docs":{},"f":{"docs":{},"(":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},")":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"1":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"2":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"3":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"4":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"docs":{}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"t":{"docs":{},"o":{"docs":{},"h":{"docs":{},"l":{"docs":{},"(":{"docs":{},"[":{"docs":{},"]":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"{":{"0":{"docs":{},"x":{"7":{"docs":{},"f":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"docs":{}}},"docs":{}}}}}}}}}}}}},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}}}}}}},"s":{"docs":{},".":{"docs":{},"h":{"docs":{},"a":{"docs":{},"s":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"\"":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},"\"":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}},".":{"docs":{},".":{"docs":{},".":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"r":{"docs":{},"s":{"docs":{},"p":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.022988505747126436}}}},"e":{"docs":{},"s":{"docs":{},"o":{"docs":{},"l":{"docs":{},"v":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"f":{"docs":{},"a":{"docs":{},"k":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"i":{"docs":{},"l":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}},"/":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{},"/":{"docs":{},"v":{"3":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"s":{"docs":{},"/":{"docs":{},"%":{"docs":{},"s":{"docs":{},"/":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"_":{"docs":{},"r":{"docs":{},"e":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"/":{"docs":{},"%":{"docs":{},"s":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"s":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}},"%":{"docs":{},"v":{"docs":{},"\"":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"f":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.016835016835016835}},"(":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}},"\"":{"docs":{},"m":{"docs":{},"o":{"docs":{},"d":{"docs":{},"u":{"docs":{},"l":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"s":{"docs":{},"o":{"docs":{},"m":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"d":{"docs":{},"b":{"docs":{},".":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}},"f":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"l":{"docs":{},"n":{"docs":{},"(":{"docs":{},"o":{"docs":{},"s":{"docs":{},".":{"docs":{},"s":{"docs":{},"t":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}},"{":{"0":{"docs":{},"x":{"1":{"0":{"docs":{},"c":{"0":{"0":{"docs":{},"e":{"0":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}}}}}}}}}}}},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"前":{"docs":{},"者":{"docs":{},"性":{"docs":{},"能":{"docs":{},"更":{"docs":{},"佳":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}},"o":{"docs":{},"o":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.006589785831960461},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.037037037037037035},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.013468013468013467},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0392156862745098}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.027777777777777776},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.007220216606498195},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"m":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"i":{"docs":{},"d":{"docs":{},"s":{"docs":{},"(":{"docs":{},")":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"i":{"docs":{},"d":{"docs":{},"s":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}},"r":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}},"s":{"docs":{},")":{"docs":{},";":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}},"_":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{},"我":{"docs":{},"们":{"docs":{},"使":{"docs":{},"用":{"docs":{},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}},",":{"docs":{},"让":{"docs":{},"测":{"docs":{},"试":{"docs":{},"文":{"docs":{},"件":{"docs":{},"假":{"docs":{},"装":{"docs":{},"是":{"docs":{},"包":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}},"{":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976}},".":{"docs":{},".":{"docs":{},".":{"docs":{},"}":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.024691358024691357}}}}}}},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.006578947368421052},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}},".":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"l":{"docs":{},"d":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},")":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{},"t":{"docs":{},"x":{"docs":{},"t":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}}}}}}}}}}}}}}},")":{"docs":{},";":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}}}}}}},":":{"docs":{},"连":{"docs":{},"接":{"docs":{},"被":{"docs":{},"拒":{"docs":{},"绝":{"docs":{},"”":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}},"r":{"docs":{},"k":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.01282051282051282},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},",":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}}}}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.009626955475330927},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.005836575875486381},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.022058823529411766},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"e":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"h":{"docs":{},"o":{"docs":{},"o":{"docs":{},"d":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}},"l":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"i":{"docs":{},"l":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},"u":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},")":{"docs":{},"的":{"docs":{},"主":{"docs":{},"要":{"docs":{},"根":{"docs":{},"源":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"发":{"docs":{},"生":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"该":{"docs":{},"函":{"docs":{},"数":{"docs":{},"应":{"docs":{},"该":{"docs":{},"返":{"docs":{},"回":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"让":{"docs":{},"调":{"docs":{},"用":{"docs":{},"方":{"docs":{},"决":{"docs":{},"定":{"docs":{},"如":{"docs":{},"何":{"docs":{},"处":{"docs":{},"理":{"docs":{},"它":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"t":{"3":{"2":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"docs":{}},"6":{"4":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.006802721088435374},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.006802721088435374}}},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}},",":{"docs":{},"并":{"docs":{},"在":{"docs":{},"字":{"docs":{},"段":{"docs":{},"名":{"docs":{},"称":{"docs":{},"中":{"docs":{},"包":{"docs":{},"含":{"docs":{},"单":{"docs":{},"位":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}},"docs":{}},"docs":{}}},"w":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"a":{"docs":{},"g":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}},"e":{"1":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"2":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"3":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"4":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"docs":{}}}}}}}}}}}}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}}}}},"a":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.004942339373970346}}}}}}}}},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}},"n":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}}}},"s":{"docs":{},"w":{"docs":{},"a":{"docs":{},"p":{"docs":{},"(":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"e":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}}}}},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.004942339373970346},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}},"o":{"docs":{},"s":{"docs":{},".":{"docs":{},"s":{"docs":{},"t":{"docs":{},"d":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},",":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}},"w":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}},"e":{"docs":{},"w":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"g":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"i":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.008875739644970414},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"该":{"docs":{},"文":{"docs":{},"章":{"docs":{},"修":{"docs":{},"订":{"docs":{},"时":{"docs":{},"间":{"docs":{},":":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}}}},"h":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"u":{"docs":{},"b":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}},"/":{"docs":{},"h":{"docs":{},"a":{"docs":{},"s":{"docs":{},"h":{"docs":{},"i":{"docs":{},"c":{"docs":{},"o":{"docs":{},"r":{"docs":{},"p":{"docs":{},"/":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"/":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"g":{"docs":{},"r":{"docs":{},"y":{"docs":{},"s":{"docs":{},"k":{"docs":{},"i":{"docs":{},"/":{"docs":{},"g":{"docs":{},"o":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}}},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"x":{"docs":{},"i":{"docs":{},"e":{"docs":{},"/":{"docs":{},"b":{"docs":{},"e":{"docs":{},"e":{"docs":{},"g":{"docs":{},"o":{"docs":{},"/":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"/":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"。":{"docs":{},"内":{"docs":{},"部":{"docs":{},"包":{"docs":{},"是":{"docs":{},"指":{"docs":{},"不":{"docs":{},"能":{"docs":{},"被":{"docs":{},"外":{"docs":{},"部":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}},"g":{"docs":{},"o":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}},"u":{"docs":{},"b":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},".":{"docs":{},"o":{"docs":{},"a":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{},"/":{"docs":{},"m":{"docs":{},"y":{"docs":{},"r":{"docs":{},"e":{"docs":{},"p":{"docs":{},"o":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}},":":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498}}},"n":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}},"o":{"1":{"docs":{},".":{"1":{"1":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}},"7":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}},"4":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}}},"docs":{"./":{"ref":"./","tf":0.22666666666666666},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.03254437869822485},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.01935483870967742},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.008223684210526315},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.038461538461538464},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.008152173913043478},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.09090909090909091},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.015037593984962405},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.017543859649122806},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.022779043280182234},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.02733485193621868},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.008869179600886918},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.017761989342806393},"参考文献.html":{"ref":"参考文献.html","tf":0.07017543859649122}},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},",":{"docs":{},"目":{"docs":{},"前":{"docs":{},"官":{"docs":{},"方":{"docs":{},"团":{"docs":{},"队":{"docs":{},"并":{"docs":{},"未":{"docs":{},"提":{"docs":{},"供":{"docs":{},"权":{"docs":{},"威":{"docs":{},"规":{"docs":{},"范":{"docs":{},"。":{"docs":{},"不":{"docs":{},"过":{"docs":{},"不":{"docs":{},"用":{"docs":{},"担":{"docs":{},"心":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"依":{"docs":{},"然":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"规":{"docs":{},"范":{"docs":{},"可":{"docs":{},"以":{"docs":{},"参":{"docs":{},"考":{"docs":{},",":{"docs":{},"那":{"docs":{},"就":{"docs":{},"是":{"docs":{},"业":{"docs":{},"界":{"docs":{},"推":{"docs":{},"崇":{"docs":{},"的":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"分":{"docs":{},"析":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}},"梦":{"docs":{},"工":{"docs":{},"厂":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"d":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}},"p":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},",":{"docs":{},"想":{"docs":{},"更":{"docs":{},"好":{"docs":{},"地":{"docs":{},"管":{"docs":{},"理":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}},"z":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},":":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}}},",":{"docs":{},"以":{"docs":{},"及":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"书":{"docs":{},"籍":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}},"这":{"docs":{},"应":{"docs":{},"该":{"docs":{},"是":{"docs":{},"入":{"docs":{},"门":{"docs":{},"必":{"docs":{},"读":{"docs":{},"最":{"docs":{},"佳":{"docs":{},"读":{"docs":{},"物":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.03508771929824561},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.04807692307692308}},",":{"docs":{},"如":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}},"o":{"docs":{},"d":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.023148148148148147},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.034482758620689655},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.025806451612903226},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.013618677042801557},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.011513157894736841},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.018121911037891267},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.011904761904761904},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.011834319526627219},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"g":{"docs":{},"l":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"s":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},".":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{},"文":{"docs":{},"件":{"docs":{},"必":{"docs":{},"须":{"docs":{},"提":{"docs":{},"交":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"添":{"docs":{},"加":{"docs":{},"到":{"docs":{},".":{"docs":{},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"规":{"docs":{},"则":{"docs":{},"中":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}}}}}}}}}}}},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.01935483870967742},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.013618677042801557},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.04807692307692308},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.007633587786259542},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.03189066059225513},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.017761989342806393}},"e":{"docs":{},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"在":{"docs":{},"入":{"docs":{},"口":{"docs":{},"处":{"docs":{},"捕":{"docs":{},"获":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}},"无":{"docs":{},"需":{"docs":{},"锁":{"docs":{},"保":{"docs":{},"护":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"b":{"docs":{},"r":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}},"一":{"docs":{},"定":{"docs":{},"要":{"docs":{},"梳":{"docs":{},"理":{"docs":{},"清":{"docs":{},"楚":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"如":{"docs":{},"果":{"docs":{},"其":{"docs":{},"他":{"docs":{},"协":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{},"了":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"当":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"状":{"docs":{},"态":{"docs":{},"发":{"docs":{},"生":{"docs":{},"变":{"docs":{},"化":{"docs":{},"时":{"docs":{},",":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}},"o":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},":":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}},"m":{"docs":{},"、":{"docs":{},"x":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789}}}}}}}},"t":{"docs":{},"o":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},",":{"docs":{},"其":{"docs":{},"他":{"docs":{},"框":{"docs":{},"架":{"docs":{},"或":{"docs":{},"底":{"docs":{},"层":{"docs":{},"源":{"docs":{},"码":{"docs":{},"推":{"docs":{},"荐":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"不":{"docs":{},"用":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"/":{"docs":{},"g":{"docs":{},"u":{"docs":{},"i":{"docs":{},"d":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}},"语":{"docs":{},"言":{"docs":{},"最":{"docs":{},"佳":{"docs":{},"实":{"docs":{},"践":{"docs":{},"g":{"docs":{},"o":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"分":{"docs":{},"析":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"n":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"f":{"docs":{},"u":{"docs":{},"l":{"docs":{},"l":{"docs":{},"y":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}},"b":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"e":{"docs":{},"t":{"docs":{},"o":{"docs":{},"n":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}}}},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}}}}}}}}}}},"e":{"docs":{},"n":{"docs":{},"g":{"docs":{},"t":{"docs":{},"h":{"docs":{},"(":{"docs":{},"r":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}},"m":{"docs":{},"r":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"s":{"docs":{},"u":{"docs":{},"r":{"docs":{},"i":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"(":{"docs":{},"r":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}},"i":{"docs":{},"d":{"docs":{},"s":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{},"b":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}},"(":{"docs":{},"u":{"docs":{},"i":{"docs":{},"d":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}}}},"(":{"docs":{},"k":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}}},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"(":{"docs":{},"n":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},"s":{"docs":{},"(":{"docs":{},"n":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"n":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}},"c":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.010256410256410256},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.015945330296127564}},"f":{"docs":{},"l":{"docs":{},"a":{"docs":{},"g":{"docs":{},"s":{"docs":{},"=":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},"\"":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.00683371298405467}}}}}}}}}}},"j":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}},"、":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}},".":{"docs":{},"u":{"docs":{},"n":{"docs":{},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"h":{"docs":{},"a":{"docs":{},"l":{"docs":{},"(":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},",":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}},"+":{"docs":{},"+":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}},"e":{"docs":{},"f":{"docs":{},"f":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{},"/":{"docs":{},"t":{"docs":{},"u":{"docs":{},"n":{"docs":{},"n":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}},"l":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"u":{"docs":{},"a":{"docs":{},"g":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"y":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},",":{"docs":{},"给":{"docs":{},"出":{"docs":{},"布":{"docs":{},"局":{"docs":{},"建":{"docs":{},"议":{"docs":{},"。":{"docs":{},"一":{"docs":{},"个":{"docs":{},"清":{"docs":{},"晰":{"docs":{},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},"结":{"docs":{},"构":{"docs":{},",":{"docs":{},"能":{"docs":{},"帮":{"docs":{},"忙":{"docs":{},"我":{"docs":{},"们":{"docs":{},"高":{"docs":{},"效":{"docs":{},"有":{"docs":{},"序":{"docs":{},"的":{"docs":{},"管":{"docs":{},"理":{"docs":{},"与":{"docs":{},"日":{"docs":{},"俱":{"docs":{},"增":{"docs":{},"的":{"docs":{},"业":{"docs":{},"务":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{},"不":{"docs":{},"会":{"docs":{},"随":{"docs":{},"着":{"docs":{},"代":{"docs":{},"码":{"docs":{},"量":{"docs":{},"的":{"docs":{},"递":{"docs":{},"增":{"docs":{},",":{"docs":{},"项":{"docs":{},"目":{"docs":{},"代":{"docs":{},"码":{"docs":{},"变":{"docs":{},"得":{"docs":{},"凌":{"docs":{},"乱":{"docs":{},"而":{"docs":{},"不":{"docs":{},"堪":{"docs":{},"入":{"docs":{},"目":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"s":{"docs":{},"t":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976}}}}}}}}},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.011834319526627219},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"n":{"docs":{},"e":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789}},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"u":{"docs":{},"x":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"v":{"docs":{},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"o":{"docs":{},"g":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}},"o":{"docs":{},",":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.01904761904761905}}}}}}}},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"f":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"n":{"docs":{},"u":{"docs":{},"m":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}},":":{"docs":{},"%":{"docs":{},"d":{"docs":{},",":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}}}}}},".":{"docs":{},"f":{"docs":{},"a":{"docs":{},"t":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},"a":{"docs":{},"l":{"docs":{},"f":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}},"(":{"docs":{},"\"":{"docs":{},"m":{"docs":{},"i":{"docs":{},"s":{"docs":{},"s":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.004942339373970346}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"l":{"docs":{},"n":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"e":{"docs":{},"x":{"docs":{},"e":{"docs":{},"c":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}}},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},",":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"b":{"docs":{},"u":{"docs":{},"g":{"docs":{},".":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}},"{":{"docs":{},"}":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}},"_":{"2":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"docs":{}},"t":{"docs":{},"o":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}},"e":{"docs":{},"=":{"1":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"docs":{}}}}}},"r":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}},"e":{"docs":{},"=":{"2":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}},"docs":{}}}}}}}},"s":{"docs":{},"t":{"docs":{},"d":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}},"=":{"0":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"docs":{}}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"t":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}},"k":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}}}},")":{"docs":{},"。":{"docs":{},"在":{"docs":{},"使":{"docs":{},"用":{"docs":{},"锁":{"docs":{},"时":{"docs":{},",":{"docs":{},"对":{"docs":{},"获":{"docs":{},"取":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"目":{"docs":{},"的":{"docs":{},"操":{"docs":{},"作":{"docs":{},"做":{"docs":{},"了":{"docs":{},"区":{"docs":{},"分":{"docs":{},",":{"docs":{},"一":{"docs":{},"种":{"docs":{},"是":{"docs":{},"读":{"docs":{},"操":{"docs":{},"作":{"docs":{},",":{"docs":{},"一":{"docs":{},"种":{"docs":{},"是":{"docs":{},"写":{"docs":{},"操":{"docs":{},"作":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},"同":{"docs":{},"一":{"docs":{},"时":{"docs":{},"刻":{"docs":{},"允":{"docs":{},"许":{"docs":{},"多":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"f":{"docs":{},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}},"n":{"docs":{},"g":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}},"o":{"docs":{},"p":{"docs":{},")":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}},":":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"e":{"docs":{},"n":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"(":{"docs":{},"s":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}},"t":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},")":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"s":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}}},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{},")":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"s":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}}}}}}}},"i":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"s":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}},"g":{"docs":{},"t":{"docs":{},"h":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}},"s":{"docs":{},"s":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"a":{"docs":{},"k":{"docs":{},",":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"(":{"docs":{},"e":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.011834319526627219}}}}}}}},"r":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"(":{"docs":{},"e":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.011834319526627219}}}}}}}}}}}}}}}},"h":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},",":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"s":{"docs":{},"w":{"docs":{},"a":{"docs":{},"p":{"docs":{},"(":{"docs":{},"h":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},".":{"docs":{},"(":{"docs":{},"*":{"docs":{},"n":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"u":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}},"\"":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.00683371298405467}},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"发":{"docs":{},"生":{"docs":{},"内":{"docs":{},"联":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"将":{"docs":{},"不":{"docs":{},"会":{"docs":{},"出":{"docs":{},"现":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"就":{"docs":{},"不":{"docs":{},"存":{"docs":{},"在":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"与":{"docs":{},"回":{"docs":{},"收":{"docs":{},"的":{"docs":{},"操":{"docs":{},"作":{"docs":{},"了":{"docs":{},",":{"docs":{},"二":{"docs":{},"者":{"docs":{},"将":{"docs":{},"看":{"docs":{},"不":{"docs":{},"出":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"}":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"(":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"m":{"0":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"1":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"2":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635}}},"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.026845637583892617},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.00683371298405467},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"k":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}},"d":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.009727626459143969},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.007782101167315175},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.009884678747940691},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.009111617312072893},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},".":{"docs":{},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},".":{"docs":{},"f":{"docs":{},"u":{"docs":{},"n":{"docs":{},"c":{"1":{"docs":{},"(":{"0":{"docs":{},"x":{"0":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}}},"docs":{}}},"2":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"docs":{}}}}}}}}}},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.015037593984962405}}}}}}}},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.018808777429467086}}}}}},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.046875},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.009404388714733543}}}}},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693}}}}}},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}}}}}},"c":{"docs":{},"o":{"docs":{},"p":{"docs":{},"i":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.02733485193621868}}}}}},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0066518847006651885}}}}}}}},"k":{"docs":{},"e":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"的":{"docs":{},"话":{"docs":{},")":{"docs":{},"变":{"docs":{},"得":{"docs":{},"小":{"docs":{},"而":{"docs":{},"简":{"docs":{},"单":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.026845637583892617}}},"[":{"docs":{},"]":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.007220216606498195},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.018223234624145785}}}}},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028}}}}}}},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"6":{"4":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"docs":{}},"docs":{}}}}},"*":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},",":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"[":{"docs":{},"t":{"1":{"docs":{},"]":{"docs":{},"t":{"2":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}},"docs":{}}}},"docs":{}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"]":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},")":{"docs":{},",":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}}}}}}}}}},"o":{"docs":{},"s":{"docs":{},".":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"{":{"docs":{},"}":{"docs":{},"]":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}},"]":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}},",":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}}}}}}}}},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"6":{"4":{"docs":{},"]":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.05555555555555555},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},"r":{"docs":{},"k":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"d":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"p":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":2.516304347826087},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.053691275167785234},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.023391812865497075},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335}},"[":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"]":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.010869565217391304}},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}},"t":{"1":{"docs":{},"]":{"docs":{},"t":{"2":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}},"{":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},"}":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},"docs":{}}}},"docs":{}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"]":{"docs":{},"*":{"docs":{},"s":{"docs":{},"{":{"1":{"docs":{},":":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}},"docs":{}}}},"s":{"docs":{},"{":{"1":{"docs":{},":":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}},"docs":{}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"时":{"docs":{},"指":{"docs":{},"定":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},",":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},",":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}},"此":{"docs":{},"时":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"将":{"docs":{},"每":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"拉":{"docs":{},"取":{"docs":{},"的":{"docs":{},"结":{"docs":{},"果":{"docs":{},"写":{"docs":{},"入":{"docs":{},"到":{"docs":{},"一":{"docs":{},"个":{"docs":{},"临":{"docs":{},"时":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"便":{"docs":{},"将":{"docs":{},"并":{"docs":{},"发":{"docs":{},"地":{"docs":{},"协":{"docs":{},"程":{"docs":{},"与":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"变":{"docs":{},"量":{"docs":{},"解":{"docs":{},"绑":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"再":{"docs":{},"将":{"docs":{},"其":{"docs":{},"汇":{"docs":{},"聚":{"docs":{},"到":{"docs":{},"一":{"docs":{},"起":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"便":{"docs":{},"可":{"docs":{},"以":{"docs":{},"不":{"docs":{},"用":{"docs":{},"使":{"docs":{},"用":{"docs":{},"锁":{"docs":{},"。":{"docs":{},"即":{"docs":{},"独":{"docs":{},"立":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"合":{"docs":{},"并":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"、":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"、":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}},"s":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}},"g":{"docs":{},"i":{"docs":{},"c":{"docs":{},"”":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"t":{"docs":{},"h":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}},"e":{"docs":{},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}},".":{"docs":{},"m":{"docs":{},"a":{"docs":{},"x":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"3":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}}}}}}}}}},"y":{"docs":{},"b":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"d":{"docs":{},"a":{"docs":{},"y":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}},"x":{"docs":{},"i":{"docs":{},"m":{"docs":{},"u":{"docs":{},"m":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}},"n":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}}},"o":{"docs":{},"d":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}},"u":{"docs":{},"l":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.01935483870967742}},"e":{"docs":{},"s":{"docs":{},"。":{"docs":{},"从":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"并":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{},"(":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"t":{"docs":{},"h":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"r":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"s":{"docs":{},"g":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.034482758620689655},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}},")":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}},"[":{"docs":{},"\"":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{},"\"":{"docs":{},"]":{"docs":{},".":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}}}}}}}}},"k":{"1":{"docs":{},"]":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"2":{"docs":{},"]":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"3":{"docs":{},"]":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"docs":{}},"v":{"docs":{},"]":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}},";":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"f":{"docs":{},".":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},"]":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308}}}}}}}}}}},"i":{"docs":{},"]":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335}}}}},"u":{"0":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"1":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335}},"l":{"docs":{},"t":{"docs":{},"i":{"docs":{},"p":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"i":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.01904761904761905}}},"y":{"docs":{},"=":{"2":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}},"3":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}},"docs":{}}}}}}}},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"r":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":3.37465564738292},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"、":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"/":{"docs":{},"r":{"docs":{},"w":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},",":{"docs":{},"或":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"y":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976}},"{":{"docs":{},"}":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}},"d":{"5":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789}}},"docs":{}},"e":{"docs":{},",":{"docs":{},"t":{"docs":{},"h":{"docs":{},"i":{"docs":{},"s":{"docs":{},",":{"docs":{},"s":{"docs":{},"e":{"docs":{},"l":{"docs":{},"f":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"c":{"docs":{},"s":{"docs":{},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"c":{"docs":{},"r":{"docs":{},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"c":{"docs":{},"n":{"docs":{},"t":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"m":{"docs":{},"i":{"docs":{},"s":{"docs":{},"s":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"o":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"a":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"r":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"s":{"docs":{},"u":{"docs":{},"r":{"docs":{},"i":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}},".":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"[":{"docs":{},"k":{"docs":{},"]":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}}}},"查":{"docs":{},"看":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"对":{"docs":{},"上":{"docs":{},"面":{"docs":{},"两":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"优":{"docs":{},"化":{"docs":{},"决":{"docs":{},"策":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}},"b":{"0":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}}},"p":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693}},"o":{"docs":{},"p":{"docs":{},"u":{"docs":{},"p":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},".":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"e":{"docs":{},"r":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"e":{"docs":{},"r":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.010869565217391304},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"s":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}},"r":{"docs":{},"t":{"docs":{},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.03067484662576687}}},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.03067484662576687}}}}},"l":{"docs":{},"l":{"docs":{},"(":{"1":{"0":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"*":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}},"docs":{}},"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009}}}}}}}}}},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}},".":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"r":{"docs":{},"o":{"docs":{},"g":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{"./":{"ref":"./","tf":0.02}},"m":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}}}}}},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"e":{"docs":{},"r":{"docs":{},"b":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"(":{"docs":{},"v":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"t":{"docs":{},"i":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}},",":{"docs":{},"它":{"docs":{},"将":{"docs":{},"会":{"docs":{},"变":{"docs":{},"得":{"docs":{},"更":{"docs":{},"好":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}}}}}}}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701}}}}}}}}}},"l":{"docs":{},"n":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"e":{"docs":{},"r":{"docs":{},"'":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"f":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}},"e":{"docs":{},"s":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"v":{"docs":{},"i":{"docs":{},"o":{"docs":{},"u":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"a":{"docs":{},"g":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01845018450184502},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.026936026936026935},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},"s":{"docs":{},"/":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"]":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"g":{"docs":{},"e":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},"n":{"docs":{},"i":{"docs":{},"c":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.019455252918287938},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}},"(":{"4":{"4":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"docs":{}},"docs":{},"\"":{"docs":{},"a":{"docs":{},"n":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"n":{"docs":{},"i":{"docs":{},"l":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"u":{"docs":{},"n":{"docs":{},"k":{"docs":{},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.013468013468013467}}}}}}}}}}},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"v":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}},":":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.017509727626459144},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"因":{"docs":{},"为":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"此":{"docs":{},",":{"docs":{},"请":{"docs":{},"始":{"docs":{},"终":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}},"每":{"docs":{},"个":{"docs":{},"自":{"docs":{},"行":{"docs":{},"启":{"docs":{},"动":{"docs":{},"的":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"这":{"docs":{},"样":{"docs":{},"可":{"docs":{},"以":{"docs":{},"记":{"docs":{},"录":{"docs":{},"错":{"docs":{},"误":{"docs":{},"的":{"docs":{},"同":{"docs":{},"时":{"docs":{},"结":{"docs":{},"束":{"docs":{},"程":{"docs":{},"序":{"docs":{},",":{"docs":{},"方":{"docs":{},"便":{"docs":{},"排":{"docs":{},"查":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}}}}}},"并":{"docs":{},"打":{"docs":{},"印":{"docs":{},"详":{"docs":{},"细":{"docs":{},"堆":{"docs":{},"栈":{"docs":{},"信":{"docs":{},"息":{"docs":{},"或":{"docs":{},"进":{"docs":{},"行":{"docs":{},"其":{"docs":{},"它":{"docs":{},"处":{"docs":{},"理":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}},"建":{"docs":{},"议":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"(":{"docs":{},")":{"docs":{},"{":{"docs":{},"}":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"j":{"docs":{},"f":{"2":{"0":{"0":{"0":{"docs":{},"/":{"docs":{},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}},"t":{"docs":{},"h":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.008869179600886918}},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},"j":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"(":{"docs":{},"c":{"docs":{},"w":{"docs":{},"d":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}}}}}},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},":":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}},",":{"docs":{},"即":{"docs":{},"热":{"docs":{},"点":{"docs":{},"路":{"docs":{},"径":{"docs":{},",":{"docs":{},"顾":{"docs":{},"名":{"docs":{},"思":{"docs":{},"义":{"docs":{},",":{"docs":{},"是":{"docs":{},"你":{"docs":{},"的":{"docs":{},"程":{"docs":{},"序":{"docs":{},"中":{"docs":{},"那":{"docs":{},"些":{"docs":{},"会":{"docs":{},"频":{"docs":{},"繁":{"docs":{},"执":{"docs":{},"行":{"docs":{},"到":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"”":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},")":{"docs":{},"是":{"docs":{},"程":{"docs":{},"序":{"docs":{},"非":{"docs":{},"常":{"docs":{},"频":{"docs":{},"繁":{"docs":{},"执":{"docs":{},"行":{"docs":{},"的":{"docs":{},"一":{"docs":{},"系":{"docs":{},"列":{"docs":{},"指":{"docs":{},"令":{"docs":{},",":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"p":{"docs":{},"a":{"docs":{},"n":{"docs":{},"i":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"s":{"docs":{},"(":{"docs":{},")":{"docs":{},"{":{"docs":{},"}":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}},"e":{"docs":{},"n":{"docs":{},"t":{"1":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}},"2":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}},"docs":{}}}}},"s":{"docs":{},"s":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.011389521640091117},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"k":{"docs":{},"g":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"u":{"docs":{},"b":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}},"。":{"docs":{},"为":{"docs":{},"了":{"docs":{},"保":{"docs":{},"持":{"docs":{},"向":{"docs":{},"后":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"性":{"docs":{},",":{"docs":{},"外":{"docs":{},"部":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"每":{"docs":{},"个":{"docs":{},"未":{"docs":{},"来":{"docs":{},"版":{"docs":{},"本":{"docs":{},"都":{"docs":{},"必":{"docs":{},"须":{"docs":{},"保":{"docs":{},"留":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"类":{"docs":{},"型":{"docs":{},";":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"字":{"docs":{},"段":{"docs":{},"是":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}},"s":{"docs":{},"h":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}},"(":{"docs":{},"v":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}},"l":{"docs":{},"a":{"docs":{},"n":{"9":{"docs":{},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}},"docs":{}},"c":{"docs":{},"e":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}},"a":{"docs":{},"n":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125}}}}}}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125}}}}}}}},"d":{"docs":{},"o":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{},",":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},"&":{"docs":{},"p":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}},"i":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.006802721088435374}}},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}},"p":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.01282051282051282}},"f":{"docs":{},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"(":{"docs":{},"*":{"docs":{},"p":{"docs":{},"p":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}},";":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}},"r":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.01020408163265306},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}},"e":{"docs":{},"v":{"docs":{},"i":{"docs":{},"e":{"docs":{},"w":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"a":{"docs":{},"d":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.012433392539964476}},"m":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"e":{"docs":{},".":{"docs":{},"m":{"docs":{},"d":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"_":{"docs":{},"z":{"docs":{},"h":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},",":{"docs":{},"相":{"docs":{},"得":{"docs":{},"益":{"docs":{},"彰":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}},"(":{"docs":{},"p":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"r":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"\"":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"1":{"docs":{},"\"":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"2":{"docs":{},"\"":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"3":{"docs":{},"\"":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"docs":{}}}}}}}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}},"e":{"docs":{},"r":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}},"2":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}},"3":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}},"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},",":{"docs":{},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},"。":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"调":{"docs":{},"用":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"\"":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"l":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}},"s":{"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}}},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"t":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}}}}}},"o":{"docs":{},"l":{"docs":{},"v":{"docs":{},"e":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}},"p":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}},".":{"docs":{},"b":{"docs":{},"o":{"docs":{},"d":{"docs":{},"y":{"docs":{},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}},"[":{"docs":{},"k":{"docs":{},"]":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}},"m":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"e":{"docs":{},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"t":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"u":{"docs":{},"r":{"docs":{},"n":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.023148148148148147},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.01444043321299639},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.017509727626459144},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.011513157894736841},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.02471169686985173},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.02891156462585034},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.046153846153846156},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.03305785123966942},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.02356902356902357},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0392156862745098},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0390625},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.020512820512820513},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.011086474501108648},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}},"e":{"docs":{},"d":{"docs":{},";":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}},"p":{"docs":{},"t":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}},"c":{"docs":{},"e":{"docs":{},"i":{"docs":{},"v":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.022988505747126436}}}}},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}},"v":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.005836575875486381},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},";":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.005836575875486381}}}}},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}},",":{"docs":{},"很":{"docs":{},"容":{"docs":{},"易":{"docs":{},"发":{"docs":{},"生":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}},"d":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}},"q":{"docs":{},"u":{"docs":{},"i":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"e":{"docs":{},"d":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}},".":{"docs":{},"n":{"docs":{},"o":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},"t":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.03067484662576687}}}}}}}}}}}}}}}}}},"g":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701}},",":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}},"m":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"(":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.01775147928994083}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"k":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"f":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},".":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"(":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},".":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"o":{"docs":{},"f":{"docs":{},"(":{"docs":{},"i":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{},"e":{"docs":{},"o":{"docs":{},"f":{"docs":{},"(":{"docs":{},"i":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}},"u":{"docs":{},"s":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"z":{"docs":{},"v":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"a":{"docs":{},"w":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}},"n":{"docs":{},"g":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.008237232289950576},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.013605442176870748},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.03134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}},"e":{"docs":{},"。":{"docs":{},"二":{"docs":{},"者":{"docs":{},"在":{"docs":{},"功":{"docs":{},"能":{"docs":{},"上":{"docs":{},"没":{"docs":{},"有":{"docs":{},"区":{"docs":{},"别":{"docs":{},",":{"docs":{},"但":{"docs":{},"在":{"docs":{},"性":{"docs":{},"能":{"docs":{},"上":{"docs":{},"会":{"docs":{},"有":{"docs":{},"区":{"docs":{},"别":{"docs":{},"吗":{"docs":{},"?":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"只":{"docs":{},"迭":{"docs":{},"代":{"docs":{},"下":{"docs":{},"标":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"下":{"docs":{},"标":{"docs":{},"访":{"docs":{},"问":{"docs":{},"元":{"docs":{},"素":{"docs":{},",":{"docs":{},"这":{"docs":{},"种":{"docs":{},"使":{"docs":{},"用":{"docs":{},"方":{"docs":{},"式":{"docs":{},"和":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"时":{"docs":{},"候":{"docs":{},"甚":{"docs":{},"至":{"docs":{},"会":{"docs":{},"有":{"docs":{},"上":{"docs":{},"千":{"docs":{},"倍":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{},"对":{"docs":{},"于":{"docs":{},"这":{"docs":{},"种":{"docs":{},"场":{"docs":{},"景":{"docs":{},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"x":{"docs":{},"n":{"docs":{},"a":{"docs":{},"n":{"docs":{},"o":{"docs":{},"(":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"e":{"docs":{},"!":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}},"u":{"docs":{},"n":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"(":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}},"o":{"docs":{},"s":{"docs":{},".":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"s":{"docs":{},"[":{"1":{"docs":{},":":{"docs":{},"]":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},";":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}},"docs":{}}}}}}}}},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},";":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}},"e":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},"o":{"docs":{},"s":{"docs":{},";":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"m":{"docs":{},"a":{"docs":{},"x":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"c":{"docs":{},"s":{"docs":{},"(":{"1":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}}}}}}}}}}},"c":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}}},"h":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},":":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},":":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}},"_":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"(":{"docs":{},"&":{"docs":{},"c":{"docs":{},".":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"(":{"docs":{},"&":{"docs":{},"c":{"docs":{},".":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},"(":{"docs":{},"&":{"docs":{},"c":{"docs":{},".":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"a":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},"&":{"docs":{},"c":{"docs":{},".":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"n":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"…":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549}}}}}}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}}}},"s":{"docs":{},"p":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}},"p":{"docs":{},"c":{"docs":{},"、":{"docs":{},"d":{"docs":{},"b":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.007633587786259542}}}}},"o":{"docs":{},"w":{"docs":{},"s":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.023076923076923078}}}}}}}}}}}},"f":{"docs":{},"c":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.013513513513513514}}}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}},"w":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},")":{"docs":{},",":{"docs":{},"当":{"docs":{},"修":{"docs":{},"改":{"docs":{},"条":{"docs":{},"件":{"docs":{},"或":{"docs":{},"者":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}},"s":{"1":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}},"p":{"docs":{},"t":{"docs":{},"r":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176}}}}},"{":{"docs":{},"}":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886}}}},"2":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176}},"p":{"docs":{},"t":{"docs":{},"r":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.029411764705882353}}}}},"{":{"docs":{},"}":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886}}}},"3":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886}}},"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.006016847172081829},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.015267175572519083}},"p":{"docs":{},"e":{"docs":{},"c":{"docs":{},"i":{"docs":{},"f":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"i":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}},"a":{"docs":{},"(":{"docs":{},"s":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"l":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"t":{"docs":{},"r":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}},".":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"s":{"docs":{},"[":{"1":{"docs":{},"]":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"\"":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}}}}}}}},"docs":{}}}}},"l":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}},"t":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.015945330296127564}},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"a":{"docs":{},"r":{"docs":{},"d":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"s":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}}}}}},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}},"u":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}},"s":{"docs":{},")":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"=":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}},"i":{"docs":{},"n":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"g":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"i":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}},"s":{"docs":{},".":{"docs":{},"s":{"docs":{},"n":{"docs":{},"a":{"docs":{},"p":{"docs":{},"s":{"docs":{},"h":{"docs":{},"o":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}}}}}}},"i":{"docs":{},"c":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}},"e":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.014209591474245116}},"(":{"docs":{},"[":{"docs":{},"]":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},")":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549}}}},",":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"y":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"c":{"docs":{},"k":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}},"r":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.04597701149425287},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.008223684210526315},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.037037037037037035},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.01358695652173913},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.029585798816568046},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.03103448275862069},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.010256410256410256},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0066518847006651885},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"{":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}},"}":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.017241379310344827}},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.012033694344163659},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01845018450184502},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.03125},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.018404907975460124},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},")":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.017543859649122806},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},",":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}}}},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"也":{"docs":{},"提":{"docs":{},"供":{"docs":{},"了":{"docs":{},"预":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"v":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203}}}}}}},"o":{"docs":{},"r":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}}}}}}}}}},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}}}}},":":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}},"p":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}},"u":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"d":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"(":{"docs":{},"*":{"docs":{},"s":{"docs":{},"t":{"docs":{},"u":{"docs":{},"d":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},"(":{"docs":{},"s":{"docs":{},"t":{"docs":{},"u":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"f":{"docs":{},"n":{"docs":{},"o":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"h":{"docs":{},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.006578947368421052}}}}}},"a":{"docs":{},"n":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},"r":{"docs":{},"c":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.008875739644970414}},"/":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"/":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"2":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},"里":{"docs":{},"面":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"找":{"docs":{},"到":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},".":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"t":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"s":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},")":{"docs":{},"配":{"docs":{},"置":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}},"b":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.01904761904761905}},"=":{"1":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"2":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"docs":{}}}}}}}},"c":{"docs":{},"h":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"m":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.004942339373970346}}},"r":{"docs":{},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"s":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"w":{"docs":{},"a":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"i":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.006589785831960461}}}}}}},"y":{"docs":{},"s":{"docs":{},"v":{"docs":{},")":{"docs":{},"和":{"docs":{},"进":{"docs":{},"程":{"docs":{},"管":{"docs":{},"理":{"docs":{},"(":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},",":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"n":{"docs":{},"c":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},".":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"3":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}}},"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.03305785123966942},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}},"r":{"docs":{},"w":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"3":{"docs":{},".":{"3":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}}},"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}}}}}}}}}}},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":3.3635287152161037}},"?":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.023076923076923078}},"{":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693}}},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},",":{"docs":{},"例":{"docs":{},"如":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}},"w":{"docs":{},"a":{"docs":{},"i":{"docs":{},"t":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.009111617312072893}},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":3.35550628233555}},"e":{"docs":{},"?":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},"(":{"docs":{},"&":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}},"/":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}}}}}},"e":{"docs":{},"t":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.017543859649122806},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{},"(":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}}}}},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.017543859649122806}}},")":{"docs":{},"、":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"、":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"、":{"docs":{},"c":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"r":{"docs":{},"、":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"(":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353}}}}}}}}}}},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"d":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}}},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":2.5190217391304346},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.020134228187919462},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.01444043321299639},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.007220216606498195}}},"申":{"docs":{},"明":{"docs":{},"变":{"docs":{},"量":{"docs":{},"避":{"docs":{},"免":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}},",":{"docs":{},"这":{"docs":{},"意":{"docs":{},"味":{"docs":{},"着":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"因":{"docs":{},"为":{"docs":{},"重":{"docs":{},"复":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"会":{"docs":{},"带":{"docs":{},"来":{"docs":{},"性":{"docs":{},"能":{"docs":{},"损":{"docs":{},"耗":{"docs":{},"。":{"docs":{},"相":{"docs":{},"反":{"docs":{},",":{"docs":{},"请":{"docs":{},"执":{"docs":{},"行":{"docs":{},"一":{"docs":{},"次":{"docs":{},"转":{"docs":{},"换":{"docs":{},"并":{"docs":{},"捕":{"docs":{},"获":{"docs":{},"结":{"docs":{},"果":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"但":{"docs":{},"是":{"docs":{},"共":{"docs":{},"用":{"docs":{},"原":{"docs":{},"始":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}},"将":{"docs":{},"要":{"docs":{},"删":{"docs":{},"除":{"docs":{},"的":{"docs":{},"元":{"docs":{},"素":{"docs":{},"过":{"docs":{},"滤":{"docs":{},"掉":{"docs":{},"。":{"docs":{},"缺":{"docs":{},"点":{"docs":{},"是":{"docs":{},"需":{"docs":{},"要":{"docs":{},"开":{"docs":{},"辟":{"docs":{},"另":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"x":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789}}}}}}},"e":{"docs":{},"s":{"docs":{},"c":{"docs":{},"a":{"docs":{},"p":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"b":{"docs":{},"o":{"docs":{},"n":{"docs":{},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"i":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"函":{"docs":{},"数":{"docs":{},"中":{"docs":{},"分":{"docs":{},"配":{"docs":{},"的":{"docs":{},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{},"切":{"docs":{},"片":{"docs":{},"因":{"docs":{},"为":{"docs":{},"要":{"docs":{},"返":{"docs":{},"回":{"docs":{},"到":{"docs":{},"函":{"docs":{},"数":{"docs":{},"外":{"docs":{},"部":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"发":{"docs":{},"生":{"docs":{},"了":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"在":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"申":{"docs":{},"请":{"docs":{},"内":{"docs":{},"存":{"docs":{},"空":{"docs":{},"间":{"docs":{},"。":{"docs":{},"从":{"docs":{},"测":{"docs":{},"试":{"docs":{},"也":{"docs":{},"过":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"出":{"docs":{},",":{"docs":{},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"y":{"docs":{},"f":{"docs":{},"i":{"docs":{},"b":{"docs":{},"o":{"docs":{},"n":{"docs":{},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"i":{"docs":{},"(":{"docs":{},")":{"docs":{},"函":{"docs":{},"数":{"docs":{},"没":{"docs":{},"有":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},",":{"docs":{},"完":{"docs":{},"全":{"docs":{},"在":{"docs":{},"栈":{"docs":{},"上":{"docs":{},"完":{"docs":{},"成":{"docs":{},"数":{"docs":{},"组":{"docs":{},"的":{"docs":{},"创":{"docs":{},"建":{"docs":{},"。":{"docs":{},"这":{"docs":{},"里":{"docs":{},"说":{"docs":{},"明":{"docs":{},"了":{"docs":{},"对":{"docs":{},"于":{"docs":{},"一":{"docs":{},"些":{"docs":{},"短":{"docs":{},"小":{"docs":{},"的":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"栈":{"docs":{},"上":{"docs":{},"复":{"docs":{},"制":{"docs":{},"的":{"docs":{},"成":{"docs":{},"本":{"docs":{},"远":{"docs":{},"小":{"docs":{},"于":{"docs":{},"在":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"分":{"docs":{},"配":{"docs":{},"和":{"docs":{},"回":{"docs":{},"收":{"docs":{},"的":{"docs":{},"成":{"docs":{},"本":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"w":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}},"s":{"docs":{},"[":{"1":{"docs":{},"]":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"\"":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}}}}}}}},"docs":{}}}}}},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.009884678747940691},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.023076923076923078}}}},"f":{"docs":{},"i":{"docs":{},"x":{"docs":{},"e":{"docs":{},"d":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}}}}}}}}},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}}}}},".":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.006802721088435374}},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"[":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"]":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}},"d":{"docs":{},"d":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"\"":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},"\"":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}},"h":{"docs":{},"a":{"docs":{},"s":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"(":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}},"m":{"docs":{},"u":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}}}}}},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176}}}}}},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}},"s":{"docs":{},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"(":{"docs":{},"g":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},")":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}}}}}}}},"q":{"docs":{},"l":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":1.7407407407407405},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},",":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"(":{"docs":{},"v":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},")":{"docs":{},"为":{"docs":{},"单":{"docs":{},"位":{"docs":{},"访":{"docs":{},"问":{"docs":{},"。":{"docs":{},"如":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"g":{"docs":{},"n":{"docs":{},"(":{"docs":{},"g":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},")":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}},"m":{"docs":{},"s":{"docs":{},"g":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}}},".":{"docs":{},"g":{"docs":{},"o":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}},"_":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}}}}}}},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"(":{"docs":{},"m":{"docs":{},"s":{"docs":{},"g":{"docs":{},",":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}}}}}}}}}}}},"a":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"n":{"docs":{},"g":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}}},"m":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"a":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}},"t":{"docs":{},"e":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"n":{"docs":{},"a":{"docs":{},"p":{"docs":{},"s":{"docs":{},"h":{"docs":{},"o":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.01358695652173913}},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}}}},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.04132231404958678}}}}},",":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}},"[":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{},"]":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537}}}}}}},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}},"v":{"docs":{},"e":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"t":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}},"o":{"docs":{},"l":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}},"d":{"docs":{},"o":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"/":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"\"":{"docs":{},"之":{"docs":{},"类":{"docs":{},"的":{"docs":{},"短":{"docs":{},"语":{"docs":{},"来":{"docs":{},"保":{"docs":{},"持":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"简":{"docs":{},"洁":{"docs":{},",":{"docs":{},"当":{"docs":{},"错":{"docs":{},"误":{"docs":{},"通":{"docs":{},"过":{"docs":{},"堆":{"docs":{},"栈":{"docs":{},"向":{"docs":{},"上":{"docs":{},"传":{"docs":{},"递":{"docs":{},"时":{"docs":{},",":{"docs":{},"它":{"docs":{},"会":{"docs":{},"一":{"docs":{},"层":{"docs":{},"一":{"docs":{},"层":{"docs":{},"被":{"docs":{},"堆":{"docs":{},"积":{"docs":{},"起":{"docs":{},"来":{"docs":{},":":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.018404907975460124},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},"x":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"e":{"docs":{},"。":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}},"s":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},"t":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.012269938650306749}}}}}}}}}}}}}}}},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"(":{"docs":{},"t":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"t":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}}}}}},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"t":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701}}}}}}},"x":{"docs":{},"t":{"docs":{},"u":{"docs":{},"a":{"docs":{},"l":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}},"h":{"docs":{},"i":{"docs":{},"r":{"docs":{},"d":{"docs":{},"_":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}},"a":{"docs":{},"g":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}},"b":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}},"r":{"docs":{},"u":{"docs":{},"e":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"}":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},")":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},",":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"i":{"docs":{},"p":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.008152173913043478}},"s":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"[":{"0":{"docs":{},"]":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}},",":{"docs":{},"但":{"docs":{},"不":{"docs":{},"会":{"docs":{},"影":{"docs":{},"响":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}},"docs":{}}}}}},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.010830324909747292},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01845018450184502},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.013157894736842105},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.037037037037037035},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.016304347826086956},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.0380952380952381},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.029411764705882353},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.03550295857988166},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.023391812865497075},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.013793103448275862},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"s":{"docs":{},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},".":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}},":":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.010344827586206896}}}},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"{":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":3.333333333333333},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{},"(":{"1":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"r":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}},"m":{"docs":{},"i":{"docs":{},"c":{"docs":{},"r":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},"(":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.03153153153153153},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0234375}},"e":{"docs":{},",":{"docs":{},"在":{"docs":{},"比":{"docs":{},"较":{"docs":{},"、":{"docs":{},"添":{"docs":{},"加":{"docs":{},"或":{"docs":{},"减":{"docs":{},"去":{"docs":{},"时":{"docs":{},"间":{"docs":{},"时":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}},"如":{"docs":{},"果":{"docs":{},"底":{"docs":{},"层":{"docs":{},"驱":{"docs":{},"动":{"docs":{},"程":{"docs":{},"序":{"docs":{},"支":{"docs":{},"持":{"docs":{},"则":{"docs":{},"返":{"docs":{},"回":{"docs":{},";":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"u":{"docs":{},"r":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.02702702702702703}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"该":{"docs":{},"单":{"docs":{},"位":{"docs":{},"包":{"docs":{},"含":{"docs":{},"在":{"docs":{},"字":{"docs":{},"段":{"docs":{},"的":{"docs":{},"名":{"docs":{},"称":{"docs":{},"中":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}},"h":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}},"m":{"docs":{},"i":{"docs":{},"l":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}},"e":{"docs":{},"d":{"docs":{},"u":{"docs":{},"r":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009}}}}}}}}}},"r":{"docs":{},"f":{"docs":{},"c":{"3":{"3":{"3":{"9":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}},"u":{"docs":{},"n":{"docs":{},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"h":{"docs":{},"a":{"docs":{},"l":{"docs":{},"j":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}},",":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.03125}},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}}}},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}}}},".":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"(":{"docs":{},"t":{"docs":{},"t":{"docs":{},".":{"docs":{},"g":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"(":{"2":{"4":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"docs":{}},"docs":{}},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"0":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"docs":{}}}}}}}}}},"t":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}},".":{"docs":{},"w":{"docs":{},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}},"m":{"docs":{},"p":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}}}},"w":{"docs":{},"o":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"w":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"i":{"docs":{},"k":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.013333333333333334}},"p":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{},"a":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"w":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}},".":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"(":{"docs":{},"e":{"docs":{},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"r":{"docs":{},"c":{"docs":{},",":{"docs":{},"e":{"docs":{},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"r":{"docs":{},"c":{"docs":{},")":{"docs":{},"}":{"docs":{},"i":{"docs":{},"m":{"docs":{},"g":{"docs":{},"{":{"docs":{},"c":{"docs":{},"u":{"docs":{},"r":{"docs":{},"s":{"docs":{},"o":{"docs":{},"r":{"docs":{},":":{"docs":{},"p":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"}":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"r":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"t":{"docs":{},"h":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}}}},"e":{"docs":{},"b":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.020710059171597635}},"s":{"docs":{},"i":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.022988505747126436}}}}}}},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}},":":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498}}}}}}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}},":":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498}}}}}}},",":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}},"i":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.03019538188277087}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.014209591474245116}},",":{"docs":{},"处":{"docs":{},"于":{"docs":{},"等":{"docs":{},"待":{"docs":{},"状":{"docs":{},"态":{"docs":{},"。":{"docs":{},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}},"k":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.007104795737122558}}}}},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"c":{"docs":{},"h":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}},"s":{"docs":{},"h":{"docs":{},"o":{"docs":{},"p":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}},"d":{"docs":{},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.01282051282051282},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"(":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}},"w":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"\"":{"docs":{},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"。":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}},"r":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.007104795737122558}}}},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"\"":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"。":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}},".":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"p":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}},"g":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.009111617312072893}},".":{"docs":{},"w":{"docs":{},"a":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}}}}},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"(":{"docs":{},"n":{"docs":{},"u":{"docs":{},"m":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"h":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}},"|":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.06804733727810651},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},"|":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"不":{"docs":{},"仅":{"docs":{},"易":{"docs":{},"用":{"docs":{},",":{"docs":{},"也":{"docs":{},"很":{"docs":{},"易":{"docs":{},"学":{"docs":{},",":{"docs":{},"这":{"docs":{},"得":{"docs":{},"益":{"docs":{},"于":{"docs":{},"与":{"docs":{},"之":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"的":{"docs":{},"丰":{"docs":{},"富":{"docs":{},"学":{"docs":{},"习":{"docs":{},"资":{"docs":{},"料":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"应":{"docs":{},"该":{"docs":{},"拥":{"docs":{},"有":{"docs":{},"的":{"docs":{},"目":{"docs":{},"录":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}},"/":{"docs":{},"s":{"docs":{},"r":{"docs":{},"c":{"3":{"docs":{},".":{"docs":{},"小":{"docs":{},"结":{"docs":{},"参":{"docs":{},"考":{"docs":{},"文":{"docs":{},"献":{"1":{"docs":{},".":{"docs":{},"前":{"docs":{},"言":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"docs":{}}}}}}}}},"docs":{}}}}}}}}}}}},"管":{"docs":{},"是":{"docs":{},"什":{"docs":{},"么":{"docs":{},"语":{"docs":{},"言":{"docs":{},",":{"docs":{},"开":{"docs":{},"发":{"docs":{},"什":{"docs":{},"么":{"docs":{},"项":{"docs":{},"目":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"稍":{"docs":{},"大":{"docs":{},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},",":{"docs":{},"必":{"docs":{},"然":{"docs":{},"要":{"docs":{},"面":{"docs":{},"临":{"docs":{},"如":{"docs":{},"何":{"docs":{},"管":{"docs":{},"理":{"docs":{},"项":{"docs":{},"目":{"docs":{},"结":{"docs":{},"构":{"docs":{},"布":{"docs":{},"局":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"一":{"docs":{},"个":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"清":{"docs":{},"晰":{"docs":{},"的":{"docs":{},"布":{"docs":{},"局":{"docs":{},"是":{"docs":{},"项":{"docs":{},"目":{"docs":{},"可":{"docs":{},"读":{"docs":{},"的":{"docs":{},"关":{"docs":{},"键":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"全":{"docs":{},"局":{"docs":{},"切":{"docs":{},"片":{"docs":{},"还":{"docs":{},"是":{"docs":{},"局":{"docs":{},"部":{"docs":{},"切":{"docs":{},"片":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}},"要":{"docs":{},"在":{"docs":{},"该":{"docs":{},"目":{"docs":{},"录":{"docs":{},"下":{"docs":{},"放":{"docs":{},"太":{"docs":{},"多":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"以":{"docs":{},"被":{"docs":{},"其":{"docs":{},"他":{"docs":{},"项":{"docs":{},"目":{"docs":{},"导":{"docs":{},"入":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"请":{"docs":{},"放":{"docs":{},"到":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"添":{"docs":{},"加":{"docs":{},"没":{"docs":{},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{},"括":{"docs":{},"号":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}}}},"使":{"docs":{},"用":{"2":{"docs":{},"/":{"4":{"docs":{},"来":{"docs":{},"表":{"docs":{},"达":{"docs":{},"英":{"docs":{},"文":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"docs":{}}},"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"表":{"docs":{},"示":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}},"相":{"docs":{},"对":{"docs":{},"路":{"docs":{},"径":{"docs":{},"导":{"docs":{},"入":{"docs":{},"内":{"docs":{},"部":{"docs":{},"包":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"使":{"docs":{},"用":{"docs":{},"完":{"docs":{},"整":{"docs":{},"的":{"docs":{},"路":{"docs":{},"径":{"docs":{},"引":{"docs":{},"入":{"docs":{},"包":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}},"大":{"docs":{},"而":{"docs":{},"全":{"docs":{},"的":{"docs":{},"无":{"docs":{},"意":{"docs":{},"义":{"docs":{},"包":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}},"双":{"docs":{},"重":{"docs":{},"否":{"docs":{},"定":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}},"包":{"docs":{},"装":{"docs":{},"系":{"docs":{},"统":{"docs":{},"调":{"docs":{},"用":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"并":{"docs":{},"给":{"docs":{},"出":{"docs":{},"一":{"docs":{},"些":{"docs":{},"没":{"docs":{},"意":{"docs":{},"义":{"docs":{},"的":{"docs":{},"附":{"docs":{},"加":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}}}},"随":{"docs":{},"便":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"用":{"docs":{},"注":{"docs":{},"释":{"docs":{},"删":{"docs":{},"除":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}},"宽":{"docs":{},"泛":{"docs":{},"、":{"docs":{},"无":{"docs":{},"意":{"docs":{},"义":{"docs":{},"的":{"docs":{},"名":{"docs":{},"字":{"docs":{},",":{"docs":{},"如":{"docs":{},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}},"轻":{"docs":{},"易":{"docs":{},"使":{"docs":{},"用":{"docs":{},"别":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"传":{"docs":{},"递":{"docs":{},"指":{"docs":{},"针":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}},"返":{"docs":{},"回":{"docs":{},"多":{"docs":{},"个":{"docs":{},"用":{"docs":{},"于":{"docs":{},"控":{"docs":{},"制":{"docs":{},"流":{"docs":{},"程":{"docs":{},"的":{"docs":{},"状":{"docs":{},"态":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}},"这":{"docs":{},"样":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}},"反":{"docs":{},"复":{"docs":{},"从":{"docs":{},"固":{"docs":{},"定":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"创":{"docs":{},"建":{"docs":{},"字":{"docs":{},"节":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}}}}}}}}}}}}},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},"空":{"docs":{},"行":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}},"可":{"docs":{},"避":{"docs":{},"免":{"docs":{},"时":{"docs":{},",":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}},"能":{"docs":{},"满":{"docs":{},"足":{"docs":{},"这":{"docs":{},"些":{"docs":{},"要":{"docs":{},"求":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"能":{"docs":{},"要":{"docs":{},"在":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}},"被":{"docs":{},"复":{"docs":{},"制":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"的":{"docs":{},"原":{"docs":{},"因":{"docs":{},",":{"docs":{},"并":{"docs":{},"不":{"docs":{},"是":{"docs":{},"因":{"docs":{},"为":{"docs":{},"其":{"docs":{},"内":{"docs":{},"部":{"docs":{},"嵌":{"docs":{},"套":{"docs":{},"了":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}},"是":{"docs":{},"错":{"docs":{},"误":{"docs":{},"处":{"docs":{},"理":{"docs":{},"的":{"docs":{},"合":{"docs":{},"适":{"docs":{},"策":{"docs":{},"略":{"docs":{},",":{"docs":{},"仅":{"docs":{},"当":{"docs":{},"发":{"docs":{},"生":{"docs":{},"不":{"docs":{},"可":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"的":{"docs":{},"异":{"docs":{},"常":{"docs":{},"(":{"docs":{},"如":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}}}},"基":{"docs":{},"于":{"docs":{},"代":{"docs":{},"码":{"docs":{},"块":{"docs":{},"的":{"docs":{},",":{"docs":{},"而":{"docs":{},"是":{"docs":{},"基":{"docs":{},"于":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"。":{"docs":{},"你":{"docs":{},"在":{"docs":{},"循":{"docs":{},"环":{"docs":{},"中":{"docs":{},"分":{"docs":{},"配":{"docs":{},"资":{"docs":{},"源":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"不":{"docs":{},"应":{"docs":{},"该":{"docs":{},"简":{"docs":{},"单":{"docs":{},"地":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"提":{"docs":{},"示":{"docs":{},":":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"将":{"docs":{},"为":{"docs":{},"提":{"docs":{},"供":{"docs":{},"给":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}},"用":{"docs":{},"复":{"docs":{},"数":{"docs":{},"。":{"docs":{},"如":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"存":{"docs":{},"在":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"不":{"docs":{},"允":{"docs":{},"许":{"docs":{},"部":{"docs":{},"分":{"docs":{},"失":{"docs":{},"败":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}},"再":{"docs":{},"受":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"保":{"docs":{},"护":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"引":{"docs":{},"发":{"docs":{},"并":{"docs":{},"发":{"docs":{},"读":{"docs":{},"写":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}}}}}}}}}},"支":{"docs":{},"持":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}},"建":{"docs":{},"议":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}},"同":{"docs":{},"。":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}},",":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}},"发":{"docs":{},"送":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},"信":{"docs":{},"道":{"2":{"docs":{},".":{"3":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},"docs":{}}},"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"发":{"docs":{},"送":{"docs":{},"任":{"docs":{},"何":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"只":{"docs":{},"用":{"docs":{},"来":{"docs":{},"通":{"docs":{},"知":{"docs":{},"子":{"docs":{},"协":{"docs":{},"程":{"docs":{},"(":{"docs":{},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},")":{"docs":{},"执":{"docs":{},"行":{"docs":{},"任":{"docs":{},"务":{"docs":{},",":{"docs":{},"或":{"docs":{},"只":{"docs":{},"用":{"docs":{},"来":{"docs":{},"控":{"docs":{},"制":{"docs":{},"协":{"docs":{},"程":{"docs":{},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},"。":{"docs":{},"这":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"作":{"docs":{},"为":{"docs":{},"占":{"docs":{},"位":{"docs":{},"符":{"docs":{},"就":{"docs":{},"非":{"docs":{},"常":{"docs":{},"合":{"docs":{},"适":{"docs":{},"了":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"分":{"docs":{},"片":{"docs":{},"写":{"docs":{},"入":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}},"之":{"docs":{},"势":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}},"外":{"docs":{},"使":{"docs":{},"用":{"docs":{},"函":{"docs":{},"数":{"docs":{},"调":{"docs":{},"用":{"docs":{},"的":{"docs":{},"结":{"docs":{},"果":{"docs":{},",":{"docs":{},"则":{"docs":{},"不":{"docs":{},"应":{"docs":{},"尝":{"docs":{},"试":{"docs":{},"缩":{"docs":{},"小":{"docs":{},"范":{"docs":{},"围":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}},"间":{"docs":{},"操":{"docs":{},"作":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"也":{"docs":{},"是":{"docs":{},"不":{"docs":{},"错":{"docs":{},"的":{"docs":{},"选":{"docs":{},"择":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}},"互":{"docs":{},"动":{"docs":{},"勘":{"docs":{},"误":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}},"斥":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"的":{"docs":{},"作":{"docs":{},"用":{"docs":{},"是":{"docs":{},"保":{"docs":{},"证":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"同":{"docs":{},"一":{"docs":{},"时":{"docs":{},"刻":{"docs":{},"只":{"docs":{},"能":{"docs":{},"被":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"想":{"docs":{},"写":{"docs":{},"出":{"docs":{},"更":{"docs":{},"加":{"docs":{},"高":{"docs":{},"效":{"docs":{},"易":{"docs":{},"读":{"docs":{},"的":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}},"让":{"docs":{},"自":{"docs":{},"己":{"docs":{},"拥":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"更":{"docs":{},"好":{"docs":{},"的":{"docs":{},"编":{"docs":{},"码":{"docs":{},"风":{"docs":{},"格":{"docs":{},",":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}},"目":{"docs":{},"录":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}},"/":{"docs":{},"c":{"docs":{},"m":{"docs":{},"d":{"docs":{},"/":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"a":{"docs":{},"l":{"docs":{},"/":{"docs":{},"p":{"docs":{},"k":{"docs":{},"g":{"docs":{},"/":{"docs":{},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"r":{"2":{"docs":{},".":{"3":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}},"必":{"docs":{},"须":{"docs":{},"用":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}},"生":{"docs":{},"成":{"docs":{},"工":{"docs":{},"具":{"docs":{},"自":{"docs":{},"动":{"docs":{},"生":{"docs":{},"成":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"排":{"docs":{},"除":{"docs":{},"此":{"docs":{},"规":{"docs":{},"则":{"docs":{},"(":{"docs":{},"如":{"docs":{},"协":{"docs":{},"议":{"docs":{},"生":{"docs":{},"成":{"docs":{},"文":{"docs":{},"件":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"优":{"docs":{},"先":{"docs":{},"处":{"docs":{},"理":{"docs":{},"条":{"docs":{},"件":{"docs":{},"不":{"docs":{},"满":{"docs":{},"足":{"docs":{},"或":{"docs":{},"错":{"docs":{},"误":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"尽":{"docs":{},"早":{"docs":{},"返":{"docs":{},"回":{"docs":{},"或":{"docs":{},"继":{"docs":{},"续":{"docs":{},"循":{"docs":{},"环":{"docs":{},"来":{"docs":{},"减":{"docs":{},"少":{"docs":{},"嵌":{"docs":{},"套":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"与":{"docs":{},"官":{"docs":{},"方":{"docs":{},"推":{"docs":{},"荐":{"docs":{},"的":{"docs":{},"格":{"docs":{},"式":{"docs":{},"保":{"docs":{},"持":{"docs":{},"一":{"docs":{},"致":{"docs":{},",":{"docs":{},"于":{"docs":{},"是":{"docs":{},"所":{"docs":{},"有":{"docs":{},"格":{"docs":{},"式":{"docs":{},"有":{"docs":{},"关":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"都":{"docs":{},"以":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}},"即":{"docs":{},"注":{"docs":{},"释":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"的":{"docs":{},"稳":{"docs":{},"健":{"docs":{},"、":{"docs":{},"可":{"docs":{},"读":{"docs":{},"和":{"docs":{},"高":{"docs":{},"效":{"docs":{},"是":{"docs":{},"我":{"docs":{},"们":{"docs":{},"每":{"docs":{},"一":{"docs":{},"个":{"docs":{},"位":{"docs":{"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456}}}}}}}}}}}}}}}}}},"风":{"docs":{},"格":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"内":{"docs":{},"容":{"docs":{},"简":{"docs":{},"介":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}},"部":{"docs":{},"包":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}},"实":{"docs":{},"现":{"docs":{},"决":{"docs":{},"定":{"docs":{},"而":{"docs":{},"和":{"docs":{},"具":{"docs":{},"体":{"docs":{},"的":{"docs":{},"语":{"docs":{},"法":{"docs":{},"没":{"docs":{},"有":{"docs":{},"关":{"docs":{},"系":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}},"是":{"docs":{},"维":{"docs":{},"护":{"docs":{},"着":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"维":{"docs":{},"护":{"docs":{},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{},"等":{"docs":{},"待":{"docs":{},"队":{"docs":{},"列":{"docs":{},",":{"docs":{},"队":{"docs":{},"列":{"docs":{},"中":{"docs":{},"存":{"docs":{},"放":{"docs":{},"的":{"docs":{},"是":{"docs":{},"所":{"docs":{},"有":{"docs":{},"在":{"docs":{},"等":{"docs":{},"待":{"docs":{},"这":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"前":{"docs":{},"变":{"docs":{},"量":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"规":{"docs":{},"则":{"3":{"docs":{},".":{"docs":{},"合":{"docs":{},"理":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}},"开":{"docs":{},"销":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"写":{"docs":{},"出":{"docs":{},"更":{"docs":{},"优":{"docs":{},"质":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}},"入":{"docs":{},"到":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"锁":{"docs":{},"与":{"docs":{},"读":{"docs":{},"锁":{"docs":{},"是":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"的":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"存":{"docs":{},"在":{"docs":{},"读":{"docs":{},"锁":{"docs":{},",":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"存":{"docs":{},"在":{"docs":{},"写":{"docs":{},"锁":{"docs":{},",":{"docs":{},"读":{"docs":{},"锁":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"之":{"docs":{},"间":{"docs":{},"是":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"的":{"docs":{},",":{"docs":{},"存":{"docs":{},"在":{"docs":{},"写":{"docs":{},"锁":{"docs":{},",":{"docs":{},"其":{"docs":{},"他":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}},"并":{"docs":{},"发":{"docs":{},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"随":{"docs":{},"便":{"docs":{},"起":{"docs":{},"个":{"docs":{},"成":{"docs":{},"千":{"docs":{},"上":{"docs":{},"万":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}},"前":{"docs":{},"言":{"docs":{"./":{"ref":"./","tf":10}}},"都":{"docs":{},"应":{"docs":{},"该":{"docs":{},"被":{"docs":{},"删":{"docs":{},"除":{"docs":{},",":{"docs":{},"除":{"docs":{},"非":{"docs":{},"添":{"docs":{},"加":{"docs":{},"注":{"docs":{},"释":{"docs":{},"讲":{"docs":{},"解":{"docs":{},"为":{"docs":{},"什":{"docs":{},"么":{"docs":{},"不":{"docs":{},"删":{"docs":{},"除":{"docs":{},",":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}},"缀":{"docs":{},")":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}},"面":{"docs":{},"的":{"docs":{},"例":{"docs":{},"子":{"docs":{},"过":{"docs":{},"于":{"docs":{},"极":{"docs":{},"端":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"程":{"docs":{},"序":{"docs":{},"也":{"docs":{},"不":{"docs":{},"会":{"docs":{},"无":{"docs":{},"限":{"docs":{},"开":{"docs":{},"辟":{"docs":{},"协":{"docs":{},"程":{"docs":{},",":{"docs":{},"旨":{"docs":{},"在":{"docs":{},"说":{"docs":{},"明":{"docs":{},"协":{"docs":{},"程":{"docs":{},"数":{"docs":{},"量":{"docs":{},"是":{"docs":{},"有":{"docs":{},"限":{"docs":{},"制":{"docs":{},"的":{"docs":{},",":{"docs":{},"不":{"docs":{},"能":{"docs":{},"无":{"docs":{},"限":{"docs":{},"开":{"docs":{},"辟":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"一":{"docs":{},"段":{"docs":{},"注":{"docs":{},"释":{"docs":{},",":{"docs":{},"说":{"docs":{},"明":{"docs":{},"了":{"docs":{},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}},"要":{"docs":{},"加":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"需":{"docs":{},"要":{"docs":{},"对":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},"进":{"docs":{},"行":{"docs":{},"上":{"docs":{},"锁":{"docs":{},",":{"docs":{},"主":{"docs":{},"调":{"docs":{},"加":{"docs":{},"入":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"通":{"docs":{},"知":{"docs":{},"列":{"docs":{},"表":{"docs":{},"后":{"docs":{},"再":{"docs":{},"解":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"功":{"docs":{},"能":{"docs":{},"实":{"docs":{},"践":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}},"设":{"docs":{},"计":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"各":{"docs":{},"个":{"docs":{},"公":{"docs":{},"司":{"docs":{},"或":{"docs":{},"组":{"docs":{},"织":{"docs":{},",":{"docs":{},"都":{"docs":{},"有":{"docs":{},"各":{"docs":{},"自":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}},"占":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"据":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"向":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},"和":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.008875739644970414},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":2.5081521739130435},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.018018018018018018},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"其":{"docs":{},"他":{"docs":{},"形":{"docs":{},"式":{"docs":{},"的":{"docs":{},"确":{"docs":{},"定":{"docs":{},"性":{"docs":{},"预":{"docs":{},"计":{"docs":{},"算":{"docs":{},"的":{"docs":{},"优":{"docs":{},"化":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}},"没":{"docs":{},"有":{"docs":{},"任":{"docs":{},"何":{"docs":{},"元":{"docs":{},"素":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}},"如":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789}},"果":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},"你":{"docs":{},"对":{"docs":{},"文":{"docs":{},"章":{"docs":{},"内":{"docs":{},"容":{"docs":{},"有":{"docs":{},"任":{"docs":{},"何":{"docs":{},"疑":{"docs":{},"问":{"docs":{},"和":{"docs":{},"建":{"docs":{},"议":{"docs":{},",":{"docs":{},"欢":{"docs":{},"迎":{"docs":{},"在":{"docs":{},"应":{"docs":{},"相":{"docs":{},"应":{"docs":{},"章":{"docs":{},"节":{"docs":{},"下":{"docs":{},"留":{"docs":{},"言":{"docs":{},"探":{"docs":{},"讨":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"不":{"docs":{},"使":{"docs":{},"用":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"是":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}},"想":{"docs":{},"全":{"docs":{},"面":{"docs":{},"了":{"docs":{},"解":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}},"深":{"docs":{},"入":{"docs":{},"了":{"docs":{},"解":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}},"枚":{"docs":{},"举":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"常":{"docs":{},"量":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"先":{"docs":{},"创":{"docs":{},"建":{"docs":{},"相":{"docs":{},"应":{"docs":{},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}},"这":{"docs":{},"样":{"docs":{},",":{"docs":{},"请":{"docs":{},"参":{"docs":{},"阅":{"docs":{},"错":{"docs":{},"误":{"docs":{},"包":{"docs":{},"装":{"docs":{},"部":{"docs":{},"分":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}},"静":{"docs":{},"态":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"必":{"docs":{},"须":{"docs":{},"通":{"docs":{},"过":{"docs":{},"声":{"docs":{},"明":{"docs":{},"顶":{"docs":{},"级":{"docs":{},"错":{"docs":{},"误":{"docs":{},"变":{"docs":{},"量":{"docs":{},"或":{"docs":{},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"类":{"docs":{},"型":{"docs":{},"来":{"docs":{},"支":{"docs":{},"持":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}},"代":{"docs":{},"码":{"docs":{},"不":{"docs":{},"可":{"docs":{},"复":{"docs":{},"用":{"docs":{},"或":{"docs":{},"者":{"docs":{},"你":{"docs":{},"不":{"docs":{},"希":{"docs":{},"望":{"docs":{},"其":{"docs":{},"他":{"docs":{},"项":{"docs":{},"目":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"请":{"docs":{},"放":{"docs":{},"到":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}},"发":{"docs":{},"现":{"docs":{},"此":{"docs":{},"项":{"docs":{},"目":{"docs":{},"布":{"docs":{},"局":{"docs":{},"规":{"docs":{},"范":{"docs":{},"并":{"docs":{},"不":{"docs":{},"适":{"docs":{},"用":{"docs":{},"自":{"docs":{},"己":{"docs":{},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},",":{"docs":{},"可":{"docs":{},"在":{"docs":{},"其":{"docs":{},"基":{"docs":{},"础":{"docs":{},"上":{"docs":{},"适":{"docs":{},"当":{"docs":{},"做":{"docs":{},"出":{"docs":{},"改":{"docs":{},"变":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"泥":{"docs":{},"古":{"docs":{},"拘":{"docs":{},"方":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"手":{"docs":{},"动":{"docs":{},"管":{"docs":{},"理":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"包":{"docs":{},"可":{"docs":{},"以":{"docs":{},"将":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"包":{"docs":{},"放":{"docs":{},"到":{"docs":{},"该":{"docs":{},"目":{"docs":{},"录":{"docs":{},",":{"docs":{},"当":{"docs":{},"然":{"docs":{},"推":{"docs":{},"荐":{"docs":{},"使":{"docs":{},"用":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"包":{"docs":{},"管":{"docs":{},"理":{"docs":{},"工":{"docs":{},"具":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},"仅":{"docs":{},"在":{"docs":{},"单":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"内":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"则":{"docs":{},"应":{"docs":{},"该":{"docs":{},"定":{"docs":{},"义":{"docs":{},"为":{"docs":{},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},"声":{"docs":{},"明":{"docs":{},"中":{"docs":{},"省":{"docs":{},"略":{"docs":{},"了":{"docs":{},"结":{"docs":{},"构":{"docs":{},"的":{"docs":{},"所":{"docs":{},"有":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"请":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}},"表":{"docs":{},"达":{"docs":{},"式":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"与":{"docs":{},"所":{"docs":{},"需":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"不":{"docs":{},"完":{"docs":{},"全":{"docs":{},"匹":{"docs":{},"配":{"docs":{},",":{"docs":{},"请":{"docs":{},"指":{"docs":{},"定":{"docs":{},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}},"不":{"docs":{},"关":{"docs":{},"心":{"docs":{},"是":{"docs":{},"否":{"docs":{},"成":{"docs":{},"功":{"docs":{},",":{"docs":{},"可":{"docs":{},"显":{"docs":{},"示":{"docs":{},"忽":{"docs":{},"略":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}},"为":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"出":{"docs":{},"现":{"docs":{},"失":{"docs":{},"败":{"docs":{},"应":{"docs":{},"该":{"docs":{},"立":{"docs":{},"即":{"docs":{},"返":{"docs":{},"回":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"继":{"docs":{},"续":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"则":{"docs":{},"属":{"docs":{},"于":{"docs":{},"特":{"docs":{},"殊":{"docs":{},"情":{"docs":{},"况":{"docs":{},"需":{"docs":{},"要":{"docs":{},"添":{"docs":{},"加":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"函":{"docs":{},"数":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"需":{"docs":{},"用":{"docs":{},"于":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"其":{"docs":{},"他":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"则":{"docs":{},"采":{"docs":{},"用":{"docs":{},"下":{"docs":{},"面":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}}}}}},"变":{"docs":{},"量":{"docs":{},"为":{"docs":{},"私":{"docs":{},"有":{"docs":{},",":{"docs":{},"且":{"docs":{},"特":{"docs":{},"有":{"docs":{},"名":{"docs":{},"词":{"docs":{},"为":{"docs":{},"首":{"docs":{},"个":{"docs":{},"单":{"docs":{},"词":{"docs":{},",":{"docs":{},"则":{"docs":{},"使":{"docs":{},"用":{"docs":{},"小":{"docs":{},"写":{"docs":{},",":{"docs":{},"如":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}},"类":{"docs":{},"型":{"docs":{},"不":{"docs":{},"确":{"docs":{},"定":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"将":{"docs":{},"会":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"到":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{},",":{"docs":{},"函":{"docs":{},"数":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"如":{"docs":{},"果":{"docs":{},"能":{"docs":{},"确":{"docs":{},"定":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"就":{"docs":{},"不":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"第":{"docs":{},"一":{"docs":{},"项":{"docs":{},"(":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{},")":{"docs":{},",":{"docs":{},"就":{"docs":{},"丢":{"docs":{},"弃":{"docs":{},"第":{"docs":{},"二":{"docs":{},"项":{"docs":{},"(":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{},"e":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}},"二":{"docs":{},"项":{"docs":{},",":{"docs":{},"则":{"docs":{},"把":{"docs":{},"第":{"docs":{},"一":{"docs":{},"项":{"docs":{},"置":{"docs":{},"为":{"docs":{},"空":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{},"(":{"docs":{},"下":{"docs":{},"划":{"docs":{},"线":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}},"我":{"docs":{},"们":{"docs":{},"调":{"docs":{},"用":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}},"针":{"docs":{},"对":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"开":{"docs":{},"辟":{"docs":{},"很":{"docs":{},"多":{"docs":{},"协":{"docs":{},"程":{"docs":{},",":{"docs":{},"但":{"docs":{},"不":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"程":{"docs":{},"序":{"docs":{},"崩":{"docs":{},"溃":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"吗":{"docs":{},"?":{"docs":{},"如":{"docs":{},"果":{"docs":{},"真":{"docs":{},"要":{"docs":{},"这":{"docs":{},"么":{"docs":{},"做":{"docs":{},"的":{"docs":{},"话":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"清":{"docs":{},"楚":{"docs":{},"地":{"docs":{},"知":{"docs":{},"道":{"docs":{},",":{"docs":{},"协":{"docs":{},"程":{"docs":{},"虽":{"docs":{},"然":{"docs":{},"轻":{"docs":{},"量":{"docs":{},",":{"docs":{},"但":{"docs":{},"仍":{"docs":{},"有":{"docs":{},"开":{"docs":{},"销":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"在":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"传":{"docs":{},"入":{"docs":{},"的":{"docs":{},"参":{"docs":{},"数":{"docs":{},"通":{"docs":{},"常":{"docs":{},"是":{"docs":{},"固":{"docs":{},"定":{"docs":{},"的":{"docs":{},",":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"通":{"docs":{},"过":{"docs":{},"实":{"docs":{},"现":{"docs":{},"多":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"实":{"docs":{},"现":{"docs":{},"默":{"docs":{},"认":{"docs":{},"参":{"docs":{},"数":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{},"出":{"docs":{},"现":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{},"仅":{"docs":{},"被":{"docs":{},"使":{"docs":{},"用":{"docs":{},"一":{"docs":{},"次":{"docs":{},",":{"docs":{},"且":{"docs":{},"不":{"docs":{},"能":{"docs":{},"起":{"docs":{},"到":{"docs":{},"解":{"docs":{},"释":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"的":{"docs":{},"作":{"docs":{},"用":{"docs":{},"时":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"删":{"docs":{},"除":{"docs":{},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"内":{"docs":{},"联":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"操":{"docs":{},"作":{"docs":{},"成":{"docs":{},"功":{"docs":{},",":{"docs":{},"再":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}},"方":{"docs":{},"法":{"docs":{},"不":{"docs":{},"使":{"docs":{},"用":{"docs":{},"类":{"docs":{},"的":{"docs":{},"成":{"docs":{},"员":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"实":{"docs":{},"现":{"docs":{},"为":{"docs":{},"非":{"docs":{},"成":{"docs":{},"员":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}},"非":{"docs":{},"成":{"docs":{},"员":{"docs":{},"函":{"docs":{},"数":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"类":{"docs":{},"的":{"docs":{},"多":{"docs":{},"个":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"实":{"docs":{},"现":{"docs":{},"为":{"docs":{},"成":{"docs":{},"员":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}},"要":{"docs":{},"开":{"docs":{},"启":{"docs":{},"多":{"docs":{},"个":{"docs":{},"线":{"docs":{},"程":{"docs":{},"执":{"docs":{},"行":{"docs":{},"一":{"docs":{},"组":{"docs":{},"动":{"docs":{},"作":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"要":{"docs":{},"等":{"docs":{},"待":{"docs":{},"全":{"docs":{},"部":{"docs":{},"完":{"docs":{},"成":{"docs":{},"后":{"docs":{},"继":{"docs":{},"续":{"docs":{},"后":{"docs":{},"续":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},",":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"*":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"与":{"docs":{},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},".":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"不":{"docs":{},"匹":{"docs":{},"配":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"语":{"docs":{},"句":{"docs":{},"v":{"docs":{},"a":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"类":{"docs":{},"似":{"docs":{},"上":{"docs":{},"面":{"docs":{},"分":{"docs":{},"配":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"段":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"将":{"docs":{},"其":{"docs":{},"包":{"docs":{},"裹":{"docs":{},"在":{"docs":{},"一":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"中":{"docs":{},"(":{"docs":{},"匿":{"docs":{},"名":{"docs":{},"函":{"docs":{},"数":{"docs":{},"或":{"docs":{},"有":{"docs":{},"名":{"docs":{},"函":{"docs":{},"数":{"docs":{},")":{"docs":{},"。":{"docs":{},"在":{"docs":{},"该":{"docs":{},"函":{"docs":{},"数":{"docs":{},"中":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"没":{"docs":{},"有":{"docs":{},"要":{"docs":{},"添":{"docs":{},"加":{"docs":{},"的":{"docs":{},"其":{"docs":{},"他":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},",":{"docs":{},"则":{"docs":{},"按":{"docs":{},"原":{"docs":{},"样":{"docs":{},"返":{"docs":{},"回":{"docs":{},"原":{"docs":{},"始":{"docs":{},"错":{"docs":{},"误":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"它":{"docs":{},",":{"docs":{},"则":{"docs":{},"使":{"docs":{},"用":{"docs":{},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"f":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"确":{"docs":{},"实":{"docs":{},"需":{"docs":{},"要":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"它":{"docs":{},",":{"docs":{},"则":{"docs":{},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"切":{"docs":{},"片":{"docs":{},"中":{"docs":{},"是":{"docs":{},"指":{"docs":{},"向":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"呢":{"docs":{},"?":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}},"想":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}},"使":{"docs":{},"用":{"docs":{},"局":{"docs":{},"部":{"docs":{},"切":{"docs":{},"片":{"docs":{},"时":{"docs":{},",":{"docs":{},"已":{"docs":{},"知":{"docs":{},"切":{"docs":{},"片":{"docs":{},"的":{"docs":{},"长":{"docs":{},"度":{"docs":{},"或":{"docs":{},"容":{"docs":{},"量":{"docs":{},",":{"docs":{},"请":{"docs":{},"使":{"docs":{},"用":{"docs":{},"常":{"docs":{},"量":{"docs":{},"或":{"docs":{},"数":{"docs":{},"值":{"docs":{},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{},"来":{"docs":{},"定":{"docs":{},"义":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"加":{"docs":{},"锁":{"docs":{},"无":{"docs":{},"法":{"docs":{},"避":{"docs":{},"免":{"docs":{},",":{"docs":{},"则":{"docs":{},"可":{"docs":{},"以":{"docs":{},"采":{"docs":{},"用":{"docs":{},"分":{"docs":{},"片":{"docs":{},"的":{"docs":{},"形":{"docs":{},"式":{"docs":{},",":{"docs":{},"减":{"docs":{},"少":{"docs":{},"对":{"docs":{},"资":{"docs":{},"源":{"docs":{},"加":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"次":{"docs":{},"数":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"提":{"docs":{},"高":{"docs":{},"整":{"docs":{},"体":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"并":{"docs":{},"发":{"docs":{},"无":{"docs":{},"法":{"docs":{},"做":{"docs":{},"到":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"化":{"docs":{},",":{"docs":{},"优":{"docs":{},"先":{"docs":{},"使":{"docs":{},"用":{"docs":{},"共":{"docs":{},"享":{"docs":{},"锁":{"docs":{},"而":{"docs":{},"非":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"协":{"docs":{},"程":{"docs":{},"池":{"docs":{},"容":{"docs":{},"量":{"docs":{},"大":{"docs":{},"小":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}},"不":{"docs":{},"同":{"docs":{},"环":{"docs":{},"境":{"docs":{},"(":{"docs":{},"测":{"docs":{},"试":{"docs":{},"、":{"docs":{},"正":{"docs":{},"式":{"docs":{},")":{"docs":{},"的":{"docs":{},"服":{"docs":{},"务":{"docs":{},"配":{"docs":{},"置":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}},"放":{"docs":{},"置":{"docs":{},"测":{"docs":{},"试":{"docs":{},"工":{"docs":{},"具":{"docs":{},"和":{"docs":{},"测":{"docs":{},"试":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{},"对":{"docs":{},"于":{"docs":{},"较":{"docs":{},"大":{"docs":{},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},",":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"数":{"docs":{},"据":{"docs":{},"子":{"docs":{},"目":{"docs":{},"录":{"docs":{},"是":{"docs":{},"有":{"docs":{},"意":{"docs":{},"义":{"docs":{},"的":{"docs":{},"。":{"docs":{},"例":{"docs":{},"如":{"docs":{},",":{"docs":{},"你":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"引":{"docs":{},"入":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}},"无":{"docs":{},"必":{"docs":{},"要":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"起":{"docs":{},"和":{"docs":{},"包":{"docs":{},"相":{"docs":{},"同":{"docs":{},"的":{"docs":{},"名":{"docs":{},"字":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}},"下":{"docs":{},"面":{"docs":{},"这":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"第":{"docs":{},"二":{"docs":{},"个":{"docs":{},"参":{"docs":{},"数":{"docs":{},"是":{"docs":{},"没":{"docs":{},"有":{"docs":{},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{},",":{"docs":{},"大":{"docs":{},"部":{"docs":{},"分":{"docs":{},"时":{"docs":{},"候":{"docs":{},"都":{"docs":{},"是":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}},"将":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"官":{"docs":{},"方":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}},"文":{"docs":{},"档":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}},"的":{"docs":{},"入":{"docs":{},"门":{"docs":{},"指":{"docs":{},"南":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}},"网":{"docs":{},"站":{"docs":{},"已":{"docs":{},"有":{"docs":{},"系":{"docs":{},"统":{"docs":{},"全":{"docs":{},"面":{"docs":{},"的":{"docs":{},"指":{"docs":{},"导":{"docs":{},"文":{"docs":{},"档":{"docs":{},",":{"docs":{},"新":{"docs":{},"手":{"docs":{},"可":{"docs":{},"以":{"docs":{},"快":{"docs":{},"速":{"docs":{},"通":{"docs":{},"过":{"docs":{},"官":{"docs":{},"方":{"docs":{},"资":{"docs":{},"料":{"docs":{},",":{"docs":{},"轻":{"docs":{},"松":{"docs":{},"上":{"docs":{},"手":{"docs":{},"。":{"docs":{},"此":{"docs":{},"外":{"docs":{},",":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"资":{"docs":{},"料":{"docs":{},",":{"docs":{},"也":{"docs":{},"有":{"docs":{},"百":{"docs":{},"家":{"docs":{},"争":{"docs":{},"鸣":{"docs":{},"之":{"docs":{},"势":{"docs":{},"。":{"docs":{},"有":{"docs":{},"介":{"docs":{},"绍":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"也":{"docs":{},"在":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}},"实":{"docs":{},"践":{"docs":{},"建":{"docs":{},"议":{"docs":{},",":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"我":{"docs":{},"们":{"docs":{},"更":{"docs":{},"好":{"docs":{},"的":{"docs":{},"使":{"docs":{},"用":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}},"现":{"docs":{},"了":{"docs":{},"接":{"docs":{},"口":{"docs":{},";":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}},"多":{"docs":{},"种":{"docs":{},"列":{"docs":{},"表":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"请":{"docs":{},"避":{"docs":{},"免":{"docs":{},"在":{"docs":{},"具":{"docs":{},"体":{"docs":{},"的":{"docs":{},"列":{"docs":{},"表":{"docs":{},"实":{"docs":{},"现":{"docs":{},"中":{"docs":{},"嵌":{"docs":{},"入":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}},"上":{"docs":{},"利":{"docs":{},"用":{"docs":{},"反":{"docs":{},"射":{"docs":{},"来":{"docs":{},"达":{"docs":{},"到":{"docs":{},"范":{"docs":{},"型":{"docs":{},"的":{"docs":{},"效":{"docs":{},"果":{"docs":{},",":{"docs":{},"在":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"进":{"docs":{},"行":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"动":{"docs":{},"态":{"docs":{},"判":{"docs":{},"断":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"带":{"docs":{},"来":{"docs":{},"了":{"docs":{},"一":{"docs":{},"定":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"损":{"docs":{},"耗":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"集":{"docs":{},"合":{"docs":{},"(":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},")":{"2":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},"docs":{}}},"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},"线":{"docs":{},"程":{"docs":{},"安":{"docs":{},"全":{"docs":{},"。":{"docs":{},"果":{"docs":{},"不":{"docs":{},"其":{"docs":{},"然":{"docs":{},",":{"docs":{},"和":{"docs":{},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"猜":{"docs":{},"想":{"docs":{},"一":{"docs":{},"致":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}},"非":{"docs":{},"常":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"。":{"docs":{},"d":{"docs":{},"o":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"际":{"docs":{},"使":{"docs":{},"用":{"docs":{},"时":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"根":{"docs":{},"据":{"docs":{},"不":{"docs":{},"用":{"docs":{},"场":{"docs":{},"景":{"docs":{},"来":{"docs":{},"选":{"docs":{},"择":{"docs":{},"。":{"docs":{},"如":{"docs":{},"不":{"docs":{},"能":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},"使":{"docs":{},"用":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"法":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},"使":{"docs":{},"用":{"docs":{},"移":{"docs":{},"位":{"docs":{},"法":{"docs":{},"中":{"docs":{},"的":{"docs":{},"第":{"docs":{},"一":{"docs":{},"种":{"docs":{},"实":{"docs":{},"现":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"上":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{},"无":{"docs":{},"缓":{"docs":{},"冲":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}},"例":{"docs":{},"时":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"关":{"docs":{},"联":{"docs":{},"一":{"docs":{},"个":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}},"都":{"docs":{},"会":{"docs":{},"关":{"docs":{},"联":{"docs":{},"一":{"docs":{},"个":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"年":{"docs":{},"诞":{"docs":{},"生":{"docs":{},"以":{"docs":{},"来":{"docs":{},",":{"docs":{},"因":{"docs":{},"其":{"docs":{},"出":{"docs":{},"色":{"docs":{},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},"能":{"docs":{},"力":{"docs":{},"和":{"docs":{},"简":{"docs":{},"单":{"docs":{},"易":{"docs":{},"用":{"docs":{},"的":{"docs":{},"低":{"docs":{},"门":{"docs":{},"槛":{"docs":{},",":{"docs":{},"已":{"docs":{},"在":{"docs":{},"各":{"docs":{},"大":{"docs":{},"厂":{"docs":{},"商":{"docs":{},"的":{"docs":{},"后":{"docs":{},"台":{"docs":{},"高":{"docs":{},"并":{"docs":{},"发":{"docs":{},"业":{"docs":{},"务":{"docs":{},"场":{"docs":{},"景":{"docs":{},"崭":{"docs":{},"露":{"docs":{},"头":{"docs":{},"脚":{"docs":{},",":{"docs":{},"甚":{"docs":{},"至":{"docs":{},"有":{"docs":{},"取":{"docs":{},"代":{"docs":{},"传":{"docs":{},"统":{"docs":{},"后":{"docs":{},"台":{"docs":{},"服":{"docs":{},"务":{"docs":{},"开":{"docs":{},"发":{"docs":{},"语":{"docs":{},"言":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"开":{"docs":{},"发":{"docs":{},"经":{"docs":{},"验":{"docs":{},"的":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}},"始":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":3.333333333333333}},",":{"docs":{},"官":{"docs":{},"方":{"docs":{},"推":{"docs":{},"荐":{"docs":{},"使":{"docs":{},"用":{"docs":{},"新":{"docs":{},"的":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"管":{"docs":{},"理":{"docs":{},"系":{"docs":{},"统":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}},"如":{"docs":{},"果":{"docs":{},"需":{"docs":{},"要":{"docs":{},"使":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"值":{"docs":{},"为":{"docs":{},"有":{"docs":{},"意":{"docs":{},"义":{"docs":{},"的":{"docs":{},"值":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"从":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"头":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}},"销":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"严":{"docs":{},"重":{"docs":{},"影":{"docs":{},"响":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}},"。":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"利":{"docs":{},"用":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{},"让":{"docs":{},"当":{"docs":{},"前":{"docs":{},"协":{"docs":{},"程":{"docs":{},"主":{"docs":{},"动":{"docs":{},"让":{"docs":{},"出":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"想":{"docs":{},"离":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}},"最":{"docs":{},"佳":{"docs":{},"实":{"docs":{},"践":{"docs":{},"更":{"docs":{},"近":{"docs":{},"一":{"docs":{},"步":{"docs":{},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"看":{"docs":{},"看":{"docs":{},"本":{"docs":{},"书":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}},"性":{"docs":{},"能":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}},"顶":{"docs":{},"层":{"docs":{},"将":{"docs":{},"其":{"docs":{},"捕":{"docs":{},"获":{"docs":{},",":{"docs":{},"在":{"docs":{},"其":{"docs":{},"他":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}},"小":{"docs":{},"化":{"docs":{},"变":{"docs":{},"量":{"docs":{},"作":{"docs":{},"用":{"docs":{},"域":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}}}}}}},"好":{"docs":{},"有":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"本":{"docs":{},"书":{"docs":{},"为":{"docs":{},"开":{"docs":{},"源":{"docs":{},"书":{"docs":{},"籍":{"docs":{},",":{"docs":{},"希":{"docs":{},"望":{"docs":{},"得":{"docs":{},"到":{"docs":{},"大":{"docs":{},"家":{"docs":{},"的":{"docs":{},"协":{"docs":{},"同":{"docs":{},"共":{"docs":{},"建":{"docs":{},",":{"docs":{},"不":{"docs":{},"断":{"docs":{},"迭":{"docs":{},"代":{"docs":{},"丰":{"docs":{},"富":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"你":{"docs":{},"的":{"docs":{},"建":{"docs":{},"议":{"docs":{},"和":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"主":{"docs":{},"要":{"docs":{},"分":{"docs":{},"为":{"docs":{},"四":{"docs":{},"个":{"docs":{},"方":{"docs":{},"面":{"docs":{},":":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}},"所":{"docs":{},"述":{"docs":{},"内":{"docs":{},"容":{"docs":{},"谈":{"docs":{},"不":{"docs":{},"上":{"docs":{},"是":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}},"由":{"docs":{},"来":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}},"内":{"docs":{},"容":{"docs":{},"简":{"docs":{},"介":{"docs":{},"目":{"docs":{},"标":{"docs":{},"读":{"docs":{},"者":{"docs":{},"互":{"docs":{},"动":{"docs":{},"勘":{"docs":{},"误":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}},"文":{"docs":{},"所":{"docs":{},"述":{"docs":{},"内":{"docs":{},"容":{"docs":{},"均":{"docs":{},"为":{"docs":{},"参":{"docs":{},"考":{"docs":{},"意":{"docs":{},"见":{"docs":{},",":{"docs":{},"并":{"docs":{},"非":{"docs":{},"标":{"docs":{},"准":{"docs":{},"。":{"docs":{},"其":{"docs":{},"中":{"docs":{},"许":{"docs":{},"多":{"docs":{},"是":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}},"结":{"docs":{},"合":{"docs":{},"官":{"docs":{},"方":{"docs":{},"编":{"docs":{},"码":{"docs":{},"建":{"docs":{},"议":{"docs":{},",":{"docs":{},"大":{"docs":{},"厂":{"docs":{},"编":{"docs":{},"码":{"docs":{},"规":{"docs":{},"范":{"docs":{},"、":{"docs":{},"开":{"docs":{},"源":{"docs":{},"技":{"docs":{},"术":{"docs":{},"书":{"docs":{},"籍":{"docs":{},"和":{"docs":{},"自":{"docs":{},"身":{"docs":{},"项":{"docs":{},"目":{"docs":{},"经":{"docs":{},"验":{"docs":{},",":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"以":{"docs":{},"简":{"docs":{},"短":{"docs":{},"的":{"docs":{},"语":{"docs":{},"言":{"docs":{},"给":{"docs":{},"出":{"docs":{},"一":{"docs":{},"套":{"docs":{},"行":{"docs":{},"之":{"docs":{},"有":{"docs":{},"效":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"身":{"docs":{},"在":{"docs":{},"代":{"docs":{},"码":{"docs":{},"规":{"docs":{},"范":{"docs":{},"方":{"docs":{},"面":{"docs":{},"做":{"docs":{},"了":{"docs":{},"很":{"docs":{},"多":{"docs":{},"努":{"docs":{},"力":{"docs":{},",":{"docs":{},"很":{"docs":{},"多":{"docs":{},"限":{"docs":{},"制":{"docs":{},"都":{"docs":{},"是":{"docs":{},"语":{"docs":{},"法":{"docs":{},"要":{"docs":{},"求":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{},"左":{"docs":{},"大":{"docs":{},"括":{"docs":{},"号":{"docs":{},"不":{"docs":{},"换":{"docs":{},"行":{"docs":{},",":{"docs":{},"引":{"docs":{},"用":{"docs":{},"的":{"docs":{},"包":{"docs":{},"或":{"docs":{},"者":{"docs":{},"定":{"docs":{},"义":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{},"不":{"docs":{},"使":{"docs":{},"用":{"docs":{},"会":{"docs":{},"报":{"docs":{},"错":{"docs":{},"。":{"docs":{},"此":{"docs":{},"外":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"源":{"docs":{},"码":{"2":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}}},"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"应":{"docs":{},"该":{"docs":{},"是":{"docs":{},"你":{"docs":{},"的":{"docs":{},"首":{"docs":{},"选":{"docs":{},",":{"docs":{},"再":{"docs":{},"结":{"docs":{},"合":{"docs":{},"精":{"docs":{},"彩":{"docs":{},"的":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"分":{"docs":{},"析":{"docs":{},",":{"docs":{},"如":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}},"进":{"docs":{},"行":{"docs":{},"剖":{"docs":{},"析":{"docs":{},"介":{"docs":{},"绍":{"docs":{},"实":{"docs":{},"现":{"docs":{},"原":{"docs":{},"理":{"docs":{},"的":{"docs":{},",":{"docs":{},"有":{"docs":{},"介":{"docs":{},"绍":{"docs":{},"高":{"docs":{},"并":{"docs":{},"发":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},"实":{"docs":{},"战":{"docs":{},"指":{"docs":{},"导":{"docs":{},"的":{"docs":{},",":{"docs":{},"也":{"docs":{},"有":{"docs":{},"介":{"docs":{},"绍":{"docs":{},"使":{"docs":{},"用":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"目":{"docs":{},"录":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"文":{"docs":{},"件":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}},"的":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.007104795737122558}},"共":{"docs":{},"同":{"docs":{},"追":{"docs":{},"求":{"docs":{},"。":{"docs":{},"为":{"docs":{},"书":{"docs":{},"写":{"docs":{},"效":{"docs":{},"率":{"docs":{},"更":{"docs":{},"高":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"本":{"docs":{},"文":{"docs":{},"将":{"docs":{},"结":{"docs":{},"合":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}},"本":{"docs":{},"篇":{"docs":{},"将":{"docs":{},"结":{"docs":{},"合":{"docs":{"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456}}}}}}}}}}}},"初":{"docs":{},"学":{"docs":{},"者":{"docs":{},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"先":{"docs":{},"略":{"docs":{},"过":{"docs":{},"本":{"docs":{},"书":{"docs":{},",":{"docs":{},"了":{"docs":{},"解":{"docs":{},"下":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}},"最":{"docs":{},"佳":{"docs":{},"实":{"docs":{},"践":{"docs":{},"更":{"docs":{},"近":{"docs":{},"一":{"docs":{},"步":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}},",":{"docs":{},"但":{"docs":{},"希":{"docs":{},"望":{"docs":{},"能":{"docs":{},"够":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"广":{"docs":{},"大":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}},"通":{"docs":{},"用":{"docs":{},"准":{"docs":{},"则":{"docs":{},",":{"docs":{},"其":{"docs":{},"他":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"内":{"docs":{},"容":{"docs":{},"也":{"docs":{},"参":{"docs":{},"考":{"docs":{},"了":{"docs":{},"很":{"docs":{},"多":{"docs":{},"官":{"docs":{},"方":{"docs":{},"指":{"docs":{},"南":{"docs":{},",":{"docs":{},"包":{"docs":{},"括":{"docs":{},"但":{"docs":{},"不":{"docs":{},"限":{"docs":{},"于":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"子":{"docs":{},"目":{"docs":{},"录":{"docs":{},"都":{"docs":{},"不":{"docs":{},"能":{"docs":{},"被":{"docs":{},"导":{"docs":{},"出":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}},"逻":{"docs":{},"辑":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}},",":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},",":{"docs":{},"尽":{"docs":{},"管":{"docs":{},"它":{"docs":{},"不":{"docs":{},"是":{"docs":{},"。":{"docs":{},"除":{"docs":{},"了":{"docs":{},"这":{"docs":{},"一":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}},"包":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}},"切":{"docs":{},"片":{"docs":{},"(":{"docs":{},"一":{"docs":{},"个":{"docs":{},"为":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"。":{"docs":{},"从":{"docs":{},"最":{"docs":{},"终":{"docs":{},"的":{"docs":{},"结":{"docs":{},"果":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"到":{"docs":{},",":{"docs":{},"遍":{"docs":{},"历":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}},"进":{"docs":{},"行":{"docs":{},"测":{"docs":{},"试":{"docs":{},",":{"docs":{},"来":{"docs":{},"上":{"docs":{},"下":{"docs":{},"上":{"docs":{},"面":{"docs":{},"四":{"docs":{},"种":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}},"非":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"异":{"docs":{},"常":{"docs":{},",":{"docs":{},"禁":{"docs":{},"止":{"docs":{},"滥":{"docs":{},"用":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}},"名":{"docs":{},"字":{"docs":{},"和":{"docs":{},"目":{"docs":{},"录":{"docs":{},"一":{"docs":{},"致":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"两":{"docs":{},"个":{"docs":{},"分":{"docs":{},"支":{"docs":{},"中":{"docs":{},"都":{"docs":{},"设":{"docs":{},"置":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"则":{"docs":{},"可":{"docs":{},"以":{"docs":{},"将":{"docs":{},"其":{"docs":{},"替":{"docs":{},"换":{"docs":{},"为":{"docs":{},"单":{"docs":{},"个":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}},"基":{"docs":{},"础":{"docs":{},"上":{"docs":{},"增":{"docs":{},"加":{"docs":{},"了":{"docs":{},"自":{"docs":{},"动":{"docs":{},"删":{"docs":{},"除":{"docs":{},"和":{"docs":{},"引":{"docs":{},"入":{"docs":{},"包":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}},"工":{"docs":{},"具":{"docs":{},",":{"docs":{},"主":{"docs":{},"要":{"docs":{},"功":{"docs":{},"能":{"docs":{},"就":{"docs":{},"是":{"docs":{},"检":{"docs":{},"测":{"docs":{},"代":{"docs":{},"码":{"docs":{},"中":{"docs":{},"不":{"docs":{},"规":{"docs":{},"范":{"docs":{},"的":{"docs":{},"地":{"docs":{},"方":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}},"结":{"docs":{},"果":{"docs":{},"为":{"docs":{},"准":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}},"退":{"docs":{},"出":{"docs":{},"机":{"docs":{},"制":{"docs":{},",":{"docs":{},"防":{"docs":{},"止":{"docs":{},"泄":{"docs":{},"漏":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}},"底":{"docs":{},"层":{"docs":{},"结":{"docs":{},"构":{"docs":{},"后":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"知":{"docs":{},"道":{"docs":{},"在":{"docs":{},"传":{"docs":{},"递":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},"一":{"docs":{},"般":{"docs":{},"也":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"指":{"docs":{},"向":{"docs":{},"它":{"docs":{},"们":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"数":{"docs":{},"组":{"docs":{},"。":{"docs":{},"这":{"docs":{},"样":{"docs":{},"也":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"额":{"docs":{},"外":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"空":{"docs":{},"间":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"在":{"docs":{},"原":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}}}},"指":{"docs":{},"针":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":3.333333333333333}},"基":{"docs":{},"本":{"docs":{},"是":{"docs":{},"不":{"docs":{},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{},"。":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}}}}},"修":{"docs":{},"改":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"操":{"docs":{},"作":{"docs":{},"。":{"docs":{},"在":{"docs":{},"执":{"docs":{},"行":{"docs":{},"任":{"docs":{},"务":{"docs":{},"函":{"docs":{},"数":{"docs":{},"前":{"docs":{},",":{"docs":{},"对":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}},"开":{"docs":{},"销":{"docs":{},"非":{"docs":{},"常":{"docs":{},"小":{"docs":{},",":{"docs":{},"只":{"docs":{},"有":{"docs":{},"在":{"docs":{},"您":{"docs":{},"可":{"docs":{},"以":{"docs":{},"证":{"docs":{},"明":{"docs":{},"函":{"docs":{},"数":{"docs":{},"执":{"docs":{},"行":{"docs":{},"时":{"docs":{},"间":{"docs":{},"处":{"docs":{},"于":{"docs":{},"纳":{"docs":{},"秒":{"docs":{},"级":{"docs":{},"的":{"docs":{},"程":{"docs":{},"度":{"docs":{},"时":{"docs":{},",":{"docs":{},"才":{"docs":{},"应":{"docs":{},"避":{"docs":{},"免":{"docs":{},"这":{"docs":{},"样":{"docs":{},"做":{"docs":{},"。":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{},"虽":{"docs":{},"然":{"docs":{},"官":{"docs":{},"方":{"docs":{},"宣":{"docs":{},"称":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}},"主":{"docs":{},"要":{"docs":{},"是":{"docs":{},"三":{"docs":{},"个":{"docs":{},"方":{"docs":{},"面":{"docs":{},":":{"docs":{},"创":{"docs":{},"建":{"docs":{},"(":{"docs":{},"占":{"docs":{},"用":{"docs":{},"内":{"docs":{},"存":{"docs":{},")":{"docs":{},"、":{"docs":{},"调":{"docs":{},"度":{"docs":{},"(":{"docs":{},"增":{"docs":{},"加":{"docs":{},"调":{"docs":{},"度":{"docs":{},"器":{"docs":{},"负":{"docs":{},"担":{"docs":{},")":{"docs":{},"和":{"docs":{},"删":{"docs":{},"除":{"docs":{},"(":{"docs":{},"增":{"docs":{},"加":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},"细":{"docs":{},"节":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{},"o":{"docs":{},"d":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}},",":{"docs":{},"对":{"docs":{},"其":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"不":{"docs":{},"可":{"docs":{},"见":{"docs":{},"。":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}}}},"被":{"docs":{},"到":{"docs":{},"处":{"docs":{},"泄":{"docs":{},"露":{"docs":{},"了":{"docs":{},";":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}},"是":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}},",":{"docs":{},"通":{"docs":{},"常":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},"二":{"docs":{},"进":{"docs":{},"制":{"docs":{},"表":{"docs":{},"示":{"docs":{},"形":{"docs":{},"式":{"docs":{},"写":{"docs":{},"入":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}},"编":{"docs":{},"码":{"docs":{},"和":{"docs":{},"解":{"docs":{},"码":{"docs":{},"。":{"docs":{},"v":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}},"大":{"docs":{},"小":{"docs":{},",":{"docs":{},"这":{"docs":{},"将":{"docs":{},"减":{"docs":{},"少":{"docs":{},"在":{"docs":{},"将":{"docs":{},"元":{"docs":{},"素":{"docs":{},"添":{"docs":{},"加":{"docs":{},"到":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}},"为":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}}},"容":{"docs":{},"量":{"docs":{},"分":{"docs":{},"配":{"docs":{},"足":{"docs":{},"够":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},",":{"docs":{},"这":{"docs":{},"意":{"docs":{},"味":{"docs":{},"着":{"docs":{},"后":{"docs":{},"续":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}}}},"数":{"docs":{},"量":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}},"长":{"docs":{},"度":{"docs":{},"与":{"docs":{},"容":{"docs":{},"量":{"docs":{},"匹":{"docs":{},"配":{"docs":{},",":{"docs":{},"在":{"docs":{},"此":{"docs":{},"之":{"docs":{},"后":{"docs":{},",":{"docs":{},"任":{"docs":{},"何":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}},"性":{"docs":{},"能":{"docs":{},"相":{"docs":{},"近":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"结":{"docs":{},"果":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"的":{"docs":{},"长":{"docs":{},"度":{"docs":{},"是":{"docs":{},"可":{"docs":{},"预":{"docs":{},"知":{"docs":{},"的":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}},"几":{"docs":{},"乎":{"docs":{},"一":{"docs":{},"样":{"docs":{},",":{"docs":{},"如":{"docs":{},"基":{"docs":{},"本":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}},"是":{"docs":{},"一":{"docs":{},"样":{"docs":{},"的":{"docs":{},"。":{"docs":{},"而":{"docs":{},"且":{"docs":{},"使":{"docs":{},"用":{"docs":{},"指":{"docs":{},"针":{"docs":{},"还":{"docs":{},"有":{"docs":{},"另":{"docs":{},"一":{"docs":{},"个":{"docs":{},"好":{"docs":{},"处":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"直":{"docs":{},"接":{"docs":{},"修":{"docs":{},"改":{"docs":{},"指":{"docs":{},"针":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"的":{"docs":{},"值":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"将":{"docs":{},"显":{"docs":{},"著":{"docs":{},"地":{"docs":{},"高":{"docs":{},"于":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}},"差":{"docs":{},"别":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}},"遍":{"docs":{},"历":{"docs":{},"方":{"docs":{},"式":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":5}}}}}},"位":{"docs":{},"置":{"docs":{},"就":{"docs":{},"是":{"docs":{},"所":{"docs":{},"有":{"docs":{},"有":{"docs":{},"效":{"docs":{},"元":{"docs":{},"素":{"docs":{},"的":{"docs":{},"下":{"docs":{},"一":{"docs":{},"个":{"docs":{},"位":{"docs":{},"置":{"docs":{},",":{"docs":{},"最":{"docs":{},"后":{"docs":{},"做":{"docs":{},"一":{"docs":{},"个":{"docs":{},"截":{"docs":{},"取":{"docs":{},"就":{"docs":{},"行":{"docs":{},"了":{"docs":{},"。":{"docs":{},"这":{"docs":{},"种":{"docs":{},"方":{"docs":{},"法":{"docs":{},"会":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"来":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"截":{"docs":{},"取":{"docs":{},"删":{"docs":{},"除":{"docs":{},"指":{"docs":{},"定":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{},"注":{"docs":{},"意":{"docs":{},"删":{"docs":{},"除":{"docs":{},"时":{"docs":{},",":{"docs":{},"后":{"docs":{},"面":{"docs":{},"的":{"docs":{},"元":{"docs":{},"素":{"docs":{},"会":{"docs":{},"前":{"docs":{},"移":{"docs":{},",":{"docs":{},"下":{"docs":{},"标":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}}}}}},"空":{"docs":{},"间":{"docs":{},",":{"docs":{},"优":{"docs":{},"点":{"docs":{},"是":{"docs":{},"容":{"docs":{},"易":{"docs":{},"理":{"docs":{},"解":{"docs":{},",":{"docs":{},"而":{"docs":{},"且":{"docs":{},"不":{"docs":{},"会":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}},"那":{"docs":{},"么":{"docs":{},"假":{"docs":{},"设":{"docs":{},"计":{"docs":{},"算":{"docs":{},"机":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"是":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}},"。":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}},"完":{"docs":{},"整":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"如":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"(":{"docs":{},"通":{"docs":{},"过":{"docs":{},"切":{"docs":{},"片":{"docs":{},"构":{"docs":{},"建":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}}},"键":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"值":{"docs":{},"。":{"docs":{},"即":{"docs":{},"使":{"docs":{},"是":{"docs":{},"将":{"docs":{},"值":{"docs":{},"设":{"docs":{},"置":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}},"倍":{"docs":{},"数":{"docs":{},",":{"docs":{},"从":{"docs":{},"第":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}}}}},"内":{"docs":{},"存":{"docs":{},"占":{"docs":{},"用":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}}},",":{"docs":{},"在":{"docs":{},"源":{"docs":{},"码":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}},"字":{"docs":{},"段":{"docs":{},"时":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"。":{"docs":{},"但":{"docs":{},"是":{"docs":{},"有":{"docs":{},"一":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"除":{"docs":{},"外":{"docs":{},":":{"docs":{},"即":{"docs":{},"当":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}},"对":{"docs":{},"齐":{"docs":{},"系":{"docs":{},"数":{"docs":{},"决":{"docs":{},"定":{"docs":{},",":{"docs":{},"也":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"由":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"使":{"docs":{},"用":{"docs":{},"方":{"docs":{},"式":{"docs":{},"非":{"docs":{},"常":{"docs":{},"简":{"docs":{},"单":{"docs":{},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"实":{"docs":{},"现":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}},"压":{"docs":{},"力":{"docs":{},",":{"docs":{},"提":{"docs":{},"升":{"docs":{},"系":{"docs":{},"统":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"定":{"docs":{},"义":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"毛":{"docs":{},"刺":{"docs":{},",":{"docs":{},"而":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"并":{"docs":{},"发":{"docs":{},"读":{"docs":{},"写":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}},"操":{"docs":{},"作":{"docs":{},"个":{"docs":{},"数":{"docs":{},"超":{"docs":{},"过":{"docs":{},"了":{"docs":{},"系":{"docs":{},"统":{"docs":{},"上":{"docs":{},"限":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"报":{"docs":{},"错":{"docs":{},"是":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"保":{"docs":{},"证":{"docs":{},"并":{"docs":{},"发":{"docs":{},"安":{"docs":{},"全":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"它":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"也":{"docs":{},"能":{"docs":{},"做":{"docs":{},"到":{"docs":{},"随":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}},"操":{"docs":{},"作":{"docs":{},"耗":{"docs":{},"时":{"docs":{},"很":{"docs":{},"短":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"每":{"docs":{},"次":{"docs":{},"睡":{"docs":{},"眠":{"docs":{},"一":{"docs":{},"微":{"docs":{},"秒":{"docs":{},"(":{"docs":{},"百":{"docs":{},"万":{"docs":{},"分":{"docs":{},"之":{"docs":{},"一":{"docs":{},"秒":{"docs":{},")":{"docs":{},"来":{"docs":{},"增":{"docs":{},"加":{"docs":{},"耗":{"docs":{},"时":{"docs":{},",":{"docs":{},"不":{"docs":{},"然":{"docs":{},"对":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"访":{"docs":{},"问":{"docs":{},"耗":{"docs":{},"时":{"docs":{},",":{"docs":{},"小":{"docs":{},"于":{"docs":{},"锁":{"docs":{},"处":{"docs":{},"理":{"docs":{},"的":{"docs":{},"本":{"docs":{},"身":{"docs":{},"耗":{"docs":{},"时":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"使":{"docs":{},"用":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"带":{"docs":{},"来":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"优":{"docs":{},"化":{"docs":{},"效":{"docs":{},"果":{"docs":{},"将":{"docs":{},"变":{"docs":{},"得":{"docs":{},"不":{"docs":{},"那":{"docs":{},"么":{"docs":{},"明":{"docs":{},"显":{"docs":{},",":{"docs":{},"甚":{"docs":{},"至":{"docs":{},"会":{"docs":{},"降":{"docs":{},"低":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"缓":{"docs":{},"冲":{"docs":{},"区":{"docs":{},"大":{"docs":{},"小":{"docs":{},"来":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}},"调":{"docs":{},"度":{"docs":{},"管":{"docs":{},"理":{"docs":{},"和":{"docs":{},"复":{"docs":{},"用":{"docs":{},",":{"docs":{},"允":{"docs":{},"许":{"docs":{},"使":{"docs":{},"用":{"docs":{},"者":{"docs":{},"在":{"docs":{},"开":{"docs":{},"发":{"docs":{},"并":{"docs":{},"发":{"docs":{},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"限":{"docs":{},"制":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}},"判":{"docs":{},"断":{"docs":{},",":{"docs":{},"来":{"docs":{},"决":{"docs":{},"定":{"docs":{},"是":{"docs":{},"否":{"docs":{},"执":{"docs":{},"行":{"docs":{},"传":{"docs":{},"入":{"docs":{},"的":{"docs":{},"任":{"docs":{},"务":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{},"执":{"docs":{},"行":{"docs":{},"任":{"docs":{},"务":{"docs":{},"函":{"docs":{},"数":{"docs":{},"前":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"锁":{"docs":{},"保":{"docs":{},"证":{"docs":{},"任":{"docs":{},"务":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"执":{"docs":{},"行":{"docs":{},"和":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"区":{"docs":{},"别":{"docs":{},"?":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"四":{"docs":{},"个":{"docs":{},"成":{"docs":{},"员":{"docs":{},"函":{"docs":{},"数":{"docs":{},"定":{"docs":{},"义":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}},"存":{"docs":{},"在":{"docs":{},"还":{"docs":{},"有":{"docs":{},"必":{"docs":{},"要":{"docs":{},"吗":{"docs":{},"?":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"打":{"docs":{},"印":{"docs":{},"顺":{"docs":{},"序":{"docs":{},"是":{"docs":{},"随":{"docs":{},"机":{"docs":{},"的":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}}}}}}},"讨":{"docs":{},"论":{"docs":{},"可":{"docs":{},"参":{"docs":{},"考":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"原":{"docs":{},"理":{"docs":{},"与":{"docs":{},"使":{"docs":{},"用":{"docs":{},"场":{"docs":{},"景":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}},"目":{"docs":{},"标":{"docs":{},"读":{"docs":{},"者":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}},"录":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}},"下":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.011834319526627219}}},",":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"具":{"docs":{},"体":{"docs":{},"业":{"docs":{},"务":{"docs":{},"目":{"docs":{},"录":{"docs":{},"下":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}},"内":{"docs":{},"部":{"docs":{},"增":{"docs":{},"加":{"docs":{},"一":{"docs":{},"些":{"docs":{},"代":{"docs":{},"码":{"docs":{},"结":{"docs":{},"构":{"docs":{},"来":{"docs":{},"区":{"docs":{},"分":{"docs":{},"共":{"docs":{},"享":{"docs":{},"和":{"docs":{},"非":{"docs":{},"共":{"docs":{},"享":{"docs":{},"的":{"docs":{},"。":{"docs":{},"虽":{"docs":{},"然":{"docs":{},"它":{"docs":{},"并":{"docs":{},"不":{"docs":{},"是":{"docs":{},"必":{"docs":{},"须":{"docs":{},"的":{"docs":{},"(":{"docs":{},"尤":{"docs":{},"其":{"docs":{},"是":{"docs":{},"小":{"docs":{},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},")":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"最":{"docs":{},"好":{"docs":{},"能":{"docs":{},"从":{"docs":{},"视":{"docs":{},"觉":{"docs":{},"上":{"docs":{},"区":{"docs":{},"分":{"docs":{},"包":{"docs":{},"的":{"docs":{},"用":{"docs":{},"途":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},"结":{"docs":{},"构":{"docs":{},"是":{"docs":{},"一":{"docs":{},"种":{"docs":{},"常":{"docs":{},"见":{"docs":{},"的":{"docs":{},"布":{"docs":{},"局":{"docs":{},"模":{"docs":{},"式":{"docs":{},",":{"docs":{},"但":{"docs":{},"并":{"docs":{},"不":{"docs":{},"是":{"docs":{},"所":{"docs":{},"有":{"docs":{},"人":{"docs":{},"都":{"docs":{},"接":{"docs":{},"受":{"docs":{},"它":{"docs":{},",":{"docs":{},"一":{"docs":{},"些":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"但":{"docs":{},"这":{"docs":{},"通":{"docs":{},"常":{"docs":{},"发":{"docs":{},"生":{"docs":{},"在":{"docs":{},"开":{"docs":{},"发":{"docs":{},"人":{"docs":{},"员":{"docs":{},"有":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}},"编":{"docs":{},"码":{"docs":{},"建":{"docs":{},"议":{"docs":{},"的":{"docs":{},"。":{"docs":{},"至":{"docs":{},"此":{"docs":{},",":{"docs":{},"本":{"docs":{},"书":{"docs":{},"应":{"docs":{},"运":{"docs":{},"而":{"docs":{},"生":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}},",":{"docs":{},"让":{"docs":{},"您":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"高":{"docs":{},"效":{"docs":{},"易":{"docs":{},"读":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}},"规":{"docs":{},"范":{"docs":{},",":{"docs":{},"但":{"docs":{},"大":{"docs":{},"同":{"docs":{},"小":{"docs":{},"异":{"docs":{},"。":{"docs":{},"规":{"docs":{},"范":{"docs":{},"是":{"docs":{},"一":{"docs":{},"种":{"docs":{},"倡":{"docs":{},"导":{"docs":{},",":{"docs":{},"不":{"docs":{},"遵":{"docs":{},"守":{"docs":{},"并":{"docs":{},"不":{"docs":{},"代":{"docs":{},"表":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"但":{"docs":{},"当":{"docs":{},"大":{"docs":{},"家":{"docs":{},"都":{"docs":{},"遵":{"docs":{},"守":{"docs":{},"规":{"docs":{},"范":{"docs":{},"时":{"docs":{},",":{"docs":{},"你":{"docs":{},"会":{"docs":{},"发":{"docs":{},"现":{"docs":{},",":{"docs":{},"整":{"docs":{},"个":{"docs":{},"世":{"docs":{},"界":{"docs":{},"将":{"docs":{},"变":{"docs":{},"得":{"docs":{},"整":{"docs":{},"洁":{"docs":{},"有":{"docs":{},"序":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"风":{"docs":{},"格":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}},"从":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"易":{"docs":{},"读":{"docs":{},"的":{"docs":{},"角":{"docs":{},"度":{"docs":{},"出":{"docs":{},"发":{"docs":{},",":{"docs":{},"参":{"docs":{},"考":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}},"为":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}},"译":{"docs":{},"不":{"docs":{},"通":{"docs":{},"过":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"无":{"docs":{},"法":{"docs":{},"对":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}},"器":{"docs":{},"一":{"docs":{},"般":{"docs":{},"为":{"docs":{},"了":{"docs":{},"减":{"docs":{},"少":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}},"对":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"分":{"docs":{},"析":{"docs":{},"决":{"docs":{},"策":{"docs":{},"远":{"docs":{},"比":{"docs":{},"我":{"docs":{},"们":{"docs":{},"想":{"docs":{},"像":{"docs":{},"的":{"docs":{},"要":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"。":{"docs":{},"我":{"docs":{},"们":{"docs":{},"只":{"docs":{},"能":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"地":{"docs":{},"去":{"docs":{},"勾":{"docs":{},"勒":{"docs":{},"而":{"docs":{},"无":{"docs":{},"以":{"docs":{},"绘":{"docs":{},"其":{"docs":{},"全":{"docs":{},"貌":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"而":{"docs":{},"言":{"docs":{},",":{"docs":{},"超":{"docs":{},"过":{"docs":{},"一":{"docs":{},"定":{"docs":{},"大":{"docs":{},"小":{"docs":{},"的":{"docs":{},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{},"将":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"到":{"docs":{},"堆":{"docs":{},"上":{"docs":{},",":{"docs":{},"不":{"docs":{},"同":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}},"时":{"docs":{},"可":{"docs":{},"以":{"docs":{},"借":{"docs":{},"助":{"docs":{},"选":{"docs":{},"项":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}},"后":{"docs":{},"的":{"docs":{},"机":{"docs":{},"器":{"docs":{},"码":{"docs":{},"指":{"docs":{},"令":{"docs":{},"更":{"docs":{},"少":{"docs":{},",":{"docs":{},"更":{"docs":{},"直":{"docs":{},"接":{"docs":{},",":{"docs":{},"必":{"docs":{},"然":{"docs":{},"是":{"docs":{},"能":{"docs":{},"够":{"docs":{},"提":{"docs":{},"升":{"docs":{},"性":{"docs":{},"能":{"docs":{},"的":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"虽":{"docs":{},"然":{"docs":{},"简":{"docs":{},"单":{"docs":{},",":{"docs":{},"但":{"docs":{},"其":{"docs":{},"功":{"docs":{},"能":{"docs":{},"特":{"docs":{},"性":{"docs":{},"却":{"docs":{},"不":{"docs":{},"单":{"docs":{},"一":{"docs":{},"。":{"docs":{},"其":{"docs":{},"丰":{"docs":{},"富":{"docs":{},"的":{"docs":{},"语":{"docs":{},"言":{"docs":{},"特":{"docs":{},"性":{"docs":{},",":{"docs":{},"在":{"docs":{},"使":{"docs":{},"用":{"docs":{},"时":{"docs":{},"还":{"docs":{},"是":{"docs":{},"有":{"docs":{},"很":{"docs":{},"多":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"姿":{"docs":{},"势":{"docs":{},"。":{"docs":{},"本":{"docs":{},"书":{"docs":{},"从":{"docs":{},"功":{"docs":{},"能":{"docs":{},"特":{"docs":{},"性":{"docs":{},"出":{"docs":{},"发":{"docs":{},",":{"docs":{},"给":{"docs":{},"出":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"默":{"docs":{},"认":{"docs":{},"为":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},"这":{"docs":{},"些":{"docs":{},"使":{"docs":{},"用":{"docs":{},"内":{"docs":{},"置":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{},"的":{"docs":{},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"字":{"docs":{},"段":{"docs":{},"可":{"docs":{},"以":{"docs":{},"编":{"docs":{},"译":{"docs":{},"通":{"docs":{},"过":{"docs":{},",":{"docs":{},"但":{"docs":{},"对":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}},"轻":{"docs":{},"量":{"docs":{},",":{"docs":{},"但":{"docs":{},"天":{"docs":{},"下":{"docs":{},"没":{"docs":{},"有":{"docs":{},"免":{"docs":{},"费":{"docs":{},"的":{"docs":{},"午":{"docs":{},"餐":{"docs":{},",":{"docs":{},"无":{"docs":{},"休":{"docs":{},"止":{"docs":{},"地":{"docs":{},"开":{"docs":{},"辟":{"docs":{},"大":{"docs":{},"量":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}},"语":{"docs":{},"法":{"docs":{},"知":{"docs":{},"识":{"docs":{},"和":{"docs":{},"语":{"docs":{},"言":{"docs":{},"特":{"docs":{},"性":{"docs":{},"与":{"docs":{},",":{"docs":{},"也":{"docs":{},"建":{"docs":{},"议":{"docs":{},"先":{"docs":{},"略":{"docs":{},"过":{"docs":{},"本":{"docs":{},"书":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}},"言":{"docs":{},"圣":{"docs":{},"经":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}},"基":{"docs":{},"础":{"docs":{},"和":{"docs":{},"实":{"docs":{},"战":{"docs":{},"的":{"docs":{},",":{"docs":{},"有":{"docs":{},"对":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},"原":{"docs":{},"理":{"docs":{},",":{"docs":{},"还":{"docs":{},"是":{"docs":{},"建":{"docs":{},"议":{"docs":{},"先":{"docs":{},"略":{"docs":{},"过":{"docs":{},"本":{"docs":{},"书":{"docs":{},"。":{"docs":{},"虽":{"docs":{},"然":{"docs":{},"本":{"docs":{},"书":{"docs":{},"略":{"docs":{},"有":{"docs":{},"涉":{"docs":{},"及":{"docs":{},",":{"docs":{},"但":{"docs":{},"不":{"docs":{},"够":{"docs":{},"全":{"docs":{},"面":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"特":{"docs":{},"性":{"docs":{},",":{"docs":{},"从":{"docs":{},"常":{"docs":{},"用":{"docs":{},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"docs":{},"、":{"docs":{},"内":{"docs":{},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{},"和":{"docs":{},"并":{"docs":{},"发":{"docs":{},",":{"docs":{},"三":{"docs":{},"个":{"docs":{},"方":{"docs":{},"面":{"docs":{},"给":{"docs":{},"出":{"docs":{},"相":{"docs":{},"关":{"docs":{},"建":{"docs":{},"议":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"为":{"docs":{},"书":{"docs":{},"写":{"docs":{},"高":{"docs":{},"效":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"力":{"docs":{},"争":{"docs":{},"从":{"docs":{},"常":{"docs":{},"用":{"docs":{},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"docs":{},"、":{"docs":{},"内":{"docs":{},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{},"和":{"docs":{},"并":{"docs":{},"发":{"docs":{},"编":{"docs":{},"程":{"docs":{},"三":{"docs":{},"个":{"docs":{},"方":{"docs":{},"面":{"docs":{},"给":{"docs":{},"出":{"docs":{},"相":{"docs":{},"关":{"docs":{},"建":{"docs":{},"议":{"docs":{},"。":{"docs":{},"话":{"docs":{},"不":{"docs":{},"多":{"docs":{},"说":{"docs":{},",":{"docs":{},"让":{"docs":{},"我":{"docs":{},"们":{"docs":{},"一":{"docs":{},"起":{"docs":{},"学":{"docs":{},"习":{"docs":{"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"自":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}},"设":{"docs":{},"计":{"docs":{},"与":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"会":{"docs":{},"大":{"docs":{},"有":{"docs":{},"收":{"docs":{},"获":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}},"规":{"docs":{},"范":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"提":{"docs":{},"供":{"docs":{},"了":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"动":{"docs":{},"态":{"docs":{},"获":{"docs":{},"取":{"docs":{},"对":{"docs":{},"象":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"和":{"docs":{},"值":{"docs":{},"以":{"docs":{},"及":{"docs":{},"动":{"docs":{},"态":{"docs":{},"创":{"docs":{},"建":{"docs":{},"对":{"docs":{},"象":{"docs":{},"的":{"docs":{},"能":{"docs":{},"力":{"docs":{},"。":{"docs":{},"反":{"docs":{},"射":{"docs":{},"可":{"docs":{},"以":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"抽":{"docs":{},"象":{"docs":{},"和":{"docs":{},"简":{"docs":{},"化":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"提":{"docs":{},"高":{"docs":{},"开":{"docs":{},"发":{"docs":{},"效":{"docs":{},"率":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{},"以":{"docs":{},"及":{"docs":{},"很":{"docs":{},"多":{"docs":{},"开":{"docs":{},"源":{"docs":{},"软":{"docs":{},"件":{"docs":{},"中":{"docs":{},"都":{"docs":{},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}},"没":{"docs":{},"有":{"docs":{},"提":{"docs":{},"供":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},"的":{"docs":{},"反":{"docs":{},"射":{"docs":{},"能":{"docs":{},"力":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{},"用":{"docs":{},"于":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},"和":{"docs":{},"反":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"之":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}},"高":{"docs":{},"性":{"docs":{},"能":{"docs":{},"编":{"docs":{},"程":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}},"句":{"docs":{},"前":{"docs":{},"不":{"docs":{},"要":{"docs":{},"换":{"docs":{},"行":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}},"之":{"docs":{},"后":{"docs":{},"(":{"docs":{},"所":{"docs":{},"有":{"docs":{},"迭":{"docs":{},"代":{"docs":{},"之":{"docs":{},"后":{"docs":{},")":{"docs":{},",":{"docs":{},"即":{"docs":{},"所":{"docs":{},"在":{"docs":{},"函":{"docs":{},"数":{"docs":{},"结":{"docs":{},"束":{"docs":{},"时":{"docs":{},",":{"docs":{},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}}}}}}}}}}}}}}}}},"来":{"docs":{},"保":{"docs":{},"证":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"一":{"docs":{},"定":{"docs":{},"会":{"docs":{},"被":{"docs":{},"解":{"docs":{},"锁":{"docs":{},"。":{"docs":{},"在":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}},"进":{"docs":{},"行":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"高":{"docs":{},"性":{"docs":{},"能":{"docs":{},"编":{"docs":{},"程":{"docs":{},"的":{"docs":{},",":{"docs":{},"等":{"docs":{},"等":{"docs":{},"。":{"docs":{},"很":{"docs":{},"遗":{"docs":{},"憾":{"docs":{},"的":{"docs":{},"是":{"docs":{},",":{"docs":{},"没":{"docs":{},"有":{"docs":{},"发":{"docs":{},"现":{"docs":{},"一":{"docs":{},"个":{"docs":{},"系":{"docs":{},"统":{"docs":{},"介":{"docs":{},"绍":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}},"自":{"docs":{},"动":{"docs":{},"化":{"docs":{},"管":{"docs":{},"理":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"或":{"docs":{},"使":{"docs":{},"用":{"docs":{},"空":{"docs":{},"白":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{},"忽":{"docs":{},"略":{"docs":{},"。":{"docs":{},"对":{"docs":{},"于":{"docs":{},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}},"匹":{"docs":{},"配":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"那":{"docs":{},"么":{"docs":{},"到":{"docs":{},"底":{"docs":{},"是":{"docs":{},"谁":{"docs":{},"适":{"docs":{},"合":{"docs":{},"阅":{"docs":{},"读":{"docs":{},"本":{"docs":{},"书":{"docs":{},"呢":{"docs":{},"?":{"docs":{},"如":{"docs":{},"果":{"docs":{},"你":{"docs":{},"是":{"docs":{},"一":{"docs":{},"位":{"docs":{},"有":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}},"对":{"docs":{},"于":{"docs":{},"稍":{"docs":{},"微":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"一":{"docs":{},"点":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}},"多":{"docs":{},"大":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{},"才":{"docs":{},"算":{"docs":{},"是":{"docs":{},"小":{"docs":{},"变":{"docs":{},"量":{"docs":{},"呢":{"docs":{},"?":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}},"如":{"docs":{},"果":{"docs":{},"我":{"docs":{},"们":{"docs":{},"将":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}},"项":{"docs":{},"目":{"docs":{},"布":{"docs":{},"局":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":10}},"参":{"docs":{},"考":{"docs":{},"业":{"docs":{},"界":{"docs":{},"认":{"docs":{},"可":{"docs":{},"度":{"docs":{},"较":{"docs":{},"高":{"docs":{},"的":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}},"代":{"docs":{},"码":{"docs":{},"风":{"docs":{},"格":{"docs":{},"功":{"docs":{},"能":{"docs":{},"设":{"docs":{},"计":{"docs":{},"最":{"docs":{},"佳":{"docs":{},"性":{"docs":{},"能":{"docs":{},"项":{"docs":{},"目":{"docs":{},"布":{"docs":{},"局":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}}}}},"依":{"docs":{},"赖":{"docs":{},"的":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"工":{"docs":{},"具":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}},"工":{"docs":{},"具":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"文":{"docs":{},"档":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"用":{"docs":{},"到":{"docs":{},"的":{"docs":{},"相":{"docs":{},"关":{"docs":{},"资":{"docs":{},"源":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"项":{"docs":{},"目":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}},"确":{"docs":{},"实":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"网":{"docs":{},"站":{"docs":{},"数":{"docs":{},"据":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"说":{"docs":{},"明":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"资":{"docs":{},"源":{"docs":{},"文":{"docs":{},"件":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"配":{"docs":{},"套":{"docs":{},"工":{"docs":{},"具":{"docs":{},",":{"docs":{},"实":{"docs":{},"现":{"docs":{},"这":{"docs":{},"些":{"docs":{},"工":{"docs":{},"具":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{},"从":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}},"中":{"docs":{},"使":{"docs":{},"用":{"docs":{},"的":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"高":{"docs":{},"性":{"docs":{},"能":{"docs":{},"编":{"docs":{},"码":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}},"程":{"docs":{},"技":{"docs":{},"法":{"docs":{},"吧":{"docs":{},"。":{"docs":{"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456}}}}}}}}}},"效":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"是":{"docs":{},"我":{"docs":{},"们":{"docs":{},"每":{"docs":{},"一":{"docs":{},"个":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}},",":{"docs":{},"并":{"docs":{},"结":{"docs":{},"合":{"docs":{},"自":{"docs":{},"身":{"docs":{},"项":{"docs":{},"目":{"docs":{},"团":{"docs":{},"队":{"docs":{},"编":{"docs":{},"码":{"docs":{},"规":{"docs":{},"范":{"docs":{},",":{"docs":{},"力":{"docs":{},"争":{"docs":{},"给":{"docs":{},"出":{"docs":{},"全":{"docs":{},"面":{"docs":{},"、":{"docs":{},"认":{"docs":{},"可":{"docs":{},"度":{"docs":{},"较":{"docs":{},"高":{"docs":{},"的":{"docs":{},"编":{"docs":{},"码":{"docs":{},"风":{"docs":{},"格":{"docs":{},",":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"大":{"docs":{},"家":{"docs":{},"写":{"docs":{},"出":{"docs":{},"风":{"docs":{},"格":{"docs":{},"统":{"docs":{},"一":{"docs":{},"的":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"高":{"docs":{},"效":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"t":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"大":{"docs":{},"部":{"docs":{},"分":{"docs":{},"的":{"docs":{},"格":{"docs":{},"式":{"docs":{},"问":{"docs":{},"题":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}},"此":{"docs":{},"工":{"docs":{},"具":{"docs":{},"在":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}},"类":{"docs":{},"似":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}},"而":{"docs":{},"不":{"docs":{},"应":{"docs":{},"全":{"docs":{},"部":{"docs":{},"零":{"docs":{},"散":{"docs":{},"放":{"docs":{},"在":{"docs":{},"一":{"docs":{},"个":{"docs":{},"大":{"docs":{},"类":{"docs":{},"型":{"docs":{},"中":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}},"u":{"docs":{},"n":{"docs":{},"s":{"docs":{},"a":{"docs":{},"f":{"docs":{},"e":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"o":{"docs":{},"f":{"docs":{},"(":{"docs":{},"x":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}},"字":{"docs":{},"长":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"若":{"docs":{},"缓":{"docs":{},"存":{"docs":{},"区":{"docs":{},"满":{"docs":{},",":{"docs":{},"则":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"。":{"docs":{},"协":{"docs":{},"程":{"docs":{},"任":{"docs":{},"务":{"docs":{},"结":{"docs":{},"束":{"docs":{},",":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}},"#":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.01775147928994083},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}}},")":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.04516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.013237063778580024},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.02857142857142857},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"、":{"docs":{},"容":{"docs":{},"器":{"docs":{},"(":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"操":{"docs":{},"作":{"docs":{},"系":{"docs":{},"统":{"docs":{},"(":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"包":{"docs":{},"配":{"docs":{},"置":{"docs":{},"和":{"docs":{},"脚":{"docs":{},"本":{"docs":{},"放":{"docs":{},"在":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}},"/":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},"s":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"b":{"docs":{},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"/":{"docs":{},"c":{"docs":{},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"a":{"docs":{},"g":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}},"c":{"docs":{},"m":{"docs":{},"d":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"d":{"docs":{},"e":{"docs":{},"p":{"docs":{},"l":{"docs":{},"o":{"docs":{},"y":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"o":{"docs":{},"c":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"e":{"docs":{},"x":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.011834319526627219}},"a":{"docs":{},"l":{"docs":{},"/":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"/":{"docs":{},"m":{"docs":{},"y":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}},"p":{"docs":{},"k":{"docs":{},"g":{"docs":{},"/":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}},"p":{"docs":{},"k":{"docs":{},"g":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.014792899408284023}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"m":{"docs":{},"d":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"r":{"docs":{},"c":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"/":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"。":{"docs":{},"请":{"docs":{},"注":{"docs":{},"意":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"你":{"docs":{},"需":{"docs":{},"要":{"docs":{},"忽":{"docs":{},"略":{"docs":{},"目":{"docs":{},"录":{"docs":{},"中":{"docs":{},"的":{"docs":{},"内":{"docs":{},"容":{"docs":{},",":{"docs":{},"g":{"docs":{},"o":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"i":{"docs":{},"r":{"docs":{},"d":{"docs":{},"_":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"r":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"w":{"docs":{},"e":{"docs":{},"b":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"s":{"docs":{},"i":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"/":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.03508771929824561},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.08796296296296297},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.06896551724137931},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.06451612903225806},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.07942238267148015},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0622568093385214},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.07749077490774908},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.0756578947368421},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.07084019769357495},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.05612244897959184},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.037037037037037035},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.06862745098039216},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.08152173913043478},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.05714285714285714},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.04411764705882353},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.0625},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.07692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.03305785123966942},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.09259259259259259},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.05387205387205387},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.04954954954954955},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0784313725490196},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.046875},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.10059171597633136},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.03258145363408521},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.03355704697986577},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.01444043321299639},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.013793103448275862},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.035897435897435895},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.04732824427480916},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.015945330296127564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.09090909090909091},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.06216696269982238}},"手":{"docs":{},"动":{"docs":{},"抛":{"docs":{},"出":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"/":{"docs":{},"d":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"l":{"docs":{},"v":{"docs":{},"/":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"/":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"/":{"docs":{},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},":":{"1":{"4":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"6":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"/":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"/":{"docs":{},"g":{"docs":{},"o":{"docs":{},"/":{"docs":{},"s":{"docs":{},"r":{"docs":{},"c":{"docs":{},"/":{"docs":{},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},":":{"2":{"6":{"5":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"7":{"4":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"a":{"docs":{},"l":{"docs":{},"/":{"docs":{},"p":{"docs":{},"o":{"docs":{},"l":{"docs":{},"l":{"docs":{},"/":{"docs":{},"f":{"docs":{},"d":{"docs":{},"_":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},":":{"1":{"4":{"7":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"2":{"3":{"9":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"x":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},":":{"2":{"6":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"s":{"docs":{},"/":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},":":{"1":{"7":{"6":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}}}}},"_":{"docs":{},"p":{"docs":{},"o":{"docs":{},"s":{"docs":{},"i":{"docs":{},"x":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},":":{"4":{"9":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"*":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.013513513513513514}}}},"b":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.03103448275862069}},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}}},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.021739130434782608},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"s":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},";":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}},"f":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},",":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}},")":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}},"a":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"d":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.023148148148148147},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.034482758620689655},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.025806451612903226},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.013618677042801557},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.011513157894736841},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.019769357495881382},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.011904761904761904},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.024793388429752067},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.013513513513513514},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.011834319526627219},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308}},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}},"r":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.013468013468013467}},"/":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{},",":{"docs":{},"后":{"docs":{},"者":{"docs":{},"导":{"docs":{},"入":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}},"(":{"docs":{},"&":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}},"i":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}},"z":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}},"s":{"docs":{},"i":{"docs":{},"c":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}},"c":{"docs":{},"k":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"o":{"docs":{},"d":{"docs":{},"i":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.018518518518518517}}}},"o":{"docs":{},"l":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.023391812865497075}},")":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}}}}},"t":{"docs":{},"h":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},"l":{"docs":{},"u":{"docs":{},"e":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}},"o":{"docs":{},"g":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"a":{"docs":{},"n":{"docs":{},"k":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}},"r":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"a":{"docs":{},"d":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}}}}}}}}}}},"e":{"docs":{},"a":{"docs":{},"k":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}}}}}},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},"s":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.01904761904761905}},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"[":{"docs":{},"]":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"r":{"docs":{},"e":{"docs":{},"q":{"docs":{},")":{"docs":{},")":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"b":{"docs":{},"y":{"docs":{},"s":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},"f":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693}}}}}}}},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}}}}}}}},"[":{"docs":{},"]":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259}}}}}}},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},".":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}},"e":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"v":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}},"n":{"docs":{},"c":{"docs":{},"h":{"docs":{},"=":{"docs":{},".":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"b":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"h":{"docs":{},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"k":{"docs":{},"n":{"docs":{},"t":{"docs":{},"o":{"docs":{},"h":{"docs":{},"l":{"docs":{},".":{"docs":{},"*":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"t":{"docs":{},"o":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}},"e":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}},"^":{"docs":{},"b":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"h":{"docs":{},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"k":{"docs":{},"j":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"$":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}},"p":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"$":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"k":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}}},"3":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}}},"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}}},"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"s":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}},"u":{"6":{"4":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}},"docs":{}},"docs":{}}}}}}}},"n":{"docs":{},"t":{"docs":{},"o":{"docs":{},"h":{"docs":{},"l":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"t":{"docs":{},"o":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}},"e":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"e":{"docs":{},"e":{"docs":{},"s":{"docs":{},"c":{"docs":{},"a":{"docs":{},"p":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}},"n":{"docs":{},"o":{"docs":{},"e":{"docs":{},"s":{"docs":{},"c":{"docs":{},"a":{"docs":{},"p":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}},"j":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},"b":{"docs":{},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}},"e":{"docs":{},"r":{"docs":{},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}},"j":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},"f":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}},"e":{"docs":{},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"x":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}},"p":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},"e":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"c":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}},"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"x":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}},"t":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}},"p":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}},"e":{"docs":{},"t":{"docs":{},"p":{"docs":{},"t":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"e":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"w":{"docs":{},"e":{"docs":{},"q":{"docs":{},"u":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"y":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}}}}}}}}},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},"f":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"e":{"docs":{},"r":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{},"u":{"docs":{},"r":{"docs":{},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"n":{"docs":{},"o":{"docs":{},"s":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{},"d":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"e":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}},"w":{"docs":{},"e":{"docs":{},"q":{"docs":{},"u":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"/":{"docs":{},"o":{"docs":{},"p":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.01567398119122257},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.018223234624145785},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}},"i":{"docs":{},"n":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"y":{"docs":{},".":{"docs":{},"b":{"docs":{},"i":{"docs":{},"g":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"i":{"docs":{},"a":{"docs":{},"n":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203}},"(":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}},"e":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}},"g":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}},"d":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},"e":{"docs":{},"b":{"docs":{},"、":{"docs":{},"r":{"docs":{},"p":{"docs":{},"m":{"docs":{},"、":{"docs":{},"p":{"docs":{},"k":{"docs":{},"g":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}},"u":{"docs":{},"g":{"docs":{},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"g":{"docs":{},"c":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"c":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"(":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"l":{"docs":{},"o":{"docs":{},"y":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"f":{"docs":{},"a":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}},":":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}},"e":{"docs":{},"r":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.009727626459143969},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.006589785831960461},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.017006802721088437},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":3.427083333333333},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":3.379487179487179},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125}}},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"这":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"资":{"docs":{},"源":{"docs":{},"泄":{"docs":{},"漏":{"docs":{},"(":{"docs":{},"p":{"docs":{},"o":{"docs":{},"s":{"docs":{},"s":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}}}}}}},"释":{"docs":{},"放":{"docs":{},"资":{"docs":{},"源":{"docs":{},"不":{"docs":{},"会":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"早":{"docs":{},"地":{"docs":{},"发":{"docs":{},"生":{"docs":{},"(":{"docs":{},"在":{"docs":{},"每":{"docs":{},"次":{"docs":{},"迭":{"docs":{},"代":{"docs":{},"结":{"docs":{},"束":{"docs":{},"时":{"docs":{},")":{"docs":{},",":{"docs":{},"只":{"docs":{},"有":{"docs":{},"在":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"资":{"docs":{},"源":{"docs":{},"将":{"docs":{},"在":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"时":{"docs":{},"被":{"docs":{},"立":{"docs":{},"即":{"docs":{},"释":{"docs":{},"放":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{},"和":{"docs":{},"类":{"docs":{},"型":{"docs":{},"别":{"docs":{},"名":{"docs":{},"(":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}},"m":{"docs":{},"o":{"1":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}},":":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}},"2":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}},":":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}},"3":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}},"4":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"docs":{},"g":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"h":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"e":{"docs":{},"(":{"docs":{},"m":{"docs":{},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}},"(":{"docs":{},"a":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}},"(":{"docs":{},"a":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"3":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}},"(":{"docs":{},"a":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}},"(":{"docs":{},"a":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"s":{"docs":{},"(":{"docs":{},"i":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}},"u":{"6":{"4":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"s":{"docs":{},"(":{"docs":{},"i":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}},"docs":{}},"docs":{}}}}},"a":{"docs":{},"y":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},")":{"docs":{},"来":{"docs":{},"访":{"docs":{},"问":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"标":{"docs":{},"准":{"docs":{},"输":{"docs":{},"出":{"docs":{},"的":{"docs":{},"文":{"docs":{},"件":{"docs":{},"描":{"docs":{},"述":{"docs":{},"符":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}},"o":{"docs":{},"c":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}},",":{"docs":{},"参":{"docs":{},"数":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"f":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"n":{"docs":{},"e":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.024390243902439025},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.010657193605683837}}}},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.017543859649122806}},"\"":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537}}}},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537}}},",":{"docs":{},"在":{"docs":{},"这":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"d":{"docs":{},"o":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}},":":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}},"s":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},"(":{"docs":{},"f":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.024691358024691357},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"b":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"/":{"docs":{},"s":{"docs":{},"q":{"docs":{},"l":{"docs":{},"、":{"docs":{},"编":{"docs":{},"码":{"docs":{},"类":{"docs":{},"型":{"docs":{},"注":{"docs":{},"册":{"docs":{},"表":{"docs":{},"等":{"docs":{},";":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"t":{"docs":{},"l":{"docs":{},"(":{"docs":{},"c":{"docs":{},"t":{"docs":{},"x":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"、":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}},":":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}}},"。":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}},"e":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}},"y":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"r":{"docs":{},"w":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"/":{"docs":{},"a":{"docs":{},"m":{"docs":{},"d":{"6":{"4":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}},"docs":{}}}}}}}}},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"l":{"docs":{},"v":{"docs":{},"@":{"docs":{},"d":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"l":{"docs":{},"v":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}},"r":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"b":{"docs":{},".":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"r":{"docs":{},"y":{"docs":{},"(":{"docs":{},"v":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}},".":{"docs":{},".":{"docs":{},".":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.015384615384615385}}},".":{"docs":{},".":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}}}}}},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{},"(":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.010869565217391304}}}}}}},"y":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}}},"i":{"docs":{},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"u":{"docs":{},"r":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}},"h":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.006578947368421052},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"s":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"y":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}},"g":{"docs":{},"o":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"i":{"docs":{},"s":{"docs":{},"s":{"docs":{},"u":{"docs":{},"e":{"docs":{},"/":{"2":{"3":{"1":{"9":{"9":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}}},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}},"p":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.0392156862745098}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"e":{"docs":{},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"l":{"docs":{},".":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.005836575875486381},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.015384615384615385},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.016835016835016835}},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"(":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"m":{"docs":{},"s":{"docs":{},"g":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.0196078431372549}}}}}}},"s":{"docs":{},",":{"docs":{},"i":{"docs":{},"s":{"docs":{},",":{"docs":{},"c":{"docs":{},"a":{"docs":{},"n":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"(":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"h":{"0":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}},"(":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}},"l":{"docs":{},"f":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"r":{"docs":{},"d":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"e":{"docs":{},"l":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}},"a":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},".":{"docs":{},"(":{"docs":{},"*":{"docs":{},"n":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}},"n":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}},"p":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"r":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.03067484662576687}}},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.03067484662576687}}}}},"l":{"docs":{},"d":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.008152173913043478},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}},"w":{"docs":{},"e":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.03125},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0066518847006651885}}}},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"n":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}},"g":{"docs":{},"h":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{},"s":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},".":{"docs":{},"o":{"docs":{},"l":{"docs":{},"d":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}}}},"o":{"docs":{},"l":{"docs":{},"d":{"docs":{},"b":{"docs":{},"u":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{},"s":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}}}}}},"i":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{},"a":{"docs":{},"a":{"docs":{},"s":{"docs":{},"、":{"docs":{},"p":{"docs":{},"a":{"docs":{},"a":{"docs":{},"s":{"docs":{},"、":{"docs":{},"系":{"docs":{},"统":{"docs":{},"和":{"docs":{},"容":{"docs":{},"器":{"docs":{},"编":{"docs":{},"排":{"docs":{},"部":{"docs":{},"署":{"docs":{},"配":{"docs":{},"置":{"docs":{},"和":{"docs":{},"模":{"docs":{},"板":{"docs":{},"(":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"6":{"4":{"docs":{},"(":{"0":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"docs":{}}},"docs":{}},"docs":{},"i":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.00842358604091456}},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},",":{"docs":{},"当":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"i":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"t":{"1":{"6":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}},"docs":{}},"3":{"2":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.013793103448275862},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"docs":{}},"6":{"4":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}},"docs":{}},"8":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.008237232289950576},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.008152173913043478},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.02857142857142857},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.013513513513513514},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537}},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.008875739644970414}},"a":{"docs":{},"l":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"名":{"docs":{},"为":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"/":{"docs":{},"p":{"docs":{},"o":{"docs":{},"l":{"docs":{},"l":{"docs":{},".":{"docs":{},"(":{"docs":{},"*":{"docs":{},"f":{"docs":{},"d":{"docs":{},")":{"docs":{},".":{"docs":{},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"0":{"docs":{},"x":{"docs":{},"c":{"0":{"0":{"0":{"0":{"docs":{},"a":{"docs":{},"e":{"0":{"6":{"0":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}},"docs":{}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}},"docs":{}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},")":{"docs":{},".":{"docs":{},"r":{"docs":{},"w":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"0":{"docs":{},"x":{"docs":{},"c":{"0":{"0":{"0":{"0":{"docs":{},"a":{"docs":{},"e":{"0":{"6":{"0":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}},"docs":{}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":3.333333333333333},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":3.333333333333333},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}},"e":{"docs":{},"{":{"docs":{},"}":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.024691358024691357},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},")":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"需":{"docs":{},"要":{"docs":{},"类":{"docs":{},"型":{"docs":{},"转":{"docs":{},"换":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},",":{"docs":{},"这":{"docs":{},"将":{"docs":{},"为":{"docs":{},"开":{"docs":{},"发":{"docs":{},"人":{"docs":{},"员":{"docs":{},"提":{"docs":{},"供":{"docs":{},"更":{"docs":{},"大":{"docs":{},"的":{"docs":{},"灵":{"docs":{},"活":{"docs":{},"性":{"docs":{},"来":{"docs":{},"改":{"docs":{},"变":{"docs":{},"未":{"docs":{},"来":{"docs":{},",":{"docs":{},"但":{"docs":{},"仍":{"docs":{},"然":{"docs":{},"泄":{"docs":{},"露":{"docs":{},"了":{"docs":{},"具":{"docs":{},"体":{"docs":{},"列":{"docs":{},"表":{"docs":{},"使":{"docs":{},"用":{"docs":{},"抽":{"docs":{},"象":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"细":{"docs":{},"节":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}},"a":{"docs":{},"l":{"docs":{},"m":{"docs":{},"i":{"docs":{},"l":{"docs":{},"l":{"docs":{},"i":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}},"l":{"docs":{},"(":{"docs":{},"r":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"(":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.018050541516245487},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.037037037037037035},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"是":{"docs":{},"类":{"docs":{},"型":{"docs":{},"是":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"r":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}},"n":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}},"r":{"docs":{},"n":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}},"f":{"docs":{},"o":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}},"d":{"docs":{},"e":{"docs":{},"x":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}},",":{"docs":{},"记":{"docs":{},"录":{"docs":{},"下":{"docs":{},"一":{"docs":{},"个":{"docs":{},"有":{"docs":{},"效":{"docs":{},"元":{"docs":{},"素":{"docs":{},"应":{"docs":{},"该":{"docs":{},"在":{"docs":{},"的":{"docs":{},"位":{"docs":{},"置":{"docs":{},"。":{"docs":{},"遍":{"docs":{},"历":{"docs":{},"所":{"docs":{},"有":{"docs":{},"元":{"docs":{},"素":{"docs":{},",":{"docs":{},"当":{"docs":{},"遇":{"docs":{},"到":{"docs":{},"有":{"docs":{},"效":{"docs":{},"元":{"docs":{},"素":{"docs":{},",":{"docs":{},"将":{"docs":{},"其":{"docs":{},"移":{"docs":{},"动":{"docs":{},"到":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"c":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},"e":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}},"v":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}},"k":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"s":{"docs":{},"o":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}}},"\"":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}},"e":{"docs":{},"m":{"docs":{},"p":{"docs":{},"t":{"docs":{},"y":{"docs":{},"(":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}},"a":{"docs":{},"l":{"docs":{},",":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"u":{"docs":{},"e":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"(":{"docs":{},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{},",":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"n":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549}}}}}}}}}}}},"d":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.00510204081632653},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"]":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}},"]":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}},"m":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.08387096774193549},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}}},"l":{"docs":{},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0066518847006651885},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"a":{"docs":{},"g":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"m":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"y":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}},"/":{"docs":{},"o":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},",":{"docs":{},"包":{"docs":{},"括":{"docs":{},"文":{"docs":{},"件":{"docs":{},"系":{"docs":{},"统":{"docs":{},"、":{"docs":{},"网":{"docs":{},"络":{"docs":{},"和":{"docs":{},"系":{"docs":{},"统":{"docs":{},"调":{"docs":{},"用":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"o":{"docs":{},"t":{"docs":{},"a":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.05714285714285714}}}},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},";":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"(":{"docs":{},"f":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}}}}},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"(":{"docs":{},"\"":{"docs":{},".":{"docs":{},"/":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"s":{"docs":{},"\"":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308}}}}}}}}}}}}}}}}}}}}}}}}},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},",":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}},".":{"docs":{},"(":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.005836575875486381}}}}}}}}}}},"f":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"s":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{},"n":{"docs":{},"g":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"程":{"docs":{},"序":{"docs":{},"退":{"docs":{},"出":{"docs":{},"方":{"docs":{},"式":{"docs":{},"i":{"docs":{},"f":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"a":{"docs":{},"c":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}},",":{"docs":{},"是":{"docs":{},"因":{"docs":{},"为":{"docs":{},"当":{"docs":{},"前":{"docs":{},"协":{"docs":{},"程":{"docs":{},"被":{"docs":{},"唤":{"docs":{},"醒":{"docs":{},"时":{"docs":{},",":{"docs":{},"条":{"docs":{},"件":{"docs":{},"不":{"docs":{},"一":{"docs":{},"定":{"docs":{},"符":{"docs":{},"合":{"docs":{},"要":{"docs":{},"求":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"再":{"docs":{},"次":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.018808777429467086}},"s":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}},"g":{"docs":{},"n":{"docs":{},"o":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}},"p":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"k":{"1":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"2":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"3":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}},"u":{"docs":{},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"e":{"docs":{},"y":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.006589785831960461},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}},"e":{"docs":{},"p":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},",":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"b":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"o":{"docs":{},"f":{"docs":{},"f":{"docs":{},"i":{"docs":{},"c":{"docs":{},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},")":{"docs":{},"。":{"docs":{},"在":{"docs":{},"机":{"docs":{},"器":{"docs":{},"码":{"docs":{},"中":{"docs":{},",":{"docs":{},"偏":{"docs":{},"移":{"docs":{},"量":{"docs":{},"是":{"docs":{},"随":{"docs":{},"指":{"docs":{},"令":{"docs":{},"传":{"docs":{},"递":{"docs":{},"的":{"docs":{},"附":{"docs":{},"加":{"docs":{},"值":{"docs":{},",":{"docs":{},"c":{"docs":{},"p":{"docs":{},"u":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}},"b":{"docs":{},"s":{"docs":{},"d":{"docs":{},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}}}},"r":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.006016847172081829},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.0380952380952381},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"t":{"docs":{},"o":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"(":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}},"r":{"docs":{},"w":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"(":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}}}}}},"s":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}},"e":{"docs":{},"n":{"docs":{},"v":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"g":{"docs":{},"o":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},"\"":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{},"\"":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"1":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"docs":{}}}}}},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"s":{"docs":{},"[":{"1":{"docs":{},":":{"docs":{},"]":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}},"docs":{}}}}}},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"(":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.004942339373970346}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"d":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},",":{"docs":{},"相":{"docs":{},"当":{"docs":{},"于":{"docs":{},"直":{"docs":{},"接":{"docs":{},"输":{"docs":{},"出":{"docs":{},"到":{"docs":{},"标":{"docs":{},"准":{"docs":{},"输":{"docs":{},"出":{"docs":{},"。":{"docs":{},"这":{"docs":{},"里":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}},"(":{"docs":{},"*":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},")":{"docs":{},".":{"docs":{},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"0":{"docs":{},"x":{"docs":{},"c":{"0":{"0":{"0":{"0":{"docs":{},"a":{"docs":{},"c":{"0":{"0":{"8":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}},"docs":{}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}},"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}},"k":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.005836575875486381},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"u":{"docs":{},"t":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}},".":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"l":{"docs":{},"d":{"docs":{},"b":{"docs":{},"u":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.008152173913043478}}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.024456521739130436}}}}}}}}},"b":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"n":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"e":{"docs":{},".":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}},"c":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.015521064301552107}},"e":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},"d":{"docs":{},"o":{"docs":{},"(":{"docs":{},"f":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}},".":{"docs":{},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},",":{"docs":{},"在":{"docs":{},"热":{"docs":{},"路":{"docs":{},"径":{"docs":{},"上":{"docs":{},"是":{"docs":{},"比":{"docs":{},"较":{"docs":{},"好":{"docs":{},"理":{"docs":{},"解":{"docs":{},"的":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},"(":{"docs":{},"f":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}},"m":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}},"c":{"docs":{},"c":{"docs":{},"u":{"docs":{},"r":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"u":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"i":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"d":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.008223684210526315}},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"y":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"e":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}},"n":{"docs":{},"t":{"1":{"6":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"docs":{}},"3":{"2":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.015037593984962405},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"(":{"docs":{},"b":{"docs":{},"y":{"docs":{},"s":{"docs":{},"[":{"2":{"docs":{},"]":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"3":{"docs":{},"]":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"docs":{}}}}}}},"docs":{}},"6":{"4":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}},"(":{"3":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"5":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"7":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"9":{"docs":{},")":{"docs":{},"}":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"docs":{}}},"docs":{}},"8":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}},"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"p":{"docs":{},"t":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}},"p":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},",":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"、":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"、":{"docs":{},"m":{"docs":{},"i":{"docs":{},"s":{"docs":{},"c":{"docs":{},"、":{"docs":{},"g":{"docs":{},"l":{"docs":{},"o":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{},"。":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"a":{"docs":{},"g":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"e":{"docs":{},"r":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.006016847172081829},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}},"{":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"\"":{"docs":{},"j":{"docs":{},"o":{"docs":{},"h":{"docs":{},"n":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}},"}":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},")":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"a":{"docs":{},"g":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"n":{"docs":{},"k":{"docs":{},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}},"s":{"docs":{},"a":{"docs":{},"f":{"docs":{},"e":{"docs":{},".":{"docs":{},"p":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.024691358024691357},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.008152173913043478}}}}}}},"s":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"o":{"docs":{},"f":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"o":{"docs":{},"f":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"(":{"docs":{},"x":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.010344827586206896}}},".":{"docs":{},"f":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},",":{"docs":{},"u":{"docs":{},"n":{"docs":{},"s":{"docs":{},"a":{"docs":{},"f":{"docs":{},"e":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"o":{"docs":{},"f":{"docs":{},"(":{"docs":{},"x":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}}}}}}},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"i":{"docs":{},"k":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}},"r":{"docs":{},"l":{"docs":{},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"y":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},";":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},":":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}},"v":{"1":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"2":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"3":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.009884678747940691},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.01020408163265306},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.012531328320802004},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.02527075812274368}},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"r":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}},"r":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}}}}}}}}},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"b":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"t":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}},"之":{"docs":{},"类":{"docs":{},"的":{"docs":{},"工":{"docs":{},"具":{"docs":{},"会":{"docs":{},"正":{"docs":{},"确":{"docs":{},"地":{"docs":{},"指":{"docs":{},"出":{"docs":{},"这":{"docs":{},"些":{"docs":{},"和":{"docs":{},"其":{"docs":{},"他":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"的":{"docs":{},"隐":{"docs":{},"式":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"+":{"1":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}},")":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}},"docs":{}},"a":{"docs":{},"r":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.022988505747126436},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.031287605294825514},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.013157894736842105},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.024691358024691357},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.0196078431372549},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.010101010101010102},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.010256410256410256},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.00916030534351145},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"的":{"docs":{},"后":{"docs":{},"面":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.013793103448275862},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"e":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"l":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},"u":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}},"o":{"docs":{},"l":{"docs":{},"u":{"docs":{},"m":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.007220216606498195}}},".":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}},"f":{"1":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}},"docs":{}},"s":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}},"l":{"docs":{},"e":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}},":":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}},"s":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},".":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}},",":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}},"下":{"docs":{},"面":{"docs":{},",":{"docs":{},"就":{"docs":{},"像":{"docs":{},"不":{"docs":{},"应":{"docs":{},"该":{"docs":{},"拥":{"docs":{},"有":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"反":{"docs":{},"面":{"docs":{},"示":{"docs":{},"例":{"docs":{},",":{"docs":{},"其":{"docs":{},"他":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}},"代":{"docs":{},"码":{"docs":{},"无":{"docs":{},"法":{"docs":{},"通":{"docs":{},"过":{"docs":{},"编":{"docs":{},"译":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}}},"以":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"我":{"docs":{},"们":{"docs":{},"熟":{"docs":{},"知":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}},"一":{"docs":{},"个":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{},"示":{"docs":{},"例":{"docs":{},"来":{"docs":{},"看":{"docs":{},"下":{"docs":{},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}},"看":{"docs":{},"一":{"docs":{},"下":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"对":{"docs":{},"比":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}},"性":{"docs":{},"能":{"docs":{},"对":{"docs":{},"比":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}},"下":{"docs":{},"剥":{"docs":{},"去":{"docs":{},"反":{"docs":{},"射":{"docs":{},"前":{"docs":{},"后":{"docs":{},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"对":{"docs":{},"比":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}},"再":{"docs":{},"看":{"docs":{},"一":{"docs":{},"下":{"docs":{},"链":{"docs":{},"表":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}},"标":{"docs":{},"时":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"比":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}},"中":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"引":{"docs":{},"用":{"docs":{},"的":{"docs":{},"图":{"docs":{},"片":{"docs":{},"等":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"的":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"作":{"docs":{},"为":{"docs":{},"项":{"docs":{},"目":{"docs":{},"的":{"docs":{},"主":{"docs":{},"应":{"docs":{},"用":{"docs":{},"目":{"docs":{},"录":{"docs":{},"。":{"docs":{},"目":{"docs":{},"录":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"包":{"docs":{},"含":{"docs":{},"多":{"docs":{},"个":{"docs":{},"可":{"docs":{},"执":{"docs":{},"行":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"子":{"docs":{},"目":{"docs":{},"录":{"docs":{},"名":{"docs":{},"称":{"docs":{},"一":{"docs":{},"般":{"docs":{},"与":{"docs":{},"可":{"docs":{},"执":{"docs":{},"行":{"docs":{},"文":{"docs":{},"件":{"docs":{},"相":{"docs":{},"对":{"docs":{},"应":{"docs":{},"(":{"docs":{},"如":{"docs":{},":":{"docs":{},"/":{"docs":{},"c":{"docs":{},"m":{"docs":{},"d":{"docs":{},"/":{"docs":{},"m":{"docs":{},"y":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"方":{"docs":{},"法":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"字":{"docs":{},"节":{"docs":{},"数":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}},"变":{"docs":{},"量":{"docs":{},"只":{"docs":{},"要":{"docs":{},"被":{"docs":{},"引":{"docs":{},"用":{"docs":{},"就":{"docs":{},"一":{"docs":{},"直":{"docs":{},"会":{"docs":{},"存":{"docs":{},"活":{"docs":{},",":{"docs":{},"存":{"docs":{},"储":{"docs":{},"在":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"还":{"docs":{},"是":{"docs":{},"栈":{"docs":{},"上":{"docs":{},"由":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}},"暂":{"docs":{},"停":{"docs":{},"了":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},",":{"docs":{},"而":{"docs":{},"应":{"docs":{},"用":{"docs":{},"的":{"docs":{},"共":{"docs":{},"享":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"以":{"docs":{},"放":{"docs":{},"在":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}},"因":{"docs":{},"为":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"它":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},"可":{"docs":{},"勾":{"docs":{},"选":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"用":{"docs":{},"来":{"docs":{},"捕":{"docs":{},"获":{"docs":{},"程":{"docs":{},"序":{"docs":{},"运":{"docs":{},"行":{"docs":{},"期":{"docs":{},"间":{"docs":{},"发":{"docs":{},"生":{"docs":{},"异":{"docs":{},"常":{"docs":{},"抛":{"docs":{},"出":{"docs":{},"的":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"无":{"docs":{},"法":{"docs":{},"捕":{"docs":{},"获":{"docs":{},"当":{"docs":{},"前":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}}}}},"调":{"docs":{},"用":{"docs":{},"才":{"docs":{},"会":{"docs":{},"生":{"docs":{},"效":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}},"英":{"docs":{},"文":{"docs":{},"之":{"docs":{},"间":{"docs":{},"应":{"docs":{},"该":{"docs":{},"有":{"docs":{},"空":{"docs":{},"格":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}},"退":{"docs":{},"出":{"docs":{},"程":{"docs":{},"序":{"docs":{},"且":{"docs":{},"只":{"docs":{},"退":{"docs":{},"出":{"docs":{},"一":{"docs":{},"次":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}},"执":{"docs":{},"行":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}},"一":{"docs":{},"节":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}},"定":{"docs":{},"义":{"docs":{},"的":{"docs":{},"格":{"docs":{},"式":{"docs":{},"时":{"docs":{},"间":{"docs":{},"戳":{"docs":{},"。":{"docs":{},"默":{"docs":{},"认":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"u":{"docs":{},"n":{"docs":{},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"h":{"docs":{},"a":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}},"元":{"docs":{},"素":{"docs":{},"时":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"非":{"docs":{},"常":{"docs":{},"差":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}},"有":{"docs":{},"一":{"docs":{},"百":{"docs":{},"万":{"docs":{},"条":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"就":{"docs":{},"会":{"docs":{},"浪":{"docs":{},"费":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}},"仍":{"docs":{},"占":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},"比":{"docs":{},"较":{"docs":{},"特":{"docs":{},"殊":{"docs":{},"。":{"docs":{},"没":{"docs":{},"有":{"docs":{},"任":{"docs":{},"何":{"docs":{},"字":{"docs":{},"段":{"docs":{},"的":{"docs":{},"空":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}},"保":{"docs":{},"证":{"docs":{},"了":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"内":{"docs":{},"置":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"丰":{"docs":{},"富":{"docs":{},"的":{"docs":{},"示":{"docs":{},"例":{"docs":{},"将":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"用":{"docs":{},"户":{"docs":{},"更":{"docs":{},"加":{"docs":{},"便":{"docs":{},"捷":{"docs":{},"快":{"docs":{},"速":{"docs":{},"的":{"docs":{},"了":{"docs":{},"解":{"docs":{},"上":{"docs":{},"手":{"docs":{},"一":{"docs":{},"个":{"docs":{},"项":{"docs":{},"目":{"docs":{},",":{"docs":{},"再":{"docs":{},"加":{"docs":{},"上":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"以":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"后":{"docs":{},",":{"docs":{},"g":{"docs":{},"o":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"上":{"docs":{},"必":{"docs":{},"须":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}},"仅":{"docs":{},"列":{"docs":{},"出":{"docs":{},"了":{"docs":{},"部":{"docs":{},"分":{"docs":{},"变":{"docs":{},"量":{"docs":{},"发":{"docs":{},"生":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"的":{"docs":{},"情":{"docs":{},"形":{"docs":{},"。":{"docs":{},"实":{"docs":{},"际":{"docs":{},"上":{"docs":{},",":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}},"外":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},"进":{"docs":{},"行":{"docs":{},"过":{"docs":{},"滤":{"docs":{},",":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"一":{"docs":{},"次":{"docs":{},"代":{"docs":{},"码":{"docs":{},"又":{"docs":{},"何":{"docs":{},"妨":{"docs":{},"呢":{"docs":{},"?":{"docs":{},"可":{"docs":{},"以":{"docs":{},"肯":{"docs":{},"定":{"docs":{},"的":{"docs":{},"是":{"docs":{},",":{"docs":{},"绝":{"docs":{},"大":{"docs":{},"部":{"docs":{},"份":{"docs":{},"场":{"docs":{},"景":{"docs":{},",":{"docs":{},"根":{"docs":{},"本":{"docs":{},"不":{"docs":{},"会":{"docs":{},"对":{"docs":{},"所":{"docs":{},"有":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},"进":{"docs":{},"行":{"docs":{},"过":{"docs":{},"滤":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"反":{"docs":{},"射":{"docs":{},"带":{"docs":{},"来":{"docs":{},"好":{"docs":{},"处":{"docs":{},"我":{"docs":{},"们":{"docs":{},"并":{"docs":{},"没":{"docs":{},"有":{"docs":{},"充":{"docs":{},"分":{"docs":{},"享":{"docs":{},"受":{"docs":{},",":{"docs":{},"但":{"docs":{},"却":{"docs":{},"要":{"docs":{},"为":{"docs":{},"其":{"docs":{},"带":{"docs":{},"来":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"成":{"docs":{},"本":{"docs":{},"买":{"docs":{},"单":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{},"示":{"docs":{},"例":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"对":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"[":{"docs":{},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"6":{"4":{"docs":{},"]":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{},"分":{"docs":{},"片":{"docs":{},"前":{"docs":{},"后":{"docs":{},"并":{"docs":{},"发":{"docs":{},"写":{"docs":{},"入":{"docs":{},"的":{"docs":{},"对":{"docs":{},"比":{"docs":{},",":{"docs":{},"来":{"docs":{},"看":{"docs":{},"下":{"docs":{},"减":{"docs":{},"少":{"docs":{},"锁":{"docs":{},"竞":{"docs":{},"争":{"docs":{},"带":{"docs":{},"来":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"提":{"docs":{},"升":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}},"们":{"docs":{},"努":{"docs":{},"力":{"docs":{},"的":{"docs":{},"结":{"docs":{},"果":{"docs":{},"。":{"docs":{},"此":{"docs":{},"项":{"docs":{},"目":{"docs":{},"布":{"docs":{},"局":{"docs":{},"是":{"docs":{},"通":{"docs":{},"用":{"docs":{},"的":{"docs":{},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"并":{"docs":{},"非":{"docs":{},"强":{"docs":{},"制":{"docs":{},",":{"docs":{},"当":{"docs":{},"然":{"docs":{},"我":{"docs":{},"们":{"docs":{},"最":{"docs":{},"好":{"docs":{},"遵":{"docs":{},"守":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"这":{"docs":{},"能":{"docs":{},"让":{"docs":{},"我":{"docs":{},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},"布":{"docs":{},"局":{"docs":{},"看":{"docs":{},"起":{"docs":{},"来":{"docs":{},"更":{"docs":{},"加":{"docs":{},"规":{"docs":{},"范":{"docs":{},",":{"docs":{},"易":{"docs":{},"于":{"docs":{},"交":{"docs":{},"流":{"docs":{},"和":{"docs":{},"维":{"docs":{},"护":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"作":{"docs":{},"为":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}},"他":{"docs":{},"们":{"docs":{},"的":{"docs":{},"模":{"docs":{},"块":{"docs":{},"代":{"docs":{},"理":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},")":{"docs":{},"。":{"docs":{},"使":{"docs":{},"用":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}},"下":{"docs":{},"标":{"docs":{},"不":{"docs":{},"留":{"docs":{},"空":{"docs":{},"格":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}},"入":{"docs":{},"参":{"docs":{},"不":{"docs":{},"要":{"docs":{},"留":{"docs":{},"空":{"docs":{},"格":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}},"输":{"docs":{},"入":{"docs":{},"参":{"docs":{},"数":{"docs":{},"或":{"docs":{},"者":{"docs":{},"数":{"docs":{},"组":{"docs":{},"下":{"docs":{},"标":{"docs":{},"时":{"docs":{},",":{"docs":{},"运":{"docs":{},"算":{"docs":{},"符":{"docs":{},"和":{"docs":{},"操":{"docs":{},"作":{"docs":{},"数":{"docs":{},"之":{"docs":{},"间":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"空":{"docs":{},"格":{"docs":{},",":{"docs":{},"紧":{"docs":{},"凑":{"docs":{},"展":{"docs":{},"示":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"依":{"docs":{},"赖":{"docs":{},"管":{"docs":{},"理":{"docs":{},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},"不":{"docs":{},"要":{"docs":{},"提":{"docs":{},"交":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"值":{"docs":{},"返":{"docs":{},"回":{"docs":{},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"对":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"且":{"docs":{},"有":{"docs":{},"多":{"docs":{},"个":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}},"参":{"docs":{},"数":{"docs":{},"传":{"docs":{},"入":{"docs":{},"时":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"您":{"docs":{},"存":{"docs":{},"储":{"docs":{},"了":{"docs":{},"对":{"docs":{},"它":{"docs":{},"们":{"docs":{},"的":{"docs":{},"引":{"docs":{},"用":{"docs":{},",":{"docs":{},"则":{"docs":{},"用":{"docs":{},"户":{"docs":{},"可":{"docs":{},"以":{"docs":{},"对":{"docs":{},"其":{"docs":{},"进":{"docs":{},"行":{"docs":{},"修":{"docs":{},"改":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"后":{"docs":{},"缀":{"docs":{},",":{"docs":{},"如":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"其":{"docs":{},"他":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"时":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"使":{"docs":{},"用":{"docs":{},"值":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"指":{"docs":{},"针":{"docs":{},"。":{"docs":{},"即":{"docs":{},"使":{"docs":{},"该":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"不":{"docs":{},"被":{"docs":{},"导":{"docs":{},"出":{"docs":{},",":{"docs":{},"也":{"docs":{},"不":{"docs":{},"要":{"docs":{},"直":{"docs":{},"接":{"docs":{},"把":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"集":{"docs":{},"合":{"docs":{},"(":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},")":{"docs":{},"使":{"docs":{},"用":{"docs":{},"时":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"将":{"docs":{},"值":{"docs":{},"类":{"docs":{},"型":{"docs":{},"定":{"docs":{},"义":{"docs":{},"为":{"docs":{},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},",":{"docs":{},"仅":{"docs":{},"作":{"docs":{},"为":{"docs":{},"占":{"docs":{},"位":{"docs":{},"符":{"docs":{},"使":{"docs":{},"用":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"门":{"docs":{},"追":{"docs":{},"求":{"docs":{},"高":{"docs":{},"性":{"docs":{},"能":{"docs":{},"的":{"docs":{},"后":{"docs":{},"台":{"docs":{},"编":{"docs":{},"程":{"docs":{},"语":{"docs":{},"言":{"docs":{},",":{"docs":{},"当":{"docs":{},"然":{"docs":{},"也":{"docs":{},"不":{"docs":{},"例":{"docs":{},"外":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"最":{"docs":{},"后":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"时":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"指":{"docs":{},"针":{"docs":{},"指":{"docs":{},"向":{"docs":{},"该":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"返":{"docs":{},"回":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"将":{"docs":{},"在":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"之":{"docs":{},"外":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"此":{"docs":{},"指":{"docs":{},"针":{"docs":{},"一":{"docs":{},"直":{"docs":{},"存":{"docs":{},"活":{"docs":{},"不":{"docs":{},"释":{"docs":{},"放":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},",":{"docs":{},"就":{"docs":{},"会":{"docs":{},"有":{"docs":{},"内":{"docs":{},"存":{"docs":{},"泄":{"docs":{},"露":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},"(":{"docs":{},"该":{"docs":{},"内":{"docs":{},"存":{"docs":{},"不":{"docs":{},"因":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"释":{"docs":{},"放":{"docs":{},"而":{"docs":{},"释":{"docs":{},"放":{"docs":{},")":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"用":{"docs":{},"域":{"docs":{},"内":{"docs":{},"隐":{"docs":{},"式":{"docs":{},"覆":{"docs":{},"盖":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"较":{"docs":{},"大":{"docs":{},"的":{"docs":{},"名":{"docs":{},"字":{"docs":{},"(":{"docs":{},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},")":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"缩":{"docs":{},"写":{"docs":{},",":{"docs":{},"要":{"docs":{},"有":{"docs":{},"明":{"docs":{},"确":{"docs":{},"的":{"docs":{},"意":{"docs":{},"义":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}},"小":{"docs":{},"的":{"docs":{},"名":{"docs":{},"字":{"docs":{},"(":{"docs":{},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{},"/":{"docs":{},"函":{"docs":{},"数":{"docs":{},"参":{"docs":{},"数":{"docs":{},")":{"docs":{},",":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"使":{"docs":{},"用":{"docs":{},"简":{"docs":{},"短":{"docs":{},"的":{"docs":{},"名":{"docs":{},"字":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"隐":{"docs":{},"藏":{"docs":{},"内":{"docs":{},"置":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"你":{"docs":{},"实":{"docs":{},"际":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"以":{"docs":{},"放":{"docs":{},"在":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},"结":{"docs":{},"构":{"docs":{},"布":{"docs":{},"局":{"docs":{},"看":{"docs":{},"起":{"docs":{},"来":{"docs":{},"应":{"docs":{},"该":{"docs":{},"像":{"docs":{},"下":{"docs":{},"面":{"docs":{},"这":{"docs":{},"个":{"docs":{},"样":{"docs":{},"子":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}},"还":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"是":{"docs":{},"要":{"docs":{},"修":{"docs":{},"改":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"只":{"docs":{},"能":{"docs":{},"通":{"docs":{},"过":{"docs":{},"值":{"docs":{},"调":{"docs":{},"用":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}},"使":{"docs":{},"用":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.01935483870967742},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"制":{"docs":{},"表":{"docs":{},"符":{"docs":{},"进":{"docs":{},"行":{"docs":{},"缩":{"docs":{},"进":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"空":{"docs":{},"白":{"docs":{},"符":{"docs":{},"进":{"docs":{},"行":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"。":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},",":{"docs":{},"并":{"docs":{},"指":{"docs":{},"定":{"docs":{},"容":{"docs":{},"量":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}},"字":{"docs":{},"段":{"docs":{},"名":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}},"o":{"docs":{},"s":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"i":{"docs":{},"t":{"docs":{},"或":{"docs":{},"者":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},".":{"docs":{},"f":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{},"*":{"docs":{},"退":{"docs":{},"出":{"docs":{},"程":{"docs":{},"序":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"p":{"docs":{},"a":{"docs":{},"n":{"docs":{},"i":{"docs":{},"c":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"了":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"表":{"docs":{},"驱":{"docs":{},"动":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"编":{"docs":{},"写":{"docs":{},"用":{"docs":{},"例":{"docs":{},",":{"docs":{},"代":{"docs":{},"码":{"docs":{},"看":{"docs":{},"上":{"docs":{},"去":{"docs":{},"会":{"docs":{},"更":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"。":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}}}}}}}}}}},"值":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"既":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"值":{"docs":{},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"指":{"docs":{},"针":{"docs":{},"调":{"docs":{},"用":{"docs":{},"。":{"docs":{},"带":{"docs":{},"指":{"docs":{},"针":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"只":{"docs":{},"能":{"docs":{},"通":{"docs":{},"过":{"docs":{},"指":{"docs":{},"针":{"docs":{},"或":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"此":{"docs":{},"格":{"docs":{},"式":{"docs":{},",":{"docs":{},"并":{"docs":{},"可":{"docs":{},"通":{"docs":{},"过":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}},"反":{"docs":{},"射":{"docs":{},"并":{"docs":{},"且":{"docs":{},"很":{"docs":{},"慢":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"需":{"docs":{},"要":{"docs":{},"用":{"docs":{},"到":{"docs":{},"这":{"docs":{},"两":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"地":{"docs":{},"方":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"手":{"docs":{},"动":{"docs":{},"实":{"docs":{},"现":{"docs":{},"这":{"docs":{},"两":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"相":{"docs":{},"关":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"直":{"docs":{},"接":{"docs":{},"去":{"docs":{},"使":{"docs":{},"用":{"docs":{},"它":{"docs":{},"们":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"读":{"docs":{},"写":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"读":{"docs":{},"写":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}},"信":{"docs":{},"息":{"docs":{},"是":{"docs":{},"否":{"docs":{},"符":{"docs":{},"合":{"docs":{},"规":{"docs":{},"范":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}},"公":{"docs":{},"有":{"docs":{},"库":{"docs":{},"代":{"docs":{},"码":{"docs":{},"(":{"docs":{},"外":{"docs":{},"部":{"docs":{},"项":{"docs":{},"目":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{},")":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}},"关":{"docs":{},"于":{"docs":{},"项":{"docs":{},"目":{"docs":{},"的":{"docs":{},"设":{"docs":{},"计":{"docs":{},"文":{"docs":{},"档":{"docs":{},",":{"docs":{},"用":{"docs":{},"户":{"docs":{},"的":{"docs":{},"使":{"docs":{},"用":{"docs":{},"文":{"docs":{},"档":{"docs":{},"等":{"docs":{},"(":{"docs":{},"除":{"docs":{},"了":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}},"键":{"docs":{},"字":{"docs":{},"并":{"docs":{},"省":{"docs":{},"略":{"docs":{},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}},"申":{"docs":{},"明":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"其":{"docs":{},"类":{"docs":{},"型":{"docs":{},"与":{"docs":{},"表":{"docs":{},"达":{"docs":{},"式":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"一":{"docs":{},"致":{"docs":{},",":{"docs":{},"这":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"可":{"docs":{},"省":{"docs":{},"略":{"docs":{},"其":{"docs":{},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"闭":{"docs":{},"g":{"docs":{},"c":{"docs":{},"改":{"docs":{},"为":{"docs":{},"手":{"docs":{},"动":{"docs":{},"执":{"docs":{},"行":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"其":{"docs":{},"他":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"目":{"docs":{},"录":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}},"/":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"s":{"docs":{},"/":{"docs":{},"t":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},"s":{"docs":{},"/":{"docs":{},"e":{"docs":{},"x":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"e":{"docs":{},"s":{"docs":{},"/":{"docs":{},"t":{"docs":{},"h":{"docs":{},"i":{"docs":{},"r":{"docs":{},"d":{"docs":{},"_":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},"y":{"docs":{},"/":{"docs":{},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"s":{"docs":{},"/":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"s":{"docs":{},"/":{"docs":{},"w":{"docs":{},"e":{"docs":{},"b":{"docs":{},"s":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"2":{"docs":{},".":{"7":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"情":{"docs":{},"况":{"docs":{},"都":{"docs":{},"应":{"docs":{},"该":{"docs":{},"使":{"docs":{},"用":{"docs":{},"该":{"docs":{},"名":{"docs":{},"词":{"docs":{},"原":{"docs":{},"有":{"docs":{},"的":{"docs":{},"写":{"docs":{},"法":{"docs":{},",":{"docs":{},"如":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}},"中":{"docs":{},"数":{"docs":{},"字":{"docs":{},"与":{"docs":{},"字":{"docs":{},"节":{"docs":{},"序":{"docs":{},"列":{"docs":{},"的":{"docs":{},"转":{"docs":{},"换":{"docs":{},"可":{"docs":{},"以":{"docs":{},"用":{"docs":{},"如":{"docs":{},"下":{"docs":{},"三":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}},"函":{"docs":{},"数":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}},"函":{"docs":{},"数":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}},",":{"docs":{},"调":{"docs":{},"用":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"体":{"docs":{},"第":{"docs":{},"一":{"docs":{},"行":{"docs":{},"不":{"docs":{},"要":{"docs":{},"换":{"docs":{},"行":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}}}},"调":{"docs":{},"用":{"docs":{},"和":{"docs":{},"对":{"docs":{},"调":{"docs":{},"用":{"docs":{},"结":{"docs":{},"果":{"docs":{},"的":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"是":{"docs":{},"紧":{"docs":{},"密":{"docs":{},"相":{"docs":{},"连":{"docs":{},"的":{"docs":{},",":{"docs":{},"不":{"docs":{},"能":{"docs":{},"加":{"docs":{},"空":{"docs":{},"行":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}}}}}}}}}}}}}}}}}},"中":{"docs":{},"意":{"docs":{},"义":{"docs":{},"不":{"docs":{},"明":{"docs":{},"确":{"docs":{},"的":{"docs":{},"实":{"docs":{},"参":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"损":{"docs":{},"害":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"读":{"docs":{},"性":{"docs":{},"。":{"docs":{},"当":{"docs":{},"参":{"docs":{},"数":{"docs":{},"名":{"docs":{},"称":{"docs":{},"的":{"docs":{},"含":{"docs":{},"义":{"docs":{},"不":{"docs":{},"明":{"docs":{},"显":{"docs":{},"时":{"docs":{},",":{"docs":{},"请":{"docs":{},"为":{"docs":{},"参":{"docs":{},"数":{"docs":{},"添":{"docs":{},"加":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"长":{"docs":{},"度":{"docs":{},"不":{"docs":{},"能":{"docs":{},"超":{"docs":{},"过":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}},"中":{"docs":{},"被":{"docs":{},"调":{"docs":{},"用":{"docs":{},"(":{"docs":{},"或":{"docs":{},"程":{"docs":{},"序":{"docs":{},"生":{"docs":{},"命":{"docs":{},"周":{"docs":{},"期":{"docs":{},"中":{"docs":{},"的":{"docs":{},"其":{"docs":{},"他":{"docs":{},"地":{"docs":{},"方":{"docs":{},")":{"docs":{},",":{"docs":{},"或":{"docs":{},"作":{"docs":{},"为":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}},"调":{"docs":{},"用":{"docs":{},"o":{"docs":{},"s":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"i":{"docs":{},"t":{"docs":{},"或":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},".":{"docs":{},"f":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{},"*":{"docs":{},"且":{"docs":{},"只":{"docs":{},"调":{"docs":{},"用":{"docs":{},"一":{"docs":{},"次":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"多":{"docs":{},"个":{"docs":{},"错":{"docs":{},"误":{"docs":{},"场":{"docs":{},"景":{"docs":{},"停":{"docs":{},"止":{"docs":{},"程":{"docs":{},"序":{"docs":{},"执":{"docs":{},"行":{"docs":{},",":{"docs":{},"请":{"docs":{},"将":{"docs":{},"该":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"放":{"docs":{},"在":{"docs":{},"单":{"docs":{},"独":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"并":{"docs":{},"从":{"docs":{},"中":{"docs":{},"返":{"docs":{},"回":{"docs":{},"错":{"docs":{},"误":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"定":{"docs":{},"义":{"docs":{},"的":{"docs":{},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{},"切":{"docs":{},"片":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"到":{"docs":{},"了":{"docs":{},"堆":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"对":{"docs":{},"成":{"docs":{},"员":{"docs":{},"变":{"docs":{},"量":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}},"之":{"docs":{},"间":{"docs":{},"的":{"docs":{},"关":{"docs":{},"系":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"使":{"docs":{},"代":{"docs":{},"码":{"docs":{},"变":{"docs":{},"得":{"docs":{},"脆":{"docs":{},"弱":{"docs":{},"和":{"docs":{},"容":{"docs":{},"易":{"docs":{},"出":{"docs":{},"错":{"docs":{},";":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}},"本":{"docs":{},"身":{"docs":{},"的":{"docs":{},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},"。":{"docs":{},"特":{"docs":{},"别":{"docs":{},"是":{"docs":{},"打":{"docs":{},"算":{"docs":{},"给":{"docs":{},"其":{"docs":{},"他":{"docs":{},"程":{"docs":{},"序":{"docs":{},"使":{"docs":{},"用":{"docs":{},"的":{"docs":{},"库":{"docs":{},"应":{"docs":{},"该":{"docs":{},"特":{"docs":{},"别":{"docs":{},"注":{"docs":{},"意":{"docs":{},"代":{"docs":{},"码":{"docs":{},"行":{"docs":{},"为":{"docs":{},"的":{"docs":{},"完":{"docs":{},"全":{"docs":{},"确":{"docs":{},"定":{"docs":{},"性":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"顺":{"docs":{},"序":{"docs":{},"或":{"docs":{},"副":{"docs":{},"作":{"docs":{},"用":{"docs":{},"。":{"docs":{},"虽":{"docs":{},"然":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}},"参":{"docs":{},"数":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"这":{"docs":{},"样":{"docs":{},"看":{"docs":{},"起":{"docs":{},"来":{"docs":{},"更":{"docs":{},"容":{"docs":{},"易":{"docs":{},"和":{"docs":{},"申":{"docs":{},"明":{"docs":{},"区":{"docs":{},"分":{"docs":{},"开":{"docs":{},"来":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}},"信":{"docs":{},"息":{"docs":{},"描":{"docs":{},"述":{"docs":{},"\"":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}},"名":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}},"必":{"docs":{},"须":{"docs":{},"遵":{"docs":{},"循":{"docs":{},"驼":{"docs":{},"峰":{"docs":{},"式":{"docs":{},",":{"docs":{},"首":{"docs":{},"字":{"docs":{},"母":{"docs":{},"根":{"docs":{},"据":{"docs":{},"访":{"docs":{},"问":{"docs":{},"控":{"docs":{},"制":{"docs":{},"决":{"docs":{},"定":{"docs":{},"使":{"docs":{},"用":{"docs":{},"大":{"docs":{},"写":{"docs":{},"或":{"docs":{},"小":{"docs":{},"写":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"注":{"docs":{},"释":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"应":{"docs":{},"该":{"docs":{},"以":{"docs":{},"动":{"docs":{},"词":{"docs":{},"开":{"docs":{},"头":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"放":{"docs":{},"在":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}},"按":{"docs":{},"粗":{"docs":{},"略":{"docs":{},"的":{"docs":{},"调":{"docs":{},"用":{"docs":{},"顺":{"docs":{},"序":{"docs":{},"排":{"docs":{},"序":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}},"分":{"docs":{},"组":{"docs":{},"与":{"docs":{},"顺":{"docs":{},"序":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}},"进":{"docs":{},"行":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"释":{"docs":{},"放":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}},"才":{"docs":{},"会":{"docs":{},"被":{"docs":{},"执":{"docs":{},"行":{"docs":{},"。":{"docs":{},"这":{"docs":{},"带":{"docs":{},"来":{"docs":{},"的":{"docs":{},"后":{"docs":{},"果":{"docs":{},"就":{"docs":{},"是":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"迭":{"docs":{},"代":{"docs":{},"次":{"docs":{},"数":{"docs":{},"过":{"docs":{},"多":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"可":{"docs":{},"能":{"docs":{},"导":{"docs":{},"致":{"docs":{},"资":{"docs":{},"源":{"docs":{},"长":{"docs":{},"时":{"docs":{},"间":{"docs":{},"得":{"docs":{},"不":{"docs":{},"到":{"docs":{},"释":{"docs":{},"放":{"docs":{},",":{"docs":{},"造":{"docs":{},"成":{"docs":{},"泄":{"docs":{},"漏":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"直":{"docs":{},"接":{"docs":{},"注":{"docs":{},"入":{"docs":{},"到":{"docs":{},"使":{"docs":{},"用":{"docs":{},"方":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}}}},"为":{"docs":{},"例":{"docs":{},",":{"docs":{},"看":{"docs":{},"看":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}},"将":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"用":{"docs":{},"于":{"docs":{},"生":{"docs":{},"成":{"docs":{},"指":{"docs":{},"定":{"docs":{},"长":{"docs":{},"度":{"docs":{},"元":{"docs":{},"素":{"docs":{},"类":{"docs":{},"型":{"docs":{},"为":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}},"均":{"docs":{},"可":{"docs":{},"内":{"docs":{},"联":{"docs":{},"。":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"f":{"docs":{},"i":{"docs":{},"b":{"docs":{},"o":{"docs":{},"n":{"docs":{},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"i":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}},"创":{"docs":{},"建":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{},"对":{"docs":{},"象":{"docs":{},"池":{"docs":{},"中":{"docs":{},"没":{"docs":{},"有":{"docs":{},"对":{"docs":{},"象":{"docs":{},"时":{"docs":{},",":{"docs":{},"将":{"docs":{},"会":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}},"引":{"docs":{},"起":{"docs":{},"的":{"docs":{},",":{"docs":{},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}},"是":{"docs":{},"当":{"docs":{},"所":{"docs":{},"在":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"类":{"docs":{},"似":{"docs":{},",":{"docs":{},"但":{"docs":{},"有":{"docs":{},"区":{"docs":{},"别":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}},"前":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"先":{"docs":{},"获":{"docs":{},"得":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"成":{"docs":{},"员":{"docs":{},"锁":{"docs":{},",":{"docs":{},"原":{"docs":{},"因":{"docs":{},"是":{"docs":{},"需":{"docs":{},"要":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"地":{"docs":{},"变":{"docs":{},"更":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"等":{"docs":{},"待":{"docs":{},"队":{"docs":{},"列":{"docs":{},"。":{"docs":{},"在":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"最":{"docs":{},"后":{"docs":{},"暂":{"docs":{},"停":{"docs":{},"了":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635}},"信":{"docs":{},"息":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"结":{"docs":{},"构":{"docs":{},"指":{"docs":{},"针":{"docs":{},"变":{"docs":{},"量":{"docs":{},"使":{"docs":{},"用":{"docs":{},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"时":{"docs":{},",":{"docs":{},"请":{"docs":{},"使":{"docs":{},"用":{"docs":{},"&":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{},"代":{"docs":{},"替":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"(":{"docs":{},"t":{"docs":{},")":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"与":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"在":{"docs":{},"代":{"docs":{},"码":{"docs":{},"风":{"docs":{},"格":{"docs":{},"上":{"docs":{},"保":{"docs":{},"持":{"docs":{},"一":{"docs":{},"致":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"切":{"docs":{},"片":{"docs":{},"时":{"docs":{},"提":{"docs":{},"供":{"docs":{},"容":{"docs":{},"量":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"特":{"docs":{},"别":{"docs":{},"是":{"docs":{},"在":{"docs":{},"追":{"docs":{},"加":{"docs":{},"切":{"docs":{},"片":{"docs":{},"时":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"提":{"docs":{},"供":{"docs":{},"容":{"docs":{},"量":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}},"函":{"docs":{},"数":{"docs":{},"仅":{"docs":{},"执":{"docs":{},"行":{"docs":{},"了":{"docs":{},"一":{"docs":{},"次":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"了":{"docs":{},"多":{"docs":{},"次":{"docs":{},"重":{"docs":{},"复":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},",":{"docs":{},"在":{"docs":{},"并":{"docs":{},"发":{"docs":{},"环":{"docs":{},"境":{"docs":{},"下":{"docs":{},"很":{"docs":{},"有":{"docs":{},"用":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"参":{"docs":{},"考":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"文":{"docs":{},"献":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"参考文献.html":{"ref":"参考文献.html","tf":10}}}}}},"可":{"docs":{},"执":{"docs":{},"行":{"docs":{},"文":{"docs":{},"件":{"docs":{},"目":{"docs":{},"录":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"能":{"docs":{},"更":{"docs":{},"可":{"docs":{},"取":{"docs":{},"或":{"docs":{},"是":{"docs":{},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}},"会":{"docs":{},"被":{"docs":{},"多":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"并":{"docs":{},"发":{"docs":{},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"为":{"docs":{},"了":{"docs":{},"提":{"docs":{},"升":{"docs":{},"性":{"docs":{},"能":{"docs":{},"(":{"docs":{},"减":{"docs":{},"少":{"docs":{},"执":{"docs":{},"行":{"docs":{},"时":{"docs":{},"间":{"docs":{},"和":{"docs":{},"内":{"docs":{},"存":{"docs":{},"占":{"docs":{},"用":{"docs":{},")":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"显":{"docs":{},"示":{"docs":{},"使":{"docs":{},"用":{"docs":{},"空":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{},"(":{"docs":{},"下":{"docs":{},"划":{"docs":{},"线":{"docs":{},")":{"docs":{},"忽":{"docs":{},"略":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}},"变":{"docs":{},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},"在":{"docs":{},"使":{"docs":{},"用":{"docs":{},"时":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"被":{"docs":{},"其":{"docs":{},"他":{"docs":{},"地":{"docs":{},"方":{"docs":{},"修":{"docs":{},"改":{"docs":{},",":{"docs":{},"导":{"docs":{},"致":{"docs":{},"程":{"docs":{},"序":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"出":{"docs":{},"现":{"docs":{},"意":{"docs":{},"外":{"docs":{},"情":{"docs":{},"况":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"以":{"docs":{},"看":{"docs":{},"到":{"docs":{},",":{"docs":{},"反":{"docs":{},"射":{"docs":{},"涉":{"docs":{},"及":{"docs":{},"了":{"docs":{},"额":{"docs":{},"外":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"判":{"docs":{},"断":{"docs":{},"和":{"docs":{},"大":{"docs":{},"量":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},",":{"docs":{},"导":{"docs":{},"致":{"docs":{},"其":{"docs":{},"对":{"docs":{},"性":{"docs":{},"能":{"docs":{},"的":{"docs":{},"影":{"docs":{},"响":{"docs":{},"非":{"docs":{},"常":{"docs":{},"明":{"docs":{},"显":{"docs":{},"。":{"docs":{},"随":{"docs":{},"着":{"docs":{},"切":{"docs":{},"片":{"docs":{},"元":{"docs":{},"素":{"docs":{},"的":{"docs":{},"递":{"docs":{},"增":{"docs":{},",":{"docs":{},"每":{"docs":{},"一":{"docs":{},"次":{"docs":{},"判":{"docs":{},"断":{"docs":{},"元":{"docs":{},"素":{"docs":{},"是":{"docs":{},"否":{"docs":{},"在":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"距":{"docs":{},"很":{"docs":{},"大":{"docs":{},",":{"docs":{},"快":{"docs":{},"达":{"docs":{},"到":{"docs":{},"一":{"docs":{},"个":{"docs":{},"数":{"docs":{},"量":{"docs":{},"级":{"docs":{},"了":{"docs":{},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{},"在":{"docs":{},"不":{"docs":{},"影":{"docs":{},"响":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"读":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"行":{"docs":{},"内":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"地":{"docs":{},"使":{"docs":{},"用":{"docs":{},"运":{"docs":{},"算":{"docs":{},"符":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}},"d":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"3":{"docs":{},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"docs":{}}}}},"同":{"docs":{},"样":{"docs":{},"的":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"因":{"docs":{},"排":{"docs":{},"列":{"docs":{},"顺":{"docs":{},"序":{"docs":{},"不":{"docs":{},"同":{"docs":{},",":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"不":{"docs":{},"一":{"docs":{},"样":{"docs":{},"的":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"大":{"docs":{},"小":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"y":{"docs":{},"f":{"docs":{},"i":{"docs":{},"b":{"docs":{},"o":{"docs":{},"n":{"docs":{},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"i":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}},"通":{"docs":{},"过":{"docs":{},"对":{"docs":{},"分":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"分":{"docs":{},"片":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"减":{"docs":{},"少":{"docs":{},"了":{"docs":{},"锁":{"docs":{},"竞":{"docs":{},"争":{"docs":{},",":{"docs":{},"能":{"docs":{},"明":{"docs":{},"显":{"docs":{},"地":{"docs":{},"提":{"docs":{},"高":{"docs":{},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{},"可":{"docs":{},"以":{"docs":{},"预":{"docs":{},"见":{"docs":{},"的":{"docs":{},"是":{"docs":{},",":{"docs":{},"随":{"docs":{},"着":{"docs":{},"分":{"docs":{},"片":{"docs":{},"粒":{"docs":{},"度":{"docs":{},"地":{"docs":{},"变":{"docs":{},"小":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"距":{"docs":{},"会":{"docs":{},"越":{"docs":{},"来":{"docs":{},"越":{"docs":{},"大":{"docs":{},"。":{"docs":{},"当":{"docs":{},"然":{"docs":{},",":{"docs":{},"分":{"docs":{},"片":{"docs":{},"粒":{"docs":{},"度":{"docs":{},"不":{"docs":{},"是":{"docs":{},"越":{"docs":{},"小":{"docs":{},"越":{"docs":{},"好":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},"每":{"docs":{},"一":{"docs":{},"个":{"docs":{},"分":{"docs":{},"片":{"docs":{},"都":{"docs":{},"要":{"docs":{},"配":{"docs":{},"一":{"docs":{},"把":{"docs":{},"锁":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"会":{"docs":{},"带":{"docs":{},"来":{"docs":{},"很":{"docs":{},"多":{"docs":{},"额":{"docs":{},"外":{"docs":{},"的":{"docs":{},"不":{"docs":{},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{},"开":{"docs":{},"销":{"docs":{},"。":{"docs":{},"可":{"docs":{},"以":{"docs":{},"选":{"docs":{},"择":{"docs":{},"一":{"docs":{},"个":{"docs":{},"不":{"docs":{},"太":{"docs":{},"大":{"docs":{},"的":{"docs":{},"值":{"docs":{},",":{"docs":{},"在":{"docs":{},"性":{"docs":{},"能":{"docs":{},"和":{"docs":{},"花":{"docs":{},"销":{"docs":{},"上":{"docs":{},"寻":{"docs":{},"找":{"docs":{},"一":{"docs":{},"个":{"docs":{},"平":{"docs":{},"衡":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"出":{"docs":{},",":{"docs":{},"两":{"docs":{},"种":{"docs":{},"通":{"docs":{},"过":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}},"无":{"docs":{},"锁":{"docs":{},"版":{"docs":{},"本":{"docs":{},"比":{"docs":{},"有":{"docs":{},"锁":{"docs":{},"版":{"docs":{},"本":{"docs":{},"性":{"docs":{},"能":{"docs":{},"高":{"docs":{},"一":{"docs":{},"些":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}},"将":{"docs":{},"暂":{"docs":{},"时":{"docs":{},"不":{"docs":{},"用":{"docs":{},"的":{"docs":{},"对":{"docs":{},"象":{"docs":{},"缓":{"docs":{},"存":{"docs":{},"起":{"docs":{},"来":{"docs":{},",":{"docs":{},"待":{"docs":{},"下":{"docs":{},"次":{"docs":{},"需":{"docs":{},"要":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"直":{"docs":{},"接":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"不":{"docs":{},"用":{"docs":{},"再":{"docs":{},"次":{"docs":{},"经":{"docs":{},"过":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},",":{"docs":{},"复":{"docs":{},"用":{"docs":{},"对":{"docs":{},"象":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},",":{"docs":{},"减":{"docs":{},"轻":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"利":{"docs":{},"用":{"docs":{},"信":{"docs":{},"道":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"在":{"docs":{},"代":{"docs":{},"码":{"docs":{},"的":{"docs":{},"任":{"docs":{},"意":{"docs":{},"位":{"docs":{},"置":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"和":{"docs":{},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"可":{"docs":{},"以":{"docs":{},"延":{"docs":{},"迟":{"docs":{},"到":{"docs":{},"使":{"docs":{},"用":{"docs":{},"时":{"docs":{},"再":{"docs":{},"执":{"docs":{},"行":{"docs":{},",":{"docs":{},"并":{"docs":{},"发":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},"是":{"docs":{},"线":{"docs":{},"程":{"docs":{},"安":{"docs":{},"全":{"docs":{},"的":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"看":{"docs":{},"起":{"docs":{},"来":{"docs":{},"代":{"docs":{},"码":{"docs":{},"更":{"docs":{},"加":{"docs":{},"简":{"docs":{},"洁":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}},"用":{"docs":{},"来":{"docs":{},"唤":{"docs":{},"醒":{"docs":{},"一":{"docs":{},"个":{"docs":{},"或":{"docs":{},"所":{"docs":{},"有":{"docs":{},"因":{"docs":{},"等":{"docs":{},"待":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},"而":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}},"通":{"docs":{},"知":{"docs":{},"等":{"docs":{},"待":{"docs":{},"条":{"docs":{},"件":{"docs":{},"发":{"docs":{},"生":{"docs":{},"而":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}},"被":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"通":{"docs":{},"过":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"见":{"docs":{},"使":{"docs":{},"用":{"docs":{},"反":{"docs":{},"射":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}},",":{"docs":{},"函":{"docs":{},"数":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}},"读":{"docs":{},"多":{"docs":{},"写":{"docs":{},"少":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"并":{"docs":{},"发":{"docs":{},"性":{"docs":{},"能":{"docs":{},"会":{"docs":{},"更":{"docs":{},"优":{"docs":{},"。":{"docs":{},"可":{"docs":{},"以":{"docs":{},"预":{"docs":{},"见":{"docs":{},"的":{"docs":{},"是":{"docs":{},"如":{"docs":{},"果":{"docs":{},"写":{"docs":{},"占":{"docs":{},"比":{"docs":{},"更":{"docs":{},"低":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"带":{"docs":{},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},"效":{"docs":{},"果":{"docs":{},"会":{"docs":{},"更":{"docs":{},"优":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"次":{"docs":{},"协":{"docs":{},"程":{"docs":{},"的":{"docs":{},"切":{"docs":{},"换":{"docs":{},",":{"docs":{},"耗":{"docs":{},"时":{"docs":{},"大":{"docs":{},"概":{"docs":{},"在":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}},"含":{"docs":{},"有":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},"外":{"docs":{},"部":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"库":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"辅":{"docs":{},"助":{"docs":{},"工":{"docs":{},"具":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"包":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}},"存":{"docs":{},"放":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"储":{"docs":{},"类":{"docs":{},"型":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}},"导":{"docs":{},"入":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"的":{"docs":{},"包":{"docs":{},"按":{"docs":{},"照":{"docs":{},"先":{"docs":{},"后":{"docs":{},"顺":{"docs":{},"序":{"docs":{},"应":{"docs":{},"该":{"docs":{},"分":{"docs":{},"为":{"docs":{},"三":{"docs":{},"组":{"docs":{},":":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}},"出":{"docs":{},"与":{"docs":{},"非":{"docs":{},"导":{"docs":{},"出":{"docs":{},"接":{"docs":{},"口":{"docs":{},"均":{"docs":{},"需":{"docs":{},"要":{"docs":{},"有":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"和":{"docs":{},"方":{"docs":{},"法":{"docs":{},"(":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"或":{"docs":{},"接":{"docs":{},"口":{"docs":{},"下":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"称":{"docs":{},"为":{"docs":{},"方":{"docs":{},"法":{"docs":{},")":{"docs":{},"都":{"docs":{},"必":{"docs":{},"须":{"docs":{},"有":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}},"应":{"docs":{},"该":{"docs":{},"放":{"docs":{},"在":{"docs":{},"非":{"docs":{},"导":{"docs":{},"出":{"docs":{},"函":{"docs":{},"数":{"docs":{},"前":{"docs":{},"面":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}},"/":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"职":{"docs":{},"责":{"docs":{},"必":{"docs":{},"须":{"docs":{},"与":{"docs":{},"包":{"docs":{},"&":{"docs":{},"文":{"docs":{},"件":{"docs":{},"职":{"docs":{},"责":{"docs":{},"高":{"docs":{},"度":{"docs":{},"一":{"docs":{},"致":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}},"字":{"docs":{},"段":{"docs":{},"和":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}},"以":{"docs":{},"下":{"docs":{},"两":{"docs":{},"个":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"以":{"docs":{},"便":{"docs":{},"此":{"docs":{},"包":{"docs":{},"的":{"docs":{},"用":{"docs":{},"户":{"docs":{},"可":{"docs":{},"以":{"docs":{},"将":{"docs":{},"它":{"docs":{},"们":{"docs":{},"与":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"s":{"docs":{},".":{"docs":{},"i":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"常":{"docs":{},"量":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"致":{"docs":{},"整":{"docs":{},"个":{"docs":{},"进":{"docs":{},"程":{"docs":{},"退":{"docs":{},"出":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}},"将":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"你":{"docs":{},"的":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"云":{"docs":{},"(":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"更":{"docs":{},"加":{"docs":{},"人":{"docs":{},"性":{"docs":{},"化":{"docs":{},",":{"docs":{},"如":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"不":{"docs":{},"会":{"docs":{},"被":{"docs":{},"执":{"docs":{},"行":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}},"网":{"docs":{},"络":{"docs":{},"字":{"docs":{},"节":{"docs":{},"序":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}},"元":{"docs":{},"素":{"docs":{},"插":{"docs":{},"入":{"docs":{},"到":{"docs":{},"链":{"docs":{},"表":{"docs":{},"的":{"docs":{},"首":{"docs":{},"部":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}},"格":{"docs":{},"式":{"docs":{},"化":{"docs":{},"后":{"docs":{},"的":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"打":{"docs":{},"印":{"docs":{},"到":{"docs":{},"屏":{"docs":{},"幕":{"docs":{},",":{"docs":{},"即":{"docs":{},"标":{"docs":{},"准":{"docs":{},"输":{"docs":{},"出":{"docs":{},"。":{"docs":{},"在":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}},"应":{"docs":{},"用":{"docs":{},"程":{"docs":{},"序":{"docs":{},"和":{"docs":{},"公":{"docs":{},"共":{"docs":{},"库":{"docs":{},"的":{"docs":{},"示":{"docs":{},"例":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}},"特":{"docs":{},"定":{"docs":{},"组":{"docs":{},"件":{"docs":{},",":{"docs":{},"如":{"docs":{},"静":{"docs":{},"态":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}},"的":{"docs":{},"组":{"docs":{},"件":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"目":{"docs":{},"录":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}},"/":{"docs":{},"w":{"docs":{},"e":{"docs":{},"b":{"2":{"docs":{},".":{"5":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}}},"docs":{}}}}}}},"项":{"docs":{},"目":{"docs":{},"的":{"docs":{},"基":{"docs":{},"本":{"docs":{},"布":{"docs":{},"局":{"docs":{},",":{"docs":{},"是":{"docs":{},"社":{"docs":{},"区":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}},"服":{"docs":{},"务":{"docs":{},"建":{"docs":{},"议":{"docs":{},"有":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"必":{"docs":{},"须":{"docs":{},"要":{"docs":{},"有":{"docs":{},"接":{"docs":{},"口":{"docs":{},"测":{"docs":{},"试":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}},"该":{"docs":{},"做":{"docs":{},"到":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},"足":{"docs":{},"以":{"docs":{},"满":{"docs":{},"足":{"docs":{},"任":{"docs":{},"何":{"docs":{},"情":{"docs":{},"况":{"docs":{},"!":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517}}}}}}}}}}},"后":{"docs":{},"移":{"docs":{},"一":{"docs":{},"位":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}},"当":{"docs":{},"使":{"docs":{},"用":{"docs":{},"如":{"docs":{},"下":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},":":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"为":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517}}}},"或":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":1.6666666666666665},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"者":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"为":{"docs":{},"了":{"docs":{},"更":{"docs":{},"好":{"docs":{},"的":{"docs":{},"可":{"docs":{},"测":{"docs":{},"试":{"docs":{},"性":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}},"程":{"docs":{},"序":{"docs":{},"主":{"docs":{},"动":{"docs":{},"抛":{"docs":{},"出":{"docs":{},"的":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}},"无":{"docs":{},"缓":{"docs":{},"冲":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517}}}}},"是":{"docs":{},"无":{"docs":{},"缓":{"docs":{},"冲":{"docs":{},"的":{"docs":{},"。":{"docs":{},"默":{"docs":{},"认":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517}}}}}}}}}}}}}}}}}}}}},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"错":{"docs":{},"误":{"docs":{},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}},"空":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"只":{"docs":{},"能":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"可":{"docs":{},"以":{"docs":{},"等":{"docs":{},"待":{"docs":{},",":{"docs":{},"并":{"docs":{},"读":{"docs":{},"取":{"docs":{},"到":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"没":{"docs":{},"办":{"docs":{},"法":{"docs":{},"通":{"docs":{},"知":{"docs":{},"其":{"docs":{},"他":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},"也":{"docs":{},"读":{"docs":{},"取":{"docs":{},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"打":{"docs":{},"包":{"docs":{},"和":{"docs":{},"持":{"docs":{},"续":{"docs":{},"集":{"docs":{},"成":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"印":{"docs":{},"的":{"docs":{},"是":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}},"相":{"docs":{},"同":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}},"执":{"docs":{},"行":{"docs":{},"各":{"docs":{},"种":{"docs":{},"构":{"docs":{},"建":{"docs":{},"、":{"docs":{},"安":{"docs":{},"装":{"docs":{},"、":{"docs":{},"分":{"docs":{},"析":{"docs":{},"等":{"docs":{},"操":{"docs":{},"作":{"docs":{},"的":{"docs":{},"脚":{"docs":{},"本":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}},"基":{"docs":{},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}},"性":{"docs":{},"能":{"docs":{},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}},"当":{"docs":{},"前":{"docs":{},"包":{"docs":{},"下":{"docs":{},"的":{"docs":{},"所":{"docs":{},"有":{"docs":{},"基":{"docs":{},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},",":{"docs":{},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"_":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"w":{"docs":{},"a":{"docs":{},"i":{"docs":{},"t":{"docs":{},"会":{"docs":{},"挂":{"docs":{},"起":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"所":{"docs":{},"在":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"持":{"docs":{},"续":{"docs":{},"集":{"docs":{},"成":{"docs":{},"配":{"docs":{},"置":{"docs":{},"与":{"docs":{},"脚":{"docs":{},"本":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}},"整":{"docs":{},"体":{"docs":{},"风":{"docs":{},"格":{"2":{"docs":{},".":{"2":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}}},"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"有":{"docs":{},"些":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"语":{"docs":{},"言":{"docs":{},"自":{"docs":{},"身":{"docs":{},"提":{"docs":{},"供":{"docs":{},"了":{"docs":{},"目":{"docs":{},"录":{"docs":{},"结":{"docs":{},"构":{"docs":{},"规":{"docs":{},"范":{"docs":{},",":{"docs":{},"但":{"docs":{},"对":{"docs":{},"于":{"docs":{},"较":{"docs":{},"为":{"docs":{},"年":{"docs":{},"轻":{"docs":{},"的":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}},"时":{"docs":{},"后":{"docs":{},"我":{"docs":{},"们":{"docs":{},"需":{"docs":{},"要":{"docs":{},"根":{"docs":{},"据":{"docs":{},"多":{"docs":{},"个":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"候":{"docs":{},"你":{"docs":{},"会":{"docs":{},"看":{"docs":{},"到":{"docs":{},"某":{"docs":{},"个":{"docs":{},"类":{"docs":{},"里":{"docs":{},"有":{"docs":{},"很":{"docs":{},"多":{"docs":{},"基":{"docs":{},"本":{"docs":{},"类":{"docs":{},"型":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"你":{"docs":{},"隐":{"docs":{},"约":{"docs":{},"地":{"docs":{},"能":{"docs":{},"区":{"docs":{},"分":{"docs":{},"出":{"docs":{},"某":{"docs":{},"些":{"docs":{},"字":{"docs":{},"段":{"docs":{},"好":{"docs":{},"像":{"docs":{},"应":{"docs":{},"该":{"docs":{},"在":{"docs":{},"一":{"docs":{},"起":{"docs":{},",":{"docs":{},"如":{"docs":{},"手":{"docs":{},"机":{"docs":{},"号":{"docs":{},"和":{"docs":{},"带":{"docs":{},"区":{"docs":{},"号":{"docs":{},"的":{"docs":{},"电":{"docs":{},"话":{"docs":{},"号":{"docs":{},"码":{"docs":{},"、":{"docs":{},"描":{"docs":{},"述":{"docs":{},"某":{"docs":{},"个":{"docs":{},"日":{"docs":{},"期":{"docs":{},"范":{"docs":{},"围":{"docs":{},"的":{"docs":{},"开":{"docs":{},"始":{"docs":{},"日":{"docs":{},"期":{"docs":{},"和":{"docs":{},"结":{"docs":{},"束":{"docs":{},"日":{"docs":{},"期":{"docs":{},",":{"docs":{},"它":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"真":{"docs":{},"实":{"docs":{},"的":{"docs":{},"载":{"docs":{},"体":{"docs":{},",":{"docs":{},"如":{"docs":{},"联":{"docs":{},"系":{"docs":{},"方":{"docs":{},"式":{"docs":{},"类":{"docs":{},"和":{"docs":{},"时":{"docs":{},"间":{"docs":{},"范":{"docs":{},"围":{"docs":{},"类":{"docs":{},")":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"需":{"docs":{},"要":{"docs":{},"一":{"docs":{},"些":{"docs":{},"工":{"docs":{},"具":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},"从":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"单":{"docs":{},"向":{"docs":{},"链":{"docs":{},"表":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"的":{"docs":{},"简":{"docs":{},"单":{"docs":{},"实":{"docs":{},"现":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}},"并":{"docs":{},"发":{"docs":{},"写":{"docs":{},"入":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},"链":{"docs":{},"表":{"docs":{},"的":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"形":{"docs":{},"式":{"docs":{},"输":{"docs":{},"出":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"在":{"docs":{},"异":{"docs":{},"步":{"docs":{},"地":{"docs":{},"接":{"docs":{},"收":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"剩":{"docs":{},"下":{"docs":{},"的":{"docs":{},"多":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"必":{"docs":{},"须":{"docs":{},"等":{"docs":{},"待":{"docs":{},"这":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"接":{"docs":{},"收":{"docs":{},"完":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"才":{"docs":{},"能":{"docs":{},"读":{"docs":{},"取":{"docs":{},"到":{"docs":{},"正":{"docs":{},"确":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{},"在":{"docs":{},"这":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"单":{"docs":{},"纯":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"服":{"docs":{},"务":{"docs":{},"对":{"docs":{},"外":{"docs":{},"接":{"docs":{},"口":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"应":{"docs":{},"用":{"docs":{},"程":{"docs":{},"序":{"docs":{},"目":{"docs":{},"录":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}},"/":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"2":{"docs":{},".":{"4":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}}},"docs":{}}}}}}}}}}},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"请":{"docs":{},"求":{"docs":{},"天":{"docs":{},"然":{"docs":{},"是":{"docs":{},"并":{"docs":{},"发":{"docs":{},"的":{"docs":{},",":{"docs":{},"此":{"docs":{},"时":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}},"构":{"docs":{},"建":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}},"依":{"docs":{},"赖":{"docs":{},"包":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"造":{"docs":{},"函":{"docs":{},"数":{"docs":{},"应":{"docs":{},"该":{"docs":{},"放":{"docs":{},"在":{"docs":{},"其":{"docs":{},"他":{"docs":{},"函":{"docs":{},"数":{"docs":{},"之":{"docs":{},"前":{"docs":{},",":{"docs":{},"如":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"x":{"docs":{},"y":{"docs":{},"z":{"docs":{},"(":{"docs":{},")":{"docs":{},"/":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"x":{"docs":{},"y":{"docs":{},"z":{"docs":{},"(":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"格":{"docs":{},"式":{"docs":{},"的":{"docs":{},"说":{"docs":{},"明":{"docs":{},"文":{"docs":{},"档":{"docs":{},",":{"docs":{},"是":{"docs":{},"用":{"docs":{},"户":{"docs":{},"了":{"docs":{},"解":{"docs":{},"一":{"docs":{},"个":{"docs":{},"项":{"docs":{},"目":{"docs":{},"最":{"docs":{},"直":{"docs":{},"观":{"docs":{},"的":{"docs":{},"入":{"docs":{},"口":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"需":{"docs":{},"要":{"docs":{},",":{"docs":{},"添":{"docs":{},"加":{"docs":{},"不":{"docs":{},"同":{"docs":{},"语":{"docs":{},"言":{"docs":{},"的":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"化":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"中":{"docs":{},"多":{"docs":{},"个":{"docs":{},"占":{"docs":{},"位":{"docs":{},"符":{"docs":{},"之":{"docs":{},"间":{"docs":{},"要":{"docs":{},"有":{"docs":{},"空":{"docs":{},"格":{"docs":{},"。":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}}}},"为":{"docs":{},"/":{"docs":{},"/":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},":":{"docs":{},"\"":{"docs":{},"/":{"docs":{},"/":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}},"之":{"docs":{},"间":{"docs":{},"进":{"docs":{},"行":{"docs":{},"选":{"docs":{},"择":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}},"注":{"docs":{},"意":{"docs":{},",":{"1":{"docs":{},".":{"1":{"1":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}},"docs":{}}},"docs":{},"如":{"docs":{},"果":{"docs":{},"方":{"docs":{},"法":{"docs":{},"的":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"为":{"docs":{},"不":{"docs":{},"可":{"docs":{},"导":{"docs":{},"出":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"不":{"docs":{},"注":{"docs":{},"释":{"docs":{},",":{"docs":{},"但":{"docs":{},"需":{"docs":{},"要":{"docs":{},"质":{"docs":{},"疑":{"docs":{},"该":{"docs":{},"方":{"docs":{},"法":{"docs":{},"可":{"docs":{},"导":{"docs":{},"出":{"docs":{},"的":{"docs":{},"必":{"docs":{},"要":{"docs":{},"性":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"与":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},"多":{"docs":{},"次":{"docs":{},"运":{"docs":{},"行":{"docs":{},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"结":{"docs":{},"果":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"不":{"docs":{},"相":{"docs":{},"同":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"并":{"docs":{},"发":{"docs":{},"是":{"docs":{},"无":{"docs":{},"序":{"docs":{},"的":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"释":{"docs":{},"对":{"docs":{},"变":{"docs":{},"量":{"docs":{},"和":{"docs":{},"常":{"docs":{},"量":{"docs":{},"进":{"docs":{},"行":{"docs":{},"简":{"docs":{},"要":{"docs":{},"介":{"docs":{},"绍":{"docs":{},",":{"docs":{},"放":{"docs":{},"在":{"docs":{},"常":{"docs":{},"量":{"docs":{},"或":{"docs":{},"变":{"docs":{},"量":{"docs":{},"定":{"docs":{},"义":{"docs":{},"的":{"docs":{},"前":{"docs":{},"一":{"docs":{},"行":{"docs":{},"。":{"docs":{},"独":{"docs":{},"行":{"docs":{},"注":{"docs":{},"释":{"docs":{},"格":{"docs":{},"式":{"docs":{},"为":{"docs":{},":":{"docs":{},"\"":{"docs":{},"/":{"docs":{},"/":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"结":{"docs":{},"构":{"docs":{},"进":{"docs":{},"行":{"docs":{},"简":{"docs":{},"要":{"docs":{},"介":{"docs":{},"绍":{"docs":{},",":{"docs":{},"放":{"docs":{},"在":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"定":{"docs":{},"义":{"docs":{},"的":{"docs":{},"前":{"docs":{},"一":{"docs":{},"行":{"docs":{},"。":{"docs":{},"格":{"docs":{},"式":{"docs":{},"为":{"docs":{},":":{"docs":{},"\"":{"docs":{},"/":{"docs":{},"/":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"描":{"docs":{},"述":{"docs":{},"函":{"docs":{},"数":{"docs":{},"或":{"docs":{},"方":{"docs":{},"法":{"docs":{},"功":{"docs":{},"能":{"docs":{},"、":{"docs":{},"调":{"docs":{},"用":{"docs":{},"方":{"docs":{},"等":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{},"格":{"docs":{},"式":{"docs":{},"为":{"docs":{},":":{"docs":{},"\"":{"docs":{},"/":{"docs":{},"/":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}},"结":{"docs":{},"束":{"docs":{},"添":{"docs":{},"加":{"docs":{},"点":{"docs":{},"或":{"docs":{},"句":{"docs":{},"号":{"docs":{},",":{"docs":{},"参":{"docs":{},"考":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{},"源":{"docs":{},"码":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}},"入":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}},"测":{"docs":{},"试":{"docs":{},"相":{"docs":{},"关":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"用":{"docs":{},"例":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"名":{"docs":{},"称":{"docs":{},"必":{"docs":{},"须":{"docs":{},"以":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}},"生":{"docs":{},"成":{"docs":{},"的":{"docs":{},"文":{"docs":{},"档":{"docs":{},"之":{"docs":{},"外":{"docs":{},")":{"docs":{},"均":{"docs":{},"可":{"docs":{},"以":{"docs":{},"放":{"docs":{},"在":{"docs":{},"该":{"docs":{},"目":{"docs":{},"录":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}},"带":{"docs":{},"参":{"docs":{},"数":{"docs":{},"的":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}},"指":{"docs":{},"定":{"docs":{},"长":{"docs":{},"度":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},"的":{"docs":{},"随":{"docs":{},"机":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}},"切":{"docs":{},"片":{"docs":{},"函":{"docs":{},"数":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}},"社":{"docs":{},"区":{"docs":{},"的":{"docs":{},"人":{"docs":{},"并":{"docs":{},"不":{"docs":{},"推":{"docs":{},"荐":{"docs":{},"它":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}},"私":{"docs":{},"有":{"docs":{},"库":{"docs":{},"代":{"docs":{},"码":{"docs":{},"(":{"docs":{},"仅":{"docs":{},"本":{"docs":{},"项":{"docs":{},"目":{"docs":{},"使":{"docs":{},"用":{"docs":{},")":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}},"量":{"docs":{},"和":{"docs":{},"局":{"docs":{},"部":{"docs":{},"量":{"docs":{},"规":{"docs":{},"范":{"docs":{},"一":{"docs":{},"致":{"docs":{},",":{"docs":{},"均":{"docs":{},"以":{"docs":{},"小":{"docs":{},"写":{"docs":{},"字":{"docs":{},"母":{"docs":{},"开":{"docs":{},"头":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}},"简":{"docs":{},"体":{"docs":{},"中":{"docs":{},"文":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"单":{"docs":{},"明":{"docs":{},"了":{"docs":{},"的":{"docs":{},"包":{"docs":{},"命":{"docs":{},"名":{"docs":{},",":{"docs":{},"如":{"docs":{},":":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"、":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"、":{"docs":{},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}},"言":{"docs":{},"之":{"docs":{},":":{"docs":{},"合":{"docs":{},"理":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"可":{"docs":{},"以":{"docs":{},"提":{"docs":{},"高":{"docs":{},"内":{"docs":{},"存":{"docs":{},"读":{"docs":{},"写":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"便":{"docs":{},"于":{"docs":{},"实":{"docs":{},"现":{"docs":{},"变":{"docs":{},"量":{"docs":{},"操":{"docs":{},"作":{"docs":{},"的":{"docs":{},"原":{"docs":{},"子":{"docs":{},"性":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"而":{"docs":{},"言":{"docs":{},"之":{"docs":{},",":{"docs":{},"系":{"docs":{},"统":{"docs":{},"的":{"docs":{},"资":{"docs":{},"源":{"docs":{},"被":{"docs":{},"耗":{"docs":{},"尽":{"docs":{},"了":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}},"系":{"docs":{},"统":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"(":{"docs":{},"s":{"docs":{},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"d":{"docs":{},",":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}},"中":{"docs":{},",":{"docs":{},"标":{"docs":{},"准":{"docs":{},"输":{"docs":{},"出":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"视":{"docs":{},"为":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"内":{"docs":{},"核":{"docs":{},"(":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{},")":{"docs":{},"利":{"docs":{},"用":{"docs":{},"文":{"docs":{},"件":{"docs":{},"描":{"docs":{},"述":{"docs":{},"符":{"docs":{},"(":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"地":{"docs":{},"资":{"docs":{},"源":{"docs":{},"是":{"docs":{},"有":{"docs":{},"限":{"docs":{},",":{"docs":{},"协":{"docs":{},"程":{"docs":{},"是":{"docs":{},"有":{"docs":{},"代":{"docs":{},"价":{"docs":{},"的":{"docs":{},",":{"docs":{},"为":{"docs":{},"了":{"docs":{},"保":{"docs":{},"护":{"docs":{},"程":{"docs":{},"序":{"docs":{},",":{"docs":{},"提":{"docs":{},"高":{"docs":{},"性":{"docs":{},"能":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"主":{"docs":{},"动":{"docs":{},"限":{"docs":{},"制":{"docs":{},"并":{"docs":{},"发":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},"数":{"docs":{},"量":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"背":{"docs":{},"景":{"docs":{},"。":{"docs":{},"不":{"docs":{},"同":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"应":{"docs":{},"该":{"docs":{},"有":{"docs":{},"自":{"docs":{},"己":{"docs":{},"的":{"docs":{},"目":{"docs":{},"录":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"全":{"docs":{},"部":{"docs":{},"放":{"docs":{},"到":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}},"资":{"docs":{},"源":{"docs":{},"、":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"端":{"docs":{},"模":{"docs":{},"板":{"docs":{},"和":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}},"起":{"docs":{},",":{"docs":{},"从":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"层":{"docs":{},"面":{"docs":{},"限":{"docs":{},"制":{"docs":{},"该":{"docs":{},"目":{"docs":{},"录":{"docs":{},"不":{"docs":{},"可":{"docs":{},"被":{"docs":{},"导":{"docs":{},"出":{"docs":{},",":{"docs":{},"而":{"docs":{},"且":{"docs":{},"不":{"docs":{},"只":{"docs":{},"是":{"docs":{},"项":{"docs":{},"目":{"docs":{},"根":{"docs":{},"目":{"docs":{},"录":{"docs":{},"下":{"docs":{},"的":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"还":{"docs":{},"会":{"docs":{},"忽":{"docs":{},"略":{"docs":{},"以":{"docs":{},"“":{"docs":{},".":{"docs":{},"”":{"docs":{},"或":{"docs":{},"“":{"docs":{},"_":{"docs":{},"”":{"docs":{},"开":{"docs":{},"头":{"docs":{},"的":{"docs":{},"目":{"docs":{},"录":{"docs":{},"或":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"在":{"docs":{},"如":{"docs":{},"何":{"docs":{},"命":{"docs":{},"名":{"docs":{},"测":{"docs":{},"试":{"docs":{},"数":{"docs":{},"据":{"docs":{},"目":{"docs":{},"录":{"docs":{},"方":{"docs":{},"面":{"docs":{},"有":{"docs":{},"更":{"docs":{},"大":{"docs":{},"的":{"docs":{},"灵":{"docs":{},"活":{"docs":{},"性":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"启":{"docs":{},"用":{"docs":{},"了":{"docs":{},"模":{"docs":{},"块":{"docs":{},"代":{"docs":{},"理":{"docs":{},"功":{"docs":{},"能":{"docs":{},"(":{"docs":{},"默":{"docs":{},"认":{"docs":{},"使":{"docs":{},"用":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}},"是":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}},"提":{"docs":{},"供":{"docs":{},"了":{"docs":{},"很":{"docs":{},"多":{"docs":{},"好":{"docs":{},"用":{"docs":{},"的":{"docs":{},"工":{"docs":{},"具":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"我":{"docs":{},"们":{"docs":{},"进":{"docs":{},"行":{"docs":{},"代":{"docs":{},"码":{"docs":{},"的":{"docs":{},"规":{"docs":{},"范":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}},"以":{"docs":{},"上":{"docs":{},"面":{"docs":{},"给":{"docs":{},"出":{"docs":{},"的":{"docs":{},"同":{"docs":{},"步":{"docs":{},"示":{"docs":{},"例":{"docs":{},",":{"docs":{},"这":{"docs":{},"里":{"docs":{},"换":{"docs":{},"作":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}},"有":{"docs":{},"更":{"docs":{},"多":{"docs":{},",":{"docs":{},"具":{"docs":{},"体":{"docs":{},"可":{"docs":{},"参":{"docs":{},"考":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}},"这":{"docs":{},"些":{"docs":{},"脚":{"docs":{},"本":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"根":{"docs":{},"目":{"docs":{},"录":{"docs":{},"下":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}},"是":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"样":{"docs":{},"的":{"docs":{},"目":{"docs":{},"录":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"这":{"docs":{},"些":{"docs":{},"名":{"docs":{},"称":{"docs":{},"含":{"docs":{},"义":{"docs":{},"太":{"docs":{},"泛":{"docs":{},"了":{"docs":{},",":{"docs":{},"违":{"docs":{},"背":{"docs":{},"了":{"docs":{},"单":{"docs":{},"一":{"docs":{},"职":{"docs":{},"责":{"docs":{},"原":{"docs":{},"则":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{},",":{"docs":{},"不":{"docs":{},"知":{"docs":{},"道":{"docs":{},"其":{"docs":{},"是":{"docs":{},"顶":{"docs":{},"级":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{},"还":{"docs":{},"是":{"docs":{},"导":{"docs":{},"入":{"docs":{},"包":{"docs":{},"中":{"docs":{},"的":{"docs":{},"顶":{"docs":{},"级":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"就":{"docs":{},"不":{"docs":{},"会":{"docs":{},"出":{"docs":{},"现":{"docs":{},"诸":{"docs":{},"如":{"docs":{},"“":{"docs":{},"连":{"docs":{},"接":{"docs":{},"被":{"docs":{},"拒":{"docs":{},"绝":{"docs":{},"”":{"docs":{},"之":{"docs":{},"类":{"docs":{},"的":{"docs":{},"模":{"docs":{},"糊":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}},"里":{"docs":{},"放":{"docs":{},"不":{"docs":{},"希":{"docs":{},"望":{"docs":{},"被":{"docs":{},"其":{"docs":{},"他":{"docs":{},"应":{"docs":{},"用":{"docs":{},"程":{"docs":{},"序":{"docs":{},"或":{"docs":{},"者":{"docs":{},"库":{"docs":{},"导":{"docs":{},"入":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{},"注":{"docs":{},"意":{"docs":{},":":{"docs":{},"从":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}},"希":{"docs":{},"望":{"docs":{},"被":{"docs":{},"其":{"docs":{},"他":{"docs":{},"应":{"docs":{},"用":{"docs":{},"程":{"docs":{},"序":{"docs":{},"或":{"docs":{},"者":{"docs":{},"库":{"docs":{},"导":{"docs":{},"入":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"在":{"docs":{},"这":{"docs":{},"里":{"docs":{},"放":{"docs":{},"东":{"docs":{},"西":{"docs":{},"之":{"docs":{},"前":{"docs":{},"要":{"docs":{},"三":{"docs":{},"思":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"是":{"docs":{},"服":{"docs":{},"务":{"docs":{},"对":{"docs":{},"外":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"定":{"docs":{},"义":{"docs":{},"接":{"docs":{},"口":{"docs":{},"时":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"遵":{"docs":{},"循":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}},"我":{"docs":{},"们":{"docs":{},"修":{"docs":{},"改":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},"介":{"docs":{},"绍":{"docs":{},"的":{"docs":{},"是":{"docs":{},"后":{"docs":{},"台":{"docs":{},"微":{"docs":{},"服":{"docs":{},"务":{"docs":{},"开":{"docs":{},"发":{"docs":{},"经":{"docs":{},"常":{"docs":{},"遇":{"docs":{},"到":{"docs":{},"的":{"docs":{},"一":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"。":{"docs":{},"我":{"docs":{},"们":{"docs":{},"经":{"docs":{},"常":{"docs":{},"需":{"docs":{},"要":{"docs":{},"并":{"docs":{},"发":{"docs":{},"拉":{"docs":{},"取":{"docs":{},"多":{"docs":{},"方":{"docs":{},"面":{"docs":{},"的":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"汇":{"docs":{},"聚":{"docs":{},"到":{"docs":{},"一":{"docs":{},"个":{"docs":{},"变":{"docs":{},"量":{"docs":{},"上":{"docs":{},"。":{"docs":{},"那":{"docs":{},"么":{"docs":{},"此":{"docs":{},"时":{"docs":{},"就":{"docs":{},"存":{"docs":{},"在":{"docs":{},"对":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"变":{"docs":{},"量":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"写":{"docs":{},"入":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},"批":{"docs":{},"量":{"docs":{},"并":{"docs":{},"发":{"docs":{},"拉":{"docs":{},"取":{"docs":{},"用":{"docs":{},"户":{"docs":{},"信":{"docs":{},"息":{"docs":{},"写":{"docs":{},"入":{"docs":{},"到":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"分":{"docs":{},"别":{"docs":{},"对":{"docs":{},"长":{"docs":{},"度":{"docs":{},"为":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}},"利":{"docs":{},"用":{"docs":{},"对":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"需":{"docs":{},"要":{"docs":{},"注":{"docs":{},"意":{"docs":{},"的":{"docs":{},"是":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"每":{"docs":{},"次":{"docs":{},"读":{"docs":{},"写":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}},"个":{"docs":{},"错":{"docs":{},"误":{"docs":{},"没":{"docs":{},"有":{"docs":{},"被":{"docs":{},"导":{"docs":{},"出":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"我":{"docs":{},"们":{"docs":{},"不":{"docs":{},"想":{"docs":{},"让":{"docs":{},"它":{"docs":{},"成":{"docs":{},"为":{"docs":{},"公":{"docs":{},"共":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"我":{"docs":{},"们":{"docs":{},"公":{"docs":{},"共":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}},"被":{"docs":{},"导":{"docs":{},"出":{"docs":{},",":{"docs":{},"以":{"docs":{},"便":{"docs":{},"这":{"docs":{},"个":{"docs":{},"包":{"docs":{},"的":{"docs":{},"用":{"docs":{},"户":{"docs":{},"可":{"docs":{},"以":{"docs":{},"将":{"docs":{},"它":{"docs":{},"与":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}},"例":{"docs":{},"子":{"docs":{},"创":{"docs":{},"建":{"docs":{},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}},"实":{"docs":{},"现":{"docs":{},"了":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"就":{"docs":{},"需":{"docs":{},"要":{"docs":{},"有":{"docs":{},"个":{"docs":{},"全":{"docs":{},"局":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{},"来":{"docs":{},"标":{"docs":{},"志":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"数":{"docs":{},"据":{"docs":{},"是":{"docs":{},"否":{"docs":{},"接":{"docs":{},"受":{"docs":{},"完":{"docs":{},"毕":{"docs":{},",":{"docs":{},"剩":{"docs":{},"下":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},",":{"docs":{},"反":{"docs":{},"复":{"docs":{},"检":{"docs":{},"查":{"docs":{},"该":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"值":{"docs":{},",":{"docs":{},"直":{"docs":{},"到":{"docs":{},"满":{"docs":{},"足":{"docs":{},"要":{"docs":{},"求":{"docs":{},"。":{"docs":{},"或":{"docs":{},"者":{"docs":{},"创":{"docs":{},"建":{"docs":{},"多":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"类":{"docs":{},"意":{"docs":{},"义":{"docs":{},"太":{"docs":{},"宽":{"docs":{},"泛":{"docs":{},"的":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}},"易":{"docs":{},"混":{"docs":{},"淆":{"docs":{},"名":{"docs":{},"称":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"会":{"docs":{},"精":{"docs":{},"简":{"docs":{},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},"函":{"docs":{},"数":{"docs":{},",":{"docs":{},"并":{"docs":{},"将":{"docs":{},"所":{"docs":{},"有":{"docs":{},"关":{"docs":{},"键":{"docs":{},"业":{"docs":{},"务":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"放":{"docs":{},"入":{"docs":{},"一":{"docs":{},"个":{"docs":{},"单":{"docs":{},"独":{"docs":{},"的":{"docs":{},"、":{"docs":{},"可":{"docs":{},"测":{"docs":{},"试":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"中":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"将":{"docs":{},"保":{"docs":{},"留":{"docs":{},"原":{"docs":{},"始":{"docs":{},"错":{"docs":{},"误":{"docs":{},"类":{"docs":{},"型":{"docs":{},"和":{"docs":{},"消":{"docs":{},"息":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}},"非":{"docs":{},"常":{"docs":{},"适":{"docs":{},"合":{"docs":{},"底":{"docs":{},"层":{"docs":{},"错":{"docs":{},"误":{"docs":{},"消":{"docs":{},"息":{"docs":{},"有":{"docs":{},"足":{"docs":{},"够":{"docs":{},"的":{"docs":{},"信":{"docs":{},"息":{"docs":{},"来":{"docs":{},"追":{"docs":{},"踪":{"docs":{},"它":{"docs":{},"来":{"docs":{},"自":{"docs":{},"哪":{"docs":{},"里":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"种":{"docs":{},"方":{"docs":{},"法":{"docs":{},"最":{"docs":{},"容":{"docs":{},"易":{"docs":{},"理":{"docs":{},"解":{"docs":{},",":{"docs":{},"重":{"docs":{},"新":{"docs":{},"使":{"docs":{},"用":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}},"么":{"docs":{},"设":{"docs":{},"计":{"docs":{},"的":{"docs":{},"目":{"docs":{},"的":{"docs":{},",":{"docs":{},"是":{"docs":{},"减":{"docs":{},"少":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}},"行":{"docs":{},"代":{"docs":{},"码":{"docs":{},"去":{"docs":{},"掉":{"docs":{},"呢":{"docs":{},"?":{"docs":{},"那":{"docs":{},"程":{"docs":{},"序":{"docs":{},"很":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"因":{"docs":{},"为":{"docs":{},"内":{"docs":{},"存":{"docs":{},"不":{"docs":{},"足":{"docs":{},"而":{"docs":{},"崩":{"docs":{},"溃":{"docs":{},"。":{"docs":{},"这":{"docs":{},"一":{"docs":{},"点":{"docs":{},"更":{"docs":{},"好":{"docs":{},"理":{"docs":{},"解":{"docs":{},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"至":{"docs":{},"少":{"docs":{},"需":{"docs":{},"要":{"docs":{},"消":{"docs":{},"耗":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"通":{"docs":{},"常":{"docs":{},"只":{"docs":{},"包":{"docs":{},"含":{"docs":{},"一":{"docs":{},"个":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}},"可":{"docs":{},"以":{"docs":{},"简":{"docs":{},"写":{"docs":{},"为":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}},"用":{"docs":{},"来":{"docs":{},"保":{"docs":{},"护":{"docs":{},"共":{"docs":{},"享":{"docs":{},"的":{"docs":{},"临":{"docs":{},"界":{"docs":{},"资":{"docs":{},"源":{"docs":{},",":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}},"用":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"应":{"docs":{},"用":{"docs":{},"目":{"docs":{},"录":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"s":{"docs":{},"/":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"/":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},"s":{"docs":{},"/":{"docs":{},"b":{"docs":{},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{},"/":{"docs":{},"d":{"docs":{},"e":{"docs":{},"p":{"docs":{},"l":{"docs":{},"o":{"docs":{},"y":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"s":{"docs":{},"/":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"m":{"docs":{},"d":{"2":{"docs":{},".":{"6":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},"包":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"放":{"docs":{},"在":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}},"包":{"docs":{},"注":{"docs":{},"释":{"docs":{},"函":{"docs":{},"数":{"docs":{},"注":{"docs":{},"释":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"注":{"docs":{},"释":{"docs":{},"变":{"docs":{},"量":{"docs":{},"和":{"docs":{},"常":{"docs":{},"量":{"docs":{},"注":{"docs":{},"释":{"docs":{},"类":{"docs":{},"型":{"docs":{},"注":{"docs":{},"释":{"docs":{},"接":{"docs":{},"口":{"docs":{},"注":{"docs":{},"释":{"docs":{},"在":{"docs":{},"编":{"docs":{},"码":{"docs":{},"阶":{"docs":{},"段":{"docs":{},"同":{"docs":{},"步":{"docs":{},"写":{"docs":{},"好":{"docs":{},"类":{"docs":{},"型":{"docs":{},"、":{"docs":{},"变":{"docs":{},"量":{"docs":{},"、":{"docs":{},"函":{"docs":{},"数":{"docs":{},"、":{"docs":{},"包":{"docs":{},"注":{"docs":{},"释":{"docs":{},",":{"docs":{},"注":{"docs":{},"释":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"g":{"docs":{},"o":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"导":{"docs":{},"出":{"docs":{},"生":{"docs":{},"成":{"docs":{},"文":{"docs":{},"档":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"规":{"docs":{},"则":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"项":{"docs":{},"目":{"docs":{},"命":{"docs":{},"名":{"docs":{},"包":{"docs":{},"命":{"docs":{},"名":{"docs":{},"文":{"docs":{},"件":{"docs":{},"命":{"docs":{},"名":{"docs":{},"函":{"docs":{},"数":{"docs":{},"命":{"docs":{},"名":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"命":{"docs":{},"名":{"docs":{},"接":{"docs":{},"口":{"docs":{},"命":{"docs":{},"名":{"docs":{},"量":{"docs":{},"命":{"docs":{},"名":{"docs":{},"通":{"docs":{},"用":{"docs":{},"常":{"docs":{},"量":{"docs":{},"命":{"docs":{},"名":{"docs":{},"方":{"docs":{},"法":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"命":{"docs":{},"名":{"docs":{},"错":{"docs":{},"误":{"docs":{},"命":{"docs":{},"名":{"docs":{},"避":{"docs":{},"免":{"docs":{},"使":{"docs":{},"用":{"docs":{},"内":{"docs":{},"置":{"docs":{},"名":{"docs":{},"称":{"docs":{},"命":{"docs":{},"名":{"docs":{},"是":{"docs":{},"代":{"docs":{},"码":{"docs":{},"规":{"docs":{},"范":{"docs":{},"中":{"docs":{},"很":{"docs":{},"重":{"docs":{},"要":{"docs":{},"的":{"docs":{},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},",":{"docs":{},"统":{"docs":{},"一":{"docs":{},"的":{"docs":{},"命":{"docs":{},"名":{"docs":{},"规":{"docs":{},"范":{"docs":{},"有":{"docs":{},"利":{"docs":{},"于":{"docs":{},"提":{"docs":{},"高":{"docs":{},"代":{"docs":{},"码":{"docs":{},"的":{"docs":{},"可":{"docs":{},"读":{"docs":{},"性":{"docs":{},",":{"docs":{},"好":{"docs":{},"的":{"docs":{},"命":{"docs":{},"名":{"docs":{},"仅":{"docs":{},"仅":{"docs":{},"通":{"docs":{},"过":{"docs":{},"命":{"docs":{},"名":{"docs":{},"就":{"docs":{},"可":{"docs":{},"以":{"docs":{},"获":{"docs":{},"取":{"docs":{},"到":{"docs":{},"足":{"docs":{},"够":{"docs":{},"多":{"docs":{},"的":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"场":{"docs":{},"景":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"过":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}},"%":{"docs":{},"v":{"docs":{},"打":{"docs":{},"印":{"docs":{},"错":{"docs":{},"误":{"docs":{},"信":{"docs":{},"息":{"docs":{},"时":{"docs":{},"建":{"docs":{},"议":{"docs":{},"加":{"docs":{},"冒":{"docs":{},"号":{"docs":{},"。":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}},"其":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"隐":{"docs":{},"藏":{"docs":{},"基":{"docs":{},"础":{"docs":{},"类":{"docs":{},"型":{"docs":{},"为":{"docs":{},"这":{"docs":{},"些":{"docs":{},"操":{"docs":{},"作":{"docs":{},"增":{"docs":{},"加":{"docs":{},"了":{"docs":{},"类":{"docs":{},"型":{"docs":{},"安":{"docs":{},"全":{"docs":{},"性":{"docs":{},"。":{"docs":{},"此":{"docs":{},"外":{"docs":{},",":{"docs":{},"它":{"docs":{},"还":{"docs":{},"包":{"docs":{},"括":{"docs":{},"一":{"docs":{},"个":{"docs":{},"易":{"docs":{},"用":{"docs":{},"的":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"知":{"docs":{},"协":{"docs":{},"程":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":3.333333333333333}}}},"所":{"docs":{},"有":{"docs":{},"等":{"docs":{},"待":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"队":{"docs":{},"列":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"(":{"docs":{},"事":{"docs":{},"件":{"docs":{},"发":{"docs":{},"生":{"docs":{},")":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"通":{"docs":{},"知":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"等":{"docs":{},"待":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"或":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"部":{"docs":{},"署":{"docs":{},"的":{"docs":{},"应":{"docs":{},"用":{"docs":{},"程":{"docs":{},"序":{"docs":{},")":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"目":{"docs":{},"录":{"docs":{},"被":{"docs":{},"称":{"docs":{},"为":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}},"相":{"docs":{},"关":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"分":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"字":{"docs":{},"段":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}},"可":{"docs":{},"以":{"docs":{},"做":{"docs":{},"到":{"docs":{},"字":{"docs":{},"段":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}}},"配":{"docs":{},"置":{"docs":{},"信":{"docs":{},"息":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"文":{"docs":{},"件":{"docs":{},"的":{"docs":{},"命":{"docs":{},"令":{"docs":{},"行":{"docs":{},"参":{"docs":{},"数":{"docs":{},"名":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.014760147601476014}},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}},"读":{"docs":{},"取":{"docs":{},",":{"docs":{},"和":{"docs":{},"对":{"docs":{},"象":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"应":{"docs":{},"该":{"docs":{},"分":{"docs":{},"开":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"让":{"docs":{},"对":{"docs":{},"象":{"docs":{},"自":{"docs":{},"己":{"docs":{},"根":{"docs":{},"据":{"docs":{},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},",":{"docs":{},"保":{"docs":{},"证":{"docs":{},"构":{"docs":{},"造":{"docs":{},"函":{"docs":{},"数":{"docs":{},"足":{"docs":{},"够":{"docs":{},"简":{"docs":{},"单":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"钩":{"docs":{},"子":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"帮":{"docs":{},"忙":{"docs":{},"我":{"docs":{},"们":{"docs":{},"在":{"docs":{},"代":{"docs":{},"码":{"docs":{},"提":{"docs":{},"交":{"docs":{},"时":{"docs":{},"完":{"docs":{},"成":{"docs":{},"一":{"docs":{},"些":{"docs":{},"检":{"docs":{},"测":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"分":{"docs":{},"支":{"docs":{},"名":{"docs":{},"称":{"docs":{},"和":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"页":{"docs":{},"面":{"docs":{},",":{"docs":{},"则":{"docs":{},"在":{"docs":{},"这":{"docs":{},"里":{"docs":{},"放":{"docs":{},"置":{"docs":{},"项":{"docs":{},"目":{"docs":{},"网":{"docs":{},"站":{"docs":{},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}},")":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},"%":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"d":{"docs":{},",":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}},"s":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}},"v":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.1111111111111111},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.010101010101010102},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}},"\\":{"docs":{},"n":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}}},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.022988505747126436},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},")":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}},"q":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"w":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}},"\"":{"docs":{},",":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}},">":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.03508771929824561},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.006578947368421052},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"=":{"2":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}},"docs":{}}},"n":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.010687022900763359}},"u":{"docs":{},"m":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.013237063778580024},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.015945330296127564}},",":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.03508771929824561}}},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.011389521640091117}},"}":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}},"i":{"docs":{},"l":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.009626955475330927},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.029182879377431907},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.02800658978583196},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.011904761904761904},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.038461538461538464},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.020202020202020204},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},",":{"docs":{},"另":{"docs":{},"一":{"docs":{},"个":{"docs":{},"不":{"docs":{},"是":{"docs":{},")":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"在":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"(":{"docs":{},"例":{"docs":{},"如":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},")":{"docs":{},",":{"docs":{},"这":{"docs":{},"两":{"docs":{},"个":{"docs":{},"切":{"docs":{},"片":{"docs":{},"的":{"docs":{},"处":{"docs":{},"理":{"docs":{},"方":{"docs":{},"式":{"docs":{},"可":{"docs":{},"能":{"docs":{},"不":{"docs":{},"同":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"但":{"docs":{},"是":{"docs":{},"满":{"docs":{},"足":{"docs":{},"其":{"docs":{},"他":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"进":{"docs":{},"入":{"docs":{},"到":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}},";":{"docs":{},"对":{"docs":{},"于":{"docs":{},"结":{"docs":{},"构":{"docs":{},"类":{"docs":{},"型":{"docs":{},"是":{"docs":{},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"i":{"docs":{},"c":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},":":{"docs":{},"\\":{"docs":{},"\"":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"\\":{"docs":{},"\"":{"docs":{},"\"":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}}}}}}}}}},"e":{"docs":{},"w":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"(":{"docs":{},"t":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}}},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},")":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}}}}},"t":{"docs":{},"u":{"docs":{},"d":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}},"p":{"docs":{},"p":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"a":{"docs":{},"t":{"docs":{},"t":{"docs":{},"r":{"docs":{},"m":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"(":{"docs":{},"c":{"docs":{},"t":{"docs":{},"x":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"t":{"docs":{},"r":{"docs":{},"m":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}},"s":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}}}}}}},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}}}}}}},"d":{"docs":{},"a":{"docs":{},"y":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},":":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693}}},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}}}}}}},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}},"(":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"t":{"docs":{},"/":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},"\"":{"1":{"9":{"2":{"docs":{},".":{"0":{"docs":{},".":{"2":{"docs":{},".":{"0":{"docs":{},":":{"8":{"0":{"0":{"0":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{},":":{"8":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}},"docs":{}}},"docs":{},":":{"8":{"0":{"0":{"0":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"t":{"docs":{},"t":{"docs":{},".":{"docs":{},"g":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"c":{"docs":{},"u":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"x":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}}},":":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"l":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}}},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}},"e":{"docs":{},":":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"y":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},".":{"docs":{},"w":{"docs":{},"a":{"docs":{},"i":{"docs":{},"t":{"docs":{},"、":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"这":{"docs":{},"个":{"docs":{},"队":{"docs":{},"列":{"docs":{},"被":{"docs":{},"复":{"docs":{},"制":{"docs":{},"的":{"docs":{},"话":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"就":{"docs":{},"在":{"docs":{},"并":{"docs":{},"发":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},"导":{"docs":{},"致":{"docs":{},"不":{"docs":{},"同":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}},"w":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.03125}},")":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}},":":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}},"d":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}},"c":{"docs":{},"o":{"docs":{},"p":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}}},"s":{"docs":{},"/":{"docs":{},"o":{"docs":{},"p":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.03125},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.050314465408805034},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.02821316614420063},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.04332129963898917},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.018223234624145785},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.00916030534351145},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}},"t":{"docs":{},"o":{"docs":{},"h":{"docs":{},"l":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}}},"b":{"docs":{},"i":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"a":{"docs":{},"r":{"docs":{},"y":{"docs":{},"(":{"docs":{},"b":{"docs":{},"i":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}},"\"":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"禁":{"docs":{},"用":{"docs":{},"了":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"对":{"docs":{},"切":{"docs":{},"片":{"docs":{},"遍":{"docs":{},"历":{"docs":{},"的":{"docs":{},"优":{"docs":{},"化":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"没":{"docs":{},"有":{"docs":{},"该":{"docs":{},"选":{"docs":{},"项":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"上":{"docs":{},"面":{"docs":{},"三":{"docs":{},"种":{"docs":{},"遍":{"docs":{},"历":{"docs":{},"方":{"docs":{},"式":{"docs":{},"没":{"docs":{},"有":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"别":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}},"主":{"docs":{},"体":{"docs":{},"风":{"docs":{},"格":{"docs":{},"占":{"docs":{},"位":{"docs":{},"符":{"docs":{},"主":{"docs":{},"体":{"docs":{},"风":{"docs":{},"格":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}}}}},"要":{"docs":{},"原":{"docs":{},"因":{"docs":{},"是":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"调":{"docs":{},"对":{"docs":{},"条":{"docs":{},"件":{"docs":{},"的":{"docs":{},"检":{"docs":{},"查":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}},"占":{"docs":{},"位":{"docs":{},"符":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}},"据":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"空":{"docs":{},"间":{"docs":{},"大":{"docs":{},"小":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}},"空":{"docs":{},"间":{"docs":{},"一":{"docs":{},"致":{"docs":{},",":{"docs":{},"而":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}},"用":{"docs":{},"了":{"docs":{},",":{"docs":{},"其":{"docs":{},"他":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},",":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"在":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}},"保":{"docs":{},"存":{"docs":{},"代":{"docs":{},"码":{"docs":{},"时":{"docs":{},"可":{"docs":{},"设":{"docs":{},"置":{"docs":{},"自":{"docs":{},"动":{"docs":{},"执":{"docs":{},"行":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}}}}}}},"这":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"测":{"docs":{},"试":{"docs":{},"文":{"docs":{},"件":{"docs":{},"不":{"docs":{},"能":{"docs":{},"在":{"docs":{},"包":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}},"写":{"docs":{},"入":{"docs":{},"时":{"docs":{},"会":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}},"业":{"docs":{},"务":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"处":{"docs":{},"理":{"docs":{},"中":{"docs":{},"禁":{"docs":{},"止":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{},"预":{"docs":{},"先":{"docs":{},"分":{"docs":{},"配":{"docs":{},"的":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{},"时":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"不":{"docs":{},"会":{"docs":{},"报":{"docs":{},"告":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"诸":{"docs":{},"如":{"docs":{},"g":{"docs":{},"o":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"视":{"docs":{},"觉":{"docs":{},"上":{"docs":{},"是":{"docs":{},"相":{"docs":{},"似":{"docs":{},"的":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}}}}}}}},"编":{"docs":{},"译":{"docs":{},"时":{"docs":{},"验":{"docs":{},"证":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"合":{"docs":{},"理":{"docs":{},"性":{"docs":{},",":{"docs":{},"这":{"docs":{},"包":{"docs":{},"括":{"docs":{},":":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}},"接":{"docs":{},"收":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"返":{"docs":{},"回":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"高":{"docs":{},"负":{"docs":{},"载":{"docs":{},"下":{"docs":{},"被":{"docs":{},"填":{"docs":{},"满":{"docs":{},"并":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"写":{"docs":{},"入":{"docs":{},"者":{"docs":{},",":{"docs":{},"以":{"docs":{},"及":{"docs":{},"当":{"docs":{},"这":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"发":{"docs":{},"生":{"docs":{},"时":{"docs":{},"系":{"docs":{},"统":{"docs":{},"会":{"docs":{},"发":{"docs":{},"生":{"docs":{},"哪":{"docs":{},"些":{"docs":{},"变":{"docs":{},"化":{"docs":{},"。":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"为":{"docs":{},"返":{"docs":{},"回":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},"添":{"docs":{},"加":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"时":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"避":{"docs":{},"免":{"docs":{},"使":{"docs":{},"用":{"docs":{},"\"":{"docs":{},"f":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}},"调":{"docs":{},"用":{"docs":{},"失":{"docs":{},"败":{"docs":{},"时":{"docs":{},"传":{"docs":{},"播":{"docs":{},"错":{"docs":{},"误":{"docs":{},"有":{"docs":{},"三":{"docs":{},"个":{"docs":{},"主":{"docs":{},"要":{"docs":{},"方":{"docs":{},"式":{"docs":{},":":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}},"处":{"docs":{},"理":{"docs":{},"时":{"docs":{},"间":{"docs":{},"的":{"docs":{},"瞬":{"docs":{},"间":{"docs":{},"时":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"在":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308}}}}}}}}}}}}},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"有":{"docs":{},"更":{"docs":{},"多":{"docs":{},"分":{"docs":{},"配":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}},"迭":{"docs":{},"代":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},"返":{"docs":{},"回":{"docs":{},"的":{"docs":{},"是":{"docs":{},"元":{"docs":{},"素":{"docs":{},"的":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},",":{"docs":{},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"x":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}},"部":{"docs":{},"分":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},",":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"只":{"docs":{},"包":{"docs":{},"含":{"docs":{},"方":{"docs":{},"法":{"docs":{},",":{"docs":{},"不":{"docs":{},"包":{"docs":{},"含":{"docs":{},"任":{"docs":{},"何":{"docs":{},"的":{"docs":{},"字":{"docs":{},"段":{"docs":{},"。":{"docs":{},"例":{"docs":{},"如":{"docs":{},"上":{"docs":{},"面":{"docs":{},"例":{"docs":{},"子":{"docs":{},"中":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"多":{"docs":{},"数":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}},"热":{"docs":{},"路":{"docs":{},"径":{"docs":{},"中":{"docs":{},",":{"docs":{},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"占":{"docs":{},"位":{"docs":{},"符":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"输":{"docs":{},"入":{"docs":{},"数":{"docs":{},"据":{"docs":{},"来":{"docs":{},"自":{"docs":{},"外":{"docs":{},"部":{"docs":{},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"使":{"docs":{},"用":{"docs":{},"%":{"docs":{},"q":{"docs":{},"进":{"docs":{},"行":{"docs":{},"安":{"docs":{},"全":{"docs":{},"转":{"docs":{},"义":{"docs":{},"。":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}},"拼":{"docs":{},"接":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}},"还":{"docs":{},"有":{"docs":{},"其":{"docs":{},"他":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},".":{"docs":{},"j":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},"、":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"、":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"和":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"[":{"docs":{},"]":{"docs":{},",":{"docs":{},"这":{"docs":{},"几":{"docs":{},"种":{"docs":{},"不":{"docs":{},"适":{"docs":{},"合":{"docs":{},"行":{"docs":{},"内":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{},"当":{"docs":{},"待":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"数":{"docs":{},"量":{"docs":{},"较":{"docs":{},"多":{"docs":{},"时":{"docs":{},"可":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"搜":{"docs":{},"索":{"docs":{},"存":{"docs":{},"在":{"docs":{},"二":{"docs":{},"义":{"docs":{},"性":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},",":{"docs":{},"并":{"docs":{},"通":{"docs":{},"过":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}},";":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"节":{"docs":{},"数":{"docs":{},"组":{"docs":{},"读":{"docs":{},"取":{"docs":{},"接":{"docs":{},"口":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"。":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.027586206896551724}}},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"的":{"docs":{},"空":{"docs":{},"间":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}},",":{"docs":{},"与":{"docs":{},"字":{"docs":{},"段":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"即":{"docs":{},"额":{"docs":{},"外":{"docs":{},"填":{"docs":{},"充":{"docs":{},"了":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}},"那":{"docs":{},"么":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"缓":{"docs":{},"冲":{"docs":{},"器":{"docs":{},"为":{"docs":{},"例":{"docs":{},",":{"docs":{},"利":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}},"工":{"docs":{},"具":{"docs":{},"格":{"docs":{},"式":{"docs":{},"化":{"docs":{},"。":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}},"生":{"docs":{},"成":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}},"自":{"docs":{},"动":{"docs":{},"格":{"docs":{},"式":{"docs":{},"化":{"docs":{},"引":{"docs":{},"入":{"docs":{},"的":{"docs":{},"包":{"docs":{},"名":{"docs":{},",":{"docs":{},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}},"生":{"docs":{},"成":{"docs":{},"文":{"docs":{},"件":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"可":{"docs":{},"以":{"docs":{},"帮":{"docs":{},"我":{"docs":{},"们":{"docs":{},"静":{"docs":{},"态":{"docs":{},"分":{"docs":{},"析":{"docs":{},"我":{"docs":{},"们":{"docs":{},"的":{"docs":{},"源":{"docs":{},"码":{"docs":{},"存":{"docs":{},"在":{"docs":{},"的":{"docs":{},"各":{"docs":{},"种":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{},"多":{"docs":{},"余":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"提":{"docs":{},"前":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"并":{"docs":{},"指":{"docs":{},"定":{"docs":{},"作":{"docs":{},"用":{"docs":{},"范":{"docs":{},"围":{"docs":{},"。":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}},"且":{"docs":{},"标":{"docs":{},"明":{"docs":{},"后":{"docs":{},"续":{"docs":{},"处":{"docs":{},"理":{"docs":{},"建":{"docs":{},"议":{"docs":{},"(":{"docs":{},"如":{"docs":{},"删":{"docs":{},"除":{"docs":{},"计":{"docs":{},"划":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}},"没":{"docs":{},"有":{"docs":{},"关":{"docs":{},"键":{"docs":{},"字":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}},"提":{"docs":{},"供":{"docs":{},"删":{"docs":{},"除":{"docs":{},"切":{"docs":{},"片":{"docs":{},"元":{"docs":{},"素":{"docs":{},"专":{"docs":{},"用":{"docs":{},"的":{"docs":{},"语":{"docs":{},"法":{"docs":{},"或":{"docs":{},"函":{"docs":{},"数":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"切":{"docs":{},"片":{"docs":{},"本":{"docs":{},"身":{"docs":{},"的":{"docs":{},"特":{"docs":{},"性":{"docs":{},"来":{"docs":{},"删":{"docs":{},"除":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"发":{"docs":{},"写":{"docs":{},"入":{"docs":{},"有":{"docs":{},"锁":{"docs":{},"链":{"docs":{},"表":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}},"不":{"docs":{},"是":{"docs":{},"必":{"docs":{},"须":{"docs":{},"的":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},",":{"docs":{},"这":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"出":{"docs":{},"现":{"docs":{},"有":{"docs":{},"些":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}},"!":{"docs":{},"=":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.018518518518518517},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.019455252918287938},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.026359143327841845},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.008503401360544218},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.03076923076923077},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.020202020202020204},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}},"o":{"docs":{},"k":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},"i":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}}}}}}}}},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}}},"+":{"0":{"docs":{},"x":{"1":{"1":{"docs":{},"b":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"4":{"8":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"docs":{}},"6":{"5":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"7":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"5":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"8":{"docs":{},"f":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}}},"1":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.034482758620689655},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259}},"=":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335}}}},".":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},".":{"docs":{},".":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.018050541516245487},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.026359143327841845},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.017006802721088437},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.049019607843137254},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.010869565217391304},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.011834319526627219},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},".":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"6":{"4":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"docs":{}},"docs":{}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}}}}}}}}}}}}},"形":{"docs":{},"式":{"docs":{},"导":{"docs":{},"入":{"docs":{},"包":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"它":{"docs":{},"使":{"docs":{},"程":{"docs":{},"序":{"docs":{},"难":{"docs":{},"以":{"docs":{},"阅":{"docs":{},"读":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}},"/":{"docs":{},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},":":{"5":{"docs":{},":":{"1":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893}}}},"docs":{}},"docs":{}}},"9":{"docs":{},":":{"1":{"2":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}}},"docs":{}}}}}}}}}}},":":{"docs":{},"=":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.013888888888888888},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.06896551724137931},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.03730445246690734},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.021400778210116732},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.008223684210526315},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.04612850082372323},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.034013605442176874},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.016304347826086956},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.04411764705882353},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.03076923076923077},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.05555555555555555},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.020202020202020204},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.03125},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.040100250626566414},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.04697986577181208},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.03773584905660377},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.02821316614420063},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.036101083032490974},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.025056947608200455},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.010256410256410256},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0366412213740458},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.02050113895216401},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}},"[":{"1":{"0":{"2":{"4":{"docs":{},"]":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"每":{"docs":{},"次":{"docs":{},"遍":{"docs":{},"历":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}},"docs":{}},"docs":{}},"docs":{}},"4":{"docs":{},"]":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"docs":{},"]":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"t":{"6":{"4":{"docs":{},"{":{"1":{"docs":{},".":{"0":{"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"{":{"docs":{},"\"":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},"\"":{"docs":{},",":{"docs":{},"\"":{"docs":{},"j":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"y":{"docs":{},"\"":{"docs":{},",":{"docs":{},"\"":{"docs":{},"s":{"docs":{},"p":{"docs":{},"i":{"docs":{},"k":{"docs":{},"e":{"docs":{},"\"":{"docs":{},"}":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.01567398119122257}},"{":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.021660649819494584}},"{":{"1":{"docs":{},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}},"docs":{},"}":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635}}}},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"{":{"docs":{},"}":{"docs":{},"{":{"docs":{},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"6":{"4":{"docs":{},"(":{"1":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"docs":{}}},"docs":{}},"docs":{}}}}}}}}}}}}}},"。":{"docs":{},"但":{"docs":{},"如":{"docs":{},"果":{"docs":{},"迭":{"docs":{},"代":{"docs":{},"的":{"docs":{},"元":{"docs":{},"素":{"docs":{},"较":{"docs":{},"大":{"docs":{},",":{"docs":{},"如":{"docs":{},"一":{"docs":{},"个":{"docs":{},"包":{"docs":{},"含":{"docs":{},"很":{"docs":{},"多":{"docs":{},"属":{"docs":{},"性":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.01444043321299639}}}}},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},",":{"docs":{},"都":{"docs":{},"会":{"docs":{},"进":{"docs":{},"行":{"docs":{},"一":{"docs":{},"次":{"docs":{},"值":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"带":{"docs":{},"来":{"docs":{},"了":{"docs":{},"性":{"docs":{},"能":{"docs":{},"损":{"docs":{},"耗":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}}}}}}},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},")":{"docs":{},"{":{"docs":{},"}":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"6":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"{":{"1":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"docs":{}}},"docs":{}},"docs":{}}}}},"*":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028}}}}}}}},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"n":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"]":{"docs":{},":":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"y":{"docs":{},"l":{"docs":{},"e":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"c":{"docs":{},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},"]":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893}}}}}}}}}}}}}}},"{":{"0":{"docs":{},"x":{"docs":{},"c":{"1":{"2":{"docs":{},"c":{"docs":{},"a":{"docs":{},"d":{"docs":{},"f":{"6":{"9":{"0":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}},"docs":{}},"docs":{}},"docs":{}}}}},"e":{"docs":{},"a":{"6":{"2":{"docs":{},"f":{"9":{"0":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}},"docs":{}},"docs":{}}}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.037037037037037035},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.03489771359807461},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.054474708171206226},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.029605263157894735},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.09060955518945635},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.061224489795918366},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.03680981595092025},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.04938271604938271},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.058823529411764705},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.02717391304347826},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.029411764705882353},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.06923076923076923},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.049586776859504134},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.05387205387205387},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.03153153153153153},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0784313725490196},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0703125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.0650887573964497},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.02506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.01567398119122257},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.04332129963898917},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.04678362573099415},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.020689655172413793},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.022779043280182234},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.02564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.03969465648854962},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.01366742596810934},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.026607538802660754},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.023090586145648313}},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"g":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"s":{"docs":{},"u":{"docs":{},"b":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}},".":{"docs":{},".":{"docs":{},".":{"docs":{},"}":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.006802721088435374}}}}}},"\"":{"docs":{},"a":{"docs":{},"\"":{"docs":{},"}":{"docs":{},"}":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"\"":{"docs":{},":":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}},"m":{"docs":{},"i":{"docs":{},"l":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"\"":{"docs":{},":":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}},"}":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}},"h":{"docs":{},"e":{"docs":{},"a":{"docs":{},"p":{"docs":{},"}":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}},"}":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.037037037037037035},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0457280385078219},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.04669260700389105},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.03125},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.09060955518945635},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.06292517006802721},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.012269938650306749},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.04938271604938271},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.058823529411764705},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.02717391304347826},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.029411764705882353},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.06153846153846154},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.06611570247933884},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.05387205387205387},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.02702702702702703},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0784313725490196},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0703125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.0650887573964497},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.015037593984962405},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.032490974729241874},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.04093567251461988},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.020689655172413793},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.00683371298405467},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.020512820512820513},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.035114503816793895},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.024390243902439025},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.017761989342806393}},"{":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.007782101167315175},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693}}}},"一":{"docs":{},"行":{"docs":{},"代":{"docs":{},"码":{"docs":{},"不":{"docs":{},"要":{"docs":{},"超":{"docs":{},"过":{"1":{"2":{"0":{"docs":{},"列":{"docs":{},",":{"docs":{},"超":{"docs":{},"过":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"合":{"docs":{},"理":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"换":{"docs":{},"行":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}}}}}}}},"份":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}},"个":{"docs":{},"可":{"docs":{},"能":{"docs":{},"引":{"docs":{},"发":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},"就":{"docs":{},"是":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}},"函":{"docs":{},"数":{"docs":{},"内":{"docs":{},"不":{"docs":{},"应":{"docs":{},"该":{"docs":{},"混":{"docs":{},"杂":{"docs":{},"多":{"docs":{},"个":{"docs":{},"实":{"docs":{},"现":{"docs":{},"细":{"docs":{},"节":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"将":{"docs":{},"独":{"docs":{},"立":{"docs":{},"的":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"封":{"docs":{},"装":{"docs":{},"成":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"只":{"docs":{},"负":{"docs":{},"责":{"docs":{},"一":{"docs":{},"个":{"docs":{},"职":{"docs":{},"责":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}},"文":{"docs":{},"件":{"docs":{},"中":{"docs":{},"出":{"docs":{},"现":{"docs":{},"多":{"docs":{},"个":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"时":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"注":{"docs":{},"意":{"docs":{},"观":{"docs":{},"察":{"docs":{},"是":{"docs":{},"否":{"docs":{},"有":{"docs":{},"重":{"docs":{},"复":{"docs":{},"的":{"docs":{},"成":{"docs":{},"员":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"中":{"docs":{},",":{"docs":{},"成":{"docs":{},"员":{"docs":{},"较":{"docs":{},"多":{"docs":{},",":{"docs":{},"且":{"docs":{},"多":{"docs":{},"个":{"docs":{},"成":{"docs":{},"员":{"docs":{},"有":{"docs":{},"明":{"docs":{},"显":{"docs":{},"关":{"docs":{},"联":{"docs":{},"关":{"docs":{},"系":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"封":{"docs":{},"装":{"docs":{},"新":{"docs":{},"的":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"起":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"旦":{"docs":{},"有":{"docs":{},"错":{"docs":{},"误":{"docs":{},"发":{"docs":{},"生":{"docs":{},",":{"docs":{},"马":{"docs":{},"上":{"docs":{},"返":{"docs":{},"回":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}},"次":{"docs":{},"循":{"docs":{},"环":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"只":{"docs":{},"做":{"docs":{},"一":{"docs":{},"件":{"docs":{},"事":{"docs":{},",":{"docs":{},"不":{"docs":{},"用":{"docs":{},"担":{"docs":{},"心":{"docs":{},"多":{"docs":{},"次":{"docs":{},"循":{"docs":{},"环":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}},"种":{"docs":{},"是":{"docs":{},"不":{"docs":{},"含":{"docs":{},"任":{"docs":{},"何":{"docs":{},"方":{"docs":{},"法":{"docs":{},"的":{"docs":{},"空":{"docs":{},"接":{"docs":{},"口":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},":":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}}}}}}}},"带":{"docs":{},"有":{"docs":{},"一":{"docs":{},"组":{"docs":{},"方":{"docs":{},"法":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"i":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},":":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}}}}}}}}},"分":{"docs":{},"钟":{"docs":{},"有":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"周":{"docs":{},"有":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}},"天":{"docs":{},"有":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}},"小":{"docs":{},"时":{"docs":{},"有":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"年":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"般":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"对":{"docs":{},"于":{"docs":{},"需":{"docs":{},"要":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"或":{"docs":{},"占":{"docs":{},"用":{"docs":{},"内":{"docs":{},"存":{"docs":{},"比":{"docs":{},"较":{"docs":{},"大":{"docs":{},"的":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"返":{"docs":{},"回":{"docs":{},"指":{"docs":{},"针":{"docs":{},"。":{"docs":{},"对":{"docs":{},"于":{"docs":{},"只":{"docs":{},"读":{"docs":{},"或":{"docs":{},"占":{"docs":{},"用":{"docs":{},"内":{"docs":{},"存":{"docs":{},"较":{"docs":{},"小":{"docs":{},"的":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"能":{"docs":{},"够":{"docs":{},"获":{"docs":{},"得":{"docs":{},"更":{"docs":{},"好":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"来":{"docs":{},"说":{"docs":{},",":{"docs":{},"有":{"docs":{},"如":{"docs":{},"下":{"docs":{},"几":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}},"句":{"docs":{},"话":{"docs":{},"总":{"docs":{},"结":{"docs":{},":":{"docs":{},"用":{"docs":{},"来":{"docs":{},"保":{"docs":{},"存":{"docs":{},"和":{"docs":{},"复":{"docs":{},"用":{"docs":{},"临":{"docs":{},"时":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"减":{"docs":{},"少":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},",":{"docs":{},"降":{"docs":{},"低":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"例":{"docs":{},"外":{"docs":{},"场":{"docs":{},"景":{"docs":{},":":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"是":{"docs":{},"相":{"docs":{},"似":{"docs":{},"的":{"docs":{},"一":{"docs":{},"组":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"请":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}},":":{"docs":{},"在":{"docs":{},"字":{"docs":{},"段":{"docs":{},"名":{"docs":{},"提":{"docs":{},"供":{"docs":{},"有":{"docs":{},"意":{"docs":{},"义":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"的":{"docs":{},"地":{"docs":{},"方":{"docs":{},"可":{"docs":{},"以":{"docs":{},"显":{"docs":{},"示":{"docs":{},"指":{"docs":{},"定":{"docs":{},"零":{"docs":{},"值":{"docs":{},"。":{"docs":{},"如":{"docs":{},"表":{"docs":{},"驱":{"docs":{},"动":{"docs":{},"单":{"docs":{},"元":{"docs":{},"测":{"docs":{},"试":{"docs":{},"中":{"docs":{},"的":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{},"例":{"docs":{},",":{"docs":{},"即":{"docs":{},"使":{"docs":{},"字":{"docs":{},"段":{"docs":{},"为":{"docs":{},"零":{"docs":{},"值":{"docs":{},",":{"docs":{},"限":{"docs":{},"制":{"docs":{},"指":{"docs":{},"定":{"docs":{},"零":{"docs":{},"值":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"字":{"docs":{},"段":{"docs":{},"名":{"docs":{},"可":{"docs":{},"清":{"docs":{},"晰":{"docs":{},"地":{"docs":{},"表":{"docs":{},"达":{"docs":{},"用":{"docs":{},"例":{"docs":{},"的":{"docs":{},"含":{"docs":{},"义":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"如":{"docs":{},"果":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},"有":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"如":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"s":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"表":{"docs":{},"示":{"docs":{},"带":{"docs":{},"有":{"docs":{},"静":{"docs":{},"态":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"需":{"docs":{},"要":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"并":{"docs":{},"处":{"docs":{},"理":{"docs":{},"此":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"则":{"docs":{},"将":{"docs":{},"此":{"docs":{},"错":{"docs":{},"误":{"docs":{},"导":{"docs":{},"出":{"docs":{},"为":{"docs":{},"变":{"docs":{},"量":{"docs":{},"以":{"docs":{},"支":{"docs":{},"持":{"docs":{},"将":{"docs":{},"其":{"docs":{},"与":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"s":{"docs":{},".":{"docs":{},"i":{"docs":{},"s":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{},"一":{"docs":{},"个":{"docs":{},"时":{"docs":{},"间":{"docs":{},"点":{"docs":{},"上":{"docs":{},"加":{"docs":{},"上":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}},"由":{"docs":{},"于":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}},"括":{"docs":{},"号":{"docs":{},"和":{"docs":{},"空":{"docs":{},"格":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}},"换":{"docs":{},"行":{"docs":{},"方":{"docs":{},"式":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}},"文":{"docs":{},"件":{"docs":{},"长":{"docs":{},"度":{"docs":{},"不":{"docs":{},"能":{"docs":{},"超":{"docs":{},"过":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}},"中":{"docs":{},"(":{"docs":{},"一":{"docs":{},"般":{"docs":{},"是":{"docs":{},"和":{"docs":{},"包":{"docs":{},"同":{"docs":{},"名":{"docs":{},"的":{"docs":{},"文":{"docs":{},"件":{"docs":{},")":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"出":{"docs":{},"现":{"docs":{},"在":{"docs":{},"一":{"docs":{},"个":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}},"名":{"docs":{},"应":{"docs":{},"该":{"docs":{},"采":{"docs":{},"用":{"docs":{},"小":{"docs":{},"写":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"使":{"docs":{},"用":{"docs":{},"下":{"docs":{},"划":{"docs":{},"线":{"docs":{},"分":{"docs":{},"割":{"docs":{},"各":{"docs":{},"个":{"docs":{},"单":{"docs":{},"词":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"模":{"docs":{},"块":{"docs":{},"语":{"docs":{},"句":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}},"式":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}},"拟":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"行":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}}},"数":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}},"长":{"docs":{},"度":{"docs":{},"换":{"docs":{},"行":{"docs":{},"方":{"docs":{},"式":{"docs":{},"不":{"docs":{},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{},"空":{"docs":{},"行":{"docs":{},"括":{"docs":{},"号":{"docs":{},"和":{"docs":{},"空":{"docs":{},"格":{"docs":{},"行":{"docs":{},"数":{"docs":{},"行":{"docs":{},"长":{"docs":{},"度":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}}}}}}}}}}}}}}}}},"内":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"时":{"docs":{},",":{"docs":{},"出":{"docs":{},"于":{"docs":{},"性":{"docs":{},"能":{"docs":{},"的":{"docs":{},"考":{"docs":{},"虑":{"docs":{},",":{"docs":{},"待":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"数":{"docs":{},"量":{"docs":{},"较":{"docs":{},"少":{"docs":{},"(":{"docs":{},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"拼":{"docs":{},"接":{"docs":{},",":{"docs":{},"主":{"docs":{},"要":{"docs":{},"追":{"docs":{},"求":{"docs":{},"的":{"docs":{},"是":{"docs":{},"代":{"docs":{},"码":{"docs":{},"的":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"可":{"docs":{},"读":{"docs":{},"。":{"docs":{},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"拼":{"docs":{},"接":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"为":{"docs":{},"了":{"docs":{},"书":{"docs":{},"写":{"docs":{},"方":{"docs":{},"便":{"docs":{},"快":{"docs":{},"捷":{"docs":{},",":{"docs":{},"最":{"docs":{},"常":{"docs":{},"用":{"docs":{},"的":{"docs":{},"两":{"docs":{},"个":{"docs":{},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"不":{"docs":{},"要":{"docs":{},"用":{"docs":{},"单":{"docs":{},"字":{"docs":{},"符":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}},")":{"docs":{},"。":{"docs":{},"单":{"docs":{},"测":{"docs":{},"函":{"docs":{},"数":{"docs":{},"行":{"docs":{},"数":{"docs":{},"限":{"docs":{},"制":{"docs":{},"也":{"docs":{},"是":{"docs":{},"普":{"docs":{},"通":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"2":{"docs":{},"倍":{"docs":{},"(":{"1":{"6":{"0":{"docs":{},"行":{"docs":{},")":{"docs":{},"。":{"docs":{},"圈":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"度":{"docs":{},"、":{"docs":{},"列":{"docs":{},"数":{"docs":{},"限":{"docs":{},"制":{"docs":{},"、":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}}}},"docs":{}}}}}}}}}}}}}}}}}}},"运":{"docs":{},"算":{"docs":{},"符":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}},"和":{"docs":{},"操":{"docs":{},"作":{"docs":{},"数":{"docs":{},"之":{"docs":{},"间":{"docs":{},"要":{"docs":{},"留":{"docs":{},"空":{"docs":{},"格":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}}}}}},"+":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}},"行":{"docs":{},"结":{"docs":{},"果":{"docs":{},":":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},",":{"docs":{},"注":{"docs":{},"意":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"基":{"docs":{},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},",":{"docs":{},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}},"将":{"docs":{},"得":{"docs":{},"到":{"docs":{},"如":{"docs":{},"下":{"docs":{},"结":{"docs":{},"果":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}}}}}}}}}}},"例":{"docs":{},"子":{"docs":{},"将":{"docs":{},"会":{"docs":{},"输":{"docs":{},"出":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028}}}}}}}}},"时":{"docs":{},"管":{"docs":{},"理":{"docs":{},"的":{"docs":{},"轻":{"docs":{},"量":{"docs":{},"级":{"docs":{},"线":{"docs":{},"程":{"docs":{},"。":{"docs":{},"通":{"docs":{},"过":{"docs":{},"它":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"轻":{"docs":{},"松":{"docs":{},"实":{"docs":{},"现":{"docs":{},"并":{"docs":{},"发":{"docs":{},"编":{"docs":{},"程":{"docs":{},"。":{"docs":{},"但":{"docs":{},"是":{"docs":{},"当":{"docs":{},"我":{"docs":{},"们":{"docs":{},"无":{"docs":{},"限":{"docs":{},"开":{"docs":{},"辟":{"docs":{},"协":{"docs":{},"程":{"docs":{},"时":{"docs":{},",":{"docs":{},"将":{"docs":{},"会":{"docs":{},"遇":{"docs":{},"到":{"docs":{},"致":{"docs":{},"命":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"它":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"轻":{"docs":{},"松":{"docs":{},"实":{"docs":{},"现":{"docs":{},"并":{"docs":{},"发":{"docs":{},"编":{"docs":{},"程":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"结":{"docs":{},"果":{"docs":{},"是":{"docs":{},"程":{"docs":{},"序":{"docs":{},"直":{"docs":{},"接":{"docs":{},"崩":{"docs":{},"溃":{"docs":{},"了":{"docs":{},",":{"docs":{},"关":{"docs":{},"键":{"docs":{},"的":{"docs":{},"报":{"docs":{},"错":{"docs":{},"信":{"docs":{},"息":{"docs":{},"是":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}},"输":{"docs":{},"出":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}},"如":{"docs":{},"下":{"docs":{},",":{"docs":{},"注":{"docs":{},"意":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"遵":{"docs":{},"循":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}},"采":{"docs":{},"用":{"docs":{},"惰":{"docs":{},"性":{"docs":{},"换":{"docs":{},"行":{"docs":{},",":{"docs":{},"换":{"docs":{},"行":{"docs":{},"前":{"docs":{},"应":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"占":{"docs":{},"满":{"docs":{},"当":{"docs":{},"前":{"docs":{},"行":{"docs":{},"不":{"docs":{},"留":{"docs":{},"空":{"docs":{},"位":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}}}}}}}}}}}}}}}}},"独":{"docs":{},"立":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},"流":{"docs":{},"进":{"docs":{},"行":{"docs":{},"处":{"docs":{},"理":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}},"有":{"docs":{},"意":{"docs":{},"义":{"docs":{},"、":{"docs":{},"简":{"docs":{},"短":{"docs":{},"的":{"docs":{},"文":{"docs":{},"件":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}},"驼":{"docs":{},"峰":{"docs":{},"命":{"docs":{},"名":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"首":{"docs":{},"字":{"docs":{},"母":{"docs":{},"根":{"docs":{},"据":{"docs":{},"访":{"docs":{},"问":{"docs":{},"控":{"docs":{},"制":{"docs":{},"采":{"docs":{},"用":{"docs":{},"大":{"docs":{},"写":{"docs":{},"或":{"docs":{},"者":{"docs":{},"小":{"docs":{},"写":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"`":{"docs":{},"u":{"docs":{},"n":{"docs":{},"k":{"docs":{},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}}}},"`":{"docs":{},"`":{"docs":{},"g":{"docs":{},"o":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.007782101167315175},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.006589785831960461},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"s":{"docs":{},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"e":{"docs":{},"l":{"docs":{},"d":{"docs":{},"s":{"docs":{},"`":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.023076923076923078}}}}}}}}},"j":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{},":":{"docs":{},"\"":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"\"":{"docs":{},"`":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}},"m":{"docs":{},"i":{"docs":{},"l":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"\"":{"docs":{},"`":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"`":{"docs":{},"。":{"docs":{},"但":{"docs":{},"是":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"我":{"docs":{},"们":{"docs":{},"想":{"docs":{},"保":{"docs":{},"证":{"docs":{},"某":{"docs":{},"一":{"docs":{},"时":{"docs":{},"刻":{"docs":{},"比":{"docs":{},"前":{"docs":{},"一":{"docs":{},"时":{"docs":{},"刻":{"docs":{},"晚":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"支":{"docs":{},"持":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009}},"使":{"docs":{},"用":{"docs":{},"原":{"docs":{},"始":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"字":{"docs":{},"面":{"docs":{},"值":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{},"反":{"docs":{},"引":{"docs":{},"号":{"docs":{},"来":{"docs":{},"表":{"docs":{},"示":{"docs":{},"原":{"docs":{},"生":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"。":{"docs":{},"在":{"docs":{},"需":{"docs":{},"要":{"docs":{},"转":{"docs":{},"义":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"使":{"docs":{},"用":{"docs":{},"使":{"docs":{},"用":{"docs":{},"反":{"docs":{},"引":{"docs":{},"号":{"docs":{},"表":{"docs":{},"示":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"转":{"docs":{},"义":{"docs":{},"。":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"将":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009}}}}},"结":{"docs":{},"构":{"docs":{},"。":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}},"体":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}},"信":{"docs":{},"息":{"docs":{},"描":{"docs":{},"述":{"docs":{},"\"":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}},"内":{"docs":{},"的":{"docs":{},"可":{"docs":{},"导":{"docs":{},"出":{"docs":{},"成":{"docs":{},"员":{"docs":{},"变":{"docs":{},"量":{"docs":{},"名":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"是":{"docs":{},"个":{"docs":{},"生":{"docs":{},"僻":{"docs":{},"词":{"docs":{},"或":{"docs":{},"意":{"docs":{},"义":{"docs":{},"不":{"docs":{},"明":{"docs":{},"确":{"docs":{},"的":{"docs":{},"词":{"docs":{},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"要":{"docs":{},"单":{"docs":{},"独":{"docs":{},"给":{"docs":{},"出":{"docs":{},"注":{"docs":{},"释":{"docs":{},",":{"docs":{},"放":{"docs":{},"在":{"docs":{},"成":{"docs":{},"员":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"前":{"docs":{},"一":{"docs":{},"行":{"docs":{},"或":{"docs":{},"同":{"docs":{},"一":{"docs":{},"行":{"docs":{},"的":{"docs":{},"末":{"docs":{},"尾":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"名":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}},"应":{"docs":{},"该":{"docs":{},"是":{"docs":{},"名":{"docs":{},"词":{"docs":{},"或":{"docs":{},"名":{"docs":{},"词":{"docs":{},"短":{"docs":{},"语":{"docs":{},",":{"docs":{},"如":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}},"注":{"docs":{},"释":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"的":{"docs":{},"定":{"docs":{},"义":{"docs":{},"和":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"格":{"docs":{},"式":{"docs":{},"采":{"docs":{},"用":{"docs":{},"多":{"docs":{},"行":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}},",":{"docs":{},"那":{"docs":{},"么":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}},",":{"docs":{},"其":{"docs":{},"有":{"docs":{},"两":{"docs":{},"个":{"docs":{},"变":{"docs":{},"量":{"docs":{},"。":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"来":{"docs":{},"接":{"docs":{},"收":{"docs":{},"通":{"docs":{},"知":{"docs":{},"就":{"docs":{},"行":{"docs":{},"了":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}},"束":{"docs":{},"程":{"docs":{},"序":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"上":{"docs":{},"的":{"docs":{},"包":{"docs":{},"要":{"docs":{},"确":{"docs":{},"认":{"docs":{},"活":{"docs":{},"跃":{"docs":{},"度":{"docs":{},",":{"docs":{},"不":{"docs":{},"知":{"docs":{},"名":{"docs":{},"的":{"docs":{},"包":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"被":{"docs":{},"下":{"docs":{},"架":{"docs":{},"或":{"docs":{},"出":{"docs":{},"现":{"docs":{},"不":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"的":{"docs":{},"版":{"docs":{},"本":{"docs":{},"升":{"docs":{},"级":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"必":{"docs":{},"要":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"可":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"面":{"docs":{},"这":{"docs":{},"三":{"docs":{},"条":{"docs":{},"是":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"对":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"检":{"docs":{},"查":{"docs":{},"机":{"docs":{},"制":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"有":{"docs":{},"几":{"docs":{},"点":{"docs":{},"需":{"docs":{},"要":{"docs":{},"注":{"docs":{},"意":{"docs":{},"一":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}},"例":{"docs":{},"子":{"docs":{},"只":{"docs":{},"是":{"docs":{},"简":{"docs":{},"单":{"docs":{},"地":{"docs":{},"限":{"docs":{},"制":{"docs":{},"了":{"docs":{},"协":{"docs":{},"程":{"docs":{},"开":{"docs":{},"辟":{"docs":{},"的":{"docs":{},"数":{"docs":{},"量":{"docs":{},"。":{"docs":{},"在":{"docs":{},"此":{"docs":{},"基":{"docs":{},"础":{"docs":{},"之":{"docs":{},"上":{"docs":{},",":{"docs":{},"基":{"docs":{},"于":{"docs":{},"对":{"docs":{},"象":{"docs":{},"复":{"docs":{},"用":{"docs":{},"的":{"docs":{},"思":{"docs":{},"想":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"重":{"docs":{},"复":{"docs":{},"利":{"docs":{},"用":{"docs":{},"已":{"docs":{},"开":{"docs":{},"辟":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"协":{"docs":{},"程":{"docs":{},"的":{"docs":{},"重":{"docs":{},"复":{"docs":{},"创":{"docs":{},"建":{"docs":{},"销":{"docs":{},"毁":{"docs":{},",":{"docs":{},"达":{"docs":{},"到":{"docs":{},"池":{"docs":{},"化":{"docs":{},"的":{"docs":{},"效":{"docs":{},"果":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"分":{"docs":{},"析":{"docs":{},"目":{"docs":{},"的":{"docs":{},"是":{"docs":{},"为":{"docs":{},"了":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"地":{"docs":{},"量":{"docs":{},"化":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"其":{"docs":{},"对":{"docs":{},"性":{"docs":{},"能":{"docs":{},"的":{"docs":{},"影":{"docs":{},"响":{"docs":{},"将":{"docs":{},"被":{"docs":{},"放":{"docs":{},"大":{"docs":{},"。":{"docs":{},"这":{"docs":{},"里":{"docs":{},"解":{"docs":{},"释":{"docs":{},"下":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}},"由":{"docs":{},"接":{"docs":{},"收":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},"在":{"docs":{},"数":{"docs":{},"据":{"docs":{},"接":{"docs":{},"收":{"docs":{},"完":{"docs":{},"毕":{"docs":{},"后":{"docs":{},",":{"docs":{},"逐":{"docs":{},"个":{"docs":{},"通":{"docs":{},"知":{"docs":{},"。":{"docs":{},"总":{"docs":{},"之":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"额":{"docs":{},"外":{"docs":{},"的":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"度":{"docs":{},"来":{"docs":{},"完":{"docs":{},"成":{"docs":{},"这":{"docs":{},"件":{"docs":{},"事":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"进":{"docs":{},"行":{"docs":{},"修":{"docs":{},"改":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}},"例":{"docs":{},"中":{"docs":{},"创":{"docs":{},"建":{"docs":{},"了":{"docs":{},"缓":{"docs":{},"冲":{"docs":{},"区":{"docs":{},"大":{"docs":{},"小":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}},"了":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}},"会":{"docs":{},"自":{"docs":{},"动":{"docs":{},"添":{"docs":{},"加":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"的":{"docs":{},"包":{"docs":{},",":{"docs":{},"并":{"docs":{},"移":{"docs":{},"除":{"docs":{},"未":{"docs":{},"引":{"docs":{},"用":{"docs":{},"的":{"docs":{},"包":{"docs":{},"。":{"docs":{},"把":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"包":{"docs":{},"按":{"docs":{},"字":{"docs":{},"母":{"docs":{},"序":{"docs":{},"升":{"docs":{},"序":{"docs":{},"排":{"docs":{},"列":{"docs":{},",":{"docs":{},"并":{"docs":{},"对":{"docs":{},"包":{"docs":{},"进":{"docs":{},"行":{"docs":{},"分":{"docs":{},"组":{"docs":{},"管":{"docs":{},"理":{"docs":{},"。":{"docs":{},"通":{"docs":{},"过":{"docs":{},"空":{"docs":{},"行":{"docs":{},"隔":{"docs":{},"开":{"docs":{},",":{"docs":{},"默":{"docs":{},"认":{"docs":{},"分":{"docs":{},"为":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{},"包":{"docs":{},"和":{"docs":{},"非":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{},"包":{"docs":{},"(":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"包":{"docs":{},"和":{"docs":{},"内":{"docs":{},"部":{"docs":{},"包":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"释":{"docs":{},"放":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"一":{"docs":{},"直":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"将":{"docs":{},"主":{"docs":{},"调":{"docs":{},"加":{"docs":{},"入":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"通":{"docs":{},"知":{"docs":{},"列":{"docs":{},"表":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"修":{"docs":{},"改":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"主":{"docs":{},"调":{"docs":{},"在":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"依":{"docs":{},"赖":{"docs":{},"规":{"docs":{},"范":{"docs":{},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}},"旧":{"docs":{},"可":{"docs":{},"以":{"docs":{},"继":{"docs":{},"续":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{},"这":{"docs":{},"可":{"docs":{},"能":{"docs":{},"就":{"docs":{},"是":{"docs":{},"“":{"docs":{},"全":{"docs":{},"能":{"docs":{},"”":{"docs":{},"与":{"docs":{},"“":{"docs":{},"专":{"docs":{},"精":{"docs":{},"”":{"docs":{},"的":{"docs":{},"区":{"docs":{},"别":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"包":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":3.333333333333333}},"名":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}},"和":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}},"应":{"docs":{},"该":{"docs":{},"为":{"docs":{},"小":{"docs":{},"写":{"docs":{},"单":{"docs":{},"词":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"下":{"docs":{},"划":{"docs":{},"线":{"docs":{},"或":{"docs":{},"者":{"docs":{},"混":{"docs":{},"合":{"docs":{},"大":{"docs":{},"小":{"docs":{},"写":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"多":{"docs":{},"级":{"docs":{},"目":{"docs":{},"录":{"docs":{},"来":{"docs":{},"划":{"docs":{},"分":{"docs":{},"层":{"docs":{},"级":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"谨":{"docs":{},"慎":{"docs":{},"使":{"docs":{},"用":{"docs":{},"缩":{"docs":{},"写":{"docs":{},"。":{"docs":{},"当":{"docs":{},"缩":{"docs":{},"写":{"docs":{},"是":{"docs":{},"程":{"docs":{},"序":{"docs":{},"员":{"docs":{},"广":{"docs":{},"泛":{"docs":{},"熟":{"docs":{},"知":{"docs":{},"的":{"docs":{},"词":{"docs":{},"时":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{},"缩":{"docs":{},"写":{"docs":{},"。":{"docs":{},"例":{"docs":{},"如":{"docs":{},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"含":{"docs":{},"固":{"docs":{},"定":{"docs":{},"的":{"docs":{},"元":{"docs":{},"素":{"docs":{},"列":{"docs":{},"表":{"docs":{},",":{"docs":{},"则":{"docs":{},"使":{"docs":{},"用":{"docs":{},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}},"了":{"docs":{},"指":{"docs":{},"向":{"docs":{},"底":{"docs":{},"层":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"在":{"docs":{},"需":{"docs":{},"要":{"docs":{},"复":{"docs":{},"制":{"docs":{},"它":{"docs":{},"们":{"docs":{},"时":{"docs":{},"要":{"docs":{},"特":{"docs":{},"别":{"docs":{},"注":{"docs":{},"意":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"中":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"程":{"docs":{},"序":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"例":{"docs":{},"外":{"docs":{},",":{"docs":{},"如":{"docs":{},"程":{"docs":{},"序":{"docs":{},"启":{"docs":{},"动":{"docs":{},"时":{"docs":{},",":{"docs":{},"文":{"docs":{},"件":{"docs":{},"无":{"docs":{},"法":{"docs":{},"打":{"docs":{},"开":{"docs":{},"或":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"无":{"docs":{},"法":{"docs":{},"连":{"docs":{},"接":{"docs":{},"导":{"docs":{},"致":{"docs":{},"程":{"docs":{},"序":{"docs":{},"无":{"docs":{},"法":{"docs":{},"正":{"docs":{},"常":{"docs":{},"运":{"docs":{},"行":{"docs":{},"可":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"信":{"docs":{},"息":{"docs":{},"描":{"docs":{},"述":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"多":{"docs":{},"个":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}},"何":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}},"注":{"docs":{},"释":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"&":{"docs":{},"文":{"docs":{},"件":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"两":{"docs":{},"种":{"docs":{},"接":{"docs":{},"口":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"定":{"docs":{},"义":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}},"不":{"docs":{},"支":{"docs":{},"持":{"docs":{},"解":{"docs":{},"析":{"docs":{},"闰":{"docs":{},"秒":{"docs":{},"时":{"docs":{},"间":{"docs":{},"戳":{"docs":{},"(":{"docs":{},"i":{"docs":{},"s":{"docs":{},"s":{"docs":{},"u":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}},"处":{"docs":{},"理":{"docs":{},"时":{"docs":{},"间":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":3.333333333333333}}}}}},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"它":{"docs":{},"有":{"docs":{},"助":{"docs":{},"于":{"docs":{},"以":{"docs":{},"更":{"docs":{},"安":{"docs":{},"全":{"docs":{},"、":{"docs":{},"更":{"docs":{},"准":{"docs":{},"确":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"处":{"docs":{},"理":{"docs":{},"这":{"docs":{},"些":{"docs":{},"不":{"docs":{},"正":{"docs":{},"确":{"docs":{},"的":{"docs":{},"假":{"docs":{},"设":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"原":{"docs":{},"子":{"docs":{},"操":{"docs":{},"作":{"docs":{},"对":{"docs":{},"基":{"docs":{},"本":{"docs":{},"类":{"docs":{},"型":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}}}}}}},"性":{"docs":{},"能":{"docs":{},"相":{"docs":{},"较":{"docs":{},"于":{"docs":{},"针":{"docs":{},"对":{"docs":{},"具":{"docs":{},"体":{"docs":{},"类":{"docs":{},"型":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"版":{"docs":{},"本":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"非":{"docs":{},"常":{"docs":{},"大":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},"了":{"docs":{},"数":{"docs":{},"字":{"docs":{},"和":{"docs":{},"字":{"docs":{},"节":{"docs":{},"序":{"docs":{},"列":{"docs":{},"之":{"docs":{},"间":{"docs":{},"的":{"docs":{},"简":{"docs":{},"单":{"docs":{},"转":{"docs":{},"换":{"docs":{},"以":{"docs":{},"及":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}},"针":{"docs":{},"对":{"docs":{},"大":{"docs":{},"端":{"docs":{},"字":{"docs":{},"节":{"docs":{},"序":{"docs":{},"将":{"docs":{},"字":{"docs":{},"节":{"docs":{},"序":{"docs":{},"列":{"docs":{},"转":{"docs":{},"为":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}},"下":{"docs":{},"的":{"docs":{},"一":{"docs":{},"个":{"docs":{},"组":{"docs":{},"件":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"作":{"docs":{},"为":{"docs":{},"保":{"docs":{},"存":{"docs":{},"临":{"docs":{},"时":{"docs":{},"取":{"docs":{},"还":{"docs":{},"对":{"docs":{},"象":{"docs":{},"的":{"docs":{},"一":{"docs":{},"个":{"docs":{},"“":{"docs":{},"池":{"docs":{},"子":{"docs":{},"”":{"docs":{},"。":{"docs":{},"个":{"docs":{},"人":{"docs":{},"觉":{"docs":{},"得":{"docs":{},"它":{"docs":{},"的":{"docs":{},"名":{"docs":{},"字":{"docs":{},"有":{"docs":{},"一":{"docs":{},"定":{"docs":{},"的":{"docs":{},"误":{"docs":{},"导":{"docs":{},"性":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"为":{"docs":{},"例":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"看":{"docs":{},"下":{"docs":{},"其":{"docs":{},"是":{"docs":{},"如":{"docs":{},"何":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}},"和":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"只":{"docs":{},"能":{"docs":{},"用":{"docs":{},"于":{"docs":{},"测":{"docs":{},"试":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"且":{"docs":{},"必":{"docs":{},"须":{"docs":{},"是":{"docs":{},"为":{"docs":{},"了":{"docs":{},"解":{"docs":{},"决":{"docs":{},"循":{"docs":{},"环":{"docs":{},"依":{"docs":{},"赖":{"docs":{},",":{"docs":{},"才":{"docs":{},"能":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{},"当":{"docs":{},"前":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"简":{"docs":{},"单":{"docs":{},"地":{"docs":{},"完":{"docs":{},"成":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"之":{"docs":{},"间":{"docs":{},"的":{"docs":{},"拼":{"docs":{},"接":{"docs":{},",":{"docs":{},"非":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{},"需":{"docs":{},"要":{"docs":{},"单":{"docs":{},"独":{"docs":{},"做":{"docs":{},"类":{"docs":{},"型":{"docs":{},"转":{"docs":{},"换":{"docs":{},"。":{"docs":{},"行":{"docs":{},"内":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"不":{"docs":{},"会":{"docs":{},"产":{"docs":{},"生":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},",":{"docs":{},"也":{"docs":{},"不":{"docs":{},"涉":{"docs":{},"及":{"docs":{},"类":{"docs":{},"型":{"docs":{},"地":{"docs":{},"动":{"docs":{},"态":{"docs":{},"转":{"docs":{},"换":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"性":{"docs":{},"能":{"docs":{},"上":{"docs":{},"优":{"docs":{},"于":{"docs":{},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},")":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"在":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"一":{"docs":{},"个":{"docs":{},"源":{"docs":{},"文":{"docs":{},"件":{"docs":{},"的":{"docs":{},"包":{"docs":{},",":{"docs":{},"包":{"docs":{},"名":{"docs":{},"应":{"docs":{},"该":{"docs":{},"和":{"docs":{},"文":{"docs":{},"件":{"docs":{},"名":{"docs":{},"保":{"docs":{},"持":{"docs":{},"一":{"docs":{},"致":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}},"遍":{"docs":{},"历":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}},"设":{"docs":{},"置":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"会":{"docs":{},"被":{"docs":{},"修":{"docs":{},"改":{"docs":{},"一":{"docs":{},"次":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}},"唤":{"docs":{},"醒":{"docs":{},"任":{"docs":{},"意":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"带":{"docs":{},"域":{"docs":{},"名":{"docs":{},"的":{"docs":{},"包":{"docs":{},"名":{"docs":{},"都":{"docs":{},"属":{"docs":{},"于":{"docs":{},"外":{"docs":{},"部":{"docs":{},"包":{"docs":{},",":{"docs":{},"如":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}},"来":{"docs":{},"一":{"docs":{},"定":{"docs":{},"的":{"docs":{},"负":{"docs":{},"担":{"docs":{},",":{"docs":{},"严":{"docs":{},"重":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"会":{"docs":{},"引":{"docs":{},"起":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}},"引":{"docs":{},"入":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"包":{"docs":{},"要":{"docs":{},"慎":{"docs":{},"重":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}},"用":{"docs":{},")":{"docs":{},"时":{"docs":{},",":{"docs":{},"才":{"docs":{},"可":{"docs":{},"以":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}},"必":{"docs":{},"要":{"docs":{},"时":{"docs":{},"给":{"docs":{},"包":{"docs":{},"起":{"docs":{},"个":{"docs":{},"别":{"docs":{},"名":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"字":{"docs":{},"段":{"docs":{},"给":{"docs":{},"出":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}},"须":{"docs":{},"在":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"是":{"docs":{},"最":{"docs":{},"后":{"docs":{},"一":{"docs":{},"个":{"docs":{},"参":{"docs":{},"数":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}},"固":{"docs":{},"定":{"docs":{},"大":{"docs":{},"小":{"docs":{},"的":{"docs":{},"值":{"docs":{},"或":{"docs":{},"固":{"docs":{},"定":{"docs":{},"大":{"docs":{},"小":{"docs":{},"值":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},",":{"docs":{},"或":{"docs":{},"指":{"docs":{},"向":{"docs":{},"此":{"docs":{},"类":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"指":{"docs":{},"向":{"docs":{},"固":{"docs":{},"定":{"docs":{},"大":{"docs":{},"小":{"docs":{},"值":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},"或":{"docs":{},"固":{"docs":{},"定":{"docs":{},"大":{"docs":{},"小":{"docs":{},"值":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}},"要":{"docs":{},"有":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}},"标":{"docs":{},"准":{"docs":{},"包":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}},"库":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"时":{"docs":{},"间":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"别":{"docs":{},"名":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}},"函":{"docs":{},"数":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"也":{"docs":{},"大":{"docs":{},"量":{"docs":{},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}},"提":{"docs":{},"供":{"docs":{},"的":{"docs":{},"使":{"docs":{},"函":{"docs":{},"数":{"docs":{},"只":{"docs":{},"执":{"docs":{},"行":{"docs":{},"一":{"docs":{},"次":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"常":{"docs":{},"应":{"docs":{},"用":{"docs":{},"于":{"docs":{},"单":{"docs":{},"例":{"docs":{},"模":{"docs":{},"式":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"配":{"docs":{},"置":{"docs":{},"、":{"docs":{},"保":{"docs":{},"持":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"连":{"docs":{},"接":{"docs":{},"等":{"docs":{},"。":{"docs":{},"作":{"docs":{},"用":{"docs":{},"与":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"签":{"docs":{},"或":{"docs":{},"日":{"docs":{},"志":{"docs":{},"中":{"docs":{},"的":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}},"志":{"docs":{},":":{"docs":{},"f":{"docs":{},"l":{"docs":{},"a":{"docs":{},"g":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}},"管":{"docs":{},"理":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},",":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}},"规":{"docs":{},"则":{"docs":{},"为":{"docs":{},"准":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}},"范":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}},"依":{"docs":{},"赖":{"docs":{},"规":{"docs":{},"范":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}},"原":{"docs":{},"则":{"docs":{},"上":{"docs":{},"以":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}},"该":{"docs":{},"包":{"docs":{},"已":{"docs":{},"经":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}},"注":{"docs":{},"释":{"docs":{},"对":{"docs":{},"类":{"docs":{},"型":{"docs":{},"进":{"docs":{},"行":{"docs":{},"简":{"docs":{},"要":{"docs":{},"介":{"docs":{},"绍":{"docs":{},",":{"docs":{},"放":{"docs":{},"在":{"docs":{},"定":{"docs":{},"义":{"docs":{},"的":{"docs":{},"前":{"docs":{},"一":{"docs":{},"行":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}},"函":{"docs":{},"数":{"docs":{},"也":{"docs":{},"是":{"docs":{},"参":{"docs":{},"考":{"docs":{},"了":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}},"方":{"docs":{},"法":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"成":{"docs":{},"对":{"docs":{},"第":{"docs":{},"一":{"docs":{},"种":{"docs":{},"方":{"docs":{},"法":{"docs":{},"截":{"docs":{},"取":{"docs":{},"法":{"docs":{},"的":{"docs":{},"改":{"docs":{},"进":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"每":{"docs":{},"次":{"docs":{},"指":{"docs":{},"需":{"docs":{},"移":{"docs":{},"动":{"docs":{},"一":{"docs":{},"个":{"docs":{},"元":{"docs":{},"素":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"更":{"docs":{},"加":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"路":{"docs":{},"径":{"docs":{},"名":{"docs":{},"不":{"docs":{},"一":{"docs":{},"致":{"docs":{},"时":{"docs":{},",":{"docs":{},"或":{"docs":{},"者":{"docs":{},"多":{"docs":{},"个":{"docs":{},"相":{"docs":{},"同":{"docs":{},"包":{"docs":{},"名":{"docs":{},"冲":{"docs":{},"突":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"别":{"docs":{},"名":{"docs":{},"代":{"docs":{},"替":{"docs":{},"会":{"docs":{},"有":{"docs":{},"更":{"docs":{},"好":{"docs":{},"的":{"docs":{},"可":{"docs":{},"读":{"docs":{},"性":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635}}}}}}}}}}}},"e":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.004942339373970346},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.013605442176870748},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}},"x":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.017241379310344827}},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.005836575875486381},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}},"x":{"docs":{},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},"可":{"docs":{},"以":{"docs":{},"不":{"docs":{},"用":{"docs":{},"显":{"docs":{},"式":{"docs":{},"处":{"docs":{},"理":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}},"x":{"docs":{},":":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}},".":{"docs":{},"p":{"docs":{},"b":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},",":{"docs":{},"g":{"docs":{},"o":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}},"_":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}},",":{"docs":{},"u":{"docs":{},"n":{"docs":{},"s":{"docs":{},"a":{"docs":{},"f":{"docs":{},"e":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"o":{"docs":{},"f":{"docs":{},"(":{"docs":{},"x":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}},"计":{"docs":{},"算":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}},"y":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}},"a":{"docs":{},"m":{"docs":{},"l":{"docs":{},".":{"docs":{},"u":{"docs":{},"n":{"docs":{},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"h":{"docs":{},"a":{"docs":{},"l":{"docs":{},"(":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}}}}}}}}}}}}}},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}},"e":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}},"a":{"docs":{},"r":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"或":{"docs":{},"更":{"docs":{},"少":{"docs":{},"的":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"则":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"测":{"docs":{},"试":{"docs":{},"表":{"docs":{},"中":{"docs":{},"省":{"docs":{},"略":{"docs":{},"字":{"docs":{},"段":{"docs":{},"名":{"docs":{},"称":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"超":{"docs":{},"过":{"docs":{},",":{"docs":{},"请":{"docs":{},"封":{"docs":{},"装":{"docs":{},"成":{"docs":{},"新":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}},"或":{"docs":{},"有":{"docs":{},"相":{"docs":{},"同":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},",":{"docs":{},"或":{"docs":{},"者":{"docs":{},"从":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"中":{"docs":{},"不":{"docs":{},"清":{"docs":{},"楚":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"的":{"docs":{},"含":{"docs":{},"义":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"命":{"docs":{},"名":{"docs":{},"返":{"docs":{},"回":{"docs":{},",":{"docs":{},"其":{"docs":{},"它":{"docs":{},"情":{"docs":{},"况":{"docs":{},"不":{"docs":{},"建":{"docs":{},"议":{"docs":{},"使":{"docs":{},"用":{"docs":{},"命":{"docs":{},"名":{"docs":{},"返":{"docs":{},"回":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"字":{"docs":{},"节":{"docs":{},",":{"docs":{},"那":{"docs":{},"假":{"docs":{},"设":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}},"c":{"docs":{},"p":{"docs":{},"u":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}}},"偏":{"docs":{},"移":{"docs":{},"量":{"docs":{},"才":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}}}}}},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"一":{"docs":{},"次":{"docs":{},"读":{"docs":{},"取":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}},"那":{"docs":{},"么":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"读":{"docs":{},"取":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}},"位":{"docs":{},"置":{"docs":{},"开":{"docs":{},"始":{"docs":{},"占":{"docs":{},"据":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.020689655172413793}}}}}}}},"协":{"docs":{},"程":{"docs":{},"并":{"docs":{},"发":{"docs":{},"写":{"docs":{},"入":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"链":{"docs":{},"表":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"同":{"docs":{},"时":{"docs":{},"存":{"docs":{},"在":{"docs":{},"。":{"docs":{},"那":{"docs":{},"如":{"docs":{},"果":{"docs":{},"协":{"docs":{},"程":{"docs":{},"中":{"docs":{},"还":{"docs":{},"存":{"docs":{},"在":{"docs":{},"着":{"docs":{},"其":{"docs":{},"他":{"docs":{},"需":{"docs":{},"要":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"操":{"docs":{},"作":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"允":{"docs":{},"许":{"docs":{},"并":{"docs":{},"发":{"docs":{},"执":{"docs":{},"行":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},"将":{"docs":{},"会":{"docs":{},"数":{"docs":{},"量":{"docs":{},"级":{"docs":{},"地":{"docs":{},"减":{"docs":{},"少":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},",":{"2":{"docs":{},"^":{"3":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}}},"docs":{}}}}}}},"数":{"docs":{},"的":{"docs":{},"增":{"docs":{},"多":{"docs":{},"而":{"docs":{},"线":{"docs":{},"性":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"。":{"docs":{},"很":{"docs":{},"多":{"docs":{},"语":{"docs":{},"言":{"docs":{},"都":{"docs":{},"提":{"docs":{},"供":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}},"字":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"任":{"docs":{},"务":{"docs":{},",":{"docs":{},"达":{"docs":{},"到":{"docs":{},"了":{"docs":{},"协":{"docs":{},"程":{"docs":{},"并":{"docs":{},"发":{"docs":{},"控":{"docs":{},"制":{"docs":{},"的":{"docs":{},"目":{"docs":{},"的":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}},"消":{"docs":{},"息":{"docs":{},"则":{"docs":{},"被":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"。":{"docs":{},"开":{"docs":{},"启":{"docs":{},"协":{"docs":{},"程":{"docs":{},"前":{"docs":{},",":{"docs":{},"调":{"docs":{},"用":{"docs":{},"c":{"docs":{},"h":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}},"等":{"docs":{},"待":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"仅":{"docs":{},"将":{"docs":{},"相":{"docs":{},"关":{"docs":{},"的":{"docs":{},"声":{"docs":{},"明":{"docs":{},"放":{"docs":{},"在":{"docs":{},"一":{"docs":{},"组":{"docs":{},"。":{"docs":{},"不":{"docs":{},"要":{"docs":{},"将":{"docs":{},"不":{"docs":{},"相":{"docs":{},"关":{"docs":{},"的":{"docs":{},"声":{"docs":{},"明":{"docs":{},"放":{"docs":{},"在":{"docs":{},"一":{"docs":{},"组":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"包":{"docs":{},"含":{"docs":{},"方":{"docs":{},"法":{"docs":{},"的":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"1":{"docs":{},".":{"docs":{},"不":{"docs":{},"占":{"docs":{},"内":{"docs":{},"存":{"docs":{},"空":{"docs":{},"间":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}},"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}},"提":{"docs":{},"供":{"docs":{},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{},"导":{"docs":{},"出":{"docs":{},"方":{"docs":{},"法":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"优":{"docs":{},"先":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},"雅":{"docs":{},"地":{"docs":{},"处":{"docs":{},"理":{"docs":{},"错":{"docs":{},"误":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}},"化":{"docs":{},"后":{"docs":{},"的":{"docs":{},"版":{"docs":{},"本":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},"。":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"出":{"docs":{},"相":{"docs":{},"较":{"docs":{},"于":{"docs":{},"不":{"docs":{},"预":{"docs":{},"先":{"docs":{},"分":{"docs":{},"配":{"docs":{},"空":{"docs":{},"间":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"提":{"docs":{},"升":{"docs":{},"了":{"docs":{},"很":{"docs":{},"多":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"秀":{"docs":{},"的":{"docs":{},"本":{"docs":{},"地":{"docs":{},"缓":{"docs":{},"存":{"docs":{},"组":{"docs":{},"件":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"申":{"docs":{},"明":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}},"量":{"docs":{},"中":{"docs":{},"不":{"docs":{},"要":{"docs":{},"包":{"docs":{},"含":{"docs":{},"格":{"docs":{},"式":{"docs":{},"化":{"docs":{},"字":{"docs":{},"符":{"docs":{},",":{"docs":{},"否":{"docs":{},"则":{"docs":{},"必":{"docs":{},"然":{"docs":{},"违":{"docs":{},"反":{"docs":{},"就":{"docs":{},"近":{"docs":{},"原":{"docs":{},"则":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}},"凡":{"docs":{},"事":{"docs":{},"无":{"docs":{},"绝":{"docs":{},"对":{"docs":{},",":{"docs":{},"某":{"docs":{},"些":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}},"切":{"docs":{},"片":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028}},"是":{"docs":{},"有":{"docs":{},"效":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},",":{"docs":{},"但":{"docs":{},"它":{"docs":{},"不":{"docs":{},"等":{"docs":{},"于":{"docs":{},"长":{"docs":{},"度":{"docs":{},"为":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}},",":{"docs":{},"代":{"docs":{},"码":{"docs":{},"会":{"docs":{},"更":{"docs":{},"加":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"清":{"docs":{},"晰":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}},"过":{"docs":{},"滤":{"docs":{},"掉":{"docs":{},"指":{"docs":{},"定":{"docs":{},"的":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}},"元":{"docs":{},"素":{"docs":{},"从":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}},"创":{"docs":{},"建":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"新":{"docs":{},"切":{"docs":{},"片":{"docs":{},",":{"docs":{},"过":{"docs":{},"滤":{"docs":{},"掉":{"docs":{},"指":{"docs":{},"定":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}}}}}}}}}}}}}},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}},"变":{"docs":{},"量":{"docs":{},"申":{"docs":{},"明":{"docs":{},"的":{"docs":{},"位":{"docs":{},"置":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"靠":{"docs":{},"近":{"docs":{},"使":{"docs":{},"用":{"docs":{},"的":{"docs":{},"地":{"docs":{},"方":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}},"名":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"和":{"docs":{},"常":{"docs":{},"量":{"docs":{},"注":{"docs":{},"释":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}},"的":{"docs":{},"值":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"一":{"docs":{},"次":{"docs":{},"访":{"docs":{},"存":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"两":{"docs":{},"次":{"docs":{},"访":{"docs":{},"存":{"docs":{},",":{"docs":{},"第":{"docs":{},"一":{"docs":{},"次":{"docs":{},"访":{"docs":{},"存":{"docs":{},"得":{"docs":{},"到":{"docs":{},"前":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"节":{"docs":{},",":{"docs":{},"第":{"docs":{},"二":{"docs":{},"次":{"docs":{},"得":{"docs":{},"到":{"docs":{},"后":{"docs":{},"两":{"docs":{},"个":{"docs":{},"字":{"docs":{},"节":{"docs":{},"。":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"后":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"大":{"docs":{},"小":{"docs":{},"不":{"docs":{},"确":{"docs":{},"定":{"docs":{},"(":{"docs":{},"如":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}},"较":{"docs":{},"大":{"docs":{},"(":{"docs":{},"栈":{"docs":{},"空":{"docs":{},"间":{"docs":{},"不":{"docs":{},"足":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}},"仅":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"一":{"docs":{},"次":{"docs":{},",":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"完":{"docs":{},"成":{"docs":{},"后":{"docs":{},"驻":{"docs":{},"留":{"docs":{},"在":{"docs":{},"内":{"docs":{},"存":{"docs":{},"里":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"读":{"docs":{},"都":{"docs":{},"被":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},",":{"docs":{},"直":{"docs":{},"到":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"完":{"docs":{},"成":{"docs":{},";":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}},"另":{"docs":{},"外":{"docs":{},",":{"docs":{},"分":{"docs":{},"组":{"docs":{},"使":{"docs":{},"用":{"docs":{},"的":{"docs":{},"位":{"docs":{},"置":{"docs":{},"没":{"docs":{},"有":{"docs":{},"限":{"docs":{},"制":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"函":{"docs":{},"数":{"docs":{},"内":{"docs":{},"部":{"docs":{},"使":{"docs":{},"用":{"docs":{},"它":{"docs":{},"们":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"请":{"docs":{},"参":{"docs":{},"考":{"docs":{},":":{"docs":{},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{},"'":{"docs":{},"t":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}},"因":{"docs":{},"此":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},",":{"docs":{},"在":{"docs":{},"处":{"docs":{},"理":{"docs":{},"时":{"docs":{},"间":{"docs":{},"时":{"docs":{},"始":{"docs":{},"终":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}},"将":{"docs":{},"元":{"docs":{},"素":{"docs":{},"添":{"docs":{},"加":{"docs":{},"到":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}},"对":{"docs":{},"内":{"docs":{},"存":{"docs":{},"特":{"docs":{},"别":{"docs":{},"敏":{"docs":{},"感":{"docs":{},"的":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"的":{"docs":{},"设":{"docs":{},"计":{"docs":{},"上":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"调":{"docs":{},"整":{"docs":{},"字":{"docs":{},"段":{"docs":{},"的":{"docs":{},"顺":{"docs":{},"序":{"docs":{},",":{"docs":{},"将":{"docs":{},"字":{"docs":{},"段":{"docs":{},"宽":{"docs":{},"度":{"docs":{},"从":{"docs":{},"小":{"docs":{},"到":{"docs":{},"大":{"docs":{},"由":{"docs":{},"上":{"docs":{},"到":{"docs":{},"下":{"docs":{},"排":{"docs":{},"列":{"docs":{},",":{"docs":{},"来":{"docs":{},"减":{"docs":{},"少":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"占":{"docs":{},"用":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"呢":{"docs":{},",":{"docs":{},"将":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}},"为":{"docs":{},"其":{"docs":{},"他":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"不":{"docs":{},"占":{"docs":{},"据":{"docs":{},"内":{"docs":{},"存":{"docs":{},"空":{"docs":{},"间":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"被":{"docs":{},"广":{"docs":{},"泛":{"docs":{},"作":{"docs":{},"为":{"docs":{},"各":{"docs":{},"种":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},"的":{"docs":{},"占":{"docs":{},"位":{"docs":{},"符":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{},"一":{"docs":{},"是":{"docs":{},"节":{"docs":{},"省":{"docs":{},"资":{"docs":{},"源":{"docs":{},",":{"docs":{},"二":{"docs":{},"是":{"docs":{},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"本":{"docs":{},"身":{"docs":{},"就":{"docs":{},"具":{"docs":{},"备":{"docs":{},"很":{"docs":{},"强":{"docs":{},"的":{"docs":{},"语":{"docs":{},"义":{"docs":{},",":{"docs":{},"即":{"docs":{},"这":{"docs":{},"里":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"任":{"docs":{},"何":{"docs":{},"值":{"docs":{},",":{"docs":{},"仅":{"docs":{},"作":{"docs":{},"为":{"docs":{},"占":{"docs":{},"位":{"docs":{},"符":{"docs":{},",":{"docs":{},"达":{"docs":{},"到":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"即":{"docs":{},"注":{"docs":{},"释":{"docs":{},"的":{"docs":{},"效":{"docs":{},"果":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"的":{"docs":{},"存":{"docs":{},"在":{"docs":{},",":{"docs":{},"合":{"docs":{},"理":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}},"这":{"docs":{},"一":{"docs":{},"点":{"docs":{},",":{"docs":{},"空":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}},"基":{"docs":{},"于":{"docs":{},"当":{"docs":{},"前":{"docs":{},"目":{"docs":{},"录":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"/":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},",":{"docs":{},"那":{"docs":{},"它":{"docs":{},"和":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"区":{"docs":{},"别":{"docs":{},"是":{"docs":{},"什":{"docs":{},"么":{"docs":{},"呢":{"docs":{},"?":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}},"本":{"docs":{},"数":{"docs":{},"据":{"docs":{},"类":{"docs":{},"型":{"docs":{},"与":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"之":{"docs":{},"间":{"docs":{},"的":{"docs":{},"转":{"docs":{},"换":{"docs":{},",":{"docs":{},"优":{"docs":{},"先":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}},"代":{"docs":{},"码":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}},"声":{"docs":{},"明":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},"到":{"docs":{},"一":{"docs":{},"组":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"和":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"在":{"docs":{},"视":{"docs":{},"觉":{"docs":{},"上":{"docs":{},"很":{"docs":{},"相":{"docs":{},"似":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},"是":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}},"结":{"docs":{},"构":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"这":{"docs":{},"样":{"docs":{},"更":{"docs":{},"加":{"docs":{},"简":{"docs":{},"洁":{"docs":{},",":{"docs":{},"其":{"docs":{},"各":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"值":{"docs":{},"为":{"docs":{},"字":{"docs":{},"段":{"docs":{},"类":{"docs":{},"型":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"零":{"docs":{},"值":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"零":{"docs":{},"值":{"docs":{},"结":{"docs":{},"构":{"docs":{},"使":{"docs":{},"用":{"docs":{},"关":{"docs":{},"键":{"docs":{},"字":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}},"错":{"docs":{},"误":{"docs":{},"可":{"docs":{},"选":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"很":{"docs":{},"少":{"docs":{},",":{"docs":{},"在":{"docs":{},"选":{"docs":{},"择":{"docs":{},"合":{"docs":{},"适":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},"申":{"docs":{},"明":{"docs":{},"方":{"docs":{},"式":{"docs":{},"之":{"docs":{},"前":{"docs":{},",":{"docs":{},"应":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"以":{"docs":{},"下":{"docs":{},"几":{"docs":{},"点":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"容":{"docs":{},"量":{"docs":{},"大":{"docs":{},"小":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},"提":{"docs":{},"示":{"2":{"docs":{},".":{"docs":{},"指":{"docs":{},"定":{"docs":{},"切":{"docs":{},"片":{"docs":{},"容":{"docs":{},"量":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"指":{"docs":{},"定":{"docs":{},"容":{"docs":{},"器":{"docs":{},"容":{"docs":{},"量":{"docs":{},",":{"docs":{},"以":{"docs":{},"便":{"docs":{},"为":{"docs":{},"容":{"docs":{},"器":{"docs":{},"预":{"docs":{},"先":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"。":{"docs":{},"这":{"docs":{},"将":{"docs":{},"在":{"docs":{},"后":{"docs":{},"续":{"docs":{},"添":{"docs":{},"加":{"docs":{},"元":{"docs":{},"素":{"docs":{},"时":{"docs":{},"减":{"docs":{},"少":{"docs":{},"通":{"docs":{},"过":{"docs":{},"复":{"docs":{},"制":{"docs":{},"来":{"docs":{},"调":{"docs":{},"整":{"docs":{},"容":{"docs":{},"器":{"docs":{},"大":{"docs":{},"小":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}},"时":{"docs":{},",":{"docs":{},"仍":{"docs":{},"可":{"docs":{},"能":{"docs":{},"发":{"docs":{},"生":{"docs":{},"分":{"docs":{},"配":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}},"对":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"于":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"变":{"docs":{},"量":{"docs":{},"、":{"docs":{},"常":{"docs":{},"量":{"docs":{},"的":{"docs":{},"声":{"docs":{},"明":{"docs":{},",":{"docs":{},"相":{"docs":{},"似":{"docs":{},"的":{"docs":{},"声":{"docs":{},"明":{"docs":{},"应":{"docs":{},"该":{"docs":{},"放":{"docs":{},"在":{"docs":{},"一":{"docs":{},"组":{"docs":{},"。":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"定":{"docs":{},"义":{"docs":{},"同":{"docs":{},"样":{"docs":{},"适":{"docs":{},"用":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"其":{"docs":{},"它":{"docs":{},"的":{"docs":{},"包":{"docs":{},",":{"docs":{},"可":{"docs":{},"导":{"docs":{},"出":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"也":{"docs":{},"不":{"docs":{},"能":{"docs":{},"有":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"示":{"docs":{},"例":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"还":{"docs":{},"有":{"docs":{},"一":{"docs":{},"种":{"docs":{},"更":{"docs":{},"好":{"docs":{},"的":{"docs":{},"处":{"docs":{},"理":{"docs":{},"方":{"docs":{},"式":{"docs":{},"是":{"docs":{},"将":{"docs":{},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}},"存":{"docs":{},"储":{"docs":{},"为":{"docs":{},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},"值":{"docs":{},",":{"docs":{},"根":{"docs":{},"据":{"docs":{},"是":{"docs":{},"否":{"docs":{},"导":{"docs":{},"出":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"前":{"docs":{},"缀":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"错":{"docs":{},"误":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"请":{"docs":{},"改":{"docs":{},"用":{"docs":{},"后":{"docs":{},"缀":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}},"指":{"docs":{},"针":{"docs":{},"类":{"docs":{},"型":{"docs":{},"(":{"docs":{},"如":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}},"动":{"docs":{},"态":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}},"大":{"docs":{},"多":{"docs":{},"数":{"docs":{},"包":{"docs":{},"装":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"这":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"很":{"docs":{},"好":{"docs":{},"的":{"docs":{},"默":{"docs":{},"认":{"docs":{},"值":{"docs":{},",":{"docs":{},"但":{"docs":{},"请":{"docs":{},"注":{"docs":{},"意":{"docs":{},",":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"开":{"docs":{},"始":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"此":{"docs":{},"行":{"docs":{},"为":{"docs":{},"。":{"docs":{},"因":{"docs":{},"此":{"docs":{},",":{"docs":{},"对":{"docs":{},"于":{"docs":{},"包":{"docs":{},"装":{"docs":{},"错":{"docs":{},"误":{"docs":{},"是":{"docs":{},"已":{"docs":{},"知":{"docs":{},"变":{"docs":{},"量":{"docs":{},"或":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"请":{"docs":{},"将":{"docs":{},"其":{"docs":{},"作":{"docs":{},"为":{"docs":{},"函":{"docs":{},"数":{"docs":{},"契":{"docs":{},"约":{"docs":{},"的":{"docs":{},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},"进":{"docs":{},"行":{"docs":{},"记":{"docs":{},"录":{"docs":{},"和":{"docs":{},"测":{"docs":{},"试":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"任":{"docs":{},"意":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}},"数":{"docs":{},"组":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}},"很":{"docs":{},"多":{"docs":{},"需":{"docs":{},"要":{"docs":{},"重":{"docs":{},"复":{"docs":{},"分":{"docs":{},"配":{"docs":{},"、":{"docs":{},"回":{"docs":{},"收":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"地":{"docs":{},"方":{"docs":{},",":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"两":{"docs":{},"个":{"docs":{},"值":{"docs":{},"进":{"docs":{},"行":{"docs":{},"判":{"docs":{},"断":{"docs":{},"时":{"docs":{},",":{"docs":{},"被":{"docs":{},"比":{"docs":{},"较":{"docs":{},"的":{"docs":{},"值":{"docs":{},"放":{"docs":{},"在":{"docs":{},"左":{"docs":{},"边":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}},"外":{"docs":{},"部":{"docs":{},"系":{"docs":{},"统":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}},"整":{"docs":{},"数":{"docs":{},"采":{"docs":{},"用":{"docs":{},"的":{"docs":{},"便":{"docs":{},"是":{"docs":{},"这":{"docs":{},"种":{"docs":{},"编":{"docs":{},"码":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}},"齐":{"docs":{},"系":{"docs":{},"数":{"docs":{},"决":{"docs":{},"定":{"docs":{},"了":{"docs":{},"字":{"docs":{},"段":{"docs":{},"的":{"docs":{},"偏":{"docs":{},"移":{"docs":{},"和":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"大":{"docs":{},"小":{"docs":{},",":{"docs":{},"两":{"docs":{},"者":{"docs":{},"必":{"docs":{},"须":{"docs":{},"是":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"系":{"docs":{},"数":{"docs":{},"的":{"docs":{},"整":{"docs":{},"数":{"docs":{},"倍":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"象":{"docs":{},"池":{"docs":{},",":{"docs":{},"每":{"docs":{},"次":{"docs":{},"只":{"docs":{},"执":{"docs":{},"行":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}},"能":{"docs":{},"够":{"docs":{},"极":{"docs":{},"大":{"docs":{},"地":{"docs":{},"提":{"docs":{},"升":{"docs":{},"性":{"docs":{},"能":{"docs":{},",":{"docs":{},"减":{"docs":{},"少":{"docs":{},"内":{"docs":{},"存":{"docs":{},"占":{"docs":{},"用":{"docs":{},",":{"docs":{},"同":{"docs":{},"时":{"docs":{},"降":{"docs":{},"低":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"重":{"docs":{},"复":{"docs":{},"创":{"docs":{},"建":{"docs":{},"与":{"docs":{},"回":{"docs":{},"收":{"docs":{},"内":{"docs":{},"存":{"docs":{},",":{"docs":{},"来":{"docs":{},"看":{"docs":{},"看":{"docs":{},"对":{"docs":{},"性":{"docs":{},"能":{"docs":{},"的":{"docs":{},"提":{"docs":{},"升":{"docs":{},"效":{"docs":{},"果":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}}}}},"单":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"就":{"docs":{},"近":{"docs":{},"申":{"docs":{},"明":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"没":{"docs":{},"有":{"docs":{},"区":{"docs":{},"别":{"docs":{},"了":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"想":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}},"能":{"docs":{},"搞":{"docs":{},"定":{"docs":{},"了":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"地":{"docs":{},"在":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"时":{"docs":{},"提":{"docs":{},"供":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}},"避":{"docs":{},"免":{"docs":{},"在":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}},"避":{"docs":{},"免":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"在":{"docs":{},"与":{"docs":{},"外":{"docs":{},"部":{"docs":{},"系":{"docs":{},"统":{"docs":{},"交":{"docs":{},"互":{"docs":{},"中":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}},"量":{"docs":{},"不":{"docs":{},"要":{"docs":{},"用":{"docs":{},"拼":{"docs":{},"音":{"docs":{},"命":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"采":{"docs":{},"取":{"docs":{},"有":{"docs":{},"意":{"docs":{},"义":{"docs":{},"、":{"docs":{},"简":{"docs":{},"短":{"docs":{},"的":{"docs":{},"包":{"docs":{},"名":{"docs":{},",":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"不":{"docs":{},"要":{"docs":{},"和":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{},"冲":{"docs":{},"突":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}},"用":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"值":{"docs":{},"传":{"docs":{},"递":{"docs":{},",":{"docs":{},"非":{"docs":{},"指":{"docs":{},"针":{"docs":{},"传":{"docs":{},"递":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}},"早":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"管":{"docs":{},"这":{"docs":{},"在":{"docs":{},"实":{"docs":{},"践":{"docs":{},"中":{"docs":{},"并":{"docs":{},"不":{"docs":{},"成":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"但":{"docs":{},"请":{"docs":{},"记":{"docs":{},"住":{"docs":{},",":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}},"编":{"docs":{},"写":{"docs":{},"这":{"docs":{},"些":{"docs":{},"委":{"docs":{},"托":{"docs":{},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{},"乏":{"docs":{},"味":{"docs":{},"的":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"额":{"docs":{},"外":{"docs":{},"的":{"docs":{},"工":{"docs":{},"作":{"docs":{},"隐":{"docs":{},"藏":{"docs":{},"了":{"docs":{},"实":{"docs":{},"现":{"docs":{},"细":{"docs":{},"节":{"docs":{},",":{"docs":{},"留":{"docs":{},"下":{"docs":{},"了":{"docs":{},"更":{"docs":{},"多":{"docs":{},"的":{"docs":{},"更":{"docs":{},"改":{"docs":{},"机":{"docs":{},"会":{"docs":{},",":{"docs":{},"还":{"docs":{},"消":{"docs":{},"除":{"docs":{},"了":{"docs":{},"在":{"docs":{},"未":{"docs":{},"能":{"docs":{},"描":{"docs":{},"述":{"docs":{},"出":{"docs":{},"潜":{"docs":{},"在":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"模":{"docs":{},"糊":{"docs":{},"文":{"docs":{},"档":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"使":{"docs":{},"用":{"docs":{},"短":{"docs":{},"变":{"docs":{},"量":{"docs":{},"声":{"docs":{},"明":{"docs":{},"形":{"docs":{},"式":{"docs":{},"(":{"docs":{},":":{"docs":{},"=":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}},"已":{"docs":{},"经":{"docs":{},"明":{"docs":{},"确":{"docs":{},"了":{"docs":{},"返":{"docs":{},"回":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"我":{"docs":{},"们":{"docs":{},"没":{"docs":{},"有":{"docs":{},"必":{"docs":{},"要":{"docs":{},"显":{"docs":{},"式":{"docs":{},"指":{"docs":{},"定":{"docs":{},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"无":{"docs":{},"法":{"docs":{},"继":{"docs":{},"续":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"而":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"是":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"一":{"docs":{},"个":{"docs":{},"有":{"docs":{},"效":{"docs":{},"的":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},"长":{"docs":{},"度":{"docs":{},"为":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}},"值":{"docs":{},",":{"docs":{},"而":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}},"实":{"docs":{},"体":{"docs":{},"列":{"docs":{},"表":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.023668639053254437}}}}}}},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"类":{"docs":{},"型":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}},"很":{"docs":{},"好":{"docs":{},"的":{"docs":{},"选":{"docs":{},"择":{"docs":{},"。":{"docs":{},"频":{"docs":{},"繁":{"docs":{},"地":{"docs":{},"分":{"docs":{},"配":{"docs":{},"、":{"docs":{},"回":{"docs":{},"收":{"docs":{},"内":{"docs":{},"存":{"docs":{},"会":{"docs":{},"给":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}},"更":{"docs":{},"合":{"docs":{},"适":{"docs":{},"的":{"docs":{},"名":{"docs":{},"字":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}},"简":{"docs":{},"单":{"docs":{},"易":{"docs":{},"用":{"docs":{},"的":{"docs":{},"高":{"docs":{},"性":{"docs":{},"能":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}},"比":{"docs":{},"较":{"docs":{},"好":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}},"种":{"docs":{},"使":{"docs":{},"用":{"docs":{},"可":{"docs":{},"变":{"docs":{},"字":{"docs":{},"节":{"docs":{},"表":{"docs":{},"示":{"docs":{},"整":{"docs":{},"数":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"。":{"docs":{},"其":{"docs":{},"中":{"docs":{},"数":{"docs":{},"值":{"docs":{},"本":{"docs":{},"身":{"docs":{},"越":{"docs":{},"小":{"docs":{},",":{"docs":{},"其":{"docs":{},"所":{"docs":{},"占":{"docs":{},"用":{"docs":{},"的":{"docs":{},"字":{"docs":{},"节":{"docs":{},"数":{"docs":{},"越":{"docs":{},"少":{"docs":{},"。":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"级":{"docs":{},"联":{"docs":{},"失":{"docs":{},"败":{"docs":{},"(":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"c":{"docs":{},"a":{"docs":{},"d":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}},"属":{"docs":{},"性":{"docs":{},"数":{"docs":{},"据":{"docs":{},"层":{"docs":{},"操":{"docs":{},"作":{"docs":{},"类":{"docs":{},"的":{"docs":{},"工":{"docs":{},"厂":{"docs":{},"方":{"docs":{},"法":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}},"否":{"docs":{},"符":{"docs":{},"合":{"docs":{},"标":{"docs":{},"准":{"docs":{},"等":{"docs":{},"。":{"docs":{},"编":{"docs":{},"译":{"docs":{},"前":{"docs":{},"先":{"docs":{},"执":{"docs":{},"行":{"docs":{},"代":{"docs":{},"码":{"docs":{},"静":{"docs":{},"态":{"docs":{},"分":{"docs":{},"析":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}},"无":{"docs":{},"法":{"docs":{},"捕":{"docs":{},"当":{"docs":{},"前":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}},"缓":{"docs":{},"冲":{"docs":{},"的":{"docs":{},",":{"docs":{},"其":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517}}}}}}}},"有":{"docs":{},"效":{"docs":{},"的":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":3.333333333333333}},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"指":{"docs":{},"向":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}},"大":{"docs":{},"小":{"docs":{},"提":{"docs":{},"示":{"docs":{},"创":{"docs":{},"建":{"docs":{},"的":{"docs":{},";":{"docs":{},"在":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"有":{"docs":{},"更":{"docs":{},"少":{"docs":{},"的":{"docs":{},"分":{"docs":{},"配":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}}}}}}}}},"区":{"docs":{},"别":{"docs":{},"的":{"docs":{},",":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}},"几":{"docs":{},"秒":{"docs":{},"钟":{"docs":{},"还":{"docs":{},"是":{"docs":{},"几":{"docs":{},"毫":{"docs":{},"秒":{"docs":{},"?":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}},"各":{"docs":{},"种":{"docs":{},"实":{"docs":{},"体":{"docs":{},"列":{"docs":{},"表":{"docs":{},"的":{"docs":{},"通":{"docs":{},"用":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}},"不":{"docs":{},"确":{"docs":{},"定":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"会":{"docs":{},"发":{"docs":{},"生":{"docs":{},"变":{"docs":{},"量":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"触":{"docs":{},"发":{"docs":{},"堆":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"分":{"docs":{},"配":{"docs":{},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{},",":{"docs":{},"可":{"docs":{},"预":{"docs":{},"见":{"docs":{},"的":{"docs":{},"是":{"docs":{},"当":{"docs":{},"元":{"docs":{},"素":{"docs":{},"数":{"docs":{},"量":{"docs":{},"增":{"docs":{},"加":{"docs":{},"时":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"会":{"docs":{},"越":{"docs":{},"来":{"docs":{},"大":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"占":{"docs":{},"用":{"docs":{},"内":{"docs":{},"存":{"docs":{},"空":{"docs":{},"间":{"docs":{},",":{"docs":{},"不":{"docs":{},"像":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}},"在":{"docs":{},"没":{"docs":{},"有":{"docs":{},"大":{"docs":{},"小":{"docs":{},"提":{"docs":{},"示":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"创":{"docs":{},"建":{"docs":{},"的":{"docs":{},";":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"默":{"docs":{},"认":{"docs":{},"是":{"docs":{},"已":{"docs":{},"经":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"的":{"docs":{},",":{"docs":{},"从":{"docs":{},"第":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}}}}}}}}}}}}}}}},"三":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"倍":{"docs":{},"数":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}}}}}}}}}},"二":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"倍":{"docs":{},"数":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"系":{"docs":{},"数":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}},"可":{"docs":{},"伸":{"docs":{},"缩":{"docs":{},"的":{"docs":{},",":{"docs":{},"同":{"docs":{},"时":{"docs":{},"也":{"docs":{},"是":{"docs":{},"并":{"docs":{},"发":{"docs":{},"安":{"docs":{},"全":{"docs":{},"的":{"docs":{},",":{"docs":{},"其":{"docs":{},"容":{"docs":{},"量":{"docs":{},"仅":{"docs":{},"受":{"docs":{},"限":{"docs":{},"于":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"大":{"docs":{},"小":{"docs":{},"。":{"docs":{},"存":{"docs":{},"放":{"docs":{},"在":{"docs":{},"池":{"docs":{},"中":{"docs":{},"的":{"docs":{},"对":{"docs":{},"象":{"docs":{},"如":{"docs":{},"果":{"docs":{},"不":{"docs":{},"活":{"docs":{},"跃":{"docs":{},"了":{"docs":{},"会":{"docs":{},"被":{"docs":{},"自":{"docs":{},"动":{"docs":{},"清":{"docs":{},"理":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"由":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"只":{"docs":{},"会":{"docs":{},"被":{"docs":{},"执":{"docs":{},"行":{"docs":{},"一":{"docs":{},"次":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"为":{"docs":{},"对":{"docs":{},"象":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}},"基":{"docs":{},"于":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"/":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"用":{"docs":{},"来":{"docs":{},"协":{"docs":{},"调":{"docs":{},"想":{"docs":{},"要":{"docs":{},"访":{"docs":{},"问":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"那":{"docs":{},"些":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"显":{"docs":{},"示":{"docs":{},"指":{"docs":{},"明":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"处":{"docs":{},"理":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}},"来":{"docs":{},"代":{"docs":{},"替":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},"事":{"docs":{},"实":{"docs":{},"上":{"docs":{},",":{"docs":{},"对":{"docs":{},"于":{"docs":{},"集":{"docs":{},"合":{"docs":{},"来":{"docs":{},"说":{"docs":{},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}},"取":{"docs":{},"代":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"定":{"docs":{},"义":{"docs":{},"枚":{"docs":{},"举":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"引":{"docs":{},"入":{"docs":{},"枚":{"docs":{},"举":{"docs":{},"的":{"docs":{},"标":{"docs":{},"准":{"docs":{},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{},"声":{"docs":{},"明":{"docs":{},"一":{"docs":{},"个":{"docs":{},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"类":{"docs":{},"型":{"docs":{},"和":{"docs":{},"一":{"docs":{},"个":{"docs":{},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{},"自":{"docs":{},"增":{"docs":{},"器":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"混":{"docs":{},"淆":{"docs":{},"底":{"docs":{},"层":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"将":{"docs":{},"无":{"docs":{},"法":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"它":{"docs":{},",":{"docs":{},"但":{"docs":{},"如":{"docs":{},"果":{"docs":{},"需":{"docs":{},"要":{"docs":{},",":{"docs":{},"您":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"将":{"docs":{},"来":{"docs":{},"切":{"docs":{},"换":{"docs":{},"到":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"拼":{"docs":{},"接":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},")":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}},"回":{"docs":{},"收":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"无":{"docs":{},"休":{"docs":{},"止":{"docs":{},"地":{"docs":{},"创":{"docs":{},"建":{"docs":{},"大":{"docs":{},"量":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"由":{"docs":{},"于":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},"函":{"docs":{},"数":{"docs":{},"是":{"docs":{},"按":{"docs":{},"接":{"docs":{},"收":{"docs":{},"者":{"docs":{},"分":{"docs":{},"组":{"docs":{},"的":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"普":{"docs":{},"通":{"docs":{},"工":{"docs":{},"具":{"docs":{},"函":{"docs":{},"数":{"docs":{},"应":{"docs":{},"在":{"docs":{},"文":{"docs":{},"件":{"docs":{},"末":{"docs":{},"尾":{"docs":{},"出":{"docs":{},"现":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"单":{"docs":{},"测":{"docs":{},"文":{"docs":{},"件":{"docs":{},"内":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"都":{"docs":{},"是":{"docs":{},"不":{"docs":{},"对":{"docs":{},"外":{"docs":{},"的":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"可":{"docs":{},"导":{"docs":{},"出":{"docs":{},"函":{"docs":{},"数":{"docs":{},"可":{"docs":{},"以":{"docs":{},"没":{"docs":{},"有":{"docs":{},"注":{"docs":{},"释":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"定":{"docs":{},"义":{"docs":{},"时":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"不":{"docs":{},"要":{"docs":{},"导":{"docs":{},"出":{"docs":{},"。":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"值":{"docs":{},"从":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}}}},"两":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"构":{"docs":{},"成":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"类":{"docs":{},"型":{"docs":{},"是":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}},"申":{"docs":{},"明":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},"变":{"docs":{},"量":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"相":{"docs":{},"似":{"docs":{},"的":{"docs":{},"声":{"docs":{},"明":{"docs":{},"放":{"docs":{},"在":{"docs":{},"一":{"docs":{},"组":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}},"关":{"docs":{},"操":{"docs":{},"作":{"docs":{},"需":{"docs":{},"要":{"docs":{},"独":{"docs":{},"立":{"docs":{},"封":{"docs":{},"装":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}},"省":{"docs":{},"略":{"docs":{},"结":{"docs":{},"构":{"docs":{},"中":{"docs":{},"的":{"docs":{},"零":{"docs":{},"值":{"docs":{},"字":{"docs":{},"段":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}},"空":{"docs":{},"切":{"docs":{},"片":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"结":{"docs":{},"构":{"docs":{},"与":{"docs":{},"空":{"docs":{},"数":{"docs":{},"组":{"docs":{},"在":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}},"间":{"docs":{},"上":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}},"的":{"docs":{},"实":{"docs":{},"例":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"我":{"docs":{},"们":{"docs":{},"要":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"应":{"docs":{},"直":{"docs":{},"接":{"docs":{},"进":{"docs":{},"行":{"docs":{},"真":{"docs":{},"假":{"docs":{},"判":{"docs":{},"断":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}},"切":{"docs":{},"片":{"docs":{},",":{"docs":{},"下":{"docs":{},"标":{"docs":{},"与":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}},"断":{"docs":{},"言":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"的":{"docs":{},"单":{"docs":{},"个":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"形":{"docs":{},"式":{"docs":{},"如":{"docs":{},"果":{"docs":{},"断":{"docs":{},"言":{"docs":{},"失":{"docs":{},"败":{"docs":{},"将":{"docs":{},"产":{"docs":{},"生":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}},"名":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"换":{"docs":{},"成":{"docs":{},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{},"将":{"docs":{},"来":{"docs":{},",":{"docs":{},"该":{"docs":{},"参":{"docs":{},"数":{"docs":{},"可":{"docs":{},"以":{"docs":{},"支":{"docs":{},"持":{"docs":{},"不":{"docs":{},"仅":{"docs":{},"仅":{"docs":{},"局":{"docs":{},"限":{"docs":{},"于":{"docs":{},"两":{"docs":{},"个":{"docs":{},"状":{"docs":{},"态":{"docs":{},"(":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"e":{"docs":{},"/":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"则":{"docs":{},"名":{"docs":{},"称":{"docs":{},"应":{"docs":{},"以":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"也":{"docs":{},"会":{"docs":{},"多":{"docs":{},"占":{"docs":{},"据":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}},"为":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}},"手":{"docs":{},"动":{"docs":{},"实":{"docs":{},"现":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}},"时":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}},"呢":{"docs":{},"?":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}},"似":{"docs":{},"地":{"docs":{},",":{"docs":{},"在":{"docs":{},"了":{"docs":{},"解":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}},"的":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"值":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"和":{"docs":{},"指":{"docs":{},"针":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"来":{"docs":{},"实":{"docs":{},"现":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"在":{"docs":{},"判":{"docs":{},"断":{"docs":{},"与":{"docs":{},"接":{"docs":{},"口":{"docs":{},"是":{"docs":{},"否":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"时":{"docs":{},",":{"docs":{},"也":{"docs":{},"存":{"docs":{},"在":{"docs":{},"一":{"docs":{},"定":{"docs":{},"的":{"docs":{},"区":{"docs":{},"别":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203}},"执":{"docs":{},"行":{"docs":{},"“":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"/":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"s":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}},"非":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"记":{"docs":{},"住":{"docs":{},",":{"docs":{},"虽":{"docs":{},"然":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"读":{"docs":{},"写":{"docs":{},"安":{"docs":{},"全":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}},"一":{"docs":{},"致":{"docs":{},"(":{"docs":{},"各":{"docs":{},"占":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"锁":{"docs":{},"是":{"docs":{},"一":{"docs":{},"种":{"docs":{},"共":{"docs":{},"享":{"docs":{},"锁":{"docs":{},",":{"docs":{},"也":{"docs":{},"称":{"docs":{},"之":{"docs":{},"为":{"docs":{},"多":{"docs":{},"读":{"docs":{},"单":{"docs":{},"写":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}},"的":{"docs":{},"存":{"docs":{},"在":{"docs":{},"是":{"docs":{},"为":{"docs":{},"了":{"docs":{},"解":{"docs":{},"决":{"docs":{},"读":{"docs":{},"多":{"docs":{},"写":{"docs":{},"少":{"docs":{},"时":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"读":{"docs":{},"场":{"docs":{},"景":{"docs":{},"较":{"docs":{},"多":{"docs":{},"时":{"docs":{},",":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"可":{"docs":{},"有":{"docs":{},"效":{"docs":{},"地":{"docs":{},"减":{"docs":{},"少":{"docs":{},"锁":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"的":{"docs":{},"时":{"docs":{},"间":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"取":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}},"整":{"docs":{},"个":{"docs":{},"给":{"docs":{},"定":{"docs":{},"的":{"docs":{},"字":{"docs":{},"节":{"docs":{},"数":{"docs":{},"据":{"docs":{},"并":{"docs":{},"返":{"docs":{},"回":{"docs":{},"读":{"docs":{},"取":{"docs":{},"的":{"docs":{},"长":{"docs":{},"度":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}},"到":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"、":{"docs":{},"写":{"docs":{},"、":{"docs":{},"计":{"docs":{},"算":{"docs":{},"的":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"应":{"docs":{},"该":{"docs":{},"进":{"docs":{},"行":{"docs":{},"分":{"docs":{},"离":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}},"多":{"docs":{},"写":{"docs":{},"少":{"docs":{},"(":{"docs":{},"读":{"docs":{},"占":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"少":{"docs":{},"写":{"docs":{},"多":{"docs":{},"(":{"docs":{},"读":{"docs":{},"占":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"操":{"docs":{},"作":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}},"锁":{"docs":{},"之":{"docs":{},"间":{"docs":{},"不":{"docs":{},"互":{"docs":{},"斥":{"docs":{},",":{"docs":{},"没":{"docs":{},"有":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"读":{"docs":{},"锁":{"docs":{},"是":{"docs":{},"无":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"的":{"docs":{},",":{"docs":{},"多":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"可":{"docs":{},"以":{"docs":{},"同":{"docs":{},"时":{"docs":{},"获":{"docs":{},"得":{"docs":{},"读":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"返":{"docs":{},"回":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"一":{"docs":{},"个":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"指":{"docs":{},"定":{"docs":{},"用":{"docs":{},"户":{"docs":{},"名":{"docs":{},"的":{"docs":{},"完":{"docs":{},"整":{"docs":{},"名":{"docs":{},"称":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}},"针":{"3":{"docs":{},".":{"docs":{},"小":{"docs":{},"的":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"好":{"docs":{},"过":{"docs":{},"引":{"docs":{},"用":{"4":{"docs":{},".":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"使":{"docs":{},"用":{"docs":{},"确":{"docs":{},"定":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"5":{"docs":{},".":{"docs":{},"小":{"docs":{},"结":{"docs":{},"变":{"docs":{},"量":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"一":{"docs":{},"般":{"docs":{},"发":{"docs":{},"生":{"docs":{},"在":{"docs":{},"如":{"docs":{},"下":{"docs":{},"几":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}},"docs":{}}}}}}}}}}},"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"值":{"docs":{},"超":{"docs":{},"过":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"允":{"docs":{},"许":{"docs":{},"部":{"docs":{},"分":{"docs":{},"失":{"docs":{},"败":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}},"类":{"docs":{},"型":{"docs":{},"不":{"docs":{},"确":{"docs":{},"定":{"docs":{},"(":{"docs":{},"不":{"docs":{},"能":{"docs":{},"确":{"docs":{},"定":{"docs":{},"大":{"docs":{},"小":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}},"当":{"docs":{},"前":{"docs":{},"状":{"docs":{},"态":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}},"地":{"docs":{},"址":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"引":{"docs":{},"用":{"docs":{},"(":{"docs":{},"引":{"docs":{},"用":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"底":{"docs":{},"层":{"docs":{},"是":{"docs":{},"指":{"docs":{},"针":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}},"时":{"docs":{},",":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"无":{"docs":{},"法":{"docs":{},"确":{"docs":{},"定":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"的":{"docs":{},"具":{"docs":{},"体":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"导":{"docs":{},"致":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"到":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"。":{"docs":{},"当":{"docs":{},"发":{"docs":{},"生":{"docs":{},"了":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"申":{"docs":{},"请":{"docs":{},"与":{"docs":{},"回":{"docs":{},"收":{"docs":{},"时":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"会":{"docs":{},"差":{"docs":{},"一":{"docs":{},"点":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"读":{"docs":{},"锁":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"前":{"docs":{},",":{"docs":{},"会":{"docs":{},"重":{"docs":{},"新":{"docs":{},"上":{"docs":{},"锁":{"docs":{},"。":{"docs":{},"重":{"docs":{},"新":{"docs":{},"上":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"原":{"docs":{},"因":{"docs":{},"是":{"docs":{},"主":{"docs":{},"调":{"docs":{},"在":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}},"避":{"docs":{},"免":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"内":{"docs":{},"置":{"docs":{},"名":{"docs":{},"称":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"参":{"docs":{},"数":{"docs":{},"语":{"docs":{},"义":{"docs":{},"不":{"docs":{},"明":{"docs":{},"确":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}},"重":{"docs":{},"复":{"docs":{},"执":{"docs":{},"行":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":3.333333333333333}}}}}}}},"长":{"docs":{},"度":{"docs":{},"为":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"或":{"docs":{},"容":{"docs":{},"量":{"docs":{},"不":{"docs":{},"定":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}},"非":{"docs":{},"零":{"docs":{},"值":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"导":{"docs":{},"出":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"比":{"docs":{},"较":{"docs":{},"简":{"docs":{},"单":{"docs":{},",":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}},"缩":{"docs":{},"略":{"docs":{},"语":{"docs":{},"则":{"docs":{},"应":{"docs":{},"该":{"docs":{},"使":{"docs":{},"用":{"docs":{},"驼":{"docs":{},"峰":{"docs":{},"命":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}},"顺":{"docs":{},"序":{"docs":{},"是":{"docs":{},"明":{"docs":{},"确":{"docs":{},"的":{"docs":{},",":{"docs":{},"但":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"以":{"docs":{},"更":{"docs":{},"改":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}},"(":{"1":{"docs":{},")":{"docs":{},"不":{"docs":{},"能":{"docs":{},"表":{"docs":{},"示":{"docs":{},"为":{"docs":{},"单":{"docs":{},"个":{"docs":{},"赋":{"docs":{},"值":{"docs":{},"的":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"表":{"docs":{},"达":{"docs":{},"式":{"docs":{},";":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}},"明":{"docs":{},"显":{"docs":{},"的":{"docs":{},"控":{"docs":{},"制":{"docs":{},"流":{"docs":{},":":{"docs":{},"任":{"docs":{},"何":{"docs":{},"函":{"docs":{},"数":{"docs":{},"都":{"docs":{},"可":{"docs":{},"以":{"docs":{},"退":{"docs":{},"出":{"docs":{},"程":{"docs":{},"序":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"很":{"docs":{},"难":{"docs":{},"对":{"docs":{},"控":{"docs":{},"制":{"docs":{},"流":{"docs":{},"进":{"docs":{},"行":{"docs":{},"推":{"docs":{},"理":{"docs":{},";":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"您":{"docs":{},"不":{"docs":{},"应":{"docs":{},"明":{"docs":{},"确":{"docs":{},"返":{"docs":{},"回":{"docs":{},"长":{"docs":{},"度":{"docs":{},"为":{"docs":{},"零":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},"。":{"docs":{},"应":{"docs":{},"该":{"docs":{},"返":{"docs":{},"回":{"docs":{},"n":{"docs":{},"i":{"docs":{},"l":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}},"无":{"docs":{},"论":{"docs":{},"程":{"docs":{},"序":{"docs":{},"环":{"docs":{},"境":{"docs":{},"或":{"docs":{},"调":{"docs":{},"用":{"docs":{},"如":{"docs":{},"何":{"docs":{},",":{"docs":{},"行":{"docs":{},"为":{"docs":{},"都":{"docs":{},"必":{"docs":{},"须":{"docs":{},"是":{"docs":{},"完":{"docs":{},"全":{"docs":{},"确":{"docs":{},"定":{"docs":{},"的":{"docs":{},";":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}},"锁":{"docs":{},"单":{"docs":{},"向":{"docs":{},"链":{"docs":{},"表":{"docs":{},"实":{"docs":{},"现":{"docs":{},"时":{"docs":{},"在":{"docs":{},"插":{"docs":{},"入":{"docs":{},"时":{"docs":{},"需":{"docs":{},"要":{"docs":{},"进":{"docs":{},"行":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"指":{"docs":{},"向":{"docs":{},"某":{"docs":{},"些":{"docs":{},"特":{"docs":{},"定":{"docs":{},"类":{"docs":{},"型":{"docs":{},"信":{"docs":{},"息":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},";":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}},"导":{"docs":{},"出":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"部":{"docs":{},"分":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}},"如":{"docs":{},"果":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"应":{"docs":{},"该":{"docs":{},"可":{"docs":{},"以":{"docs":{},"访":{"docs":{},"问":{"docs":{},"底":{"docs":{},"层":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"请":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"是":{"docs":{},"否":{"docs":{},"需":{"docs":{},"要":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"错":{"docs":{},"误":{"docs":{},"以":{"docs":{},"便":{"docs":{},"他":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"处":{"docs":{},"理":{"docs":{},"它":{"docs":{},"?":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}},"返":{"docs":{},"回":{"docs":{},"原":{"docs":{},"始":{"docs":{},"错":{"docs":{},"误":{"docs":{},";":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}},"向":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"接":{"docs":{},"口":{"docs":{},"添":{"docs":{},"加":{"docs":{},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"破":{"docs":{},"坏":{"docs":{},"性":{"docs":{},"的":{"docs":{},"改":{"docs":{},"变":{"docs":{},";":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}},"2":{"docs":{},")":{"docs":{},"可":{"docs":{},"插":{"docs":{},"入":{"docs":{},"的":{"docs":{},"钩":{"docs":{},"子":{"docs":{},",":{"docs":{},"如":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}},"要":{"docs":{},"检":{"docs":{},"查":{"docs":{},"切":{"docs":{},"片":{"docs":{},"是":{"docs":{},"否":{"docs":{},"为":{"docs":{},"空":{"docs":{},",":{"docs":{},"请":{"docs":{},"始":{"docs":{},"终":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}},"避":{"docs":{},"免":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"其":{"docs":{},"他":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}},"难":{"docs":{},"以":{"docs":{},"测":{"docs":{},"试":{"docs":{},":":{"docs":{},"退":{"docs":{},"出":{"docs":{},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"也":{"docs":{},"将":{"docs":{},"退":{"docs":{},"出":{"docs":{},"调":{"docs":{},"用":{"docs":{},"它":{"docs":{},"的":{"docs":{},"测":{"docs":{},"试":{"docs":{},",":{"docs":{},"这":{"docs":{},"使":{"docs":{},"得":{"docs":{},"函":{"docs":{},"数":{"docs":{},"很":{"docs":{},"难":{"docs":{},"测":{"docs":{},"试":{"docs":{},",":{"docs":{},"并":{"docs":{},"跳":{"docs":{},"过":{"docs":{},"了":{"docs":{},"尚":{"docs":{},"未":{"docs":{},"被":{"docs":{},"运":{"docs":{},"行":{"docs":{},"的":{"docs":{},"其":{"docs":{},"他":{"docs":{},"代":{"docs":{},"码":{"docs":{},";":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"指":{"docs":{},"向":{"docs":{},"具":{"docs":{},"体":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"存":{"docs":{},"储":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"是":{"docs":{},"指":{"docs":{},"针":{"docs":{},",":{"docs":{},"则":{"docs":{},"直":{"docs":{},"接":{"docs":{},"存":{"docs":{},"储":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"存":{"docs":{},"储":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"值":{"docs":{},",":{"docs":{},"则":{"docs":{},"存":{"docs":{},"储":{"docs":{},"指":{"docs":{},"向":{"docs":{},"该":{"docs":{},"值":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"导":{"docs":{},"出":{"docs":{},"或":{"docs":{},"非":{"docs":{},"导":{"docs":{},"出":{"docs":{},"类":{"docs":{},"型":{"docs":{},"实":{"docs":{},"现":{"docs":{},"了":{"docs":{},"接":{"docs":{},"口":{"docs":{},"且":{"docs":{},"属":{"docs":{},"于":{"docs":{},"某":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},"(":{"docs":{},"匿":{"docs":{},"名":{"docs":{},"嵌":{"docs":{},"套":{"docs":{},")":{"docs":{},";":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}},"错":{"docs":{},"误":{"docs":{},"消":{"docs":{},"息":{"docs":{},"是":{"docs":{},"否":{"docs":{},"为":{"docs":{},"静":{"docs":{},"态":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},",":{"docs":{},"还":{"docs":{},"是":{"docs":{},"需":{"docs":{},"要":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"信":{"docs":{},"息":{"docs":{},"的":{"docs":{},"动":{"docs":{},"态":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"?":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"j":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{},":":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"/":{"docs":{},"j":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}},"从":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"删":{"docs":{},"除":{"docs":{},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"破":{"docs":{},"坏":{"docs":{},"性":{"docs":{},"的":{"docs":{},"改":{"docs":{},"变":{"docs":{},";":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}},"为":{"docs":{},"了":{"docs":{},"方":{"docs":{},"便":{"docs":{},"打":{"docs":{},"印":{"docs":{},"链":{"docs":{},"表":{"docs":{},"内":{"docs":{},"容":{"docs":{},",":{"docs":{},"实":{"docs":{},"现":{"docs":{},"一":{"docs":{},"个":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"(":{"docs":{},")":{"docs":{},"方":{"docs":{},"法":{"docs":{},"遍":{"docs":{},"历":{"docs":{},"链":{"docs":{},"表":{"docs":{},",":{"docs":{},"且":{"docs":{},"使":{"docs":{},"用":{"docs":{},"值":{"docs":{},"作":{"docs":{},"为":{"docs":{},"接":{"docs":{},"收":{"docs":{},"者":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"打":{"docs":{},"印":{"docs":{},"对":{"docs":{},"象":{"docs":{},"指":{"docs":{},"针":{"docs":{},"时":{"docs":{},"无":{"docs":{},"法":{"docs":{},"生":{"docs":{},"效":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"3":{"docs":{},")":{"docs":{},"对":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"避":{"docs":{},"免":{"docs":{},"访":{"docs":{},"问":{"docs":{},"或":{"docs":{},"操":{"docs":{},"作":{"docs":{},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},"和":{"docs":{},"环":{"docs":{},"境":{"docs":{},"状":{"docs":{},"态":{"docs":{},",":{"docs":{},"如":{"docs":{},"机":{"docs":{},"器":{"docs":{},"信":{"docs":{},"息":{"docs":{},"、":{"docs":{},"环":{"docs":{},"境":{"docs":{},"变":{"docs":{},"量":{"docs":{},"、":{"docs":{},"工":{"docs":{},"作":{"docs":{},"目":{"docs":{},"录":{"docs":{},"、":{"docs":{},"程":{"docs":{},"序":{"docs":{},"参":{"docs":{},"数":{"docs":{},"/":{"docs":{},"输":{"docs":{},"入":{"docs":{},"等":{"docs":{},";":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"零":{"docs":{},"值":{"docs":{},"切":{"docs":{},"片":{"docs":{},"(":{"docs":{},"用":{"docs":{},"v":{"docs":{},"a":{"docs":{},"r":{"docs":{},"声":{"docs":{},"明":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},")":{"docs":{},"可":{"docs":{},"立":{"docs":{},"即":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"无":{"docs":{},"需":{"docs":{},"调":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}},"跳":{"docs":{},"过":{"docs":{},"清":{"docs":{},"理":{"docs":{},":":{"docs":{},"当":{"docs":{},"函":{"docs":{},"数":{"docs":{},"退":{"docs":{},"出":{"docs":{},"程":{"docs":{},"序":{"docs":{},"时":{"docs":{},",":{"docs":{},"会":{"docs":{},"跳":{"docs":{},"过":{"docs":{},"已":{"docs":{},"经":{"docs":{},"进":{"docs":{},"入":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}},"任":{"docs":{},"何":{"docs":{},"其":{"docs":{},"他":{"docs":{},"情":{"docs":{},"况":{"docs":{},"都":{"docs":{},"违":{"docs":{},"反":{"docs":{},"接":{"docs":{},"口":{"docs":{},"合":{"docs":{},"理":{"docs":{},"性":{"docs":{},"检":{"docs":{},"查":{"docs":{},",":{"docs":{},"终":{"docs":{},"止":{"docs":{},"编":{"docs":{},"译":{"docs":{},"并":{"docs":{},"通":{"docs":{},"知":{"docs":{},"用":{"docs":{},"户":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}},"我":{"docs":{},"们":{"docs":{},"是":{"docs":{},"否":{"docs":{},"正":{"docs":{},"在":{"docs":{},"传":{"docs":{},"递":{"docs":{},"由":{"docs":{},"下":{"docs":{},"游":{"docs":{},"函":{"docs":{},"数":{"docs":{},"返":{"docs":{},"回":{"docs":{},"的":{"docs":{},"新":{"docs":{},"错":{"docs":{},"误":{"docs":{},"?":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"q":{"docs":{},"l":{"docs":{},":":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"/":{"docs":{},"s":{"docs":{},"q":{"docs":{},"l":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}},"删":{"docs":{},"除":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"类":{"docs":{},"型":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"破":{"docs":{},"坏":{"docs":{},"性":{"docs":{},"的":{"docs":{},"改":{"docs":{},"变":{"docs":{},";":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}},"4":{"docs":{},")":{"docs":{},"避":{"docs":{},"免":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"y":{"docs":{},"a":{"docs":{},"m":{"docs":{},"l":{"docs":{},":":{"docs":{},"g":{"docs":{},"o":{"docs":{},"p":{"docs":{},"k":{"docs":{},"g":{"docs":{},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"y":{"docs":{},"a":{"docs":{},"m":{"docs":{},"l":{"docs":{},".":{"docs":{},"v":{"2":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"docs":{}}}}}}}}}}}}}}}}}}}}},"即":{"docs":{},"使":{"docs":{},"使":{"docs":{},"用":{"docs":{},"满":{"docs":{},"足":{"docs":{},"相":{"docs":{},"同":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"替":{"docs":{},"换":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"也":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"破":{"docs":{},"坏":{"docs":{},"性":{"docs":{},"的":{"docs":{},"改":{"docs":{},"变":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"*":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.013605442176870748},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"/":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}},")":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},",":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009}}}},"a":{"docs":{},"t":{"docs":{},"t":{"docs":{},"r":{"docs":{},"m":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}},"b":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.011834319526627219}},")":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.011834319526627219}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},")":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}},"n":{"docs":{},"c":{"docs":{},"r":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.023668639053254437}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0066518847006651885}}}}},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}}}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"o":{"docs":{},"l":{"docs":{},"v":{"docs":{},"e":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}},"w":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.00510204081632653}}}}}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.029411764705882353}}}}}},"s":{"2":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}},"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.006802721088435374}}}}}}}}}}},"t":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"a":{"docs":{},"t":{"docs":{},"s":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}},")":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}}}}}},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}},")":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"w":{"docs":{},"a":{"docs":{},"i":{"docs":{},"t":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"t":{"docs":{},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.018404907975460124},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}},"b":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.00683371298405467},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"_":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}},"i":{"docs":{},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}},"e":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.0196078431372549}}},")":{"docs":{},"、":{"docs":{},"切":{"docs":{},"片":{"docs":{},"和":{"docs":{},"映":{"docs":{},"射":{"docs":{},"是":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353}}}}}}}}}}}}}}},"z":{"docs":{},"a":{"docs":{},"p":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}},"[":{"docs":{},"]":{"docs":{},"*":{"docs":{},"b":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}},"d":{"docs":{},"r":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}},"b":{"docs":{},".":{"docs":{},"r":{"docs":{},"o":{"docs":{},"w":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"p":{"docs":{},"p":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"f":{"docs":{},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}}}},"值":{"docs":{},"将":{"docs":{},"引":{"docs":{},"发":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"好":{"docs":{},"很":{"docs":{},"多":{"docs":{},"。":{"docs":{},"从":{"docs":{},"这":{"docs":{},"里":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"能":{"docs":{},"够":{"docs":{},"知":{"docs":{},"道":{"docs":{},"二":{"docs":{},"者":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"别":{"docs":{},"之":{"docs":{},"大":{"docs":{},"的":{"docs":{},"原":{"docs":{},"因":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"传":{"docs":{},"递":{"docs":{},"会":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"整":{"docs":{},"个":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"而":{"docs":{},"指":{"docs":{},"针":{"docs":{},"传":{"docs":{},"递":{"docs":{},"只":{"docs":{},"会":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"指":{"docs":{},"向":{"docs":{},"的":{"docs":{},"对":{"docs":{},"象":{"docs":{},"是":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"。":{"docs":{},"传":{"docs":{},"指":{"docs":{},"针":{"docs":{},"可":{"docs":{},"以":{"docs":{},"减":{"docs":{},"少":{"docs":{},"值":{"docs":{},"的":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"到":{"docs":{},"堆":{"docs":{},"中":{"docs":{},",":{"docs":{},"增":{"docs":{},"加":{"docs":{},"垃":{"docs":{},"圾":{"docs":{},"回":{"docs":{},"收":{"docs":{},"(":{"docs":{},"g":{"docs":{},"c":{"docs":{},")":{"docs":{},"的":{"docs":{},"负":{"docs":{},"担":{"docs":{},"。":{"docs":{},"在":{"docs":{},"对":{"docs":{},"象":{"docs":{},"频":{"docs":{},"繁":{"docs":{},"创":{"docs":{},"建":{"docs":{},"和":{"docs":{},"删":{"docs":{},"除":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},",":{"docs":{},"返":{"docs":{},"回":{"docs":{},"指":{"docs":{},"针":{"docs":{},"导":{"docs":{},"致":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"原":{"docs":{},"则":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"切":{"docs":{},"片":{"docs":{},"长":{"docs":{},"度":{"docs":{},"为":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}}}}}}},"子":{"docs":{},"操":{"docs":{},"作":{"docs":{},"(":{"docs":{},"如":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"块":{"docs":{},"内":{"docs":{},",":{"docs":{},"读":{"docs":{},"取":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}},"注":{"docs":{},"释":{"docs":{},"即":{"docs":{},"在":{"docs":{},"代":{"docs":{},"码":{"docs":{},"块":{"docs":{},"前":{"docs":{},"给":{"docs":{},"出":{"docs":{},"一":{"docs":{},"个":{"docs":{},"总":{"docs":{},"的":{"docs":{},"说":{"docs":{},"明":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"每":{"docs":{},"行":{"docs":{},"变":{"docs":{},"量":{"docs":{},"或":{"docs":{},"常":{"docs":{},"量":{"docs":{},"的":{"docs":{},"末":{"docs":{},"尾":{"docs":{},"给":{"docs":{},"出":{"docs":{},"详":{"docs":{},"细":{"docs":{},"注":{"docs":{},"释":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"看":{"docs":{},"起":{"docs":{},"来":{"docs":{},"更":{"docs":{},"加":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"处":{"docs":{},"理":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.005836575875486381}},"p":{"docs":{},"a":{"docs":{},"n":{"docs":{},"i":{"docs":{},"c":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"v":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}},"类":{"docs":{},"型":{"docs":{},"断":{"docs":{},"言":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}},"。":{"docs":{},"在":{"docs":{},"知":{"docs":{},"道":{"docs":{},"常":{"docs":{},"见":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"场":{"docs":{},"景":{"docs":{},"后":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"在":{"docs":{},"编":{"docs":{},"码":{"docs":{},"时":{"docs":{},"可":{"docs":{},"以":{"docs":{},"有":{"docs":{},"意":{"docs":{},"识":{"docs":{},"地":{"docs":{},"避":{"docs":{},"免":{"docs":{},"变":{"docs":{},"量":{"docs":{},"发":{"docs":{},"生":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"地":{"docs":{},"使":{"docs":{},"用":{"docs":{},"栈":{"docs":{},"空":{"docs":{},"间":{"docs":{},",":{"docs":{},"而":{"docs":{},"非":{"docs":{},"堆":{"docs":{},"空":{"docs":{},"间":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"函":{"docs":{},"数":{"docs":{},"返":{"docs":{},"回":{"docs":{},"后":{"docs":{},"就":{"docs":{},"会":{"docs":{},"直":{"docs":{},"接":{"docs":{},"释":{"docs":{},"放":{"docs":{},",":{"docs":{},"而":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"分":{"docs":{},"配":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"使":{"docs":{},"用":{"docs":{},"完":{"docs":{},"毕":{"docs":{},"会":{"docs":{},"交":{"docs":{},"给":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"式":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"不":{"docs":{},"关":{"docs":{},"心":{"docs":{},"是":{"docs":{},"否":{"docs":{},"成":{"docs":{},"功":{"docs":{},",":{"docs":{},"o":{"docs":{},"k":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}},"当":{"docs":{},"y":{"docs":{},"与":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"都":{"docs":{},"为":{"docs":{},"空":{"docs":{},"时":{"docs":{},",":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"会":{"docs":{},"出":{"docs":{},"现":{"docs":{},"错":{"docs":{},"误":{"docs":{},"的":{"docs":{},"调":{"docs":{},"用":{"docs":{},"逻":{"docs":{},"辑":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}}}}}}},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{},"多":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"具":{"docs":{},"有":{"docs":{},"退":{"docs":{},"出":{"docs":{},"能":{"docs":{},"力":{"docs":{},"时":{"docs":{},"会":{"docs":{},"存":{"docs":{},"在":{"docs":{},"一":{"docs":{},"些":{"docs":{},"问":{"docs":{},"题":{"docs":{},":":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}},"存":{"docs":{},"在":{"docs":{},"资":{"docs":{},"源":{"docs":{},"管":{"docs":{},"理":{"docs":{},"时":{"docs":{},",":{"docs":{},"应":{"docs":{},"紧":{"docs":{},"跟":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}},"然":{"docs":{},",":{"docs":{},"凡":{"docs":{},"事":{"docs":{},"无":{"docs":{},"绝":{"docs":{},"对":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"需":{"docs":{},"要":{"docs":{},"修":{"docs":{},"改":{"docs":{},"接":{"docs":{},"口":{"docs":{},"变":{"docs":{},"量":{"docs":{},"本":{"docs":{},"身":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"应":{"docs":{},"该":{"docs":{},"使":{"docs":{},"用":{"docs":{},"指":{"docs":{},"向":{"docs":{},"接":{"docs":{},"口":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},",":{"docs":{},"当":{"docs":{},"然":{"docs":{},"你":{"docs":{},"必":{"docs":{},"须":{"docs":{},"清":{"docs":{},"楚":{"docs":{},"自":{"docs":{},"己":{"docs":{},"在":{"docs":{},"干":{"docs":{},"什":{"docs":{},"么":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"枚":{"docs":{},"举":{"docs":{},"值":{"docs":{},"为":{"docs":{},"零":{"docs":{},"是":{"docs":{},"有":{"docs":{},"意":{"docs":{},"义":{"docs":{},"的":{"docs":{},",":{"docs":{},"如":{"docs":{},"当":{"docs":{},"零":{"docs":{},"值":{"docs":{},"是":{"docs":{},"理":{"docs":{},"想":{"docs":{},"的":{"docs":{},"默":{"docs":{},"认":{"docs":{},"行":{"docs":{},"为":{"docs":{},"时":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"多":{"docs":{},"个":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125}}}}},"不":{"docs":{},"能":{"docs":{},"在":{"docs":{},"这":{"docs":{},"些":{"docs":{},"交":{"docs":{},"互":{"docs":{},"中":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}},"在":{"docs":{},"这":{"docs":{},"些":{"docs":{},"交":{"docs":{},"互":{"docs":{},"中":{"docs":{},"不":{"docs":{},"能":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{},"反":{"docs":{},"射":{"docs":{},"时":{"docs":{},",":{"docs":{},"请":{"docs":{},"问":{"docs":{},"一":{"docs":{},"下":{"docs":{},"自":{"docs":{},"己":{"docs":{},",":{"docs":{},"我":{"docs":{},"真":{"docs":{},"地":{"docs":{},"需":{"docs":{},"要":{"docs":{},"它":{"docs":{},"吗":{"docs":{},"?":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}},"创":{"docs":{},"建":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"且":{"docs":{},"仅":{"docs":{},"当":{"docs":{},"第":{"docs":{},"一":{"docs":{},"次":{"docs":{},"访":{"docs":{},"问":{"docs":{},"某":{"docs":{},"个":{"docs":{},"变":{"docs":{},"量":{"docs":{},"时":{"docs":{},",":{"docs":{},"进":{"docs":{},"行":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"(":{"docs":{},"写":{"docs":{},")":{"docs":{},";":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}},"捕":{"docs":{},"获":{"docs":{},"最":{"docs":{},"晚":{"docs":{},"要":{"docs":{},"在":{"docs":{},"当":{"docs":{},"前":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}},"用":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},"于":{"docs":{},"捕":{"docs":{},"获":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"获":{"docs":{},"取":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"系":{"docs":{},"数":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}},"从":{"docs":{},"对":{"docs":{},"象":{"docs":{},"池":{"docs":{},"中":{"docs":{},"获":{"docs":{},"取":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}},"阻":{"docs":{},"塞":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},",":{"docs":{},"等":{"docs":{},"待":{"docs":{},"通":{"docs":{},"知":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}},"户":{"docs":{},"结":{"docs":{},"构":{"docs":{},"定":{"docs":{},"义":{"docs":{},"了":{"docs":{},"用":{"docs":{},"户":{"docs":{},"基":{"docs":{},"础":{"docs":{},"信":{"docs":{},"息":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}},"的":{"docs":{},"就":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"来":{"docs":{},"调":{"docs":{},"节":{"docs":{},"读":{"docs":{},"操":{"docs":{},"作":{"docs":{},"的":{"docs":{},"占":{"docs":{},"比":{"docs":{},",":{"docs":{},"来":{"docs":{},"模":{"docs":{},"拟":{"docs":{},"读":{"docs":{},"写":{"docs":{},"占":{"docs":{},"比":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},"。":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}},"保":{"docs":{},"证":{"docs":{},"函":{"docs":{},"数":{"docs":{},"只":{"docs":{},"执":{"docs":{},"行":{"docs":{},"一":{"docs":{},"次":{"docs":{},"。":{"docs":{},"要":{"docs":{},"达":{"docs":{},"到":{"docs":{},"这":{"docs":{},"个":{"docs":{},"效":{"docs":{},"果":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"做":{"docs":{},"到":{"docs":{},"两":{"docs":{},"点":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}},"协":{"docs":{},"调":{"docs":{},"想":{"docs":{},"要":{"docs":{},"访":{"docs":{},"问":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}},"解":{"docs":{},"决":{"docs":{},"这":{"docs":{},"类":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"程":{"docs":{},"序":{"docs":{},"将":{"docs":{},"意":{"docs":{},"外":{"docs":{},"终":{"docs":{},"止":{"docs":{},"并":{"docs":{},"输":{"docs":{},"出":{"docs":{},":":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}},"中":{"docs":{},"每":{"docs":{},"一":{"docs":{},"个":{"docs":{},"被":{"docs":{},"导":{"docs":{},"出":{"docs":{},"的":{"docs":{},"(":{"docs":{},"大":{"docs":{},"写":{"docs":{},"的":{"docs":{},")":{"docs":{},"名":{"docs":{},"字":{"docs":{},",":{"docs":{},"都":{"docs":{},"应":{"docs":{},"该":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"文":{"docs":{},"档":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"退":{"docs":{},"出":{"docs":{},"方":{"docs":{},"式":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}},"会":{"docs":{},"像":{"docs":{},"预":{"docs":{},"期":{"docs":{},"的":{"docs":{},"那":{"docs":{},"样":{"docs":{},"顺":{"docs":{},"利":{"docs":{},"的":{"docs":{},"运":{"docs":{},"行":{"docs":{},"吗":{"docs":{},"?":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}},"崩":{"docs":{},"溃":{"1":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}}},"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"串":{"docs":{},"行":{"docs":{},"执":{"docs":{},"行":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"到":{"docs":{},"运":{"docs":{},"行":{"docs":{},"结":{"docs":{},"束":{"docs":{},",":{"docs":{},"占":{"docs":{},"用":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"资":{"docs":{},"源":{"docs":{},"是":{"docs":{},"需":{"docs":{},"要":{"docs":{},"由":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}},"势":{"docs":{},"必":{"docs":{},"会":{"docs":{},"带":{"docs":{},"来":{"docs":{},"性":{"docs":{},"能":{"docs":{},"影":{"docs":{},"响":{"docs":{},",":{"docs":{},"甚":{"docs":{},"至":{"docs":{},"程":{"docs":{},"序":{"docs":{},"崩":{"docs":{},"溃":{"docs":{},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"的":{"docs":{},"控":{"docs":{},"制":{"docs":{},"协":{"docs":{},"程":{"docs":{},"数":{"docs":{},"量":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"需":{"docs":{},"要":{"docs":{},",":{"docs":{},"请":{"docs":{},"复":{"docs":{},"用":{"docs":{},"它":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"占":{"docs":{},"用":{"docs":{},"约":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"后":{"docs":{},",":{"docs":{},"势":{"docs":{},"必":{"docs":{},"会":{"docs":{},"造":{"docs":{},"成":{"docs":{},"对":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}},"数":{"docs":{},"量":{"docs":{},"越":{"docs":{},"多":{"docs":{},",":{"docs":{},"g":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}},"的":{"docs":{},"结":{"docs":{},"构":{"docs":{},"定":{"docs":{},"义":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"函":{"docs":{},"数":{"docs":{},"仍":{"docs":{},"然":{"docs":{},"只":{"docs":{},"执":{"docs":{},"行":{"docs":{},"一":{"docs":{},"次":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}},"(":{"docs":{},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},")":{"docs":{},"是":{"docs":{},"由":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}},"同":{"docs":{},"步":{"docs":{},"。":{"docs":{},"通":{"docs":{},"过":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"间":{"docs":{},"的":{"docs":{},"同":{"docs":{},"步":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},",":{"docs":{},"以":{"docs":{},"此":{"docs":{},"来":{"docs":{},"实":{"docs":{},"现":{"docs":{},"多":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"即":{"docs":{},"保":{"docs":{},"存":{"docs":{},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{},"通":{"docs":{},"知":{"docs":{},"列":{"docs":{},"表":{"docs":{},"。":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}},"被":{"docs":{},"捕":{"docs":{},"获":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"导":{"docs":{},"出":{"docs":{},"的":{"docs":{},"字":{"docs":{},"段":{"docs":{},"和":{"docs":{},"方":{"docs":{},"法":{"docs":{},"全":{"docs":{},"部":{"docs":{},"成":{"docs":{},"为":{"docs":{},"了":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}},",":{"docs":{},"在":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}},"用":{"docs":{},"于":{"docs":{},"控":{"docs":{},"制":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"读":{"docs":{},"写":{"docs":{},"满":{"docs":{},"足":{"docs":{},"如":{"docs":{},"下":{"docs":{},"三":{"docs":{},"个":{"docs":{},"条":{"docs":{},"件":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"越":{"docs":{},"界":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"抛":{"docs":{},"出":{"docs":{},"的":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}},"错":{"docs":{},"误":{"docs":{},"判":{"docs":{},"断":{"docs":{},"独":{"docs":{},"立":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"不":{"docs":{},"与":{"docs":{},"其":{"docs":{},"他":{"docs":{},"变":{"docs":{},"量":{"docs":{},"组":{"docs":{},"合":{"docs":{},"判":{"docs":{},"断":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"示":{"docs":{},"例":{"docs":{},":":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"y":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"写":{"docs":{},"成":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}},"地":{"docs":{},"使":{"docs":{},"用":{"docs":{},"接":{"docs":{},"口":{"docs":{},"会":{"docs":{},"在":{"docs":{},"编":{"docs":{},"译":{"docs":{},"期":{"docs":{},"报":{"docs":{},"错":{"docs":{},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{},"可":{"docs":{},"以":{"docs":{},"利":{"docs":{},"用":{"docs":{},"这":{"docs":{},"个":{"docs":{},"机":{"docs":{},"制":{"docs":{},"让":{"docs":{},"部":{"docs":{},"分":{"docs":{},"问":{"docs":{},"题":{"docs":{},"在":{"docs":{},"编":{"docs":{},"译":{"docs":{},"期":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"匹":{"docs":{},"配":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}},"消":{"docs":{},"息":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}},"后":{"docs":{},"面":{"docs":{},"要":{"docs":{},"有":{"docs":{},"空":{"docs":{},"格":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},",":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}},"会":{"docs":{},"进":{"docs":{},"行":{"docs":{},"解":{"docs":{},"锁":{"docs":{},"操":{"docs":{},"作":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"重":{"docs":{},"复":{"docs":{},"解":{"docs":{},"锁":{"docs":{},"引":{"docs":{},"发":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}},"命":{"docs":{},"令":{"docs":{},"行":{"docs":{},"参":{"docs":{},"数":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}},"名":{"docs":{},"清":{"docs":{},"晰":{"docs":{},"的":{"docs":{},"地":{"docs":{},"方":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"添":{"docs":{},"加":{"docs":{},"无":{"docs":{},"意":{"docs":{},"义":{"docs":{},"的":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{},"类":{"docs":{},"型":{"docs":{},"注":{"docs":{},"释":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}},"不":{"docs":{},"能":{"docs":{},"采":{"docs":{},"用":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"规":{"docs":{},"则":{"docs":{},"基":{"docs":{},"本":{"docs":{},"保":{"docs":{},"持":{"docs":{},"和":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"命":{"docs":{},"名":{"docs":{},"规":{"docs":{},"则":{"docs":{},"一":{"docs":{},"致":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}},"大":{"docs":{},"块":{"docs":{},"变":{"docs":{},"量":{"docs":{},"或":{"docs":{},"常":{"docs":{},"量":{"docs":{},"定":{"docs":{},"义":{"docs":{},"时":{"docs":{},"的":{"docs":{},"注":{"docs":{},"释":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}},"部":{"docs":{},"分":{"docs":{},"业":{"docs":{},"务":{"docs":{},"场":{"docs":{},"景":{"docs":{},"是":{"docs":{},"读":{"docs":{},"多":{"docs":{},"写":{"docs":{},"少":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"可":{"docs":{},"有":{"docs":{},"效":{"docs":{},"提":{"docs":{},"高":{"docs":{},"对":{"docs":{},"共":{"docs":{},"享":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},"访":{"docs":{},"问":{"docs":{},"效":{"docs":{},"率":{"docs":{},"。":{"docs":{},"最":{"docs":{},"坏":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"只":{"docs":{},"有":{"docs":{},"写":{"docs":{},"请":{"docs":{},"求":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"顶":{"docs":{},"多":{"docs":{},"退":{"docs":{},"化":{"docs":{},"成":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{},"优":{"docs":{},"先":{"docs":{},"使":{"docs":{},"用":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"而":{"docs":{},"非":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"提":{"docs":{},"高":{"docs":{},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"所":{"docs":{},"有":{"docs":{},"注":{"docs":{},"释":{"docs":{},"掉":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"在":{"docs":{},"提":{"docs":{},"交":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}},"以":{"docs":{},"如":{"docs":{},"果":{"docs":{},"对":{"docs":{},"性":{"docs":{},"能":{"docs":{},"要":{"docs":{},"求":{"docs":{},"非":{"docs":{},"常":{"docs":{},"严":{"docs":{},"格":{"docs":{},",":{"docs":{},"或":{"docs":{},"待":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"的":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"数":{"docs":{},"量":{"docs":{},"足":{"docs":{},"够":{"docs":{},"多":{"docs":{},"时":{"docs":{},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"谓":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},",":{"docs":{},"指":{"docs":{},"锁":{"docs":{},"只":{"docs":{},"能":{"docs":{},"被":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}},"接":{"docs":{},"口":{"docs":{},"注":{"docs":{},"释":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"收":{"docs":{},"器":{"docs":{},"的":{"docs":{},"名":{"docs":{},"称":{"docs":{},"在":{"docs":{},"函":{"docs":{},"数":{"docs":{},"超":{"docs":{},"过":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"为":{"docs":{},"值":{"docs":{},"和":{"docs":{},"指":{"docs":{},"针":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"在":{"docs":{},"调":{"docs":{},"用":{"docs":{},"方":{"docs":{},"式":{"docs":{},"上":{"docs":{},"是":{"docs":{},"有":{"docs":{},"区":{"docs":{},"别":{"docs":{},"的":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}}}}}}}}}}}}},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"接":{"docs":{},"收":{"docs":{},"完":{"docs":{},"成":{"docs":{},"后":{"docs":{},",":{"docs":{},"将":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}},"受":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"语":{"docs":{},"句":{"docs":{},",":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"缩":{"docs":{},"小":{"docs":{},"变":{"docs":{},"量":{"docs":{},"作":{"docs":{},"用":{"docs":{},"域":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}}}}}}}}}}}}}}}}},"下":{"docs":{},"来":{"docs":{},"逐":{"docs":{},"个":{"docs":{},"分":{"docs":{},"析":{"docs":{},",":{"docs":{},"首":{"docs":{},"先":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"测":{"docs":{},"试":{"docs":{},"三":{"docs":{},"种":{"docs":{},"情":{"docs":{},"景":{"docs":{},"下":{"docs":{},",":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"和":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"描":{"docs":{},"述":{"docs":{},"\"":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},",":{"docs":{},"斜":{"docs":{},"线":{"docs":{},"后":{"docs":{},"面":{"docs":{},"紧":{"docs":{},"跟":{"docs":{},"一":{"docs":{},"个":{"docs":{},"空":{"docs":{},"格":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}},"了":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"的":{"docs":{},"规":{"docs":{},"则":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}},"族":{"docs":{},"群":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"样":{"docs":{},"式":{"docs":{},"注":{"docs":{},"释":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}},"每":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"包":{"docs":{},"都":{"docs":{},"应":{"docs":{},"该":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"包":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"导":{"docs":{},"出":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{},"和":{"docs":{},"常":{"docs":{},"量":{"docs":{},"都":{"docs":{},"必":{"docs":{},"须":{"docs":{},"有":{"docs":{},"注":{"docs":{},"释":{"docs":{},"说":{"docs":{},"明":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}},"类":{"docs":{},"型":{"docs":{},"定":{"docs":{},"义":{"docs":{},"(":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"或":{"docs":{},"者":{"docs":{},"接":{"docs":{},"口":{"docs":{},"都":{"docs":{},"必":{"docs":{},"须":{"docs":{},"有":{"docs":{},"注":{"docs":{},"释":{"docs":{},"说":{"docs":{},"明":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}},"重":{"docs":{},"要":{"docs":{},"的":{"docs":{},"可":{"docs":{},"导":{"docs":{},"出":{"docs":{},"函":{"docs":{},"数":{"docs":{},"都":{"docs":{},"要":{"docs":{},"首":{"docs":{},"先":{"docs":{},"编":{"docs":{},"写":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{},"例":{"docs":{},",":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{},"例":{"docs":{},"和":{"docs":{},"正":{"docs":{},"规":{"docs":{},"代":{"docs":{},"码":{"docs":{},"一":{"docs":{},"起":{"docs":{},"提":{"docs":{},"交":{"docs":{},"方":{"docs":{},"便":{"docs":{},"进":{"docs":{},"行":{"docs":{},"回":{"docs":{},"归":{"docs":{},"测":{"docs":{},"试":{"docs":{},"。":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"字":{"docs":{},"段":{"docs":{},"按":{"docs":{},"照":{"docs":{},"自":{"docs":{},"身":{"docs":{},"的":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"系":{"docs":{},"数":{"docs":{},"来":{"docs":{},"确":{"docs":{},"定":{"docs":{},"在":{"docs":{},"内":{"docs":{},"存":{"docs":{},"中":{"docs":{},"的":{"docs":{},"偏":{"docs":{},"移":{"docs":{},"量":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"因":{"docs":{},"偏":{"docs":{},"移":{"docs":{},"而":{"docs":{},"浪":{"docs":{},"费":{"docs":{},"的":{"docs":{},"大":{"docs":{},"小":{"docs":{},"也":{"docs":{},"不":{"docs":{},"同":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"特":{"docs":{},"殊":{"docs":{},"实":{"docs":{},"现":{"docs":{},"需":{"docs":{},"要":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}},"有":{"docs":{},"名":{"docs":{},"词":{"docs":{},"时":{"docs":{},",":{"docs":{},"需":{"docs":{},"遵":{"docs":{},"循":{"docs":{},"以":{"docs":{},"下":{"docs":{},"规":{"docs":{},"则":{"docs":{},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}},"解":{"docs":{},"析":{"docs":{},"函":{"docs":{},"数":{"docs":{},"应":{"docs":{},"该":{"docs":{},"注":{"docs":{},"明":{"docs":{},"解":{"docs":{},"析":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"的":{"docs":{},"范":{"docs":{},"例":{"docs":{},",":{"docs":{},"并":{"docs":{},"明":{"docs":{},"确":{"docs":{},"不":{"docs":{},"能":{"docs":{},"处":{"docs":{},"理":{"docs":{},"的":{"docs":{},"异":{"docs":{},"常":{"docs":{},"情":{"docs":{},"况":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"、":{"docs":{},"校":{"docs":{},"验":{"docs":{},"、":{"docs":{},"计":{"docs":{},"算":{"docs":{},"的":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"应":{"docs":{},"该":{"docs":{},"进":{"docs":{},"行":{"docs":{},"分":{"docs":{},"离":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}},"决":{"docs":{},",":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"需":{"docs":{},"要":{"docs":{},"描":{"docs":{},"述":{"docs":{},"谁":{"docs":{},",":{"docs":{},"在":{"docs":{},"什":{"docs":{},"么":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},",":{"docs":{},"如":{"docs":{},"何":{"docs":{},"使":{"docs":{},"用":{"docs":{},"接":{"docs":{},"口":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"处":{"docs":{},"理":{"docs":{},"逻":{"docs":{},"辑":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}},"判":{"docs":{},"断":{"docs":{},"当":{"docs":{},"前":{"docs":{},"文":{"docs":{},"件":{"docs":{},"是":{"docs":{},"否":{"docs":{},"应":{"docs":{},"该":{"docs":{},"归":{"docs":{},"属":{"docs":{},"于":{"docs":{},"当":{"docs":{},"前":{"docs":{},"包":{"docs":{},",":{"docs":{},"主":{"docs":{},"要":{"docs":{},"以":{"docs":{},"职":{"docs":{},"责":{"docs":{},"进":{"docs":{},"行":{"docs":{},"判":{"docs":{},"断":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"注":{"docs":{},"意":{"docs":{},"的":{"docs":{},"时":{"docs":{},",":{"docs":{},"上":{"docs":{},"面":{"docs":{},"运":{"docs":{},"行":{"docs":{},"基":{"docs":{},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"编":{"docs":{},"译":{"docs":{},"选":{"docs":{},"项":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"运":{"docs":{},"行":{"docs":{},"上":{"docs":{},"面":{"docs":{},"基":{"docs":{},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},"时":{"docs":{},",":{"docs":{},"传":{"docs":{},"递":{"docs":{},"了":{"docs":{},"禁":{"docs":{},"止":{"docs":{},"内":{"docs":{},"联":{"docs":{},"的":{"docs":{},"编":{"docs":{},"译":{"docs":{},"选":{"docs":{},"项":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}},"做":{"docs":{},"一":{"docs":{},"次":{"docs":{},"偏":{"docs":{},"移":{"docs":{},"值":{"docs":{},"与":{"docs":{},"指":{"docs":{},"针":{"docs":{},"的":{"docs":{},"加":{"docs":{},"法":{"docs":{},"运":{"docs":{},"算":{"docs":{},",":{"docs":{},"才":{"docs":{},"能":{"docs":{},"获":{"docs":{},"取":{"docs":{},"要":{"docs":{},"访":{"docs":{},"问":{"docs":{},"的":{"docs":{},"值":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},",":{"docs":{},"访":{"docs":{},"问":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"的":{"docs":{},"机":{"docs":{},"器":{"docs":{},"代":{"docs":{},"码":{"docs":{},"更":{"docs":{},"紧":{"docs":{},"凑":{"docs":{},",":{"docs":{},"速":{"docs":{},"度":{"docs":{},"更":{"docs":{},"快":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"读":{"docs":{},"取":{"docs":{},"环":{"docs":{},"境":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"并":{"docs":{},"转":{"docs":{},"换":{"docs":{},"为":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"。":{"docs":{},"环":{"docs":{},"境":{"docs":{},"变":{"docs":{},"量":{"docs":{},"在":{"docs":{},"程":{"docs":{},"序":{"docs":{},"执":{"docs":{},"行":{"docs":{},"前":{"docs":{},"已":{"docs":{},"经":{"docs":{},"确":{"docs":{},"定":{"docs":{},",":{"docs":{},"执":{"docs":{},"行":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},"不":{"docs":{},"会":{"docs":{},"发":{"docs":{},"生":{"docs":{},"改":{"docs":{},"变":{"docs":{},"。":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"z":{"docs":{},"e":{"docs":{},"r":{"docs":{},"o":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"三":{"docs":{},"个":{"docs":{},"以":{"docs":{},"上":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"名":{"docs":{},",":{"docs":{},"类":{"docs":{},"似":{"docs":{},"于":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}},"两":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"名":{"docs":{},"综":{"docs":{},"合":{"docs":{},"两":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}},"二":{"docs":{},"维":{"docs":{},"切":{"docs":{},"片":{"docs":{},"或":{"docs":{},"数":{"docs":{},"组":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"传":{"docs":{},"输":{"docs":{},"协":{"docs":{},"议":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}}}}},"的":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"但":{"docs":{},"我":{"docs":{},"们":{"docs":{},"仍":{"docs":{},"然":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"的":{"docs":{},"包":{"docs":{},"内":{"docs":{},"将":{"docs":{},"其":{"docs":{},"和":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}},"保":{"docs":{},"持":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"证":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"函":{"docs":{},"数":{"docs":{},"只":{"docs":{},"会":{"docs":{},"被":{"docs":{},"执":{"docs":{},"行":{"docs":{},"一":{"docs":{},"次":{"docs":{},"和":{"docs":{},"多":{"docs":{},"次":{"docs":{},"执":{"docs":{},"行":{"docs":{},",":{"docs":{},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}},"加":{"docs":{},"密":{"docs":{},"传":{"docs":{},"输":{"docs":{},"协":{"docs":{},"议":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"一":{"docs":{},"。":{"docs":{},"最":{"docs":{},"终":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}},"写":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"读":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"是":{"docs":{},"为":{"docs":{},"了":{"docs":{},"避":{"docs":{},"免":{"docs":{},"在":{"docs":{},"并":{"docs":{},"发":{"docs":{},"环":{"docs":{},"境":{"docs":{},"下":{"docs":{},",":{"docs":{},"同":{"docs":{},"时":{"docs":{},"访":{"docs":{},"问":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"产":{"docs":{},"生":{"docs":{},"的":{"docs":{},"安":{"docs":{},"全":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{},"那":{"docs":{},"么":{"docs":{},",":{"docs":{},"在":{"docs":{},"并":{"docs":{},"发":{"docs":{},"环":{"docs":{},"境":{"docs":{},"下":{"docs":{},",":{"docs":{},"是":{"docs":{},"否":{"docs":{},"必":{"docs":{},"须":{"docs":{},"加":{"docs":{},"锁":{"docs":{},"?":{"docs":{},"答":{"docs":{},"案":{"docs":{},"是":{"docs":{},"否":{"docs":{},"定":{"docs":{},"的":{"docs":{},"。":{"docs":{},"并":{"docs":{},"非":{"docs":{},"所":{"docs":{},"有":{"docs":{},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},"都":{"docs":{},"需":{"docs":{},"要":{"docs":{},"加":{"docs":{},"锁":{"docs":{},"。":{"docs":{},"适":{"docs":{},"当":{"docs":{},"地":{"docs":{},"降":{"docs":{},"低":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"粒":{"docs":{},"度":{"docs":{},",":{"docs":{},"甚":{"docs":{},"至":{"docs":{},"采":{"docs":{},"用":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"化":{"docs":{},"的":{"docs":{},"设":{"docs":{},"计":{"docs":{},",":{"docs":{},"更":{"docs":{},"能":{"docs":{},"提":{"docs":{},"升":{"docs":{},"并":{"docs":{},"发":{"docs":{},"能":{"docs":{},"力":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"继":{"docs":{},"续":{"docs":{},"执":{"docs":{},"行":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"匹":{"docs":{},"配":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"单":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"名":{"docs":{},"以":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"函":{"docs":{},"数":{"docs":{},"圈":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"度":{"docs":{},"最":{"docs":{},"大":{"docs":{},"值":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"元":{"docs":{},"测":{"docs":{},"试":{"docs":{},"文":{"docs":{},"件":{"docs":{},"名":{"docs":{},"命":{"docs":{},"名":{"docs":{},"规":{"docs":{},"范":{"docs":{},"为":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}},"测":{"docs":{},"文":{"docs":{},"件":{"docs":{},"行":{"docs":{},"数":{"docs":{},"限":{"docs":{},"制":{"docs":{},"是":{"docs":{},"普":{"docs":{},"通":{"docs":{},"文":{"docs":{},"件":{"docs":{},"的":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}}}},"名":{"docs":{},"字":{"docs":{},"应":{"docs":{},"该":{"docs":{},"追":{"docs":{},"求":{"docs":{},"清":{"docs":{},"晰":{"docs":{},"且":{"docs":{},"越":{"docs":{},"来":{"docs":{},"越":{"docs":{},"收":{"docs":{},"敛":{"docs":{},",":{"docs":{},"符":{"docs":{},"合":{"docs":{},"‘":{"docs":{},"单":{"docs":{},"一":{"docs":{},"职":{"docs":{},"责":{"docs":{},"’":{"docs":{},"原":{"docs":{},"则":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"像":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"一":{"docs":{},"样":{"docs":{},",":{"docs":{},"什":{"docs":{},"么":{"docs":{},"都":{"docs":{},"能":{"docs":{},"往":{"docs":{},"里":{"docs":{},"面":{"docs":{},"放":{"docs":{},",":{"docs":{},"越":{"docs":{},"来":{"docs":{},"越":{"docs":{},"膨":{"docs":{},"胀":{"docs":{},",":{"docs":{},"让":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"关":{"docs":{},"系":{"docs":{},"变":{"docs":{},"得":{"docs":{},"复":{"docs":{},"杂":{"docs":{},",":{"docs":{},"不":{"docs":{},"利":{"docs":{},"于":{"docs":{},"阅":{"docs":{},"读":{"docs":{},"、":{"docs":{},"复":{"docs":{},"用":{"docs":{},"、":{"docs":{},"重":{"docs":{},"构":{"docs":{},"。":{"docs":{},"注":{"docs":{},"意":{"docs":{},",":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"/":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{},"s":{"docs":{},"/":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"r":{"docs":{},"y":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"这":{"docs":{},"样":{"docs":{},"的":{"docs":{},"包":{"docs":{},"名":{"docs":{},"是":{"docs":{},"允":{"docs":{},"许":{"docs":{},"的":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"多":{"docs":{},"行":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"定":{"docs":{},"义":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"个":{"docs":{},"相":{"docs":{},"似":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"线":{"docs":{},"程":{"docs":{},"模":{"docs":{},"型":{"docs":{},"改":{"docs":{},"为":{"docs":{},"主":{"docs":{},"从":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"对":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"消":{"docs":{},"息":{"docs":{},"队":{"docs":{},"列":{"docs":{},"锁":{"docs":{},"读":{"docs":{},"取":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}},"好":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},",":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"x":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}},"小":{"docs":{},"写":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"多":{"docs":{},"个":{"docs":{},"单":{"docs":{},"词":{"docs":{},"使":{"docs":{},"用":{"docs":{},"连":{"docs":{},"字":{"docs":{},"符":{"docs":{},"分":{"docs":{},"隔":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}},"汽":{"docs":{},"车":{"docs":{},"结":{"docs":{},"构":{"docs":{},"申":{"docs":{},"明":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"时":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}},"并":{"docs":{},"不":{"docs":{},"总":{"docs":{},"是":{"docs":{},"产":{"docs":{},"生":{"docs":{},"一":{"docs":{},"个":{"docs":{},"新":{"docs":{},"的":{"docs":{},"日":{"docs":{},"历":{"docs":{},"日":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"使":{"docs":{},"用":{"docs":{},"`":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"`":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}},"用":{"docs":{},"于":{"docs":{},"添":{"docs":{},"加":{"docs":{},"时":{"docs":{},"间":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"取":{"docs":{},"决":{"docs":{},"于":{"docs":{},"意":{"docs":{},"图":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"我":{"docs":{},"们":{"docs":{},"想":{"docs":{},"要":{"docs":{},"下":{"docs":{},"一":{"docs":{},"个":{"docs":{},"日":{"docs":{},"历":{"docs":{},"日":{"docs":{},"(":{"docs":{},"当":{"docs":{},"前":{"docs":{},"天":{"docs":{},"的":{"docs":{},"下":{"docs":{},"一":{"docs":{},"天":{"docs":{},")":{"docs":{},"的":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"时":{"docs":{},"间":{"docs":{},"点":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"好":{"docs":{},"过":{"docs":{},"引":{"docs":{},"用":{"docs":{},",":{"docs":{},"什":{"docs":{},"么":{"docs":{},"意":{"docs":{},"思":{"docs":{},"呢":{"docs":{},",":{"docs":{},"就":{"docs":{},"是":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"使":{"docs":{},"用":{"docs":{},"栈":{"docs":{},"变":{"docs":{},"量":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"堆":{"docs":{},"变":{"docs":{},"量":{"docs":{},"。":{"docs":{},"下":{"docs":{},"面":{"docs":{},"举":{"docs":{},"一":{"docs":{},"个":{"docs":{},"反":{"docs":{},"常":{"docs":{},"识":{"docs":{},"的":{"docs":{},"例":{"docs":{},"子":{"docs":{},",":{"docs":{},"来":{"docs":{},"证":{"docs":{},"明":{"docs":{},"小":{"docs":{},"的":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"比":{"docs":{},"在":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"创":{"docs":{},"建":{"docs":{},"引":{"docs":{},"用":{"docs":{},"变":{"docs":{},"量":{"docs":{},"要":{"docs":{},"好":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"常":{"docs":{},"量":{"docs":{},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"推":{"docs":{},"荐":{"docs":{},"以":{"docs":{},"类":{"docs":{},"名":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"英":{"docs":{},"文":{"docs":{},"首":{"docs":{},"字":{"docs":{},"母":{"docs":{},"的":{"docs":{},"小":{"docs":{},"写":{"docs":{},"作":{"docs":{},"为":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"的":{"docs":{},"命":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}},"方":{"docs":{},"法":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"中":{"docs":{},"没":{"docs":{},"有":{"docs":{},"使":{"docs":{},"用":{"docs":{},"值":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}},"是":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}},"支":{"docs":{},"持":{"docs":{},"将":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"来":{"docs":{},"获":{"docs":{},"取":{"docs":{},"和":{"docs":{},"放":{"docs":{},"回":{"docs":{},"池":{"docs":{},"子":{"docs":{},"中":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}},"释":{"docs":{},"放":{"docs":{},"锁":{"docs":{},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}},"实":{"docs":{},"例":{"docs":{},"化":{"docs":{},"具":{"docs":{},"有":{"docs":{},"给":{"docs":{},"定":{"docs":{},"容":{"docs":{},"量":{"docs":{},"的":{"docs":{},"池":{"docs":{},",":{"docs":{},"如":{"docs":{},"下":{"docs":{},"所":{"docs":{},"示":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}},"对":{"docs":{},"资":{"docs":{},"源":{"docs":{},"进":{"docs":{},"行":{"docs":{},"上":{"docs":{},"锁":{"docs":{},",":{"docs":{},"在":{"docs":{},"访":{"docs":{},"问":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"后":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}},"获":{"docs":{},"得":{"docs":{},"锁":{"docs":{},"后":{"docs":{},",":{"docs":{},"其":{"docs":{},"他":{"docs":{},"请":{"docs":{},"求":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},"都":{"docs":{},"会":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"在":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"直":{"docs":{},"到":{"docs":{},"锁":{"docs":{},"被":{"docs":{},"释":{"docs":{},"放":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}},"在":{"docs":{},"结":{"docs":{},"束":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"时":{"docs":{},",":{"docs":{},"会":{"docs":{},"重":{"docs":{},"新":{"docs":{},"给":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}},"时":{"docs":{},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"加":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"式":{"docs":{},"一":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"二":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"传":{"docs":{},"递":{"docs":{},"后":{"docs":{},",":{"docs":{},"再":{"docs":{},"加":{"docs":{},"上":{"docs":{},"其":{"docs":{},"长":{"docs":{},"度":{"docs":{},"不":{"docs":{},"可":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"到":{"docs":{},"性":{"docs":{},"能":{"docs":{},"我":{"docs":{},"们":{"docs":{},"一":{"docs":{},"般":{"docs":{},"很":{"docs":{},"少":{"docs":{},"使":{"docs":{},"用":{"docs":{},"它":{"docs":{},"。":{"docs":{},"实":{"docs":{},"际":{"docs":{},"上":{"docs":{},",":{"docs":{},"凡":{"docs":{},"事":{"docs":{},"无":{"docs":{},"绝":{"docs":{},"对":{"docs":{},"。":{"docs":{},"有":{"docs":{},"时":{"docs":{},"使":{"docs":{},"用":{"docs":{},"数":{"docs":{},"组":{"docs":{},"进":{"docs":{},"行":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"传":{"docs":{},"递":{"docs":{},",":{"docs":{},"比":{"docs":{},"使":{"docs":{},"用":{"docs":{},"切":{"docs":{},"片":{"docs":{},"要":{"docs":{},"好":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"明":{"docs":{},"文":{"docs":{},"传":{"docs":{},"输":{"docs":{},"协":{"docs":{},"议":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"确":{"docs":{},"地":{"docs":{},"告":{"docs":{},"诉":{"docs":{},"我":{"docs":{},"们":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"并":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"知":{"docs":{},"道":{"docs":{},"变":{"docs":{},"量":{"docs":{},"是":{"docs":{},"分":{"docs":{},"配":{"docs":{},"在":{"docs":{},"栈":{"docs":{},"(":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},")":{"docs":{},"上":{"docs":{},"还":{"docs":{},"是":{"docs":{},"堆":{"docs":{},"(":{"docs":{},"h":{"docs":{},"e":{"docs":{},"a":{"docs":{},"p":{"docs":{},")":{"docs":{},"上":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"更":{"docs":{},"多":{"docs":{},"可":{"docs":{},"参":{"docs":{},"考":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"关":{"docs":{},"于":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"未":{"docs":{},"导":{"docs":{},"出":{"docs":{},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"常":{"docs":{},"量":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"概":{"docs":{},"述":{"docs":{},"了":{"docs":{},"几":{"docs":{},"个":{"docs":{},"内":{"docs":{},"置":{"docs":{},"的":{"docs":{},",":{"docs":{},"不":{"docs":{},"应":{"docs":{},"在":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}},"比":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}},"如":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"多":{"docs":{},"个":{"docs":{},"班":{"docs":{},"级":{"docs":{},"下":{"docs":{},"的":{"docs":{},"学":{"docs":{},"生":{"docs":{},"i":{"docs":{},"d":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}},"下":{"docs":{},"面":{"docs":{},"将":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"的":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}}}},"现":{"docs":{},"在":{"docs":{},"是":{"docs":{},"明":{"docs":{},"确":{"docs":{},"的":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"一":{"docs":{},"个":{"docs":{},"拷":{"docs":{},"贝":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}},"等":{"docs":{},"单":{"docs":{},"词":{"docs":{},"开":{"docs":{},"头":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},")":{"docs":{},"进":{"docs":{},"行":{"docs":{},"操":{"docs":{},"作":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"很":{"docs":{},"容":{"docs":{},"易":{"docs":{},"忘":{"docs":{},"记":{"docs":{},"使":{"docs":{},"用":{"docs":{},"原":{"docs":{},"子":{"docs":{},"操":{"docs":{},"作":{"docs":{},"来":{"docs":{},"读":{"docs":{},"取":{"docs":{},"或":{"docs":{},"修":{"docs":{},"改":{"docs":{},"变":{"docs":{},"量":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"操":{"docs":{},"作":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{},"开":{"docs":{},"源":{"docs":{},"库":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}},"于":{"docs":{},"其":{"docs":{},"中":{"docs":{},"的":{"docs":{},"最":{"docs":{},"大":{"docs":{},"值":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}},"构":{"docs":{},"成":{"docs":{},"数":{"docs":{},"组":{"docs":{},"的":{"docs":{},"元":{"docs":{},"素":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"系":{"docs":{},"数":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}},"待":{"docs":{},"下":{"docs":{},"次":{"docs":{},"被":{"docs":{},"唤":{"docs":{},"醒":{"docs":{},"。":{"docs":{},"为":{"docs":{},"了":{"docs":{},"保":{"docs":{},"险":{"docs":{},"起":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}},"通":{"docs":{},"知":{"docs":{},",":{"docs":{},"直":{"docs":{},"到":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},",":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"另":{"docs":{},"一":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}},"缩":{"docs":{},"略":{"docs":{},"语":{"docs":{},"要":{"docs":{},"么":{"docs":{},"全":{"docs":{},"小":{"docs":{},"写":{"docs":{},",":{"docs":{},"要":{"docs":{},"么":{"docs":{},"全":{"docs":{},"大":{"docs":{},"写":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}},"若":{"docs":{},"量":{"docs":{},"类":{"docs":{},"型":{"docs":{},"为":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"要":{"docs":{},"好":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},",":{"docs":{},"i":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"比":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}},"么":{"docs":{},"是":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":1.6666666666666665}}}}},"详":{"docs":{},"细":{"docs":{},"的":{"docs":{},"专":{"docs":{},"有":{"docs":{},"名":{"docs":{},"词":{"docs":{},"列":{"docs":{},"表":{"docs":{},"可":{"docs":{},"参":{"docs":{},"考":{"docs":{},"这":{"docs":{},"里":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}},"里":{"docs":{},"面":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"下":{"docs":{},"划":{"docs":{},"线":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"装":{"docs":{},"的":{"docs":{},"对":{"docs":{},"象":{"docs":{},"可":{"docs":{},"以":{"docs":{},"被":{"docs":{},"无":{"docs":{},"通":{"docs":{},"知":{"docs":{},"地":{"docs":{},"被":{"docs":{},"回":{"docs":{},"收":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}},"量":{"docs":{},"名":{"docs":{},"不":{"docs":{},"应":{"docs":{},"该":{"docs":{},"以":{"docs":{},"类":{"docs":{},"型":{"docs":{},"作":{"docs":{},"为":{"docs":{},"前":{"docs":{},"缀":{"docs":{},"/":{"docs":{},"后":{"docs":{},"缀":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}},"应":{"docs":{},"该":{"docs":{},"是":{"docs":{},"名":{"docs":{},"词":{"docs":{},",":{"docs":{},"进":{"docs":{},"行":{"docs":{},"时":{"docs":{},"和":{"docs":{},"过":{"docs":{},"去":{"docs":{},"式":{"docs":{},"可":{"docs":{},"以":{"docs":{},"做":{"docs":{},"形":{"docs":{},"容":{"docs":{},"词":{"docs":{},",":{"docs":{},"成":{"docs":{},"为":{"docs":{},"量":{"docs":{},"名":{"docs":{},"的":{"docs":{},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"遵":{"docs":{},"循":{"docs":{},"驼":{"docs":{},"峰":{"docs":{},"式":{"docs":{},",":{"docs":{},"根":{"docs":{},"据":{"docs":{},"是":{"docs":{},"否":{"docs":{},"导":{"docs":{},"出":{"docs":{},"决":{"docs":{},"定":{"docs":{},"首":{"docs":{},"字":{"docs":{},"母":{"docs":{},"大":{"docs":{},"小":{"docs":{},"写":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},";":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"业":{"docs":{},"务":{"docs":{},"代":{"docs":{},"码":{"docs":{},"禁":{"docs":{},"止":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}},"则":{"docs":{},"需":{"docs":{},"要":{"docs":{},"以":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"不":{"docs":{},"存":{"docs":{},"在":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}},"是":{"docs":{},"在":{"docs":{},"对":{"docs":{},"象":{"docs":{},"使":{"docs":{},"用":{"docs":{},"完":{"docs":{},"毕":{"docs":{},"后":{"docs":{},",":{"docs":{},"放":{"docs":{},"回":{"docs":{},"到":{"docs":{},"对":{"docs":{},"象":{"docs":{},"池":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}},"阻":{"docs":{},"塞":{"docs":{},"等":{"docs":{},"待":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"判":{"docs":{},"断":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"是":{"docs":{},"否":{"docs":{},"为":{"docs":{},"空":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"更":{"docs":{},"加":{"docs":{},"直":{"docs":{},"观":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}},"条":{"docs":{},"件":{"docs":{},"较":{"docs":{},"为":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"时":{"docs":{},",":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"封":{"docs":{},"装":{"docs":{},"成":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}},"是":{"docs":{},"否":{"docs":{},"有":{"docs":{},"错":{"docs":{},"误":{"docs":{},"发":{"docs":{},"生":{"docs":{},"之":{"docs":{},"后":{"docs":{},",":{"docs":{},"再":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}},"又":{"docs":{},"如":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"没":{"docs":{},"有":{"docs":{},"明":{"docs":{},"确":{"docs":{},"说":{"docs":{},"明":{"docs":{},",":{"docs":{},"会":{"docs":{},"产":{"docs":{},"生":{"docs":{},"模":{"docs":{},"糊":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"文":{"docs":{},"档":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}},"循":{"docs":{},"环":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"不":{"docs":{},"要":{"docs":{},"存":{"docs":{},"储":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}},"指":{"docs":{},"向":{"docs":{},"的":{"docs":{},"是":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"赋":{"docs":{},"值":{"docs":{},"给":{"docs":{},"一":{"docs":{},"个":{"docs":{},"同":{"docs":{},"名":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"变":{"docs":{},"量":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"来":{"docs":{},"达":{"docs":{},"到":{"docs":{},"取":{"docs":{},"不":{"docs":{},"同":{"docs":{},"地":{"docs":{},"址":{"docs":{},"的":{"docs":{},"目":{"docs":{},"的":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"中":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":3.3410256410256407}}}}},"多":{"docs":{},"次":{"docs":{},"尝":{"docs":{},"试":{"docs":{},",":{"docs":{},"直":{"docs":{},"至":{"docs":{},"成":{"docs":{},"功":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}},"把":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"判":{"docs":{},"断":{"docs":{},"放":{"docs":{},"前":{"docs":{},"面":{"docs":{},",":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"的":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"判":{"docs":{},"断":{"docs":{},"放":{"docs":{},"后":{"docs":{},"面":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}},"替":{"docs":{},"换":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"为":{"docs":{},"指":{"docs":{},"针":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}},"队":{"docs":{},"列":{"docs":{},"里":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"这":{"docs":{},"增":{"docs":{},"加":{"docs":{},"了":{"docs":{},"跳":{"docs":{},"过":{"docs":{},"重":{"docs":{},"要":{"docs":{},"清":{"docs":{},"理":{"docs":{},"任":{"docs":{},"务":{"docs":{},"的":{"docs":{},"风":{"docs":{},"险":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}}},"从":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"函":{"docs":{},"数":{"docs":{},"名":{"docs":{},"开":{"docs":{},"始":{"docs":{},"算":{"docs":{},"第":{"docs":{},"一":{"docs":{},"层":{"docs":{},",":{"docs":{},"当":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"嵌":{"docs":{},"套":{"docs":{},"深":{"docs":{},"度":{"docs":{},"超":{"docs":{},"过":{"4":{"docs":{},"层":{"docs":{},",":{"docs":{},"往":{"docs":{},"往":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"圈":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"度":{"docs":{},"过":{"docs":{},"高":{"docs":{},",":{"docs":{},"函":{"docs":{},"数":{"docs":{},"变":{"docs":{},"得":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"不":{"docs":{},"可":{"docs":{},"读":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"拆":{"docs":{},"分":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"来":{"docs":{},"减":{"docs":{},"少":{"docs":{},"嵌":{"docs":{},"套":{"docs":{},"深":{"docs":{},"度":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}}}}}},"前":{"docs":{},"文":{"docs":{},"可":{"docs":{},"知":{"docs":{},",":{"docs":{},"可":{"docs":{},"取":{"docs":{},"址":{"docs":{},"的":{"docs":{},"值":{"docs":{},"可":{"docs":{},"以":{"docs":{},"调":{"docs":{},"用":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"为":{"docs":{},"指":{"docs":{},"针":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},",":{"docs":{},"但":{"docs":{},"这":{"docs":{},"里":{"docs":{},"为":{"docs":{},"何":{"docs":{},"不":{"docs":{},"能":{"docs":{},"将":{"docs":{},"值":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"切":{"docs":{},"片":{"docs":{},"中":{"docs":{},"过":{"docs":{},"滤":{"docs":{},"指":{"docs":{},"定":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{},"注":{"docs":{},"意":{"docs":{},":":{"docs":{},"不":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}},"结":{"docs":{},"构":{"docs":{},"化":{"docs":{},"二":{"docs":{},"进":{"docs":{},"制":{"docs":{},"数":{"docs":{},"据":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}},"果":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"出":{"docs":{},",":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},".":{"docs":{},"j":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},"、":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"、":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"和":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"[":{"docs":{},"]":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"性":{"docs":{},"能":{"docs":{},"出":{"docs":{},"发":{"docs":{},",":{"docs":{},"兼":{"docs":{},"顾":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"便":{"docs":{},"捷":{"docs":{},"与":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"读":{"docs":{},"性":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"待":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"的":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"不":{"docs":{},"涉":{"docs":{},"及":{"docs":{},"类":{"docs":{},"型":{"docs":{},"转":{"docs":{},"换":{"docs":{},"且":{"docs":{},"数":{"docs":{},"量":{"docs":{},"较":{"docs":{},"少":{"docs":{},"(":{"docs":{},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},")":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"基":{"docs":{},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},"来":{"docs":{},"看":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"最":{"docs":{},"佳":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{},"移":{"docs":{},"位":{"docs":{},"法":{"docs":{},",":{"docs":{},"其":{"docs":{},"中":{"docs":{},"又":{"docs":{},"属":{"docs":{},"第":{"docs":{},"一":{"docs":{},"种":{"docs":{},"实":{"docs":{},"现":{"docs":{},"方":{"docs":{},"式":{"docs":{},"较":{"docs":{},"佳":{"docs":{},"。":{"docs":{},"性":{"docs":{},"能":{"docs":{},"最":{"docs":{},"差":{"docs":{},"的":{"docs":{},"也":{"docs":{},"是":{"docs":{},"最":{"docs":{},"常":{"docs":{},"用":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{},"截":{"docs":{},"取":{"docs":{},"法":{"docs":{},"。":{"docs":{},"随":{"docs":{},"着":{"docs":{},"切":{"docs":{},"片":{"docs":{},"长":{"docs":{},"度":{"docs":{},"的":{"docs":{},"增":{"docs":{},"加":{"docs":{},",":{"docs":{},"上":{"docs":{},"面":{"docs":{},"四":{"docs":{},"种":{"docs":{},"删":{"docs":{},"除":{"docs":{},"方":{"docs":{},"式":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"会":{"docs":{},"愈":{"docs":{},"加":{"docs":{},"明":{"docs":{},"显":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"这":{"docs":{},"个":{"docs":{},"例":{"docs":{},"子":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"到":{"docs":{},",":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"对":{"docs":{},"实":{"docs":{},"现":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"原":{"docs":{},"子":{"docs":{},"性":{"docs":{},"操":{"docs":{},"作":{"docs":{},"也":{"docs":{},"是":{"docs":{},"有":{"docs":{},"好":{"docs":{},"处":{"docs":{},"的":{"docs":{},"。":{"docs":{},"每":{"docs":{},"次":{"docs":{},"内":{"docs":{},"存":{"docs":{},"访":{"docs":{},"问":{"docs":{},"是":{"docs":{},"原":{"docs":{},"子":{"docs":{},"的":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"大":{"docs":{},"小":{"docs":{},"不":{"docs":{},"超":{"docs":{},"过":{"docs":{},"字":{"docs":{},"长":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"后":{"docs":{},",":{"docs":{},"对":{"docs":{},"该":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"访":{"docs":{},"问":{"docs":{},"就":{"docs":{},"是":{"docs":{},"原":{"docs":{},"子":{"docs":{},"的":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"特":{"docs":{},"性":{"docs":{},"在":{"docs":{},"并":{"docs":{},"发":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},"至":{"docs":{},"关":{"docs":{},"重":{"docs":{},"要":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"出":{"docs":{},",":{"docs":{},"对":{"docs":{},"数":{"docs":{},"组":{"docs":{},"的":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"性":{"docs":{},"能":{"docs":{},"却":{"docs":{},"比":{"docs":{},"使":{"docs":{},"用":{"docs":{},"切":{"docs":{},"片":{"docs":{},"要":{"docs":{},"好":{"docs":{},"。":{"docs":{},"为":{"docs":{},"什":{"docs":{},"么":{"docs":{},"会":{"docs":{},"这":{"docs":{},"样":{"docs":{},"呢":{"docs":{},"?":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"输":{"docs":{},"出":{"docs":{},"结":{"docs":{},"果":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"到":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"变":{"docs":{},"量":{"docs":{},"(":{"docs":{},"非":{"docs":{},"常":{"docs":{},"量":{"docs":{},")":{"docs":{},"来":{"docs":{},"指":{"docs":{},"定":{"docs":{},"切":{"docs":{},"片":{"docs":{},"的":{"docs":{},"容":{"docs":{},"量":{"docs":{},",":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"切":{"docs":{},"片":{"docs":{},"发":{"docs":{},"生":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"影":{"docs":{},"响":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{},"指":{"docs":{},"定":{"docs":{},"切":{"docs":{},"片":{"docs":{},"的":{"docs":{},"长":{"docs":{},"度":{"docs":{},"时":{"docs":{},"也":{"docs":{},"是":{"docs":{},"一":{"docs":{},"样":{"docs":{},"的":{"docs":{},",":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"使":{"docs":{},"用":{"docs":{},"常":{"docs":{},"量":{"docs":{},"或":{"docs":{},"数":{"docs":{},"值":{"docs":{},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"日":{"docs":{},"志":{"docs":{},"中":{"docs":{},"可":{"docs":{},"以":{"docs":{},"很":{"docs":{},"容":{"docs":{},"易":{"docs":{},"看":{"docs":{},"到":{"docs":{},",":{"docs":{},"每":{"docs":{},"秒":{"docs":{},"钟":{"docs":{},"只":{"docs":{},"并":{"docs":{},"发":{"docs":{},"执":{"docs":{},"行":{"docs":{},"了":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}},"字":{"docs":{},"段":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"等":{"docs":{},"待":{"docs":{},"队":{"docs":{},"列":{"docs":{},"中":{"docs":{},"按":{"docs":{},"照":{"docs":{},"顺":{"docs":{},"序":{"docs":{},"唤":{"docs":{},"醒":{"docs":{},",":{"docs":{},"先":{"docs":{},"进":{"docs":{},"入":{"docs":{},"等":{"docs":{},"待":{"docs":{},"队":{"docs":{},"列":{"docs":{},",":{"docs":{},"先":{"docs":{},"被":{"docs":{},"唤":{"docs":{},"醒":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}},"入":{"docs":{},"参":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"&":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"成":{"docs":{},"员":{"docs":{},"函":{"docs":{},"数":{"docs":{},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"减":{"docs":{},"少":{"docs":{},"嵌":{"docs":{},"套":{"docs":{},"(":{"docs":{},"圈":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"度":{"docs":{},")":{"docs":{},"魔":{"docs":{},"法":{"docs":{},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{},"函":{"docs":{},"数":{"docs":{},"分":{"docs":{},"组":{"docs":{},"与":{"docs":{},"顺":{"docs":{},"序":{"docs":{},"入":{"docs":{},"参":{"docs":{},"&":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"和":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"个":{"docs":{},"数":{"docs":{},"均":{"docs":{},"不":{"docs":{},"能":{"docs":{},"超":{"docs":{},"过":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}},"均":{"docs":{},"以":{"docs":{},"小":{"docs":{},"写":{"docs":{},"字":{"docs":{},"母":{"docs":{},"开":{"docs":{},"头":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"顺":{"docs":{},"序":{"docs":{},"根":{"docs":{},"据":{"docs":{},"关":{"docs":{},"联":{"docs":{},"性":{"docs":{},"排":{"docs":{},"在":{"docs":{},"一":{"docs":{},"起":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}},"减":{"docs":{},"少":{"docs":{},"嵌":{"docs":{},"套":{"docs":{},"(":{"docs":{},"圈":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"度":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{},"可":{"docs":{},"参":{"docs":{},"考":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{},"包":{"docs":{},"的":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}},"使":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"的":{"docs":{},"抽":{"docs":{},"象":{"docs":{},"列":{"docs":{},"表":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}},"多":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"同":{"docs":{},"一":{"docs":{},"文":{"docs":{},"件":{"docs":{},"中":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"应":{"docs":{},"按":{"docs":{},"接":{"docs":{},"收":{"docs":{},"者":{"docs":{},"分":{"docs":{},"组":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}},"层":{"docs":{},"级":{"docs":{},"的":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"细":{"docs":{},"节":{"docs":{},"不":{"docs":{},"要":{"docs":{},"拆":{"docs":{},"分":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}},"时":{"docs":{},"迭":{"docs":{},"代":{"docs":{},"下":{"docs":{},"标":{"docs":{},"和":{"docs":{},"值":{"docs":{},",":{"docs":{},"则":{"docs":{},"需":{"docs":{},"要":{"docs":{},"将":{"docs":{},"切":{"docs":{},"片":{"docs":{},"/":{"docs":{},"数":{"docs":{},"组":{"docs":{},"的":{"docs":{},"元":{"docs":{},"素":{"docs":{},"改":{"docs":{},"为":{"docs":{},"指":{"docs":{},"针":{"docs":{},",":{"docs":{},"才":{"docs":{},"能":{"docs":{},"不":{"docs":{},"影":{"docs":{},"响":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"圆":{"docs":{},"周":{"docs":{},"率":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}},"嵌":{"docs":{},"套":{"docs":{},"深":{"docs":{},"度":{"docs":{},"不":{"docs":{},"能":{"docs":{},"超":{"docs":{},"过":{"4":{"docs":{},"层":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}},"docs":{}}}}}}}},"入":{"docs":{},"到":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"中":{"docs":{},"。":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}},"类":{"docs":{},"型":{"docs":{},"会":{"docs":{},"泄":{"docs":{},"漏":{"docs":{},"实":{"docs":{},"现":{"docs":{},"细":{"docs":{},"节":{"docs":{},"、":{"docs":{},"禁":{"docs":{},"止":{"docs":{},"类":{"docs":{},"型":{"docs":{},"演":{"docs":{},"化":{"docs":{},"和":{"docs":{},"产":{"docs":{},"生":{"docs":{},"模":{"docs":{},"糊":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"文":{"docs":{},"档":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"建":{"docs":{},"议":{"docs":{},"调":{"docs":{},"整":{"docs":{},"为":{"docs":{},"这":{"docs":{},"样":{"docs":{},":":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}},"成":{"docs":{},"员":{"docs":{},"函":{"docs":{},"数":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}},"本":{"docs":{},",":{"docs":{},"可":{"docs":{},"提":{"docs":{},"高":{"docs":{},"程":{"docs":{},"序":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}},"批":{"docs":{},"量":{"docs":{},"查":{"docs":{},"询":{"docs":{},"函":{"docs":{},"数":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"获":{"docs":{},"取":{"docs":{},"用":{"docs":{},"户":{"docs":{},"信":{"docs":{},"息":{"docs":{},"(":{"docs":{},"允":{"docs":{},"许":{"docs":{},"部":{"docs":{},"分":{"docs":{},"失":{"docs":{},"败":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}},"需":{"docs":{},"全":{"docs":{},"部":{"docs":{},"成":{"docs":{},"功":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}},"按":{"docs":{},"照":{"docs":{},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"规":{"docs":{},"则":{"docs":{},",":{"docs":{},"下":{"docs":{},"面":{"docs":{},"给":{"docs":{},"出":{"docs":{},"好":{"docs":{},"坏":{"docs":{},"文":{"docs":{},"件":{"docs":{},"内":{"docs":{},"容":{"docs":{},"布":{"docs":{},"局":{"docs":{},"示":{"docs":{},"例":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}},"条":{"docs":{},"件":{"docs":{},"不":{"docs":{},"满":{"docs":{},"足":{"docs":{},"或":{"docs":{},"出":{"docs":{},"现":{"docs":{},"错":{"docs":{},"误":{"docs":{},"应":{"docs":{},"尽":{"docs":{},"早":{"docs":{},"返":{"docs":{},"回":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}},"查":{"docs":{},"询":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"值":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"出":{"docs":{},"现":{"docs":{},"部":{"docs":{},"分":{"docs":{},"失":{"docs":{},"败":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"如":{"docs":{},"某":{"docs":{},"个":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}},"次":{"docs":{},",":{"docs":{},"则":{"docs":{},"禁":{"docs":{},"止":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"用":{"docs":{},"一":{"docs":{},"个":{"docs":{},"有":{"docs":{},"名":{"docs":{},"称":{"docs":{},"的":{"docs":{},"常":{"docs":{},"量":{"docs":{},"代":{"docs":{},"替":{"docs":{},",":{"docs":{},"可":{"docs":{},"读":{"docs":{},"性":{"docs":{},"更":{"docs":{},"好":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}},"正":{"docs":{},"常":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"不":{"docs":{},"应":{"docs":{},"该":{"docs":{},"在":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}},"添":{"docs":{},"加":{"docs":{},"成":{"docs":{},"功":{"docs":{},"或":{"docs":{},"出":{"docs":{},"错":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"生":{"docs":{},"成":{"docs":{},"新":{"docs":{},"错":{"docs":{},"误":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}},";":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}},"将":{"docs":{},"实":{"docs":{},"体":{"docs":{},"添":{"docs":{},"加":{"docs":{},"到":{"docs":{},"列":{"docs":{},"表":{"docs":{},"中":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.01775147928994083}}}}}}}}}}}}}},"示":{"docs":{},"例":{"docs":{},",":{"docs":{},"实":{"docs":{},"际":{"docs":{},"不":{"docs":{},"要":{"docs":{},"这":{"docs":{},"么":{"docs":{},"查":{"docs":{},"询":{"docs":{},",":{"docs":{},"防":{"docs":{},"止":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}},"禁":{"docs":{},"止":{"docs":{},"在":{"docs":{},"循":{"docs":{},"环":{"docs":{},"中":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}},"类":{"docs":{},"型":{"docs":{},"演":{"docs":{},"化":{"docs":{},"指":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}},"继":{"docs":{},"续":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"f":{"docs":{},"i":{"docs":{},"e":{"docs":{},"l":{"docs":{},"d":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}},"看":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"表":{"docs":{},"示":{"docs":{},"执":{"docs":{},"行":{"docs":{},"是":{"docs":{},"否":{"docs":{},"成":{"docs":{},"功":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"用":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"状":{"docs":{},"态":{"docs":{},"的":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"应":{"docs":{},"该":{"docs":{},"放":{"docs":{},"在":{"docs":{},"最":{"docs":{},"后":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}},"连":{"docs":{},"续":{"docs":{},"的":{"docs":{},"非":{"docs":{},"类":{"docs":{},"型":{"docs":{},"化":{"docs":{},"整":{"docs":{},"数":{"docs":{},"常":{"docs":{},"量":{"docs":{},",":{"docs":{},"它":{"docs":{},"的":{"docs":{},"值":{"docs":{},"是":{"docs":{},"对":{"docs":{},"应":{"docs":{},"常":{"docs":{},"量":{"docs":{},"的":{"docs":{},"下":{"docs":{},"标":{"docs":{},"(":{"docs":{},"从":{"docs":{},"零":{"docs":{},"开":{"docs":{},"始":{"docs":{},")":{"docs":{},",":{"docs":{},"它":{"docs":{},"可":{"docs":{},"用":{"docs":{},"于":{"docs":{},"构":{"docs":{},"造":{"docs":{},"一":{"docs":{},"组":{"docs":{},"相":{"docs":{},"关":{"docs":{},"常":{"docs":{},"数":{"docs":{},":":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"读":{"docs":{},"写":{"docs":{},"一":{"docs":{},"致":{"docs":{},"(":{"docs":{},"各":{"docs":{},"占":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"多":{"docs":{},"写":{"docs":{},"少":{"docs":{},"(":{"docs":{},"读":{"docs":{},"占":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"少":{"docs":{},"写":{"docs":{},"多":{"docs":{},"(":{"docs":{},"读":{"docs":{},"占":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}},"广":{"docs":{},"播":{"docs":{},"通":{"docs":{},"知":{"docs":{},",":{"docs":{},"其":{"docs":{},"他":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"驱":{"docs":{},"动":{"docs":{},"测":{"docs":{},"试":{"docs":{},".":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}},"达":{"docs":{},"时":{"docs":{},"间":{"docs":{},"段":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"瞬":{"docs":{},"时":{"docs":{},"时":{"docs":{},"间":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}},"释":{"docs":{},"放":{"docs":{},"资":{"docs":{},"源":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":3.333333333333333}},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}},",":{"docs":{},"诸":{"docs":{},"如":{"docs":{},"文":{"docs":{},"件":{"docs":{},"和":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125}}}}}}}}}}}},"写":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"读":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}},"除":{"docs":{},"了":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"包":{"docs":{},"的":{"docs":{},"主":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"文":{"docs":{},"件":{"docs":{},"中":{"docs":{},"内":{"docs":{},"容":{"docs":{},"允":{"docs":{},"许":{"docs":{},"导":{"docs":{},"出":{"docs":{},",":{"docs":{},"包":{"docs":{},"内":{"docs":{},"的":{"docs":{},"辅":{"docs":{},"助":{"docs":{},"函":{"docs":{},"数":{"docs":{},"都":{"docs":{},"应":{"docs":{},"该":{"docs":{},"是":{"docs":{},"非":{"docs":{},"导":{"docs":{},"出":{"docs":{},"的":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"魔":{"docs":{},"法":{"docs":{},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}},"倍":{"docs":{},"(":{"1":{"6":{"0":{"0":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"分":{"docs":{},"组":{"docs":{},"等":{"docs":{},"其":{"docs":{},"他":{"docs":{},"规":{"docs":{},"范":{"docs":{},"细":{"docs":{},"节":{"docs":{},"和":{"docs":{},"普":{"docs":{},"通":{"docs":{},"文":{"docs":{},"件":{"docs":{},"保":{"docs":{},"持":{"docs":{},"一":{"docs":{},"致":{"docs":{},"。":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}}}}}}}},"支":{"docs":{},"时":{"docs":{},",":{"docs":{},"很":{"docs":{},"容":{"docs":{},"易":{"docs":{},"遗":{"docs":{},"忘":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125}}}}}}}}}},"钟":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}},"出":{"docs":{},"现":{"docs":{},"状":{"docs":{},"态":{"docs":{},"/":{"docs":{},"类":{"docs":{},"型":{"docs":{},"等":{"docs":{},"字":{"docs":{},"眼":{"docs":{},"时":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"枚":{"docs":{},"举":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}},"启":{"docs":{},"动":{"docs":{},"的":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"复":{"docs":{},"杂":{"docs":{},"的":{"docs":{},"执":{"docs":{},"行":{"docs":{},"/":{"docs":{},"错":{"docs":{},"误":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"定":{"docs":{},"义":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"保":{"docs":{},"存":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},"对":{"docs":{},"象":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":5}},",":{"docs":{},"每":{"docs":{},"次":{"docs":{},"操":{"docs":{},"作":{"docs":{},"不":{"docs":{},"再":{"docs":{},"有":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}},"意":{"docs":{},"义":{"docs":{},"不":{"docs":{},"明":{"docs":{},"的":{"docs":{},"成":{"docs":{},"员":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"定":{"docs":{},"义":{"docs":{},"类":{"docs":{},"型":{"docs":{},"描":{"docs":{},"述":{"docs":{},"作":{"docs":{},"用":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}},"抛":{"docs":{},"出":{"docs":{},"的":{"docs":{},"异":{"docs":{},"常":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"启":{"docs":{},"动":{"docs":{},"的":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}},"去":{"docs":{},"大":{"docs":{},"段":{"docs":{},"的":{"docs":{},"注":{"docs":{},"释":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"到":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}},"时":{"docs":{},"间":{"docs":{},"类":{"docs":{},"型":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"使":{"docs":{},"用":{"docs":{},"内":{"docs":{},"置":{"docs":{},"定":{"docs":{},"义":{"docs":{},",":{"docs":{},"如":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}},"处":{"docs":{},"理":{"docs":{},"看":{"docs":{},"似":{"docs":{},"简":{"docs":{},"单":{"docs":{},",":{"docs":{},"实":{"docs":{},"则":{"docs":{},"不":{"docs":{},"然":{"docs":{},"。":{"docs":{},"关":{"docs":{},"于":{"docs":{},"时":{"docs":{},"间":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},"假":{"docs":{},"设":{"docs":{},"通":{"docs":{},"常":{"docs":{},"包":{"docs":{},"括":{"docs":{},"以":{"docs":{},"下":{"docs":{},"几":{"docs":{},"点":{"docs":{},":":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"上":{"docs":{},",":{"docs":{},"协":{"docs":{},"程":{"docs":{},"调":{"docs":{},"度":{"docs":{},"也":{"docs":{},"会":{"docs":{},"有":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},",":{"docs":{},"同":{"docs":{},"样":{"docs":{},"的":{"docs":{},",":{"docs":{},"请":{"docs":{},"注":{"docs":{},"意":{"docs":{},"用":{"docs":{},"户":{"docs":{},"对":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"内":{"docs":{},"部":{"docs":{},"状":{"docs":{},"态":{"docs":{},"的":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}}}}}}},"请":{"docs":{},"记":{"docs":{},"住":{"docs":{},"当":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"除":{"docs":{},"非":{"docs":{},"达":{"docs":{},"成":{"docs":{},"一":{"docs":{},"致":{"docs":{},",":{"docs":{},"否":{"docs":{},"则":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}},"甚":{"docs":{},"至":{"docs":{},"在":{"docs":{},"指":{"docs":{},"定":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}},"为":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},"获":{"docs":{},"取":{"docs":{},"的":{"docs":{},"是":{"docs":{},"值":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},",":{"docs":{},"对":{"docs":{},"副":{"docs":{},"本":{"docs":{},"的":{"docs":{},"修":{"docs":{},"改":{"docs":{},",":{"docs":{},"是":{"docs":{},"不":{"docs":{},"会":{"docs":{},"影":{"docs":{},"响":{"docs":{},"到":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}},"传":{"docs":{},"入":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"没":{"docs":{},"有":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}},"自":{"docs":{},"动":{"docs":{},"格":{"docs":{},"式":{"docs":{},"化":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"保":{"docs":{},"证":{"docs":{},"所":{"docs":{},"有":{"docs":{},"的":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}},"说":{"docs":{},"明":{"docs":{},"文":{"docs":{},"档":{"docs":{},",":{"docs":{},"介":{"docs":{},"绍":{"docs":{},"服":{"docs":{},"务":{"docs":{},"功":{"docs":{},"能":{"docs":{},"、":{"docs":{},"使":{"docs":{},"用":{"docs":{},"方":{"docs":{},"法":{"docs":{},"、":{"docs":{},"部":{"docs":{},"署":{"docs":{},"时":{"docs":{},"的":{"docs":{},"限":{"docs":{},"制":{"docs":{},"与":{"docs":{},"要":{"docs":{},"求":{"docs":{},"、":{"docs":{},"基":{"docs":{},"础":{"docs":{},"环":{"docs":{},"境":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"等":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"遇":{"docs":{},"到":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}},"为":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.037037037037037035},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"什":{"docs":{},"么":{"docs":{},"可":{"docs":{},"以":{"docs":{},"这":{"docs":{},"样":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"接":{"docs":{},"口":{"docs":{},"实":{"docs":{},"质":{"docs":{},"上":{"docs":{},"在":{"docs":{},"底":{"docs":{},"层":{"docs":{},"用":{"docs":{},"两":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"表":{"docs":{},"示":{"docs":{},":":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}}}}}}},"常":{"docs":{},"识":{"docs":{},"性":{"docs":{},"的":{"docs":{},"认":{"docs":{},"知":{"docs":{},"是":{"docs":{},"错":{"docs":{},"误":{"docs":{},"的":{"docs":{},"呢":{"docs":{},"?":{"docs":{},"因":{"docs":{},"为":{"docs":{},"地":{"docs":{},"球":{"docs":{},"自":{"docs":{},"转":{"docs":{},"的":{"docs":{},"不":{"docs":{},"均":{"docs":{},"匀":{"docs":{},"性":{"docs":{},"和":{"docs":{},"长":{"docs":{},"期":{"docs":{},"变":{"docs":{},"慢":{"docs":{},"性":{"docs":{},",":{"docs":{},"会":{"docs":{},"存":{"docs":{},"在":{"docs":{},"时":{"docs":{},"间":{"docs":{},"修":{"docs":{},"正":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"闰":{"docs":{},"秒":{"docs":{},",":{"docs":{},"闰":{"docs":{},"年":{"docs":{},"等":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"性":{"docs":{},"能":{"docs":{},"上":{"docs":{},"会":{"docs":{},"有":{"docs":{},"两":{"docs":{},"倍":{"docs":{},"多":{"docs":{},"的":{"docs":{},"差":{"docs":{},"距":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"会":{"docs":{},"对":{"docs":{},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"测":{"docs":{},"试":{"docs":{},"代":{"docs":{},"码":{"docs":{},"进":{"docs":{},"行":{"docs":{},"优":{"docs":{},"化":{"docs":{},"呢":{"docs":{},"?":{"docs":{},"因":{"docs":{},"为":{"docs":{},"代":{"docs":{},"码":{"docs":{},"实":{"docs":{},"际":{"docs":{},"上":{"docs":{},"只":{"docs":{},"取":{"docs":{},"最":{"docs":{},"后":{"docs":{},"一":{"docs":{},"个":{"docs":{},"切":{"docs":{},"片":{"docs":{},"元":{"docs":{},"素":{"docs":{},"的":{"docs":{},"值":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"前":{"docs":{},"面":{"docs":{},"的":{"docs":{},"循":{"docs":{},"环":{"docs":{},"操":{"docs":{},"作":{"docs":{},"可":{"docs":{},"以":{"docs":{},"跳":{"docs":{},"过":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"便":{"docs":{},"带":{"docs":{},"来":{"docs":{},"性":{"docs":{},"能":{"docs":{},"的":{"docs":{},"提":{"docs":{},"升":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"是":{"docs":{},"下":{"docs":{},"面":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"编":{"docs":{},"器":{"docs":{},"将":{"docs":{},"无":{"docs":{},"法":{"docs":{},"优":{"docs":{},"化":{"docs":{},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"遍":{"docs":{},"历":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"所":{"docs":{},"有":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"放":{"docs":{},"在":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"就":{"docs":{},"能":{"docs":{},"够":{"docs":{},"减":{"docs":{},"少":{"docs":{},"指":{"docs":{},"令":{"docs":{},"呢":{"docs":{},"?":{"docs":{},"因":{"docs":{},"为":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"和":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},"是":{"docs":{},"相":{"docs":{},"同":{"docs":{},"的":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"是":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"对":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},"解":{"docs":{},"引":{"docs":{},"用":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"是":{"docs":{},"其":{"docs":{},"他":{"docs":{},"的":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"除":{"docs":{},"了":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"指":{"docs":{},"针":{"docs":{},"外":{"docs":{},",":{"docs":{},"还":{"docs":{},"需":{"docs":{},"要":{"docs":{},"计":{"docs":{},"算":{"docs":{},"与":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"值":{"docs":{},"的":{"docs":{},"偏":{"docs":{},"移":{"docs":{},"(":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"c":{"docs":{},"u":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"是":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"?":{"3":{"docs":{},".":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"1":{"docs":{},".":{"docs":{},"简":{"docs":{},"介":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"docs":{}}}}}}},"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}},"零":{"docs":{},"。":{"docs":{},"任":{"docs":{},"何":{"docs":{},"其":{"docs":{},"他":{"docs":{},"尺":{"docs":{},"寸":{"docs":{},"都":{"docs":{},"必":{"docs":{},"须":{"docs":{},"经":{"docs":{},"过":{"docs":{},"严":{"docs":{},"格":{"docs":{},"的":{"docs":{},"审":{"docs":{},"查":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"拍":{"docs":{},"脑":{"docs":{},"袋":{"docs":{},"给":{"docs":{},"出":{"docs":{},"一":{"docs":{},"个":{"docs":{},"大":{"docs":{},"致":{"docs":{},"的":{"docs":{},"值":{"docs":{},"。":{"docs":{},"我":{"docs":{},"们":{"docs":{},"需":{"docs":{},"要":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"如":{"docs":{},"何":{"docs":{},"确":{"docs":{},"定":{"docs":{},"大":{"docs":{},"小":{"docs":{},",":{"docs":{},"什":{"docs":{},"么":{"docs":{},"原":{"docs":{},"因":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"你":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},"添":{"docs":{},"加":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},",":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}},"例":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"给":{"docs":{},"出":{"docs":{},"具":{"docs":{},"体":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}},",":{"docs":{},"简":{"docs":{},"单":{"docs":{},"介":{"docs":{},"绍":{"docs":{},"其":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"了":{"docs":{},"模":{"docs":{},"拟":{"docs":{},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"简":{"docs":{},"单":{"docs":{},"地":{"docs":{},"写":{"docs":{},"个":{"docs":{},"示":{"docs":{},"例":{"docs":{},"程":{"docs":{},"序":{"docs":{},",":{"docs":{},"对":{"docs":{},"比":{"docs":{},"下":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}},"读":{"docs":{},"操":{"docs":{},"作":{"docs":{},"占":{"docs":{},"比":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}},"并":{"docs":{},"发":{"docs":{},"而":{"docs":{},"生":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}},"具":{"docs":{},"体":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"下":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}},"我":{"docs":{},"们":{"docs":{},"几":{"docs":{},"乎":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"指":{"docs":{},"向":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"将":{"docs":{},"接":{"docs":{},"口":{"docs":{},"直":{"docs":{},"接":{"docs":{},"赋":{"docs":{},"值":{"docs":{},"给":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"在":{"docs":{},"传":{"docs":{},"递":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},",":{"docs":{},"实":{"docs":{},"质":{"docs":{},"上":{"docs":{},"传":{"docs":{},"递":{"docs":{},"的":{"docs":{},"底":{"docs":{},"层":{"docs":{},"数":{"docs":{},"据":{"docs":{},"仍":{"docs":{},"然":{"docs":{},"是":{"docs":{},"指":{"docs":{},"针":{"docs":{},",":{"docs":{},"即":{"docs":{},"不":{"docs":{},"存":{"docs":{},"在":{"docs":{},"值":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"下":{"docs":{},"接":{"docs":{},"口":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"宽":{"docs":{},"度":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}},"一":{"docs":{},"下":{"docs":{},"最":{"docs":{},"常":{"docs":{},"用":{"docs":{},"的":{"docs":{},"标":{"docs":{},"准":{"docs":{},"格":{"docs":{},"式":{"docs":{},"化":{"docs":{},"输":{"docs":{},"出":{"docs":{},"函":{"docs":{},"数":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}},"找":{"docs":{},"到":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"切":{"docs":{},"片":{"docs":{},"的":{"docs":{},"底":{"docs":{},"层":{"docs":{},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}},"通":{"docs":{},"过":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"注":{"docs":{},"入":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"将":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"注":{"docs":{},"入":{"docs":{},"到":{"docs":{},"使":{"docs":{},"用":{"docs":{},"方":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"便":{"docs":{},"可":{"docs":{},"以":{"docs":{},"避":{"docs":{},"免":{"docs":{},"使":{"docs":{},"用":{"docs":{},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"进":{"docs":{},"而":{"docs":{},"避":{"docs":{},"免":{"docs":{},"了":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"的":{"docs":{},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},"被":{"docs":{},"错":{"docs":{},"误":{"docs":{},"修":{"docs":{},"改":{"docs":{},"的":{"docs":{},"可":{"docs":{},"能":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{},"访":{"docs":{},"问":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"前":{"docs":{},"前":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}},"来":{"docs":{},"看":{"docs":{},"一":{"docs":{},"下":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"编":{"docs":{},"译":{"docs":{},"时":{"docs":{},"对":{"docs":{},"上":{"docs":{},"面":{"docs":{},"两":{"docs":{},"个":{"docs":{},"切":{"docs":{},"片":{"docs":{},"的":{"docs":{},"优":{"docs":{},"化":{"docs":{},"决":{"docs":{},"策":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}},"还":{"docs":{},"是":{"docs":{},"以":{"docs":{},"上":{"docs":{},"面":{"docs":{},"斐":{"docs":{},"波":{"docs":{},"那":{"docs":{},"契":{"docs":{},"数":{"docs":{},"列":{"docs":{},"函":{"docs":{},"数":{"docs":{},"为":{"docs":{},"例":{"docs":{},",":{"docs":{},"看":{"docs":{},"下":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"为":{"docs":{},"确":{"docs":{},"定":{"docs":{},"类":{"docs":{},"型":{"docs":{},"和":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"都":{"docs":{},"知":{"docs":{},"道":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"以":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"一":{"docs":{},"个":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{},"线":{"docs":{},"程":{"docs":{},"安":{"docs":{},"全":{"docs":{},"单":{"docs":{},"向":{"docs":{},"链":{"docs":{},"表":{"docs":{},"的":{"docs":{},"插":{"docs":{},"入":{"docs":{},"操":{"docs":{},"作":{"docs":{},"来":{"docs":{},"看":{"docs":{},"下":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"编":{"docs":{},"程":{"docs":{},"和":{"docs":{},"普":{"docs":{},"通":{"docs":{},"加":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"区":{"docs":{},"别":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"示":{"docs":{},"例":{"docs":{},",":{"docs":{},"来":{"docs":{},"说":{"docs":{},"明":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}},"分":{"docs":{},"别":{"docs":{},"对":{"docs":{},"两":{"docs":{},"种":{"docs":{},"链":{"docs":{},"表":{"docs":{},"做":{"docs":{},"一":{"docs":{},"个":{"docs":{},"并":{"docs":{},"发":{"docs":{},"写":{"docs":{},"入":{"docs":{},"的":{"docs":{},"操":{"docs":{},"作":{"docs":{},"验":{"docs":{},"证":{"docs":{},"一":{"docs":{},"下":{"docs":{},"其":{"docs":{},"功":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}},"看":{"docs":{},"下":{"docs":{},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},"一":{"docs":{},"个":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{},"例":{"docs":{},"子":{"docs":{},",":{"docs":{},"三":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}},"想":{"docs":{},"象":{"docs":{},"一":{"docs":{},"个":{"docs":{},"非":{"docs":{},"常":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}},"合":{"docs":{},"理":{"docs":{},"性":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":3.333333333333333}}}}},"赋":{"docs":{},"值":{"docs":{},"的":{"docs":{},"右":{"docs":{},"边":{"docs":{},"应":{"docs":{},"该":{"docs":{},"是":{"docs":{},"断":{"docs":{},"言":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"零":{"docs":{},"值":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}},"给":{"docs":{},"接":{"docs":{},"口":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}},"吗":{"docs":{},"?":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"底":{"docs":{},"层":{"docs":{},"核":{"docs":{},"心":{"docs":{},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}},"组":{"docs":{},"来":{"docs":{},"表":{"docs":{},"示":{"docs":{},"枚":{"docs":{},"举":{"docs":{},"值":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}}}}}},"预":{"docs":{},"先":{"docs":{},"声":{"docs":{},"明":{"docs":{},"的":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}}}},"分":{"docs":{},"配":{"docs":{},"容":{"docs":{},"量":{"docs":{},"这":{"docs":{},"种":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}},"做":{"docs":{},"了":{"docs":{},"说":{"docs":{},"明":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"为":{"docs":{},"指":{"docs":{},"针":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"会":{"docs":{},"修":{"docs":{},"改":{"docs":{},"接":{"docs":{},"受":{"docs":{},"器":{"docs":{},",":{"docs":{},"为":{"docs":{},"了":{"docs":{},"避":{"docs":{},"免":{"docs":{},"产":{"docs":{},"生":{"docs":{},"这":{"docs":{},"种":{"docs":{},"错":{"docs":{},"误":{"docs":{},"的":{"docs":{},"行":{"docs":{},"为":{"docs":{},",":{"docs":{},"便":{"docs":{},"禁":{"docs":{},"止":{"docs":{},"将":{"docs":{},"值":{"docs":{},"赋":{"docs":{},"给":{"docs":{},"和":{"docs":{},"指":{"docs":{},"针":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"方":{"docs":{},"法":{"docs":{},"集":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"二":{"docs":{},"次":{"docs":{},"判":{"docs":{},"断":{"docs":{},",":{"docs":{},"来":{"docs":{},"保":{"docs":{},"证":{"docs":{},"任":{"docs":{},"务":{"docs":{},"函":{"docs":{},"数":{"docs":{},"只":{"docs":{},"会":{"docs":{},"被":{"docs":{},"执":{"docs":{},"行":{"docs":{},"一":{"docs":{},"次":{"docs":{},",":{"docs":{},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"取":{"docs":{},"址":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}},"呢":{"docs":{},"?":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"指":{"docs":{},"针":{"docs":{},"既":{"docs":{},"可":{"docs":{},"以":{"docs":{},"调":{"docs":{},"用":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}},"复":{"docs":{},"制":{"docs":{},"是":{"docs":{},"没":{"docs":{},"有":{"docs":{},"问":{"docs":{},"题":{"docs":{},"的":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},",":{"docs":{},"对":{"docs":{},"于":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"导":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}},"令":{"docs":{},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"说":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"做":{"docs":{},"能":{"docs":{},"够":{"docs":{},"提":{"docs":{},"升":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.007104795737122558}},"。":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}},"有":{"docs":{},"名":{"docs":{},"函":{"docs":{},"数":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}},"度":{"docs":{},"开":{"docs":{},"销":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"提":{"docs":{},"升":{"docs":{},"可":{"docs":{},"读":{"docs":{},"性":{"docs":{},"是":{"docs":{},"值":{"docs":{},"得":{"docs":{},"的":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"使":{"docs":{},"用":{"docs":{},"它":{"docs":{},"们":{"docs":{},"的":{"docs":{},"成":{"docs":{},"本":{"docs":{},"微":{"docs":{},"不":{"docs":{},"足":{"docs":{},"道":{"docs":{},"。":{"docs":{},"尤":{"docs":{},"其":{"docs":{},"适":{"docs":{},"用":{"docs":{},"于":{"docs":{},"那":{"docs":{},"些":{"docs":{},"不":{"docs":{},"仅":{"docs":{},"仅":{"docs":{},"是":{"docs":{},"简":{"docs":{},"单":{"docs":{},"内":{"docs":{},"存":{"docs":{},"访":{"docs":{},"问":{"docs":{},"的":{"docs":{},"较":{"docs":{},"大":{"docs":{},"方":{"docs":{},"法":{"docs":{},",":{"docs":{},"在":{"docs":{},"这":{"docs":{},"些":{"docs":{},"方":{"docs":{},"法":{"docs":{},"中":{"docs":{},"其":{"docs":{},"他":{"docs":{},"计":{"docs":{},"算":{"docs":{},"的":{"docs":{},"资":{"docs":{},"源":{"docs":{},"消":{"docs":{},"耗":{"docs":{},"远":{"docs":{},"超":{"docs":{},"过":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"供":{"docs":{},"容":{"docs":{},"量":{"docs":{},"提":{"docs":{},"示":{"docs":{},"会":{"docs":{},"在":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"时":{"docs":{},"尝":{"docs":{},"试":{"docs":{},"调":{"docs":{},"整":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}},"了":{"docs":{},"两":{"docs":{},"个":{"docs":{},"导":{"docs":{},"出":{"docs":{},"方":{"docs":{},"法":{"docs":{},"用":{"docs":{},"来":{"docs":{},"使":{"docs":{},"用":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}},"种":{"docs":{},"锁":{"docs":{},",":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"(":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},")":{"docs":{},"和":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"(":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"r":{"docs":{},"w":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},")":{"docs":{},",":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"便":{"docs":{},"是":{"docs":{},"共":{"docs":{},"享":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"一":{"docs":{},"种":{"docs":{},"具":{"docs":{},"体":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"五":{"docs":{},"个":{"docs":{},"导":{"docs":{},"出":{"docs":{},"方":{"docs":{},"法":{"docs":{},"用":{"docs":{},"来":{"docs":{},"使":{"docs":{},"用":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}},"示":{"docs":{},"并":{"docs":{},"不":{"docs":{},"保":{"docs":{},"证":{"docs":{},"完":{"docs":{},"全":{"docs":{},"的":{"docs":{},"抢":{"docs":{},"占":{"docs":{},"式":{"docs":{},"分":{"docs":{},"配":{"docs":{},",":{"docs":{},"而":{"docs":{},"是":{"docs":{},"用":{"docs":{},"于":{"docs":{},"估":{"docs":{},"计":{"docs":{},"所":{"docs":{},"需":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}}}}}}}}}}},"'":{"docs":{},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"'":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"'":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}},"放":{"docs":{},"在":{"docs":{},"匿":{"docs":{},"名":{"docs":{},"函":{"docs":{},"数":{"docs":{},"中":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}},"有":{"docs":{},"名":{"docs":{},"函":{"docs":{},"数":{"docs":{},"中":{"docs":{},"然":{"docs":{},"后":{"docs":{},"调":{"docs":{},"用":{"docs":{},"之":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"能":{"docs":{},"够":{"docs":{},"减":{"docs":{},"少":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}},"及":{"docs":{},"其":{"docs":{},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}},"零":{"docs":{},"值":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}},"否":{"docs":{},"则":{"docs":{},",":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"在":{"docs":{},"错":{"docs":{},"误":{"docs":{},"消":{"docs":{},"息":{"docs":{},"中":{"docs":{},"添":{"docs":{},"加":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}},"它":{"docs":{},"们":{"docs":{},"将":{"docs":{},"成":{"docs":{},"为":{"docs":{},"包":{"docs":{},"的":{"docs":{},"公":{"docs":{},"共":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}},"您":{"docs":{},"会":{"docs":{},"收":{"docs":{},"到":{"docs":{},"更":{"docs":{},"多":{"docs":{},"有":{"docs":{},"用":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{},"“":{"docs":{},"呼":{"docs":{},"叫":{"docs":{},"服":{"docs":{},"务":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}},"无":{"docs":{},"错":{"docs":{},"误":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}},"论":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}},"使":{"docs":{},"用":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"结":{"docs":{},"构":{"docs":{},"还":{"docs":{},"是":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"都":{"docs":{},"会":{"docs":{},"限":{"docs":{},"制":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"演":{"docs":{},"化":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}}}}},"需":{"docs":{},"去":{"docs":{},"除":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"优":{"docs":{},"化":{"docs":{},",":{"docs":{},"基":{"docs":{},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}},"锁":{"docs":{},"化":{"docs":{},"主":{"docs":{},"要":{"docs":{},"有":{"docs":{},"两":{"docs":{},"种":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"docs":{},"和":{"docs":{},"串":{"docs":{},"行":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}},"单":{"docs":{},"向":{"docs":{},"链":{"docs":{},"表":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"的":{"docs":{},"简":{"docs":{},"单":{"docs":{},"实":{"docs":{},"现":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"1":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}}},"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"根":{"docs":{},"据":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"是":{"docs":{},"否":{"docs":{},"应":{"docs":{},"该":{"docs":{},"能":{"docs":{},"够":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"和":{"docs":{},"提":{"docs":{},"取":{"docs":{},"根":{"docs":{},"本":{"docs":{},"原":{"docs":{},"因":{"docs":{},",":{"docs":{},"在":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}},"然":{"docs":{},"而":{"docs":{},",":{"docs":{},"一":{"docs":{},"旦":{"docs":{},"错":{"docs":{},"误":{"docs":{},"被":{"docs":{},"发":{"docs":{},"送":{"docs":{},"到":{"docs":{},"另":{"docs":{},"一":{"docs":{},"个":{"docs":{},"系":{"docs":{},"统":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"清":{"docs":{},"楚":{"docs":{},"消":{"docs":{},"息":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"错":{"docs":{},"误":{"docs":{},"(":{"docs":{},"例":{"docs":{},"如":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"后":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"请":{"docs":{},"注":{"docs":{},"意":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"您":{"docs":{},"从":{"docs":{},"包":{"docs":{},"中":{"docs":{},"导":{"docs":{},"出":{"docs":{},"错":{"docs":{},"误":{"docs":{},"变":{"docs":{},"量":{"docs":{},"或":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009}}},"列":{"docs":{},"转":{"docs":{},"换":{"docs":{},"为":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}},"回":{"docs":{},"到":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"例":{"docs":{},"子":{"docs":{},",":{"docs":{},"在":{"docs":{},"一":{"docs":{},"个":{"docs":{},"时":{"docs":{},"间":{"docs":{},"时":{"docs":{},"刻":{"docs":{},"加":{"docs":{},"上":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}},"天":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009}}},"秒":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},";":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"产":{"docs":{},"生":{"docs":{},"模":{"docs":{},"糊":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"文":{"docs":{},"档":{"docs":{},"指":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}},"假":{"docs":{},"设":{"docs":{},"您":{"docs":{},"使":{"docs":{},"用":{"docs":{},"共":{"docs":{},"享":{"docs":{},"的":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}},"我":{"docs":{},"们":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},"有":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"“":{"docs":{},"学":{"docs":{},"生":{"docs":{},"”":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},",":{"docs":{},"并":{"docs":{},"复":{"docs":{},"用":{"docs":{},"改":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"对":{"docs":{},"象":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}}}},"很":{"docs":{},"少":{"docs":{},"需":{"docs":{},"要":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"虽":{"docs":{},"然":{"docs":{},"它":{"docs":{},"可":{"docs":{},"以":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"您":{"docs":{},"避":{"docs":{},"免":{"docs":{},"编":{"docs":{},"写":{"docs":{},"冗":{"docs":{},"长":{"docs":{},"的":{"docs":{},"委":{"docs":{},"托":{"docs":{},"方":{"docs":{},"法":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"多":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"能":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"操":{"docs":{},"作":{"docs":{},"一":{"docs":{},"个":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},",":{"docs":{},"利":{"docs":{},"用":{"docs":{},"反":{"docs":{},"射":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"泛":{"docs":{},"化":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"的":{"docs":{},"能":{"docs":{},"力":{"docs":{},"压":{"docs":{},"根":{"docs":{},"没":{"docs":{},"用":{"docs":{},"上":{"docs":{},"。":{"docs":{},"退":{"docs":{},"一":{"docs":{},"步":{"docs":{},"说":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"我":{"docs":{},"们":{"docs":{},"真":{"docs":{},"地":{"docs":{},"需":{"docs":{},"要":{"docs":{},"对":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"泄":{"docs":{},"漏":{"docs":{},"实":{"docs":{},"现":{"docs":{},"细":{"docs":{},"节":{"docs":{},"指":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}},"移":{"docs":{},"除":{"docs":{},"从":{"docs":{},"列":{"docs":{},"表":{"docs":{},"中":{"docs":{},"移":{"docs":{},"除":{"docs":{},"实":{"docs":{},"体":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.01775147928994083}}}}}}}}}}}}},"获":{"docs":{},"得":{"docs":{},"了":{"docs":{},"同":{"docs":{},"名":{"docs":{},"嵌":{"docs":{},"套":{"docs":{},"类":{"docs":{},"型":{"docs":{},"字":{"docs":{},"段":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}},"。":{"docs":{},"共":{"docs":{},"享":{"docs":{},"锁":{"docs":{},"指":{"docs":{},"可":{"docs":{},"以":{"docs":{},"同":{"docs":{},"时":{"docs":{},"被":{"docs":{},"多":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}},"的":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},"取":{"docs":{},"读":{"docs":{},"锁":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"是":{"docs":{},"一":{"docs":{},"种":{"docs":{},"共":{"docs":{},"享":{"docs":{},"锁":{"docs":{},"。":{"docs":{},"但":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"是":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"的":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}},"@":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"利":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"反":{"docs":{},"射":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"实":{"docs":{},"现":{"docs":{},"一":{"docs":{},"个":{"docs":{},"类":{"docs":{},"型":{"docs":{},"泛":{"docs":{},"化":{"docs":{},"支":{"docs":{},"持":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},"过":{"docs":{},"滤":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"下":{"docs":{},"标":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}},"硬":{"docs":{},"件":{"docs":{},"支":{"docs":{},"持":{"docs":{},"的":{"docs":{},"原":{"docs":{},"子":{"docs":{},"操":{"docs":{},"作":{"docs":{},"可":{"docs":{},"以":{"docs":{},"实":{"docs":{},"现":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"docs":{},",":{"docs":{},"原":{"docs":{},"子":{"docs":{},"操":{"docs":{},"作":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"框":{"docs":{},"架":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"网":{"docs":{},"络":{"docs":{},"字":{"docs":{},"节":{"docs":{},"序":{"docs":{},"解":{"docs":{},"析":{"docs":{},"到":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}},"转":{"docs":{},"为":{"docs":{},"主":{"docs":{},"机":{"docs":{},"字":{"docs":{},"节":{"docs":{},"序":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}},"过":{"docs":{},"滤":{"docs":{},"指":{"docs":{},"定":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{},"注":{"docs":{},"意":{"docs":{},":":{"docs":{},"不":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}},"差":{"docs":{},"距":{"docs":{},"不":{"docs":{},"是":{"docs":{},"很":{"docs":{},"大":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"随":{"docs":{},"着":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"长":{"docs":{},"度":{"docs":{},"的":{"docs":{},"增":{"docs":{},"加":{"docs":{},",":{"docs":{},"差":{"docs":{},"距":{"docs":{},"将":{"docs":{},"会":{"docs":{},"越":{"docs":{},"来":{"docs":{},"越":{"docs":{},"明":{"docs":{},"显":{"docs":{},"。":{"docs":{},"此":{"docs":{},"外":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"这":{"docs":{},"种":{"docs":{},"重":{"docs":{},"复":{"docs":{},"的":{"docs":{},"转":{"docs":{},"换":{"docs":{},"在":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"看":{"docs":{},"一":{"docs":{},"下":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},",":{"docs":{},"注":{"docs":{},"意":{"docs":{},"需":{"docs":{},"要":{"docs":{},"禁":{"docs":{},"止":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"优":{"docs":{},"化":{"docs":{},",":{"docs":{},"不":{"docs":{},"然":{"docs":{},"看":{"docs":{},"不":{"docs":{},"出":{"docs":{},"差":{"docs":{},"别":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"下":{"docs":{},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}}}}}},"与":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"操":{"docs":{},"作":{"docs":{},"将":{"docs":{},"导":{"docs":{},"致":{"docs":{},"零":{"docs":{},"分":{"docs":{},"配":{"docs":{},"(":{"docs":{},"直":{"docs":{},"到":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}},",":{"docs":{},"及":{"docs":{},"做":{"docs":{},"一":{"docs":{},"次":{"docs":{},"数":{"docs":{},"据":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},",":{"docs":{},"耗":{"docs":{},"时":{"docs":{},"几":{"docs":{},"乎":{"docs":{},"可":{"docs":{},"以":{"docs":{},"忽":{"docs":{},"略":{"docs":{},"。":{"docs":{},"而":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},"和":{"docs":{},"回":{"docs":{},"收":{"docs":{},"的":{"docs":{},"耗":{"docs":{},"时":{"docs":{},"占":{"docs":{},"比":{"docs":{},"较":{"docs":{},"多":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"对":{"docs":{},"程":{"docs":{},"序":{"docs":{},"整":{"docs":{},"体":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"影":{"docs":{},"响":{"docs":{},"更":{"docs":{},"大":{"docs":{},"。":{"docs":{},"从":{"docs":{},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"出":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"即":{"docs":{},"调":{"docs":{},"用":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"s":{"docs":{},"w":{"docs":{},"a":{"docs":{},"p":{"docs":{},"(":{"docs":{},")":{"docs":{},"方":{"docs":{},"法":{"docs":{},"进":{"docs":{},"行":{"docs":{},"插":{"docs":{},"入":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"插":{"docs":{},"入":{"docs":{},"失":{"docs":{},"败":{"docs":{},"则":{"docs":{},"进":{"docs":{},"行":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"基":{"docs":{},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},",":{"docs":{},"对":{"docs":{},"比":{"docs":{},"一":{"docs":{},"下":{"docs":{},"有":{"docs":{},"锁":{"docs":{},"与":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}},"来":{"docs":{},"达":{"docs":{},"到":{"docs":{},"一":{"docs":{},"发":{"docs":{},"多":{"docs":{},"收":{"docs":{},"的":{"docs":{},"效":{"docs":{},"果":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}},"都":{"docs":{},"可":{"docs":{},"能":{"docs":{},"调":{"docs":{},"整":{"docs":{},"大":{"docs":{},"小":{"docs":{},"以":{"docs":{},"容":{"docs":{},"纳":{"docs":{},"其":{"docs":{},"他":{"docs":{},"元":{"docs":{},"素":{"docs":{},")":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}},"会":{"docs":{},"浪":{"docs":{},"费":{"docs":{},"额":{"docs":{},"外":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"。":{"docs":{},"因":{"docs":{},"此":{"docs":{},",":{"docs":{},"在":{"docs":{},"这":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"声":{"docs":{},"明":{"docs":{},"为":{"docs":{},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"最":{"docs":{},"合":{"docs":{},"适":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},"了":{"docs":{},"分":{"docs":{},"片":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"分":{"docs":{},"片":{"docs":{},"一":{"docs":{},"把":{"docs":{},"锁":{"docs":{},",":{"docs":{},"采":{"docs":{},"用":{"docs":{},"分":{"docs":{},"片":{"docs":{},"存":{"docs":{},"储":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"减":{"docs":{},"少":{"docs":{},"加":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"次":{"docs":{},"数":{"docs":{},"从":{"docs":{},"而":{"docs":{},"提":{"docs":{},"高":{"docs":{},"整":{"docs":{},"体":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"重":{"docs":{},"新":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}},"且":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}},"预":{"docs":{},"先":{"docs":{},"分":{"docs":{},"配":{"docs":{},"容":{"docs":{},"量":{"docs":{},"的":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"方":{"docs":{},"式":{"docs":{},"性":{"docs":{},"能":{"docs":{},"最":{"docs":{},"佳":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}},"先":{"docs":{},"看":{"docs":{},"下":{"docs":{},"其":{"docs":{},"性":{"docs":{},"能":{"docs":{},"测":{"docs":{},"试":{"docs":{},"的":{"docs":{},"对":{"docs":{},"比":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}},"综":{"docs":{},"合":{"docs":{},"易":{"docs":{},"用":{"docs":{},"性":{"docs":{},"和":{"docs":{},"性":{"docs":{},"能":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"推":{"docs":{},"荐":{"docs":{},"使":{"docs":{},"用":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"来":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"能":{"docs":{},"够":{"docs":{},"接":{"docs":{},"收":{"docs":{},"不":{"docs":{},"同":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"入":{"docs":{},"参":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"格":{"docs":{},"式":{"docs":{},"化":{"docs":{},"输":{"docs":{},"出":{"docs":{},"完":{"docs":{},"成":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"的":{"docs":{},"拼":{"docs":{},"接":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"非":{"docs":{},"常":{"docs":{},"方":{"docs":{},"便":{"docs":{},"。":{"docs":{},"但":{"docs":{},"因":{"docs":{},"其":{"docs":{},"底":{"docs":{},"层":{"docs":{},"实":{"docs":{},"现":{"docs":{},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{},"反":{"docs":{},"射":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"上":{"docs":{},"会":{"docs":{},"有":{"docs":{},"所":{"docs":{},"损":{"docs":{},"耗":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"确":{"docs":{},"保":{"docs":{},"被":{"docs":{},"唤":{"docs":{},"醒":{"docs":{},"后":{"docs":{},"条":{"docs":{},"件":{"docs":{},"一":{"docs":{},"定":{"docs":{},"符":{"docs":{},"合":{"docs":{},"后":{"docs":{},",":{"docs":{},"再":{"docs":{},"执":{"docs":{},"行":{"docs":{},"后":{"docs":{},"续":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}},"性":{"docs":{},"能":{"docs":{},"没":{"docs":{},"有":{"docs":{},"差":{"docs":{},"别":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}},"对":{"docs":{},"比":{"1":{"docs":{},".":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"化":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},"此":{"docs":{},"外":{"docs":{},",":{"docs":{},"因":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}},"迭":{"docs":{},"代":{"docs":{},"的":{"docs":{},"元":{"docs":{},"素":{"docs":{},"较":{"docs":{},"小":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}},"遍":{"docs":{},"历":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.009404388714733543}},"切":{"docs":{},"片":{"docs":{},"或":{"docs":{},"数":{"docs":{},"组":{"docs":{},"有":{"docs":{},"两":{"docs":{},"种":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"一":{"docs":{},"种":{"docs":{},"是":{"docs":{},"下":{"docs":{},"标":{"docs":{},",":{"docs":{},"一":{"docs":{},"种":{"docs":{},"是":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}},"性":{"docs":{},"能":{"docs":{},"几":{"docs":{},"乎":{"docs":{},"没":{"docs":{},"有":{"docs":{},"区":{"docs":{},"别":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}},"首":{"docs":{},"先":{"docs":{},"看":{"docs":{},"一":{"docs":{},"下":{"docs":{},"遍":{"docs":{},"历":{"docs":{},"基":{"docs":{},"本":{"docs":{},"类":{"docs":{},"型":{"docs":{},"切":{"docs":{},"片":{"docs":{},"时":{"docs":{},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"别":{"docs":{},",":{"docs":{},"以":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}},"根":{"docs":{},"据":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"和":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"分":{"docs":{},"别":{"docs":{},"实":{"docs":{},"现":{"docs":{},"对":{"docs":{},"共":{"docs":{},"享":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}},"次":{"docs":{},"被":{"docs":{},"加":{"docs":{},"载":{"docs":{},"时":{"docs":{},"执":{"docs":{},"行":{"docs":{},",":{"docs":{},"若":{"docs":{},"迟":{"docs":{},"迟":{"docs":{},"未":{"docs":{},"被":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"则":{"docs":{},"既":{"docs":{},"浪":{"docs":{},"费":{"docs":{},"了":{"docs":{},"内":{"docs":{},"存":{"docs":{},",":{"docs":{},"又":{"docs":{},"延":{"docs":{},"长":{"docs":{},"了":{"docs":{},"程":{"docs":{},"序":{"docs":{},"加":{"docs":{},"载":{"docs":{},"时":{"docs":{},"间":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"删":{"docs":{},"除":{"docs":{},"切":{"docs":{},"片":{"docs":{},"指":{"docs":{},"定":{"docs":{},"元":{"docs":{},"素":{"docs":{},"一":{"docs":{},"般":{"docs":{},"有":{"docs":{},"如":{"docs":{},"下":{"docs":{},"几":{"docs":{},"种":{"docs":{},"方":{"docs":{},"法":{"docs":{},",":{"docs":{},"本":{"docs":{},"文":{"docs":{},"以":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}},"指":{"docs":{},"定":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.01444043321299639}}}}}}}}},"事":{"docs":{},"实":{"docs":{},"上":{"docs":{},"可":{"docs":{},"以":{"docs":{},"用":{"docs":{},"任":{"docs":{},"何":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"docs":{},"替":{"docs":{},"代":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}},"计":{"docs":{},"算":{"docs":{},"出":{"docs":{},"一":{"docs":{},"个":{"docs":{},"数":{"docs":{},"据":{"docs":{},"类":{"docs":{},"型":{"docs":{},"实":{"docs":{},"例":{"docs":{},"需":{"docs":{},"要":{"docs":{},"占":{"docs":{},"用":{"docs":{},"的":{"docs":{},"字":{"docs":{},"节":{"docs":{},"数":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}}}},"数":{"docs":{},"器":{"docs":{},",":{"docs":{},"统":{"docs":{},"计":{"docs":{},"函":{"docs":{},"数":{"docs":{},"执":{"docs":{},"行":{"docs":{},"次":{"docs":{},"数":{"docs":{},";":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}},"位":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}},"始":{"docs":{},"终":{"docs":{},"以":{"docs":{},"字":{"docs":{},"长":{"docs":{},"访":{"docs":{},"问":{"docs":{},"内":{"docs":{},"存":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"不":{"docs":{},"进":{"docs":{},"行":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"增":{"docs":{},"加":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}},"布":{"docs":{},"局":{"4":{"docs":{},".":{"docs":{},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"与":{"docs":{},"空":{"docs":{},"数":{"docs":{},"组":{"docs":{},"对":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"的":{"docs":{},"影":{"docs":{},"响":{"1":{"docs":{},".":{"docs":{},"为":{"docs":{},"什":{"docs":{},"么":{"docs":{},"需":{"docs":{},"要":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}}},"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"可":{"docs":{},"以":{"docs":{},"减":{"docs":{},"少":{"docs":{},"内":{"docs":{},"存":{"docs":{},"占":{"docs":{},"用":{"docs":{},",":{"docs":{},"提":{"docs":{},"高":{"docs":{},"程":{"docs":{},"序":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}},"考":{"docs":{},"虑":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":5}}}}}}}}}},"至":{"docs":{},"少":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"访":{"docs":{},"存":{"docs":{},"指":{"docs":{},"令":{"docs":{},"周":{"docs":{},"期":{"docs":{},",":{"docs":{},"提":{"docs":{},"高":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"访":{"docs":{},"问":{"docs":{},"效":{"docs":{},"率":{"docs":{},",":{"docs":{},"会":{"docs":{},"对":{"docs":{},"变":{"docs":{},"量":{"docs":{},"进":{"docs":{},"行":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"次":{"docs":{},"数":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"的":{"docs":{},"单":{"docs":{},"位":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"问":{"docs":{},"内":{"docs":{},"存":{"docs":{},"并":{"docs":{},"不":{"docs":{},"是":{"docs":{},"逐":{"docs":{},"个":{"docs":{},"字":{"docs":{},"节":{"docs":{},"访":{"docs":{},"问":{"docs":{},",":{"docs":{},"而":{"docs":{},"是":{"docs":{},"以":{"docs":{},"字":{"docs":{},"长":{"docs":{},"(":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"吞":{"docs":{},"吐":{"docs":{},"量":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},"同":{"docs":{},"样":{"docs":{},"读":{"docs":{},"取":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}},"次":{"docs":{},"数":{"docs":{},",":{"docs":{},"加":{"docs":{},"大":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}},"发":{"docs":{},"生":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"在":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"申":{"docs":{},"请":{"docs":{},"切":{"docs":{},"片":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}},"栈":{"docs":{},"上":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"比":{"docs":{},"在":{"docs":{},"堆":{"docs":{},"中":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"有":{"docs":{},"更":{"docs":{},"高":{"docs":{},"的":{"docs":{},"效":{"docs":{},"率":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},"栈":{"docs":{},"上":{"docs":{},"分":{"docs":{},"配":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"版":{"docs":{},"本":{"docs":{},"的":{"docs":{},"大":{"docs":{},"小":{"docs":{},"限":{"docs":{},"制":{"docs":{},"可":{"docs":{},"能":{"docs":{},"不":{"docs":{},"一":{"docs":{},"样":{"docs":{},"。":{"docs":{},"一":{"docs":{},"般":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}},"知":{"docs":{},"道":{"docs":{},"变":{"docs":{},"量":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"的":{"docs":{},"原":{"docs":{},"因":{"docs":{},"后":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"有":{"docs":{},"意":{"docs":{},"识":{"docs":{},"地":{"docs":{},"避":{"docs":{},"免":{"docs":{},"变":{"docs":{},"量":{"docs":{},"发":{"docs":{},"生":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"将":{"docs":{},"其":{"docs":{},"限":{"docs":{},"制":{"docs":{},"在":{"docs":{},"栈":{"docs":{},"上":{"docs":{},",":{"docs":{},"减":{"docs":{},"少":{"docs":{},"堆":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"分":{"docs":{},"配":{"docs":{},",":{"docs":{},"降":{"docs":{},"低":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"闭":{"docs":{},"包":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"压":{"docs":{},"力":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}},")":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"、":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}},"串":{"docs":{},"行":{"docs":{},"无":{"docs":{},"锁":{"2":{"docs":{},".":{"docs":{},"减":{"docs":{},"少":{"docs":{},"锁":{"docs":{},"竞":{"docs":{},"争":{"3":{"docs":{},".":{"docs":{},"优":{"docs":{},"先":{"docs":{},"使":{"docs":{},"用":{"docs":{},"共":{"docs":{},"享":{"docs":{},"锁":{"docs":{},"而":{"docs":{},"非":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"3":{"docs":{},".":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}},"docs":{}}}}}}}},"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"是":{"docs":{},"一":{"docs":{},"种":{"docs":{},"思":{"docs":{},"想":{"docs":{},",":{"docs":{},"就":{"docs":{},"是":{"docs":{},"避":{"docs":{},"免":{"docs":{},"对":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},"访":{"docs":{},"问":{"docs":{},",":{"docs":{},"改":{"docs":{},"为":{"docs":{},"每":{"docs":{},"个":{"docs":{},"并":{"docs":{},"发":{"docs":{},"操":{"docs":{},"作":{"docs":{},"访":{"docs":{},"问":{"docs":{},"自":{"docs":{},"己":{"docs":{},"独":{"docs":{},"占":{"docs":{},"的":{"docs":{},"资":{"docs":{},"源":{"docs":{},",":{"docs":{},"达":{"docs":{},"到":{"docs":{},"串":{"docs":{},"行":{"docs":{},"访":{"docs":{},"问":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"效":{"docs":{},"果":{"docs":{},",":{"docs":{},"来":{"docs":{},"避":{"docs":{},"免":{"docs":{},"使":{"docs":{},"用":{"docs":{},"锁":{"docs":{},"。":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},"有":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},"网":{"docs":{},"络":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"协":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"池":{"docs":{},"化":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"自":{"docs":{},"己":{"docs":{},"写":{"docs":{},"一":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"池":{"docs":{},",":{"docs":{},"但":{"docs":{},"不":{"docs":{},"推":{"docs":{},"荐":{"docs":{},"这":{"docs":{},"么":{"docs":{},"做":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},"已":{"docs":{},"经":{"docs":{},"有":{"docs":{},"成":{"docs":{},"熟":{"docs":{},"的":{"docs":{},"开":{"docs":{},"源":{"docs":{},"库":{"docs":{},"可":{"docs":{},"供":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"无":{"docs":{},"需":{"docs":{},"再":{"docs":{},"重":{"docs":{},"复":{"docs":{},"造":{"docs":{},"轮":{"docs":{},"子":{"docs":{},"。":{"docs":{},"目":{"docs":{},"前":{"docs":{},"有":{"docs":{},"很":{"docs":{},"多":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"库":{"docs":{},"实":{"docs":{},"现":{"docs":{},"了":{"docs":{},"协":{"docs":{},"程":{"docs":{},"池":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"很":{"docs":{},"方":{"docs":{},"便":{"docs":{},"地":{"docs":{},"用":{"docs":{},"来":{"docs":{},"控":{"docs":{},"制":{"docs":{},"协":{"docs":{},"程":{"docs":{},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},"数":{"docs":{},"量":{"docs":{},",":{"docs":{},"比":{"docs":{},"较":{"docs":{},"受":{"docs":{},"欢":{"docs":{},"迎":{"docs":{},"的":{"docs":{},"有":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"代":{"docs":{},"价":{"2":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}}},"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"都":{"docs":{},"执":{"docs":{},"行":{"docs":{},"到":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},"将":{"docs":{},"单":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"库":{"docs":{},")":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"用":{"docs":{},"于":{"docs":{},"实":{"docs":{},"现":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"docs":{},",":{"docs":{},"如":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"链":{"docs":{},"表":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}},"设":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}}}},"链":{"docs":{},"表":{"docs":{},"节":{"docs":{},"点":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},"~":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"亿":{"docs":{},"个":{"docs":{},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"内":{"docs":{},"部":{"docs":{},"几":{"docs":{},"乎":{"docs":{},"没":{"docs":{},"有":{"docs":{},"做":{"docs":{},"什":{"docs":{},"么":{"docs":{},"事":{"docs":{},"情":{"docs":{},"。":{"docs":{},"正":{"docs":{},"常":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"呢":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"程":{"docs":{},"序":{"docs":{},"会":{"docs":{},"乱":{"docs":{},"序":{"docs":{},"输":{"docs":{},"出":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"去":{"docs":{},"执":{"docs":{},"行":{"docs":{},"另":{"docs":{},"外":{"docs":{},"一":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},",":{"docs":{},"下":{"docs":{},"面":{"docs":{},"看":{"docs":{},"一":{"docs":{},"下":{"docs":{},"协":{"docs":{},"程":{"docs":{},"之":{"docs":{},"间":{"docs":{},"切":{"docs":{},"换":{"docs":{},"的":{"docs":{},"耗":{"docs":{},"时":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}},"手":{"docs":{},"动":{"docs":{},"g":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}}},"控":{"docs":{},"制":{"docs":{},"并":{"docs":{},"发":{"docs":{},"处":{"docs":{},"理":{"docs":{},"的":{"docs":{},"任":{"docs":{},"务":{"docs":{},"数":{"docs":{},"量":{"docs":{},",":{"docs":{},"就":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}},"数":{"docs":{},"量":{"docs":{},",":{"docs":{},"复":{"docs":{},"用":{"docs":{},"协":{"docs":{},"程":{"docs":{},",":{"docs":{},"达":{"docs":{},"到":{"docs":{},"更":{"docs":{},"高":{"docs":{},"效":{"docs":{},"执":{"docs":{},"行":{"docs":{},"任":{"docs":{},"务":{"docs":{},"的":{"docs":{},"效":{"docs":{},"果":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}},"毫":{"docs":{},"无":{"docs":{},"压":{"docs":{},"力":{"docs":{},",":{"docs":{},"但":{"docs":{},"当":{"docs":{},"我":{"docs":{},"们":{"docs":{},"起":{"docs":{},"十":{"docs":{},"万":{"docs":{},"、":{"docs":{},"百":{"docs":{},"万":{"docs":{},"甚":{"docs":{},"至":{"docs":{},"千":{"docs":{},"万":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}},"池":{"docs":{},",":{"docs":{},"实":{"docs":{},"现":{"docs":{},"了":{"docs":{},"对":{"docs":{},"大":{"docs":{},"规":{"docs":{},"模":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}},"约":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"耗":{"docs":{},"时":{"docs":{},"越":{"docs":{},"大":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}},"轻":{"docs":{},"量":{"docs":{},"的":{"docs":{},"开":{"docs":{},"销":{"docs":{},"将":{"docs":{},"被":{"docs":{},"放":{"docs":{},"大":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"限":{"docs":{},"制":{"docs":{},"协":{"docs":{},"程":{"docs":{},"数":{"docs":{},"量":{"3":{"docs":{},".":{"docs":{},"协":{"docs":{},"程":{"docs":{},"池":{"docs":{},"化":{"4":{"docs":{},".":{"docs":{},"小":{"docs":{},"结":{"1":{"docs":{},".":{"docs":{},"协":{"docs":{},"程":{"docs":{},"数":{"docs":{},"过":{"docs":{},"多":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"docs":{}}}}},"docs":{}}}}}}},"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}},"“":{"docs":{},"h":{"docs":{},"o":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"热":{"docs":{},"路":{"docs":{},"径":{"docs":{},"(":{"docs":{},"h":{"docs":{},"o":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}},"线":{"docs":{},"程":{"docs":{},"安":{"docs":{},"全":{"docs":{},",":{"docs":{},"保":{"docs":{},"障":{"docs":{},"在":{"docs":{},"多":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}},"绝":{"docs":{},"大":{"docs":{},"部":{"docs":{},"分":{"docs":{},"场":{"docs":{},"景":{"docs":{},"都":{"docs":{},"会":{"docs":{},"访":{"docs":{},"问":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"统":{"docs":{},"计":{"docs":{},"函":{"docs":{},"数":{"docs":{},"执":{"docs":{},"行":{"docs":{},"次":{"docs":{},"数":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}},"考":{"docs":{},"虑":{"docs":{},"一":{"docs":{},"个":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},",":{"docs":{},"函":{"docs":{},"数":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}},"点":{"docs":{},"汇":{"docs":{},"总":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"$":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}},"充":{"docs":{},"当":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},"实":{"docs":{},"现":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"唤":{"docs":{},"醒":{"docs":{},"了":{"docs":{},"该":{"docs":{},"协":{"docs":{},"程":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"所":{"docs":{},"有":{"docs":{},"等":{"docs":{},"待":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"顺":{"docs":{},"序":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"定":{"docs":{},"位":{"docs":{},"于":{"docs":{},"同":{"docs":{},"步":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"一":{"docs":{},"发":{"docs":{},"多":{"docs":{},"收":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},"。":{"docs":{},"虽":{"docs":{},"然":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}},"通":{"docs":{},"信":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"一":{"docs":{},"发":{"docs":{},"一":{"docs":{},"收":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},",":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}},"既":{"docs":{},"然":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"经":{"docs":{},"常":{"docs":{},"用":{"docs":{},"在":{"docs":{},"多":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"置":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"阻":{"docs":{},"塞":{"docs":{},"等":{"docs":{},"待":{"docs":{},"的":{"docs":{},"条":{"docs":{},"件":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"博":{"docs":{},"客":{"docs":{},"园":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}},"极":{"docs":{},"客":{"docs":{},"兔":{"docs":{},"兔":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"深":{"docs":{},"度":{"docs":{},"解":{"docs":{},"密":{"docs":{},"g":{"docs":{},"o":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}},"length":6401},"corpusTokens":["!=","!allowuserlogin","!condition()","!done","!ok","\"","\"\"","\"\",","\",","\",\"","\"../net\"","\"/api/v3/projects/%s/merge_request/%s/commits\"","\"0\",","\"1\",","\"1.0.0\"","\"192.0.2.0\",","\"192.0.2.0:8000\",","\"192.0.2.0:http\",","\"1:8\",","\"8\",","\"8000\",","\":8000\",","\"a\"","\"add\"},","\"application/json\"","\"application/json\",","\"b\"","\"b\",","\"bar\"","\"bar\")","\"bar\",","\"bar\"}","\"bar/testutil\"","\"baz\"","\"c\"}","\"config\",","\"config.yaml\"),","\"darwin\":","\"doe\",","\"encoding/json\"","\"error\"","\"fail","\"failed\"","\"fmt\"","\"foo\"","\"foo\",","\"foo\"}","\"github.com/olivere/elastic/v7\"","\"github.com/panjf2000/ants\"","\"github.com/xxxxxxxx/utils/formatlog\"","\"github.com/xxxxxxxx/xxxserver/pkg/formatlog\"","\"go.uber.org/atomic\"","\"golang.org/x/sync/errgroup\"","\"http\"","\"http\",","\"https\"","\"https://git.code.oa.com\"","\"img\"","\"john\",","\"john@example.com\",","\"linux\":","\"log\"","\"main/list\"","\"my_env\"","\"myproject/controller\"","\"myproject/models\"","\"new","\"os\"","\"rsp","\"runtime\"","\"runtime/debug\"","\"start","\"strings\"","\"subtract\"},","\"sync\"","\"sync/atomic\"","\"time\"","\"tom,jerry,spike\"","\"unknown","\"unsafe\"","\"wake","\"xxxx.com/proj/net\"","#","$","%","%d,","%q","%q\",","%s\",","%v","%v\",","%v\",err))","%v\\n\",","%w","%w\",","%w。","&&","&_config)","&bytes.buffer{}","&cond{l:","&config)","&config{","&node{","¬found)","¬founderror{file:","&num)","&s1{}","&s2{}","&signer{","&smap{","&something{}","&st","&t{name:","&wg)","&withlocklist{}","&{storag","'defer'","'for'","(","(*handler)(nil)","(*handler)(nil)将无法编译通过。","(*node,","(/*","([]userinfo,","(amd64/386),","(bucket","(c","(can","(d","(e","(error,","(f","(f*","(faq)","(format","(h","(https://golang.org/ref/spec#predeclared_identifiers)。","(https://rakyll.org/styl","(if","(int(bar)","(int,","(int32,","(l","(lat,","(m","(map[uint64]userinfo,","(max","(multipl","(myerror)","(n","(non","(o","(often","(p","(s","(string","(system","(to","(travis、circle、drone)配置和脚本放在","(use",")",")、容器(",")、操作系统(",")包配置和脚本放在","*","*/","*/)","*/,","*[]*bmap","*_type","*abstractlist","*abstractlist)","*attrmodel","*bmap","*bookingservice)","*common.context)","*concretelist)","*cond","*cond)","*config","*db.row)","*driver)","*foo)","*handler)","*handler)、切片和映射是","*http.request)","*itab","*item","*lockfreelist)","*mapextra","*mutex","*node","*node)","*notfounderror","*notfounderror)","*once)","*pp","*pp)","*resolveerror)","*rwmutex),","*s)","*s2)","*signer","*signer)","*smap","*smap)","*someth","*something)","*st","*stats)","*sync.cond)","*sync.waitgroup)","*testing.b)","*testing.t)","*withlocklist)","*zap.logg","+","+0x11b","+0x48","+0x65","+0x72","+0x75","+0x8f","+1,一个","+=",".","...","....","...interface{})","...string)","...uint64)","./main.go:5:12","./main.go:5:12:","./main.go:9:12:",".形式导入包",".,因为它使程序难以阅读,比如使用","/*","//","//手动抛出","/api","/asset","/build","/build/ci","/build/packag","/cmd","/config","/deploy","/deploy。","/doc","/exampl","/githook","/init","/intern","/internal/app/myapp","/internal/pkg/","/pkg","/readme.md","/script","/src","/test","/test/data","/test/testdata。请注意,如果你需要忽略目录中的内容,go","/third_parti","/tool","/users/dablelv/work/code/test/main.go:14","/users/dablelv/work/code/test/main.go:16","/usr/local/go/src/fmt/print.go:265","/usr/local/go/src/fmt/print.go:274","/usr/local/go/src/internal/poll/fd_mutex.go:147","/usr/local/go/src/internal/poll/fd_mutex.go:239","/usr/local/go/src/internal/poll/fd_unix.go:262","/usr/local/go/src/os/file.go:176","/usr/local/go/src/os/file_posix.go:49","/vendor","/web","/websit","0","0)","0,","0.2511","0.导语","01","05","08","09","0;","0s","0x0)","0x1,","0x1})","0x1}))","0x8,","0x8})","0xc0000ac008},","0xc12ea62f50})","0},","0。","0,但不够直观","0,更加直观","1","1)","1,","1.","1.1","1.13","1.2","1.379","1.582","1.732","1.813","1.841","1.[]int","1.[]int2.[]struct{}3.[]*struct4.小结go","1.for","1.不占内存空间2.空结构体的作用2.1","1.不需要指向","1.为什么需要内存对齐2.go","1.优先使用","1.使用","1.使用空结构体节省内存","1.关于锁","1.前言2.项目布局2.1","1.协程数过多的问题1.1","1.反射虽好,切莫贪杯","1.基本类型偏执通用场景结构体2.单一职责包&文件函数3.goroutine4.应用服务5.常用工具1.基本类型偏执","1.将","1.局部切片尽可能确定长度或容量","1.局部切片尽可能确定长度或容量2.返回值","1.截取法(修改原切片)","1.截取法(修改原切片)2.拷贝法(不改原切片)3.移位法(修改原切片)4.性能对比5.小结go","1.指定","1.方法接收器为值和指针的区别","1.无锁化1.1","1.格式化","1.简介2.作用3.如何使用4.性能差异5.在标准库中的应用1.简介","1.简介2.使用场景3.实现原理4.使用示例5.注意事项1.简介","1.简介2.原理2.1","1.行内字符串拼接2.非行内字符串拼接1.行内字符串拼接","1.避免使用可变全局变量","1.错误处理","1.错误类型2.错误包装1.错误类型","1.零值","10","10)","10.函数","100","1000","1000)","10000","10000)","100000","100000)","1000000","1000000000","1000:","100ns,相对于线程的微秒级耗时切换,性能表现非常优秀,但是仍有开销。","100:","1020","1024","1024)","10240","1048575)","108668","10:48:42","10、100、1000","10:","11.单元测试","1142025","1158408","11987966","12","12.杂项","1226868","1246887","127.0.0.1","13","13,","13026195","13339154","1342947","1427","144,","145.3","145690","14897282","1514","15190)。如果您比较两个时刻,则差异将不包括这两个时刻之间可能发生的闰秒。","1521","157.2","15:40:04","15:43:51","15:46:40","15:47:37","15:50:17","15:54:25","16","1652146","166.0","16:00:37","16:56:50","17.53","17.81","1708","17466486","17:03:00","18","186127288","1906","19:22:09","19:54:14","1m","1mb","1s,一方面是模拟耗时,另一方面是确保前面的","1。","1,不要使用魔法数字。","1,我们要删除所有的","1,错误输出文件描述符为","2","2)","2,","2.0,","2.0027m","2.1","2.2","2.3","2.4","2.5","2.6","2.60ghz","2.7","2.962","2.[]struct{}","2.channel","2.for","2.go","2.struct","2.代码行","2.作用","2.使用","2.使用场景","2.使用第三方","2.减少锁竞争","2.单一职责","2.原理","2.将","2.少量的重复不比反射差","2.拷贝法(不改原切片)","2.指定切片容量","2.空结构体的作用","2.编译期验证","2.返回值","2.避免在公共结构中嵌入类型","2.避免重复转换字符串到字节切片","2.错误包装","2.限制协程数量","2.非行内字符串拼接","2.项目布局","20","20%)","20%)。","20.95","2000}","2009","2022","2022/03/06","2022/03/27","20:37:02","20:37:03","20:37:04","20:37:05","21","21,","2124","2124237","2130706433","216.2","2165","21915","21952129","21:18:14","21:18:32","21:44:06","22","22176390","2242","2290372","22:12:52","22:19:54","22:23:35","22:37:19","22:45:54","233)","236.2","239.1","24","2406","2462","258662","27","27.40","2714158","27169","2724","2861","296","2^31","2^b","2k","2kb","2}","2。","2,从第","2,因此,必须空出","2,标准输入的文件描述符为","3","3)","3,","3.006","3.00ghz","3.0}[i","3.1","3.14","3.2","3.3","3.378","3.510","3.742","3.809","3.865","3.908","3.[]*struct","3.for","3.goroutin","3.不要在","3.优先使用共享锁而非互斥锁","3.使用","3.减少逃逸,将变量限制在栈上","3.协程池化","3.合理的","3.在边界处拷贝","3.如何使用","3.字符串","3.实现原理","3.小的拷贝好过引用","3.小结","3.性能差异","3.慎用","3.指定容器容量","3.移位法(修改原切片)","30.9523m","30079785","303693","30748495","30914","31543916","3161318","31663521","32","325194","3339","34,","359.9","36.39","3615","365","37.34","380626","38799","39.58","3s,确保所有操作执行完毕。","3。","4","4,","4.402","4.sync.pool","4.使用","4.使用示例","4.依赖管理","4.字符串拼接方式","4.小结","4.应用服务","4.性能对比","4.性能差异","4.枚举从","4.空结构与空数组对内存对齐的影响","4.返回值使用确定的类型","40.60","404","4124","423.7","432049","432386","43268738","44","46161","464974","485917","498673","4gb/2kb","4gb,那么至多允许","4。","4,因此,demo2","4,因此,必须空出","4,此时,内存已经是对齐的,从第","5","5,","5.097","5.427","5.[]struct{}","5.初始化","5.在标准库中的应用","5.小结","5.常用工具","5.注意事项","50","50%)","50%),rpct","50.78","5007","5043324","5076255","5194722","532350","534.8","535705","54.68","55,","55,89,","556436","56067","578.4","5}","6","6,","6.454","6.切片删除指定元素","6.错误处理","60","60079003","639","64","64)","65.07","665341896","66930670","670438965","692400","7","7,","7.注释","7032921","70638928","748467979","7520017","752077","762.1","773634","8","8,","8,7,6,9,5,4,3,1,2,0","8.命名","80","80%)","80%),rpct","800","8074","81.96","8192","8249469","832418","85.22","87.46","8728),也不在计算中考虑闰秒(issu","878246492","89,","893.6","9","9,8,7,6,5,4,3,2,0,1","9.532","9.流程控制","97.12","9700","9750h","978.2","997200n","99n","9}",":=",";","=","==","===","======begin",">",">=2","@","[1024]byte","[1024]byte,如果每次遍历","[1024]int","[4]","[]*item","[]byte)","[]data){}","[]float64{1.0,","[]int","[]int)","[]int,","[]interface{}{uint64(1),","[]int{1,","[]int{}","[]int。但如果迭代的元素较大,如一个包含很多属性的","[]item,都会进行一次值拷贝,所以带来了性能损耗。","[]string)","[]string{\"a\",","[]string{\"tom\",\"jerry\",\"spike\"}","[]struct","[]struct{","[]trip)","[]uint64","[]uint64,","[]uint64{1,","[capacity]int","[predeclar","[running]:","[style","_","_,","_config","_defaultfoo","_e","_type","```go","```shell","`fields`","`json:\"interval\"`","`json:\"intervalmillis\"`","`time.adddate`。但是,如果我们想保证某一时刻比前一时刻晚","`unknown","a)","a,","a...)","a[:0]","a[:j]","a[j]","abstractlist","abstractlist。相反,只需手动将方法写入具体的列表,委托给抽象列表的方法。","abstractlist,如果嵌入的类型是","accord","action","action.","add","add(","add(entity)","add(key","add1","add2","add=0,","add=1,","addarea","addarea(area","address","admin:","advic","ag","aliases)都必须有注释说明。","align","alive,","all\")","alloc","allocations.","allocs/op","allow","allowuserlogin","alreadi","amd64","ami","announc","ant","ants.newpool(10000)","ants,我们简单地使用其默认的协程池,直接将任务提交并发执行。默认协程池的缺省容量","any).","any.","api","apiclient、repoid、userid;","apiclient;","api,但又没有明确说明,既导致了模糊的文档,又泄露了","append","append()","append(nums,","append(s.areas,","append(t,","append(tgt,","append(tmp,","application)。","approxim","appvers","architectur","architectures.","area","area)","arg","args[0]","argument","arr","arr[4])","array","array'","arrayfibonacci","arrayfibonacci()","ask","assert.equal(t,","asset","assign","associ","assum","atom","atomic.bool","atomic.compareandswapuint32(&o.done,","atomic.loaduint32(&o.done)","atomic.storeuint32","atomic.storeuint32(&o.done,","atomic.swapint32(&f.running,","atomic.valu","avoid","awoken","a、b","b","b)","b,","b/op","ba","back","bad","bad:","bar","bar(&foo)","bar(foo)","bar(i","bar/testutil,后者导入","basic","baz","be","befor","believ","bench=.","bench=^benchmarkjoinstr","bench=benchmarkntohl.*","bench=benchmarkrang","bench=benchmarkret","bench=benchmarkslic","bench=benchmarkstringtobyt","bench=intslice$","bench=pointer$","benchmarkarray","benchmarkarray(b","benchmarkbuff","benchmarkbufferwithpool","benchmarkbufferwithpool(b","benchmarkconcurwritemapwithlock(b","benchmarkconwritemapnoshard(b","benchmarkdeleteslice1","benchmarkdeleteslice1(b","benchmarkdeleteslice2","benchmarkdeleteslice3","benchmarkdeleteslice4","benchmarkdeletesliceelm","benchmarkdeletesliceelms(b","benchmarkdeleteu64liceelm","benchmarkifc","benchmarkindexintslic","benchmarkindexpoint","benchmarkindexstructslic","benchmarkindexstructslice(b","benchmarkjoinstrwithbytesbuff","benchmarkjoinstrwithbyteslic","benchmarkjoinstrwithbytesliceprealloc","benchmarkjoinstrwithoper","benchmarkjoinstrwithoperator(b","benchmarkjoinstrwithsprintf","benchmarkjoinstrwithstringsbuild","benchmarkjoinstrwithstringsbuilderprealloc","benchmarkjoinstrwithstringsbuilderprealloc(b","benchmarkjoinstrwithstringsjoin","benchmarkjoinstrwithstringsjoin(b","benchmarkmutexreadmor","benchmarkmutexreadmore(b","benchmarkmutexrwequ","benchmarkmutexwritemor","benchmarkntohl","benchmarkntohl(b","benchmarkntohlnotusebinari","benchmarkrange1","benchmarkrange1(b","benchmarkrange2","benchmarkrangeindexstructslic","benchmarkrangeintslic","benchmarkrangepoint","benchmarkrangestructslic","benchmarkreadconfig","benchmarkreadconfigwithonc","benchmarkreadconfigwithonce(b","benchmarkretptr","benchmarkretvalu","benchmarkretvalue(b","benchmarkrwmutexreadmor","benchmarkrwmutexrwequ","benchmarkrwmutexwritemor","benchmarkslic","benchmarksliceescap","benchmarkslicenoescap","benchmarkstringtobyt","benchmarkstringtobyte(b","benchmarkstringtobyteonc","benchmarkwritewithlocklist(b","benchmem","bigcach","binari","binary.bigendian,","binary.read","binary.read(buf,","binary.writ","binary.write标准库","blank","blog","blue","bmap.overflow","bodi","bool","bool)","both","break","broadcast","broadcast()","broken\")","bucket","bucket.","buckets.","buckets;","buf","buffer","buffer,","bufferpool","build","builtin)","byte","byte[]","byteorder,","bytes","bytes.buff","bytes.newbuffer([]byte(req)))","bytes.newreader(bys)","c","c++","c++11","c,","c.","c.broadcast()","c.checker.check()","c.l","c.l.lock()","c.l.unlock()","c.l,因为","c.wait()","c/c++","ca","cach","cache、freecach","cal()","calccost(n","calccost(s.weights)","calcul","call","call)","call.","called,","caller","calls,","can't","cap","cap(p.buf)","cap)","capac","capacity)","captur","car","case","caus","cell","cfg.decode(data)","cfg.decode(data);","ch","chan","chang","channel","channel,在没有被接收的情况下,至多发送","channel,每个协程阻塞在一个","check","checker","cheney","ci","classesuid","close","close()","close(ch)","cloud","cmd","cmd/compile/internal/reflectdata/reflect.go.","cn.md。","code","code)","code,","coder","codeusing(f,","color.new(0x0000ff)","color.new(0x00ff00)","color.new(0xff0000)","comm","comma","command","comment","commit","common","compact","compiler'","complete.","complex","complex128","complex64","compose、kubernetes/helm、mesos、terraform、bosh)。注意,在一些存储库中(特别是使用","concretelist","concurr","concurwritemapwithlock","concurwritemapwithlock()","concurwritewithlocklist","concurwritewithlocklist(l","cond","cond)","condit","config","config\"","config.init(filename)","config.once.do(func()","consid","console.log(\"plugin","const","const,","constant","constants:","contain","context","context.context,","continu","continue,","conversion)","convert","conwritemapnoshard","conwritemapnoshard()","copi","copy(d.trips,","copy/copy.go","copy/copy.go:17:6:","copy/copy.go:18:11:","copy/copy.go:5:6:","copycheck","core(tm)","correctli","cost","cost()","cost,","cost.","count","count==0.","counter","cpu","cpu:","creat","createlargenumgoroutine(1000,","createlargenumgoroutine(10000,","createlargenumgoroutine(100000,","createlargenumgoroutine(num","cur","cur.next","cur.value)","custom","customer、wikipage、account、addressparser,它不应是动词。","cwd,","d","d)","d,","d.settrips(trips)","d.trip","dablelv@dablelv","darwin","darwin/amd64","data","data,","data:","database/sql、编码类型注册表等;","dataetl(ctx","data、info","data。data","datetim","dave","day","db.query(...)","db.query(.....)","db.query(v)","deadlock.","debug.setgcpercent(","deb、rpm、pkg","default:","defaultfoo()","default。","defer","defer。","defer,因为这可能会导致资源泄漏(poss","defer,因为释放资源不会尽可能早地发生(在每次迭代结束时),只有在","defer,资源将在不需要时被立即释放。","definition.","definition)和类型别名(typ","delay","delet","delete(key","delete(m,","delete(s,","deleteslice1","deleteslice1(a","deleteslice2","deleteslice2(a","deleteslice3","deleteslice3(a","deleteslice4","deleteslice4(a","deletesliceelm","deletesliceelms(i","deleteu64liceelm","deleteu64liceelms(i","demo1","demo1:","demo2","demo2:","demo3","demo4","demo4{}","demograph","deploy","descriptor)来访问文件,标准输出的文件描述符为","detail","differ","do()","do(),参数","do(f","do:","doc","docker","done","door","door\")","door)","door,在这种情况下,door","doslow(f","driven","dure","dynam","e.file)","e.path)","e.target.tagnam","each","echart","efac","effect","elast","elem","element","elm","else。","email","email:","encod","encoding/binari","encoding/json","encoding/json。以","encountered.","entity)","entri","enum","envvar","er","err","err)","err.error())","err:%v\",","errbrokenlink","errcouldnotopen","errgroup.group","errgroup.group{}","errgroup.group。","errnotfound","error","error\")","error()","error)","error.","error:","error:\"test\"`","errorcod","errormessag","errors,","errors.a","errors.as(err,","errors.i","errors.is(err,","errors.new","errors.new(\"an","errors.new(\"could","errors.new(\"link","errors.new(\"miss","errors.new(\"not","errors.new(fmt.sprintf(\"modul","errors.new,但对于后者,我们必须使用","error。","err。","escap","etc.","etldata(ctx","evacu","evacuated)","even","event.","exactli","exampl","example_test.go。","except","exception\")","exe.run()","exec","execut","execute.","execution,","extra","f","f()","f,","f.","f.close","f.close()","f.err","f.error","f.run","f.running.load()","f.running.swap(true)","f.stat()","f.str","f.string","fail","failures)的主要根源。如果发生错误,该函数应该返回错误,让调用方决定如何处理它。","faketim","fall","fals","false,","falsehood","fast","fewer","field","fields,","fields.close()","file","file\")","file)","file.chmod(0664)","file.chmod(0664);","file/socket","files,","file}","filterhandlermap","filtersomething(valu","finished.","first","first'","firstname:","flag","flagconfigfil","flagconfigfile1","flagconfigfile2","flagconfigfile3","flagconfigfile4","float32","float64","float64)","float64,","float64,并在字段名称中包含单位。","flow:","fmt","fmt.errorf","fmt.errorf(","fmt.errorf(\"db.queri","fmt.errorf(\"fil","fmt.errorf(\"modul","fmt.errorf(\"run","fmt.errorf(\"som","fmt.errorf。","fmt.fprintln(os.stderr,","fmt.fprintln({0x10c00e0,","fmt.printf","fmt.printf(\"%f\\n\",","fmt.printf(\"%s.\\n\",","fmt.printf(\"%v","fmt.printf(\"%v这里要空格%v\",","fmt.printf(\"gc","fmt.printf()的调用是非常频繁的,利用","fmt.println(\"======aft","fmt.println(\"======begin","fmt.println(\"clos","fmt.println(\"linux.\")","fmt.println(\"mac","fmt.println(\"open","fmt.println(&v)","fmt.println(...)","fmt.println(cfg)","fmt.println(err)","fmt.println(name,","fmt.println(ntohl([]byte{0x7f,","fmt.println(s.has(\"bar\"))","fmt.println(s.has(\"foo\"))","fmt.println(unsafe.sizeof(demo1{}))","fmt.println(unsafe.sizeof(demo2{}))","fmt.println(unsafe.sizeof(demo3{}))","fmt.println(unsafe.sizeof(demo4{}))","fmt.println(unsafe.sizeof(foo))","fmt.println(unsafe.sizeof(struct{}{}))","fmt.sprintf(\"%v\",","fmt.sprintf(\"/api/v3/projects/%s/merge_request/%s/commits\",","fmt.sprintf(\"fak","fmt.sprintf(\"fil","fmt.sprintf(\"resolv","fmt.sprintf(\"rsp","fmt.sprintf()","fmt2.少量的重复不比反射差3.慎用","fmt,因为前者性能更佳。","foo","foo()","foo(bar","foo(getids())","foo(ids)","foo(key","foo(m","foo(r","foo(rs);","foo)","foo.errcouldnotopen)","foo.open(\"testfile.txt\");","foo.open();","foo_test","foo{","foo{...}","foo。所以我们使用import","foo,让测试文件假装是包","foo:连接被拒绝”。","fork","format","format,","found\")","found\",","fprintf","fprintf()","fprintf(os.stdout,","fprintf(w","free","free()","freebsd,","frequent","fullnam","func","func()","func())","func(t","func(usernam","function","function(e){","functions.","functions:","futur","future.","g","gc","gcflags=","gcflags=\"","gener","genitem","genitems(n","genrandomintslic","genrandomintslice()","genrandomintslice(n","get()","get(k","getarea(r","getids()","getlength(r","getlinecount()","getmrcommitsuri()","geton","getone()","getslice(n","getuserinfobatch","getuserinfobatch(uid","git","git.code.oa.com/group/myrepo","gitbook该文章修订时间:","githook","github","github.com/astaxie/beego/orm","github.com/golang","github.com/ub","github.com/xxx/xxx。内部包是指不能被外部","github/dgryski/go","github/hashicorp/terraform/makefile。","give","give:","given","go","go.sum文件必须提交,不要添加到.gitignore规则中。","go.uber.org/atom","go/guid","go1.11","go1.17","go1.4","goarch:","godoc","goechart","gofmt","gofmt,如","goimport","goland","golang","golang内存分配逃逸分析","golang梦工厂","golang,目前官方团队并未提供权威规范。不过不用担心,我们依然有一个规范可以参考,那就是业界推崇的","golint","good","googl","goos:","gopath","gopath:","gopher","gopherzhang","gopher,想更好地管理","gorm、xorm","goroot","goroot:","gorouin","goroutin","goroutine.","goroutine。","goroutine。如果其他协程调用了","goroutine。当共享资源的状态发生变化时,sync.cond","goroutine。当共享资源的状态发生变化的时候,sync.cond","goroutine一定要梳理清楚","goroutine,必须在入口处捕获","goroutine,无需锁保护。","goroutine,无需锁保护。broadcast","goto","goto,其他框架或底层源码推荐尽量不用。","go语言最佳实践go","go语言的内存逃逸分析","go,以及第三方书籍","go,这应该是入门必读最佳读物。","grab","gracefully。","green","grow","grow:","guarante","guarantee:","guidelin","h","half","handl","handle(info)","handleerrormessage(error","handleerrormessage(msg","handler","hard","has(key","hasarea","hasarea(area","hash","hash0","hashmap","has,is,can","head","head.(*node)","header","headnode,","heap","heap:","held","helper","here","high","hint)","hiter.","hmap","hmap.buckets.","hmap.extra.oldoverflow.","hmap.extra.overflow","hmap.oldbuckets.","hold","host)","host,","hot","however,","html.","http","http.get(url)","http.handler","http.post(url,","http.responsewriter,","https://golang.org/issue/23199","https://proxy.golang.org","i.(string)","i/o","i/o)","i/o,包括文件系统、网络和系统调用。","i7","i]","iaas、paas、系统和容器编排部署配置和模板(dock","id","identifi","identifiers]","ifac","ifforrangeswitchreturngoto程序退出方式if","if。","if,是因为当前协程被唤醒时,条件不一定符合要求,需要再次","ignor","imag","immediately,","implement","import","in64(0)","inccounter()","inccountern()","inconsist","incorrect","incrnoverflow","index","index。如果使用","index,记录下一个有效元素应该在的位置。遍历所有元素,当遇到有效元素,将其移动到","indic","indirect","info","info,","init","init()","init()初始化","init(),当","initi","inlin","inline,","instanc","instead,","instruct","int","int(bar)","int)","int,","int16","int32","int64","int8","intel(r)","intend","interfac","interface{}","interface{})","interface{},","interface{}。","interface{},因此需要类型转换。","interface,而不是结构体,这将为开发人员提供更大的灵活性来改变未来,但仍然泄露了具体列表使用抽象实现的细节。","intern","internal/poll.(*fd).write(0xc0000ae060,","internal/poll.(*fd).writelock(...)","internal/poll.(*fdmutex).rwlock(0xc0000ae060,","internal,所有名为","interv","intervalmilli","int。","int,一个是类型是","invocation.","invok","io.reader,","io.writer,","io.writer,printf()","iota","ioutil.readall(f)","ioutil.readdir(\"./files\")","ioutil.readfile(","ioutil.readfile(name)","ioutil.readfile(name);","ip","is\"","isactive(now,","iscontinue,","isempty(","isloc","islocal,","iso","isrunning()","item","items)","j","j++","java","javascript","jeffail/tunni","jslint","json.unmarshal(buf,","jsoncontenttyp","json、orm","k","k,","k1:","k2:","k3:","kb","keep","key","key)","key.expired()","kubernet","l","l\"","l\",如果发生内联,那么将不会出现变量的逃逸,就不存在堆上分配内存与回收的操作了,二者将看不出性能差异。","l.","l.head","l.head,","l.head.compareandswap(head,","l.head.load()","l.head.load().(*node)","l.list.add(e)","l.list.remove(e)","l.mu.lock()","l.mu.unlock()","languag","largest","lastname:","later","layout","layout。","layout,给出布局建议。一个清晰的项目结构,能帮忙我们高效有序的管理与日俱增的业务代码。不会随着代码量的递增,项目代码变得凌乱而不堪入目。","leak,","len","len()","len(a))","len(args)","len(elms))","len(files))","len(i))","len(s)","len(s.counters))","len(str)","len(trips))","length","length,","less","level","limit","line","linecount","linecount,","linux","list","liter","live","loadconfig()","loadfactor","local","locat","location()","lock","lock()","lock)。在使用锁时,对获取锁的目的操作做了区分,一种是读操作,一种是写操作。因为同一时刻允许多个","locker","locker)","locker。因为","lockfreelist","lockfreelist)","log","log.fat","log.fatal(\"miss","log.fatal(err)","log.fatalf","log.printf(\"invalid","log.println(\"exec","log.println(\"hello,\",","log.println(debug.stack())","log_2","logger.errorf(\"num","logger.errorf(\"num:%d,","loghandl","loghandler)","loghandler{}","logoutput","logo,readm","logtofil","logtofile=1,","logtoremot","logtoremote=2","logtostdout","logtostdout=0,","long","loop:","loop)。","l}","l(互斥锁","m","m.data[k]","m.lock()","m.mutex.lock()","m.mutex.unlock()","m.unlock()","m0","m1","m2","m[\"key\"].(info)","m[f.name()]","m[i]","m[k1]","m[k2]","m[k3]","m[v]","m[v];","magic”。","main","main()","main.go","main.main","main.main.func1(0x0)","main.main.func2()","main/copi","main/mutex","main/onc","main/perf","main/pool","main/rang","main/reflect","main/slic","make","make()","make([]*item,","make([]byte,","make([]int)","make([]int,","make([]item,","make([]t,","make([]trip,","make([]uint64,","make(chan","make(map[int]int)","make(map[int]struct{})","make(map[int]struct{},","make(map[interface{}]struct{},","make(map[string]int,","make(map[string]os.fileinfo)","make(map[string]os.fileinfo,","make(map[string]string),","make(map[t1]t2)","make(map[t1]t2,","make(map[uint64]struct{},","make(set)","makefile(如果有的话)变得小而简单,例如","mani","map","map.","map[int]*s{1:","map[int]int","map[int]s{1:","map[string]int","map[string]interface{})","map[string]str","map[string]struct{}","map[t1]t2","map[t1]t2{","map[t1]t2{}","mapextra","maps.","map、slice、channel","map。","map。此时我们可以将每个协程拉取的结果写入到一个临时对象,这样便将并发地协程与同一个变量解绑,然后再将其汇聚到一起,这样便可以不用使用锁。即独立处理,然后合并。","map初始化","map,slice,chan,interfac","map,这样可以在初始化时指定元素。","mark","markdown","math","math.maxint32","math.maxint32。","mathemat","maximum","mayb","maybenewday","mb0","md5","mean","memori","method","method.","metrics.incrcounter(cntcachemisskey,","me,this,self","middlename:","mistak","mod","modifyuserinfo(user)","modul","modules。从","modules,我们并不需要","month","more","mrcommitsuri","msg","msg)","mu","mu.lock()","mu.rlock()","mu.runlock()","mu.unlock()","mu0","mu1","multipl","multipli","multiply=2","multiply=3","mutex","mutex,","mutex/rwmutex","mutex、lock","mutex,或读写锁","myerror","myerror{}","m查看编译器对上面两个函数的优化决策。","n","n\"","n)","n,","name","name:\\\"test\\\"\"","necessari","net.splithostport(\"192.0.2.0:8000\")","net.splithostport(\"192.0.2.0:http\")","net.splithostport(\"1:8\")","net.splithostport(\":8000\")","net.splithostport(tt.give)","net/url","nevacu","new","new(order.areaorder)","new(pp)","new(student)","new(sync.mutex)","new(t)","new:","newattrmodel(ctx","newcond","newcond(l","newday","newpool","newprint","newprinter()","newsigner()","newsmap()","newsomething()","newtattrmodel","next","next:","nextoverflow","nil","niladic,","nil。","nil,但是满足其他逻辑进入到","nil,另一个不是),并且在不同的情况下(例如序列化),这两个切片的处理方式可能不同。","nil;对于结构类型是空结构。","nocopi","node","non","normal","note:","notfound","notfounderror","notifi","notifylist","notifylist.wait、notifylist.notifi","notifylist。如果这个队列被复制的话,那么就在并发场景下导致不同","noverflow","now","now)","now:","ns/op","ntohl","ntohl()","ntohl(bi","ntohlnotusebinary(bi","num","num)","num,","number","number)","number)}:","n禁用了编译器对切片遍历的优化。如果没有该选项,那么上面三种遍历方式没有性能差别。","o.don","o.done,在热路径上是比较好理解的。如果","o.doslow(f)","o.m.lock()","o.m.unlock()","object","observ","obtain","occurr","offici","offset)","offset)。在机器码中,偏移量是随指令传递的附加值,cpu","ok","ok。","oldbucket","oldoverflow","oldtimenow","on","onc","once.","once.do(f)","once.do(func()","one.","op","open\")","open()","open(fil","openapi","openbsd,","oper","operand","opmapwithmutex","opmapwithmutex(rpct","opmapwithrwmutex","opmapwithrwmutex(rpct","option","optohandl","or,","order","os","os\")","os)","os.(*file).write(...)","os.(*file).write(0xc0000ac008,","os.args[1:]","os.exit(1)","os.getenv(\"gopath\"),","os.getenv(\"goroot\"),","os.getwd()","os.open(name)","os.stdout,相当于直接输出到标准输出。这里的","out","outlin","output","output.","overflow","p","p,","p.count","p.doprintf(format,","p.error","p.fmt.init(&p.buf)","p.free()","p.lock()","p.panick","p.processunity()","p.wraperr","packag","packages/)。","packages]","page","panic","panic(\"an","panic(\"nil","panic(\"unknown","panic(44)","panic/recov","panic:","paniclinesparsing(){}","panics,","panic。","panic。因为","panic。因此,请始终使用","panic。每个自行启动的","panic,因为这样可以记录错误的同时结束程序,方便排查问题。","panic,并打印详细堆栈信息或进行其它处理。","panic,建议使用","panjf2000/ant","parent1","parent1()","parent2","parent2()","parsepaniclines(){}","pass","path","path.","path.join(cwd,","pathkey","pathkey:","path”","path)是程序非常频繁执行的一系列指令,sync.onc","path,即热点路径,顾名思义,是你的程序中那些会频繁执行到的代码。","per","perfbook","perform","performed.","pi","pkg","pkg:","place","plan9,","point","pointer","pointer.","pointers.","poll(10)","poll(10*time.second)","poll(delay","pool","pool.","popup....\");document.onclick","port)","port,","power","pp","ppfree","ppfree.get().(*pp)","ppfree;","present","previou","print","printer'","printf","printf()","printf(format","printinfo(\"foo\",","printinfo(nam","println","process(v)","processor","program","programm","progress","project","proper","properti","proverb","provid","pr,它将会变得更好。","public","public。为了保持向后兼容性,外部类型的每个未来版本都必须保留嵌入类型;","public,那么字段是","push","push(v","put()","question","r","race!","rand.seed(time.now().unixnano())","rang","range。二者在功能上没有区别,但在性能上会有区别吗?","range,建议只迭代下标,通过下标访问元素,这种使用方式和","range,有时候甚至会有上千倍的性能差异。对于这种场景,建议使用","raw,","reactor","read","read(\"reader1\",","read(\"reader2\",","read(\"reader3\",","read()","read(nam","read(p","read(r","readabl","readconfig","readconfig()","readconfigwithonce()","reader","reader1","reader2","reader3","readers,","reader,writer。","reading\")","readm","readme.md","readme_zh","readme,相得益彰。","read。","read,也可以调用","real","receiv","record","recov","recover()","recover();","recover。","recover,很容易发生","red","reflect","reflect.makeslice(reflect.typeof(i),","reflect.valueof(i)","region","region,","remark","remove(","remove(entity)","rendezv","requir","require.noerror(t,","required\")","res,","res.ret","resolveerror","resourc","resp,","resp.body.close()","result","result[k]","resum","resumes,","ret","ret,","retcod","retptr()","return","returned;","returning.","returns,","returns.","return。","retvalue()","reus","review","rfc","rlock()","rlocker()","rows.next()","rpct","rpc、db","rsp,","run","run()","run();","run(arg","run(os.args[1:])","run(os.args[1:]);","rune","runlock()","running…","runtim","runtime.gc()","runtime.gomaxprocs(1)","runtime.goos;","runtime.hmap:","runtime.slice:","runtime_notifylistadd(&c.notify)","runtime_notifylistnotifyall(&c.notify)","runtime_notifylistnotifyone(&c.notify)","runtime_notifylistwait(&c.notify,","rwmutex),当修改条件或者调用","s","s)","s,","s.add(\"bar\")","s.add(\"foo\")","s.area","s.areaorders[area]","s.counter","s.data","s.hasarea(area)","s.lock()","s.mu.lock()","s.mu.unlock()","s.now","s.now()","s.sign(give))","s.unlock()","s1","s1)","s1,","s1ptr","s1val","s1{}","s2","s2,","s2ptr","s2val","s2{}","s3","s[key]","same","save","scan","scheme","script","second","see","seed","select","servehttp(w","set","set)","settrips(trip","set。","set)、add、del、clear、contain","sign(give))","sign(msg","sign.go","sign_test.go","signal","signal()","signal.","signer","signwithtime(msg,","simultan","singl","site.","size","size(v","size)","size,","size)为单位访问。如","slice","sliceescap","sliceescape()","slicefibonacci","slicefibonacci()","slicefibonacci()函数中分配的局部变量切片因为要返回到函数外部,所以发生了逃逸,需要在堆上申请内存空间。从测试也过也可以看出,arrayfibonacci()函数没有内存分配,完全在栈上完成数组的创建。这里说明了对于一些短小的对象,栈上复制的成本远小于在堆上分配和回收的成本。","sliceindex","slice。","slice申明变量避免使用","slice,但是共用原始","slice,因为重复的切片初始化会带来性能损耗。相反,请执行一次转换并捕获结果。","slice,将要删除的元素过滤掉。缺点是需要开辟另一个","slice,这意味着,","slow","smap","snapshot","snapshot()","socket","somefixedtim","someth","spa(singl","specif","specifi","specification。","split()","splitn()。","sptr","sptr.name","sptrs[1].read()","sptrs[1].write(\"test\")","sql","src","src/runtime/map.go","src/runtime/runtime2.go里面,我们可以找到","src/runtime/slice.go","srverr.errareaconflict","st","stackoverflow","stackoverflow。","standard","standards/project","start","start()","start([]byte)","start,","stat","state","static","stats.snapshot()","statu","status)","status=","statusdon","statusinprogress","statusreadi","stay","stefno","stop","stop()","storageclass","store","store.new()","store:","str","strconv","string","string()","string)","string,","string.builder也提供了预分配内存的方式","struct","struct,","struct{","struct{}","struct{})","struct{},","struct{}{}","struct。","struct初始化","stu","stu)","student","studentpool","studentpool.get().(*student)","studentpool.put(stu)","subtract","subtract=1,","subtract=2,","such","sum","supervisord)配置。","sure","suspend","sval","svals[1]","svals[1].read()","svals[1].write(\"test\")","swagger","switch","sync","sync.cach","sync.cond","sync.cond?","sync.mutex","sync.mutex3.2","sync.mutex{}","sync.newcond(&sync.mutex{})","sync.onc","sync.once?","sync.pool","sync.pool{","sync.pool。","sync.pool,例如","sync.rwmutex","sync.rwmutex3.3","sync.rwmutex{}","sync.waitgroup","sync.waitgroup。","sync/atom","syscal","systems,","sysv)和进程管理(runit,","t","t)","t,","t.add(24","t.adddate(0","t.run(tt.give,","tab","tag","templat","test","testexample。","testsign(t","testsigner(t","testsplithostport(t","textual","tgithost","tgt","third_parti","time","time.dur","time.duration)","time.duration,因此该单位包含在字段的名称中。","time.format","time.hour)","time.millisecond)","time.now","time.now()","time.now,","time.pars","time.parsedur","time.rfc3339","time.second)","time.second,不要使用","time.since(t)","time.sleep(1","time.sleep(delay)","time.sleep(time.duration(delay)","time.sleep(time.microsecond)","time.sleep(time.second","time.sleep(time.second)","time.tim","time.time,在比较、添加或减去时间时使用","time.time,如果底层驱动程序支持则返回;","time.unmarshaljson","timenow","timenow()","times,","timestamp","time。","tmp","to\"之类的短语来保持上下文简洁,当错误通过堆栈向上传递时,它会一层一层被堆积起来:","to/for。","todo","tool","top","total","tour","trip","trips)","trips[0]","trips[0],但不会影响","true","true)","true,","true}","true。","true,调用","tt","tt.wanthost,","tt.wantport,","two","type","type.","type:","types:","typic","t{name:","u","uid","uidarray","uidslic","uidsliceslic","uint","uint16","uint32","uint32(bys[2])","uint32(bys[3])","uint64","uint64(3),","uint64(5),","uint64(7),","uint64(9)}","uint8","uintptr","ui。","unknownregion","unless","unlik","unlock","unlock()","unsafe.alignof","unsafe.alignof(x)","unsafe.alignof(x.f)","unsafe.alignof(x.f),unsafe.alignof(x)","unsafe.point","unsafe.sizeof","until","up","upstart,","urlarray","urlarray;","urlkey","urlkey:","us","usag","use.","user","username)","username:","user{","user{\"john\",","user{}","util","util、common、misc、global。packag","v","v)","v+1","v+1)","v,","v.call();","v.f1","v.len())","v.send()","v1","v1,","v2","v2,","v3","v3,","v:","val","valu","value:","var","variabl","variable,","varint","var。","var的后面。","vendor","verb","verifyflow)","version","vet","vet之类的工具会正确地指出这些和其他情况下的隐式问题。","volum","vs","vs.","w","w.","w.write(p.buf)","wait","wait()","wait(),处于等待状态。main","wake","want","want,","want:","wanterror","wanthost","wanthost:","wantport","wantport:","watcher","web","websit","wg","wg.add(num)","wg.wait()","whether","wiki","wikipedia","window","window.open(e.target.src,e.target.src)}img{cursor:pointer}","windows...","winner","wirt","withlocklist","withlocklist)","without","words,","work======","work======\")","worker(ch","workshop","write","write(\"writer\",","write()","write(nam","write(str","write(w","writer","write。","writing\")","written","w。data","x","x,","xx.close()可以不用显式处理。","xxx.pb.go,gotest","xxx:","xxx_test.go","x,unsafe.alignof(x)","x,计算","y","y,","yaml.unmarshal(raw,","ye","year","zero","{","{\"a\"}}","{\"interval\":","{\"intervalmillis\":","{...}","{0xc12cadf690,","{0xc12ea62f90,","{add,","{give:","{heap}","{subtract,","{}","|","||","}","}()","})","},","}{","~","“hot","、go","。","一个函数内不应该混杂多个实现细节,需要将独立的逻辑封装成函数。","一个函数只负责一个职责。","一个可能引发的问题就是","一个文件中出现多个结构体时,需要注意观察是否有重复的成员。","一个结构体中,成员较多,且多个成员有明显关联关系,需要封装新的结构体。","一份。","一分钟有","一句话总结:用来保存和复用临时对象,减少内存分配,降低","一周有","一天有","一小时有","一年","一旦有错误发生,马上返回。","一次循环尽量只做一件事,不用担心多次循环。","一种是不含任何方法的空接口runtime.eface:","一种是带有一组方法的接口runtime.iface:","一般情况下,对于需要修改原对象,或占用内存比较大的对象,返回指针。对于只读或占用内存较小的对象,返回值能够获得更好的性能。","一般来说,有如下几种情况:","一行代码不要超过120列,超过的情况,使用合理的方法换行。","一起使用。","三个以上函数的接口名,类似于结构体名。","上例中创建了缓冲区大小为","上的包要确认活跃度,不知名的包可能会被下架或出现不兼容的版本升级情况,必要情况下可","上进行修改。","上面的例子只是简单地限制了协程开辟的数量。在此基础之上,基于对象复用的思想,我们可以重复利用已开辟的协程,避免协程的重复创建销毁,达到池化的效果。","上面的分析目的是为了尽可能地量化","上面的实现有几点需要注意一下:","上面这三条是编译器对接口的检查机制,","上,由接收数据的协程在数据接收完毕后,逐个通知。总之,需要额外的复杂度来完成这件事。","上,那么其对性能的影响将被放大。这里解释下","下标时,性能比","下面代码无法通过编译,因为","下面以","下面以一个简单的示例来看下二者的性能差异。","下面以我们熟知的","下面再看一下链表","下面是一个反面示例,其他","下面看一下","下面看一下二者的性能对比。","下面看一下性能对比。","下面看下二者的性能对比。","下面看下二者的性能差异。","下面看下剥去反射前后二者的性能差异。","下面,就像不应该拥有","不仅易用,也很易学,这得益于与之匹配的丰富学习资料。go","不再受互斥锁保护,可能会引发并发读写的错误","不分片写入一个","不发送数据的信道","不发送数据的信道2.3","不可避免时,init()","不同。map","不同,slice","不存在。如果不允许部分失败,使用","不应该拥有的目录","不应该拥有的目录/src3.小结参考文献1.前言","不建议使用","不必要的","不必要的空行","不支持","不是一个提示:编译器将为提供给","不是基于代码块的,而是基于函数的。你在循环中分配资源,那么不应该简单地使用","不是错误处理的合适策略,仅当发生不可恢复的异常(如","不用复数。如","不管是什么语言,开发什么项目,一个稍大的项目,必然要面临如何管理项目结构布局的问题,因为一个简洁清晰的布局是项目可读的关键。","不管是全局切片还是局部切片,使用","不能满足这些要求的代码可能要在","不能被复制","不能被复制的原因,并不是因为其内部嵌套了","不要传递指针。","不要使用2/4来表达英文","不要使用双重否定。","不要使用大而全的无意义包名。","不要使用字符串表示","不要使用相对路径导入内部包,应该使用完整的路径引入包。","不要包装系统调用错误,并给出一些没意义的附加信息。","不要反复从固定字符串创建字节","不要在该目录下放太多的代码,如果代码可以被其他项目导入使用,请放到","不要添加没必要的括号。","不要用宽泛、无意义的名字,如:","不要用注释删除代码。","不要轻易使用别名。","不要返回多个用于控制流程的状态。","不要这样使用","不要随便","不需要发送任何的数据,只用来通知子协程(goroutine)执行任务,或只用来控制协程的并发。这种情况下,使用空结构体作为占位符就非常合适了。","与","且","且预先分配容量的拼接方式性能最佳。","业务代码禁止使用","两个函数的接口名综合两个函数名。","个","个任务,达到了协程并发控制的目的。","个位置开始占据","个协程同时存在。那如果协程中还存在着其他需要分配内存的操作,那么允许并发执行的协程将会数量级地减少。","个协程并发写入","个协程并发写入链表","个协程的并发,2^31","个字节的数据,一次读取","个字节那么只需要读取","个字节,cpu","个字节,偏移量才是","个字节,那假设","个或更少的字段,则可以在测试表中省略字段名称。","个数字。","个数的增多而线性扩展。很多语言都提供","个消息则被阻塞。开启协程前,调用ch","个等待条件变量","个,如果超过,请封装成新的类型。","个,或有相同类型的返回值,或者从上下文中不清楚返回值的含义,使用命名返回,其它情况不建议使用命名返回。","中","中。","中一节","中使用。","中使用,一般用来捕获程序运行期间发生异常抛出的","中保证了","中元素时,性能非常差。","中内置一个","中可勾选","中定义的格式时间戳。默认情况下,time.unmarshaltext","中引用的图片等。","中执行。","中无法捕获当前","中有一百万条数据,就会浪费","中比较特殊。没有任何字段的空","中的","中的代码,作为项目的主应用目录。目录也可以包含多个可执行文件,子目录名称一般与可执行文件相对应(如:/cmd/myapp","中的变量只要被引用就一直会存活,存储在堆上还是栈上由","中的字节数。","中的方法。","中的暂停了","中空结构体","中空结构体仍占用","中英文之间应该有空格。","中调用才会生效。","中退出程序且只退出一次。","中需要使用","中,因为","中,因为它使用","中,我们可以使用","中,而应用的共享代码可以放在","丰富的示例将帮助用户更加便捷快速的了解上手一个项目,再加上","串行无锁","串行无锁2.减少锁竞争3.优先使用共享锁而非互斥锁3.1","串行无锁是一种思想,就是避免对共享资源的并发访问,改为每个并发操作访问自己独占的资源,达到串行访问资源的效果,来避免使用锁。不同的场景有不同的实现方式。比如网络","为","为了模拟上面的情况,简单地写个示例程序,对比下性能。","为什么可以这样,因为接口实质上在底层用两个字段表示:","为什么常识性的认知是错误的呢?因为地球自转的不均匀性和长期变慢性,会存在时间修正的情况,比如闰秒,闰年等。","为什么性能上会有两倍多的差距,因为","为什么放在第一个字段就能够减少指令呢?因为结构体第一个字段的地址和结构体的指针是相同的,如果是第一个字段,直接对结构体的指针解引用即可。如果是其他的字段,除了结构体指针外,还需要计算与第一个值的偏移(calcul","为什么是第一个字段。","为什么是第一个字段?","为什么是第一个字段?3.性能差异1.简介","为什么编译器会对上面的测试代码进行优化呢?因为代码实际上只取最后一个切片元素的值,所以前面的循环操作可以跳过,这样便带来性能的提升。如果是下面的代码,那么编器将无法优化,必须遍历拷贝所有元素。","为你的错误添加上下文,","为例。","为例给出具体实现。","为例,简单介绍其使用。","为并发而生。goroutin","为读操作占比。","为零。任何其他尺寸都必须经过严格的审查,而不是拍脑袋给出一个大致的值。我们需要考虑如何确定大小,什么原因会导致","主体风格占位符主体风格","主要原因是","主调对条件的检查,使用了","之势。","之外使用函数调用的结果,则不应尝试缩小范围。","之间操作的","也是不错的选择。","了。","事实上可以用任何的数据结构替代。","二维切片或数组。","互动勘误","互斥锁","互斥锁的作用是保证共享资源同一时刻只能被一个","产生模糊的接口文档指","亿个,每个协程内部几乎没有做什么事情。正常的情况下呢,这个程序会乱序输出","仅包含方法的结构体","仅包含方法的结构体1.不占内存空间","仅在","仅将相关的声明放在一组。不要将不相关的声明放在一组。","仅提供了一个导出方法","从","从函数名开始算第一层,当函数的嵌套深度超过4层,往往会导致圈复杂度过高,函数变得复杂不可读,我们可以通过拆分函数的方式来减少嵌套深度。","从切片中过滤指定元素。注意:不修改原切片。","从前文可知,可取址的值可以调用接收器为指针的方法,但这里为何不能将值","从基准测试结果来看,性能最佳的方法是移位法,其中又属第一种实现方式较佳。性能最差的也是最常用的方法是截取法。随着切片长度的增加,上面四种删除方式的性能差异会愈加明显。","从字段","从性能出发,兼顾实现的便捷与代码可读性,如果待拼接的字符串不涉及类型转换且数量较少(fmt.sprintf()。","从日志中可以很容易看到,每秒钟只并发执行了","从测试结果可以看出,对数组的拷贝性能却比使用切片要好。为什么会这样呢?","从等待队列中按照顺序唤醒,先进入等待队列,先被唤醒。","从结构化二进制数据","从结果可以看出,strings.join()、strings.builder、bytes.buffer和byte[]","从输出结果可以看到,使用变量(非常量)来指定切片的容量,会导致切片发生逃逸,影响性能。指定切片的长度时也是一样的,尽可能使用常量或数值字面量。","从这个例子可以看到,内存对齐对实现变量的原子性操作也是有好处的。每次内存访问是原子的,如果变量的大小不超过字长,那么内存对齐后,对该变量的访问就是原子的,这个特性在并发场景下至关重要。","代码与官方推荐的格式保持一致,于是所有格式有关问题,都以","代码也可以优先处理条件不满足或错误的情况,尽早返回或继续循环来减少嵌套。","代码即注释","代码必须用","代码生成工具自动生成的代码可排除此规则(如协议生成文件","代码的稳健、可读和高效是我们每一个位","代码目录","代码目录/cmd/internal/pkg/vendor2.3","代码风格","代码,想写出更加高效易读的","代码,想让自己拥有一个更好的编码风格,","以","以一个简单的示例,通过对map[uint64]struct{}分片前后并发写入的对比,来看下减少锁竞争带来的性能提升。","以上仅列出了部分变量发生逃逸的情形。实际上,go","以上必须使用","以后,go","以外类型的切片进行过滤,拷贝一次代码又何妨呢?可以肯定的是,绝大部份场景,根本不会对所有类型的切片进行过滤,那么反射带来好处我们并没有充分享受,但却要为其带来的性能成本买单。","们努力的结果。此项目布局是通用的,建议并非强制,当然我们最好遵守,因为这能让我的项目布局看起来更加规范,易于交流和维护。","优先使用","优化后的版本的性能测试结果如下。可以看出相较于不预先分配空间的方式,性能提升了很多。","优秀的本地缓存组件","优雅地处理错误。","会一直阻塞。","会将主调加入条件变量的通知列表,需要修改条件变量,所以主调在调用","会自动添加依赖的包,并移除未引用的包。把依赖包按字母序升序排列,并对包进行分组管理。通过空行隔开,默认分为标准库包和非标准库包(第三方包和内部包)。","会自动释放锁","传的是","传输协议。","但我们仍然可以在的包内将其和","位的","作为","作为一门追求高性能的后台编程语言,当然也不例外。","作为下标不留空格","作为他们的模块代理服务器)。使用","作为依赖管理的项目不要提交","作为入参不要留空格","作为其他","作为其他结构体一个字段时,应该使用值而不是指针。即使该结构体不被导出,也不要直接把","作为函数参数传入时,如果您存储了对它们的引用,则用户可以对其进行修改。","作为函数的值返回,必须对","作为函数返回值且有多个返回值的时候,error","作为后缀,如","作为结构体最后一个字段时,需要内存对齐。因为如果有指针指向该字段,返回的地址将在结构体之外,如果此指针一直存活不释放对应的内存,就会有内存泄露的问题(该内存不因结构体释放而释放)。","作为输入参数或者数组下标时,运算符和操作数之间不需要空格,紧凑展示。","作为集合(set)使用时,可以将值类型定义为空结构体,仅作为占位符使用即可。","作用域内隐式覆盖","作用域较大的名字(全局变量),不要使用缩写,要有明确的意义。","作用域较小的名字(局部变量/函数参数),尽量使用简短的名字。","作用域隐藏内置","你只能通过值调用","你实际的代码可以放在","你是要修改","你的项目结构布局看起来应该像下面这个样子。","你还可以在","使用","使用make()初始化,并指定容量。","使用os.exit或者log.fatal*退出程序,而不是panic。","使用了","使用互斥锁读写","使用值接收器的方法既可以通过值调用,也可以通过指针调用。带指针接收器的方法只能通过指针或","使用制表符进行缩进,使用空白符进行对齐。","使用反射并且很慢。如果有需要用到这两个函数的地方,我们应该手动实现这两个函数的相关功能,而不是直接去使用它们。","使用字段名初始化结构体。","使用此格式,并可通过","使用表驱动的方式编写用例,代码看上去会更简洁。","使用读写锁读写","例外场景:","例外,如果是相似的一组变量,请使用","例外:在字段名提供有意义上下文的地方可以显示指定零值。如表驱动单元测试中的测试用例,即使字段为零值,限制指定零值,通过字段名可清晰地表达用例的含义。","例外:如果","例外:如果有","例如,使用errors.new表示带有静态字符串的错误。如果调用者需要匹配并处理此错误,则将此错误导出为变量以支持将其与errors.is匹配。","例如,在一个时间点上加上","例如,由于","依旧可以继续使用。这可能就是“全能”与“专精”的区别。","依赖规范import","保持","保证","保证函数只会被执行一次和多次执行,二者的性能差异。","信息是否符合规范。","倍(1600","值传递会拷贝整个对象,而指针传递只会拷贝地址,指向的对象是同一个。传指针可以减少值的拷贝,但是会导致内存分配逃逸到堆中,增加垃圾回收(gc)的负担。在对象频繁创建和删除的场景下,返回指针导致的","值好很多。从这里我们应该能够知道二者性能差别之大的原因。","值将引发","假设您使用共享的","假设我们有一个“学生”结构体,并复用改结构体对象。","假设我们的切片有","做一个二次判断,来保证任务函数只会被执行一次,done","做了说明,因为接收器为指针的方法会修改接受器,为了避免产生这种错误的行为,便禁止将值赋给和指针接收器方法集匹配的接口。","充当条件变量实现","先看下其性能测试的对比。","入参","入参&返回值成员函数局部变量defer减少嵌套(圈复杂度)魔法字面量函数分组与顺序入参&返回值","入参和返回值个数均不能超过","入参和返回值均以小写字母开头。","入参和返回值顺序根据关联性排在一起。","全局变量使用","全局变量申明使用","全局量中不要包含格式化字符,否则必然违反就近原则。","公有库代码(外部项目可以使用)","公有库代码(外部项目可以使用)。","关于项目的设计文档,用户的使用文档等(除了","关键字并省略类型。","关键字申明,一般情况下其类型与表达式的类型一致,这种情况下可省略其类型。","关闭gc改为手动执行","其中函数","其中数字与字节序列的转换可以用如下三个函数:","其他","其他情况都应该使用该名词原有的写法,如","其他目录","其他目录/docs/tools/examples/third_party/githooks/assets/website2.7","具体可以看下","内存对齐前变量","内存对齐规则","内存对齐规则3.合理的","内存开销","内容简介","内部包","内部实现决定而和具体的语法没有关系。","内部是维护着一个","内部维护了一个等待队列,队列中存放的是所有在等待这个","写入到","写出更优质的代码。","写并发程序的时候随便起个成千上万的","写锁与读锁是互斥的,如果存在读锁,写锁阻塞,如果存在写锁,读锁阻塞。","写锁之间是互斥的,存在写锁,其他写锁阻塞。","减少嵌套(圈复杂度)","凡事无绝对,某些情况下,init()","出现状态/类型等字眼时,需要使用枚举。","函数","函数。","函数中定义的局部变量切片逃逸到了堆。","函数中被调用(或程序生命周期中的其他地方),或作为","函数中调用os.exit或log.fatal*且只调用一次。如果有多个错误场景停止程序执行,请将该逻辑放在单独的函数并从中返回错误。","函数中,通过对成员变量","函数为例,看看","函数之间的关系可能会使代码变得脆弱和容易出错;","函数体第一行不要换行。","函数信息描述\"。","函数分组与顺序","函数创建。","函数前,需要先获得条件变量的成员锁,原因是需要互斥地变更条件变量的等待队列。在","函数即可。对象池中没有对象时,将会调用","函数名","函数名必须遵循驼峰式,首字母根据访问控制决定使用大写或小写。","函数命名","函数均可内联。slicefibonacci()","函数将","函数应按粗略的调用顺序排序。","函数应该以动词开头。","函数应该放在","函数引起的,fmt.printf","函数才会被执行。这带来的后果就是,如果迭代次数过多,那么可能导致资源长时间得不到释放,造成泄漏。","函数是当所在的","函数最后暂停了","函数本身的一部分。特别是打算给其他程序使用的库应该特别注意代码行为的完全确定性,","函数注释","函数用于生成指定长度元素类型为","函数的参数是一个","函数的顺序或副作用。虽然","函数直接注入到使用方","函数类似,但有区别。","函数而不是字面量,因为这样看起来更容易和申明区分开来。","函数调用中意义不明确的实参可能会损害代码可读性。当参数名称的含义不明显时,请为参数添加","函数调用和对调用结果的处理,是紧密相连的,不能加空行。","函数进行资源的释放。","函数长度不能超过","函数,调用","分支时,很容易遗忘","分组等其他规范细节和普通文件保持一致。","分钟","切片","切片元素从结构体","切片是有效的切片,但它不等于长度为","切片过滤掉指定的元素。","切片,代码会更加简洁清晰。","列转换为","则不存在拷贝。","则是在对象使用完毕后,放回到对象池。","则阻塞等待。","则需要以","创建","创建。","创建了一个","创建新切片,过滤掉指定元素。","初始化","初始化信息","初始化信息。","初始化函数仅执行了一次,避免了多次重复初始化,在并发环境下很有用。","初始化切片时提供容量信息,特别是在追加切片时。","初始化的时候提供容量信息。","初始化结构指针变量使用字面量","初始化结构指针变量时,请使用&t{}代替new(t),可以与结构体初始化在代码风格上保持一致。","删除切片指定元素一般有如下几种方法,本文以","删除指定元素。","判断字符串是否为空,这样更加直观。","判断是否有错误发生之后,再","判断条件较为复杂时,考虑封装成函数。","利用","利用一个下标","利用反射,我们可以实现一个类型泛化支持扩展的切片过滤函数。","利用硬件支持的原子操作可以实现无锁的数据结构,原子操作可以在","前有一段注释,说明了done","前缀)。","前要加锁","前言","前都应该被删除,除非添加注释讲解为什么不删除,","前需要对条件变量进行上锁,主调加入条件变量的通知列表后再解锁。","前面的例子过于极端,一般情况下程序也不会无限开辟协程,旨在说明协程数量是有限制的,不能无限开辟。","功能实践","功能设计","加一。最终","加写锁","加密传输协议","加读锁","加锁","加锁是为了避免在并发环境下,同时访问共享资源产生的安全问题。那么,在并发环境下,是否必须加锁?答案是否定的。并非所有的并发都需要加锁。适当地降低锁的粒度,甚至采用无锁化的设计,更能提升并发能力。","加锁,并且继续执行","包","包&文件","包下的一个组件,可以作为保存临时取还对象的一个“池子”。个人觉得它的名字有一定的误导性,因为","包不支持解析闰秒时间戳(issu","包两种接口类型的定义。","包中使用","包中程序初始化是一个例外,如程序启动时,文件无法打开或数据库无法连接导致程序无法正常运行可使用","包为例,我们看下其是如何使用","包信息描述。","包名","包名和","包名应该为小写单词,不要使用下划线或者混合大小写,使用多级目录来划分层级。","包名谨慎使用缩写。当缩写是程序员广泛熟知的词时,可以使用缩写。例如:","包含了指向底层数据的指针,因此在需要复制它们时要特别注意。","包含固定的元素列表,则使用字面量初始化","包命名","包和","包处理时间","包如何实现。","包如果有多个","包实现了数字和字节序列之间的简单转换以及","包注释","包的原子操作对基本类型","包的性能相较于针对具体类型实现的版本,性能差异非常大。","包针对大端字节序将字节序列转为","包,因为它有助于以更安全、更准确的方式处理这些不正确的假设。","匹配。","协程池化,我们可以自己写一个协程池,但不推荐这么做。因为已经有成熟的开源库可供使用,无需再重复造轮子。目前有很多第三方库实现了协程池,可以很方便地用来控制协程的并发数量,比较受欢迎的有:","协程的代价","协程的代价2.2","协程调用","协程都执行到","单个函数的接口名以","单元测试文件名命名规范为","单函数圈复杂度最大值","单测文件行数限制是普通文件的","博客园","占位符","占据的内存空间大小为","占据空间一致,而","占用了,其他的","占用,一个","即使嵌入兼容的抽象列表","即可。可参考标准库包的","即多个","压力。","压力)。","原切片长度为","原则。","原子操作(如","去执行另外一个协程,下面看一下协程之间切换的耗时。","参考","参考文献","又如","又没有明确说明,会产生模糊的接口文档。","及其方法是","发生逃逸,在堆上申请切片","取址。","变量仅初始化一次,初始化完成后驻留在内存里。","变量初始化过程中,所有读都被阻塞,直到初始化完成;","变量名","变量和常量注释","变量大小不确定(如","变量申明的位置尽量靠近使用的地方。","变量的值只需要一次访存。","变量的值需要两次访存,第一次访存得到前一个字节,第二次得到后两个字节。内存对齐后","变量较大(栈空间不足)","另外请参考:don't","另外,分组使用的位置没有限制,我们也可以在函数内部使用它们。","只会被修改一次。","只唤醒任意","只有一个源文件的包,包名应该和文件名保持一致。","只有在","只能在当前","只能用于测试文件,且必须是为了解决循环依赖,才能使用。","只能简单地完成字符串之间的拼接,非字符串类型的变量需要单独做类型转换。行内拼接字符串不会产生内存分配,也不涉及类型地动态转换,所以性能上优于fmt.sprintf()。","只设置一个","只遍历","可以利用信道","可以在代码的任意位置初始化和调用,因此可以延迟到使用时再执行,并发场景下是线程安全的。","可以实现,看起来代码更加简洁,那么","可以将暂时不用的对象缓存起来,待下次需要的时候直接使用,不用再次经过内存分配,复用对象的内存,减轻","可以用来唤醒一个或所有因等待条件变量而阻塞的","可以用来通知等待条件发生而阻塞的","可以用来通知被阻塞的","可以看出无锁版本比有锁版本性能高一些。","可以看出,两种通过","可以看到,arrayfibonacci()","可以看到,demo3{}","可以看到,go","可以看到,二者的性能差距很大,快达到一个数量级了。所以在不影响代码可读性时,行内字符串尽可能地使用运算符","可以看到,反射涉及了额外的类型判断和大量的内存分配,导致其对性能的影响非常明显。随着切片元素的递增,每一次判断元素是否在","可以看到,同样的字段,因排列顺序不同,会导致不一样的结构体大小。","可以看到,通过对分共享资源的分片处理,减少了锁竞争,能明显地提高程序的并发性能。可以预见的是,随着分片粒度地变小,性能差距会越来越大。当然,分片粒度不是越小越好。因为每一个分片都要配一把锁,那么会带来很多额外的不必要的开销。可以选择一个不太大的值,在性能和花销上寻找一个平衡。","可以通过","可变全局变量在使用时,可能会被其他地方修改,导致程序运行时出现意外情况。","可执行文件目录","可执行文件目录。","可显示使用空标识符(下划线)忽略。","可能会被多个协程并发调用,为了提升性能(减少执行时间和内存占用),使用","可能更可取或是必要的:","可见一次协程的切换,耗时大概在","可见使用反射实现的","可见读多写少的场景,使用读写锁并发性能会更优。可以预见的是如果写占比更低,那么读写锁带的并发效果会更优。","可见,函数返回值使用","各个公司或组织,都有各自不同的","各占","各占据","合理性","同一层级的逻辑细节不要拆分。","同一文件中的函数应按接收者分组。","同时迭代下标和值,则需要将切片/数组的元素改为指针,才能不影响性能。","名字应该追求清晰且越来越收敛,符合‘单一职责’原则,而不是像common一样,什么都能往里面放,越来越膨胀,让依赖关系变得复杂,不利于阅读、复用、重构。注意,xxx/utils/encryption这样的包名是允许的。","后会进行解锁操作,避免重复解锁引发","后面的代码。","后面要有空格。","后,for","向","吗?","否则,尽可能在错误消息中添加上下文","含有","启动的","呢?","呢?goroutin","命令行参数。","命名不能采用","命名清晰的地方,不要添加无意义的注释。类型注释","命名规则基本保持和结构体命名规则一致。","和","和一个","和其他形式的确定性预计算的优化。","和没有任何元素的","唤醒了该协程,那么","唤醒所有等待条件变量","唤醒所有等待的协程。","唤醒顺序","回到第一个例子,在一个时间时刻加上","因为其他","因为内存对齐的存在,合理的","因为空结构体不占据内存空间,因此被广泛作为各种场景下的占位符使用。一是节省资源,二是空结构体本身就具备很强的语义,即这里不需要任何值,仅作为占位符,达到的代码即注释的效果。","因为这一点,空","因此","因此呢,将","因此,在处理时间时始终使用","因此,在对内存特别敏感的结构体的设计上,我们可以通过调整字段的顺序,将字段宽度从小到大由上到下排列,来减少内存的占用。","因此,在将元素添加到","圆周率","在","在业务逻辑处理中禁止使用","在为返回的错误添加上下文时,通过避免使用\"fail","在使用预先分配的标识符时编译器不会报告错误,但是诸如go","在保存代码时可设置自动执行","在写入时会","在处理时间的瞬间时使用","在多数情况下,sync.onc","在尽可能的情况下,在使用","在接收","在热路径中,done","在编译时验证接口的合理性,这包括:","在视觉上是相似的","在调用失败时传播错误有三个主要方式:","在运行时可能会有更多分配。","在返回","在这种情况下,测试文件不能在包","在迭代过程中返回的是元素的拷贝,index","在部分场景下,结构体只包含方法,不包含任何的字段。例如上面例子中的","在高负载下被填满并阻塞写入者,以及当这种情况发生时系统会发生哪些变化。","场景下将单","块内,读取","块注释即在代码块前给出一个总的说明,然后每行变量或常量的末尾给出详细注释,这样看起来更加简洁。","基于互斥锁/读写锁,那它和互斥锁的区别是什么呢?","基于当前目录","基准测试代码如下:","基准测试结果如下:","基本数据类型与字符串之间的转换,优先使用","声明","声明到一组。","声明和初始化在视觉上很相似","声明和初始化在视觉上是不同的","声明结构,因为这样更加简洁,其各个字段值为字段类型对应的零值。","声明错误可选的方式很少,在选择合适的错误申明方式之前,应考虑以下几点。","声明零值结构使用关键字","处理","处理panic","处理recov","处理。在知道常见的变量逃逸场景后,我们在编码时可以有意识地避免变量发生逃逸,尽可能地使用栈空间,而非堆空间。","处理类型断言error","处理,函数返回后就会直接释放,而堆上分配的内存使用完毕会交给","复杂的执行/错误信息,需要定义结构体保存。","复用","复用对象","复用对象,每次操作不再有内存分配。","外部依赖库","外部依赖库。","外部包","外部辅助工具","外部辅助工具。","多个相似","多线程模型改为主从","多线程模型,避免对同一个消息队列锁读取。","多行初始化。","多行定义。","大块变量或常量定义时的注释方式。","大部分业务场景是读多写少,所以使用读写锁可有效提高对共享数据的访问效率。最坏的情况,只有写请求,那么读写锁顶多退化成互斥锁。所以优先使用读写锁而非互斥锁,可以提高程序的并发性能。","天","好。","好,sliceindex","如","如下面这个函数的第二个参数是没有必要的,大部分时候都是","如不同环境(测试、正式)的服务配置信息。","如将","如引入","如放置测试工具和测试依赖数据。对于较大的项目,有一个数据子目录是有意义的。例如,你可以使用","如无必要,不要起和包相同的名字。","如果","如果*handler与http.handler的接口不匹配,那么语句var","如果不关心是否成功,可显示忽略","如果为","如果代码不可复用或者你不希望其他项目使用,请放到","如果传入的参数通常是固定的,考虑通过实现多个函数实现默认参数。","如果你不使用","如果你对文章内容有任何疑问和建议,欢迎在应相应章节下留言探讨。","如果使用局部切片时,已知切片的长度或容量,请使用常量或数值字面量来定义。","如果全局变量仅在单个函数内使用,则应该定义为局部变量。","如果出现失败应该立即返回error,如果继续处理,则属于特殊情况需要添加注释。","如果函数返回值需用于初始化其他变量,则采用下面的方式。","如果切片中是指向结构体的指针,而不是结构体呢?","如果加锁无法避免,则可以采用分片的形式,减少对资源加锁的次数,这样也可以提高整体的性能。","如果发现此项目布局规范并不适用自己的项目,可在其基础上适当做出改变,不要泥古拘方。","如果变量为私有,且特有名词为首个单词,则使用小写,如","如果变量类型不确定,那么将会逃逸到堆上。所以,函数返回值如果能确定的类型,就不要使用","如果只需要第一项(key),就丢弃第二项(value)。","如果只需要第二项,则把第一项置为空标识符(下划线)。","如果在","如果在声明中省略了结构的所有字段,请使用","如果字符串字面量出现","如果局部变量仅被使用一次,且不能起到解释逻辑的作用时,应该删除局部变量,直接内联。","如果并发无法做到无锁化,优先使用共享锁而非互斥锁。","如果想使用","如果我们开辟很多协程,但不会导致程序崩溃,可以吗?如果真要这么做的话,我们应该清楚地知道,协程虽然轻量,但仍有开销。","如果我们调用","如果我们针对","如果手动管理依赖包可以将依赖包放到该目录,当然推荐使用依赖包管理工具","如果操作成功,再","如果方法不使用类的成员,应该实现为非成员函数。","如果是","如果是想全面了解","如果是想深入了解","如果是枚举类型的常量,需要先创建相应类型。","如果是这样,请参阅错误包装部分。","如果是静态字符串,我们可以使用","如果是,我们必须通过声明顶级错误变量或自定义类型来支持","如果有一个类似上面分配资源的代码段,我们应该将其包裹在一个函数中(匿名函数或有名函数)。在该函数中,使用","如果没有要添加的其他上下文,则按原样返回原始错误。","如果自定义协程池容量大小,可以调用","如果表达式的类型与所需的类型不完全匹配,请指定类型。","如果要开启多个线程执行一组动作,并且要等待全部完成后继续后续逻辑,考虑使用","如果调用者不需要匹配它,则使用fmt.errorf,如果调用者确实需要匹配它,则自定义","如果需要在","如果非成员函数要使用类的多个属性时,应该实现为成员函数。","始终以字长访问内存,如果不进行内存对齐,可能会增加","字符串占位符,如果输入数据来自外部,建议使用%q进行安全转义。","字符串字面量","字符串拼接","字符串拼接还有其他的方式,比如strings.join()、strings.builder、bytes.buffer和byte[],这几种不适合行内使用。当待拼接字符串数量较多时可考虑使用。","字符串的搜索存在二义性","字符串,并通过","字符串;","字节。","字节即可。","字节数组读取接口。","字节的空间。","字节缓冲器为例,利用","字节,与字段","字节,即额外填充了","字节,那么","存储类型","存放","它们将成为包的公共","官方","官方也在","官方文档","官方的入门指南","官方网站已有系统全面的指导文档,新手可以快速通过官方资料,轻松上手。此外,第三方资料,也有百家争鸣之势。有介绍","定位于同步,用于一发多收的场景。虽然","定位于通信,用于一发一收的场景,sync.cond","实例时,需要关联一个锁。","实例都会关联一个锁","实现上利用反射来达到范型的效果,在运行时进行类型的动态判断,所以带来了一定的性能损耗。","实现了多种列表类型,请避免在具体的列表实现中嵌入","实现了接口;","实现线程安全。果不其然,和上面的猜想一致。","实现集合(set)","实现集合(set)2.2","实现非常简洁。do()","实践建议,帮助我们更好的使用","实际上","实际上,我们可以使用无缓冲","实际使用时,我们可以根据不用场景来选择。如不能修改原切片使用拷贝法,可以修改原切片使用移位法中的第一种实现方式。","容量大小。","容量提示","容量提示2.指定切片容量尽可能指定容器容量,以便为容器预先分配内存。这将在后续添加元素时减少通过复制来调整容器大小。","容量时,仍可能发生分配。","对","对两个值进行判断时,被比较的值放在左边。","对于","对于上面的示例代码,还有一种更好的处理方式是将上面的","对于任意类型的变量","对于其它的包,可导出的接口也不能有","对于动态字符串的错误,","对于变量、常量的声明,相似的声明应该放在一组。类型的定义同样适用。","对于大多数包装错误,这是一个很好的默认值,但请注意,调用者可能会开始依赖此行为。因此,对于包装错误是已知变量或类型的情况,请将其作为函数契约的一部分进行记录和测试。","对于存储为全局变量的错误值,根据是否导出,使用前缀","对于很多需要重复分配、回收内存的地方,sync.pool","对于指针类型(如","对于数组类型的变量","对于结构体类型的变量","对于自定义错误类型,请改用后缀","对单个","对外部系统使用","对整数采用的便是这种编码方式。","对象池,每次只执行","对象能够极大地提升性能,减少内存占用,同时降低","对象,避免重复创建与回收内存,来看看对性能的提升效果。","对齐系数决定了字段的偏移和变量的大小,两者必须是对齐系数的整数倍。","导入代码。","导入的包按照先后顺序应该分为三组:","导出与非导出接口均需要有注释。","导出以下两个错误,以便此包的用户可以将它们与errors.i","导出全局变量。","导出全局常量。","导出的函数/变量的职责必须与包&文件职责高度一致。","导出的函数和方法(结构体或接口下的函数称为方法)都必须有注释。","导出的函数应该放在非导出函数前面","导出的字段和","导致整个进程退出。","将","将不会被执行","将你的","将你的云(","将元素插入到链表的首部","将更加人性化,如","将格式化后的字符串打印到屏幕,即标准输出。在","将网络字节序的","小写,如果有多个单词使用连字符分隔。","小时","小时并不总是产生一个新的日历日。","小时,我们应该使用`time.add`。","小时,我们用于添加时间的方法取决于意图。如果我们想要下一个日历日(当前天的下一天)的同一个时间点,我们应该使用","小汽车结构申明。","小的拷贝好过引用,什么意思呢,就是尽量使用栈变量而不是堆变量。下面举一个反常识的例子,来证明小的拷贝比在堆上创建引用变量要好。","就没有区别了。如果想使用","就能搞定了。","就近申明。","尽可能在与外部系统交互中使用","尽可能地在初始化时提供","尽可能地避免在","尽可能避免使用","尽早","尽管编写这些委托方法是乏味的,但是额外的工作隐藏了实现细节,留下了更多的更改机会,还消除了在未能描述出潜在接口的模糊文档。","尽管这在实践中并不成问题,但请记住,time","尽量不要用拼音命名。","尽量用","尽量用值传递,非指针传递。","尽量采取有意义、简短的包名,尽量不要和标准库冲突。","局部变量","局部变量使用短变量声明形式(:=)。","嵌入到结构体中。","嵌入类型会泄漏实现细节、禁止类型演化和产生模糊的接口文档。","嵌套深度不能超过4层。","工具可以帮我们静态分析我们的源码存在的各种问题,例如多余的代码,提前","工具格式化。","工具生成的代码","工具自动格式化引入的包名,import","工具自动生成文件","差距不是很大,但是随着字符串长度的增加,差距将会越来越明显。此外,如果这种重复的转换在","已无法继续使用,而","已经明确了返回一个字符串类型,因此我们没有必要显式指定类型。","布局","布局4.空结构与空数组对内存对齐的影响1.为什么需要内存对齐","布局可以减少内存占用,提高程序性能。","布局考虑内存对齐","带域名的包名都属于外部包,如","带来一定的负担,严重的时候会引起","常量命名","年诞生以来,因其出色的并发能力和简单易用的低门槛,已在各大厂商的后台高并发业务场景崭露头脚,甚至有取代传统后台服务开发语言","并不是同一个,这会导致出现有些","并不是必须的,例如","并且标明后续处理建议(如删除计划)。","并发写入有锁链表","并指定作用范围。","并没有关键字","并没有提供删除切片元素专用的语法或函数,需要使用切片本身的特性来删除元素。","库),可以用于实现无锁数据结构,如无锁链表。","应为","应当使用如下的方式:","应用服务建议有","应用服务必须要有接口测试","应用程序和公共库的示例","应用程序和公共库的示例。","应用程序特定组件,如静态","应用程序的组件","应用程序目录","应用程序目录/web2.5","应用程序项目的基本布局,是社区","应该做到:","应该后移一位。","应该足以满足任何情况!","底层核心数据结构","建议调整为这样:","开发经验的","开头,例如","开始","开始。","开始,如果需要使第一个值为有意义的值,我们应该从","开始,官方推荐使用新的依赖管理系统","开销","开销。我们可以利用runntime.gosched()让当前协程主动让出","开销可能会严重影响性能。","式","式。如果不关心是否成功,ok","引入第三方包要慎重。","引用)时,才可以","当y与err都为空时,函数的调用者会出现错误的调用逻辑","当不能在这些交互中使用","当且仅当第一次访问某个变量时,进行初始化(写);","当使用反射时,请问一下自己,我真地需要它吗?","当创建的","当在这些交互中不能使用","当存在资源管理时,应紧跟","当有多个","当然,凡事无绝对。如果第一个枚举值为零是有意义的,如当零值是理想的默认行为时。","当然,凡事无绝对。如果需要修改接口变量本身,那么应该使用指向接口变量的指针,当然你必须清楚自己在干什么。","当程序的多个函数具有退出能力时会存在一些问题:","很多时候,我们可能只需要操作一个类型的切片,利用反射实现的类型泛化扩展的能力压根没用上。退一步说,如果我们真地需要对","很少需要嵌入类型,虽然它可以帮助您避免编写冗长的委托方法。","循环中使用","循环变量的地址不要存储。","循环变量的地址指向的是同一个变量,我们可以通过赋值给一个同名的变量,通过变量逃逸,来达到取不同地址的目的。","循环多次尝试,直至成功。","必要情况下字段给出注释。","必要时给包起个别名","必须在","必须是固定大小的值或固定大小值的切片,或指向此类数据的指针。","必须是指向固定大小值的指针或固定大小值的切片。","必须是最后一个参数。","必须要有","性能对比","性能对比1.无锁化","性能没有差别,但是","您会收到更多有用的错误,例如“呼叫服务","想离","意义不明的成员变量,应该定义类型描述作用。","成员函数","成本,可提高程序性能。","我们以","我们以一个简单的线程安全单向链表的插入操作来看下无锁编程和普通加锁的区别。","我们以一个简单示例,来说明使用","我们几乎不需要使用指向接口的指针,应该将接口直接赋值给接口,这样在传递过程中,实质上传递的底层数据仍然是指针,即不存在值拷贝的情况。","我们分别对两种链表做一个并发写入的操作验证一下其功能。","我们可以找到","我们可以找到切片的底层数据结构","我们可以看一下最常用的标准格式化输出函数","我们可以看下接口变量的内存宽度。","我们可以通过依赖注入的方式将依赖注入到使用方,这样便可以避免使用全局变量,进而避免了依赖的全局变量被错误修改的可能。","我们可以通过在访问共享资源前前用","我们实现一个简单的例子,三个协程调用","我们想象一个非常简单的场景:","我们来看一下编译器编译时对上面两个切片的优化决策。","我们看下二者的性能差异。","我们还是以上面斐波那契数列函数为例,看下返回值为确定类型和","我们都知道","或","或互斥锁,那么只能有一个协程可以等待,并读取到数据,没办法通知其他的协程也读取数据。","或无缓冲","或是无缓冲的。默认情况下,channel","或程序主动抛出的","或空","或者","或者为了更好的可测试性","或自定义错误类型。","所以如果对性能要求非常严格,或待拼接的字符串数量足够多时,建议使用","所有注释掉的代码在提交","所谓互斥锁,指锁只能被一个","手动gc","打包和持续集成","打包和持续集成。","打印的是不同的地址","打印的是相同的地址","执行runtime_notifylistwait会挂起调用者所在的","执行各种构建、安装、分析等操作的脚本","执行各种构建、安装、分析等操作的脚本。","执行基准测试结果如下:","执行基准测试:","执行当前包下的所有基准测试,结果如下:","执行性能测试结果:","执行测试结果如下:","批量查询函数返回值使用","批量获取用户信息(允许部分失败)。","批量获取用户信息(需全部成功)。","把简单的逻辑判断放前面,复杂的逻辑判断放后面。","抛出的异常。如果启动的","抛去大段的注释,可以看到","括号和空格","持续集成配置与脚本","指令,也就是说,这样做能够提升性能。","指导","指针复制是没有问题的。","指针既可以调用","指针,对于","按照上面的规则,下面给出好坏文件内容布局示例。","捕获最晚要在当前","换行方式","接下来逐个分析,首先是","接下来,我们测试三种情景下,互斥锁和读写锁的性能差异。","接受初始化语句,尽可能缩小变量作用域。","接口命名","接口注释","接收器为值和指针的方法在调用方式上是有区别的。","接收器的名称在函数超过","接收数据,接收完成后,将","控制并发处理的任务数量,就不需要","推荐以类名第一个英文首字母的小写作为接收器的命名。","描述\"。","描述\",斜线后面紧跟一个空格。","描述了内存对齐的规则。","提供了两个导出方法用来使用锁。","提供了两种锁,互斥锁(sync.mutex)和读写锁(sync.rwmutex),读写锁便是共享锁的一种具体实现。","提供了五个导出方法用来使用锁。","提供容量提示会在初始化时尝试调整","提升可读性是值得的,因为使用它们的成本微不足道。尤其适用于那些不仅仅是简单内存访问的较大方法,在这些方法中其他计算的资源消耗远超过","提示并不保证完全的抢占式分配,而是用于估计所需的","操作将导致零分配(直到","操作来达到一发多收的效果,但是","操作的基准测试,对比一下有锁与无锁的性能差异。","操作,即调用compareandswap()方法进行插入,如果插入失败则进行","操作,及做一次数据拷贝,耗时几乎可以忽略。而内存分配和回收的耗时占比较多,因此对程序整体的性能影响更大。从测试结果也可以看出,使用了","支持","支持使用原始字符串字面值,可以使用反引号来表示原生字符串。在需要转义的场景下,我们应该尽量使用使用反引号表示字符串,避免转义。","支持将","放在匿名函数中","放在有名函数中然后调用之","放在第一个字段,能够减少","数量,复用协程,达到更高效执行任务的效果。","整体风格","整体风格2.2","文件中(一般是和包同名的文件)即可。","文件名应该采用小写,并且使用下划线分割各个单词。","文件命名","文件长度不能超过","文件,只需要出现在一个","方式一","方式二","方式传递后,再加上其长度不可扩展,考虑到性能我们一般很少使用它。实际上,凡事无绝对。有时使用数组进行拷贝传递,比使用切片要好。","方法中没有使用值接收器。","方法在结束阻塞时,会重新给","方法对资源进行上锁,在访问共享资源后调用","方法接收器命名","方法支持将","方法时,必须加锁。","方法是","方法来实例化具有给定容量的池,如下所示:","方法来获取和放回池子中。","方法来释放锁,也可以用","方法获得锁后,其他请求锁的协程都会阻塞在","方法,直到锁被释放。","族群","无论是","无论是使用嵌入结构还是嵌入接口,都会限制类型的演化。","无锁化主要有两种实现,无锁数据结构和串行无锁。","无锁单向链表","无锁单向链表的简单实现","无锁数据结构","无锁数据结构1.2","无错误匹配。","无需去除编译器优化,基准测试结果如下:","既然","时为","时传入的","时获取的是值拷贝,对副本的修改,是不会影响到原切片。","时间上,协程调度也会有","时间处理看似简单,实则不然。关于时间的错误假设通常包括以下几点:","时间类型尽量使用内置定义,如","时,同样的,请注意用户对暴露内部状态的","时,甚至在指定","时,请使用","时,请记住当","时,除非达成一致,否则使用","明文传输协议","明确地告诉我们,我们并不需要知道变量是分配在栈(stack)上还是堆(heap)上。golang","是","是一个值,而","是一个实体列表。","是一个很好的选择。频繁地分配、回收内存会给","是一个更合适的名字。","是一个有效的","是一个有效的长度为","是一个比较好的方式。","是一个简单易用的高性能","是一个结构体类型","是一种使用可变字节表示整数的方法。其中数值本身越小,其所占用的字节数越少。protocol","是不占用内存空间,不像","是不确定的类型,会发生变量逃逸,触发堆内存的分配。所以,可预见的是当元素数量增加时,性能差异会越来大。","是几秒钟还是几毫秒?","是只会被执行一次的函数,一般为对象初始化函数。","是可伸缩的,同时也是并发安全的,其容量仅受限于内存的大小。存放在池中的对象如果不活跃了会被自动清理。","是各种实体列表的通用实现。","是否符合标准等。编译前先执行代码静态分析。","是在没有大小提示的情况下创建的;","是基于互斥锁/读写锁实现的条件变量,用来协调想要访问共享资源的那些","是属性数据层操作类的工厂方法","是无法捕当前","是无缓冲的,其","是有区别的,channel","是有大小提示创建的;在运行时可能会有更少的分配。","是有效的","是有效的,所以指向","是由","是第一个字段,默认是已经对齐的,从第","是第三个字段,对齐倍数为","是第二个字段,对齐倍数为","是第二个字段,对齐系数为","是级联失败(cascad","显示处理","显示指明","更多关于","更多可参考","替换。","替换为指针","最佳实践更近一步,建议看看本书。","最佳性能","最好有","最小化变量作用域。","最顶层将其捕获,在其他","有一个协程在异步地接收数据,剩下的多个协程必须等待这个协程接收完数据,才能读取到正确的数据。在这种情况下,如果单纯使用","有些","有些语言自身提供了目录结构规范,但对于较为年轻的","有时候你会看到某个类里有很多基本类型字段,但是你隐约地能区分出某些字段好像应该在一起,如手机号和带区号的电话号码、描述某个日期范围的开始日期和结束日期,它们应该有一个真实的载体,如联系方式类和时间范围类)","有时候使用","有时后我们需要根据多个","有时,我们需要一些工具函数。比如从","有锁","有锁单向链表","有锁单向链表的简单实现","有锁并发写入","有锁链表的字符串形式输出","服务对外接口","服务对外接口。","服务应用程序目录","服务应用程序目录/api2.4","服务,每个请求天然是并发的,此时使用","未导出全局变量。","未导出全局常量。","本书为开源书籍,希望得到大家的协同共建,不断迭代丰富。如果有你的建议和","本书主要分为四个方面:","本书所述内容谈不上是","本书由来","本书由来内容简介目标读者互动勘误","本文所述内容均为参考意见,并非标准。其中许多是","本文结合官方编码建议,大厂编码规范、开源技术书籍和自身项目经验,尽可能以简短的语言给出一套行之有效","本身在代码规范方面做了很多努力,很多限制都是语法要求,例如左大括号不换行,引用的包或者定义的变量不使用会报错。此外","条件不满足或出现错误应尽早返回。","来代替。","来代替。事实上,对于集合来说,只需要","来取代","来回收,如果无休止地创建大量","来定义枚举类型,引入枚举的标准方法是声明一个自定义类型和一个使用了自增器","来实现。","来拼接而不是fmt.sprintf()。","来混淆底层错误,调用者将无法匹配它,但如果需要,您可以在将来切换到","极客兔兔","构建","构建依赖包","构造函数应该放在其他函数之前,如newxyz()/newxyz()。","查询对应的值,可能会出现部分失败的情况,如某个","标准包","标准库","标准库也大量使用了","标准库函数","标准库提供的使函数只执行一次的实现,常应用于单例模式,例如初始化配置、保持数据库连接等。作用与","标准库时间的类型别名","标志:flag","标签或日志中的","栈上分配内存比在堆中分配内存有更高的效率。因为栈上分配的内存不需要","样式注释","根据调用者是否应该能够匹配和提取根本原因,在","格式为//","格式为:\"//","格式之间进行选择。","格式化字符串中多个占位符之间要有空格。","格式的说明文档,是用户了解一个项目最直观的入口。如果有需要,添加不同语言的","框架","概述了几个内置的,不应在","模块语句","模式。go","模拟","次。","次,则禁止使用,用一个有名称的常量代替,可读性更好。","正常逻辑不应该在","此外,因","每一个字段","每个","每个包都应该有一个包注释。","每个字段按照自身的对齐系数来确定在内存中的偏移量,一个字段因偏移而浪费的大小也不同。","每个重要的可导出函数都要首先编写测试用例,测试用例和正规代码一起提交方便进行回归测试。","每个需要导出的变量和常量都必须有注释说明。","每个需要导出的类型定义(type","每个需要导出的自定义结构体或者接口都必须有注释说明。","比","比如","比如下面将依赖的","比如多个班级下的学生id。","毫无压力,但当我们起十万、百万甚至千万个","池,实现了对大规模","没有","泄漏实现细节指","注入","注意,1.11","注意,与","注意,多次运行上面的main()函数的结果可能会不相同,因为并发是无序的。","注意,如果方法的接收器为不可导出类型,可以不注释,但需要质疑该方法可导出的必要性。","注释对变量和常量进行简要介绍,放在常量或变量定义的前一行。独行注释格式为:\"//","注释对结构进行简要介绍,放在结构体定义的前一行。格式为:\"//","注释描述函数或方法功能、调用方等信息。格式为:\"//","注释结束添加点或句号,参考标准库源码注释。","测试用例的函数名称必须以","测试相关","测试相关。","测试结果如下:","深度解密go","添加上下文生成新错误。","添加上下文生成新错误;","添加将实体添加到列表中。","添加成功或出错。","源码","源码2.2","源码应该是你的首选,再结合精彩的第三方分析,如","源码文件","源码目录","源码目录。","源码进行剖析介绍实现原理的,有介绍高并发场景下实战指导的,也有介绍使用","热路径(hot","然后调用","然而,一旦错误被发送到另一个系统,应该清楚消息是一个错误(例如","版本的大小限制可能不一样。一般是","特有名词时,需遵循以下规则:","特殊实现需要注释。","现在是一个拷贝","现在是明确的","生成切片函数如下:","生成带参数的","生成指定长度","生成指定长度的随机","生成的文档之外)均可以放在该目录。","用","用于从对象池中获取对象,因为返回值是","用于捕获","用于获取变量的对齐系数。","用于阻塞调用者,等待通知。","用户结构定义了用户基础信息","用来保证函数只执行一次。要达到这个效果,需要做到两点:","用来协调想要访问共享资源的","用来解决这类问题。","用来调节读操作的占比,来模拟读写占比不同的场景。rpct","用的就是","由两个字段构成,一个类型是","由于","由于函数是按接收者分组的,因此普通工具函数应在文件末尾出现。","由于单测文件内的函数都是不对外的,所有可导出函数可以没有注释,但是结构体定义时尽量不要导出。","由于第一个值从","申明","申明变量","的","的。","的一部分。","的一部分,尽管它不是。除了这一种情况,不要使用import","的两个分支中都设置变量,则可以将其替换为单个","的二进制表示形式写入","的位置就是所有有效元素的下一个位置,最后做一个截取就行了。这种方法会修改原来的","的使用方式非常简单,只需要实现","的修改。","的修改是一个互斥操作。在执行任务函数前,对","的倍数,从第","的共同追求。为书写效率更高的代码,本文将结合","的共同追求。本篇将结合","的内存占用为","的内存,在源码","的切片。从最终的结果可以看到,遍历","的切片进行测试,来上下上面四种实现的性能差异。","的切片(一个为","的初学者,建议先略过本书,了解下","的判断,来决定是否执行传入的任务函数。执行任务函数前,通过锁保证任务函数的执行和","的包。","的区别?","的压力。","的压力,提升系统的性能。","的原理与使用场景","的名字和目录一致。","的四个成员函数定义如下:","的基础上增加了自动删除和引入包。","的大小为","的大小,这将减少在将元素添加到","的子目录都不能被导出。","的字段时,一般不需要内存对齐。但是有一种情况除外:即当","的存在还有必要吗?","的完整功能,如初始化(通过切片构建一个","的定义。","的定义如下:","的实现是","的实现细节。good","的实现细节,对其调用者不可见。","的实现细节,被到处泄露了;","的实现,通常使用","的容量分配足够的内存,这意味着后续的","的对齐系数决定,也是","的对齐系数由","的工具,主要功能就是检测代码中不规范的地方。","的并发操作个数超过了系统上限,这个报错是","的并发读写。","的底层数组。这样也不需要额外分配内存空间,直接在原","的底层结构后,我们应该知道在传递过程中一般也不需要使用指向它们的指针。","的开销。虽然官方宣称用","的开销主要是三个方面:创建(占用内存)、调度(增加调度器负担)和删除(增加","的开销非常小,只有在您可以证明函数执行时间处于纳秒级的程度时,才应避免这样做。使用","的异常,禁止滥用","的性能几乎一样,如基本类型的切片","的性能几乎是一样的。而且使用指针还有另一个好处,可以直接修改指针对应的结构体的值。","的性能将显著地高于","的性能差别。","的性能相近。如果结果字符串的长度是可预知的,使用","的情况下保证并发安全,并且它的性能也能做到随","的截取删除指定元素。注意删除时,后面的元素会前移,下标","的打印顺序是随机的。","的指针","的指针基本是不必要的。","的操作耗时很短,所以每次睡眠一微秒(百万分之一秒)来增加耗时,不然对共享资源的访问耗时,小于锁处理的本身耗时,那么使用读写锁带来的性能优化效果将变得不那么明显,甚至会降低性能。","的数量。","的最佳实践更近一步。","的最佳实践,但希望能够帮助广大","的毛刺,而","的空间。","的空间,优点是容易理解,而且不会修改原","的空间,那么假设计算机的内存是","的结果为准。","的缓冲区大小来实现。","的编码和解码。varint","的讨论可参考","的调度管理和复用,允许使用者在开发并发程序的时候限制","的退出机制,防止泄漏。","的通用准则,其他扩展内容也参考了很多官方指南,包括但不限于。","的逻辑。","的逻辑,","的遍历方式","的键,而不需要值。即使是将值设置为","的长度与容量匹配,在此之后,任何","的非","目录。","目录下。","目录下,","目录下,而不是具体业务目录下。","目录内部增加一些代码结构来区分共享和非共享的。虽然它并不是必须的(尤其是小的项目),但是最好能从视觉上区分包的用途。","目录的项目结构是一种常见的布局模式,但并不是所有人都接受它,一些","目标读者","目,但这通常发生在开发人员有","相似的声明放在一组。","相关操作需要独立封装","省略结构中的零值字段。","看一下性能差异,注意需要禁止编译器优化,不然看不出差别。","看下二者的性能差异:","知道变量逃逸的原因后,我们可以有意识地避免变量发生逃逸,将其限制在栈上,减少堆变量的分配,降低","示例,实际不要这么查询,防止","社区的人并不推荐它。","禁止在循环中使用","禁止类型演化指","私有库代码(仅本项目使用)","私有库代码(仅本项目使用)。","私有量和局部量规范一致,均以小写字母开头。","秒","移除从列表中移除实体。","程串行执行","程到运行结束,占用的内存资源是需要由","程势必会带来性能影响,甚至程序崩溃。所以,我们应尽可能的控制协程数量,如果有需要,请复用它。","程占用约","程同步。通过","程后,势必会造成对","程序中每一个被导出的(大写的)名字,都应该有一个文档注释。","程序会像预期的那样顺利的运行吗?","程序将意外终止并输出:","程序崩溃","程序崩溃1.2","程序退出方式","程数量越多,gc","程的情况下,函数仍然只执行一次,比如锁。","程的结构定义type","程间的同步。","程(goroutine)是由","程,以此来实现多个","程,即保存了一个通知列表。sync.cond","空切片使用","空结构与空数组在","空间上,一个","等。","等于其中的最大值。","等于构成数组的元素类型的对齐系数。","等单词开头。","等待下次被唤醒。为了保险起,使用","等待通知,直到","等待,一个","等待,另一个协程调用","等操作,可以使用开源库","等)进行操作,因为很容易忘记使用原子操作来读取或修改变量。","简体中文","简单明了的包命名,如:time、list、http。","简而言之,系统的资源被耗尽了。","简言之:合理的内存对齐可以提高内存读写的性能,并且便于实现变量操作的原子性。","管理依赖的项目,","类似地,在了解","类似的,使用值接收器和指针接收器来实现接口,在判断与接口是否匹配时,也存在一定的区别。","类型。","类型为","类型名","类型呢?","类型手动实现一个","类型换成自定义类型。将来,该参数可以支持不仅仅局限于两个状态(true/false)。","类型断言","类型断言使用","类型断言的单个返回值形式如果断言失败将产生","类型时的实现。","类型的切片,下标与","类型的变量,应直接进行真假判断。","类型的实例,但是我们要","类型,也会多占据","类型,则名称应以","系统中,标准输出也可以视为文件,内核(kernel)利用文件描述符(fil","系统初始化(systemd,","系统地资源是有限,协程是有代价的,为了保护程序,提高性能,我们应主动限制并发的协程数量。","约为","线程安全,保障在多","组来表示枚举值。","经常用在多个","结束。","结束程序而不是","结构。","结构体","结构体信息描述\"。","结构体内的可导出成员变量名,如果是个生僻词或意义不明确的词,必须要单独给出注释,放在成员变量的前一行或同一行的末尾。","结构体名","结构体名应该是名词或名词短语,如","结构体命名","结构体注释","结构体的定义和初始化格式采用多行。","结构体,那么","结构来接收通知就行了。","结构,其有两个变量。使用","绝大部分场景都会访问","统计函数执行次数,使用锁","继续使用","继续使用field","继续看","综合易用性和性能,一般推荐使用strings.builder来拼接字符串。","编码为","编码建议的。至此,本书应运而生。","编码建议,让您的代码高效易读。","编码规范,但大同小异。规范是一种倡导,不遵守并不代表错误,但当大家都遵守规范时,你会发现,整个世界将变得整洁有序。","编码风格","编码风格从简洁易读的角度出发,参考","编译不通过,因为无法对","编译后的机器码指令更少,更直接,必然是能够提升性能的。","编译器一般为了减少","编译器对变量的逃逸分析决策远比我们想像的要复杂。我们只能尽可能地去勾勒而无以绘其全貌。go","编译器而言,超过一定大小的局部变量将逃逸到堆上,不同","编译时可以借助选项","缩略语要么全小写,要么全大写。","网络字节序解析到","置为","考点汇总","考虑一个简单的场景,函数","而不是","而不是net/urls。","而不是执行“init","而非","耗时越大。","背景。不同类型的代码应该有自己的目录,而不是全部放到","能够接收不同类型的入参,通过格式化输出完成字符串的拼接,使用非常方便。但因其底层实现使用了反射,性能上会有所损耗。","能够确保被唤醒后条件一定符合后,再执行后续的代码。","自动格式化代码,保证所有的","至少为","若量类型为","获取读锁,所以是一种共享锁。但写锁是互斥的。","获得。共享锁指可以同时被多个","获得了同名嵌套类型字段","获得的锁。","虽然简单,但其功能特性却不单一。其丰富的语言特性,在使用时还是有很多不同的姿势。本书从功能特性出发,给出","虽然轻量,但天下没有免费的午餐,无休止地开辟大量","虽然这些使用内置标识符的自定义字段可以编译通过,但对","虽然默认为","行。","行内字符串拼接时,出于性能的考虑,待拼接字符串数量较少(fmt.sprintf()。","行内字符串的拼接,主要追求的是代码的简洁可读。fmt.sprintf()","行内拼接字符串为了书写方便快捷,最常用的两个方法是:","行数","行的时候不要用单字符。","行长度换行方式不必要的空行括号和空格行数行长度","行)。单测函数行数限制也是普通函数的2倍(160行)。圈复杂度、列数限制、","表示广播通知,其他的","表示执行是否成功,而不是用","表示执行状态的返回值应该放在最后。","表示读写一致(各占","表示读多写少(读占","表示读少写多(读占","表示连续的非类型化整数常量,它的值是对应常量的下标(从零开始),它可用于构造一组相关常数:","表达时间段","表达瞬时时间","表驱动测试.","被导出的字段和方法全部成为了","被导出的字段和方法,在","被捕获。","被用于控制变量的初始化,这个变量的读写满足如下三个条件:","要么是","要好。","要好,i","要比","规则为准。","规范","规范依赖规范","规范原则上以","解决,","解析、校验、计算的逻辑应该进行分离","解析函数应该注明解析字符串的范例,并明确不能处理的异常情况。","计数器,统计函数执行次数;","计算出一个数据类型实例需要占用的字节数。","记住,虽然","设为","访存指令周期,提高内存的访问效率,会对变量进行内存对齐。go","访存次数。","访存的单位是","访问内存并不是逐个字节访问,而是以字长(word","访问内存的吞吐量。比如同样读取","访问内存的次数,加大","该函数也是参考了","该包已经","该方法可以看成对第一种方法截取法的改进,因为每次指需移动一个元素,性能更加。","该注释对类型进行简要介绍,放在定义的前一行。","详细的专有名词列表可参考这里。","语句之后(所有迭代之后),即所在函数结束时,defer","语句前不要换行。","语句来保证互斥锁一定会被解锁。在一个","语法知识和语言特性与,也建议先略过本书。go","语言之sync.pool","语言圣经","语言在标准库","语言基础和实战的,有对","语言实现原理,还是建议先略过本书。虽然本书略有涉及,但不够全面。go","语言提供了运行时动态获取对象的类型和值以及动态创建对象的能力。反射可以帮助抽象和简化代码,提高开发效率。","语言标准库以及很多开源软件中都使用了","语言标准库没有提供","语言特性,为书写高效的代码,力争从常用数据结构、内存管理和并发编程三个方面给出相关建议。话不多说,让我们一起学习","语言特性,从常用数据结构、内存管理和并发,三个方面给出相关建议。","语言的反射能力,例如用于序列化和反序列化的","语言自","语言规范","语言设计与实现,应该会大有收获。","语言高性能编程","说明文档,介绍服务功能、使用方法、部署时的限制与要求、基础环境依赖等","请注意,如果您从包中导出错误变量或类型,","读、写、计算的逻辑应该进行分离","读写一致(各占","读写安全","读写锁是一种共享锁,也称之为多读单写锁","读写锁的存在是为了解决读多写少时的性能问题,读场景较多时,读写锁可有效地减少锁阻塞的时间。","读取","读取到","读取整个给定的字节数据并返回读取的长度","读多写少(读占","读少写多(读占","读操作。","读锁之间不互斥,没有写锁的情况下,读锁是无阻塞的,多个协程可以同时获得读锁。","调度开销","调用","调用。","调用有名函数","资源、服务器端模板和","赋值的右边应该是断言类型的零值。","赋给接口","起,从编译器层面限制该目录不可被导出,而且不只是项目根目录下的","越界运行时抛出的","路径名不一致时,或者多个相同包名冲突时,使用别名代替会有更好的可读性。","转为主机字节序。","轻量的开销将被放大。","过滤指定元素。注意:不修改原切片。","运算符","运算符+","运算符和操作数之间要留空格","运算符和操作数之间要留空格。","运行上面的例子将会输出:","运行上面的基准测试。","运行上面的基准测试结果如下:","运行上面的基准测试,将得到如下结果。","运行上面的基准测试,结果如下:","运行时管理的轻量级线程。通过它我们可以轻松实现并发编程。但是当我们无限开辟协程时,将会遇到致命的问题。","运行时管理的轻量级线程,通过它我们可以轻松实现并发编程。go","运行测试结果如下:","运行的结果是程序直接崩溃了,关键的报错信息是:","运行结果如下,注意","运行结果如下:","运行结果:","运行输出如下,注意","运行输出:","返回","返回一个","返回值类型不确定(不能确定大小)","返回值超过","返回值,如果允许部分失败使用","返回前,会重新上锁。重新上锁的原因是主调在","返回地址","返回引用(引用变量的底层是指针)","返回当前状态。","返回指定用户名的完整名称。","返回指针","返回指针3.小的拷贝好过引用4.返回值使用确定的类型5.小结变量逃逸一般发生在如下几种情况:","返回时,编译器无法确定返回值的具体类型,导致返回值逃逸到堆上。当发生了堆上内存的申请与回收时,性能会差一点。","返回读锁,使用","还会忽略以“.”或“_”开头的目录或文件,因此在如何命名测试数据目录方面有更大的灵活性。","还启用了模块代理功能(默认使用","还是","还是以上面给出的同步示例,这里换作","还是提供了很多好用的工具帮助我们进行代码的规范。","还有更多,具体可参考","这个例子创建了一个","这个例子实现了","这个时候,就需要有个全局的变量来标志第一个协程数据是否接受完毕,剩下的协程,反复检查该变量的值,直到满足要求。或者创建多个","这个错误没有被导出,因为我们不想让它成为公共","这个错误没有被导出,因为我们不想让它成为我们公共","这个错误被导出,以便这个包的用户可以将它与","这么设计的目的,是减少","这些脚本帮助根目录下","这会精简main()函数,并将所有关键业务逻辑放入一个单独的、可测试的函数中。","这将保留原始错误类型和消息。","这是","这样就不会出现诸如“连接被拒绝”之类的模糊错误,","这样的标识符,不知道其是顶级标识符还是导入包中的顶级标识符。","这样的目录,因为这些名称含义太泛了,违背了单一职责原则。","这种方法最容易理解,重新使用一个","这类意义太宽泛的结构体名。","这类易混淆名称。","这行代码去掉呢?那程序很可能会因为内存不足而崩溃。这一点更好理解,每个协程至少需要消耗","这里分别对长度为","这里利用对","这里我介绍的是后台微服务开发经常遇到的一种情况。我们经常需要并发拉取多方面的信息,汇聚到一个变量上。那么此时就存在对同一个变量互斥写入的情况。比如批量并发拉取用户信息写入到一个","这里我们修改","这里放不希望被其他应用程序或者库导入的代码。注意:从","这里放希望被其他应用程序或者库导入的代码,所以在这里放东西之前要三思。","这里是服务对外接口的实现,定义接口时,我们应该遵循","这里需要注意的是,因为每次读写","这非常适合底层错误消息有足够的信息来追踪它来自哪里的错误。","进行","进行匹配。","进行处理,或使用空白标识符忽略。对于defer","进行自动化管理。","进行高性能编程的,等等。很遗憾的是,没有发现一个系统介绍","迭代的元素较小,那么","通常只包含一个简单的","通常可以简写为","通常用来保护共享的临界资源,条件变量","通用","通用包注释函数注释结构体注释变量和常量注释类型注释接口注释在编码阶段同步写好类型、变量、函数、包注释,注释可以通过godoc导出生成文档。","通用场景","通用应用目录","通用应用目录/configs/init/scripts/build/deployments/test/readme.md2.6","通用的功能包,应该放在","通用规则","通用规则项目命名包命名文件命名函数命名结构体命名接口命名量命名通用常量命名方法接收器命名错误命名避免使用内置名称命名是代码规范中很重要的一部分,统一的命名规范有利于提高代码的可读性,好的命名仅仅通过命名就可以获取到足够多的信息。","通知协程","通知所有等待的协程。","通知队列","通知(事件发生)的场景。如果是一个通知,一个等待,使用互斥锁或","通过","通过%v打印错误信息时建议加冒号。","通过其","通过隐藏基础类型为这些操作增加了类型安全性。此外,它还包括一个易用的","遇到","遍历","遍历切片或数组有两种方式,一种是下标,一种是","遍历性能几乎没有区别。","遵循","避免使用","避免使用内置名称","避免参数语义不明确。","避免重复执行","那么到底是谁适合阅读本书呢?如果你是一位有","那么多大的变量才算是小变量呢?","那么对于稍微复杂一点的","那如果我们将","部分会导致字段","部分可以做到字段","部署的应用程序),这个目录被称为","部署相关","部署相关。","都会浪费额外的内存。因此,在这种情况下,声明为空结构体最合适。","都可能调整大小以容纳其他元素)。","都实现了分片功能,每个分片一把锁,采用分片存储的方式减少加锁的次数从而提高整体性能。","配置信息","配置信息。","配置文件的命令行参数名","配置文件的命令行参数名。","配置文件的读取,和对象初始化应该分开,不要让对象自己根据配置文件初始化,保证构造函数足够简单","采用惰性换行,换行前应尽可能占满当前行不留空位。","采用有意义、简短的文件名。","采用独立的错误流进行处理。","采用驼峰命名方式,首字母根据访问控制采用大写或者小写。","释放写锁","释放读锁","释放资源","释放资源。","释放资源,诸如文件和锁。","释放锁","里装的对象可以被无通知地被回收,可能","里面的","里面的下划线)。","重新分配内存。","量名不应该以类型作为前缀/后缀。","量名应该是名词,进行时和过去式可以做形容词,成为量名的一部分。","量名遵循驼峰式,根据是否导出决定首字母大小写。","量命名","钩子","钩子。","钩子,可以帮忙我们在代码提交时完成一些检测,比如分支名称和","链表节点","错误判断独立处理,不与其他变量组合判断。","错误匹配","错误匹配。","错误命名","错误地使用接口会在编译期报错。所以可以利用这个机制让部分问题在编译期暴露。","错误消息","错误示例:urlarray,应该写成","长度为","长度或容量不定)","闭包","队列里的函数调用,这增加了跳过重要清理任务的风险。","阻塞等待的条件。","限制协程数量","限制协程数量3.协程池化4.小结1.协程数过多的问题","除了","除了包的主逻辑文件中内容允许导出,包内的辅助函数都应该是非导出的。","零值","需要做一次偏移值与指针的加法运算,才能获取要访问的值的地址。因为,访问第一个字段的机器代码更紧凑,速度更快。","需要判断当前文件是否应该归属于当前包,主要以职责进行判断。","需要描述谁,在什么场景下,如何使用接口。","需要有一个缺省处理逻辑","需要注意的时,上面运行基准测试时,使用编译选项","需要注意,运行上面基准测试时,传递了禁止内联的编译选项","需要读取环境变量,并转换为对应的配置。环境变量在程序执行前已经确定,执行过程中不会发生改变。readconfig","非导出的函数,如果比较简单,不需要注释。","非缩略语则应该使用驼峰命名。","非零值","页面,则在这里放置项目网站数据。","项目中使用的标识符","项目依赖的第三方工具,比如","项目命名","项目工具","项目工具。","项目布局","项目布局代码风格功能设计最佳性能项目布局","项目布局参考业界认可度较高的","项目文档","项目文档。","项目用到的相关资源文件,比如项目","项目确实有一个","项目网站数据","项目网站数据。","项目说明","项目说明。","项目资源文件","项目资源文件。","项目配套工具,实现这些工具可以使用从","顺序是明确的,但代码可以更改,","预先分配容量这种方式。","预先声明的标识符","首先根据互斥锁和读写锁分别实现对共享","首先看一下遍历基本类型切片时二者的性能差别,以","首次被加载时执行,若迟迟未被使用,则既浪费了内存,又延长了程序加载时间。","高性能编码","高性能编程技法吧。","高效的代码是我们每一个","魔法字面量","(1)command","(1)一个指向某些特定类型信息的指针;","(1)不明显的控制流:任何函数都可以退出程序,因此很难对控制流进行推理;","(1)不能表示为单个赋值的复杂表达式;","(1)向嵌入接口添加方法是一个破坏性的改变;","(1)如果调用者应该可以访问底层错误,请使用","(1)导出类型的部分","(1)您不应明确返回长度为零的切片。应该返回nil","(1)无论程序环境或调用如何,行为都必须是完全确定的;","(1)无锁单向链表实现时在插入时需要进行","(1)调用者是否需要匹配错误以便他们可以处理它?","(1)返回原始错误;","(2)json:encoding/json","(2)一个指向具体数据的指针。如果存储的数据是指针,则直接存储。如果存储的数据是一个值,则存储指向该值的指针。","(2)为了方便打印链表内容,实现一个string()方法遍历链表,且使用值作为接收者,避免打印对象指针时无法生效。","(2)从嵌入结构体删除方法是一个破坏性的改变;","(2)使用","(2)可插入的钩子,如","(2)导出或非导出类型实现了接口且属于某类型的一部分(匿名嵌套);","(2)要检查切片是否为空,请始终使用","(2)避免依赖其他","(2)错误消息是否为静态字符串,还是需要上下文信息的动态字符串?","(2)难以测试:退出程序的函数也将退出调用它的测试,这使得函数很难测试,并跳过了尚未被运行的其他代码;","(3)sql:database/sql","(3)任何其他情况都违反接口合理性检查,终止编译并通知用户。","(3)使用","(3)删除嵌入类型是一个破坏性的改变;","(3)对","(3)我们是否正在传递由下游函数返回的新错误?","(3)跳过清理:当函数退出程序时,会跳过已经进入","(3)避免访问或操作全局变量和环境状态,如机器信息、环境变量、工作目录、程序参数/输入等;","(3)零值切片(用var声明的切片)可立即使用,无需调用","(4)yaml:gopkg.in/yaml.v2","(4)即使使用满足相同接口的类型替换嵌入类型,也是一个破坏性的改变。","(4)避免",")。",",item",",unsafe.alignof(x)",",vet",",大部分的格式问题可以通过",",字长为",",并结合自身项目团队编码规范,力争给出全面、认可度较高的编码风格,帮助大家写出风格统一的简洁高效的代码。",",此工具在",",类似",",而不应全部零散放在一个大类型中。",",若缓存区满,则阻塞。协程任务结束,调用",";"],"pipeline":["stopWordFilter","stemmer"]},"store":{"./":{"url":"./","title":"前言","keywords":"","body":"本书由来内容简介目标读者互动勘误\n本书由来\nGo 语言自 2009 年诞生以来,因其出色的并发能力和简单易用的低门槛,已在各大厂商的后台高并发业务场景崭露头脚,甚至有取代传统后台服务开发语言 C++ 和 Java 之势。\nGo 不仅易用,也很易学,这得益于与之匹配的丰富学习资料。Go 官方网站已有系统全面的指导文档,新手可以快速通过官方资料,轻松上手。此外,第三方资料,也有百家争鸣之势。有介绍 Go 语言基础和实战的,有对 Go 源码进行剖析介绍实现原理的,有介绍高并发场景下实战指导的,也有介绍使用 Go 进行高性能编程的,等等。很遗憾的是,没有发现一个系统介绍 Go 编码建议的。至此,本书应运而生。\n本书所述内容谈不上是 Go 的最佳实践,但希望能够帮助广大 Gopher 向 Go 的最佳实践更近一步。\n内容简介\n各个公司或组织,都有各自不同的 Go 编码规范,但大同小异。规范是一种倡导,不遵守并不代表错误,但当大家都遵守规范时,你会发现,整个世界将变得整洁有序。\n本文结合官方编码建议,大厂编码规范、开源技术书籍和自身项目经验,尽可能以简短的语言给出一套行之有效 Go 编码建议,让您的代码高效易读。\n本书主要分为四个方面:\n\n项目布局\n\n项目布局参考业界认可度较高的 Standard Go Project Layout,给出布局建议。一个清晰的项目结构,能帮忙我们高效有序的管理与日俱增的业务代码。不会随着代码量的递增,项目代码变得凌乱而不堪入目。\n\n编码风格\n\n编码风格从简洁易读的角度出发,参考 Go 官方 Go Code Review Comments\n,并结合自身项目团队编码规范,力争给出全面、认可度较高的编码风格,帮助大家写出风格统一的简洁高效的代码。\n\n功能实践\n\nGo 虽然简单,但其功能特性却不单一。其丰富的语言特性,在使用时还是有很多不同的姿势。本书从功能特性出发,给出 Go 实践建议,帮助我们更好的使用 Go 写出更优质的代码。\n\n高性能编码\n\n高效的代码是我们每一个 coder 的共同追求。为书写效率更高的代码,本文将结合 Go 语言特性,从常用数据结构、内存管理和并发,三个方面给出相关建议。\n本文所述内容均为参考意见,并非标准。其中许多是 Go 的通用准则,其他扩展内容也参考了很多官方指南,包括但不限于。\n\nEffective Go\nGolang Wiki | Go Common Mistakes\nGolang Wiki | Go Code Review Comments\nThe Go Programming Language Specification\nThe Go Programming Frequently Asked Questions (FAQ)\n\n目标读者\n如果是 Go 的初学者,建议先略过本书,了解下 Go 官方的入门指南 A Tour of Go,这应该是入门必读最佳读物。\n如果是想全面了解 Go 语法知识和语言特性与,也建议先略过本书。Go 官方文档 The Go Programming Language Specification 和 Effective Go,以及第三方书籍 Go 语言圣经 也是不错的选择。\n如果是想深入了解 Go 语言实现原理,还是建议先略过本书。虽然本书略有涉及,但不够全面。Go 源码应该是你的首选,再结合精彩的第三方分析,如 Go 语言设计与实现,应该会大有收获。\n那么到底是谁适合阅读本书呢?如果你是一位有 Go 开发经验的 Gopher,想更好地管理 Go 代码,想写出更加高效易读的 Go 代码,想让自己拥有一个更好的编码风格, 想离 Go 最佳实践更近一步,建议看看本书。\n互动勘误\n如果你对文章内容有任何疑问和建议,欢迎在应相应章节下留言探讨。\n本书为开源书籍,希望得到大家的协同共建,不断迭代丰富。如果有你的建议和 PR,它将会变得更好。 \npowered by Gitbook该文章修订时间:\n2022-05-21 22:12:52\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第一篇:项目布局/项目布局.html":{"url":"第一篇:项目布局/项目布局.html","title":"项目布局","keywords":"","body":"1.前言2.项目布局2.1 整体风格2.2 Go 代码目录/cmd/internal/pkg/vendor2.3 服务应用程序目录/api2.4 Web 应用程序目录/web2.5 通用应用目录/configs/init/scripts/build/deployments/test/README.md2.6 其他目录/docs/tools/examples/third_party/githooks/assets/website2.7 不应该拥有的目录/src3.小结参考文献1.前言\n不管是什么语言,开发什么项目,一个稍大的项目,必然要面临如何管理项目结构布局的问题,因为一个简洁清晰的布局是项目可读的关键。\n有些语言自身提供了目录结构规范,但对于较为年轻的 Golang,目前官方团队并未提供权威规范。不过不用担心,我们依然有一个规范可以参考,那就是业界推崇的 Standard Go Project Layout。\n2.项目布局\n2.1 整体风格\n你的项目结构布局看起来应该像下面这个样子。\n# Go 代码目录\n|--cmd 可执行文件目录\n|--internal 私有库代码(仅本项目使用)\n|--pkg 公有库代码(外部项目可以使用)\n|--vendor 外部依赖库\n\n# 服务应用程序目录\n|--api 服务对外接口\n\n# Web 应用程序目录\n|--web Web 应用程序的组件\n\n# 通用应用目录\n|--configs 配置信息\n|--init 初始化信息\n|--scripts 执行各种构建、安装、分析等操作的脚本\n|--build 打包和持续集成\n |-- package 构建依赖包\n |-- ci 持续集成配置与脚本\n|--deployments 部署相关\n|--test 测试相关\n|--README.md 项目说明\n\n# 其他目录\n|--docs 项目文档\n|--tools 项目工具\n|--examples 应用程序和公共库的示例\n|--third_party 外部辅助工具\n|--githooks Git 钩子\n|--assets 项目资源文件\n|--website 项目网站数据\n\n# 不应该拥有的目录\n|--src 源码目录\n\n2.2 Go 代码目录\n/cmd\n可执行文件目录。\n通常只包含一个简单的 main 函数,调用 /internal 和 /pkg 中的代码,作为项目的主应用目录。目录也可以包含多个可执行文件,子目录名称一般与可执行文件相对应(如:/cmd/myapp )。\n不要在该目录下放太多的代码,如果代码可以被其他项目导入使用,请放到 /pkg 目录下, 如果代码不可复用或者你不希望其他项目使用,请放到 /internal 目录下。\n/internal\n私有库代码(仅本项目使用)。\n这里放不希望被其他应用程序或者库导入的代码。注意:从 Go1.4 起,从编译器层面限制该目录不可被导出,而且不只是项目根目录下的 internal,所有名为 internal 的子目录都不能被导出。\n你还可以在 internal 目录内部增加一些代码结构来区分共享和非共享的。虽然它并不是必须的(尤其是小的项目),但是最好能从视觉上区分包的用途。 你实际的代码可以放在 /internal/app/myapp 中,而应用的共享代码可以放在 /internal/pkg/ 目录下。\n/pkg\n公有库代码(外部项目可以使用)。\n这里放希望被其他应用程序或者库导入的代码,所以在这里放东西之前要三思。\n含有 /pkg 目录的项目结构是一种常见的布局模式,但并不是所有人都接受它,一些 Go 社区的人并不推荐它。\n/vendor\n外部依赖库。\n如果手动管理依赖包可以将依赖包放到该目录,当然推荐使用依赖包管理工具 Go Modules 进行自动化管理。\n注意,1.11 开始,官方推荐使用新的依赖管理系统 Go Modules。从 1.13 以后,Go 还启用了模块代理功能(默认使用 https://proxy.golang.org 作为他们的模块代理服务器)。使用 Go Modules,我们并不需要 vendor 目录。\n2.3 服务应用程序目录\n/api\n服务对外接口。\n这里是服务对外接口的实现,定义接口时,我们应该遵循 OpenAPI Specification。\n2.4 Web 应用程序目录\n/web\n存放 Web 应用程序特定组件,如静态 Web 资源、服务器端模板和 SPA(Single Page Application)。\n2.5 通用应用目录\n/configs\n配置信息。\n如不同环境(测试、正式)的服务配置信息。\n/init\n初始化信息。\n系统初始化(systemd, upstart, sysv)和进程管理(runit, supervisord)配置。\n/scripts\n执行各种构建、安装、分析等操作的脚本。\n这些脚本帮助根目录下 Makefile(如果有的话)变得小而简单,例如 github/hashicorp/terraform/Makefile。\n/build\n打包和持续集成。\n将你的云( AMI )、容器( Docker )、操作系统( deb、rpm、pkg )包配置和脚本放在 /build/package 目录下。\n将你的 CI (travis、circle、drone)配置和脚本放在 /build/ci 目录下。\n/deployments\n部署相关。\n如 IaaS、PaaS、系统和容器编排部署配置和模板(docker-compose、kubernetes/helm、mesos、terraform、bosh)。注意,在一些存储库中(特别是使用 kubernetes 部署的应用程序),这个目录被称为 /deploy。\n/test\n测试相关。\n如放置测试工具和测试依赖数据。对于较大的项目,有一个数据子目录是有意义的。例如,你可以使用 /test/data 或 /test/testdata。请注意,如果你需要忽略目录中的内容,Go 还会忽略以“.”或“_”开头的目录或文件,因此在如何命名测试数据目录方面有更大的灵活性。\n/README.md\n项目说明。\nMarkdown 格式的说明文档,是用户了解一个项目最直观的入口。如果有需要,添加不同语言的 README 将更加人性化,如 简体中文 README_zh-CN.md。\n2.6 其他目录\n/docs\n项目文档。\n关于项目的设计文档,用户的使用文档等(除了 godoc 生成的文档之外)均可以放在该目录。\n/tools\n项目工具。\n项目配套工具,实现这些工具可以使用从 /pkg 和 /internal 导入代码。\n/examples\n应用程序和公共库的示例。\n丰富的示例将帮助用户更加便捷快速的了解上手一个项目,再加上 README,相得益彰。\n/third_party\n外部辅助工具。\n项目依赖的第三方工具,比如 Swagger UI。\n/githooks\nGit 钩子。\n使用 Git 钩子,可以帮忙我们在代码提交时完成一些检测,比如分支名称和 commit 信息是否符合规范。\n/assets\n项目资源文件。\n项目用到的相关资源文件,比如项目 Logo,README 中引用的图片等。\n/website\n项目网站数据。\n如果你不使用 Github 页面,则在这里放置项目网站数据。\n2.7 不应该拥有的目录\n/src\n源码目录。\n有些 Go 项目确实有一个 src 目,但这通常发生在开发人员有 Java 背景。不同类型的代码应该有自己的目录,而不是全部放到 src 下面,就像不应该拥有 comm 和 util 这样的目录,因为这些名称含义太泛了,违背了单一职责原则。\n3.小结\n这是 Go 应用程序项目的基本布局,是社区 Gopher 们努力的结果。此项目布局是通用的,建议并非强制,当然我们最好遵守,因为这能让我的项目布局看起来更加规范,易于交流和维护。\n如果发现此项目布局规范并不适用自己的项目,可在其基础上适当做出改变,不要泥古拘方。\n\n参考文献\nStandard Go Project Layout\nWikipedia List of ISO 639-1 codes\nOfficial ISO 639 list \npowered by Gitbook该文章修订时间:\n2022-05-01 19:54:14\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/1.格式化.html":{"url":"第二篇:代码风格/1.格式化.html","title":"1.格式化","keywords":"","body":"主体风格占位符主体风格\n\n代码必须用 gofmt 工具格式化。\n\ngofmt 使用制表符进行缩进,使用空白符进行对齐。\nIDE 在保存代码时可设置自动执行 gofmt,如 GoLand 的 Settings > Tools > File Watchers 中可勾选 go fmt 并指定作用范围。\n\n占位符\n\n通过%v打印错误信息时建议加冒号。\n\n// Bad\nlogger.Errorf(\"num %d, err %s\", num, err.Error())\n\n// Good\nlogger.Errorf(\"num:%d, err:%v\", num, err.Error())\n\n\n字符串占位符,如果输入数据来自外部,建议使用%q进行安全转义。\n格式化字符串中多个占位符之间要有空格。\n\nfmt.Printf(\"%v这里要空格%v\", a, b)\n\npowered by Gitbook该文章修订时间:\n2022-05-21 21:18:14\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/2.代码行.html":{"url":"第二篇:代码风格/2.代码行.html","title":"2.代码行","keywords":"","body":"行长度换行方式不必要的空行括号和空格行数行长度\n一行代码不要超过120列,超过的情况,使用合理的方法换行。\n例外场景:\n\nimport 模块语句\nstruct tag\n工具生成的代码\n\n换行方式\n采用惰性换行,换行前应尽可能占满当前行不留空位。\n// Bad\nfmt.Printf(\"%v %v %v %v %v %v %v %v %v %v %v %v %v %v\\n\",\n0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,89, 144, 233)\n\n// Good\nfmt.Printf(\"%v %v %v %v %v %v %v %v %v %v %v %v %v %v\\n\", 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,\n89, 144, 233)\n\n不必要的空行\n\n函数体第一行不要换行。\n\n// Bad\nfunc foo() {\n\n // func body\n}\n\n// Good\nfunc foo() {\n // func body\n}\n\n\n函数调用和对调用结果的处理,是紧密相连的,不能加空行。\n\n// Bad\nres, err := foo()\n\nif err != nil || res.Ret != 0 {\n return\n}\n\n// Good\nres, err := foo()\nif err != nil || res.Ret != 0 {\n return\n}\n\n\nreturn 语句前不要换行。\n\n// Bad\nfunc foo() {\n // func body\n\n return\n}\n\n// Good\nfunc foo() {\n // func body\n return\n}\n\n括号和空格\n\n遵循 gofmt 的逻辑。\n运算符和操作数之间要留空格。\n作为输入参数或者数组下标时,运算符和操作数之间不需要空格,紧凑展示。\n\nvar i int = 1 + 2 // 运算符和操作数之间要留空格\nv := []float64{1.0, 2.0, 3.0}[i-i] // i-i 作为下标不留空格\nfmt.Printf(\"%f\\n\", v+1) // v+1 作为入参不要留空格\n\n\n不要添加没必要的括号。\n\n// Bad\nif foo && (int(bar) > 0) {\n // ...\n}\n\n// Good\nif foo && int(bar) > 0 {\n // ...\n}\n\n行数\n\n函数长度不能超过 80 行。\n文件长度不能超过 800 行。 \n\npowered by Gitbook该文章修订时间:\n2022-05-21 21:18:32\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/3.字符串.html":{"url":"第二篇:代码风格/3.字符串.html","title":"3.字符串","keywords":"","body":"\n字符串字面量\n\nGo 支持使用原始字符串字面值,可以使用反引号来表示原生字符串。在需要转义的场景下,我们应该尽量使用使用反引号表示字符串,避免转义。\n// Bad\nwantError := \"unknown name:\\\"test\\\"\"\n\n// Good\nwantError := `unknown error:\"test\"`\n\n\n不要使用字符串表示 list 和 map 结构。\n\n// Bad\nvar Receivers = \"tom,jerry,spike\"\n\n// Good\nvar Receivers = []string{\"tom\",\"jerry\",\"spike\"}\n\n\n字符串拼接\n\n行内字符串拼接时,出于性能的考虑,待拼接字符串数量较少(fmt.Sprintf()。\n// Bad\nstr := fmt.Sprintf(\"rsp code is %v\", code)\nstr := \"rsp code is \" + code \" and msg is\" + msg\n\n// Good\nstr := \"rsp code is \" + code\nstr := fmt.Sprintf(\"rsp code is %v and msg is %v\", code, msg)\n\npowered by Gitbook该文章修订时间:\n2022-05-21 22:19:54\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/4.依赖管理.html":{"url":"第二篇:代码风格/4.依赖管理.html","title":"4.依赖管理","keywords":"","body":"依赖规范import 规范依赖规范\n\ngo1.11 以上必须使用 go modules 模式。go mod init git.code.oa.com/group/myrepo\n\n\n使用 go modules 作为依赖管理的项目不要提交 vendor 目录。\n使用 go modules 管理依赖的项目, go.sum文件必须提交,不要添加到.gitignore规则中。\n\nimport 规范\n\n使用 goimports 工具自动格式化引入的包名,import 规范原则上以 goimports 规则为准。\n\ngoimports 会自动添加依赖的包,并移除未引用的包。把依赖包按字母序升序排列,并对包进行分组管理。通过空行隔开,默认分为标准库包和非标准库包(第三方包和内部包)。\n\n导入的包按照先后顺序应该分为三组:\n标准包\n外部包\n内部包\n\n\n\n带域名的包名都属于外部包,如 github.com/xxx/xxx。内部包是指不能被外部 import 的包。\n// Bad\nimport (\n \"fmt\"\n \"os\"\n \"go.uber.org/atomic\"\n \"golang.org/x/sync/errgroup\"\n \"myproject/models\"\n \"myproject/controller\"\n)\n\n// Good\nimport (\n \"encoding/json\"\n \"strings\"\n\n \"go.uber.org/atomic\"\n \"golang.org/x/sync/errgroup\"\n\n \"myproject/models\"\n \"myproject/controller\"\n)\n\n\n不要使用相对路径导入内部包,应该使用完整的路径引入包。\n\n// Bad\nimport (\n \"../net\"\n)\n\n// Good\nimport (\n \"xxxx.com/proj/net\"\n)\n\n\n必要时给包起个别名\n\n包名和 git 路径名不一致时,或者多个相同包名冲突时,使用别名代替会有更好的可读性。\n// Bad\nimport (\n elastic \"github.com/olivere/elastic/v7\"\n)\n\n// Good\nimport (\n elastic \"github.com/olivere/elastic/v7\"\n)\n\n\n通用的功能包,应该放在 public 目录下,而不是具体业务目录下。\n\n// Bad\nimport \"github.com/xxxxxxxx/XXXServer/pkg/formatlog\"\n\n// Good\nimport \"github.com/xxxxxxxx/utils/formatlog\"\n\n\nimport . 只能用于测试文件,且必须是为了解决循环依赖,才能使用。\n\npackage foo_test\n\nimport (\n \"bar/testutil\" // also imports \"foo\"\n . \"foo\"\n)\n\n在这种情况下,测试文件不能在包 foo 中,因为它使用 bar/testutil,后者导入 foo。所以我们使用import .形式导入包 foo,让测试文件假装是包 foo 的一部分,尽管它不是。除了这一种情况,不要使用import .,因为它使程序难以阅读,比如使用 Baz 这样的标识符,不知道其是顶级标识符还是导入包中的顶级标识符。\n\n引入第三方包要慎重。\n\n如引入 Github 上的包要确认活跃度,不知名的包可能会被下架或出现不兼容的版本升级情况,必要情况下可 fork 一份。\n// 该包已经 404 了。\ngithub.com/astaxie/beego/orm\n\npowered by Gitbook该文章修订时间:\n2022-05-22 15:40:04\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/5.初始化.html":{"url":"第二篇:代码风格/5.初始化.html","title":"5.初始化","keywords":"","body":"初始化 struct初始化 map初始化 slice申明变量避免使用 init()初始化 struct\n\n使用字段名初始化结构体。\n\n// Bad\nk := User{\"John\", \"Doe\", true}\n\n// Good\nk := User{\n FirstName: \"John\",\n LastName: \"Doe\",\n Admin: true,\n}\n\n例外:如果有 3 个或更少的字段,则可以在测试表中省略字段名称。\ntests := []struct{\n op Operation\n want string\n}{\n {Add, \"add\"},\n {Subtract, \"subtract\"},\n}\n\n\n省略结构中的零值字段。\n\n// Bad\nuser := User{\n FirstName: \"John\",\n LastName: \"Doe\",\n MiddleName: \"\",\n Admin: false,\n}\n\n// Good\nuser := User{\n FirstName: \"John\",\n LastName: \"Doe\",\n}\n\n例外:在字段名提供有意义上下文的地方可以显示指定零值。如表驱动单元测试中的测试用例,即使字段为零值,限制指定零值,通过字段名可清晰地表达用例的含义。\ntests := []struct{\n give string\n want int\n}{\n {give: \"0\", want: 0},\n // ...\n}\n\n\n声明零值结构使用关键字 var。\n\n如果在声明中省略了结构的所有字段,请使用 var 声明结构,因为这样更加简洁,其各个字段值为字段类型对应的零值。\n// Bad\nuser := User{}\n\n// Good\nvar user User\n\n\n初始化结构指针变量使用字面量\n\n初始化结构指针变量时,请使用&T{}代替new(T),可以与结构体初始化在代码风格上保持一致。\n// Bad\nsval := T{Name: \"foo\"}\n\n// inconsistent\nsptr := new(T)\nsptr.Name = \"bar\"\n\n// Good\nsval := T{Name: \"foo\"}\n\nsptr := &T{Name: \"bar\"}\n\n初始化 map\n初始化 map 优先使用 make() 函数而不是字面量,因为这样看起来更容易和申明区分开来。\n// Bad\nvar (\n // m1 读写安全\n // m2 在写入时会 panic\n m1 = map[T1]T2{}\n m2 map[T1]T2\n)\n// 声明和初始化在视觉上很相似\n\n// Good\nvar (\n // m1 读写安全\n // m2 在写入时会 panic\n m1 = make(map[T1]T2)\n m2 map[T1]T2\n)\n// 声明和初始化在视觉上是不同的\n\n尽可能地在初始化时提供 map 容量大小。\n例外:如果 map 包含固定的元素列表,则使用字面量初始化 map,这样可以在初始化时指定元素。\n// Bad\nm := make(map[T1]T2, 3)\nm[k1] = v1\nm[k2] = v2\nm[k3] = v3\n\n// Good\nm := map[T1]T2{\n k1: v1,\n k2: v2,\n k3: v3,\n}\n\n初始化 slice\n\n非零值 slice 使用make()初始化,并指定容量。\n\n// Bad\nnums := []int{}\n\n// Good\nnums := make([]int, 0, CAP)\n\n\n空切片使用 var 声明\n\n不管是全局切片还是局部切片,使用 var 申明 nil 切片,代码会更加简洁清晰。\n// Bad\nfunc foo() {\n // 长度为 0 的非 nil 切片\n nums := []int{}\n}\n\n// Good\nfunc foo() {\n // nil 切片\n var nums []int\n}\n\n\nnil 是一个有效的 slice。\n\nnil 是一个有效的长度为 0 的 slice,这意味着,\n(1)您不应明确返回长度为零的切片。应该返回nil 来代替。\n// Bad\nif x == \"\" {\n return []int{}\n}\n\n// Good\nif x == \"\" {\n return nil\n}\n\n(2)要检查切片是否为空,请始终使用 len(s) == 0 而非 nil。\n// Bad\nfunc isEmpty(s []string) bool {\n return s == nil\n}\n\n// Good\nfunc isEmpty(s []string) bool {\n return len(s) == 0\n}\n\n(3)零值切片(用var声明的切片)可立即使用,无需调用 make() 创建。\n// Bad\nnums := []int{}\n// or, nums := make([]int)\n\nif add1 {\n nums = append(nums, 1)\n}\n\nif add2 {\n nums = append(nums, 2)\n}\n\n// Good\nvar nums []int\n\nif add1 {\n nums = append(nums, 1)\n}\nif add2 {\n nums = append(nums, 2)\n}\n\n记住,虽然 nil 切片是有效的切片,但它不等于长度为 0 的切片(一个为 nil,另一个不是),并且在不同的情况下(例如序列化),这两个切片的处理方式可能不同。\n申明变量\n\n就近申明。\n\n变量申明的位置尽量靠近使用的地方。\n// Bad\nfunc foo(m map[string]interface{}) string {\n info, _ := m[\"key\"].(Info)\n ...\n return handle(info)\n}\n\n// Good\nfunc foo(m map[string]interface{}) string {\n ...\n info, _ := m[\"key\"].(Info)\n return handle(info)\n}\n\n\n相似的声明放在一组。\n\n对于变量、常量的声明,相似的声明应该放在一组。类型的定义同样适用。\n// Bad\nconst a = 1\nconst b = 2\n\nvar a = 1\nvar b = 2\n\ntype Area float64\ntype Volume float64\n\n// Good\nconst (\n a = 1\n b = 2\n)\n\nvar (\n a = 1\n b = 2\n)\n\ntype (\n Area float64\n Volume float64\n)\n\n仅将相关的声明放在一组。不要将不相关的声明放在一组。\n// Bad\ntype Operation int\n\nconst (\n Add Operation = iota + 1\n Subtract\n Multiply\n EnvVar = \"MY_ENV\"\n)\n\n// Good\ntype Operation int\n\nconst (\n Add Operation = iota + 1\n Subtract\n Multiply\n)\n\nconst EnvVar = \"MY_ENV\"\n\n另外,分组使用的位置没有限制,我们也可以在函数内部使用它们。\n// Bad\nfunc f() string {\n red := color.New(0xff0000)\n green := color.New(0x00ff00)\n blue := color.New(0x0000ff)\n ...\n}\n\n// Good\nfunc f() string {\n var (\n red = color.New(0xff0000)\n green = color.New(0x00ff00)\n blue = color.New(0x0000ff)\n )\n ...\n}\n\n\n全局变量申明使用 var 关键字并省略类型。\n\n全局变量使用 var 关键字申明,一般情况下其类型与表达式的类型一致,这种情况下可省略其类型。\n// Bad\nvar s string = F()\n\nfunc F() string { return \"A\" }\n\n// Good\n// 由于 F 已经明确了返回一个字符串类型,因此我们没有必要显式指定类型。\nvar s = F()\n\nfunc F() string { return \"A\" }\n\n如果表达式的类型与所需的类型不完全匹配,请指定类型。\ntype myError struct{}\n\nfunc (myError) Error() string { return \"error\" }\n\nfunc F() myError { return myError{} }\n\n// F 返回一个 myError 类型的实例,但是我们要 error 类型。\nvar _e error = F()\n\n\n局部变量使用短变量声明形式(:=)。\n\n// Bad\nfunc foo() {\n var s = \"foo\"\n var i int64 // 虽然默认为 0,但不够直观\n ...\n}\n\n// Good\nfunc foo() {\n s := \"foo\"\n i := in64(0) // 显示指明 0,更加直观\n ...\n}\n\n例外,如果是相似的一组变量,请使用 var 声明到一组。\n// Bad\nfunc foo() {\n s1 := \"foo\"\n s2 := \"bar\"\n ...\n}\n\n// Good\nfunc foo() {\n var (\n s1 = \"foo\"\n s2 = \"bar\"\n )\n ...\n}\n\n\n如果全局变量仅在单个函数内使用,则应该定义为局部变量。\n\n避免使用 init()\n尽可能避免使用 init(),当 init() 不可避免时,init() 应该做到:\n(1)无论程序环境或调用如何,行为都必须是完全确定的;\n(2)避免依赖其他 init() 函数的顺序或副作用。虽然 init() 顺序是明确的,但代码可以更改, 因此 init() 函数之间的关系可能会使代码变得脆弱和容易出错;\n(3)避免访问或操作全局变量和环境状态,如机器信息、环境变量、工作目录、程序参数/输入等;\n(4)避免 I/O,包括文件系统、网络和系统调用。\n不能满足这些要求的代码可能要在 main() 函数中被调用(或程序生命周期中的其他地方),或作为 main() 函数本身的一部分。特别是打算给其他程序使用的库应该特别注意代码行为的完全确定性, 而不是执行“init magic”。\n// Bad\ntype Foo struct {\n // ...\n}\nvar _defaultFoo Foo\nfunc init() {\n _defaultFoo = Foo{\n // ...\n }\n}\n\n// Good\nvar _defaultFoo = Foo{\n // ...\n}\n// 或者为了更好的可测试性\nvar _defaultFoo = defaultFoo()\nfunc defaultFoo() Foo {\n return Foo{\n // ...\n }\n}\n\n// Bad\ntype Config struct {\n // ...\n}\nvar _config Config\nfunc init() {\n // Bad: 基于当前目录\n cwd, _ := os.Getwd()\n // Bad: I/O\n raw, _ := ioutil.ReadFile(\n path.Join(cwd, \"config\", \"config.yaml\"),\n )\n yaml.Unmarshal(raw, &_config)\n}\n\n// Good\ntype Config struct {\n // ...\n}\nfunc loadConfig() Config {\n cwd, err := os.Getwd()\n // handle err\n raw, err := ioutil.ReadFile(\n path.Join(cwd, \"config\", \"config.yaml\"),\n )\n // handle err\n var config Config\n yaml.Unmarshal(raw, &config)\n return config\n}\n\n凡事无绝对,某些情况下,init() 可能更可取或是必要的:\n(1)不能表示为单个赋值的复杂表达式;\n(2)可插入的钩子,如 database/sql、编码类型注册表等;\n(3)对 Google Cloud Functions 和其他形式的确定性预计算的优化。 \npowered by Gitbook该文章修订时间:\n2022-05-22 15:43:51\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/6.错误处理.html":{"url":"第二篇:代码风格/6.错误处理.html","title":"6.错误处理","keywords":"","body":"error 处理panic 处理recover 处理类型断言error 处理\n\n显示处理 error。\n\n如果 error 作为函数的值返回,必须对 error 进行处理,或使用空白标识符忽略。对于defer xx.Close()可以不用显式处理。\n\nerror 作为函数返回值且有多个返回值的时候,error 必须是最后一个参数。\n\n// Bad\nfunc do() (error, int) {\n}\n\n// Good\nfunc do() (int, error) {\n}\n\n\n采用独立的错误流进行处理。\n```go\n// Bad\nif err != nil {\n // handle error\n} else {\n // normal code\n}\n\n// Good\nif err != nil {\n // handle error\n return // or continue, etc.\n}\n// normal code\n- Fail Fast 原则。\n\n如果出现失败应该立即返回error,如果继续处理,则属于特殊情况需要添加注释。\n\n- 如果函数返回值需用于初始化其他变量,则采用下面的方式。\n\n```go\nx, err := f()\nif err != nil {\n // error handling\n return // or continue, etc.\n}\n// use x\n\n错误判断独立处理,不与其他变量组合判断。\n\n一个可能引发的问题就是 err 如果为 nil,但是满足其他逻辑进入到 if 块内,读取 err 值将引发 panic。\n// Bad\nx, y, err := f()\nif err != nil || y == nil {\n return err // 当y与err都为空时,函数的调用者会出现错误的调用逻辑\n}\n\n// Good\nx, y, err := f()\nif err != nil {\n return err\n}\nif y == nil {\n return fmt.Errorf(\"some error\")\n}\n\n\n生成带参数的 error 使用 fmt.Errorf。\n```go\n// Bad\nerrors.New(fmt.Sprintf(\"module xxx: %v\",err))\n\n// Good\nfmt.Errorf(\"module xxx: %v\", err)\n- 不要包装系统调用错误,并给出一些没意义的附加信息。\n\n```go\n// Bad\nerr := exe.Run()\nif err != nil {\n return fmt.Errorf(\"run error %s\", err.Error())\n}\n\n// Good\nreturn exe.Run()\npanic 处理\n\n不要随便 panic。\n\n在业务逻辑处理中禁止使用 panic。因为 panic 是级联失败(cascading failures)的主要根源。如果发生错误,该函数应该返回错误,让调用方决定如何处理它。\n// Bad\nfunc run(args []string) {\n if len(args) == 0 {\n panic(\"an argument is required\")\n }\n // ...\n}\n\nfunc main() {\n run(os.Args[1:])\n}\n\n// Good\nfunc run(args []string) error {\n if len(args) == 0 {\n return errors.New(\"an argument is required\")\n }\n // ...\n return nil\n}\n\nfunc main() {\n if err := run(os.Args[1:]); err != nil {\n fmt.Fprintln(os.Stderr, err)\n os.Exit(1)\n }\n}\n\npanic/recover 不是错误处理的合适策略,仅当发生不可恢复的异常(如 nil 引用)时,才可以 panic。\n在 main 包中程序初始化是一个例外,如程序启动时,文件无法打开或数据库无法连接导致程序无法正常运行可使用 panic。\n对于其它的包,可导出的接口也不能有 panic。\n\n在 main 包中使用 log.Fatal 或 log.Fatalf 结束程序而不是 panic。\n\n如果 main 中需要使用 panic,建议使用 log.Fatal 或 log.Fatalf 来取代 panic,因为这样可以记录错误的同时结束程序,方便排查问题。\n\npanic 只能在当前 Goroutine 被捕获。\n\npanic 捕获最晚要在当前 Goroutine 最顶层将其捕获,在其他 Goroutine 中无法捕获当前 Goroutine 的 panic。每个自行启动的 Goroutine,必须在入口处捕获 panic,并打印详细堆栈信息或进行其它处理。\n下面是一个反面示例,其他 Goroutine 中无法捕获当前 Goroutine 的 panic。\npackage main\n\nimport (\n \"fmt\"\n \"time\"\n)\n\nfunc main() {\n defer func() {\n if err := recover(); err != nil {\n fmt.Println(err)\n }\n }()\n go func() {\n fmt.Println(\"======begin work======\")\n panic(\"nil pointer exception\")\n }()\n time.Sleep(1 * time.Second)\n fmt.Println(\"======after work======\")\n}\n\n程序将意外终止并输出:\n======begin work======\npanic: nil pointer exception\n\ngoroutine 6 [running]:\nmain.main.func2()\n /Users/dablelv/work/code/test/main.go:16 +0x65\ncreated by main.main\n /Users/dablelv/work/code/test/main.go:14 +0x48\nrecover 处理\n\nrecover 用于捕获 runtime 的异常,禁止滥用 recover。\nrecover 只有在 defer 中调用才会生效。\n\n必须在 defer 中使用,一般用来捕获程序运行期间发生异常抛出的 panic 或程序主动抛出的 panic。\npackage main\n\nimport (\n \"log\"\n)\n\nfunc main() {\n defer func() {\n if err := recover(); err != nil {\n // do something or record log\n log.Println(\"exec panic error: \", err)\n // log.Println(debug.Stack())\n }\n }()\n\n getOne()\n\n panic(44) //手动抛出 panic\n}\n\n// getOne 模拟 slice 越界运行时抛出的 panic。\nfunc getOne() {\n defer func() {\n if err := recover(); err != nil {\n // do something or record log\n log.Println(\"exec panic error: \", err)\n // log.Println(debug.Stack())\n }\n }()\n\n var arr = []string{\"a\", \"b\", \"c\"}\n log.Println(\"hello,\", arr[4])\n}\n\n运行结果:\n2022/03/27 10:48:42 exec panic error: runtime error: index out of range [4] with length 3\n2022/03/27 10:48:42 exec panic error: 44\n类型断言\n\n类型断言使用 comma ok 式\n\n类型断言的单个返回值形式如果断言失败将产生 panic。因此,请始终使用 comma ok 式。如果不关心是否成功,ok 可显示使用空标识符(下划线)忽略。\n// Bad\nt := i.(string)\n\n// Good\nt, ok := i.(string)\nif !ok {\n // 优雅地处理错误。\n}\n\n// 如果不关心是否成功,可显示忽略 ok。\nt, _ := i.(string)\n\npowered by Gitbook该文章修订时间:\n2022-05-22 15:47:37\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/7.注释.html":{"url":"第二篇:代码风格/7.注释.html","title":"7.注释","keywords":"","body":"通用包注释函数注释结构体注释变量和常量注释类型注释接口注释在编码阶段同步写好类型、变量、函数、包注释,注释可以通过godoc导出生成文档。\n程序中每一个被导出的(大写的)名字,都应该有一个文档注释。\n所有注释掉的代码在提交 Code Review 前都应该被删除,除非添加注释讲解为什么不删除, 并且标明后续处理建议(如删除计划)。\n通用\n\n不要用注释删除代码。\n// 后面要有空格。\n中英文之间应该有空格。\n特殊实现需要注释。\n注释结束添加点或句号,参考标准库源码注释。\n\n包注释\n\n每个包都应该有一个包注释。\n包如果有多个 go 文件,只需要出现在一个 go 文件中(一般是和包同名的文件)即可。\n格式为// Package 包名 包信息描述。\n\n// Package math provides basic constants and mathematical functions.\npackage math\n\n// 或者\n\n/*\nPackage template implements data-driven templates for generating textual\noutput such as HTML.\n....\n*/\npackage template\n\n函数注释\n\n导出的函数和方法(结构体或接口下的函数称为方法)都必须有注释。\n\n注释描述函数或方法功能、调用方等信息。格式为:\"// 函数名 函数信息描述\"。\n注意,如果方法的接收器为不可导出类型,可以不注释,但需要质疑该方法可导出的必要性。\n// NewtAttrModel 是属性数据层操作类的工厂方法\nfunc NewAttrModel(ctx *common.Context) *AttrModel {\n // TODO\n}\n\n\n避免参数语义不明确。\n\n函数调用中意义不明确的实参可能会损害代码可读性。当参数名称的含义不明显时,请为参数添加 C 样式注释 (/* ... */)\n// Bad\n// func printInfo(name string, isLocal, done bool)\nprintInfo(\"foo\", true, true)\n\n// Good \n// func printInfo(name string, isLocal, done bool)\nprintInfo(\"foo\", true /* isLocal */, true /* done */)\n\n对于上面的示例代码,还有一种更好的处理方式是将上面的 bool 类型换成自定义类型。将来,该参数可以支持不仅仅局限于两个状态(true/false)。\ntype Region int\n\nconst (\n UnknownRegion Region = iota\n Local\n)\n\ntype Status int\n\nconst (\n StatusReady Status= iota + 1\n StatusDone\n // Maybe we will have a StatusInProgress in the future.\n)\n\nfunc printInfo(name string, region Region, status Status)\n\n\n非导出的函数,如果比较简单,不需要注释。\n解析函数应该注明解析字符串的范例,并明确不能处理的异常情况。\n\n结构体注释\n\n每个需要导出的自定义结构体或者接口都必须有注释说明。\n\n注释对结构进行简要介绍,放在结构体定义的前一行。格式为:\"// 结构体名 结构体信息描述\"。\n\n必要情况下字段给出注释。\n\n结构体内的可导出成员变量名,如果是个生僻词或意义不明确的词,必须要单独给出注释,放在成员变量的前一行或同一行的末尾。\n// User 用户结构定义了用户基础信息\ntype User struct {\n Name string\n Email string\n Demographic string // 族群\n}\n\n变量和常量注释\n\n每个需要导出的变量和常量都必须有注释说明。\n\n注释对变量和常量进行简要介绍,放在常量或变量定义的前一行。独行注释格式为:\"// 变量名 描述\",斜线后面紧跟一个空格。\n// FlagConfigFile 配置文件的命令行参数名。\nconst FlagConfigFile = \"--config\"\n\n// FullName 返回指定用户名的完整名称。\nvar FullName = func(username string) string {\n return fmt.Sprintf(\"fake-%s\", username)\n}\n\n\n大块变量或常量定义时的注释方式。\n\n块注释即在代码块前给出一个总的说明,然后每行变量或常量的末尾给出详细注释,这样看起来更加简洁。\n// 命令行参数。\nconst (\n FlagConfigFile1 = \"--config\" // 配置文件的命令行参数名 1。\n FlagConfigFile2 = \"--config\" // 配置文件的命令行参数名 2。\n FlagConfigFile3 = \"--config\" // 配置文件的命令行参数名 3。\n FlagConfigFile4 = \"--config\" // 配置文件的命令行参数名 4。\n)\n\n\n命名清晰的地方,不要添加无意义的注释。类型注释\n\n每个需要导出的类型定义(type definition)和类型别名(type aliases)都必须有注释说明。\n该注释对类型进行简要介绍,放在定义的前一行。\n格式为:\"// 类型名 描述\"。\n\n// StorageClass 存储类型\ntype StorageClass string\n\n// FakeTime 标准库时间的类型别名\ntype FakeTime = time.Time\n\n接口注释\n\n导出与非导出接口均需要有注释。\n需要描述谁,在什么场景下,如何使用接口。 \n\npowered by Gitbook该文章修订时间:\n2022-05-22 15:50:17\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/8.命名.html":{"url":"第二篇:代码风格/8.命名.html","title":"8.命名","keywords":"","body":"通用规则项目命名包命名文件命名函数命名结构体命名接口命名量命名通用常量命名方法接收器命名错误命名避免使用内置名称命名是代码规范中很重要的一部分,统一的命名规范有利于提高代码的可读性,好的命名仅仅通过命名就可以获取到足够多的信息。\n通用规则\n\n不要用宽泛、无意义的名字,如:\n\nutil\nhelper\ninfo\ncommon\n\n\n缩略语要么全小写,要么全大写。\n\n\n// Bad\nMd5\nUid\n\n// Good\nMD5\nmd5\nUID\nuid\n\n\n非缩略语则应该使用驼峰命名。\n不要使用2/4来表达英文 to/for。\n如无必要,不要起和包相同的名字。\n\n项目命名\n\n小写,如果有多个单词使用连字符分隔。\n\n// Bad\nGoEcharts\ngoecharts\ngoEcharts\n\n// Good\ngo-echarts\n\n包命名\n\n保持 package 的名字和目录一致。\n尽量采取有意义、简短的包名,尽量不要和标准库冲突。\n包名应该为小写单词,不要使用下划线或者混合大小写,使用多级目录来划分层级。\n简单明了的包命名,如:time、list、http。\n不用复数。如 net/url 而不是net/urls。\n包名谨慎使用缩写。当缩写是程序员广泛熟知的词时,可以使用缩写。例如:\nstrconv (string conversion)\nsyscall (system call)\nfmt (formatted I/O)\n\n\n不要使用大而全的无意义包名。\n\n如 util、common、misc、global。package 名字应该追求清晰且越来越收敛,符合‘单一职责’原则,而不是像common一样,什么都能往里面放,越来越膨胀,让依赖关系变得复杂,不利于阅读、复用、重构。注意,xxx/utils/encryption这样的包名是允许的。\n\n只有一个源文件的包,包名应该和文件名保持一致。\n不要轻易使用别名。\n\n更多可参考 Package names - The Go Blog 和 [Style guideline for Go packages]\n(https://rakyll.org/style-packages/)。\n文件命名\n\n采用有意义、简短的文件名。\n文件名应该采用小写,并且使用下划线分割各个单词。\n\n函数命名\n\n函数名必须遵循驼峰式,首字母根据访问控制决定使用大写或小写。\n代码生成工具自动生成的代码可排除此规则(如协议生成文件 xxx.pb.go,gotests 工具自动生成文件 xxx_test.go 里面的下划线)。\n函数应该以动词开头。\n\n// Bad\nfunc panicLinesParsing(){}\nfunc (f VerifyFlow) DataETL(ctx context.Context, datas []Data){}\n\n// Good\nfunc parsePanicLines(){}\nfunc (f VerifyFlow) ETLData(ctx context.Context, datas []Data){}\n\n结构体命名\n\n采用驼峰命名方式,首字母根据访问控制采用大写或者小写。\n结构体名应该是名词或名词短语,如 Customer、WikiPage、Account、AddressParser,它不应是动词。\n避免使用 Data、Info 这类意义太宽泛的结构体名。\n结构体的定义和初始化格式采用多行。\n\n// User 多行定义。\ntype User struct {\n Name string\n Email string\n}\n\n// 多行初始化。\nu := User{\n UserName: \"john\",\n Email: \"john@example.com\",\n}\n\n接口命名\n\n命名规则基本保持和结构体命名规则一致。\n单个函数的接口名以 er 作为后缀,如 Reader,Writer。\n\n// Reader 字节数组读取接口。\ntype Reader interface {\n // Read 读取整个给定的字节数据并返回读取的长度\n Read(p []byte) (n int, err error)\n}\n\n\n两个函数的接口名综合两个函数名。\n三个以上函数的接口名,类似于结构体名。\n\n// Car 小汽车结构申明。\ntype Car interface {\n // Start ...\n Start([]byte)\n // Stop ...\n Stop() error\n // Recover ...\n Recover()\n}\n\n量命名\n通用\n\n量名不应该以类型作为前缀/后缀。\n\n// map\nfilterHandlerMap -> opToHandler\n\n// slice\nuidSlice -> uids\n\n// array\nuidArray -> uids \n\n// 二维切片或数组。\n// 比如多个班级下的学生ID。\nuidSliceSlice -> classesUIDs\n\n\n量名应该是名词,进行时和过去式可以做形容词,成为量名的一部分。\n特有名词时,需遵循以下规则:\n如果变量为私有,且特有名词为首个单词,则使用小写,如 apiClient;\n其他情况都应该使用该名词原有的写法,如 APIClient、repoID、UserID;\n错误示例:UrlArray,应该写成 urlArray 或者 URLArray;\n详细的专有名词列表可参考这里。\n\n\n尽量不要用拼音命名。\n量名遵循驼峰式,根据是否导出决定首字母大小写。\n\n// 导出全局变量。\nvar AppVersion = \"1.0.0\"\n// 未导出全局变量。\nvar appVersion = \"1.0.0\"\n\n// 导出全局常量。\nconst AppVersion = \"1.0.0\"\n// 未导出全局常量。\nconst appVersion = \"1.0.0\"\n\n\n若量类型为 bool 类型,则名称应以 Has,Is,Can 或 Allow 等单词开头。\n私有量和局部量规范一致,均以小写字母开头。\n作用域较小的名字(局部变量/函数参数),尽量使用简短的名字。\n\n如 c 比 lineCount 要好,i 比 sliceIndex 要好。\n// Bad\nlineCount := getlineCount()\n for sliceIndex := range msgs {\n}\n\n// Good\nc := getlineCount()\n for i := range msgs {\n}\n\n\n作用域较大的名字(全局变量),不要使用缩写,要有明确的意义。\n\n如 lineCount 要比 c 好,sliceIndex 要比 i 好。\n// Bad\nvar c, i int\n\n// Good\nvar lineCount, sliceIndex int\n\n\n全局量中不要包含格式化字符,否则必然违反就近原则。\n\n// Bad\nvar (\n tGitHost = \"https://git.code.oa.com\"\n mrCommitsUri = \"/api/v3/projects/%s/merge_request/%s/commits\"\n)\n\n// Good\nfunc getMRCommitsUri() string {\n return fmt.Sprintf(\"/api/v3/projects/%s/merge_request/%s/commits\", \"foo\", \"bar\")\n}\n\n常量命名\n\n如果是枚举类型的常量,需要先创建相应类型。\n\n// Scheme 传输协议。\ntype Scheme string\n\n// 传输协议。\nconst (\n HTTP Scheme = \"http\" // HTTP 明文传输协议\n HTTPS Scheme = \"https\" // HTTPS 加密传输协议\n)\n\n方法接收器命名\n\n推荐以类名第一个英文首字母的小写作为接收器的命名。\n接收器的名称在函数超过 20 行的时候不要用单字符。\n命名不能采用 me,this,self 这类易混淆名称。\n\n错误命名\n对于存储为全局变量的错误值,根据是否导出,使用前缀 Err 或 err。\nvar (\n // 导出以下两个错误,以便此包的用户可以将它们与errors.Is 进行匹配。\n ErrBrokenLink = errors.New(\"link is broken\")\n ErrCouldNotOpen = errors.New(\"could not open\")\n\n // 这个错误没有被导出,因为我们不想让它成为我们公共 API 的一部分。\n errNotFound = errors.New(\"not found\")\n)\n\n对于自定义错误类型,请改用后缀 Error。\n// 这个错误被导出,以便这个包的用户可以将它与 errors.As 匹配。\ntype NotFoundError struct {\n File string\n}\n\nfunc (e *NotFoundError) Error() string {\n return fmt.Sprintf(\"file %q not found\", e.File)\n}\n\n// 这个错误没有被导出,因为我们不想让它成为公共 API 的一部分。\n// 但我们仍然可以在的包内将其和 errors.As 一起使用。\ntype resolveError struct {\n Path string\n}\n\nfunc (e *resolveError) Error() string {\n return fmt.Sprintf(\"resolve %q\", e.Path)\n}\n\n避免使用内置名称\nGo 语言规范 language specification 概述了几个内置的,不应在 Go 项目中使用的标识符 [predeclared identifiers]\n(https://golang.org/ref/spec#Predeclared_identifiers)。\nTypes:\n bool byte complex64 complex128 error float32 float64\n int int8 int16 int32 int64 rune string\n uint uint8 uint16 uint32 uint64 uintptr\n\nConstants:\n true false iota\n\nZero value:\n nil\n\nFunctions:\n append cap close complex copy delete imag len\n make new panic print println real recover\n在使用预先分配的标识符时编译器不会报告错误,但是诸如go vet之类的工具会正确地指出这些和其他情况下的隐式问题。\n// Bad\n// 作用域内隐式覆盖 error interface\nvar error string\n\nfunc handleErrorMessage(error string) {\n // 作用域隐藏内置 error\n}\n\ntype Foo struct {\n // 虽然这些使用内置标识符的自定义字段可以编译通过,但对 error 或 string 字符串的搜索存在二义性\n error error\n string string\n}\n\nfunc (f Foo) Error() error {\n // error 和 f.error 在视觉上是相似的\n return f.error\n}\n\nfunc (f Foo) String() string {\n // string and f.string 在视觉上是相似的\n return f.string\n}\n\n// Good\nvar errorMessage string\n\nfunc handleErrorMessage(msg string) {\n}\n\ntype Foo struct {\n // error 和 string 现在是明确的\n err error\n str string\n}\n\nfunc (f Foo) Error() error {\n return f.err\n}\n\nfunc (f Foo) String() string {\n return f.str\n}\n\npowered by Gitbook该文章修订时间:\n2022-05-22 15:54:25\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/9.流程控制.html":{"url":"第二篇:代码风格/9.流程控制.html","title":"9.流程控制","keywords":"","body":"ifforrangeswitchreturngoto程序退出方式if\n\n最小化变量作用域。\n\nif 接受初始化语句,尽可能缩小变量作用域。\n// Bad\nerr := file.Chmod(0664)\nif err != nil {\n return err\n}\n\n// Good\nif err := file.Chmod(0664); err != nil {\n return err\n}\n\n如果需要在 if 之外使用函数调用的结果,则不应尝试缩小范围。\n// Bad\nif data, err := ioutil.ReadFile(name); err == nil {\n err = cfg.Decode(data)\n if err != nil {\n return err\n }\n\n fmt.Println(cfg)\n return nil\n} else {\n return err\n}\n\n// Good\ndata, err := ioutil.ReadFile(name)\nif err != nil {\n return err\n}\n\nif err := cfg.Decode(data); err != nil {\n return err\n}\n\nfmt.Println(cfg)\nreturn nil\n\n\nif 对两个值进行判断时,被比较的值放在左边。\n\n// Bad\nif nil != err {\n // error handling\n}\nif 0 == errorCode {\n // do something\n}\n\n// Good\nif err != nil {\n // error handling\n} \nif errorCode == 0 {\n // do something\n}\n\n\nif 对于 bool 类型的变量,应直接进行真假判断。\n```go\nvar allowUserLogin bool\n// Bad\nif allowUserLogin == true {\n // do something\n}\nif allowUserLogin == false {\n // do something\n}\n\n// Good\nif allowUserLogin {\n // do something\n}\nif !allowUserLogin {\n // do something\n}\n- 不必要的 else。\n\n如果在 if 的两个分支中都设置变量,则可以将其替换为单个 if。\n```go\n// Bad\nvar a int\nif b {\n a = 100\n} else {\n a = 10\n}\n\n// Good\na := 10\nif b {\n a = 100\n}\n又如 if else 通常可以简写为 if return。\n// Bad\nfunc Foo(bar int) {\n if bar == 1 {\n // ...\n } else {\n // ...\n }\n}\n\n// Good\nfunc Foo() {\n if bar == 1 {\n // ...\n return\n }\n // ...\n}\n\n\n多个相似 if 用 switch 替换。\n```go\n// Bad\nfunc foo(key string) {\n if key == pathKey { ...\n }\n if key == urlKey { ...\n }\n}\n\n// Good\nfunc foo(key string) {\n switch key {\n case pathKey:\n ...\n case urlKey:\n ...\n }\n}\n- 使用 == \"\" 判断字符串是否为空,这样更加直观。\n```go\n// Bad\nif len(str) == 0 {\n ...\n}\n\n// Good\nif str == \"\" {\n ...\n}\n\n把简单的逻辑判断放前面,复杂的逻辑判断放后面。\n不要使用双重否定。\n判断条件较为复杂时,考虑封装成函数。\n使用了 else if 则需要以 else 结束。\n\n// Bad\nif foo == \"a\" {\n ...\n} else if foo == \"b\" {\n ...\n}\n\n// Good\nif foo == \"a\" {\n ...\n} else if foo == \"b\" {\n ...\n} else {\n // 需要有一个缺省处理逻辑\n}\n\nfor\n\n最小化变量作用域。\n\nfor 接受初始化语句,尽可能缩小变量作用域。\n// Bad\nsum := 0\ni := 0\nfor ; i \n\n循环变量的地址不要存储。\n\n循环变量的地址指向的是同一个变量,我们可以通过赋值给一个同名的变量,通过变量逃逸,来达到取不同地址的目的。\n// Bad\nfunc main() {\n ints := []int{1, 2, 3, 4, 5}\n for _, v := range ints {\n fmt.Println(&v) // 打印的是相同的地址\n }\n}\n\n// Good\nfunc main() {\n ints := []int{1, 2, 3, 4, 5}\n for _, v := range ints {\n v := v\n fmt.Println(&v) // 打印的是不同的地址\n }\n}\n\nrange\n\n如果只需要第一项(key),就丢弃第二项(value)。\n\nfor key := range m {\n if key.expired() {\n delete(m, key)\n }\n}\n\n\n如果只需要第二项,则把第一项置为空标识符(下划线)。\n\nsum := 0\nfor _, v := range array {\n sum += v\n}\n\nswitch\n\n必须要有 default。\n\nswitch os := runtime.GOOS; os {\n case \"darwin\":\n fmt.Println(\"MAC OS\")\n case \"linux\":\n fmt.Println(\"Linux.\")\n default:\n // freebsd, openbsd,\n // plan9, windows...\n fmt.Printf(\"%s.\\n\", os)\n}\n\nreturn\n\n尽早 return。\n\n一旦有错误发生,马上返回。\nf, err := os.Open(name)\nif err != nil {\n return err\n}\n\ndefer f.Close()\n\nd, err := f.Stat()\nif err != nil {\n return err\n}\n\ncodeUsing(f, d)\n\ngoto\n业务代码禁止使用 goto,其他框架或底层源码推荐尽量不用。\n程序退出方式\n\n使用os.Exit或者log.Fatal*退出程序,而不是panic。\n在 main() 中退出程序且只退出一次。\n\n仅在 main() 函数中调用os.Exit或log.Fatal*且只调用一次。如果有多个错误场景停止程序执行,请将该逻辑放在单独的函数并从中返回错误。 这会精简main()函数,并将所有关键业务逻辑放入一个单独的、可测试的函数中。\n// Bad\npackage main\nfunc main() {\n args := os.Args[1:]\n if len(args) != 1 {\n log.Fatal(\"missing file\")\n }\n name := args[0]\n f, err := os.Open(name)\n if err != nil {\n log.Fatal(err)\n }\n defer f.Close()\n // 如果我们调用 log.Fatal f.Close 将不会被执行\n b, err := ioutil.ReadAll(f)\n if err != nil {\n log.Fatal(err)\n }\n // ...\n}\n\n// Good\npackage main\nfunc main() {\n if err := run(); err != nil {\n log.Fatal(err)\n }\n}\nfunc run() error {\n args := os.Args[1:]\n if len(args) != 1 {\n return errors.New(\"missing file\")\n }\n name := args[0]\n f, err := os.Open(name)\n if err != nil {\n return err\n }\n defer f.Close()\n b, err := ioutil.ReadAll(f)\n if err != nil {\n return err\n }\n // ...\n}\n\n当程序的多个函数具有退出能力时会存在一些问题:\n(1)不明显的控制流:任何函数都可以退出程序,因此很难对控制流进行推理;\n(2)难以测试:退出程序的函数也将退出调用它的测试,这使得函数很难测试,并跳过了尚未被运行的其他代码;\n(3)跳过清理:当函数退出程序时,会跳过已经进入 defer 队列里的函数调用,这增加了跳过重要清理任务的风险。 \npowered by Gitbook该文章修订时间:\n2022-05-22 16:56:50\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/10.函数.html":{"url":"第二篇:代码风格/10.函数.html","title":"10.函数","keywords":"","body":"入参&返回值成员函数局部变量defer减少嵌套(圈复杂度)魔法字面量函数分组与顺序入参&返回值\n\n入参和返回值均以小写字母开头。\n入参和返回值个数均不能超过 5 个,如果超过,请封装成新的类型。\n尽量用值传递,非指针传递。\n类型为 map,slice,chan,interface 不要传递指针。\n返回值超过 3 个,或有相同类型的返回值,或者从上下文中不清楚返回值的含义,使用命名返回,其它情况不建议使用命名返回。\n\n// Parent1 ...\nfunc (n *Node) Parent1() *Node\n\n// Parent2 ...\nfunc (n *Node) Parent2() (*Node, error)\n\n// Location ...\nfunc (f *Foo) Location() (lat, long float64, err error)\n\n\n入参和返回值顺序根据关联性排在一起。\n尽量用 error 表示执行是否成功,而不是用 bool 或者 int。\n表示执行状态的返回值应该放在最后。\n\n// Bad\nret, info := ModifyUserInfo(user)\n\n// Good\ninfo, ret := ModifyUserInfo(user)\n\n\n不要返回多个用于控制流程的状态。\n\n// Bad\nisContinue, retCode := p.processUnity()\n\n// Good\nretCode := p.processUnity()\n\n\n如果传入的参数通常是固定的,考虑通过实现多个函数实现默认参数。\n\n如下面这个函数的第二个参数是没有必要的,大部分时候都是 +1,一个 IncCounter() 和一个 IncCounterN() 即可。可参考标准库包的 Split() 和 SplitN()。\nmetrics.IncrCounter(cntCacheMissKey, 1)\n\n\n批量查询函数返回值使用 slice 还是 map。\n\n有时后我们需要根据多个 ID 查询对应的值,可能会出现部分失败的情况,如某个 ID 不存在。如果不允许部分失败,使用 slice 返回值,如果允许部分失败使用 map。\n// GetUserInfoBatch 批量获取用户信息(需全部成功)。\nfunc GetUserInfoBatch(uids ...uint64) ([]UserInfo, error) {\n ...\n}\n\n// GetUserInfoBatch 批量获取用户信息(允许部分失败)。\nfunc GetUserInfoBatch(uids ...uint64) (map[uint64]UserInfo, error) {\n ...\n}\n\n成员函数\n\n如果方法不使用类的成员,应该实现为非成员函数。\n如果非成员函数要使用类的多个属性时,应该实现为成员函数。\n\n局部变量\n\n如果局部变量仅被使用一次,且不能起到解释逻辑的作用时,应该删除局部变量,直接内联。\n\n// Bad\nids := GetIDs()\nFoo(ids)\n\n// Good\nFoo(GetIDs())\n\ndefer\n\n当存在资源管理时,应紧跟 defer 函数进行资源的释放。\n判断是否有错误发生之后,再 defer 释放资源。\n\nresp, err := http.Get(url)\nif err != nil {\n return err\n}\n// 如果操作成功,再 defer Close()\ndefer resp.Body.Close()\n\n\n禁止在循环中使用 defer。\n\n// 不要这样使用\nfunc filterSomething(values []string) {\n for _, v := range values {\n fields, err := db.Query(v) // 示例,实际不要这么查询,防止 SQL 注入\n if err != nil {\n // ...\n }\n defer fields.Close()\n // 继续使用fields\n }\n}\n\n// 应当使用如下的方式:\nfunc filterSomething(values []string) {\n for _, v := range values {\n func() {\n fields, err := db.Query(v) // 示例,实际不要这么查询,防止 SQL 注入\n if err != nil {\n // ...\n }\n defer fields.Close()\n // 继续使用 fields\n }()\n }\n}\n\n\n正常逻辑不应该在 defer 中执行。\n\n减少嵌套(圈复杂度)\n\n嵌套深度不能超过4层。\n\n从函数名开始算第一层,当函数的嵌套深度超过4层,往往会导致圈复杂度过高,函数变得复杂不可读,我们可以通过拆分函数的方式来减少嵌套深度。\n// AddArea 添加成功或出错。\nfunc (s *BookingService) AddArea(areas ...string) error {\n s.Lock()\n defer s.Unlock()\n\n for _, area := range areas {\n for _, has := range s.areas {\n if area == has {\n return srverr.ErrAreaConflict\n }\n }\n s.areas = append(s.areas, area)\n s.areaOrders[area] = new(order.AreaOrder)\n }\n return nil\n}\n\n// 建议调整为这样:\n\n// AddArea 添加成功或出错。\nfunc (s *BookingService) AddArea(areas ...string) error {\n s.Lock()\n defer s.Unlock()\n\n for _, area := range areas {\n if s.HasArea(area) {\n return srverr.ErrAreaConflict\n }\n s.areas = append(s.areas, area)\n s.areaOrders[area] = new(order.AreaOrder)\n }\n return nil\n}\n\n// HasArea ...\nfunc (s *BookingService) HasArea(area string) bool {\n for _, has := range s.areas {\n if area == has {\n return true\n }\n }\n return false\n}\n\n\n单函数圈复杂度最大值 \n条件不满足或出现错误应尽早返回。\n\n代码也可以优先处理条件不满足或错误的情况,尽早返回或继续循环来减少嵌套。\n// Bad\nfor _, v := range data {\n if v.F1 == 1 {\n v = process(v)\n if err := v.Call(); err == nil {\n v.Send()\n } else {\n return err\n }\n } else {\n log.Printf(\"Invalid v: %v\", v)\n }\n}\n\n// Good\nfor _, v := range data {\n if v.F1 != 1 {\n log.Printf(\"Invalid v: %v\", v)\n continue\n }\n\n v = process(v)\n if err := v.Call(); err != nil {\n return err\n }\n v.Send()\n}\n\n魔法字面量\n\n除了 0 和 1,不要使用魔法数字。\n\n// Bad\nfunc getArea(r float64) float64 {\n return 3.14 * r * r\n}\nfunc getLength(r float64) float64 {\n return 3.14 * 2 * r\n}\n\n// Good\n// PI 圆周率\nconst PI = 3.14\n\nfunc getArea(r float64) float64 {\n return PI * r * r\n}\n\nfunc getLength(r float64) float64 {\n return PI * 2 * r\n}\n\n\n如果字符串字面量出现 >=2 次,则禁止使用,用一个有名称的常量代替,可读性更好。\n\n// Bad\nrsp, err := http.Post(url, \"application/json\", bytes.NewBuffer([]byte(req)))\n\n// Good\nconst JsonContentType = \"application/json\"\nrsp, err := http.Post(url, \"application/json\", bytes.NewBuffer([]byte(req)))\n\n函数分组与顺序\n\n函数应该放在 struct, const, var的后面。\n构造函数应该放在其他函数之前,如newXYZ()/NewXYZ()。\n导出的函数应该放在非导出函数前面\n同一文件中的函数应按接收者分组。\n由于函数是按接收者分组的,因此普通工具函数应在文件末尾出现。\n函数应按粗略的调用顺序排序。\n\n按照上面的规则,下面给出好坏文件内容布局示例。\n// Bad\nfunc (s *something) Cost() {\n return calcCost(s.weights)\n}\n\ntype something struct{ ... }\n\nfunc calcCost(n []int) int {...}\n\nfunc (s *something) Stop() {...}\n\nfunc newSomething() *something {\n return &something{}\n}\n\n// Good\ntype something struct{ ... }\n\nfunc newSomething() *something {\n return &something{}\n}\n\nfunc (s *something) Cost() {\n return calcCost(s.weights)\n}\n\nfunc (s *something) Stop() {...}\n\nfunc calcCost(n []int) int {...}\n\npowered by Gitbook该文章修订时间:\n2022-05-22 16:00:37\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/11.单元测试.html":{"url":"第二篇:代码风格/11.单元测试.html","title":"11.单元测试","keywords":"","body":"\n单元测试文件名命名规范为 example_test.go。\n测试用例的函数名称必须以 Test 开头,例如 TestExample。\n单测文件行数限制是普通文件的 2 倍(1600 行)。单测函数行数限制也是普通函数的2倍(160行)。圈复杂度、列数限制、 import 分组等其他规范细节和普通文件保持一致。\n由于单测文件内的函数都是不对外的,所有可导出函数可以没有注释,但是结构体定义时尽量不要导出。\n每个重要的可导出函数都要首先编写测试用例,测试用例和正规代码一起提交方便进行回归测试。\n表驱动测试.\n\n使用表驱动的方式编写用例,代码看上去会更简洁。\n// Bad\n// func TestSplitHostPort(t *testing.T)\n\nhost, port, err := net.SplitHostPort(\"192.0.2.0:8000\")\nrequire.NoError(t, err)\nassert.Equal(t, \"192.0.2.0\", host)\nassert.Equal(t, \"8000\", port)\n\nhost, port, err = net.SplitHostPort(\"192.0.2.0:http\")\nrequire.NoError(t, err)\nassert.Equal(t, \"192.0.2.0\", host)\nassert.Equal(t, \"http\", port)\n\nhost, port, err = net.SplitHostPort(\":8000\")\nrequire.NoError(t, err)\nassert.Equal(t, \"\", host)\nassert.Equal(t, \"8000\", port)\n\nhost, port, err = net.SplitHostPort(\"1:8\")\nrequire.NoError(t, err)\nassert.Equal(t, \"1\", host)\nassert.Equal(t, \"8\", port)\n\n// Good\n// func TestSplitHostPort(t *testing.T)\n\ntests := []struct{\n give string\n wantHost string\n wantPort string\n}{\n {\n give: \"192.0.2.0:8000\",\n wantHost: \"192.0.2.0\",\n wantPort: \"8000\",\n },\n {\n give: \"192.0.2.0:http\",\n wantHost: \"192.0.2.0\",\n wantPort: \"http\",\n },\n {\n give: \":8000\",\n wantHost: \"\",\n wantPort: \"8000\",\n },\n {\n give: \"1:8\",\n wantHost: \"1\",\n wantPort: \"8\",\n },\n}\n\nfor _, tt := range tests {\n t.Run(tt.give, func(t *testing.T) {\n host, port, err := net.SplitHostPort(tt.give)\n require.NoError(t, err)\n assert.Equal(t, tt.wantHost, host)\n assert.Equal(t, tt.wantPort, port)\n })\n}\n\npowered by Gitbook该文章修订时间:\n2022-05-01 21:44:06\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/12.杂项.html":{"url":"第二篇:代码风格/12.杂项.html","title":"12.杂项","keywords":"","body":"1.基本类型偏执通用场景结构体2.单一职责包&文件函数3.goroutine4.应用服务5.常用工具1.基本类型偏执\n有时候你会看到某个类里有很多基本类型字段,但是你隐约地能区分出某些字段好像应该在一起,如手机号和带区号的电话号码、描述某个日期范围的开始日期和结束日期,它们应该有一个真实的载体,如联系方式类和时间范围类)\n,而不应全部零散放在一个大类型中。\n通用场景\n\n复杂的执行/错误信息,需要定义结构体保存。\n出现状态/类型等字眼时,需要使用枚举。\n时间类型尽量使用内置定义,如 time.Second,不要使用 int。\n\n结构体\n\n一个文件中出现多个结构体时,需要注意观察是否有重复的成员。\n一个结构体中,成员较多,且多个成员有明显关联关系,需要封装新的结构体。\n意义不明的成员变量,应该定义类型描述作用。\n\n2.单一职责\n包&文件\n\n需要判断当前文件是否应该归属于当前包,主要以职责进行判断。\n导出的函数/变量的职责必须与包&文件职责高度一致。\n除了包的主逻辑文件中内容允许导出,包内的辅助函数都应该是非导出的。\n\n函数\n\n一个函数只负责一个职责。\n配置文件的读取,和对象初始化应该分开,不要让对象自己根据配置文件初始化,保证构造函数足够简单\n解析、校验、计算的逻辑应该进行分离\n读、写、计算的逻辑应该进行分离\nrpc、db 相关操作需要独立封装\n\n\n一个函数内不应该混杂多个实现细节,需要将独立的逻辑封装成函数。\n一次循环尽量只做一件事,不用担心多次循环。\n同一层级的逻辑细节不要拆分。\n\n3.goroutine\n\n启动的 goroutine 最好有 recover。\n\n因为其他 goroutine 是无法捕当前 goroutine 抛出的异常。如果启动的 goroutine 没有 recover,很容易发生 panic 导致整个进程退出。\n\n遇到 goroutine一定要梳理清楚 goroutine 的退出机制,防止泄漏。\n如果要开启多个线程执行一组动作,并且要等待全部完成后继续后续逻辑,考虑使用 errgroup.Group。\n\n4.应用服务\n\n应用服务建议有 README.md 说明文档,介绍服务功能、使用方法、部署时的限制与要求、基础环境依赖等\n应用服务必须要有接口测试\n\n5.常用工具\nGo 本身在代码规范方面做了很多努力,很多限制都是语法要求,例如左大括号不换行,引用的包或者定义的变量不使用会报错。此外 Go 还是提供了很多好用的工具帮助我们进行代码的规范。\n\ngofmt ,大部分的格式问题可以通过 gofmt 解决, gofmt 自动格式化代码,保证所有的 go 代码与官方推荐的格式保持一致,于是所有格式有关问题,都以 gofmt 的结果为准。\ngoimports ,此工具在 gofmt 的基础上增加了自动删除和引入包。\ngo vet ,vet 工具可以帮我们静态分析我们的源码存在的各种问题,例如多余的代码,提前 return 的逻辑, struct 的 tag 是否符合标准等。编译前先执行代码静态分析。\ngolint ,类似 javascript 中的 jslint 的工具,主要功能就是检测代码中不规范的地方。 \n\npowered by Gitbook该文章修订时间:\n2022-05-22 17:03:00\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"url":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","title":"1.不需要指向 interface 的指针","keywords":"","body":"我们几乎不需要使用指向接口的指针,应该将接口直接赋值给接口,这样在传递过程中,实质上传递的底层数据仍然是指针,即不存在值拷贝的情况。\ntype Foo struct {\n T string\n}\n\nfunc bar(i interface{}) {\n ...\n}\n\nvar foo interface{} = Foo{...}\n\n// Bad\nbar(&foo)\n\n// Good\nbar(foo)\n\n为什么可以这样,因为接口实质上在底层用两个字段表示:\n(1)一个指向某些特定类型信息的指针;\n(2)一个指向具体数据的指针。如果存储的数据是指针,则直接存储。如果存储的数据是一个值,则存储指向该值的指针。\n具体可以看下 Go 源码 runtime 包两种接口类型的定义。\n一种是带有一组方法的接口runtime.iface:\ntype iface struct {\n tab *itab\n data unsafe.Pointer\n}\n\n一种是不含任何方法的空接口runtime.eface:\ntype eface struct {\n _type *_type\n data unsafe.Pointer\n}\n\n我们可以看下接口变量的内存宽度。\nvar foo interface{} = Foo{...}\nfmt.Println(unsafe.Sizeof(foo)) // 16\n\n当然,凡事无绝对。如果需要修改接口变量本身,那么应该使用指向接口变量的指针,当然你必须清楚自己在干什么。\n类似地,在了解 map、slice、channel 的底层结构后,我们应该知道在传递过程中一般也不需要使用指向它们的指针。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"url":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","title":"2.编译期验证 interface 合理性","keywords":"","body":"在编译时验证接口的合理性,这包括:\n(1)导出类型的部分 API 实现了接口;\n(2)导出或非导出类型实现了接口且属于某类型的一部分(匿名嵌套);\n(3)任何其他情况都违反接口合理性检查,终止编译并通知用户。\n上面这三条是编译器对接口的检查机制, 错误地使用接口会在编译期报错。所以可以利用这个机制让部分问题在编译期暴露。\n// Bad\ntype Handler struct {\n // ...\n}\n\nfunc (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\n // ...\n}\n\n// Good\ntype Handler struct {\n // ...\n}\n\nvar _ http.Handler = (*Handler)(nil)\n\nfunc (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\n // ...\n}\n\n如果*Handler与http.Handler的接口不匹配,那么语句var _ http.Handler = (*Handler)(nil)将无法编译通过。\n赋值的右边应该是断言类型的零值。 对于指针类型(如 *Handler)、切片和映射是 nil;对于结构类型是空结构。\ntype LogHandler struct {\n h http.Handler\n log *zap.Logger\n}\n\nvar _ http.Handler = LogHandler{}\n\nfunc (h LogHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\n // ...\n}\n\npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"url":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","title":"3.在边界处拷贝 slice 和 map","keywords":"","body":"slice 和 map 包含了指向底层数据的指针,因此在需要复制它们时要特别注意。\n在 Go 源码文件 src/runtime/slice.go 我们可以找到切片的底层数据结构 runtime.slice:\ntype slice struct {\n array unsafe.Pointer\n len int\n cap int\n}\n\n在 Go 源码文件 src/runtime/map.go 我们可以找到 map 底层核心数据结构 runtime.hmap:\n// A header for a Go map.\ntype hmap struct {\n // Note: the format of the hmap is also encoded in cmd/compile/internal/reflectdata/reflect.go.\n // Make sure this stays in sync with the compiler's definition.\n count int // # live cells == size of map. Must be first (used by len() builtin)\n flags uint8\n B uint8 // log_2 of # of buckets (can hold up to loadFactor * 2^B items)\n noverflow uint16 // approximate number of overflow buckets; see incrnoverflow for details\n hash0 uint32 // hash seed\n\n buckets unsafe.Pointer // array of 2^B Buckets. may be nil if count==0.\n oldbuckets unsafe.Pointer // previous bucket array of half the size, non-nil only when growing\n nevacuate uintptr // progress counter for evacuation (buckets less than this have been evacuated)\n\n extra *mapextra // optional fields\n}\n\n// mapextra holds fields that are not present on all maps.\ntype mapextra struct {\n // If both key and elem do not contain pointers and are inline, then we mark bucket\n // type as containing no pointers. This avoids scanning such maps.\n // However, bmap.overflow is a pointer. In order to keep overflow buckets\n // alive, we store pointers to all overflow buckets in hmap.extra.overflow and hmap.extra.oldoverflow.\n // overflow and oldoverflow are only used if key and elem do not contain pointers.\n // overflow contains overflow buckets for hmap.buckets.\n // oldoverflow contains overflow buckets for hmap.oldbuckets.\n // The indirection allows to store a pointer to the slice in hiter.\n overflow *[]*bmap\n oldoverflow *[]*bmap\n\n // nextOverflow holds a pointer to a free overflow bucket.\n nextOverflow *bmap\n}\n\n在接收 slice 和 map 时,请记住当 map 或 slice 作为函数参数传入时,如果您存储了对它们的引用,则用户可以对其进行修改。\n// Bas\nfunc (d *Driver) SetTrips(trips []Trip) {\n d.trips = trips\n}\n\ntrips := ...\nd.SetTrips(trips)\n\n// 你是要修改 d.trips 吗?\ntrips[0] = ...\n\n// Good\nfunc (d *Driver) SetTrips(trips []Trip) {\n d.trips = make([]Trip, len(trips))\n copy(d.trips, trips)\n}\n\ntrips := ...\nd.SetTrips(trips)\n\n// 这里我们修改 trips[0],但不会影响 d.trips\ntrips[0] = ...\n\n在返回 slice 和 map 时,同样的,请注意用户对暴露内部状态的 map 或 slice 的修改。\n// Bad\ntype Stats struct {\n mu sync.Mutex\n\n counters map[string]int\n}\n\n// Snapshot 返回当前状态。\nfunc (s *Stats) Snapshot() map[string]int {\n s.mu.Lock()\n defer s.mu.Unlock()\n\n return s.counters\n}\n\n// snapshot 不再受互斥锁保护,可能会引发并发读写的错误\nsnapshot := stats.Snapshot()\n\n// Good\ntype Stats struct {\n mu sync.Mutex\n\n counters map[string]int\n}\n\nfunc (s *Stats) Snapshot() map[string]int {\n s.mu.Lock()\n defer s.mu.Unlock()\n\n result := make(map[string]int, len(s.counters))\n for k, v := range s.counters {\n result[k] = v\n }\n return result\n}\n\n// snapshot 现在是一个拷贝\nsnapshot := stats.Snapshot()\n\npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"url":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","title":"4.枚举从 1 开始","keywords":"","body":"Go 并没有关键字 enum 来定义枚举类型,引入枚举的标准方法是声明一个自定义类型和一个使用了自增器 iota 的 const 组来表示枚举值。\n预先声明的标识符 iota 表示连续的非类型化整数常量,它的值是对应常量的下标(从零开始),它可用于构造一组相关常数:\ntype ByteSize float64\n\nconst (\n _ = iota // ignore first value by assigning to blank identifier\n KB ByteSize = 1 \n由于第一个值从 0 开始,如果需要使第一个值为有意义的值,我们应该从 1 开始。\n// Bad\ntype Operation int\n\nconst (\n Add Operation = iota\n Subtract\n Multiply\n)\n// Add=0, Subtract=1, Multiply=2\n\n// Good\ntype Operation int\n\nconst (\n Add Operation = iota + 1\n Subtract\n Multiply\n)\n// Add=1, Subtract=2, Multiply=3\n\n当然,凡事无绝对。如果第一个枚举值为零是有意义的,如当零值是理想的默认行为时。\ntype LogOutput int\n\nconst (\n LogToStdout LogOutput = iota\n LogToFile\n LogToRemote\n)\n// LogToStdout=0, LogToFile=1, LogToRemote=2\n\npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"url":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","title":"1.方法接收器为值和指针的区别","keywords":"","body":"接收器为值和指针的方法在调用方式上是有区别的。\n使用值接收器的方法既可以通过值调用,也可以通过指针调用。带指针接收器的方法只能通过指针或 addressable values 调用。\ntype S struct {\n data string\n}\n\nfunc (s S) Read() string {\n return s.data\n}\n\nfunc (s *S) Write(str string) {\n s.data = str\n}\n\nsVals := map[int]S{1: {\"A\"}}\n\n// 你只能通过值调用 Read。\nsVals[1].Read()\n\n// 编译不通过,因为无法对 sVals[1] 取址。\n// sVals[1].Write(\"test\")\n\nsPtrs := map[int]*S{1: {\"A\"}}\n\n// 指针既可以调用 Read,也可以调用 Write。\nsPtrs[1].Read()\nsPtrs[1].Write(\"test\")\n\n类似的,使用值接收器和指针接收器来实现接口,在判断与接口是否匹配时,也存在一定的区别。\ntype F interface {\n f()\n}\n\ntype S1 struct{}\n\nfunc (s S1) f() {}\n\ntype S2 struct{}\n\nfunc (s *S2) f() {}\n\ns1Val := S1{}\ns1Ptr := &S1{}\ns2Val := S2{}\ns2Ptr := &S2{}\n\nvar i F\ni = s1Val\ni = s1Ptr\ni = s2Ptr\n\n// 下面代码无法通过编译,因为 s2Val 是一个值,而 S2 的 f 方法中没有使用值接收器。\n// i = s2Val\n\n从前文可知,可取址的值可以调用接收器为指针的方法,但这里为何不能将值 s2Val 赋给接口 i 呢?\n在 Effective Go 中一节 Pointers vs. Values 做了说明,因为接收器为指针的方法会修改接受器,为了避免产生这种错误的行为,便禁止将值赋给和指针接收器方法集匹配的接口。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"url":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","title":"2.使用 defer 释放资源","keywords":"","body":"使用 defer 释放资源,诸如文件和锁。\n// Bad\n// 当有多个 return 分支时,很容易遗忘 unlock\np.Lock()\nif p.count \ndefer 的开销非常小,只有在您可以证明函数执行时间处于纳秒级的程度时,才应避免这样做。使用 defer 提升可读性是值得的,因为使用它们的成本微不足道。尤其适用于那些不仅仅是简单内存访问的较大方法,在这些方法中其他计算的资源消耗远超过 defer。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"url":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","title":"3.不要在 for 循环中使用 defer","keywords":"","body":"尽可能地避免在 for 循环中使用 defer,因为这可能会导致资源泄漏(Possible resource leak, 'defer' is called in the 'for' loop)。\ndefer 不是基于代码块的,而是基于函数的。你在循环中分配资源,那么不应该简单地使用 defer,因为释放资源不会尽可能早地发生(在每次迭代结束时),只有在 for 语句之后(所有迭代之后),即所在函数结束时,defer 函数才会被执行。这带来的后果就是,如果迭代次数过多,那么可能导致资源长时间得不到释放,造成泄漏。\n// Bad\nfor rows.Next() {\n fields, err := db.Query(.....)\n if err != nil {\n // ...\n }\n defer fields.Close()\n\n // do something with `fields`\n\n}\n\n如果有一个类似上面分配资源的代码段,我们应该将其包裹在一个函数中(匿名函数或有名函数)。在该函数中,使用 defer,资源将在不需要时被立即释放。\n// 1.将 defer 放在匿名函数中\nfor rows.Next() {\n func() {\n fields, err := db.Query(...)\n if err != nil {\n // Handle error and return\n return\n }\n defer fields.Close()\n\n // do something with `fields`\n }()\n}\n\n// 2.将 defer 放在有名函数中然后调用之\nfunc foo(r *db.Row) error {\n fields, err := db.Query(...)\n if err != nil {\n return fmt.Errorf(\"db.Query error: %w\", err)\n }\n defer fields.Close()\n\n // do something with `fields`\n return nil\n}\n\n// 调用有名函数\nfor rows.Next() {\n if err := foo(rs); err != nil {\n // Handle error and return\n return\n }\n}\n\npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"url":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","title":"1.零值 Mutex 是有效的","keywords":"","body":"零值 sync.Mutex 和 sync.RWMutex 是有效的,所以指向 mutex 的指针基本是不必要的。\n// Bad\nmu := new(sync.Mutex)\nmu.Lock()\n\n// Good\nvar mu sync.Mutex\nmu.Lock()\n\nMutex 作为其他结构体一个字段时,应该使用值而不是指针。即使该结构体不被导出,也不要直接把 Mutex 嵌入到结构体中。\n// Bad\ntype sMap struct {\n sync.Mutex\n data map[string]string\n}\n\nfunc NewSMap() *sMap {\n return &sMap{\n data: make(map[string]string),\n }\n}\n\nfunc (m *sMap) Get(k string) string {\n m.Lock()\n defer m.Unlock()\n return m.data[k]\n}\n\n// Good\ntype sMap struct {\n mutex sync.Mutex\n data map[string]string\n}\n\nfunc NewSMap() *sMap {\n return &sMap{\n data: make(map[string]string),\n }\n}\n\nfunc (m *SMap) Get(k string) string {\n m.mutex.Lock()\n defer m.mutex.Unlock()\n return m.data[k]\n}\n\nBad 部分会导致字段 Mutex、Lock 和 Unlock 方法是 sMap 导出的字段和 API,但又没有明确说明,既导致了模糊的文档,又泄露了 sMap 的实现细节。Good 部分可以做到字段 mutex 及其方法是 sMap 的实现细节,对其调用者不可见。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"url":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","title":"2.channel size 要么是 1 或 0","keywords":"","body":"channel size 应为 1 或是无缓冲的。默认情况下,channel 是无缓冲的,其 size 为零。任何其他尺寸都必须经过严格的审查,而不是拍脑袋给出一个大致的值。我们需要考虑如何确定大小,什么原因会导致 channel 在高负载下被填满并阻塞写入者,以及当这种情况发生时系统会发生哪些变化。\n// Bad\n// 应该足以满足任何情况!\nc := make(chan int, 64)\n\n// Good\n// size 为 1\nc := make(chan int, 1) \n// 或无缓冲 size 为 0\nc := make(chan int)\n\npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"url":"第三篇:功能设计/4.错误处理/1.错误处理.html","title":"1.错误处理","keywords":"","body":"1.错误类型2.错误包装1.错误类型\n声明错误可选的方式很少,在选择合适的错误申明方式之前,应考虑以下几点。\n(1)调用者是否需要匹配错误以便他们可以处理它? 如果是,我们必须通过声明顶级错误变量或自定义类型来支持 errors.Is 或 errors.As 函数。\n(2)错误消息是否为静态字符串,还是需要上下文信息的动态字符串? 如果是静态字符串,我们可以使用 errors.New,但对于后者,我们必须使用 fmt.Errorf 或自定义错误类型。\n(3)我们是否正在传递由下游函数返回的新错误? 如果是这样,请参阅错误包装部分。\n\n\n\n错误匹配\n错误消息\n指导\n\n\n\n\nNo\nstatic\nerrors.New\n\n\nNo\ndynamic\nfmt.Errorf\n\n\nYes\nstatic\ntop-level var with errors.New\n\n\nYes\ndynamic\ncustom error type\n\n\n\n例如,使用errors.New表示带有静态字符串的错误。如果调用者需要匹配并处理此错误,则将此错误导出为变量以支持将其与errors.Is匹配。\n// Bad\n\n// package foo\n\nfunc Open() error {\n return errors.New(\"could not open\")\n}\n\n// package bar\n\nif err := foo.Open(); err != nil {\n // Can't handle the error.\n panic(\"unknown error\")\n}\n\n// Good\n// package foo\n\nvar ErrCouldNotOpen = errors.New(\"could not open\")\n\nfunc Open() error {\n return ErrCouldNotOpen\n}\n\n// package bar\n\nif err := foo.Open(); err != nil {\n if errors.Is(err, foo.ErrCouldNotOpen) {\n // handle the error\n } else {\n panic(\"unknown error\")\n }\n}\n\n对于动态字符串的错误, 如果调用者不需要匹配它,则使用fmt.Errorf,如果调用者确实需要匹配它,则自定义 error。\n无错误匹配。\n// package foo\n\nfunc Open(file string) error {\n return fmt.Errorf(\"file %q not found\", file)\n}\n\n// package bar\n\nif err := foo.Open(\"testfile.txt\"); err != nil {\n // Can't handle the error.\n panic(\"unknown error\")\n}\n\n错误匹配。\n// package foo\n\ntype NotFoundError struct {\n File string\n}\n\nfunc (e *NotFoundError) Error() string {\n return fmt.Sprintf(\"file %q not found\", e.File)\n}\n\nfunc Open(file string) error {\n return &NotFoundError{File: file}\n}\n\n\n// package bar\n\nif err := foo.Open(\"testfile.txt\"); err != nil {\n var notFound *NotFoundError\n if errors.As(err, ¬Found) {\n // handle the error\n } else {\n panic(\"unknown error\")\n }\n}\n\n请注意,如果您从包中导出错误变量或类型, 它们将成为包的公共 API 的一部分。\n2.错误包装\n在调用失败时传播错误有三个主要方式:\n(1)返回原始错误;\n(2)使用 fmt.Errorf 和 %w 添加上下文生成新错误;\n(3)使用 fmt.Errorf 和 %v 添加上下文生成新错误。\n如果没有要添加的其他上下文,则按原样返回原始错误。 这将保留原始错误类型和消息。 这非常适合底层错误消息有足够的信息来追踪它来自哪里的错误。\n否则,尽可能在错误消息中添加上下文 这样就不会出现诸如“连接被拒绝”之类的模糊错误, 您会收到更多有用的错误,例如“呼叫服务 foo:连接被拒绝”。\n使用 fmt.Errorf 为你的错误添加上下文, 根据调用者是否应该能够匹配和提取根本原因,在 %w 或 %v 格式之间进行选择。\n(1)如果调用者应该可以访问底层错误,请使用 %w。 对于大多数包装错误,这是一个很好的默认值,但请注意,调用者可能会开始依赖此行为。因此,对于包装错误是已知变量或类型的情况,请将其作为函数契约的一部分进行记录和测试。\n(2)使用 %v 来混淆底层错误,调用者将无法匹配它,但如果需要,您可以在将来切换到 %w。\n在为返回的错误添加上下文时,通过避免使用\"failed to\"之类的短语来保持上下文简洁,当错误通过堆栈向上传递时,它会一层一层被堆积起来:\n// Bad\ns, err := store.New()\nif err != nil {\n return fmt.Errorf(\n \"failed to create new store: %w\", err)\n}\n\n// Good\ns, err := store.New()\nif err != nil {\n return fmt.Errorf(\n \"new store: %w\", err)\n}\n\n然而,一旦错误被发送到另一个系统,应该清楚消息是一个错误(例如 err 标签或日志中的 \"Failed\" 前缀)。\n另外请参考:Don't just check errors, handle them gracefully。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"url":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","title":"1.使用 time 包处理时间","keywords":"","body":"时间处理看似简单,实则不然。关于时间的错误假设通常包括以下几点:\n\n一分钟有 60 秒\n一小时有 60 分钟\n一天有 24 小时\n一周有 7 天\n一年 365 天\n\n还有更多,具体可参考 Falsehoods programmers believe about time。\n例如,在一个时间点上加上 24 小时并不总是产生一个新的日历日。\n为什么常识性的认知是错误的呢?因为地球自转的不均匀性和长期变慢性,会存在时间修正的情况,比如闰秒,闰年等。\n因此,在处理时间时始终使用 \"time\" 包,因为它有助于以更安全、更准确的方式处理这些不正确的假设。\n\n使用 time.Time 表达瞬时时间\n\n在处理时间的瞬间时使用 time.Time,在比较、添加或减去时间时使用 time.Time 中的方法。\n// Bad\nfunc isActive(now, start, stop int) bool {\n return start \n\n使用 time.Duration 表达时间段\n```go\n// Bad\nfunc poll(delay int) {\nfor {\n // ...\n time.Sleep(time.Duration(delay) * time.Millisecond)\n}\n}\npoll(10) // 是几秒钟还是几毫秒?\n\n// Good\nfunc poll(delay time.Duration) {\n for {\n // ...\n time.Sleep(delay)\n }\n}\npoll(10*time.Second) // 代码即注释\n回到第一个例子,在一个时间时刻加上 24 小时,我们用于添加时间的方法取决于意图。如果我们想要下一个日历日(当前天的下一天)的同一个时间点,我们应该使用 `Time.AddDate`。但是,如果我们想保证某一时刻比前一时刻晚 24 小时,我们应该使用`Time.Add`。\n```go\nnewDay := t.AddDate(0 /* years */, 0 /* months */, 1 /* days */)\nmaybeNewDay := t.Add(24 * time.Hour)\n\n对外部系统使用 time.Time 和 time.Duration\n\n尽可能在与外部系统交互中使用 time.Time 和 time.Duration 。\n(1)Command-line 标志:flag 通过 time.ParseDuration 支持 time.Duration ;\n(2)JSON:encoding/json 通过其 Time.UnmarshalJSON 方法支持将 time.Time 编码为 RFC 3339 字符串;\n(3)SQL:database/sql 支持将 DATETIME 或 TIMESTAMP 列转换为 time.Time,如果底层驱动程序支持则返回;\n(4)YAML:gopkg.in/yaml.v2 支持将 time.Time 作为 RFC 3339 字符串,并通过 time.ParseDuration 支持 time.Duration 。\n当不能在这些交互中使用 time.Duration 时,请使用 int 或 float64,并在字段名称中包含单位。\n例如,由于 encoding/json 不支持 time.Duration,因此该单位包含在字段的名称中。\n// Bad\n// {\"interval\": 2}\ntype Config struct {\n Interval int `json:\"interval\"`\n}\n\n// Good\n// {\"intervalMillis\": 2000}\ntype Config struct {\n IntervalMillis int `json:\"intervalMillis\"`\n}\n\n当在这些交互中不能使用 time.Time 时,除非达成一致,否则使用 string 和 RFC 3339 中定义的格式时间戳。默认情况下,Time.UnmarshalText 使用此格式,并可通过 time.RFC3339 在 Time.Format 和 time.Parse 中使用。\n尽管这在实践中并不成问题,但请记住,time 包不支持解析闰秒时间戳(issue 8728),也不在计算中考虑闰秒(issue 15190)。如果您比较两个时刻,则差异将不包括这两个时刻之间可能发生的闰秒。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"url":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","title":"2.使用第三方 atomic 包","keywords":"","body":"不建议使用 sync/atomic 包的原子操作对基本类型 (int32, int64 等)进行操作,因为很容易忘记使用原子操作来读取或修改变量。\ngo.uber.org/atomic 通过隐藏基础类型为这些操作增加了类型安全性。此外,它还包括一个易用的 atomic.Bool 类型。\n// Bad\ntype foo struct {\n running int32 // atomic\n}\n\nfunc (f* foo) start() {\n if atomic.SwapInt32(&f.running, 1) == 1 {\n // already running…\n return\n }\n // start the Foo\n}\n\nfunc (f *foo) isRunning() bool {\n return f.running == 1 // race!\n}\n\n// Good\ntype foo struct {\n running atomic.Bool\n}\n\nfunc (f *foo) start() {\n if f.running.Swap(true) {\n // already running…\n return\n }\n // start the Foo\n}\n\nfunc (f *foo) isRunning() bool {\n return f.running.Load()\n}\n\npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"url":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","title":"1.避免使用可变全局变量","keywords":"","body":"可变全局变量在使用时,可能会被其他地方修改,导致程序运行时出现意外情况。\n我们可以通过依赖注入的方式将依赖注入到使用方,这样便可以避免使用全局变量,进而避免了依赖的全局变量被错误修改的可能。\n比如下面将依赖的 now 函数直接注入到使用方 signer struct 中。\n// Bad\n\n// sign.go\n\nvar timeNow = time.Now\n\nfunc sign(msg string) string {\n now := timeNow()\n return signWithTime(msg, now)\n}\n\n// sign_test.go\nfunc TestSign(t *testing.T) {\n oldTimeNow := timeNow\n timeNow = func() time.Time {\n return someFixedTime\n }\n defer func() { timeNow = oldTimeNow }()\n\n assert.Equal(t, want, sign(give))\n}\n\n// Good\n\n// sign.go\n\ntype signer struct {\n now func() time.Time\n}\n\nfunc newSigner() *signer {\n return &signer{\n now: time.Now,\n }\n}\n\nfunc (s *signer) Sign(msg string) string {\n now := s.now()\n return signWithTime(msg, now)\n}\n\n// sign_test.go\n\nfunc TestSigner(t *testing.T) {\n s := newSigner()\n s.now = func() time.Time {\n return someFixedTime\n }\n\n assert.Equal(t, want, s.Sign(give))\n}\n\npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"url":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","title":"2.避免在公共结构中嵌入类型","keywords":"","body":"嵌入类型会泄漏实现细节、禁止类型演化和产生模糊的接口文档。\n假设您使用共享的 AbstractList 实现了多种列表类型,请避免在具体的列表实现中嵌入 AbstractList。相反,只需手动将方法写入具体的列表,委托给抽象列表的方法。\ntype AbstractList struct {}\n// 添加将实体添加到列表中。\nfunc (l *AbstractList) Add(e Entity) {\n // ...\n}\n// 移除从列表中移除实体。\nfunc (l *AbstractList) Remove(e Entity) {\n // ...\n}\n\n// Bad\n\n// ConcreteList 是一个实体列表。\ntype ConcreteList struct {\n *AbstractList\n}\n\n// Good\n\n// ConcreteList 是一个实体列表。\ntype ConcreteList struct {\n list *AbstractList\n}\n// 添加将实体添加到列表中。\nfunc (l *ConcreteList) Add(e Entity) {\n l.list.Add(e)\n}\n// 移除从列表中移除实体。\nfunc (l *ConcreteList) Remove(e Entity) {\n l.list.Remove(e)\n}\n\n泄漏实现细节指 AbstractList 的实现是 ConcreteList 的实现细节,被到处泄露了;\n禁止类型演化指 ConcreteList 获得了同名嵌套类型字段 AbstractList,如果嵌入的类型是 public,那么字段是 public。为了保持向后兼容性,外部类型的每个未来版本都必须保留嵌入类型;\n产生模糊的接口文档指 AbstractList 被导出的字段和方法全部成为了 ConcreteList 被导出的字段和方法,在 ConcreteList 又没有明确说明,会产生模糊的接口文档。\n很少需要嵌入类型,虽然它可以帮助您避免编写冗长的委托方法。\n即使嵌入兼容的抽象列表 interface,而不是结构体,这将为开发人员提供更大的灵活性来改变未来,但仍然泄露了具体列表使用抽象实现的细节。\n// Bad\n\n// AbstractList 是各种实体列表的通用实现。\ntype AbstractList interface {\n Add(Entity)\n Remove(Entity)\n}\n// ConcreteList 是一个实体列表。\ntype ConcreteList struct {\n AbstractList\n}\n\n// Good\n\n// ConcreteList 是一个实体列表。\ntype ConcreteList struct {\n list AbstractList\n}\n// 添加将实体添加到列表中。\nfunc (l *ConcreteList) Add(e Entity) {\n l.list.Add(e)\n}\n// 移除从列表中移除实体。\nfunc (l *ConcreteList) Remove(e Entity) {\n l.list.Remove(e)\n}\n\n无论是使用嵌入结构还是嵌入接口,都会限制类型的演化。\n(1)向嵌入接口添加方法是一个破坏性的改变;\n(2)从嵌入结构体删除方法是一个破坏性的改变;\n(3)删除嵌入类型是一个破坏性的改变;\n(4)即使使用满足相同接口的类型替换嵌入类型,也是一个破坏性的改变。\n尽管编写这些委托方法是乏味的,但是额外的工作隐藏了实现细节,留下了更多的更改机会,还消除了在未能描述出潜在接口的模糊文档。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/0.导语.html":{"url":"第四篇:最佳性能/0.导语.html","title":"0.导语","keywords":"","body":"代码的稳健、可读和高效是我们每一个位 coder 的共同追求。本篇将结合 Go 语言特性,为书写高效的代码,力争从常用数据结构、内存管理和并发编程三个方面给出相关建议。话不多说,让我们一起学习 Go 高性能编程技法吧。 \npowered by Gitbook该文章修订时间:\n2022-05-18 22:23:35\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"url":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","title":"1.反射虽好,切莫贪杯","keywords":"","body":"1.优先使用 strconv 而不是 fmt2.少量的重复不比反射差3.慎用 binary.Read 和 binary.Write标准库 reflect 为 Go 语言提供了运行时动态获取对象的类型和值以及动态创建对象的能力。反射可以帮助抽象和简化代码,提高开发效率。\nGo 语言标准库以及很多开源软件中都使用了 Go 语言的反射能力,例如用于序列化和反序列化的 json、ORM 框架 gorm、xorm 等。\n1.优先使用 strconv 而不是 fmt\n基本数据类型与字符串之间的转换,优先使用 strconv 而不是 fmt,因为前者性能更佳。\n// Bad\nfor i := 0; i \n为什么性能上会有两倍多的差距,因为 fmt 实现上利用反射来达到范型的效果,在运行时进行类型的动态判断,所以带来了一定的性能损耗。\n2.少量的重复不比反射差\n有时,我们需要一些工具函数。比如从 uint64 切片过滤掉指定的元素。\n利用反射,我们可以实现一个类型泛化支持扩展的切片过滤函数。\n// DeleteSliceElms 从切片中过滤指定元素。注意:不修改原切片。\nfunc DeleteSliceElms(i interface{}, elms ...interface{}) interface{} {\n // 构建 map set。\n m := make(map[interface{}]struct{}, len(elms))\n for _, v := range elms {\n m[v] = struct{}{}\n }\n // 创建新切片,过滤掉指定元素。\n v := reflect.ValueOf(i)\n t := reflect.MakeSlice(reflect.TypeOf(i), 0, v.Len())\n for i := 0; i \n很多时候,我们可能只需要操作一个类型的切片,利用反射实现的类型泛化扩展的能力压根没用上。退一步说,如果我们真地需要对 uint64 以外类型的切片进行过滤,拷贝一次代码又何妨呢?可以肯定的是,绝大部份场景,根本不会对所有类型的切片进行过滤,那么反射带来好处我们并没有充分享受,但却要为其带来的性能成本买单。\n// DeleteU64liceElms 从 []uint64 过滤指定元素。注意:不修改原切片。\nfunc DeleteU64liceElms(i []uint64, elms ...uint64) []uint64 {\n // 构建 map set。\n m := make(map[uint64]struct{}, len(elms))\n for _, v := range elms {\n m[v] = struct{}{}\n }\n // 创建新切片,过滤掉指定元素。\n t := make([]uint64, 0, len(i))\n for _, v := range i {\n if _, ok := m[v]; !ok {\n t = append(t, v)\n }\n }\n return t\n}\n\n下面看一下二者的性能对比。\nfunc BenchmarkDeleteSliceElms(b *testing.B) {\n slice := []uint64{1, 2, 3, 4, 5, 6, 7, 8, 9}\n elms := []interface{}{uint64(1), uint64(3), uint64(5), uint64(7), uint64(9)}\n for i := 0; i \n运行上面的基准测试。\ngo test -bench=. -benchmem main/reflect \ngoos: darwin\ngoarch: amd64\npkg: main/reflect\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkDeleteSliceElms-12 1226868 978.2 ns/op 296 B/op 16 allocs/op\nBenchmarkDeleteU64liceElms-12 8249469 145.3 ns/op 80 B/op 1 allocs/op\nPASS\nok main/reflect 3.809s\n\n可以看到,反射涉及了额外的类型判断和大量的内存分配,导致其对性能的影响非常明显。随着切片元素的递增,每一次判断元素是否在 map 中,因为 map 的 key 是不确定的类型,会发生变量逃逸,触发堆内存的分配。所以,可预见的是当元素数量增加时,性能差异会越来大。\n当使用反射时,请问一下自己,我真地需要它吗?\n3.慎用 binary.Read 和 binary.Write\nbinary.Read 和 binary.Write 使用反射并且很慢。如果有需要用到这两个函数的地方,我们应该手动实现这两个函数的相关功能,而不是直接去使用它们。\nencoding/binary 包实现了数字和字节序列之间的简单转换以及 varints 的编码和解码。varints 是一种使用可变字节表示整数的方法。其中数值本身越小,其所占用的字节数越少。Protocol Buffers 对整数采用的便是这种编码方式。\n其中数字与字节序列的转换可以用如下三个函数:\n// Read 从结构化二进制数据 r 读取到 data。data 必须是指向固定大小值的指针或固定大小值的切片。\nfunc Read(r io.Reader, order ByteOrder, data interface{}) error\n// Write 将 data 的二进制表示形式写入 w。data 必须是固定大小的值或固定大小值的切片,或指向此类数据的指针。\nfunc Write(w io.Writer, order ByteOrder, data interface{}) error\n// Size 返回 Wirte 函数将 v 写入到 w 中的字节数。\nfunc Size(v interface{}) int\n\n下面以我们熟知的 C 标准库函数 ntohl() 函数为例,看看 Go 利用 binary 包如何实现。\n// Ntohl 将网络字节序的 uint32 转为主机字节序。\nfunc Ntohl(bys []byte) uint32 {\n r := bytes.NewReader(bys)\n err = binary.Read(buf, binary.BigEndian, &num)\n}\n\n// 如将 IP 127.0.0.1 网络字节序解析到 uint32\nfmt.Println(Ntohl([]byte{0x7f, 0, 0, 0x1})) // 2130706433 \n\n如果我们针对 uint32 类型手动实现一个 ntohl() 呢?\nfunc NtohlNotUseBinary(bys []byte) uint32 {\n return uint32(bys[3]) | uint32(bys[2])\n该函数也是参考了 encoding/binary 包针对大端字节序将字节序列转为 uint32 类型时的实现。\n下面看下剥去反射前后二者的性能差异。\nfunc BenchmarkNtohl(b *testing.B) {\n for i := 0; i \n运行上面的基准测试,结果如下:\ngo test -bench=BenchmarkNtohl.* -benchmem main/reflect\ngoos: darwin\ngoarch: amd64\npkg: main/reflect\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkNtohl-12 13026195 81.96 ns/op 60 B/op 4 allocs/op\nBenchmarkNtohlNotUseBinary-12 1000000000 0.2511 ns/op 0 B/op 0 allocs/op\nPASS\nok main/reflect 1.841s\n可见使用反射实现的 encoding/binary 包的性能相较于针对具体类型实现的版本,性能差异非常大。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"url":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","title":"2.避免重复转换字符串到字节切片","keywords":"","body":"不要反复从固定字符串创建字节 slice,因为重复的切片初始化会带来性能损耗。相反,请执行一次转换并捕获结果。\nfunc BenchmarkStringToByte(b *testing.B) {\n for i := 0; i \n看一下性能差异,注意需要禁止编译器优化,不然看不出差别。\ngo test -bench=BenchmarkStringToByte -gcflags=\"-N\" main/perf\ngoos: windows\ngoarch: amd64\npkg: main/perf\ncpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz\nBenchmarkStringToByte-8 748467979 1.582 ns/op\nBenchmarkStringToByteOnce-8 878246492 1.379 ns/op\nPASS\nok main/perf 2.962s\n差距不是很大,但是随着字符串长度的增加,差距将会越来越明显。此外,如果这种重复的转换在 Hot Path 上,那么其对性能的影响将被放大。这里解释下 Hot Path,即热点路径,顾名思义,是你的程序中那些会频繁执行到的代码。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"url":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","title":"3.指定容器容量","keywords":"","body":"1.指定 map 容量提示2.指定切片容量尽可能指定容器容量,以便为容器预先分配内存。这将在后续添加元素时减少通过复制来调整容器大小。\n1.指定 map 容量提示\n在尽可能的情况下,在使用 make() 初始化的时候提供容量信息。\nmake(map[T1]T2, hint)\n\n向 make() 提供容量提示会在初始化时尝试调整 map 的大小,这将减少在将元素添加到 map 时为 map 重新分配内存。\n注意,与 slice 不同。map capacity 提示并不保证完全的抢占式分配,而是用于估计所需的 hashmap bucket 的数量。 因此,在将元素添加到 map 时,甚至在指定 map 容量时,仍可能发生分配。\n// Bad\nm := make(map[string]os.FileInfo)\n\nfiles, _ := ioutil.ReadDir(\"./files\")\nfor _, f := range files {\n m[f.Name()] = f\n}\n// m 是在没有大小提示的情况下创建的; 在运行时可能会有更多分配。\n\n// Good\nfiles, _ := ioutil.ReadDir(\"./files\")\n\nm := make(map[string]os.FileInfo, len(files))\nfor _, f := range files {\n m[f.Name()] = f\n}\n// m 是有大小提示创建的;在运行时可能会有更少的分配。\n\n2.指定切片容量\n在尽可能的情况下,在使用 make() 初始化切片时提供容量信息,特别是在追加切片时。\nmake([]T, length, capacity)\n\n与 map 不同,slice capacity 不是一个提示:编译器将为提供给 make() 的 slice 的容量分配足够的内存,这意味着后续的 append() 操作将导致零分配(直到 slice 的长度与容量匹配,在此之后,任何 append 都可能调整大小以容纳其他元素)。\nconst size = 1000000\n\n// Bad\nfor n := 0; n \n执行基准测试:\ngo test -bench=^BenchmarkJoinStr -benchmem \nBenchmarkJoinStrWithOperator-8 66930670 17.81 ns/op 0 B/op 0 allocs/op\nBenchmarkJoinStrWithSprintf-8 7032921 166.0 ns/op 64 B/op 4 allocs/op\n\npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"url":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","title":"4.字符串拼接方式","keywords":"","body":"1.行内字符串拼接2.非行内字符串拼接1.行内字符串拼接\n行内拼接字符串为了书写方便快捷,最常用的两个方法是:\n\n运算符+\nfmt.Sprintf()\n\n行内字符串的拼接,主要追求的是代码的简洁可读。fmt.Sprintf() 能够接收不同类型的入参,通过格式化输出完成字符串的拼接,使用非常方便。但因其底层实现使用了反射,性能上会有所损耗。\n运算符 + 只能简单地完成字符串之间的拼接,非字符串类型的变量需要单独做类型转换。行内拼接字符串不会产生内存分配,也不涉及类型地动态转换,所以性能上优于fmt.Sprintf()。\n从性能出发,兼顾实现的便捷与代码可读性,如果待拼接的字符串不涉及类型转换且数量较少(fmt.Sprintf()。\n下面看下二者的性能对比。\n// Good\nfunc BenchmarkJoinStrWithOperator(b *testing.B) {\n s1, s2, s3 := \"foo\", \"bar\", \"baz\"\n for i := 0; i \n执行基准测试结果如下:\ngo test -bench=^BenchmarkJoinStr -benchmem .\nBenchmarkJoinStrWithOperator-8 70638928 17.53 ns/op 0 B/op 0 allocs/op\nBenchmarkJoinStrWithSprintf-8 7520017 157.2 ns/op 64 B/op 4 allocs/op\n\n可以看到,二者的性能差距很大,快达到一个数量级了。所以在不影响代码可读性时,行内字符串尽可能地使用运算符 + 来拼接而不是fmt.Sprintf()。\n2.非行内字符串拼接\n字符串拼接还有其他的方式,比如strings.Join()、strings.Builder、bytes.Buffer和byte[],这几种不适合行内使用。当待拼接字符串数量较多时可考虑使用。\n先看下其性能测试的对比。\nfunc BenchmarkJoinStrWithStringsJoin(b *testing.B) {\n s1, s2, s3 := \"foo\", \"bar\", \"baz\"\n for i := 0; i \n基准测试结果如下:\ngo test -bench=^BenchmarkJoinStr .\ngoos: windows\ngoarch: amd64\npkg: main/perf\ncpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz\nBenchmarkJoinStrWithStringsJoin-8 31543916 36.39 ns/op\nBenchmarkJoinStrWithStringsBuilder-8 30079785 40.60 ns/op\nBenchmarkJoinStrWithBytesBuffer-8 31663521 39.58 ns/op\nBenchmarkJoinStrWithByteSlice-8 30748495 37.34 ns/op\nBenchmarkJoinStrWithByteSlicePreAlloc-8 665341896 1.813 ns/op\n\n从结果可以看出,strings.Join()、strings.Builder、bytes.Buffer和byte[] 的性能相近。如果结果字符串的长度是可预知的,使用 byte[] 且预先分配容量的拼接方式性能最佳。\n所以如果对性能要求非常严格,或待拼接的字符串数量足够多时,建议使用 byte[] 预先分配容量这种方式。\n综合易用性和性能,一般推荐使用strings.Builder来拼接字符串。\nstring.Builder也提供了预分配内存的方式 Grow:\nfunc BenchmarkJoinStrWithStringsBuilderPreAlloc(b *testing.B) {\n s1, s2, s3 := \"foo\", \"bar\", \"baz\"\n for i := 0; i \n使用了 Grow 优化后的版本的性能测试结果如下。可以看出相较于不预先分配空间的方式,性能提升了很多。\nBenchmarkJoinStrWithStringsBuilderPreAlloc-8 60079003 20.95 ns/op\n\npowered by Gitbook该文章修订时间:\n2022-05-13 15:46:40\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"url":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","title":"5.[]struct{} 的遍历方式","keywords":"","body":"1.[]int2.[]struct{}3.[]*struct4.小结Go 遍历切片或数组有两种方式,一种是下标,一种是 range。二者在功能上没有区别,但在性能上会有区别吗?\n1.[]int\n首先看一下遍历基本类型切片时二者的性能差别,以 []int 为例。\n// genRandomIntSlice 生成指定长度的随机 []int 切片\nfunc genRandomIntSlice(n int) []int {\n rand.Seed(time.Now().UnixNano())\n nums := make([]int, 0, n)\n for i := 0; i \n运行测试结果如下:\ngo test -bench=IntSlice$ .\ngoos: windows\ngoarch: amd64\npkg: main/perf\ncpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz\nBenchmarkIndexIntSlice-8 5043324 236.2 ns/op\nBenchmarkRangeIntSlice-8 5076255 239.1 ns/op\n\ngenRandomIntSlice() 函数用于生成指定长度元素类型为 int 的切片。从最终的结果可以看到,遍历 []int 类型的切片,下标与 range 遍历性能几乎没有区别。\n2.[]struct{}\n那么对于稍微复杂一点的 []struct 类型呢?\ntype Item struct {\n id int\n val [1024]byte\n}\n\nfunc BenchmarkIndexStructSlice(b *testing.B) {\n items := make([]Item, 1024)\n for i := 0; i \n运行测试结果如下:\ngo test -bench=. -gcflags=-N -benchmem main/range\ngoos: darwin\ngoarch: amd64\npkg: main/range\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkIndexStructSlice-12 556436 2165 ns/op 1 B/op 0 allocs/op\nBenchmarkRangeIndexStructSlice-12 535705 2124 ns/op 1 B/op 0 allocs/op\nBenchmarkRangeStructSlice-12 38799 30914 ns/op 27 B/op 0 allocs/op\nPASS\nok main/range 5.097s\n\n可以看出,两种通过 index 遍历 []struct 性能没有差别,但是 range 遍历 []struct 中元素时,性能非常差。\nrange 只遍历 []struct 下标时,性能比 range 遍历 []struct 值好很多。从这里我们应该能够知道二者性能差别之大的原因。\nItem 是一个结构体类型 ,Item 由两个字段构成,一个类型是 int,一个是类型是 [1024]byte,如果每次遍历 []Item,都会进行一次值拷贝,所以带来了性能损耗。\n此外,因 range 时获取的是值拷贝,对副本的修改,是不会影响到原切片。\n需要注意的时,上面运行基准测试时,使用编译选项-gcflags=-N禁用了编译器对切片遍历的优化。如果没有该选项,那么上面三种遍历方式没有性能差别。\n为什么编译器会对上面的测试代码进行优化呢?因为代码实际上只取最后一个切片元素的值,所以前面的循环操作可以跳过,这样便带来性能的提升。如果是下面的代码,那么编器将无法优化,必须遍历拷贝所有元素。\nfunc BenchmarkRange1(b *testing.B) {\n items := make([]Item, 1024)\n tmps := make([]int, 1024)\n for i := 0; i \n无需去除编译器优化,基准测试结果如下:\ngo test -bench=BenchmarkRange -benchmem main/range\ngoos: darwin\ngoarch: amd64\npkg: main/range\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkRange1-12 2290372 534.8 ns/op 0 B/op 0 allocs/op\nBenchmarkRange2-12 46161 27169 ns/op 22 B/op 0 allocs/op\nPASS\nok main/range 3.378s\n\n3.[]*struct\n如果切片中是指向结构体的指针,而不是结构体呢?\n// genItems 生成指定长度 []*Item 切片\nfunc genItems(n int) []*Item {\n items := make([]*Item, 0, n)\n for i := 0; i \n执行性能测试结果:\ngo test -bench=Pointer$ main/perf\ngoos: windows\ngoarch: amd64\npkg: main/perf\ncpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz\nBenchmarkIndexPointer-8 773634 1521 ns/op\nBenchmarkRangePointer-8 752077 1514 ns/op\n\n切片元素从结构体 Item 替换为指针 *Item 后,for 和 range 的性能几乎是一样的。而且使用指针还有另一个好处,可以直接修改指针对应的结构体的值。\n4.小结\nrange 在迭代过程中返回的是元素的拷贝,index 则不存在拷贝。\n如果 range 迭代的元素较小,那么 index 和 range 的性能几乎一样,如基本类型的切片 []int。但如果迭代的元素较大,如一个包含很多属性的 struct 结构体,那么 index 的性能将显著地高于 range,有时候甚至会有上千倍的性能差异。对于这种场景,建议使用 index。如果使用 range,建议只迭代下标,通过下标访问元素,这种使用方式和 index 就没有区别了。如果想使用 range 同时迭代下标和值,则需要将切片/数组的元素改为指针,才能不影响性能。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"url":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","title":"6.切片删除指定元素","keywords":"","body":"1.截取法(修改原切片)2.拷贝法(不改原切片)3.移位法(修改原切片)4.性能对比5.小结Go 并没有提供删除切片元素专用的语法或函数,需要使用切片本身的特性来删除元素。\n删除切片指定元素一般有如下几种方法,本文以 []int 为例给出具体实现。\n1.截取法(修改原切片)\n这里利用对 slice 的截取删除指定元素。注意删除时,后面的元素会前移,下标 i 应该后移一位。\n// DeleteSlice1 删除指定元素。\nfunc DeleteSlice1(a []int, elem int) []int {\n for i := 0; i \n2.拷贝法(不改原切片)\n这种方法最容易理解,重新使用一个 slice,将要删除的元素过滤掉。缺点是需要开辟另一个 slice 的空间,优点是容易理解,而且不会修改原 slice。\n// DeleteSlice2 删除指定元素。\nfunc DeleteSlice2(a []int, elem int) []int {\n tmp := make([]int, 0, len(a))\n for _, v := range a {\n if v != elem {\n tmp = append(tmp, v)\n }\n }\n return tmp\n}\n\n3.移位法(修改原切片)\n\n方式一\n\n利用一个下标 index,记录下一个有效元素应该在的位置。遍历所有元素,当遇到有效元素,将其移动到 index 且 index 加一。最终 index 的位置就是所有有效元素的下一个位置,最后做一个截取就行了。这种方法会修改原来的 slice。\n该方法可以看成对第一种方法截取法的改进,因为每次指需移动一个元素,性能更加。\n// DeleteSlice3 删除指定元素。\nfunc DeleteSlice3(a []int, elem int) []int {\n j := 0\n for _, v := range a {\n if v != elem {\n a[j] = v\n j++\n }\n }\n return a[:j]\n}\n\n\n方式二\n\n创建了一个 slice,但是共用原始 slice 的底层数组。这样也不需要额外分配内存空间,直接在原 slice 上进行修改。\n// DeleteSlice4 删除指定元素。\nfunc DeleteSlice4(a []int, elem int) []int {\n tgt := a[:0]\n for _, v := range a {\n if v != elem {\n tgt = append(tgt, v)\n }\n }\n return tgt\n}\n\n4.性能对比\n假设我们的切片有 0 和 1,我们要删除所有的 0。\n这里分别对长度为 10、100、1000 的切片进行测试,来上下上面四种实现的性能差异。\n生成切片函数如下:\nfunc getSlice(n int) []int {\n a := make([]int, 0, n)\n for i := 0; i \n基准测试代码如下:\nfunc BenchmarkDeleteSlice1(b *testing.B) {\n for i := 0; i \n测试结果如下:\n原切片长度为 10:\ngo test -bench=. main/slice\ngoos: windows\ngoarch: amd64\npkg: main/slice\ncpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz\nBenchmarkDeleteSlice1-8 17466486 65.07 ns/op\nBenchmarkDeleteSlice2-8 14897282 85.22 ns/op\nBenchmarkDeleteSlice3-8 21952129 50.78 ns/op\nBenchmarkDeleteSlice4-8 22176390 54.68 ns/op\nPASS\nok main/slice 5.427s\n原切片长度为 100:\nBenchmarkDeleteSlice1-8 1652146 762.1 ns/op\nBenchmarkDeleteSlice2-8 2124237 578.4 ns/op\nBenchmarkDeleteSlice3-8 3161318 359.9 ns/op\nBenchmarkDeleteSlice4-8 2714158 423.7 ns/op\n原切片长度为 1000:\nBenchmarkDeleteSlice1-8 56067 21915 ns/op\nBenchmarkDeleteSlice2-8 258662 5007 ns/op\nBenchmarkDeleteSlice3-8 432049 2724 ns/op\nBenchmarkDeleteSlice4-8 325194 3615 ns/op\n5.小结\n从基准测试结果来看,性能最佳的方法是移位法,其中又属第一种实现方式较佳。性能最差的也是最常用的方法是截取法。随着切片长度的增加,上面四种删除方式的性能差异会愈加明显。\n实际使用时,我们可以根据不用场景来选择。如不能修改原切片使用拷贝法,可以修改原切片使用移位法中的第一种实现方式。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"url":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","title":"1.使用空结构体节省内存","keywords":"","body":"1.不占内存空间2.空结构体的作用2.1 实现集合(Set)2.2 不发送数据的信道2.3 仅包含方法的结构体1.不占内存空间\n在 Go 中,我们可以使用 unsafe.Sizeof 计算出一个数据类型实例需要占用的字节数。\npackage main\n\nimport (\n \"fmt\"\n \"unsafe\"\n)\n\nfunc main() {\n fmt.Println(unsafe.Sizeof(struct{}{}))\n}\n\n运行上面的例子将会输出:\ngo run main.go\n0\n\n可以看到,Go 中空结构体 struct{} 是不占用内存空间,不像 C/C++ 中空结构体仍占用 1 字节。\n2.空结构体的作用\n因为空结构体不占据内存空间,因此被广泛作为各种场景下的占位符使用。一是节省资源,二是空结构体本身就具备很强的语义,即这里不需要任何值,仅作为占位符,达到的代码即注释的效果。\n2.1 实现集合(Set)\nGo 语言标准库没有提供 Set 的实现,通常使用 map 来代替。事实上,对于集合来说,只需要 map 的键,而不需要值。即使是将值设置为 bool 类型,也会多占据 1 个字节,那假设 map 中有一百万条数据,就会浪费 1MB 的空间。\n因此呢,将 map 作为集合(Set)使用时,可以将值类型定义为空结构体,仅作为占位符使用即可。\ntype Set map[string]struct{}\n\nfunc (s Set) Has(key string) bool {\n _, ok := s[key]\n return ok\n}\n\nfunc (s Set) Add(key string) {\n s[key] = struct{}{}\n}\n\nfunc (s Set) Delete(key string) {\n delete(s, key)\n}\n\nfunc main() {\n s := make(Set)\n s.Add(\"foo\")\n s.Add(\"bar\")\n fmt.Println(s.Has(\"foo\"))\n fmt.Println(s.Has(\"bar\"))\n}\n\n如果想使用 Set 的完整功能,如初始化(通过切片构建一个 Set)、Add、Del、Clear、Contains 等操作,可以使用开源库 golang-set。\n2.2 不发送数据的信道\nfunc worker(ch chan struct{}) {\n \n有时候使用 channel 不需要发送任何的数据,只用来通知子协程(goroutine)执行任务,或只用来控制协程的并发。这种情况下,使用空结构体作为占位符就非常合适了。\n2.3 仅包含方法的结构体\ntype Door struct{}\n\nfunc (d Door) Open() {\n fmt.Println(\"Open the door\")\n}\n\nfunc (d Door) Close() {\n fmt.Println(\"Close the door\")\n}\n\n在部分场景下,结构体只包含方法,不包含任何的字段。例如上面例子中的 Door,在这种情况下,Door 事实上可以用任何的数据结构替代。\ntype Door int\ntype Door bool\n\n无论是 int 还是 bool 都会浪费额外的内存。因此,在这种情况下,声明为空结构体最合适。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"url":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","title":"2.struct 布局考虑内存对齐","keywords":"","body":"1.为什么需要内存对齐2.Go 内存对齐规则3.合理的 struct 布局4.空结构与空数组对内存对齐的影响1.为什么需要内存对齐\nCPU 访问内存并不是逐个字节访问,而是以字长(word size)为单位访问。如 32 位的 CPU ,字长为 4 字节,那么 CPU 访存的单位是 4 字节。\n这么设计的目的,是减少 CPU 访问内存的次数,加大 CPU 访问内存的吞吐量。比如同样读取 8 个字节的数据,一次读取 4 个字节那么只需要读取 2 次。\nCPU 始终以字长访问内存,如果不进行内存对齐,可能会增加 CPU 访存次数。\n\n内存对齐前变量 a、b 各占据 3 个字节,CPU 读取 b 变量的值需要两次访存,第一次访存得到前一个字节,第二次得到后两个字节。内存对齐后 a、b 各占 4 个字节,CPU 读取 b 变量的值只需要一次访存。\n从这个例子可以看到,内存对齐对实现变量的原子性操作也是有好处的。每次内存访问是原子的,如果变量的大小不超过字长,那么内存对齐后,对该变量的访问就是原子的,这个特性在并发场景下至关重要。\n简言之:合理的内存对齐可以提高内存读写的性能,并且便于实现变量操作的原子性。\n2.Go 内存对齐规则\n编译器一般为了减少 CPU 访存指令周期,提高内存的访问效率,会对变量进行内存对齐。Go 作为一门追求高性能的后台编程语言,当然也不例外。\nGo Language Specification 中 Size and alignment guarantees 描述了内存对齐的规则。\n\n1.For a variable x of any type: unsafe.Alignof(x) is at least 1.\n2.For a variable x of struct type: unsafe.Alignof(x) is the largest of all the values unsafe.Alignof(x.f) for each field f of x, but at least 1.\n3.For a variable x of array type: unsafe.Alignof(x) is the same as the alignment of a variable of the array's element type.\n\n\n对于任意类型的变量 x ,unsafe.Alignof(x) 至少为 1。\n对于结构体类型的变量 x,计算 x 每一个字段 f 的 unsafe.Alignof(x.f),unsafe.Alignof(x) 等于其中的最大值。\n对于数组类型的变量 x,unsafe.Alignof(x) 等于构成数组的元素类型的对齐系数。\n\n其中函数 unsafe.Alignof 用于获取变量的对齐系数。 对齐系数决定了字段的偏移和变量的大小,两者必须是对齐系数的整数倍。\n3.合理的 struct 布局\n因为内存对齐的存在,合理的 struct 布局可以减少内存占用,提高程序性能。\ntype demo1 struct {\n a int8\n b int16\n c int32\n}\n\ntype demo2 struct {\n a int8\n c int32\n b int16\n}\n\nfunc main() {\n fmt.Println(unsafe.Sizeof(demo1{})) // 8\n fmt.Println(unsafe.Sizeof(demo2{})) // 12\n}\n\n可以看到,同样的字段,因排列顺序不同,会导致不一样的结构体大小。\n每个字段按照自身的对齐系数来确定在内存中的偏移量,一个字段因偏移而浪费的大小也不同。\n接下来逐个分析,首先是 demo1:\na 是第一个字段,默认是已经对齐的,从第 0 个位置开始占据 1 字节。\nb 是第二个字段,对齐系数为 2,因此,必须空出 1 个字节,偏移量才是 2 的倍数,从第 2 个位置开始占据 2 字节。\nc 是第三个字段,对齐倍数为 4,此时,内存已经是对齐的,从第 4 个位置开始占据 4 字节即可。\n因此 demo1 的内存占用为 8 字节。\n对于 demo2:\na 是第一个字段,默认是已经对齐的,从第 0 个位置开始占据 1 字节。\nc 是第二个字段,对齐倍数为 4,因此,必须空出 3 个字节,偏移量才是 4 的倍数,从第 4 个位置开始占据 4 字节。\nb 是第三个字段,对齐倍数为 2,从第 8 个位置开始占据 2 字节。\ndemo2 的对齐系数由 c 的对齐系数决定,也是 4,因此,demo2 的内存占用为 12 字节。\n\n因此,在对内存特别敏感的结构体的设计上,我们可以通过调整字段的顺序,将字段宽度从小到大由上到下排列,来减少内存的占用。\n4.空结构与空数组对内存对齐的影响\n空结构与空数组在 Go 中比较特殊。没有任何字段的空 struct{} 和没有任何元素的 array 占据的内存空间大小为 0。\n因为这一点,空 struct{} 或空 array 作为其他 struct 的字段时,一般不需要内存对齐。但是有一种情况除外:即当 struct{} 或空 array 作为结构体最后一个字段时,需要内存对齐。因为如果有指针指向该字段,返回的地址将在结构体之外,如果此指针一直存活不释放对应的内存,就会有内存泄露的问题(该内存不因结构体释放而释放)。\ntype demo3 struct {\n a struct{}\n b int32\n}\ntype demo4 struct {\n b int32\n a struct{}\n}\n\nfunc main() {\n fmt.Println(unsafe.Sizeof(demo3{})) // 4\n fmt.Println(unsafe.Sizeof(demo4{})) // 8\n}\n\n可以看到,demo3{} 的大小为 4 字节,与字段 b 占据空间一致,而 demo4{} 的大小为 8 字节,即额外填充了 4 字节的空间。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"url":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","title":"3.减少逃逸,将变量限制在栈上","keywords":"","body":"1.局部切片尽可能确定长度或容量2.返回值 VS 返回指针3.小的拷贝好过引用4.返回值使用确定的类型5.小结变量逃逸一般发生在如下几种情况:\n\n变量较大(栈空间不足)\n变量大小不确定(如 slice 长度或容量不定)\n返回地址\n返回引用(引用变量的底层是指针)\n返回值类型不确定(不能确定大小)\n闭包\n其他\n\n知道变量逃逸的原因后,我们可以有意识地避免变量发生逃逸,将其限制在栈上,减少堆变量的分配,降低 GC 成本,可提高程序性能。\n1.局部切片尽可能确定长度或容量\n如果使用局部切片时,已知切片的长度或容量,请使用常量或数值字面量来定义。\npackage main\n\nfunc main() {\n number := 10\n s1 := make([]int, 0, number)\n for i := 0; i \n我们来看一下编译器编译时对上面两个切片的优化决策。\n go build -gcflags=\"-m -m -l\" main.go\n# command-line-arguments\n./main.go:5:12: make([]int, 0, number) escapes to heap:\n./main.go:5:12: flow: {heap} = &{storage for make([]int, 0, number)}:\n./main.go:5:12: from make([]int, 0, number) (non-constant size) at ./main.go:5:12\n./main.go:5:12: make([]int, 0, number) escapes to heap\n./main.go:9:12: make([]int, 0, 10) does not escape\n\n从输出结果可以看到,使用变量(非常量)来指定切片的容量,会导致切片发生逃逸,影响性能。指定切片的长度时也是一样的,尽可能使用常量或数值字面量。\n下面看下二者的性能差异。\n// sliceEscape 发生逃逸,在堆上申请切片\nfunc sliceEscape() {\n number := 10\n s1 := make([]int, 0, number)\n for i := 0; i \n运行上面的基准测试结果如下:\ngo test -bench=BenchmarkSlice -benchmem main/copy \ngoos: darwin\ngoarch: amd64\npkg: main/copy\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkSliceEscape-12 43268738 27.40 ns/op 80 B/op 1 allocs/op\nBenchmarkSliceNoEscape-12 186127288 6.454 ns/op 0 B/op 0 allocs/op\nPASS\nok main/copy 4.402s\n\n2.返回值 VS 返回指针\n值传递会拷贝整个对象,而指针传递只会拷贝地址,指向的对象是同一个。传指针可以减少值的拷贝,但是会导致内存分配逃逸到堆中,增加垃圾回收(GC)的负担。在对象频繁创建和删除的场景下,返回指针导致的 GC 开销可能会严重影响性能。\n一般情况下,对于需要修改原对象,或占用内存比较大的对象,返回指针。对于只读或占用内存较小的对象,返回值能够获得更好的性能。\n下面以一个简单的示例来看下二者的性能差异。\ntype St struct {\n arr [1024]int\n}\n\nfunc retValue() St {\n var st St\n return st\n}\n\nfunc retPtr() *St {\n var st St\n return &st\n}\n\nfunc BenchmarkRetValue(b *testing.B) {\n for i := 0; i \n基准测试结果如下:\ngo test -gcflags=\"-l\" -bench=BenchmarkRet -benchmem main/copy\ngoos: darwin\ngoarch: amd64\npkg: main/copy\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkRetValue-12 5194722 216.2 ns/op 0 B/op 0 allocs/op\nBenchmarkRetPtr-12 1342947 893.6 ns/op 8192 B/op 1 allocs/op\nPASS\nok main/copy 3.865s\n\n3.小的拷贝好过引用\n小的拷贝好过引用,什么意思呢,就是尽量使用栈变量而不是堆变量。下面举一个反常识的例子,来证明小的拷贝比在堆上创建引用变量要好。\n我们都知道 Go 里面的 Array 以 pass-by-value 方式传递后,再加上其长度不可扩展,考虑到性能我们一般很少使用它。实际上,凡事无绝对。有时使用数组进行拷贝传递,比使用切片要好。\n// copy/copy.go\n\nconst capacity = 1024\n\nfunc arrayFibonacci() [capacity]int {\n var d [capacity]int\n for i := 0; i \n下面看一下性能对比。\nfunc BenchmarkArray(b *testing.B) {\n for i := 0; i \n运行上面的基准测试,将得到如下结果。\ngo test -bench=. -benchmem -gcflags=\"-l\" main/copy\ngoos: darwin\ngoarch: amd64\npkg: main/copy\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkArray-12 692400 1708 ns/op 0 B/op 0 allocs/op\nBenchmarkSlice-12 464974 2242 ns/op 8192 B/op 1 allocs/op\nPASS\nok main/copy 3.908s\n\n从测试结果可以看出,对数组的拷贝性能却比使用切片要好。为什么会这样呢?\nsliceFibonacci()函数中分配的局部变量切片因为要返回到函数外部,所以发生了逃逸,需要在堆上申请内存空间。从测试也过也可以看出,arrayFibonacci()函数没有内存分配,完全在栈上完成数组的创建。这里说明了对于一些短小的对象,栈上复制的成本远小于在堆上分配和回收的成本。\n需要注意,运行上面基准测试时,传递了禁止内联的编译选项 \"-l\",如果发生内联,那么将不会出现变量的逃逸,就不存在堆上分配内存与回收的操作了,二者将看不出性能差异。\n编译时可以借助选项-gcflags=-m查看编译器对上面两个函数的优化决策。\ngo build -gcflags=-m copy/copy.go\n# command-line-arguments\ncopy/copy.go:5:6: can inline arrayFibonacci\ncopy/copy.go:17:6: can inline sliceFibonacci\ncopy/copy.go:18:11: make([]int, capacity) escapes to heap\n\n可以看到,arrayFibonacci() 和 sliceFibonacci() 函数均可内联。sliceFibonacci() 函数中定义的局部变量切片逃逸到了堆。\n那么多大的变量才算是小变量呢? 对 Go 编译器而言,超过一定大小的局部变量将逃逸到堆上,不同 Go 版本的大小限制可能不一样。一般是 \n4.返回值使用确定的类型\n如果变量类型不确定,那么将会逃逸到堆上。所以,函数返回值如果能确定的类型,就不要使用 interface{}。\n我们还是以上面斐波那契数列函数为例,看下返回值为确定类型和 interface{} 的性能差别。\nconst capacity = 1024\n\nfunc arrayFibonacci() [capacity]int {\n var d [capacity]int\n for i := 0; i \nfunc BenchmarkArray(b *testing.B) {\n for i := 0; i \n运行上面的基准测试结果如下:\ngo test -bench=. -benchmem main/copy\ngoos: darwin\ngoarch: amd64\npkg: main/copy\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkArray-12 832418 1427 ns/op 0 B/op 0 allocs/op\nBenchmarkIfc-12 380626 2861 ns/op 8192 B/op 1 allocs/op\nPASS\nok main/copy 3.742s\n\n可见,函数返回值使用 interface{} 返回时,编译器无法确定返回值的具体类型,导致返回值逃逸到堆上。当发生了堆上内存的申请与回收时,性能会差一点。\n5.小结\n栈上分配内存比在堆中分配内存有更高的效率。因为栈上分配的内存不需要 GC 处理,函数返回后就会直接释放,而堆上分配的内存使用完毕会交给 GC 处理。在知道常见的变量逃逸场景后,我们在编码时可以有意识地避免变量发生逃逸,尽可能地使用栈空间,而非堆空间。\n以上仅列出了部分变量发生逃逸的情形。实际上,Go 编译器对变量的逃逸分析决策远比我们想像的要复杂。我们只能尽可能地去勾勒而无以绘其全貌。Go 官方也在 Frequently Asked Questions (FAQ) 明确地告诉我们,我们并不需要知道变量是分配在栈(stack)上还是堆(heap)上。Golang 中的变量只要被引用就一直会存活,存储在堆上还是栈上由 Go 内部实现决定而和具体的语法没有关系。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"url":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","title":"4.sync.Pool 复用对象","keywords":"","body":"1.简介2.作用3.如何使用4.性能差异5.在标准库中的应用1.简介\nsync.Pool 是 sync 包下的一个组件,可以作为保存临时取还对象的一个“池子”。个人觉得它的名字有一定的误导性,因为 Pool 里装的对象可以被无通知地被回收,可能 sync.Cache 是一个更合适的名字。\nsync.Pool 是可伸缩的,同时也是并发安全的,其容量仅受限于内存的大小。存放在池中的对象如果不活跃了会被自动清理。\n2.作用\n对于很多需要重复分配、回收内存的地方,sync.Pool 是一个很好的选择。频繁地分配、回收内存会给 GC 带来一定的负担,严重的时候会引起 CPU 的毛刺,而 sync.Pool 可以将暂时不用的对象缓存起来,待下次需要的时候直接使用,不用再次经过内存分配,复用对象的内存,减轻 GC 的压力,提升系统的性能。\n一句话总结:用来保存和复用临时对象,减少内存分配,降低 GC 压力。\n3.如何使用\nsync.Pool 的使用方式非常简单,只需要实现 New 函数即可。对象池中没有对象时,将会调用 New 函数创建。\n假设我们有一个“学生”结构体,并复用改结构体对象。\ntype Student struct {\n Name string\n Age int32\n Remark [1024]byte\n}\n\nvar studentPool = sync.Pool{\n New: func() interface{} { \n return new(Student) \n },\n}\n\n然后调用 Pool 的 Get() 和 Put() 方法来获取和放回池子中。\nstu := studentPool.Get().(*Student)\njson.Unmarshal(buf, stu)\nstudentPool.Put(stu)\n\n\nGet() 用于从对象池中获取对象,因为返回值是 interface{},因此需要类型转换。\nPut() 则是在对象使用完毕后,放回到对象池。\n\n4.性能差异\n我们以 bytes.Buffer 字节缓冲器为例,利用 sync.Pool 复用 bytes.Buffer 对象,避免重复创建与回收内存,来看看对性能的提升效果。\nvar bufferPool = sync.Pool{\n New: func() interface{} {\n return &bytes.Buffer{}\n },\n}\n\nvar data = make([]byte, 10000)\n\nfunc BenchmarkBufferWithPool(b *testing.B) {\n for n := 0; n \n测试结果如下:\ngo test -bench=. -benchmem main/pool\ngoos: darwin\ngoarch: amd64\npkg: main/pool\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkBufferWithPool-12 11987966 97.12 ns/op 0 B/op 0 allocs/op\nBenchmarkBuffer-12 1246887 1020 ns/op 10240 B/op 1 allocs/op\nPASS\nok main/pool 3.510s\n\n这个例子创建了一个 bytes.Buffer 对象池,每次只执行 Write 操作,及做一次数据拷贝,耗时几乎可以忽略。而内存分配和回收的耗时占比较多,因此对程序整体的性能影响更大。从测试结果也可以看出,使用了 Pool 复用对象,每次操作不再有内存分配。\n5.在标准库中的应用\nGo 标准库也大量使用了 sync.Pool,例如 fmt 和 encoding/json。以 fmt 包为例,我们看下其是如何使用 sync.Pool 的。\n我们可以看一下最常用的标准格式化输出函数 Printf() 函数。\n// Printf formats according to a format specifier and writes to standard output.\n// It returns the number of bytes written and any write error encountered.\nfunc Printf(format string, a ...interface{}) (n int, err error) {\n return Fprintf(os.Stdout, format, a...)\n}\n\n继续看 Fprintf() 的定义。\n// Fprintf formats according to a format specifier and writes to w.\n// It returns the number of bytes written and any write error encountered.\nfunc Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) {\n p := newPrinter()\n p.doPrintf(format, a)\n n, err = w.Write(p.buf)\n p.free()\n return\n}\n\nFprintf() 函数的参数是一个 io.Writer,Printf() 传的是 os.Stdout,相当于直接输出到标准输出。这里的 newPrinter 用的就是 sync.Pool。\n// go version go1.17 darwin/amd64\n\n// pp is used to store a printer's state and is reused with sync.Pool to avoid allocations.\ntype pp struct {\n buf buffer\n ...\n}\n\nvar ppFree = sync.Pool{\n New: func() interface{} { return new(pp) },\n}\n\n// newPrinter allocates a new pp struct or grabs a cached one.\nfunc newPrinter() *pp {\n p := ppFree.Get().(*pp)\n p.panicking = false\n p.erroring = false\n p.wrapErrs = false\n p.fmt.init(&p.buf)\n return p\n}\n\n// free saves used pp structs in ppFree; avoids an allocation per invocation.\nfunc (p *pp) free() {\n // Proper usage of a sync.Pool requires each entry to have approximately\n // the same memory cost. To obtain this property when the stored type\n // contains a variably-sized buffer, we add a hard limit on the maximum buffer\n // to place back in the pool.\n //\n // See https://golang.org/issue/23199\n if cap(p.buf) > 64\nfmt.Printf()的调用是非常频繁的,利用 sync.Pool 复用 pp 对象能够极大地提升性能,减少内存占用,同时降低 GC 压力。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"url":"第四篇:最佳性能/3.并发编程/1.关于锁.html","title":"1.关于锁","keywords":"","body":"1.无锁化1.1 无锁数据结构1.2 串行无锁2.减少锁竞争3.优先使用共享锁而非互斥锁3.1 sync.Mutex3.2 sync.RWMutex3.3 性能对比1.无锁化\n加锁是为了避免在并发环境下,同时访问共享资源产生的安全问题。那么,在并发环境下,是否必须加锁?答案是否定的。并非所有的并发都需要加锁。适当地降低锁的粒度,甚至采用无锁化的设计,更能提升并发能力。\n无锁化主要有两种实现,无锁数据结构和串行无锁。\n1.1 无锁数据结构\n利用硬件支持的原子操作可以实现无锁的数据结构,原子操作可以在 lock-free 的情况下保证并发安全,并且它的性能也能做到随 CPU 个数的增多而线性扩展。很多语言都提供 CAS 原子操作(如 Go 中的 atomic 包和 C++11 中的 atomic 库),可以用于实现无锁数据结构,如无锁链表。\n我们以一个简单的线程安全单向链表的插入操作来看下无锁编程和普通加锁的区别。\npackage list\n\nimport (\n \"fmt\"\n \"sync\"\n \"sync/atomic\"\n\n \"golang.org/x/sync/errgroup\"\n)\n\n// Node 链表节点\ntype Node struct {\n Value interface{}\n Next *Node\n}\n\n//\n// 有锁单向链表的简单实现\n//\n\n// WithLockList 有锁单向链表\ntype WithLockList struct {\n Head *Node\n mu sync.Mutex\n}\n\n// Push 将元素插入到链表的首部\nfunc (l *WithLockList) Push(v interface{}) {\n l.mu.Lock()\n defer l.mu.Unlock()\n n := &Node{\n Value: v,\n Next: l.Head,\n }\n l.Head = n\n}\n\n// String 有锁链表的字符串形式输出\nfunc (l WithLockList) String() string {\n s := \"\"\n cur := l.Head\n for {\n if cur == nil {\n break\n }\n if s != \"\" {\n s += \",\"\n }\n s += fmt.Sprintf(\"%v\", cur.Value)\n cur = cur.Next\n }\n return s\n}\n\n//\n// 无锁单向链表的简单实现\n//\n\n// LockFreeList 无锁单向链表\ntype LockFreeList struct {\n Head atomic.Value\n}\n\n// Push 有锁\nfunc (l *LockFreeList) Push(v interface{}) {\n for {\n head := l.Head.Load()\n headNode, _ := head.(*Node)\n n := &Node{\n Value: v,\n Next: headNode,\n }\n if l.Head.CompareAndSwap(head, n) {\n break\n }\n }\n}\n\n// String 有锁链表的字符串形式输出\nfunc (l LockFreeList) String() string {\n s := \"\"\n cur := l.Head.Load().(*Node)\n for {\n if cur == nil {\n break\n }\n if s != \"\" {\n s += \",\"\n }\n s += fmt.Sprintf(\"%v\", cur.Value)\n cur = cur.Next\n }\n return s\n}\n\n上面的实现有几点需要注意一下:\n(1)无锁单向链表实现时在插入时需要进行 CAS 操作,即调用CompareAndSwap()方法进行插入,如果插入失败则进行 for 循环多次尝试,直至成功。\n(2)为了方便打印链表内容,实现一个String()方法遍历链表,且使用值作为接收者,避免打印对象指针时无法生效。\n\n\nIf an operand implements method String() string, that method will be invoked to convert the object to a string, which will then be formatted as required by the verb (if any).\n\n\n我们分别对两种链表做一个并发写入的操作验证一下其功能。\npackage main\n\nimport (\n \"fmt\"\n\n \"main/list\"\n)\n\n// ConcurWriteWithLockList 并发写入有锁链表\nfunc ConcurWriteWithLockList(l *WithLockList) {\n var g errgroup.Group\n // 10 个协程并发写入链表\n for i := 0; i \n注意,多次运行上面的main()函数的结果可能会不相同,因为并发是无序的。\n8,7,6,9,5,4,3,1,2,0\n9,8,7,6,5,4,3,2,0,1\n下面再看一下链表 Push 操作的基准测试,对比一下有锁与无锁的性能差异。\nfunc BenchmarkWriteWithLockList(b *testing.B) {\n l := &WithLockList{}\n for n := 0; n \n可以看出无锁版本比有锁版本性能高一些。\n1.2 串行无锁\n串行无锁是一种思想,就是避免对共享资源的并发访问,改为每个并发操作访问自己独占的资源,达到串行访问资源的效果,来避免使用锁。不同的场景有不同的实现方式。比如网络 I/O 场景下将单 Reactor 多线程模型改为主从 Reactor 多线程模型,避免对同一个消息队列锁读取。\n这里我介绍的是后台微服务开发经常遇到的一种情况。我们经常需要并发拉取多方面的信息,汇聚到一个变量上。那么此时就存在对同一个变量互斥写入的情况。比如批量并发拉取用户信息写入到一个 map。此时我们可以将每个协程拉取的结果写入到一个临时对象,这样便将并发地协程与同一个变量解绑,然后再将其汇聚到一起,这样便可以不用使用锁。即独立处理,然后合并。\n\n为了模拟上面的情况,简单地写个示例程序,对比下性能。\nimport (\n \"sync\"\n\n \"golang.org/x/sync/errgroup\"\n)\n\n// ConcurWriteMapWithLock 有锁并发写入 map\nfunc ConcurWriteMapWithLock() map[int]int {\n m := make(map[int]int)\n var mu sync.Mutex\n var g errgroup.Group\n // 10 个协程并发写入 map\n for i := 0; i \n看下二者的性能差异:\nfunc BenchmarkConcurWriteMapWithLock(b *testing.B) {\n for n := 0; n \n2.减少锁竞争\n如果加锁无法避免,则可以采用分片的形式,减少对资源加锁的次数,这样也可以提高整体的性能。\n比如 Golang 优秀的本地缓存组件 bigcache 、go-cache、freecache 都实现了分片功能,每个分片一把锁,采用分片存储的方式减少加锁的次数从而提高整体性能。\n以一个简单的示例,通过对map[uint64]struct{}分片前后并发写入的对比,来看下减少锁竞争带来的性能提升。\nvar (\n num = 1000000\n m0 = make(map[int]struct{}, num)\n mu0 = sync.RWMutex{}\n m1 = make(map[int]struct{}, num)\n mu1 = sync.RWMutex{}\n)\n\n// ConWriteMapNoShard 不分片写入一个 map。\nfunc ConWriteMapNoShard() {\n g := errgroup.Group{}\n for i := 0; i \n看下二者的性能差异:\nfunc BenchmarkConWriteMapNoShard(b *testing.B) {\n for i := 0; i \n可以看到,通过对分共享资源的分片处理,减少了锁竞争,能明显地提高程序的并发性能。可以预见的是,随着分片粒度地变小,性能差距会越来越大。当然,分片粒度不是越小越好。因为每一个分片都要配一把锁,那么会带来很多额外的不必要的开销。可以选择一个不太大的值,在性能和花销上寻找一个平衡。\n3.优先使用共享锁而非互斥锁\n如果并发无法做到无锁化,优先使用共享锁而非互斥锁。\n所谓互斥锁,指锁只能被一个 Goroutine 获得。共享锁指可以同时被多个 Goroutine 获得的锁。\nGo 标准库 sync 提供了两种锁,互斥锁(sync.Mutex)和读写锁(sync.RWMutex),读写锁便是共享锁的一种具体实现。\n3.1 sync.Mutex\n互斥锁的作用是保证共享资源同一时刻只能被一个 Goroutine 占用,一个 Goroutine 占用了,其他的 Goroutine 则阻塞等待。\n\nsync.Mutex 提供了两个导出方法用来使用锁。\nLock() // 加锁\nUnlock() // 释放锁\n\n我们可以通过在访问共享资源前前用 Lock 方法对资源进行上锁,在访问共享资源后调用 Unlock 方法来释放锁,也可以用 defer 语句来保证互斥锁一定会被解锁。在一个 Go 协程调用 Lock 方法获得锁后,其他请求锁的协程都会阻塞在 Lock 方法,直到锁被释放。\n3.2 sync.RWMutex\n读写锁是一种共享锁,也称之为多读单写锁 (multiple readers, single writer lock)。在使用锁时,对获取锁的目的操作做了区分,一种是读操作,一种是写操作。因为同一时刻允许多个 Gorouine 获取读锁,所以是一种共享锁。但写锁是互斥的。\n一般来说,有如下几种情况:\n\n读锁之间不互斥,没有写锁的情况下,读锁是无阻塞的,多个协程可以同时获得读锁。\n写锁之间是互斥的,存在写锁,其他写锁阻塞。\n写锁与读锁是互斥的,如果存在读锁,写锁阻塞,如果存在写锁,读锁阻塞。\n\n\nsync.RWMutex 提供了五个导出方法用来使用锁。\nLock() // 加写锁\nUnlock() // 释放写锁\nRLock() // 加读锁\nRUnlock() // 释放读锁\nRLocker() Locker // 返回读锁,使用 Lock() 和 Unlock() 进行 RLock() 和 RUnlock()\n\n读写锁的存在是为了解决读多写少时的性能问题,读场景较多时,读写锁可有效地减少锁阻塞的时间。\n3.3 性能对比\n大部分业务场景是读多写少,所以使用读写锁可有效提高对共享数据的访问效率。最坏的情况,只有写请求,那么读写锁顶多退化成互斥锁。所以优先使用读写锁而非互斥锁,可以提高程序的并发性能。\n接下来,我们测试三种情景下,互斥锁和读写锁的性能差异。\n\n读多写少(读占 80%)\n读写一致(各占 50%)\n读少写多(读占 20%)\n\n首先根据互斥锁和读写锁分别实现对共享 map 的并发读写。\n// OpMapWithMutex 使用互斥锁读写 map。\n// rpct 为读操作占比。\nfunc OpMapWithMutex(rpct int) {\n m := make(map[int]struct{})\n mu := sync.Mutex{}\n var wg sync.WaitGroup\n for i := 0; i = rpct {\n m[i] = struct{}{}\n time.Sleep(time.Microsecond)\n return\n }\n // 读操作。\n _ = m[i]\n time.Sleep(time.Microsecond)\n }()\n }\n wg.Wait()\n}\n\n// OpMapWithRWMutex 使用读写锁读写 map。\n// rpct 为读操作占比。\nfunc OpMapWithRWMutex(rpct int) {\n m := make(map[int]struct{})\n mu := sync.RWMutex{}\n var wg sync.WaitGroup\n for i := 0; i = rpct {\n mu.Lock()\n defer mu.Unlock()\n m[i] = struct{}{}\n time.Sleep(time.Microsecond)\n return\n }\n // 读操作。\n mu.RLock()\n defer mu.RUnlock()\n _ = m[i]\n time.Sleep(time.Microsecond)\n }()\n }\n wg.Wait()\n}\n\n入参 rpct 用来调节读操作的占比,来模拟读写占比不同的场景。rpct 设为 80 表示读多写少(读占 80%),rpct 设为 50 表示读写一致(各占 50%),rpct 设为 20 表示读少写多(读占 20%)。\nfunc BenchmarkMutexReadMore(b *testing.B) {\n for i := 0; i \n执行当前包下的所有基准测试,结果如下:\ndablelv@DABLELV-MB0 mutex % go test -bench=.\ngoos: darwin\ngoarch: amd64\npkg: main/mutex\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkMutexReadMore-12 2462 485917 ns/op\nBenchmarkRWMutexReadMore-12 8074 145690 ns/op\nBenchmarkMutexRWEqual-12 2406 498673 ns/op\nBenchmarkRWMutexRWEqual-12 4124 303693 ns/op\nBenchmarkMutexWriteMore-12 1906 532350 ns/op\nBenchmarkRWMutexWriteMore-12 2462 432386 ns/op\nPASS\nok main/mutex 9.532s\n\n可见读多写少的场景,使用读写锁并发性能会更优。可以预见的是如果写占比更低,那么读写锁带的并发效果会更优。\n这里需要注意的是,因为每次读写 map 的操作耗时很短,所以每次睡眠一微秒(百万分之一秒)来增加耗时,不然对共享资源的访问耗时,小于锁处理的本身耗时,那么使用读写锁带来的性能优化效果将变得不那么明显,甚至会降低性能。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"url":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","title":"2.限制协程数量","keywords":"","body":"1.协程数过多的问题1.1 程序崩溃1.2 协程的代价2.2 限制协程数量3.协程池化4.小结1.协程数过多的问题\n1.1 程序崩溃\nGo 程(goroutine)是由 Go 运行时管理的轻量级线程。通过它我们可以轻松实现并发编程。但是当我们无限开辟协程时,将会遇到致命的问题。\nfunc main() {\n var wg sync.WaitGroup\n for i := 0; i \n这个例子实现了 math.MaxInt32 个协程的并发,2^31 - 1 约为 20 亿个,每个协程内部几乎没有做什么事情。正常的情况下呢,这个程序会乱序输出 0 ~ 2^31-1 个数字。\n程序会像预期的那样顺利的运行吗?\ngo run main.go\n...\n108668\n1142025\npanic: too many concurrent operations on a single file or socket (max 1048575)\n\ngoroutine 1158408 [running]:\ninternal/poll.(*fdMutex).rwlock(0xc0000ae060, 0x0)\n /usr/local/go/src/internal/poll/fd_mutex.go:147 +0x11b\ninternal/poll.(*FD).writeLock(...)\n /usr/local/go/src/internal/poll/fd_mutex.go:239\ninternal/poll.(*FD).Write(0xc0000ae060, {0xc12cadf690, 0x8, 0x8})\n /usr/local/go/src/internal/poll/fd_unix.go:262 +0x72\nos.(*File).write(...)\n /usr/local/go/src/os/file_posix.go:49\nos.(*File).Write(0xc0000ac008, {0xc12cadf690, 0x1, 0xc12ea62f50})\n /usr/local/go/src/os/file.go:176 +0x65\nfmt.Fprintln({0x10c00e0, 0xc0000ac008}, {0xc12ea62f90, 0x1, 0x1})\n /usr/local/go/src/fmt/print.go:265 +0x75\nfmt.Println(...)\n /usr/local/go/src/fmt/print.go:274\nmain.main.func1(0x0)\n /Users/dablelv/work/code/test/main.go:16 +0x8f\n...\n\n运行的结果是程序直接崩溃了,关键的报错信息是:\npanic: too many concurrent operations on a single file or socket (max 1048575)\n对单个 file/socket 的并发操作个数超过了系统上限,这个报错是 fmt.Printf 函数引起的,fmt.Printf 将格式化后的字符串打印到屏幕,即标准输出。在 Linux 系统中,标准输出也可以视为文件,内核(Kernel)利用文件描述符(File Descriptor)来访问文件,标准输出的文件描述符为 1,错误输出文件描述符为 2,标准输入的文件描述符为 0。\n简而言之,系统的资源被耗尽了。\n那如果我们将 fmt.Printf 这行代码去掉呢?那程序很可能会因为内存不足而崩溃。这一点更好理解,每个协程至少需要消耗 2KB 的空间,那么假设计算机的内存是 4GB,那么至多允许 4GB/2KB = 1M 个协程同时存在。那如果协程中还存在着其他需要分配内存的操作,那么允许并发执行的协程将会数量级地减少。\n1.2 协程的代价\n前面的例子过于极端,一般情况下程序也不会无限开辟协程,旨在说明协程数量是有限制的,不能无限开辟。\n如果我们开辟很多协程,但不会导致程序崩溃,可以吗?如果真要这么做的话,我们应该清楚地知道,协程虽然轻量,但仍有开销。\nGo 的开销主要是三个方面:创建(占用内存)、调度(增加调度器负担)和删除(增加 GC 压力)。\n\n内存开销\n\n空间上,一个 Go 程占用约 2K 的内存,在源码 src/runtime/runtime2.go里面,我们可以找到 Go 程的结构定义type g struct。\n\n调度开销\n\n时间上,协程调度也会有 CPU 开销。我们可以利用runntime.Gosched()让当前协程主动让出 CPU 去执行另外一个协程,下面看一下协程之间切换的耗时。\nconst NUM = 10000\n\nfunc cal() {\n for i := 0; i \n运行输出:\ntotal 997200ns per 99ns\n可见一次协程的切换,耗时大概在 100ns,相对于线程的微秒级耗时切换,性能表现非常优秀,但是仍有开销。\n\nGC 开销\n创建 Go 程到运行结束,占用的内存资源是需要由 GC 来回收,如果无休止地创建大量 Go 程后,势必会造成对 GC 的压力。\n```go\npackage main\n\nimport (\n \"fmt\"\n \"runtime\"\n \"runtime/debug\"\n \"sync\"\n \"time\"\n)\nfunc createLargeNumGoroutine(num int, wg *sync.WaitGroup) {\n wg.Add(num)\n for i := 0; i \nfunc main() {\n // 只设置一个 Processor 保证 Go 程串行执行\n runtime.GOMAXPROCS(1)\n // 关闭GC改为手动执行\n debug.SetGCPercent(-1)\nvar wg sync.WaitGroup\ncreateLargeNumGoroutine(1000, &wg)\nwg.Wait()\nt := time.Now()\nruntime.GC() // 手动GC\ncost := time.Since(t)\nfmt.Printf(\"GC cost %v when goroutine num is %v\\n\", cost, 1000)\n\ncreateLargeNumGoroutine(10000, &wg)\nwg.Wait()\nt = time.Now()\nruntime.GC() // 手动GC\ncost = time.Since(t)\nfmt.Printf(\"GC cost %v when goroutine num is %v\\n\", cost, 10000)\n\ncreateLargeNumGoroutine(100000, &wg)\nwg.Wait()\nt = time.Now()\nruntime.GC() // 手动GC\ncost = time.Since(t)\nfmt.Printf(\"GC cost %v when goroutine num is %v\\n\", cost, 100000)\n}\n运行输出:\n```shell\nGC cost 0s when goroutine num is 1000\nGC cost 2.0027ms when goroutine num is 10000\nGC cost 30.9523ms when goroutine num is 100000\n当创建的 Go 程数量越多,GC 耗时越大。\n上面的分析目的是为了尽可能地量化 Goroutine 的开销。虽然官方宣称用 Golang 写并发程序的时候随便起个成千上万的 Goroutine 毫无压力,但当我们起十万、百万甚至千万个 Goroutine 呢?Goroutine 轻量的开销将被放大。\n2.2 限制协程数量\n系统地资源是有限,协程是有代价的,为了保护程序,提高性能,我们应主动限制并发的协程数量。\n可以利用信道 channel 的缓冲区大小来实现。\nfunc main() {\n var wg sync.WaitGroup\n ch := make(chan struct{}, 3)\n for i := 0; i \n上例中创建了缓冲区大小为 3 的 channel,在没有被接收的情况下,至多发送 3 个消息则被阻塞。开启协程前,调用ch ,若缓存区满,则阻塞。协程任务结束,调用 \nsync.WaitGroup 并不是必须的,例如 Http 服务,每个请求天然是并发的,此时使用 channel 控制并发处理的任务数量,就不需要 sync.WaitGroup。\n运行结果如下:\n2022/03/06 20:37:02 0\n2022/03/06 20:37:02 2\n2022/03/06 20:37:02 1\n2022/03/06 20:37:03 3\n2022/03/06 20:37:03 4\n2022/03/06 20:37:03 5\n2022/03/06 20:37:04 6\n2022/03/06 20:37:04 7\n2022/03/06 20:37:04 8\n2022/03/06 20:37:05 9\n\n从日志中可以很容易看到,每秒钟只并发执行了 3 个任务,达到了协程并发控制的目的。\n3.协程池化\n上面的例子只是简单地限制了协程开辟的数量。在此基础之上,基于对象复用的思想,我们可以重复利用已开辟的协程,避免协程的重复创建销毁,达到池化的效果。\n协程池化,我们可以自己写一个协程池,但不推荐这么做。因为已经有成熟的开源库可供使用,无需再重复造轮子。目前有很多第三方库实现了协程池,可以很方便地用来控制协程的并发数量,比较受欢迎的有:\n\nJeffail/tunny\npanjf2000/ants\n\n下面以 panjf2000/ants 为例,简单介绍其使用。\nants 是一个简单易用的高性能 Goroutine 池,实现了对大规模 Goroutine 的调度管理和复用,允许使用者在开发并发程序的时候限制 Goroutine 数量,复用协程,达到更高效执行任务的效果。\npackage main\n\nimport (\n \"fmt\"\n \"time\"\n\n \"github.com/panjf2000/ants\"\n)\n\nfunc main() {\n // Use the common pool\n for i := 0; i \n使用 ants,我们简单地使用其默认的协程池,直接将任务提交并发执行。默认协程池的缺省容量 math.MaxInt32。\n如果自定义协程池容量大小,可以调用 NewPool 方法来实例化具有给定容量的池,如下所示:\n// Set 10000 the size of goroutine pool\np, _ := ants.NewPool(10000)\n\n4.小结\nGolang 为并发而生。Goroutine 是由 Go 运行时管理的轻量级线程,通过它我们可以轻松实现并发编程。Go 虽然轻量,但天下没有免费的午餐,无休止地开辟大量 Go 程势必会带来性能影响,甚至程序崩溃。所以,我们应尽可能的控制协程数量,如果有需要,请复用它。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"url":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","title":"3.使用 sync.Once 避免重复执行","keywords":"","body":"1.简介2.原理2.1 源码2.2 done 为什么是第一个字段?3.性能差异1.简介\nsync.Once 是 Go 标准库提供的使函数只执行一次的实现,常应用于单例模式,例如初始化配置、保持数据库连接等。作用与 init 函数类似,但有区别。\n\ninit 函数是当所在的 package 首次被加载时执行,若迟迟未被使用,则既浪费了内存,又延长了程序加载时间。\nsync.Once 可以在代码的任意位置初始化和调用,因此可以延迟到使用时再执行,并发场景下是线程安全的。\n\n在多数情况下,sync.Once 被用于控制变量的初始化,这个变量的读写满足如下三个条件:\n\n当且仅当第一次访问某个变量时,进行初始化(写);\n变量初始化过程中,所有读都被阻塞,直到初始化完成;\n变量仅初始化一次,初始化完成后驻留在内存里。\n\n2.原理\nsync.Once 用来保证函数只执行一次。要达到这个效果,需要做到两点:\n\n计数器,统计函数执行次数;\n线程安全,保障在多 Go 程的情况下,函数仍然只执行一次,比如锁。\n\n2.1 源码\n下面看一下 sync.Once 结构,其有两个变量。使用 done 统计函数执行次数,使用锁 m 实现线程安全。果不其然,和上面的猜想一致。\n// Once is an object that will perform exactly one action.\n//\n// A Once must not be copied after first use.\ntype Once struct {\n // done indicates whether the action has been performed.\n // It is first in the struct because it is used in the hot path.\n // The hot path is inlined at every call site.\n // Placing done first allows more compact instructions on some architectures (amd64/386),\n // and fewer instructions (to calculate offset) on other architectures.\n done uint32\n m Mutex\n}\n\nsync.Once 仅提供了一个导出方法 Do(),参数 f 是只会被执行一次的函数,一般为对象初始化函数。\n// go version go1.17 darwin/amd64\n\n// Do calls the function f if and only if Do is being called for the\n// first time for this instance of Once. In other words, given\n// var once Once\n// if once.Do(f) is called multiple times, only the first call will invoke f,\n// even if f has a different value in each invocation. A new instance of\n// Once is required for each function to execute.\n//\n// Do is intended for initialization that must be run exactly once. Since f\n// is niladic, it may be necessary to use a function literal to capture the\n// arguments to a function to be invoked by Do:\n// config.once.Do(func() { config.init(filename) })\n//\n// Because no call to Do returns until the one call to f returns, if f causes\n// Do to be called, it will deadlock.\n//\n// If f panics, Do considers it to have returned; future calls of Do return\n// without calling f.\n//\nfunc (o *Once) Do(f func()) {\n // Note: Here is an incorrect implementation of Do:\n //\n // if atomic.CompareAndSwapUint32(&o.done, 0, 1) {\n // f()\n // }\n //\n // Do guarantees that when it returns, f has finished.\n // This implementation would not implement that guarantee:\n // given two simultaneous calls, the winner of the cas would\n // call f, and the second would return immediately, without\n // waiting for the first's call to f to complete.\n // This is why the slow path falls back to a mutex, and why\n // the atomic.StoreUint32 must be delayed until after f returns.\n\n if atomic.LoadUint32(&o.done) == 0 {\n // Outlined slow-path to allow inlining of the fast-path.\n o.doSlow(f)\n }\n}\n\nfunc (o *Once) doSlow(f func()) {\n o.m.Lock()\n defer o.m.Unlock()\n if o.done == 0 {\n defer atomic.StoreUint32(&o.done, 1)\n f()\n }\n}\n\n抛去大段的注释,可以看到 sync.Once 实现非常简洁。Do() 函数中,通过对成员变量 done 的判断,来决定是否执行传入的任务函数。执行任务函数前,通过锁保证任务函数的执行和 done 的修改是一个互斥操作。在执行任务函数前,对 done 做一个二次判断,来保证任务函数只会被执行一次,done 只会被修改一次。\n2.2 done 为什么是第一个字段?\n从字段 done 前有一段注释,说明了done 为什么是第一个字段。\ndone 在热路径中,done 放在第一个字段,能够减少 CPU 指令,也就是说,这样做能够提升性能。\n热路径(hot path)是程序非常频繁执行的一系列指令,sync.Once 绝大部分场景都会访问 o.done,在热路径上是比较好理解的。如果 hot path 编译后的机器码指令更少,更直接,必然是能够提升性能的。\n为什么放在第一个字段就能够减少指令呢?因为结构体第一个字段的地址和结构体的指针是相同的,如果是第一个字段,直接对结构体的指针解引用即可。如果是其他的字段,除了结构体指针外,还需要计算与第一个值的偏移(calculate offset)。在机器码中,偏移量是随指令传递的附加值,CPU 需要做一次偏移值与指针的加法运算,才能获取要访问的值的地址。因为,访问第一个字段的机器代码更紧凑,速度更快。\n\n参考 What does “hot path” mean in the context of sync.Once? - StackOverflow\n\n3.性能差异\n我们以一个简单示例,来说明使用 sync.Once 保证函数只会被执行一次和多次执行,二者的性能差异。\n考虑一个简单的场景,函数 ReadConfig 需要读取环境变量,并转换为对应的配置。环境变量在程序执行前已经确定,执行过程中不会发生改变。ReadConfig 可能会被多个协程并发调用,为了提升性能(减少执行时间和内存占用),使用 sync.Once 是一个比较好的方式。\ntype Config struct {\n GoRoot string\n GoPath string\n}\n\nvar (\n once sync.Once\n config *Config\n)\n\nfunc ReadConfigWithOnce() *Config {\n once.Do(func() {\n config = &Config{\n GoRoot: os.Getenv(\"GOROOT\"),\n GoPath: os.Getenv(\"GOPATH\"),\n }\n })\n return config\n}\n\nfunc ReadConfig() *Config {\n return &Config{\n GoRoot: os.Getenv(\"GOROOT\"),\n GoPath: os.Getenv(\"GOPATH\"),\n }\n}\n\n我们看下二者的性能差异。\nfunc BenchmarkReadConfigWithOnce(b *testing.B) {\n for i := 0; i \n执行测试结果如下:\ngo test -bench=. main/once\ngoos: darwin\ngoarch: amd64\npkg: main/once\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkReadConfigWithOnce-12 670438965 1.732 ns/op\nBenchmarkReadConfig-12 13339154 87.46 ns/op\nPASS\nok main/once 3.006s\n\nsync.Once 中保证了 Config 初始化函数仅执行了一次,避免了多次重复初始化,在并发环境下很有用。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"url":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","title":"4.使用 sync.Cond 通知协程","keywords":"","body":"1.简介2.使用场景3.实现原理4.使用示例5.注意事项1.简介\nsync.Cond 是基于互斥锁/读写锁实现的条件变量,用来协调想要访问共享资源的那些 Goroutine。当共享资源的状态发生变化的时候,sync.Cond 可以用来通知等待条件发生而阻塞的 Goroutine。\nsync.Cond 基于互斥锁/读写锁,那它和互斥锁的区别是什么呢?\n互斥锁 sync.Mutex 通常用来保护共享的临界资源,条件变量 sync.Cond 用来协调想要访问共享资源的 Goroutine。当共享资源的状态发生变化时,sync.Cond 可以用来通知被阻塞的 Goroutine。\n2.使用场景\nsync.Cond 经常用在多个 Goroutine 等待,一个 Goroutine 通知(事件发生)的场景。如果是一个通知,一个等待,使用互斥锁或 channel 就能搞定了。\n我们想象一个非常简单的场景:\n有一个协程在异步地接收数据,剩下的多个协程必须等待这个协程接收完数据,才能读取到正确的数据。在这种情况下,如果单纯使用 chan 或互斥锁,那么只能有一个协程可以等待,并读取到数据,没办法通知其他的协程也读取数据。\n这个时候,就需要有个全局的变量来标志第一个协程数据是否接受完毕,剩下的协程,反复检查该变量的值,直到满足要求。或者创建多个 channel,每个协程阻塞在一个 channel 上,由接收数据的协程在数据接收完毕后,逐个通知。总之,需要额外的复杂度来完成这件事。\nGo 语言在标准库 sync 中内置一个 sync.Cond 用来解决这类问题。\n3.实现原理\nsync.Cond 内部维护了一个等待队列,队列中存放的是所有在等待这个 sync.Cond 的 Go 程,即保存了一个通知列表。sync.Cond 可以用来唤醒一个或所有因等待条件变量而阻塞的 Go 程,以此来实现多个 Go 程间的同步。\nsync.Cond 的定义如下:\n// Cond implements a condition variable, a rendezvous point\n// for goroutines waiting for or announcing the occurrence\n// of an event.\n//\n// Each Cond has an associated Locker L (often a *Mutex or *RWMutex),\n// which must be held when changing the condition and\n// when calling the Wait method.\n//\n// A Cond must not be copied after first use.\ntype Cond struct {\n noCopy noCopy\n\n // L is held while observing or changing the condition\n L Locker\n\n notify notifyList\n checker copyChecker\n}\n\n每个 Cond 实例都会关联一个锁 L(互斥锁 Mutex,或读写锁 RWMutex),当修改条件或者调用 Wait 方法时,必须加锁。\nsync.Cond 的四个成员函数定义如下:\n// NewCond returns a new Cond with Locker l.\nfunc NewCond(l Locker) *Cond {\n return &Cond{L: l}\n}\n\nNewCond 创建 Cond 实例时,需要关联一个锁。\n// Wait atomically unlocks c.L and suspends execution\n// of the calling goroutine. After later resuming execution,\n// Wait locks c.L before returning. Unlike in other systems,\n// Wait cannot return unless awoken by Broadcast or Signal.\n//\n// Because c.L is not locked when Wait first resumes, the caller\n// typically cannot assume that the condition is true when\n// Wait returns. Instead, the caller should Wait in a loop:\n//\n// c.L.Lock()\n// for !condition() {\n// c.Wait()\n// }\n// ... make use of condition ...\n// c.L.Unlock()\n//\nfunc (c *Cond) Wait() {\n c.checker.check()\n t := runtime_notifyListAdd(&c.notify)\n c.L.Unlock()\n runtime_notifyListWait(&c.notify, t)\n c.L.Lock()\n}\n\nWait 用于阻塞调用者,等待通知。\n调用 Wait 会自动释放锁 c.L,因为 Wait() 会将主调加入条件变量的通知列表,需要修改条件变量,所以主调在调用 Wait() 前需要对条件变量进行上锁,主调加入条件变量的通知列表后再解锁。\n执行runtime_notifyListWait会挂起调用者所在的 Goroutine。如果其他协程调用了 Signal 或 Broadcast 唤醒了该协程,那么 Wait 方法在结束阻塞时,会重新给 c.L 加锁,并且继续执行 Wait 后面的代码。\n主调对条件的检查,使用了 for !condition() 而非 if,是因为当前协程被唤醒时,条件不一定符合要求,需要再次 Wait 等待下次被唤醒。为了保险起,使用 for 能够确保被唤醒后条件一定符合后,再执行后续的代码。\n// Signal wakes one goroutine waiting on c, if there is any.\n//\n// It is allowed but not required for the caller to hold c.L\n// during the call.\nfunc (c *Cond) Signal() {\n c.checker.check()\n runtime_notifyListNotifyOne(&c.notify)\n}\n\n// Broadcast wakes all goroutines waiting on c.\n//\n// It is allowed but not required for the caller to hold c.L\n// during the call.\nfunc (c *Cond) Broadcast() {\n c.checker.check()\n runtime_notifyListNotifyAll(&c.notify)\n}\n\nSignal 只唤醒任意 1 个等待条件变量 c 的 goroutine,无需锁保护。Broadcast 唤醒所有等待条件变量 c 的 goroutine,无需锁保护。\n4.使用示例\n我们实现一个简单的例子,三个协程调用 Wait() 等待,另一个协程调用 Broadcast() 唤醒所有等待的协程。\nvar done = false\n\nfunc read(name string, c *sync.Cond) {\n c.L.Lock()\n for !done {\n c.Wait()\n }\n fmt.Println(name, \"starts reading\")\n c.L.Unlock()\n}\n\nfunc write(name string, c *sync.Cond) {\n fmt.Println(name, \"starts writing\")\n time.Sleep(time.Second)\n done = true\n fmt.Println(name, \"wakes all\")\n c.Broadcast()\n}\n\nfunc main() {\n cond := sync.NewCond(&sync.Mutex{})\n\n go read(\"reader1\", cond)\n go read(\"reader2\", cond)\n go read(\"reader3\", cond)\n write(\"writer\", cond)\n\n time.Sleep(time.Second * 3)\n}\n\n\ndone 即多个 Goroutine 阻塞等待的条件。\nread() 调用 Wait() 等待通知,直到 done 为 true。\nwrite() 接收数据,接收完成后,将 done 置为 true,调用 Broadcast() 通知所有等待的协程。\nwrite() 中的暂停了 1s,一方面是模拟耗时,另一方面是确保前面的 3 个 read 协程都执行到 Wait(),处于等待状态。main 函数最后暂停了 3s,确保所有操作执行完毕。\n\n运行结果如下,注意 reader 的打印顺序是随机的。\n$ go run main.go\nwriter starts writing\nwriter wakes all\nreader3 starts reading\nreader1 starts reading\nreader2 starts reading\n\n更多关于 sync.Cond 的讨论可参考 How to correctly use sync.Cond? - StackOverflow。\n5.注意事项\n\nsync.Cond 不能被复制\n\nsync.Cond 不能被复制的原因,并不是因为其内部嵌套了 Locker。因为 NewCond 时传入的 Mutex/RWMutex 指针,对于 Mutex 指针复制是没有问题的。\n主要原因是 sync.Cond 内部是维护着一个 Goroutine 通知队列 notifyList。如果这个队列被复制的话,那么就在并发场景下导致不同 Goroutine 之间操作的 notifyList.wait、notifyList.notify 并不是同一个,这会导致出现有些 Goroutine 会一直阻塞。\n\n唤醒顺序\n\n从等待队列中按照顺序唤醒,先进入等待队列,先被唤醒。\n\n调用 Wait() 前要加锁\n\n调用 Wait() 函数前,需要先获得条件变量的成员锁,原因是需要互斥地变更条件变量的等待队列。在 Wait() 返回前,会重新上锁。重新上锁的原因是主调在 Wait 后会进行解锁操作,避免重复解锁引发 panic。\n\nsync.Cond 和 channel 的区别?\n\n实际上,我们可以使用无缓冲 channel 充当条件变量实现 Go 程同步。通过 close(ch) 表示广播通知,其他的 Goroutine 使用 for select 结构来接收通知就行了。\n还是以上面给出的同步示例,这里换作 channel 来实现。\nvar done = false\nvar ch = make(chan struct{})\n\nfunc read(name string) {\n for !done {\n select {\n case \n运行输出如下,注意 reader 的打印顺序是随机的。\n$ go run main.go\nwriter starts writing\nwriter wakes all\nreader1 starts reading\nreader3 starts reading\nreader2 starts reading\n\n既然 channel 可以实现,看起来代码更加简洁,那么 sync.Cond 的存在还有必要吗?\n实际上 sync.Cond 与 Channel 是有区别的,channel 定位于通信,用于一发一收的场景,sync.Cond 定位于同步,用于一发多收的场景。虽然 channel 可以通过 close 操作来达到一发多收的效果,但是 closed 的 channel 已无法继续使用,而 sync.Cond 依旧可以继续使用。这可能就是“全能”与“专精”的区别。 \npowered by Gitbook该文章修订时间:\n2022-05-08 22:45:54\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"参考文献.html":{"url":"参考文献.html","title":"参考文献","keywords":"","body":"项目布局代码风格功能设计最佳性能项目布局\ngithub.com/golang-standards/project-layout\n代码风格\nGo Code Review Comments\nGolang Readability 考点汇总\n功能设计\ngithub.com/uber-go/guide\nGo语言最佳实践Go-advice\n最佳性能\ngo-proverbs\ngithub/dgryski/go-perfbook\nHigh Performance Go Workshop - Dave Cheney\natomic 的原理与使用场景\n极客兔兔 | Go 语言高性能编程\n深度解密Go 语言之sync.Pool - Stefno - 博客园\nGolang内存分配逃逸分析 - Gopherzhang\nGo语言的内存逃逸分析 - Golang梦工厂 \npowered by Gitbook该文章修订时间:\n2022-05-09 22:37:19\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"}}} \ No newline at end of file diff --git a/docs/docs/styles/website.css b/docs/docs/styles/website.css new file mode 100644 index 0000000..1e502a0 --- /dev/null +++ b/docs/docs/styles/website.css @@ -0,0 +1,8 @@ +.custom-link{ + text-align: center; + font-weight: bold; +} + +.active, span{ + font-weight: bold; +} \ No newline at end of file diff --git "a/docs/docs/\345\217\202\350\200\203\346\226\207\347\214\256.html" "b/docs/docs/\345\217\202\350\200\203\346\226\207\347\214\256.html" new file mode 100644 index 0000000..5c953a0 --- /dev/null +++ "b/docs/docs/\345\217\202\350\200\203\346\226\207\347\214\256.html" @@ -0,0 +1,1125 @@ + + + + + + + 参考文献 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + +
    + +
    + + + + + + + + +
    +
    + +
    + +
    +
    + +

    results matching ""

    +
      + +
      +
      + +

      No results matching ""

      + +
      +
      +
      + +
      +
      + +
      + + + + + + + + + + +
      + + +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\270\200\347\257\207\357\274\232\351\241\271\347\233\256\345\270\203\345\261\200/\351\241\271\347\233\256\345\270\203\345\261\200.html" "b/docs/docs/\347\254\254\344\270\200\347\257\207\357\274\232\351\241\271\347\233\256\345\270\203\345\261\200/\351\241\271\347\233\256\345\270\203\345\261\200.html" new file mode 100644 index 0000000..76e66e9 --- /dev/null +++ "b/docs/docs/\347\254\254\344\270\200\347\257\207\357\274\232\351\241\271\347\233\256\345\270\203\345\261\200/\351\241\271\347\233\256\345\270\203\345\261\200.html" @@ -0,0 +1,1224 @@ + + + + + + + 项目布局 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + +
      + +
      + +
      + + + + + + + + +
      +
      + +
      +
      + +
      + +

      1.前言

      +

      不管是什么语言,开发什么项目,一个稍大的项目,必然要面临如何管理项目结构布局的问题,因为一个简洁清晰的布局是项目可读的关键。

      +

      有些语言自身提供了目录结构规范,但对于较为年轻的 Golang,目前官方团队并未提供权威规范。不过不用担心,我们依然有一个规范可以参考,那就是业界推崇的 Standard Go Project Layout

      +

      2.项目布局

      +

      2.1 整体风格

      +

      你的项目结构布局看起来应该像下面这个样子。

      +
      # Go 代码目录
      +|--cmd 可执行文件目录
      +|--internal 私有库代码(仅本项目使用)
      +|--pkg 公有库代码(外部项目可以使用)
      +|--vendor 外部依赖库
      +
      +# 服务应用程序目录
      +|--api 服务对外接口
      +
      +# Web 应用程序目录
      +|--web Web 应用程序的组件
      +
      +# 通用应用目录
      +|--configs 配置信息
      +|--init 初始化信息
      +|--scripts 执行各种构建、安装、分析等操作的脚本
      +|--build 打包和持续集成
      +   |-- package 构建依赖包
      +   |-- ci 持续集成配置与脚本
      +|--deployments 部署相关
      +|--test 测试相关
      +|--README.md 项目说明
      +
      +# 其他目录
      +|--docs 项目文档
      +|--tools 项目工具
      +|--examples 应用程序和公共库的示例
      +|--third_party 外部辅助工具
      +|--githooks Git 钩子
      +|--assets 项目资源文件
      +|--website 项目网站数据
      +
      +# 不应该拥有的目录
      +|--src 源码目录
      +
      +

      2.2 Go 代码目录

      +

      /cmd

      +

      可执行文件目录。

      +

      通常只包含一个简单的 main 函数,调用 /internal 和 /pkg 中的代码,作为项目的主应用目录。目录也可以包含多个可执行文件,子目录名称一般与可执行文件相对应(如:/cmd/myapp )。

      +

      不要在该目录下放太多的代码,如果代码可以被其他项目导入使用,请放到 /pkg 目录下, 如果代码不可复用或者你不希望其他项目使用,请放到 /internal 目录下。

      +

      /internal

      +

      私有库代码(仅本项目使用)。

      +

      这里放不希望被其他应用程序或者库导入的代码。注意:从 Go1.4 起,从编译器层面限制该目录不可被导出,而且不只是项目根目录下的 internal,所有名为 internal 的子目录都不能被导出。

      +

      你还可以在 internal 目录内部增加一些代码结构来区分共享和非共享的。虽然它并不是必须的(尤其是小的项目),但是最好能从视觉上区分包的用途。 你实际的代码可以放在 /internal/app/myapp 中,而应用的共享代码可以放在 /internal/pkg/ 目录下。

      +

      /pkg

      +

      公有库代码(外部项目可以使用)。

      +

      这里放希望被其他应用程序或者库导入的代码,所以在这里放东西之前要三思。

      +

      含有 /pkg 目录的项目结构是一种常见的布局模式,但并不是所有人都接受它,一些 Go 社区的人并不推荐它。

      +

      /vendor

      +

      外部依赖库。

      +

      如果手动管理依赖包可以将依赖包放到该目录,当然推荐使用依赖包管理工具 Go Modules 进行自动化管理。

      +

      注意,1.11 开始,官方推荐使用新的依赖管理系统 Go Modules。从 1.13 以后,Go 还启用了模块代理功能(默认使用 https://proxy.golang.org 作为他们的模块代理服务器)。使用 Go Modules,我们并不需要 vendor 目录。

      +

      2.3 服务应用程序目录

      +

      /api

      +

      服务对外接口。

      +

      这里是服务对外接口的实现,定义接口时,我们应该遵循 OpenAPI Specification

      +

      2.4 Web 应用程序目录

      +

      /web

      +

      存放 Web 应用程序特定组件,如静态 Web 资源、服务器端模板和 SPA(Single Page Application)。

      +

      2.5 通用应用目录

      +

      /configs

      +

      配置信息。

      +

      如不同环境(测试、正式)的服务配置信息。

      +

      /init

      +

      初始化信息。

      +

      系统初始化(systemd, upstart, sysv)和进程管理(runit, supervisord)配置。

      +

      /scripts

      +

      执行各种构建、安装、分析等操作的脚本。

      +

      这些脚本帮助根目录下 Makefile(如果有的话)变得小而简单,例如 github/hashicorp/terraform/Makefile

      +

      /build

      +

      打包和持续集成。

      +

      将你的云( AMI )、容器( Docker )、操作系统( deb、rpm、pkg )包配置和脚本放在 /build/package 目录下。

      +

      将你的 CI (travis、circle、drone)配置和脚本放在 /build/ci 目录下。

      +

      /deployments

      +

      部署相关。

      +

      如 IaaS、PaaS、系统和容器编排部署配置和模板(docker-compose、kubernetes/helm、mesos、terraform、bosh)。注意,在一些存储库中(特别是使用 kubernetes 部署的应用程序),这个目录被称为 /deploy。

      +

      /test

      +

      测试相关。

      +

      如放置测试工具和测试依赖数据。对于较大的项目,有一个数据子目录是有意义的。例如,你可以使用 /test/data 或 /test/testdata。请注意,如果你需要忽略目录中的内容,Go 还会忽略以“.”或“_”开头的目录或文件,因此在如何命名测试数据目录方面有更大的灵活性。

      +

      /README.md

      +

      项目说明。

      +

      Markdown 格式的说明文档,是用户了解一个项目最直观的入口。如果有需要,添加不同语言的 README 将更加人性化,如 简体中文 README_zh-CN.md。

      +

      2.6 其他目录

      +

      /docs

      +

      项目文档。

      +

      关于项目的设计文档,用户的使用文档等(除了 godoc 生成的文档之外)均可以放在该目录。

      +

      /tools

      +

      项目工具。

      +

      项目配套工具,实现这些工具可以使用从 /pkg 和 /internal 导入代码。

      +

      /examples

      +

      应用程序和公共库的示例。

      +

      丰富的示例将帮助用户更加便捷快速的了解上手一个项目,再加上 README,相得益彰。

      +

      /third_party

      +

      外部辅助工具。

      +

      项目依赖的第三方工具,比如 Swagger UI。

      +

      /githooks

      +

      Git 钩子。

      +

      使用 Git 钩子,可以帮忙我们在代码提交时完成一些检测,比如分支名称和 commit 信息是否符合规范。

      +

      /assets

      +

      项目资源文件。

      +

      项目用到的相关资源文件,比如项目 Logo,README 中引用的图片等。

      +

      /website

      +

      项目网站数据。

      +

      如果你不使用 Github 页面,则在这里放置项目网站数据。

      +

      2.7 不应该拥有的目录

      +

      /src

      +

      源码目录。

      +

      有些 Go 项目确实有一个 src 目,但这通常发生在开发人员有 Java 背景。不同类型的代码应该有自己的目录,而不是全部放到 src 下面,就像不应该拥有 comm 和 util 这样的目录,因为这些名称含义太泛了,违背了单一职责原则。

      +

      3.小结

      +

      这是 Go 应用程序项目的基本布局,是社区 Gopher 们努力的结果。此项目布局是通用的,建议并非强制,当然我们最好遵守,因为这能让我的项目布局看起来更加规范,易于交流和维护。

      +

      如果发现此项目布局规范并不适用自己的项目,可在其基础上适当做出改变,不要泥古拘方。

      +
      +

      参考文献

      +

      Standard Go Project Layout

      +

      Wikipedia List of ISO 639-1 codes

      +

      Official ISO 639 list

      +
      powered by Gitbook该文章修订时间: +2022-05-01 19:54:14 +
      + + +
      + +
      +
      +
      + +

      results matching ""

      +
        + +
        +
        + +

        No results matching ""

        + +
        +
        +
        + +
        +
        + +
        + + + + + + +
        + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/1.\344\270\215\351\234\200\350\246\201\346\214\207\345\220\221interface\347\232\204\346\214\207\351\222\210.html" "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/1.\344\270\215\351\234\200\350\246\201\346\214\207\345\220\221interface\347\232\204\346\214\207\351\222\210.html" new file mode 100644 index 0000000..4266e14 --- /dev/null +++ "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/1.\344\270\215\351\234\200\350\246\201\346\214\207\345\220\221interface\347\232\204\346\214\207\351\222\210.html" @@ -0,0 +1,1147 @@ + + + + + + + 1.不需要指向 interface 的指针 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        +
        + + + + + + + + +
        + +
        + +
        + + + + + + + + +
        +
        + +
        +
        + +
        + +

        我们几乎不需要使用指向接口的指针,应该将接口直接赋值给接口,这样在传递过程中,实质上传递的底层数据仍然是指针,即不存在值拷贝的情况。

        +
        type Foo struct {
        +    T string
        +}
        +
        +func bar(i interface{}) {
        +    ...
        +}
        +
        +var foo interface{} = Foo{...}
        +
        +// Bad
        +bar(&foo)
        +
        +// Good
        +bar(foo)
        +
        +

        为什么可以这样,因为接口实质上在底层用两个字段表示: +(1)一个指向某些特定类型信息的指针; +(2)一个指向具体数据的指针。如果存储的数据是指针,则直接存储。如果存储的数据是一个值,则存储指向该值的指针。

        +

        具体可以看下 Go 源码 runtime 包两种接口类型的定义。

        +

        一种是带有一组方法的接口runtime.iface

        +
        type iface struct {
        +    tab  *itab
        +    data unsafe.Pointer
        +}
        +
        +

        一种是不含任何方法的空接口runtime.eface

        +
        type eface struct {
        +    _type *_type
        +    data  unsafe.Pointer
        +}
        +
        +

        我们可以看下接口变量的内存宽度。

        +
        var foo interface{} = Foo{...}
        +fmt.Println(unsafe.Sizeof(foo))    // 16
        +
        +

        当然,凡事无绝对。如果需要修改接口变量本身,那么应该使用指向接口变量的指针,当然你必须清楚自己在干什么。

        +

        类似地,在了解 map、slice、channel 的底层结构后,我们应该知道在传递过程中一般也不需要使用指向它们的指针。

        +
        powered by Gitbook该文章修订时间: +2022-05-08 19:22:09 +
        + + +
        + +
        +
        +
        + +

        results matching ""

        +
          + +
          +
          + +

          No results matching ""

          + +
          +
          +
          + +
          +
          + +
          + + + + + + + + + + +
          + + +
          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/2.\347\274\226\350\257\221\346\234\237\351\252\214\350\257\201interface\345\220\210\347\220\206\346\200\247.html" "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/2.\347\274\226\350\257\221\346\234\237\351\252\214\350\257\201interface\345\220\210\347\220\206\346\200\247.html" new file mode 100644 index 0000000..756f25d --- /dev/null +++ "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/2.\347\274\226\350\257\221\346\234\237\351\252\214\350\257\201interface\345\220\210\347\220\206\346\200\247.html" @@ -0,0 +1,1152 @@ + + + + + + + 2.编译期验证 interface 合理性 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
          + + + + + + + + +
          + +
          + +
          + + + + + + + + +
          +
          + +
          +
          + +
          + +

          在编译时验证接口的合理性,这包括:

          +

          (1)导出类型的部分 API 实现了接口;

          +

          (2)导出或非导出类型实现了接口且属于某类型的一部分(匿名嵌套);

          +

          (3)任何其他情况都违反接口合理性检查,终止编译并通知用户。

          +

          上面这三条是编译器对接口的检查机制, 错误地使用接口会在编译期报错。所以可以利用这个机制让部分问题在编译期暴露。

          +
          // Bad
          +type Handler struct {
          +  // ...
          +}
          +
          +func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
          +  // ...
          +}
          +
          +// Good
          +type Handler struct {
          +  // ...
          +}
          +
          +var _ http.Handler = (*Handler)(nil)
          +
          +func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
          +  // ...
          +}
          +
          +

          如果*Handlerhttp.Handler的接口不匹配,那么语句var _ http.Handler = (*Handler)(nil)将无法编译通过。

          +

          赋值的右边应该是断言类型的零值。 对于指针类型(如 *Handler)、切片和映射是 nil;对于结构类型是空结构。

          +
          type LogHandler struct {
          +  h   http.Handler
          +  log *zap.Logger
          +}
          +
          +var _ http.Handler = LogHandler{}
          +
          +func (h LogHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
          +  // ...
          +}
          +
          +
          powered by Gitbook该文章修订时间: +2022-05-08 19:22:09 +
          + + +
          + +
          +
          +
          + +

          results matching ""

          +
            + +
            +
            + +

            No results matching ""

            + +
            +
            +
            + +
            +
            + +
            + + + + + + + + + + + + + + +
            + + +
            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/3.\345\234\250\350\276\271\347\225\214\345\244\204\346\213\267\350\264\235slice\345\222\214map.html" "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/3.\345\234\250\350\276\271\347\225\214\345\244\204\346\213\267\350\264\235slice\345\222\214map.html" new file mode 100644 index 0000000..015bd0f --- /dev/null +++ "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/3.\345\234\250\350\276\271\347\225\214\345\244\204\346\213\267\350\264\235slice\345\222\214map.html" @@ -0,0 +1,1221 @@ + + + + + + + 3.在边界处拷贝 slice 和 map · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
            +
            + + + + + + + + +
            + +
            + +
            + + + + + + + + +
            +
            + +
            +
            + +
            + +

            slice 和 map 包含了指向底层数据的指针,因此在需要复制它们时要特别注意。

            +

            在 Go 源码文件 src/runtime/slice.go 我们可以找到切片的底层数据结构 runtime.slice

            +
            type slice struct {
            +    array unsafe.Pointer
            +    len   int
            +    cap   int
            +}
            +
            +

            在 Go 源码文件 src/runtime/map.go 我们可以找到 map 底层核心数据结构 runtime.hmap

            +
            // A header for a Go map.
            +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
            +}
            +
            +// mapextra holds fields that are not present on all maps.
            +type mapextra struct {
            +    // If both key and elem do not contain pointers and are inline, then we mark bucket
            +    // type as containing no pointers. This avoids scanning such maps.
            +    // However, bmap.overflow is a pointer. In order to keep overflow buckets
            +    // alive, we store pointers to all overflow buckets in hmap.extra.overflow and hmap.extra.oldoverflow.
            +    // overflow and oldoverflow are only used if key and elem do not contain pointers.
            +    // overflow contains overflow buckets for hmap.buckets.
            +    // oldoverflow contains overflow buckets for hmap.oldbuckets.
            +    // The indirection allows to store a pointer to the slice in hiter.
            +    overflow    *[]*bmap
            +    oldoverflow *[]*bmap
            +
            +    // nextOverflow holds a pointer to a free overflow bucket.
            +    nextOverflow *bmap
            +}
            +
            +

            在接收 slice 和 map 时,请记住当 map 或 slice 作为函数参数传入时,如果您存储了对它们的引用,则用户可以对其进行修改。

            +
            // Bas
            +func (d *Driver) SetTrips(trips []Trip) {
            +    d.trips = trips
            +}
            +
            +trips := ...
            +d.SetTrips(trips)
            +
            +// 你是要修改 d.trips 吗?
            +trips[0] = ...
            +
            +// Good
            +func (d *Driver) SetTrips(trips []Trip) {
            +  d.trips = make([]Trip, len(trips))
            +  copy(d.trips, trips)
            +}
            +
            +trips := ...
            +d.SetTrips(trips)
            +
            +// 这里我们修改 trips[0],但不会影响 d.trips
            +trips[0] = ...
            +
            +

            在返回 slice 和 map 时,同样的,请注意用户对暴露内部状态的 map 或 slice 的修改。

            +
            // Bad
            +type Stats struct {
            +  mu sync.Mutex
            +
            +  counters map[string]int
            +}
            +
            +// Snapshot 返回当前状态。
            +func (s *Stats) Snapshot() map[string]int {
            +  s.mu.Lock()
            +  defer s.mu.Unlock()
            +
            +  return s.counters
            +}
            +
            +// snapshot 不再受互斥锁保护,可能会引发并发读写的错误
            +snapshot := stats.Snapshot()
            +
            +// Good
            +type Stats struct {
            +  mu sync.Mutex
            +
            +  counters map[string]int
            +}
            +
            +func (s *Stats) Snapshot() map[string]int {
            +  s.mu.Lock()
            +  defer s.mu.Unlock()
            +
            +  result := make(map[string]int, len(s.counters))
            +  for k, v := range s.counters {
            +    result[k] = v
            +  }
            +  return result
            +}
            +
            +// snapshot 现在是一个拷贝
            +snapshot := stats.Snapshot()
            +
            +
            powered by Gitbook该文章修订时间: +2022-05-08 19:22:09 +
            + + +
            + +
            +
            +
            + +

            results matching ""

            +
              + +
              +
              + +

              No results matching ""

              + +
              +
              +
              + +
              +
              + +
              + + + + + + + + + + + + + + +
              + + +
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/4.\346\236\232\344\270\276\344\273\2161\345\274\200\345\247\213.html" "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/4.\346\236\232\344\270\276\344\273\2161\345\274\200\345\247\213.html" new file mode 100644 index 0000000..33e2ec5 --- /dev/null +++ "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/4.\346\236\232\344\270\276\344\273\2161\345\274\200\345\247\213.html" @@ -0,0 +1,1155 @@ + + + + + + + 4.枚举从 1 开始 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              +
              + + + + + + + + +
              + +
              + +
              + + + + + + + + +
              +
              + +
              +
              + +
              + +

              Go 并没有关键字 enum 来定义枚举类型,引入枚举的标准方法是声明一个自定义类型和一个使用了自增器 iota 的 const 组来表示枚举值。

              +

              预先声明的标识符 iota 表示连续的非类型化整数常量,它的值是对应常量的下标(从零开始),它可用于构造一组相关常数:

              +
              type ByteSize float64
              +
              +const (
              +    _           = iota // ignore first value by assigning to blank identifier
              +    KB ByteSize = 1 << (10 * iota)
              +    MB
              +    GB
              +    TB
              +    PB
              +    EB
              +    ZB
              +    YB
              +)
              +
              +

              由于第一个值从 0 开始,如果需要使第一个值为有意义的值,我们应该从 1 开始。

              +
              // Bad
              +type Operation int
              +
              +const (
              +  Add Operation = iota
              +  Subtract
              +  Multiply
              +)
              +// Add=0, Subtract=1, Multiply=2
              +
              +// Good
              +type Operation int
              +
              +const (
              +  Add Operation = iota + 1
              +  Subtract
              +  Multiply
              +)
              +// Add=1, Subtract=2, Multiply=3
              +
              +

              当然,凡事无绝对。如果第一个枚举值为零是有意义的,如当零值是理想的默认行为时。

              +
              type LogOutput int
              +
              +const (
              +  LogToStdout LogOutput = iota
              +  LogToFile
              +  LogToRemote
              +)
              +// LogToStdout=0, LogToFile=1, LogToRemote=2
              +
              +
              powered by Gitbook该文章修订时间: +2022-05-08 19:22:09 +
              + + +
              + +
              +
              +
              + +

              results matching ""

              +
                + +
                +
                + +

                No results matching ""

                + +
                +
                +
                + +
                +
                + +
                + + + + + + + + + + +
                + + +
                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/1.\346\226\271\346\263\225\346\216\245\346\224\266\345\231\250\344\270\272\345\200\274\345\222\214\346\214\207\351\222\210\347\232\204\345\214\272\345\210\253.html" "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/1.\346\226\271\346\263\225\346\216\245\346\224\266\345\231\250\344\270\272\345\200\274\345\222\214\346\214\207\351\222\210\347\232\204\345\214\272\345\210\253.html" new file mode 100644 index 0000000..3a1a170 --- /dev/null +++ "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/1.\346\226\271\346\263\225\346\216\245\346\224\266\345\231\250\344\270\272\345\200\274\345\222\214\346\214\207\351\222\210\347\232\204\345\214\272\345\210\253.html" @@ -0,0 +1,1164 @@ + + + + + + + 1.方法接收器为值和指针的区别 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                +
                + + + + + + + + +
                + +
                + +
                + + + + + + + + +
                +
                + +
                +
                + +
                + +

                接收器为值和指针的方法在调用方式上是有区别的。

                +

                使用值接收器的方法既可以通过值调用,也可以通过指针调用。带指针接收器的方法只能通过指针或 addressable values 调用。

                +
                type S struct {
                +  data string
                +}
                +
                +func (s S) Read() string {
                +  return s.data
                +}
                +
                +func (s *S) Write(str string) {
                +  s.data = str
                +}
                +
                +sVals := map[int]S{1: {"A"}}
                +
                +// 你只能通过值调用 Read。
                +sVals[1].Read()
                +
                +// 编译不通过,因为无法对 sVals[1] 取址。
                +//  sVals[1].Write("test")
                +
                +sPtrs := map[int]*S{1: {"A"}}
                +
                +// 指针既可以调用 Read,也可以调用 Write。
                +sPtrs[1].Read()
                +sPtrs[1].Write("test")
                +
                +

                类似的,使用值接收器和指针接收器来实现接口,在判断与接口是否匹配时,也存在一定的区别。

                +
                type F interface {
                +  f()
                +}
                +
                +type S1 struct{}
                +
                +func (s S1) f() {}
                +
                +type S2 struct{}
                +
                +func (s *S2) f() {}
                +
                +s1Val := S1{}
                +s1Ptr := &S1{}
                +s2Val := S2{}
                +s2Ptr := &S2{}
                +
                +var i F
                +i = s1Val
                +i = s1Ptr
                +i = s2Ptr
                +
                +// 下面代码无法通过编译,因为 s2Val 是一个值,而 S2 的 f 方法中没有使用值接收器。
                +// i = s2Val
                +
                +

                从前文可知,可取址的值可以调用接收器为指针的方法,但这里为何不能将值 s2Val 赋给接口 i 呢?

                +

                在 Effective Go 中一节 Pointers vs. Values 做了说明,因为接收器为指针的方法会修改接受器,为了避免产生这种错误的行为,便禁止将值赋给和指针接收器方法集匹配的接口。

                +
                powered by Gitbook该文章修订时间: +2022-05-08 19:22:09 +
                + + +
                + +
                +
                +
                + +

                results matching ""

                +
                  + +
                  +
                  + +

                  No results matching ""

                  + +
                  +
                  +
                  + +
                  +
                  + +
                  + + + + + + + + + + +
                  + + +
                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/2.\344\275\277\347\224\250defer\351\207\212\346\224\276\350\265\204\346\272\220.html" "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/2.\344\275\277\347\224\250defer\351\207\212\346\224\276\350\265\204\346\272\220.html" new file mode 100644 index 0000000..de63f52 --- /dev/null +++ "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/2.\344\275\277\347\224\250defer\351\207\212\346\224\276\350\265\204\346\272\220.html" @@ -0,0 +1,1142 @@ + + + + + + + 2.使用 defer 释放资源 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                  +
                  + + + + + + + + +
                  + +
                  + +
                  + + + + + + + + +
                  +
                  + +
                  +
                  + +
                  + +

                  使用 defer 释放资源,诸如文件和锁。

                  +
                  // Bad
                  +// 当有多个 return 分支时,很容易遗忘 unlock
                  +p.Lock()
                  +if p.count < 10 {
                  +  p.Unlock()
                  +  return p.count
                  +}
                  +
                  +p.count++
                  +newCount := p.count
                  +p.Unlock()
                  +
                  +return newCount
                  +
                  +// Good
                  +// 更可读且安全
                  +p.Lock()
                  +defer p.Unlock()
                  +
                  +if p.count < 10 {
                  +  return p.count
                  +}
                  +
                  +p.count++
                  +return p.count
                  +
                  +

                  defer 的开销非常小,只有在您可以证明函数执行时间处于纳秒级的程度时,才应避免这样做。使用 defer 提升可读性是值得的,因为使用它们的成本微不足道。尤其适用于那些不仅仅是简单内存访问的较大方法,在这些方法中其他计算的资源消耗远超过 defer。

                  +
                  powered by Gitbook该文章修订时间: +2022-05-08 19:22:09 +
                  + + +
                  + +
                  +
                  +
                  + +

                  results matching ""

                  +
                    + +
                    +
                    + +

                    No results matching ""

                    + +
                    +
                    +
                    + +
                    +
                    + +
                    + + + + + + + + + + + + + + +
                    + + +
                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/3.\344\270\215\350\246\201\345\234\250for\345\276\252\347\216\257\344\270\255\344\275\277\347\224\250defer.html" "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/3.\344\270\215\350\246\201\345\234\250for\345\276\252\347\216\257\344\270\255\344\275\277\347\224\250defer.html" new file mode 100644 index 0000000..5c6f777 --- /dev/null +++ "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/3.\344\270\215\350\246\201\345\234\250for\345\276\252\347\216\257\344\270\255\344\275\277\347\224\250defer.html" @@ -0,0 +1,1157 @@ + + + + + + + 3.不要在 for 循环中使用 defer · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                    +
                    + + + + + + + + +
                    + +
                    + +
                    + + + + + + + + +
                    +
                    + +
                    +
                    + +
                    + +

                    尽可能地避免在 for 循环中使用 defer,因为这可能会导致资源泄漏(Possible resource leak, 'defer' is called in the 'for' loop)。

                    +

                    defer 不是基于代码块的,而是基于函数的。你在循环中分配资源,那么不应该简单地使用 defer,因为释放资源不会尽可能早地发生(在每次迭代结束时),只有在 for 语句之后(所有迭代之后),即所在函数结束时,defer 函数才会被执行。这带来的后果就是,如果迭代次数过多,那么可能导致资源长时间得不到释放,造成泄漏。

                    +
                    // Bad
                    +for rows.Next() {
                    +   fields, err := db.Query(.....)
                    +   if err != nil {
                    +      // ...
                    +   }
                    +   defer fields.Close()
                    +
                    +   // do something with `fields`
                    +
                    +}
                    +
                    +

                    如果有一个类似上面分配资源的代码段,我们应该将其包裹在一个函数中(匿名函数或有名函数)。在该函数中,使用 defer,资源将在不需要时被立即释放。

                    +
                    // 1.将 defer 放在匿名函数中
                    +for rows.Next() {
                    +    func() {
                    +        fields, err := db.Query(...)
                    +        if err != nil {
                    +            // Handle error and return
                    +            return
                    +        }
                    +        defer fields.Close()
                    +
                    +        // do something with `fields`
                    +    }()
                    +}
                    +
                    +// 2.将 defer 放在有名函数中然后调用之
                    +func foo(r *db.Row) error {
                    +    fields, err := db.Query(...)
                    +    if err != nil {
                    +        return fmt.Errorf("db.Query error: %w", err)
                    +    }
                    +    defer fields.Close()
                    +
                    +    // do something with `fields`
                    +    return nil
                    +}
                    +
                    +// 调用有名函数
                    +for rows.Next() {
                    +    if err := foo(rs); err != nil {
                    +        // Handle error and return
                    +        return
                    +    }
                    +}
                    +
                    +
                    powered by Gitbook该文章修订时间: +2022-05-08 19:22:09 +
                    + + +
                    + +
                    +
                    +
                    + +

                    results matching ""

                    +
                      + +
                      +
                      + +

                      No results matching ""

                      + +
                      +
                      +
                      + +
                      +
                      + +
                      + + + + + + + + + + +
                      + + +
                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/3.\345\271\266\345\217\221\347\274\226\347\250\213/1.\351\233\266\345\200\274Mutex\346\230\257\346\234\211\346\225\210\347\232\204.html" "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/3.\345\271\266\345\217\221\347\274\226\347\250\213/1.\351\233\266\345\200\274Mutex\346\230\257\346\234\211\346\225\210\347\232\204.html" new file mode 100644 index 0000000..da494e9 --- /dev/null +++ "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/3.\345\271\266\345\217\221\347\274\226\347\250\213/1.\351\233\266\345\200\274Mutex\346\230\257\346\234\211\346\225\210\347\232\204.html" @@ -0,0 +1,1155 @@ + + + + + + + 1.零值 Mutex 是有效的 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                      +
                      + + + + + + + + +
                      + +
                      + +
                      + + + + + + + + +
                      +
                      + +
                      +
                      + +
                      + +

                      零值 sync.Mutex 和 sync.RWMutex 是有效的,所以指向 mutex 的指针基本是不必要的。

                      +
                      // Bad
                      +mu := new(sync.Mutex)
                      +mu.Lock()
                      +
                      +// Good
                      +var mu sync.Mutex
                      +mu.Lock()
                      +
                      +

                      Mutex 作为其他结构体一个字段时,应该使用值而不是指针。即使该结构体不被导出,也不要直接把 Mutex 嵌入到结构体中。

                      +
                      // Bad
                      +type sMap struct {
                      +  sync.Mutex
                      +  data map[string]string
                      +}
                      +
                      +func NewSMap() *sMap {
                      +  return &sMap{
                      +    data: make(map[string]string),
                      +  }
                      +}
                      +
                      +func (m *sMap) Get(k string) string {
                      +  m.Lock()
                      +  defer m.Unlock()
                      +  return m.data[k]
                      +}
                      +
                      +// Good
                      +type sMap struct {
                      +  mutex sync.Mutex
                      +  data map[string]string
                      +}
                      +
                      +func NewSMap() *sMap {
                      +  return &sMap{
                      +    data: make(map[string]string),
                      +  }
                      +}
                      +
                      +func (m *SMap) Get(k string) string {
                      +  m.mutex.Lock()
                      +  defer m.mutex.Unlock()
                      +  return m.data[k]
                      +}
                      +
                      +

                      Bad 部分会导致字段 Mutex、Lock 和 Unlock 方法是 sMap 导出的字段和 API,但又没有明确说明,既导致了模糊的文档,又泄露了 sMap 的实现细节。Good 部分可以做到字段 mutex 及其方法是 sMap 的实现细节,对其调用者不可见。

                      +
                      powered by Gitbook该文章修订时间: +2022-05-08 19:22:09 +
                      + + +
                      + +
                      +
                      +
                      + +

                      results matching ""

                      +
                        + +
                        +
                        + +

                        No results matching ""

                        + +
                        +
                        +
                        + +
                        +
                        + +
                        + + + + + + + + + + +
                        + + +
                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/3.\345\271\266\345\217\221\347\274\226\347\250\213/2.channel\345\244\247\345\260\217\350\246\201\344\271\210\346\230\2571\346\210\2260.html" "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/3.\345\271\266\345\217\221\347\274\226\347\250\213/2.channel\345\244\247\345\260\217\350\246\201\344\271\210\346\230\2571\346\210\2260.html" new file mode 100644 index 0000000..2679786 --- /dev/null +++ "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/3.\345\271\266\345\217\221\347\274\226\347\250\213/2.channel\345\244\247\345\260\217\350\246\201\344\271\210\346\230\2571\346\210\2260.html" @@ -0,0 +1,1119 @@ + + + + + + + 2.channel size 要么是 1 或 0 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                        +
                        + + + + + + + + +
                        + +
                        + +
                        + + + + + + + + +
                        +
                        + +
                        +
                        + +
                        + +

                        channel size 应为 1 或是无缓冲的。默认情况下,channel 是无缓冲的,其 size 为零。任何其他尺寸都必须经过严格的审查,而不是拍脑袋给出一个大致的值。我们需要考虑如何确定大小,什么原因会导致 channel 在高负载下被填满并阻塞写入者,以及当这种情况发生时系统会发生哪些变化。

                        +
                        // Bad
                        +// 应该足以满足任何情况!
                        +c := make(chan int, 64)
                        +
                        +// Good
                        +// size 为 1
                        +c := make(chan int, 1) 
                        +// 或无缓冲 size 为 0
                        +c := make(chan int)
                        +
                        +
                        powered by Gitbook该文章修订时间: +2022-05-08 19:22:09 +
                        + + +
                        + +
                        +
                        +
                        + +

                        results matching ""

                        +
                          + +
                          +
                          + +

                          No results matching ""

                          + +
                          +
                          +
                          + +
                          +
                          + +
                          + + + + + + + + + + +
                          + + +
                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/4.\351\224\231\350\257\257\345\244\204\347\220\206/1.\351\224\231\350\257\257\345\244\204\347\220\206.html" "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/4.\351\224\231\350\257\257\345\244\204\347\220\206/1.\351\224\231\350\257\257\345\244\204\347\220\206.html" new file mode 100644 index 0000000..c09a8d5 --- /dev/null +++ "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/4.\351\224\231\350\257\257\345\244\204\347\220\206/1.\351\224\231\350\257\257\345\244\204\347\220\206.html" @@ -0,0 +1,1243 @@ + + + + + + + 1.错误处理 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          +
                          + + + + + + + + +
                          + +
                          + +
                          + + + + + + + + +
                          +
                          + +
                          +
                          + +
                          + +

                          1.错误类型

                          +

                          声明错误可选的方式很少,在选择合适的错误申明方式之前,应考虑以下几点。

                          +

                          (1)调用者是否需要匹配错误以便他们可以处理它? 如果是,我们必须通过声明顶级错误变量或自定义类型来支持 errors.Is 或 errors.As 函数。

                          +

                          (2)错误消息是否为静态字符串,还是需要上下文信息的动态字符串? 如果是静态字符串,我们可以使用 errors.New,但对于后者,我们必须使用 fmt.Errorf 或自定义错误类型。

                          +

                          (3)我们是否正在传递由下游函数返回的新错误? 如果是这样,请参阅错误包装部分。

                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                          错误匹配错误消息指导
                          Nostaticerrors.New
                          Nodynamicfmt.Errorf
                          Yesstatictop-level var with errors.New
                          Yesdynamiccustom error type
                          +

                          例如,使用errors.New表示带有静态字符串的错误。如果调用者需要匹配并处理此错误,则将此错误导出为变量以支持将其与errors.Is匹配。

                          +
                          // Bad
                          +
                          +// package foo
                          +
                          +func Open() error {
                          +  return errors.New("could not open")
                          +}
                          +
                          +// package bar
                          +
                          +if err := foo.Open(); err != nil {
                          +  // Can't handle the error.
                          +  panic("unknown error")
                          +}
                          +
                          +// Good
                          +// package foo
                          +
                          +var ErrCouldNotOpen = errors.New("could not open")
                          +
                          +func Open() error {
                          +  return ErrCouldNotOpen
                          +}
                          +
                          +// package bar
                          +
                          +if err := foo.Open(); err != nil {
                          +  if errors.Is(err, foo.ErrCouldNotOpen) {
                          +    // handle the error
                          +  } else {
                          +    panic("unknown error")
                          +  }
                          +}
                          +
                          +

                          对于动态字符串的错误, 如果调用者不需要匹配它,则使用fmt.Errorf,如果调用者确实需要匹配它,则自定义 error。

                          +

                          无错误匹配。

                          +
                          // package foo
                          +
                          +func Open(file string) error {
                          +  return fmt.Errorf("file %q not found", file)
                          +}
                          +
                          +// package bar
                          +
                          +if err := foo.Open("testfile.txt"); err != nil {
                          +  // Can't handle the error.
                          +  panic("unknown error")
                          +}
                          +
                          +

                          错误匹配。

                          +
                          // package foo
                          +
                          +type NotFoundError struct {
                          +  File string
                          +}
                          +
                          +func (e *NotFoundError) Error() string {
                          +  return fmt.Sprintf("file %q not found", e.File)
                          +}
                          +
                          +func Open(file string) error {
                          +  return &NotFoundError{File: file}
                          +}
                          +
                          +
                          +// package bar
                          +
                          +if err := foo.Open("testfile.txt"); err != nil {
                          +  var notFound *NotFoundError
                          +  if errors.As(err, &notFound) {
                          +    // handle the error
                          +  } else {
                          +    panic("unknown error")
                          +  }
                          +}
                          +
                          +

                          请注意,如果您从包中导出错误变量或类型, 它们将成为包的公共 API 的一部分。

                          +

                          2.错误包装

                          +

                          在调用失败时传播错误有三个主要方式:

                          +

                          (1)返回原始错误;

                          +

                          (2)使用 fmt.Errorf 和 %w 添加上下文生成新错误;

                          +

                          (3)使用 fmt.Errorf 和 %v 添加上下文生成新错误。

                          +

                          如果没有要添加的其他上下文,则按原样返回原始错误。 这将保留原始错误类型和消息。 这非常适合底层错误消息有足够的信息来追踪它来自哪里的错误。

                          +

                          否则,尽可能在错误消息中添加上下文 这样就不会出现诸如“连接被拒绝”之类的模糊错误, 您会收到更多有用的错误,例如“呼叫服务 foo:连接被拒绝”。

                          +

                          使用 fmt.Errorf 为你的错误添加上下文, 根据调用者是否应该能够匹配和提取根本原因,在 %w 或 %v 格式之间进行选择。

                          +

                          (1)如果调用者应该可以访问底层错误,请使用 %w。 对于大多数包装错误,这是一个很好的默认值,但请注意,调用者可能会开始依赖此行为。因此,对于包装错误是已知变量或类型的情况,请将其作为函数契约的一部分进行记录和测试。

                          +

                          (2)使用 %v 来混淆底层错误,调用者将无法匹配它,但如果需要,您可以在将来切换到 %w。

                          +

                          在为返回的错误添加上下文时,通过避免使用"failed to"之类的短语来保持上下文简洁,当错误通过堆栈向上传递时,它会一层一层被堆积起来:

                          +
                          // Bad
                          +s, err := store.New()
                          +if err != nil {
                          +    return fmt.Errorf(
                          +        "failed to create new store: %w", err)
                          +}
                          +
                          +// Good
                          +s, err := store.New()
                          +if err != nil {
                          +    return fmt.Errorf(
                          +        "new store: %w", err)
                          +}
                          +
                          +

                          然而,一旦错误被发送到另一个系统,应该清楚消息是一个错误(例如 err 标签或日志中的 "Failed" 前缀)。

                          +

                          另外请参考:Don't just check errors, handle them gracefully

                          +
                          powered by Gitbook该文章修订时间: +2022-05-08 19:22:09 +
                          + + +
                          + +
                          +
                          +
                          + +

                          results matching ""

                          +
                            + +
                            +
                            + +

                            No results matching ""

                            + +
                            +
                            +
                            + +
                            +
                            + +
                            + + + + + + +
                            + + +
                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/1.\344\275\277\347\224\250time\345\214\205\345\244\204\347\220\206\346\227\266\351\227\264.html" "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/1.\344\275\277\347\224\250time\345\214\205\345\244\204\347\220\206\346\227\266\351\227\264.html" new file mode 100644 index 0000000..cc61399 --- /dev/null +++ "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/1.\344\275\277\347\224\250time\345\214\205\345\244\204\347\220\206\346\227\266\351\227\264.html" @@ -0,0 +1,1182 @@ + + + + + + + 1.使用 time 包处理时间 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                            +
                            + + + + + + + + +
                            + +
                            + +
                            + + + + + + + + +
                            +
                            + +
                            +
                            + +
                            + +

                            时间处理看似简单,实则不然。关于时间的错误假设通常包括以下几点:

                            +
                              +
                            • 一分钟有 60 秒
                            • +
                            • 一小时有 60 分钟
                            • +
                            • 一天有 24 小时
                            • +
                            • 一周有 7 天
                            • +
                            • 一年 365 天
                            • +
                            +

                            还有更多,具体可参考 Falsehoods programmers believe about time

                            +

                            例如,在一个时间点上加上 24 小时并不总是产生一个新的日历日。

                            +

                            为什么常识性的认知是错误的呢?因为地球自转的不均匀性和长期变慢性,会存在时间修正的情况,比如闰秒,闰年等。

                            +

                            因此,在处理时间时始终使用 "time" 包,因为它有助于以更安全、更准确的方式处理这些不正确的假设。

                            +
                              +
                            • 使用 time.Time 表达瞬时时间
                            • +
                            +

                            在处理时间的瞬间时使用 time.Time,在比较、添加或减去时间时使用 time.Time 中的方法。

                            +
                            // Bad
                            +func isActive(now, start, stop int) bool {
                            +  return start <= now && now < stop
                            +}
                            +
                            +// God
                            +func isActive(now, start, stop time.Time) bool {
                            +  return (start.Before(now) || start.Equal(now)) && now.Before(stop)
                            +}
                            +
                            +
                              +
                            • 使用 time.Duration 表达时间段 +```go +// Bad +func poll(delay int) { +for { + // ... + time.Sleep(time.Duration(delay) * time.Millisecond) +} +} +poll(10) // 是几秒钟还是几毫秒?
                            • +
                            +

                            // Good +func poll(delay time.Duration) { + for { + // ... + time.Sleep(delay) + } +} +poll(10*time.Second) // 代码即注释

                            +
                            回到第一个例子,在一个时间时刻加上 24 小时,我们用于添加时间的方法取决于意图。如果我们想要下一个日历日(当前天的下一天)的同一个时间点,我们应该使用 `Time.AddDate`。但是,如果我们想保证某一时刻比前一时刻晚 24 小时,我们应该使用`Time.Add`。
                            +```go
                            +newDay := t.AddDate(0 /* years */, 0 /* months */, 1 /* days */)
                            +maybeNewDay := t.Add(24 * time.Hour)
                            +
                              +
                            • 对外部系统使用 time.Time 和 time.Duration
                            • +
                            +

                            尽可能在与外部系统交互中使用 time.Timetime.Duration

                            +

                            (1)Command-line 标志:flag 通过 time.ParseDuration 支持 time.Duration

                            +

                            (2)JSON:encoding/json 通过其 Time.UnmarshalJSON 方法支持将 time.Time 编码为 RFC 3339 字符串;

                            +

                            (3)SQL:database/sql 支持将 DATETIMETIMESTAMP 列转换为 time.Time,如果底层驱动程序支持则返回;

                            +

                            (4)YAML:gopkg.in/yaml.v2 支持将 time.Time 作为 RFC 3339 字符串,并通过 time.ParseDuration 支持 time.Duration

                            +

                            当不能在这些交互中使用 time.Duration 时,请使用 intfloat64,并在字段名称中包含单位。

                            +

                            例如,由于 encoding/json 不支持 time.Duration,因此该单位包含在字段的名称中。

                            +
                            // Bad
                            +// {"interval": 2}
                            +type Config struct {
                            +  Interval int `json:"interval"`
                            +}
                            +
                            +// Good
                            +// {"intervalMillis": 2000}
                            +type Config struct {
                            +  IntervalMillis int `json:"intervalMillis"`
                            +}
                            +
                            +

                            当在这些交互中不能使用 time.Time 时,除非达成一致,否则使用 string 和 RFC 3339 中定义的格式时间戳。默认情况下,Time.UnmarshalText 使用此格式,并可通过 time.RFC3339 在 Time.Format 和 time.Parse 中使用。

                            +

                            尽管这在实践中并不成问题,但请记住,time 包不支持解析闰秒时间戳(issue 8728),也不在计算中考虑闰秒(issue 15190)。如果您比较两个时刻,则差异将不包括这两个时刻之间可能发生的闰秒。

                            +
                            powered by Gitbook该文章修订时间: +2022-05-08 19:22:09 +
                            + + +
                            + +
                            +
                            +
                            + +

                            results matching ""

                            +
                              + +
                              +
                              + +

                              No results matching ""

                              + +
                              +
                              +
                              + +
                              +
                              + +
                              + + + + + + + + + + +
                              + + +
                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/2.\344\275\277\347\224\250\347\254\254\344\270\211\346\226\271atomic\345\214\205.html" "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/2.\344\275\277\347\224\250\347\254\254\344\270\211\346\226\271atomic\345\214\205.html" new file mode 100644 index 0000000..aad7842 --- /dev/null +++ "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/2.\344\275\277\347\224\250\347\254\254\344\270\211\346\226\271atomic\345\214\205.html" @@ -0,0 +1,1144 @@ + + + + + + + 2.使用第三方 atomic 包 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                              +
                              + + + + + + + + +
                              + +
                              + +
                              + + + + + + + + +
                              +
                              + +
                              +
                              + +
                              + +

                              不建议使用 sync/atomic 包的原子操作对基本类型 (int32, int64 等)进行操作,因为很容易忘记使用原子操作来读取或修改变量。

                              +

                              go.uber.org/atomic 通过隐藏基础类型为这些操作增加了类型安全性。此外,它还包括一个易用的 atomic.Bool 类型。

                              +
                              // Bad
                              +type foo struct {
                              +  running int32  // atomic
                              +}
                              +
                              +func (f* foo) start() {
                              +  if atomic.SwapInt32(&f.running, 1) == 1 {
                              +     // already running…
                              +     return
                              +  }
                              +  // start the Foo
                              +}
                              +
                              +func (f *foo) isRunning() bool {
                              +  return f.running == 1  // race!
                              +}
                              +
                              +// Good
                              +type foo struct {
                              +  running atomic.Bool
                              +}
                              +
                              +func (f *foo) start() {
                              +  if f.running.Swap(true) {
                              +     // already running…
                              +     return
                              +  }
                              +  // start the Foo
                              +}
                              +
                              +func (f *foo) isRunning() bool {
                              +  return f.running.Load()
                              +}
                              +
                              +
                              powered by Gitbook该文章修订时间: +2022-05-08 19:22:09 +
                              + + +
                              + +
                              +
                              +
                              + +

                              results matching ""

                              +
                                + +
                                +
                                + +

                                No results matching ""

                                + +
                                +
                                +
                                + +
                                +
                                + +
                                + + + + + + + + + + +
                                + + +
                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/6.\347\250\213\345\272\217\350\256\276\350\256\241/1.\351\201\277\345\205\215\344\275\277\347\224\250\345\217\257\345\217\230\345\205\250\345\261\200\345\217\230\351\207\217.html" "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/6.\347\250\213\345\272\217\350\256\276\350\256\241/1.\351\201\277\345\205\215\344\275\277\347\224\250\345\217\257\345\217\230\345\205\250\345\261\200\345\217\230\351\207\217.html" new file mode 100644 index 0000000..231dc6b --- /dev/null +++ "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/6.\347\250\213\345\272\217\350\256\276\350\256\241/1.\351\201\277\345\205\215\344\275\277\347\224\250\345\217\257\345\217\230\345\205\250\345\261\200\345\217\230\351\207\217.html" @@ -0,0 +1,1163 @@ + + + + + + + 1.避免使用可变全局变量 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                +
                                + + + + + + + + +
                                + +
                                + +
                                + + + + + + + + +
                                +
                                + +
                                +
                                + +
                                + +

                                可变全局变量在使用时,可能会被其他地方修改,导致程序运行时出现意外情况。

                                +

                                我们可以通过依赖注入的方式将依赖注入到使用方,这样便可以避免使用全局变量,进而避免了依赖的全局变量被错误修改的可能。

                                +

                                比如下面将依赖的 now 函数直接注入到使用方 signer struct 中。

                                +
                                // Bad
                                +
                                +// sign.go
                                +
                                +var timeNow = time.Now
                                +
                                +func sign(msg string) string {
                                +  now := timeNow()
                                +  return signWithTime(msg, now)
                                +}
                                +
                                +// sign_test.go
                                +func TestSign(t *testing.T) {
                                +  oldTimeNow := timeNow
                                +  timeNow = func() time.Time {
                                +    return someFixedTime
                                +  }
                                +  defer func() { timeNow = oldTimeNow }()
                                +
                                +  assert.Equal(t, want, sign(give))
                                +}
                                +
                                +// Good
                                +
                                +// sign.go
                                +
                                +type signer struct {
                                +  now func() time.Time
                                +}
                                +
                                +func newSigner() *signer {
                                +  return &signer{
                                +    now: time.Now,
                                +  }
                                +}
                                +
                                +func (s *signer) Sign(msg string) string {
                                +  now := s.now()
                                +  return signWithTime(msg, now)
                                +}
                                +
                                +// sign_test.go
                                +
                                +func TestSigner(t *testing.T) {
                                +  s := newSigner()
                                +  s.now = func() time.Time {
                                +    return someFixedTime
                                +  }
                                +
                                +  assert.Equal(t, want, s.Sign(give))
                                +}
                                +
                                +
                                powered by Gitbook该文章修订时间: +2022-05-08 19:22:09 +
                                + + +
                                + +
                                +
                                +
                                + +

                                results matching ""

                                +
                                  + +
                                  +
                                  + +

                                  No results matching ""

                                  + +
                                  +
                                  +
                                  + +
                                  +
                                  + +
                                  + + + + + + + + + + +
                                  + + +
                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/6.\347\250\213\345\272\217\350\256\276\350\256\241/2.\351\201\277\345\205\215\345\234\250\345\205\254\345\205\261\347\273\223\346\236\204\344\270\255\345\265\214\345\205\245\347\261\273\345\236\213.html" "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/6.\347\250\213\345\272\217\350\256\276\350\256\241/2.\351\201\277\345\205\215\345\234\250\345\205\254\345\205\261\347\273\223\346\236\204\344\270\255\345\265\214\345\205\245\347\261\273\345\236\213.html" new file mode 100644 index 0000000..87d081f --- /dev/null +++ "b/docs/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/6.\347\250\213\345\272\217\350\256\276\350\256\241/2.\351\201\277\345\205\215\345\234\250\345\205\254\345\205\261\347\273\223\346\236\204\344\270\255\345\265\214\345\205\245\347\261\273\345\236\213.html" @@ -0,0 +1,1180 @@ + + + + + + + 2.避免在公共结构中嵌入类型 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                  +
                                  + + + + + + + + +
                                  + +
                                  + +
                                  + + + + + + + + +
                                  +
                                  + +
                                  +
                                  + +
                                  + +

                                  嵌入类型会泄漏实现细节、禁止类型演化和产生模糊的接口文档。

                                  +

                                  假设您使用共享的 AbstractList 实现了多种列表类型,请避免在具体的列表实现中嵌入 AbstractList。相反,只需手动将方法写入具体的列表,委托给抽象列表的方法。

                                  +
                                  type AbstractList struct {}
                                  +// 添加将实体添加到列表中。
                                  +func (l *AbstractList) Add(e Entity) {
                                  +  // ...
                                  +}
                                  +// 移除从列表中移除实体。
                                  +func (l *AbstractList) Remove(e Entity) {
                                  +  // ...
                                  +}
                                  +
                                  +// Bad
                                  +
                                  +// ConcreteList 是一个实体列表。
                                  +type ConcreteList struct {
                                  +  *AbstractList
                                  +}
                                  +
                                  +// Good
                                  +
                                  +// ConcreteList 是一个实体列表。
                                  +type ConcreteList struct {
                                  +  list *AbstractList
                                  +}
                                  +// 添加将实体添加到列表中。
                                  +func (l *ConcreteList) Add(e Entity) {
                                  +  l.list.Add(e)
                                  +}
                                  +// 移除从列表中移除实体。
                                  +func (l *ConcreteList) Remove(e Entity) {
                                  +  l.list.Remove(e)
                                  +}
                                  +
                                  +

                                  泄漏实现细节指 AbstractList 的实现是 ConcreteList 的实现细节,被到处泄露了;

                                  +

                                  禁止类型演化指 ConcreteList 获得了同名嵌套类型字段 AbstractList,如果嵌入的类型是 public,那么字段是 public。为了保持向后兼容性,外部类型的每个未来版本都必须保留嵌入类型;

                                  +

                                  产生模糊的接口文档指 AbstractList 被导出的字段和方法全部成为了 ConcreteList 被导出的字段和方法,在 ConcreteList 又没有明确说明,会产生模糊的接口文档。

                                  +

                                  很少需要嵌入类型,虽然它可以帮助您避免编写冗长的委托方法。

                                  +

                                  即使嵌入兼容的抽象列表 interface,而不是结构体,这将为开发人员提供更大的灵活性来改变未来,但仍然泄露了具体列表使用抽象实现的细节。

                                  +
                                  // Bad
                                  +
                                  +// AbstractList 是各种实体列表的通用实现。
                                  +type AbstractList interface {
                                  +    Add(Entity)
                                  +    Remove(Entity)
                                  +}
                                  +// ConcreteList 是一个实体列表。
                                  +type ConcreteList struct {
                                  +    AbstractList
                                  +}
                                  +
                                  +// Good
                                  +
                                  +// ConcreteList 是一个实体列表。
                                  +type ConcreteList struct {
                                  +    list AbstractList
                                  +}
                                  +// 添加将实体添加到列表中。
                                  +func (l *ConcreteList) Add(e Entity) {
                                  +    l.list.Add(e)
                                  +}
                                  +// 移除从列表中移除实体。
                                  +func (l *ConcreteList) Remove(e Entity) {
                                  +    l.list.Remove(e)
                                  +}
                                  +
                                  +

                                  无论是使用嵌入结构还是嵌入接口,都会限制类型的演化。

                                  +

                                  (1)向嵌入接口添加方法是一个破坏性的改变;

                                  +

                                  (2)从嵌入结构体删除方法是一个破坏性的改变;

                                  +

                                  (3)删除嵌入类型是一个破坏性的改变;

                                  +

                                  (4)即使使用满足相同接口的类型替换嵌入类型,也是一个破坏性的改变。

                                  +

                                  尽管编写这些委托方法是乏味的,但是额外的工作隐藏了实现细节,留下了更多的更改机会,还消除了在未能描述出潜在接口的模糊文档。

                                  +
                                  powered by Gitbook该文章修订时间: +2022-05-08 19:22:09 +
                                  + + +
                                  + +
                                  +
                                  +
                                  + +

                                  results matching ""

                                  +
                                    + +
                                    +
                                    + +

                                    No results matching ""

                                    + +
                                    +
                                    +
                                    + +
                                    +
                                    + +
                                    + + + + + + + + + + +
                                    + + +
                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/1.\346\240\274\345\274\217\345\214\226.html" "b/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/1.\346\240\274\345\274\217\345\214\226.html" new file mode 100644 index 0000000..3cd2010 --- /dev/null +++ "b/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/1.\346\240\274\345\274\217\345\214\226.html" @@ -0,0 +1,1131 @@ + + + + + + + 1.格式化 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                    +
                                    + + + + + + + + +
                                    + +
                                    + +
                                    + + + + + + + + +
                                    +
                                    + +
                                    +
                                    + +
                                    + +

                                    主体风格

                                    +
                                      +
                                    • 代码必须用 gofmt 工具格式化。
                                    • +
                                    +

                                    gofmt 使用制表符进行缩进,使用空白符进行对齐。

                                    +

                                    IDE 在保存代码时可设置自动执行 gofmt,如 GoLand 的 Settings > Tools > File Watchers 中可勾选 go fmt 并指定作用范围。

                                    +

                                    +

                                    占位符

                                    +
                                      +
                                    • 通过%v打印错误信息时建议加冒号。
                                    • +
                                    +
                                    // Bad
                                    +logger.Errorf("num %d, err %s", num, err.Error())
                                    +
                                    +// Good
                                    +logger.Errorf("num:%d, err:%v", num, err.Error())
                                    +
                                    +
                                      +
                                    • 字符串占位符,如果输入数据来自外部,建议使用%q进行安全转义。
                                    • +
                                    • 格式化字符串中多个占位符之间要有空格。
                                    • +
                                    +
                                    fmt.Printf("%v这里要空格%v", a, b)
                                    +
                                    +
                                    powered by Gitbook该文章修订时间: +2022-05-21 21:18:14 +
                                    + + +
                                    + +
                                    +
                                    +
                                    + +

                                    results matching ""

                                    +
                                      + +
                                      +
                                      + +

                                      No results matching ""

                                      + +
                                      +
                                      +
                                      + +
                                      +
                                      + +
                                      + + + + + + + + + + +
                                      + + +
                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/10.\345\207\275\346\225\260.html" "b/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/10.\345\207\275\346\225\260.html" new file mode 100644 index 0000000..068490f --- /dev/null +++ "b/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/10.\345\207\275\346\225\260.html" @@ -0,0 +1,1387 @@ + + + + + + + 10.函数 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                      +
                                      + + + + + + + + +
                                      + +
                                      + +
                                      + + + + + + + + +
                                      +
                                      + +
                                      +
                                      + +
                                      + +

                                      入参&返回值

                                      +
                                        +
                                      • 入参和返回值均以小写字母开头。
                                      • +
                                      • 入参和返回值个数均不能超过 5 个,如果超过,请封装成新的类型。
                                      • +
                                      • 尽量用值传递,非指针传递。
                                      • +
                                      • 类型为 map,slice,chan,interface 不要传递指针。
                                      • +
                                      • 返回值超过 3 个,或有相同类型的返回值,或者从上下文中不清楚返回值的含义,使用命名返回,其它情况不建议使用命名返回。
                                      • +
                                      +
                                      // Parent1 ...
                                      +func (n *Node) Parent1() *Node
                                      +
                                      +// Parent2 ...
                                      +func (n *Node) Parent2() (*Node, error)
                                      +
                                      +// Location ...
                                      +func (f *Foo) Location() (lat, long float64, err error)
                                      +
                                      +
                                        +
                                      • 入参和返回值顺序根据关联性排在一起。
                                      • +
                                      • 尽量用 error 表示执行是否成功,而不是用 bool 或者 int。
                                      • +
                                      • 表示执行状态的返回值应该放在最后。
                                      • +
                                      +
                                      // Bad
                                      +ret, info := ModifyUserInfo(user)
                                      +
                                      +// Good
                                      +info, ret := ModifyUserInfo(user)
                                      +
                                      +
                                        +
                                      • 不要返回多个用于控制流程的状态。
                                      • +
                                      +
                                      // Bad
                                      +isContinue, retCode := p.processUnity()
                                      +
                                      +// Good
                                      +retCode := p.processUnity()
                                      +
                                      +
                                        +
                                      • 如果传入的参数通常是固定的,考虑通过实现多个函数实现默认参数。
                                      • +
                                      +

                                      如下面这个函数的第二个参数是没有必要的,大部分时候都是 +1,一个 IncCounter() 和一个 IncCounterN() 即可。可参考标准库包的 Split() 和 SplitN()。

                                      +
                                      metrics.IncrCounter(cntCacheMissKey, 1)
                                      +
                                      +
                                        +
                                      • 批量查询函数返回值使用 slice 还是 map。
                                      • +
                                      +

                                      有时后我们需要根据多个 ID 查询对应的值,可能会出现部分失败的情况,如某个 ID 不存在。如果不允许部分失败,使用 slice 返回值,如果允许部分失败使用 map。

                                      +
                                      // GetUserInfoBatch 批量获取用户信息(需全部成功)。
                                      +func GetUserInfoBatch(uids ...uint64) ([]UserInfo, error) {
                                      +    ...
                                      +}
                                      +
                                      +// GetUserInfoBatch 批量获取用户信息(允许部分失败)。
                                      +func GetUserInfoBatch(uids ...uint64) (map[uint64]UserInfo, error) {
                                      +    ...
                                      +}
                                      +
                                      +

                                      成员函数

                                      +
                                        +
                                      • 如果方法不使用类的成员,应该实现为非成员函数。
                                      • +
                                      • 如果非成员函数要使用类的多个属性时,应该实现为成员函数。
                                      • +
                                      +

                                      局部变量

                                      +
                                        +
                                      • 如果局部变量仅被使用一次,且不能起到解释逻辑的作用时,应该删除局部变量,直接内联。
                                      • +
                                      +
                                      // Bad
                                      +ids := GetIDs()
                                      +Foo(ids)
                                      +
                                      +// Good
                                      +Foo(GetIDs())
                                      +
                                      +

                                      defer

                                      +
                                        +
                                      • 当存在资源管理时,应紧跟 defer 函数进行资源的释放。
                                      • +
                                      • 判断是否有错误发生之后,再 defer 释放资源。
                                      • +
                                      +
                                      resp, err := http.Get(url)
                                      +if err != nil {
                                      +    return err
                                      +}
                                      +// 如果操作成功,再 defer Close()
                                      +defer resp.Body.Close()
                                      +
                                      +
                                        +
                                      • 禁止在循环中使用 defer。
                                      • +
                                      +
                                      // 不要这样使用
                                      +func filterSomething(values []string) {
                                      +    for _, v := range values {
                                      +        fields, err := db.Query(v) // 示例,实际不要这么查询,防止 SQL 注入
                                      +        if err != nil {
                                      +            // ...
                                      +        }
                                      +        defer fields.Close()
                                      +        // 继续使用fields
                                      +    }
                                      +}
                                      +
                                      +// 应当使用如下的方式:
                                      +func filterSomething(values []string) {
                                      +    for _, v := range values {
                                      +        func() {
                                      +            fields, err := db.Query(v) // 示例,实际不要这么查询,防止 SQL 注入
                                      +            if err != nil {
                                      +                // ...
                                      +            }
                                      +            defer fields.Close()
                                      +            // 继续使用 fields
                                      +        }()
                                      +    }
                                      +}
                                      +
                                      +
                                        +
                                      • 正常逻辑不应该在 defer 中执行。
                                      • +
                                      +

                                      减少嵌套(圈复杂度)

                                      +
                                        +
                                      • 嵌套深度不能超过4层
                                      • +
                                      +

                                      从函数名开始算第一层,当函数的嵌套深度超过4层,往往会导致圈复杂度过高,函数变得复杂不可读,我们可以通过拆分函数的方式来减少嵌套深度。

                                      +
                                      // AddArea 添加成功或出错。
                                      +func (s *BookingService) AddArea(areas ...string) error {
                                      +    s.Lock()
                                      +    defer s.Unlock()
                                      +
                                      +    for _, area := range areas {
                                      +        for _, has := range s.areas {
                                      +            if area == has {
                                      +                return srverr.ErrAreaConflict
                                      +            }
                                      +        }
                                      +        s.areas = append(s.areas, area)
                                      +        s.areaOrders[area] = new(order.AreaOrder)
                                      +    }
                                      +    return nil
                                      +}
                                      +
                                      +// 建议调整为这样:
                                      +
                                      +// AddArea 添加成功或出错。
                                      +func (s *BookingService) AddArea(areas ...string) error {
                                      +    s.Lock()
                                      +    defer s.Unlock()
                                      +
                                      +    for _, area := range areas {
                                      +        if s.HasArea(area) {
                                      +            return srverr.ErrAreaConflict
                                      +        }
                                      +        s.areas = append(s.areas, area)
                                      +        s.areaOrders[area] = new(order.AreaOrder)
                                      +    }
                                      +    return nil
                                      +}
                                      +
                                      +// HasArea ...
                                      +func (s *BookingService) HasArea(area string) bool {
                                      +    for _, has := range s.areas {
                                      +        if area == has {
                                      +            return true
                                      +        }
                                      +    }
                                      +    return false
                                      +}
                                      +
                                      +
                                        +
                                      • 单函数圈复杂度最大值 <=10。
                                      • +
                                      • 条件不满足或出现错误应尽早返回。
                                      • +
                                      +

                                      代码也可以优先处理条件不满足或错误的情况,尽早返回或继续循环来减少嵌套。

                                      +
                                      // Bad
                                      +for _, v := range data {
                                      +  if v.F1 == 1 {
                                      +    v = process(v)
                                      +    if err := v.Call(); err == nil {
                                      +      v.Send()
                                      +    } else {
                                      +      return err
                                      +    }
                                      +  } else {
                                      +    log.Printf("Invalid v: %v", v)
                                      +  }
                                      +}
                                      +
                                      +// Good
                                      +for _, v := range data {
                                      +  if v.F1 != 1 {
                                      +    log.Printf("Invalid v: %v", v)
                                      +    continue
                                      +  }
                                      +
                                      +  v = process(v)
                                      +  if err := v.Call(); err != nil {
                                      +    return err
                                      +  }
                                      +  v.Send()
                                      +}
                                      +
                                      +

                                      魔法字面量

                                      +
                                        +
                                      • 除了 0 和 1,不要使用魔法数字。
                                      • +
                                      +
                                      // Bad
                                      +func getArea(r float64) float64 {
                                      +    return 3.14 * r * r
                                      +}
                                      +func getLength(r float64) float64 {
                                      +    return 3.14 * 2 * r
                                      +}
                                      +
                                      +// Good
                                      +// PI 圆周率
                                      +const PI = 3.14
                                      +
                                      +func getArea(r float64) float64 {
                                      +    return PI * r * r
                                      +}
                                      +
                                      +func getLength(r float64) float64 {
                                      +    return PI * 2 * r
                                      +}
                                      +
                                      +
                                        +
                                      • 如果字符串字面量出现 >=2 次,则禁止使用,用一个有名称的常量代替,可读性更好。
                                      • +
                                      +
                                      // Bad
                                      +rsp, err := http.Post(url, "application/json", bytes.NewBuffer([]byte(req)))
                                      +
                                      +// Good
                                      +const JsonContentType = "application/json"
                                      +rsp, err := http.Post(url, "application/json", bytes.NewBuffer([]byte(req)))
                                      +
                                      +

                                      函数分组与顺序

                                      +
                                        +
                                      • 函数应该放在 struct, const, var的后面。
                                      • +
                                      • 构造函数应该放在其他函数之前,如newXYZ()/NewXYZ()
                                      • +
                                      • 导出的函数应该放在非导出函数前面
                                      • +
                                      • 同一文件中的函数应按接收者分组。
                                      • +
                                      • 由于函数是按接收者分组的,因此普通工具函数应在文件末尾出现。
                                      • +
                                      • 函数应按粗略的调用顺序排序。
                                      • +
                                      +

                                      按照上面的规则,下面给出好坏文件内容布局示例。

                                      +
                                      // Bad
                                      +func (s *something) Cost() {
                                      +  return calcCost(s.weights)
                                      +}
                                      +
                                      +type something struct{ ... }
                                      +
                                      +func calcCost(n []int) int {...}
                                      +
                                      +func (s *something) Stop() {...}
                                      +
                                      +func newSomething() *something {
                                      +    return &something{}
                                      +}
                                      +
                                      +// Good
                                      +type something struct{ ... }
                                      +
                                      +func newSomething() *something {
                                      +    return &something{}
                                      +}
                                      +
                                      +func (s *something) Cost() {
                                      +  return calcCost(s.weights)
                                      +}
                                      +
                                      +func (s *something) Stop() {...}
                                      +
                                      +func calcCost(n []int) int {...}
                                      +
                                      +
                                      powered by Gitbook该文章修订时间: +2022-05-22 16:00:37 +
                                      + + +
                                      + +
                                      +
                                      +
                                      + +

                                      results matching ""

                                      +
                                        + +
                                        +
                                        + +

                                        No results matching ""

                                        + +
                                        +
                                        +
                                        + +
                                        +
                                        + +
                                        + + + + + + + + + + + + + + +
                                        + + +
                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/11.\345\215\225\345\205\203\346\265\213\350\257\225.html" "b/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/11.\345\215\225\345\205\203\346\265\213\350\257\225.html" new file mode 100644 index 0000000..92695e2 --- /dev/null +++ "b/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/11.\345\215\225\345\205\203\346\265\213\350\257\225.html" @@ -0,0 +1,1185 @@ + + + + + + + 11.单元测试 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                        +
                                        + + + + + + + + +
                                        + +
                                        + +
                                        + + + + + + + + +
                                        +
                                        + +
                                        +
                                        + +
                                        + +
                                          +
                                        • 单元测试文件名命名规范为 example_test.go。
                                        • +
                                        • 测试用例的函数名称必须以 Test 开头,例如 TestExample。
                                        • +
                                        • 单测文件行数限制是普通文件的 2 倍(1600 行)。单测函数行数限制也是普通函数的2倍(160行)。圈复杂度、列数限制、 import 分组等其他规范细节和普通文件保持一致。
                                        • +
                                        • 由于单测文件内的函数都是不对外的,所有可导出函数可以没有注释,但是结构体定义时尽量不要导出。
                                        • +
                                        • 每个重要的可导出函数都要首先编写测试用例,测试用例和正规代码一起提交方便进行回归测试。
                                        • +
                                        • 表驱动测试.
                                        • +
                                        +

                                        使用表驱动的方式编写用例,代码看上去会更简洁。

                                        +
                                        // Bad
                                        +// func TestSplitHostPort(t *testing.T)
                                        +
                                        +host, port, err := net.SplitHostPort("192.0.2.0:8000")
                                        +require.NoError(t, err)
                                        +assert.Equal(t, "192.0.2.0", host)
                                        +assert.Equal(t, "8000", port)
                                        +
                                        +host, port, err = net.SplitHostPort("192.0.2.0:http")
                                        +require.NoError(t, err)
                                        +assert.Equal(t, "192.0.2.0", host)
                                        +assert.Equal(t, "http", port)
                                        +
                                        +host, port, err = net.SplitHostPort(":8000")
                                        +require.NoError(t, err)
                                        +assert.Equal(t, "", host)
                                        +assert.Equal(t, "8000", port)
                                        +
                                        +host, port, err = net.SplitHostPort("1:8")
                                        +require.NoError(t, err)
                                        +assert.Equal(t, "1", host)
                                        +assert.Equal(t, "8", port)
                                        +
                                        +// Good
                                        +// func TestSplitHostPort(t *testing.T)
                                        +
                                        +tests := []struct{
                                        +  give     string
                                        +  wantHost string
                                        +  wantPort string
                                        +}{
                                        +  {
                                        +    give:     "192.0.2.0:8000",
                                        +    wantHost: "192.0.2.0",
                                        +    wantPort: "8000",
                                        +  },
                                        +  {
                                        +    give:     "192.0.2.0:http",
                                        +    wantHost: "192.0.2.0",
                                        +    wantPort: "http",
                                        +  },
                                        +  {
                                        +    give:     ":8000",
                                        +    wantHost: "",
                                        +    wantPort: "8000",
                                        +  },
                                        +  {
                                        +    give:     "1:8",
                                        +    wantHost: "1",
                                        +    wantPort: "8",
                                        +  },
                                        +}
                                        +
                                        +for _, tt := range tests {
                                        +  t.Run(tt.give, func(t *testing.T) {
                                        +    host, port, err := net.SplitHostPort(tt.give)
                                        +    require.NoError(t, err)
                                        +    assert.Equal(t, tt.wantHost, host)
                                        +    assert.Equal(t, tt.wantPort, port)
                                        +  })
                                        +}
                                        +
                                        +
                                        powered by Gitbook该文章修订时间: +2022-05-01 21:44:06 +
                                        + + +
                                        + +
                                        +
                                        +
                                        + +

                                        results matching ""

                                        +
                                          + +
                                          +
                                          + +

                                          No results matching ""

                                          + +
                                          +
                                          +
                                          + +
                                          +
                                          + +
                                          + + + + + + + + + + + + + + +
                                          + + +
                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/12.\346\235\202\351\241\271.html" "b/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/12.\346\235\202\351\241\271.html" new file mode 100644 index 0000000..8290aae --- /dev/null +++ "b/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/12.\346\235\202\351\241\271.html" @@ -0,0 +1,1165 @@ + + + + + + + 12.杂项 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                          +
                                          + + + + + + + + +
                                          + +
                                          + +
                                          + + + + + + + + +
                                          +
                                          + +
                                          +
                                          + +
                                          + +

                                          1.基本类型偏执

                                          +

                                          有时候你会看到某个类里有很多基本类型字段,但是你隐约地能区分出某些字段好像应该在一起,如手机号和带区号的电话号码、描述某个日期范围的开始日期和结束日期,它们应该有一个真实的载体,如联系方式类和时间范围类) +,而不应全部零散放在一个大类型中。

                                          +

                                          通用场景

                                          +
                                            +
                                          • 复杂的执行/错误信息,需要定义结构体保存。
                                          • +
                                          • 出现状态/类型等字眼时,需要使用枚举。
                                          • +
                                          • 时间类型尽量使用内置定义,如 time.Second,不要使用 int。
                                          • +
                                          +

                                          结构体

                                          +
                                            +
                                          • 一个文件中出现多个结构体时,需要注意观察是否有重复的成员。
                                          • +
                                          • 一个结构体中,成员较多,且多个成员有明显关联关系,需要封装新的结构体。
                                          • +
                                          • 意义不明的成员变量,应该定义类型描述作用。
                                          • +
                                          +

                                          2.单一职责

                                          +

                                          包&文件

                                          +
                                            +
                                          • 需要判断当前文件是否应该归属于当前包,主要以职责进行判断。
                                          • +
                                          • 导出的函数/变量的职责必须与包&文件职责高度一致。
                                          • +
                                          • 除了包的主逻辑文件中内容允许导出,包内的辅助函数都应该是非导出的。
                                          • +
                                          +

                                          函数

                                          +
                                            +
                                          • 一个函数只负责一个职责。
                                              +
                                            • 配置文件的读取,和对象初始化应该分开,不要让对象自己根据配置文件初始化,保证构造函数足够简单
                                            • +
                                            • 解析、校验、计算的逻辑应该进行分离
                                            • +
                                            • 读、写、计算的逻辑应该进行分离
                                            • +
                                            • rpc、db 相关操作需要独立封装
                                            • +
                                            +
                                          • +
                                          • 一个函数内不应该混杂多个实现细节,需要将独立的逻辑封装成函数。
                                          • +
                                          • 一次循环尽量只做一件事,不用担心多次循环。
                                          • +
                                          • 同一层级的逻辑细节不要拆分。
                                          • +
                                          +

                                          3.goroutine

                                          +
                                            +
                                          • 启动的 goroutine 最好有 recover。
                                          • +
                                          +

                                          因为其他 goroutine 是无法捕当前 goroutine 抛出的异常。如果启动的 goroutine 没有 recover,很容易发生 panic 导致整个进程退出。

                                          +
                                            +
                                          • 遇到 goroutine一定要梳理清楚 goroutine 的退出机制,防止泄漏。
                                          • +
                                          • 如果要开启多个线程执行一组动作,并且要等待全部完成后继续后续逻辑,考虑使用 errgroup.Group
                                          • +
                                          +

                                          4.应用服务

                                          +
                                            +
                                          • 应用服务建议有 README.md 说明文档,介绍服务功能、使用方法、部署时的限制与要求、基础环境依赖等
                                          • +
                                          • 应用服务必须要有接口测试
                                          • +
                                          +

                                          5.常用工具

                                          +

                                          Go 本身在代码规范方面做了很多努力,很多限制都是语法要求,例如左大括号不换行,引用的包或者定义的变量不使用会报错。此外 Go 还是提供了很多好用的工具帮助我们进行代码的规范。

                                          +
                                            +
                                          • gofmt ,大部分的格式问题可以通过 gofmt 解决, gofmt 自动格式化代码,保证所有的 go 代码与官方推荐的格式保持一致,于是所有格式有关问题,都以 gofmt 的结果为准。
                                          • +
                                          • goimports ,此工具在 gofmt 的基础上增加了自动删除和引入包。
                                          • +
                                          • go vet ,vet 工具可以帮我们静态分析我们的源码存在的各种问题,例如多余的代码,提前 return 的逻辑, struct 的 tag 是否符合标准等。编译前先执行代码静态分析。
                                          • +
                                          • golint ,类似 javascript 中的 jslint 的工具,主要功能就是检测代码中不规范的地方。
                                          • +
                                          +
                                          powered by Gitbook该文章修订时间: +2022-05-22 17:03:00 +
                                          + + +
                                          + +
                                          +
                                          +
                                          + +

                                          results matching ""

                                          +
                                            + +
                                            +
                                            + +

                                            No results matching ""

                                            + +
                                            +
                                            +
                                            + +
                                            +
                                            + +
                                            + + + + + + + + + + +
                                            + + +
                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/2.\344\273\243\347\240\201\350\241\214.html" "b/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/2.\344\273\243\347\240\201\350\241\214.html" new file mode 100644 index 0000000..727eb10 --- /dev/null +++ "b/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/2.\344\273\243\347\240\201\350\241\214.html" @@ -0,0 +1,1207 @@ + + + + + + + 2.代码行 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                            +
                                            + + + + + + + + +
                                            + +
                                            + +
                                            + + + + + + + + +
                                            +
                                            + +
                                            +
                                            + +
                                            + +

                                            行长度

                                            +

                                            一行代码不要超过120列,超过的情况,使用合理的方法换行。

                                            +

                                            例外场景:

                                            +
                                              +
                                            • import 模块语句
                                            • +
                                            • struct tag
                                            • +
                                            • 工具生成的代码
                                            • +
                                            +

                                            换行方式

                                            +

                                            采用惰性换行,换行前应尽可能占满当前行不留空位。

                                            +
                                            // Bad
                                            +fmt.Printf("%v %v %v %v %v %v %v %v %v %v %v %v %v %v\n",
                                            +0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,89, 144, 233)
                                            +
                                            +// Good
                                            +fmt.Printf("%v %v %v %v %v %v %v %v %v %v %v %v %v %v\n", 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,
                                            +89, 144, 233)
                                            +
                                            +

                                            不必要的空行

                                            +
                                              +
                                            • 函数体第一行不要换行。
                                            • +
                                            +
                                            // Bad
                                            +func foo() {
                                            +
                                            +    // func body
                                            +}
                                            +
                                            +// Good
                                            +func foo() {
                                            +    // func body
                                            +}
                                            +
                                            +
                                              +
                                            • 函数调用和对调用结果的处理,是紧密相连的,不能加空行。
                                            • +
                                            +
                                            // Bad
                                            +res, err := foo()
                                            +
                                            +if err != nil || res.Ret != 0 {
                                            +    return
                                            +}
                                            +
                                            +// Good
                                            +res, err := foo()
                                            +if err != nil || res.Ret != 0 {
                                            +    return
                                            +}
                                            +
                                            +
                                              +
                                            • return 语句前不要换行。
                                            • +
                                            +
                                            // Bad
                                            +func foo() {
                                            +    // func body
                                            +
                                            +    return
                                            +}
                                            +
                                            +// Good
                                            +func foo() {
                                            +    // func body
                                            +    return
                                            +}
                                            +
                                            +

                                            括号和空格

                                            +
                                              +
                                            • 遵循 gofmt 的逻辑。
                                            • +
                                            • 运算符和操作数之间要留空格。
                                            • +
                                            • 作为输入参数或者数组下标时,运算符和操作数之间不需要空格,紧凑展示。
                                            • +
                                            +
                                            var i int = 1 + 2                     // 运算符和操作数之间要留空格
                                            +v := []float64{1.0, 2.0, 3.0}[i-i]  // i-i 作为下标不留空格
                                            +fmt.Printf("%f\n", v+1)                // v+1 作为入参不要留空格
                                            +
                                            +
                                              +
                                            • 不要添加没必要的括号。
                                            • +
                                            +
                                            // Bad
                                            +if foo && (int(bar) > 0) {
                                            +    // ...
                                            +}
                                            +
                                            +// Good
                                            +if foo && int(bar) > 0 {
                                            +    // ...
                                            +}
                                            +
                                            +

                                            行数

                                            +
                                              +
                                            • 函数长度不能超过 80 行。
                                            • +
                                            • 文件长度不能超过 800 行。
                                            • +
                                            +
                                            powered by Gitbook该文章修订时间: +2022-05-21 21:18:32 +
                                            + + +
                                            + +
                                            +
                                            +
                                            + +

                                            results matching ""

                                            +
                                              + +
                                              +
                                              + +

                                              No results matching ""

                                              + +
                                              +
                                              +
                                              + +
                                              +
                                              + +
                                              + + + + + + + + + + + + + + +
                                              + + +
                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/3.\345\255\227\347\254\246\344\270\262.html" "b/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/3.\345\255\227\347\254\246\344\270\262.html" new file mode 100644 index 0000000..8ce1127 --- /dev/null +++ "b/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/3.\345\255\227\347\254\246\344\270\262.html" @@ -0,0 +1,1145 @@ + + + + + + + 3.字符串 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                              +
                                              + + + + + + + + +
                                              + +
                                              + +
                                              + + + + + + + + +
                                              +
                                              + +
                                              +
                                              + +
                                              + +
                                                +
                                              • 字符串字面量
                                              • +
                                              +

                                              Go 支持使用原始字符串字面值,可以使用反引号来表示原生字符串。在需要转义的场景下,我们应该尽量使用使用反引号表示字符串,避免转义。

                                              +
                                              // Bad
                                              +wantError := "unknown name:\"test\""
                                              +
                                              +// Good
                                              +wantError := `unknown error:"test"`
                                              +
                                              +
                                                +
                                              • 不要使用字符串表示 list 和 map 结构。
                                              • +
                                              +
                                              // Bad
                                              +var Receivers = "tom,jerry,spike"
                                              +
                                              +// Good
                                              +var Receivers = []string{"tom","jerry","spike"}
                                              +
                                              +
                                                +
                                              • 字符串拼接
                                              • +
                                              +

                                              行内字符串拼接时,出于性能的考虑,待拼接字符串数量较少(<=3)且不涉及类型转换时,使用运算符 + 而非fmt.Sprintf()

                                              +
                                              // Bad
                                              +str := fmt.Sprintf("rsp code is %v", code)
                                              +str := "rsp code is " + code " and msg is" + msg
                                              +
                                              +// Good
                                              +str := "rsp code is " + code
                                              +str :=  fmt.Sprintf("rsp code is %v and msg is %v", code, msg)
                                              +
                                              +
                                              powered by Gitbook该文章修订时间: +2022-05-21 22:19:54 +
                                              + + +
                                              + +
                                              +
                                              +
                                              + +

                                              results matching ""

                                              +
                                                + +
                                                +
                                                + +

                                                No results matching ""

                                                + +
                                                +
                                                +
                                                + +
                                                +
                                                + +
                                                + + + + + + + + + + + + + + +
                                                + + +
                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/4.\344\276\235\350\265\226\347\256\241\347\220\206.html" "b/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/4.\344\276\235\350\265\226\347\256\241\347\220\206.html" new file mode 100644 index 0000000..559d240 --- /dev/null +++ "b/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/4.\344\276\235\350\265\226\347\256\241\347\220\206.html" @@ -0,0 +1,1212 @@ + + + + + + + 4.依赖管理 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                +
                                                + + + + + + + + +
                                                + +
                                                + +
                                                + + + + + + + + +
                                                +
                                                + +
                                                +
                                                + +
                                                + +

                                                依赖规范

                                                +
                                                  +
                                                • go1.11 以上必须使用 go modules 模式。
                                                  go mod init git.code.oa.com/group/myrepo
                                                  +
                                                  +
                                                • +
                                                • 使用 go modules 作为依赖管理的项目不要提交 vendor 目录。
                                                • +
                                                • 使用 go modules 管理依赖的项目, go.sum文件必须提交,不要添加到.gitignore规则中。
                                                • +
                                                +

                                                import 规范

                                                +
                                                  +
                                                • 使用 goimports 工具自动格式化引入的包名,import 规范原则上以 goimports 规则为准。
                                                • +
                                                +

                                                goimports 会自动添加依赖的包,并移除未引用的包。把依赖包按字母序升序排列,并对包进行分组管理。通过空行隔开,默认分为标准库包和非标准库包(第三方包和内部包)。

                                                +
                                                  +
                                                • 导入的包按照先后顺序应该分为三组:
                                                    +
                                                  • 标准包
                                                  • +
                                                  • 外部包
                                                  • +
                                                  • 内部包
                                                  • +
                                                  +
                                                • +
                                                +

                                                带域名的包名都属于外部包,如 github.com/xxx/xxx。内部包是指不能被外部 import 的包。

                                                +
                                                // Bad
                                                +import (
                                                +    "fmt"
                                                +    "os"
                                                +    "go.uber.org/atomic"
                                                +    "golang.org/x/sync/errgroup"
                                                +    "myproject/models"
                                                +    "myproject/controller"
                                                +)
                                                +
                                                +// Good
                                                +import (
                                                +    "encoding/json"
                                                +    "strings"
                                                +
                                                +    "go.uber.org/atomic"
                                                +    "golang.org/x/sync/errgroup"
                                                +
                                                +    "myproject/models"
                                                +    "myproject/controller"
                                                +)
                                                +
                                                +
                                                  +
                                                • 不要使用相对路径导入内部包,应该使用完整的路径引入包。
                                                • +
                                                +
                                                // Bad
                                                +import (
                                                +    "../net"
                                                +)
                                                +
                                                +// Good
                                                +import (
                                                +    "xxxx.com/proj/net"
                                                +)
                                                +
                                                +
                                                  +
                                                • 必要时给包起个别名
                                                • +
                                                +

                                                包名和 git 路径名不一致时,或者多个相同包名冲突时,使用别名代替会有更好的可读性。

                                                +
                                                // Bad
                                                +import (
                                                +    elastic "github.com/olivere/elastic/v7"
                                                +)
                                                +
                                                +// Good
                                                +import (
                                                +    elastic "github.com/olivere/elastic/v7"
                                                +)
                                                +
                                                +
                                                  +
                                                • 通用的功能包,应该放在 public 目录下,而不是具体业务目录下。
                                                • +
                                                +
                                                // Bad
                                                +import "github.com/xxxxxxxx/XXXServer/pkg/formatlog"
                                                +
                                                +// Good
                                                +import "github.com/xxxxxxxx/utils/formatlog"
                                                +
                                                +
                                                  +
                                                • import . 只能用于测试文件,且必须是为了解决循环依赖,才能使用。
                                                • +
                                                +
                                                package foo_test
                                                +
                                                +import (
                                                +    "bar/testutil" // also imports "foo"
                                                +    . "foo"
                                                +)
                                                +
                                                +

                                                在这种情况下,测试文件不能在包 foo 中,因为它使用 bar/testutil,后者导入 foo。所以我们使用import .形式导入包 foo,让测试文件假装是包 foo 的一部分,尽管它不是。除了这一种情况,不要使用import .,因为它使程序难以阅读,比如使用 Baz 这样的标识符,不知道其是顶级标识符还是导入包中的顶级标识符。

                                                +
                                                  +
                                                • 引入第三方包要慎重。
                                                • +
                                                +

                                                如引入 Github 上的包要确认活跃度,不知名的包可能会被下架或出现不兼容的版本升级情况,必要情况下可 fork 一份。

                                                +
                                                // 该包已经 404 了。
                                                +github.com/astaxie/beego/orm
                                                +
                                                +
                                                powered by Gitbook该文章修订时间: +2022-05-22 15:40:04 +
                                                + + +
                                                + +
                                                +
                                                +
                                                + +

                                                results matching ""

                                                +
                                                  + +
                                                  +
                                                  + +

                                                  No results matching ""

                                                  + +
                                                  +
                                                  +
                                                  + +
                                                  +
                                                  + +
                                                  + + + + + + + + + + + + + + +
                                                  + + +
                                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/5.\345\210\235\345\247\213\345\214\226.html" "b/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/5.\345\210\235\345\247\213\345\214\226.html" new file mode 100644 index 0000000..bf62f96 --- /dev/null +++ "b/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/5.\345\210\235\345\247\213\345\214\226.html" @@ -0,0 +1,1517 @@ + + + + + + + 5.初始化 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                  +
                                                  + + + + + + + + +
                                                  + +
                                                  + +
                                                  + + + + + + + + +
                                                  +
                                                  + +
                                                  +
                                                  + +
                                                  + +

                                                  初始化 struct

                                                  +
                                                    +
                                                  • 使用字段名初始化结构体。
                                                  • +
                                                  +
                                                  // Bad
                                                  +k := User{"John", "Doe", true}
                                                  +
                                                  +// Good
                                                  +k := User{
                                                  +    FirstName: "John",
                                                  +    LastName: "Doe",
                                                  +    Admin: true,
                                                  +}
                                                  +
                                                  +

                                                  例外:如果有 3 个或更少的字段,则可以在测试表中省略字段名称。

                                                  +
                                                  tests := []struct{
                                                  +  op Operation
                                                  +  want string
                                                  +}{
                                                  +  {Add, "add"},
                                                  +  {Subtract, "subtract"},
                                                  +}
                                                  +
                                                  +
                                                    +
                                                  • 省略结构中的零值字段。
                                                  • +
                                                  +
                                                  // Bad
                                                  +user := User{
                                                  +  FirstName: "John",
                                                  +  LastName: "Doe",
                                                  +  MiddleName: "",
                                                  +  Admin: false,
                                                  +}
                                                  +
                                                  +// Good
                                                  +user := User{
                                                  +  FirstName: "John",
                                                  +  LastName: "Doe",
                                                  +}
                                                  +
                                                  +

                                                  例外:在字段名提供有意义上下文的地方可以显示指定零值。如表驱动单元测试中的测试用例,即使字段为零值,限制指定零值,通过字段名可清晰地表达用例的含义。

                                                  +
                                                  tests := []struct{
                                                  +  give string
                                                  +  want int
                                                  +}{
                                                  +  {give: "0", want: 0},
                                                  +  // ...
                                                  +}
                                                  +
                                                  +
                                                    +
                                                  • 声明零值结构使用关键字 var。
                                                  • +
                                                  +

                                                  如果在声明中省略了结构的所有字段,请使用 var 声明结构,因为这样更加简洁,其各个字段值为字段类型对应的零值。

                                                  +
                                                  // Bad
                                                  +user := User{}
                                                  +
                                                  +// Good
                                                  +var user User
                                                  +
                                                  +
                                                    +
                                                  • 初始化结构指针变量使用字面量
                                                  • +
                                                  +

                                                  初始化结构指针变量时,请使用&T{}代替new(T),可以与结构体初始化在代码风格上保持一致。

                                                  +
                                                  // Bad
                                                  +sval := T{Name: "foo"}
                                                  +
                                                  +// inconsistent
                                                  +sptr := new(T)
                                                  +sptr.Name = "bar"
                                                  +
                                                  +// Good
                                                  +sval := T{Name: "foo"}
                                                  +
                                                  +sptr := &T{Name: "bar"}
                                                  +
                                                  +

                                                  初始化 map

                                                  +

                                                  初始化 map 优先使用 make() 函数而不是字面量,因为这样看起来更容易和申明区分开来。

                                                  +
                                                  // Bad
                                                  +var (
                                                  +  // m1 读写安全
                                                  +  // m2 在写入时会 panic
                                                  +  m1 = map[T1]T2{}
                                                  +  m2 map[T1]T2
                                                  +)
                                                  +// 声明和初始化在视觉上很相似
                                                  +
                                                  +// Good
                                                  +var (
                                                  +  // m1 读写安全
                                                  +  // m2 在写入时会 panic
                                                  +  m1 = make(map[T1]T2)
                                                  +  m2 map[T1]T2
                                                  +)
                                                  +// 声明和初始化在视觉上是不同的
                                                  +
                                                  +

                                                  尽可能地在初始化时提供 map 容量大小。

                                                  +

                                                  例外:如果 map 包含固定的元素列表,则使用字面量初始化 map,这样可以在初始化时指定元素。

                                                  +
                                                  // Bad
                                                  +m := make(map[T1]T2, 3)
                                                  +m[k1] = v1
                                                  +m[k2] = v2
                                                  +m[k3] = v3
                                                  +
                                                  +// Good
                                                  +m := map[T1]T2{
                                                  +  k1: v1,
                                                  +  k2: v2,
                                                  +  k3: v3,
                                                  +}
                                                  +
                                                  +

                                                  初始化 slice

                                                  +
                                                    +
                                                  • 非零值 slice 使用make()初始化,并指定容量。
                                                  • +
                                                  +
                                                  // Bad
                                                  +nums := []int{}
                                                  +
                                                  +// Good
                                                  +nums := make([]int, 0, CAP)
                                                  +
                                                  +
                                                    +
                                                  • 空切片使用 var 声明
                                                  • +
                                                  +

                                                  不管是全局切片还是局部切片,使用 var 申明 nil 切片,代码会更加简洁清晰。

                                                  +
                                                  // Bad
                                                  +func foo() {
                                                  +    // 长度为 0 的非 nil 切片
                                                  +    nums := []int{}
                                                  +}
                                                  +
                                                  +// Good
                                                  +func foo() {
                                                  +    // nil 切片
                                                  +    var nums []int
                                                  +}
                                                  +
                                                  +
                                                    +
                                                  • nil 是一个有效的 slice。
                                                  • +
                                                  +

                                                  nil 是一个有效的长度为 0 的 slice,这意味着,

                                                  +

                                                  (1)您不应明确返回长度为零的切片。应该返回nil 来代替。

                                                  +
                                                  // Bad
                                                  +if x == "" {
                                                  +  return []int{}
                                                  +}
                                                  +
                                                  +// Good
                                                  +if x == "" {
                                                  +  return nil
                                                  +}
                                                  +
                                                  +

                                                  (2)要检查切片是否为空,请始终使用 len(s) == 0 而非 nil。

                                                  +
                                                  // Bad
                                                  +func isEmpty(s []string) bool {
                                                  +  return s == nil
                                                  +}
                                                  +
                                                  +// Good
                                                  +func isEmpty(s []string) bool {
                                                  +  return len(s) == 0
                                                  +}
                                                  +
                                                  +

                                                  (3)零值切片(用var声明的切片)可立即使用,无需调用 make() 创建。

                                                  +
                                                  // Bad
                                                  +nums := []int{}
                                                  +// or, nums := make([]int)
                                                  +
                                                  +if add1 {
                                                  +  nums = append(nums, 1)
                                                  +}
                                                  +
                                                  +if add2 {
                                                  +  nums = append(nums, 2)
                                                  +}
                                                  +
                                                  +// Good
                                                  +var nums []int
                                                  +
                                                  +if add1 {
                                                  +  nums = append(nums, 1)
                                                  +}
                                                  +if add2 {
                                                  +  nums = append(nums, 2)
                                                  +}
                                                  +
                                                  +

                                                  记住,虽然 nil 切片是有效的切片,但它不等于长度为 0 的切片(一个为 nil,另一个不是),并且在不同的情况下(例如序列化),这两个切片的处理方式可能不同。

                                                  +

                                                  申明变量

                                                  +
                                                    +
                                                  • 就近申明。
                                                  • +
                                                  +

                                                  变量申明的位置尽量靠近使用的地方。

                                                  +
                                                  // Bad
                                                  +func foo(m map[string]interface{}) string {
                                                  +    info, _ := m["key"].(Info)
                                                  +    ...
                                                  +    return handle(info)
                                                  +}
                                                  +
                                                  +// Good
                                                  +func foo(m map[string]interface{}) string {
                                                  +    ...
                                                  +    info, _ := m["key"].(Info)
                                                  +    return handle(info)
                                                  +}
                                                  +
                                                  +
                                                    +
                                                  • 相似的声明放在一组。
                                                  • +
                                                  +

                                                  对于变量、常量的声明,相似的声明应该放在一组。类型的定义同样适用。

                                                  +
                                                  // Bad
                                                  +const a = 1
                                                  +const b = 2
                                                  +
                                                  +var a = 1
                                                  +var b = 2
                                                  +
                                                  +type Area float64
                                                  +type Volume float64
                                                  +
                                                  +// Good
                                                  +const (
                                                  +  a = 1
                                                  +  b = 2
                                                  +)
                                                  +
                                                  +var (
                                                  +  a = 1
                                                  +  b = 2
                                                  +)
                                                  +
                                                  +type (
                                                  +  Area float64
                                                  +  Volume float64
                                                  +)
                                                  +
                                                  +

                                                  仅将相关的声明放在一组。不要将不相关的声明放在一组。

                                                  +
                                                  // Bad
                                                  +type Operation int
                                                  +
                                                  +const (
                                                  +  Add Operation = iota + 1
                                                  +  Subtract
                                                  +  Multiply
                                                  +  EnvVar = "MY_ENV"
                                                  +)
                                                  +
                                                  +// Good
                                                  +type Operation int
                                                  +
                                                  +const (
                                                  +  Add Operation = iota + 1
                                                  +  Subtract
                                                  +  Multiply
                                                  +)
                                                  +
                                                  +const EnvVar = "MY_ENV"
                                                  +
                                                  +

                                                  另外,分组使用的位置没有限制,我们也可以在函数内部使用它们。

                                                  +
                                                  // Bad
                                                  +func f() string {
                                                  +  red := color.New(0xff0000)
                                                  +  green := color.New(0x00ff00)
                                                  +  blue := color.New(0x0000ff)
                                                  +  ...
                                                  +}
                                                  +
                                                  +// Good
                                                  +func f() string {
                                                  +  var (
                                                  +    red   = color.New(0xff0000)
                                                  +    green = color.New(0x00ff00)
                                                  +    blue  = color.New(0x0000ff)
                                                  +  )
                                                  +  ...
                                                  +}
                                                  +
                                                  +
                                                    +
                                                  • 全局变量申明使用 var 关键字并省略类型。
                                                  • +
                                                  +

                                                  全局变量使用 var 关键字申明,一般情况下其类型与表达式的类型一致,这种情况下可省略其类型。

                                                  +
                                                  // Bad
                                                  +var s string = F()
                                                  +
                                                  +func F() string { return "A" }
                                                  +
                                                  +// Good
                                                  +// 由于 F 已经明确了返回一个字符串类型,因此我们没有必要显式指定类型。
                                                  +var s = F()
                                                  +
                                                  +func F() string { return "A" }
                                                  +
                                                  +

                                                  如果表达式的类型与所需的类型不完全匹配,请指定类型。

                                                  +
                                                  type myError struct{}
                                                  +
                                                  +func (myError) Error() string { return "error" }
                                                  +
                                                  +func F() myError { return myError{} }
                                                  +
                                                  +// F 返回一个 myError 类型的实例,但是我们要 error 类型。
                                                  +var _e error = F()
                                                  +
                                                  +
                                                    +
                                                  • 局部变量使用短变量声明形式(:=)。
                                                  • +
                                                  +
                                                  // Bad
                                                  +func foo() {
                                                  +    var s = "foo"
                                                  +    var i int64    // 虽然默认为 0,但不够直观
                                                  +    ...
                                                  +}
                                                  +
                                                  +// Good
                                                  +func foo() {
                                                  +    s := "foo"
                                                  +    i := in64(0) // 显示指明 0,更加直观
                                                  +    ...
                                                  +}
                                                  +
                                                  +

                                                  例外,如果是相似的一组变量,请使用 var 声明到一组。

                                                  +
                                                  // Bad
                                                  +func foo() {
                                                  +    s1 := "foo"
                                                  +    s2 := "bar"
                                                  +    ...
                                                  +}
                                                  +
                                                  +// Good
                                                  +func foo() {
                                                  +    var (
                                                  +        s1 = "foo"
                                                  +        s2 = "bar"
                                                  +    )
                                                  +    ...
                                                  +}
                                                  +
                                                  +
                                                    +
                                                  • 如果全局变量仅在单个函数内使用,则应该定义为局部变量。
                                                  • +
                                                  +

                                                  避免使用 init()

                                                  +

                                                  尽可能避免使用 init(),当 init() 不可避免时,init() 应该做到: +(1)无论程序环境或调用如何,行为都必须是完全确定的; +(2)避免依赖其他 init() 函数的顺序或副作用。虽然 init() 顺序是明确的,但代码可以更改, 因此 init() 函数之间的关系可能会使代码变得脆弱和容易出错; +(3)避免访问或操作全局变量和环境状态,如机器信息、环境变量、工作目录、程序参数/输入等; +(4)避免 I/O,包括文件系统、网络和系统调用。

                                                  +

                                                  不能满足这些要求的代码可能要在 main() 函数中被调用(或程序生命周期中的其他地方),或作为 main() 函数本身的一部分。特别是打算给其他程序使用的库应该特别注意代码行为的完全确定性, 而不是执行“init magic”。

                                                  +
                                                  // Bad
                                                  +type Foo struct {
                                                  +    // ...
                                                  +}
                                                  +var _defaultFoo Foo
                                                  +func init() {
                                                  +    _defaultFoo = Foo{
                                                  +        // ...
                                                  +    }
                                                  +}
                                                  +
                                                  +// Good
                                                  +var _defaultFoo = Foo{
                                                  +    // ...
                                                  +}
                                                  +// 或者为了更好的可测试性
                                                  +var _defaultFoo = defaultFoo()
                                                  +func defaultFoo() Foo {
                                                  +    return Foo{
                                                  +        // ...
                                                  +    }
                                                  +}
                                                  +
                                                  +// Bad
                                                  +type Config struct {
                                                  +    // ...
                                                  +}
                                                  +var _config Config
                                                  +func init() {
                                                  +    // Bad: 基于当前目录
                                                  +    cwd, _ := os.Getwd()
                                                  +    // Bad: I/O
                                                  +    raw, _ := ioutil.ReadFile(
                                                  +        path.Join(cwd, "config", "config.yaml"),
                                                  +    )
                                                  +    yaml.Unmarshal(raw, &_config)
                                                  +}
                                                  +
                                                  +// Good
                                                  +type Config struct {
                                                  +    // ...
                                                  +}
                                                  +func loadConfig() Config {
                                                  +    cwd, err := os.Getwd()
                                                  +    // handle err
                                                  +    raw, err := ioutil.ReadFile(
                                                  +        path.Join(cwd, "config", "config.yaml"),
                                                  +    )
                                                  +    // handle err
                                                  +    var config Config
                                                  +    yaml.Unmarshal(raw, &config)
                                                  +    return config
                                                  +}
                                                  +
                                                  +

                                                  凡事无绝对,某些情况下,init() 可能更可取或是必要的:

                                                  +

                                                  (1)不能表示为单个赋值的复杂表达式;

                                                  +

                                                  (2)可插入的钩子,如 database/sql、编码类型注册表等;

                                                  +

                                                  (3)对 Google Cloud Functions 和其他形式的确定性预计算的优化。

                                                  +
                                                  powered by Gitbook该文章修订时间: +2022-05-22 15:43:51 +
                                                  + + +
                                                  + +
                                                  +
                                                  +
                                                  + +

                                                  results matching ""

                                                  +
                                                    + +
                                                    +
                                                    + +

                                                    No results matching ""

                                                    + +
                                                    +
                                                    +
                                                    + +
                                                    +
                                                    + +
                                                    + + + + + + + + + + + + + + +
                                                    + + +
                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/6.\351\224\231\350\257\257\345\244\204\347\220\206.html" "b/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/6.\351\224\231\350\257\257\345\244\204\347\220\206.html" new file mode 100644 index 0000000..0bcbad2 --- /dev/null +++ "b/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/6.\351\224\231\350\257\257\345\244\204\347\220\206.html" @@ -0,0 +1,1332 @@ + + + + + + + 6.错误处理 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                    +
                                                    + + + + + + + + +
                                                    + +
                                                    + +
                                                    + + + + + + + + +
                                                    +
                                                    + +
                                                    +
                                                    + +
                                                    + +

                                                    error 处理

                                                    +
                                                      +
                                                    • 显示处理 error。
                                                    • +
                                                    +

                                                    如果 error 作为函数的值返回,必须对 error 进行处理,或使用空白标识符忽略。对于defer xx.Close()可以不用显式处理。

                                                    +
                                                      +
                                                    • error 作为函数返回值且有多个返回值的时候,error 必须是最后一个参数。
                                                    • +
                                                    +
                                                    // Bad
                                                    +func do() (error, int) {
                                                    +}
                                                    +
                                                    +// Good
                                                    +func do() (int, error) {
                                                    +}
                                                    +
                                                    +
                                                      +
                                                    • 采用独立的错误流进行处理。 +```go +// Bad +if err != nil { + // handle error +} else { + // normal code +}
                                                    • +
                                                    +

                                                    // Good +if err != nil { + // handle error + return // or continue, etc. +} +// normal code

                                                    +
                                                    - Fail Fast 原则。
                                                    +
                                                    +如果出现失败应该立即返回error,如果继续处理,则属于特殊情况需要添加注释。
                                                    +
                                                    +- 如果函数返回值需用于初始化其他变量,则采用下面的方式。
                                                    +
                                                    +```go
                                                    +x, err := f()
                                                    +if err != nil {
                                                    +    // error handling
                                                    +    return // or continue, etc.
                                                    +}
                                                    +// use x
                                                    +
                                                      +
                                                    • 错误判断独立处理,不与其他变量组合判断。
                                                    • +
                                                    +

                                                    一个可能引发的问题就是 err 如果为 nil,但是满足其他逻辑进入到 if 块内,读取 err 值将引发 panic。

                                                    +
                                                    // Bad
                                                    +x, y, err := f()
                                                    +if err != nil || y == nil {
                                                    +    return err   // 当y与err都为空时,函数的调用者会出现错误的调用逻辑
                                                    +}
                                                    +
                                                    +// Good
                                                    +x, y, err := f()
                                                    +if err != nil {
                                                    +    return err
                                                    +}
                                                    +if y == nil {
                                                    +    return fmt.Errorf("some error")
                                                    +}
                                                    +
                                                    +
                                                      +
                                                    • 生成带参数的 error 使用 fmt.Errorf。 +```go +// Bad +errors.New(fmt.Sprintf("module xxx: %v",err))
                                                    • +
                                                    +

                                                    // Good +fmt.Errorf("module xxx: %v", err)

                                                    +
                                                    - 不要包装系统调用错误,并给出一些没意义的附加信息。
                                                    +
                                                    +```go
                                                    +// Bad
                                                    +err := exe.Run()
                                                    +if err != nil {
                                                    +    return fmt.Errorf("run error %s", err.Error())
                                                    +}
                                                    +
                                                    +// Good
                                                    +return exe.Run()
                                                    +

                                                    panic 处理

                                                    +
                                                      +
                                                    • 不要随便 panic。
                                                    • +
                                                    +

                                                    在业务逻辑处理中禁止使用 panic。因为 panic 是级联失败(cascading failures)的主要根源。如果发生错误,该函数应该返回错误,让调用方决定如何处理它。

                                                    +
                                                    // Bad
                                                    +func run(args []string) {
                                                    +  if len(args) == 0 {
                                                    +    panic("an argument is required")
                                                    +  }
                                                    +  // ...
                                                    +}
                                                    +
                                                    +func main() {
                                                    +  run(os.Args[1:])
                                                    +}
                                                    +
                                                    +// Good
                                                    +func run(args []string) error {
                                                    +  if len(args) == 0 {
                                                    +    return errors.New("an argument is required")
                                                    +  }
                                                    +  // ...
                                                    +  return nil
                                                    +}
                                                    +
                                                    +func main() {
                                                    +  if err := run(os.Args[1:]); err != nil {
                                                    +    fmt.Fprintln(os.Stderr, err)
                                                    +    os.Exit(1)
                                                    +  }
                                                    +}
                                                    +
                                                    +

                                                    panic/recover 不是错误处理的合适策略,仅当发生不可恢复的异常(如 nil 引用)时,才可以 panic。

                                                    +

                                                    在 main 包中程序初始化是一个例外,如程序启动时,文件无法打开或数据库无法连接导致程序无法正常运行可使用 panic。

                                                    +

                                                    对于其它的包,可导出的接口也不能有 panic。

                                                    +
                                                      +
                                                    • 在 main 包中使用 log.Fatal 或 log.Fatalf 结束程序而不是 panic。
                                                    • +
                                                    +

                                                    如果 main 中需要使用 panic,建议使用 log.Fatal 或 log.Fatalf 来取代 panic,因为这样可以记录错误的同时结束程序,方便排查问题。

                                                    +
                                                      +
                                                    • panic 只能在当前 Goroutine 被捕获。
                                                    • +
                                                    +

                                                    panic 捕获最晚要在当前 Goroutine 最顶层将其捕获,在其他 Goroutine 中无法捕获当前 Goroutine 的 panic。每个自行启动的 Goroutine,必须在入口处捕获 panic,并打印详细堆栈信息或进行其它处理。

                                                    +

                                                    下面是一个反面示例,其他 Goroutine 中无法捕获当前 Goroutine 的 panic。

                                                    +
                                                    package main
                                                    +
                                                    +import (
                                                    +    "fmt"
                                                    +    "time"
                                                    +)
                                                    +
                                                    +func main() {
                                                    +    defer func() {
                                                    +        if err := recover(); err != nil {
                                                    +            fmt.Println(err)
                                                    +        }
                                                    +    }()
                                                    +    go func() {
                                                    +        fmt.Println("======begin work======")
                                                    +        panic("nil pointer exception")
                                                    +    }()
                                                    +    time.Sleep(1 * time.Second)
                                                    +    fmt.Println("======after work======")
                                                    +}
                                                    +
                                                    +

                                                    程序将意外终止并输出:

                                                    +
                                                    ======begin work======
                                                    +panic: nil pointer exception
                                                    +
                                                    +goroutine 6 [running]:
                                                    +main.main.func2()
                                                    +        /Users/dablelv/work/code/test/main.go:16 +0x65
                                                    +created by main.main
                                                    +        /Users/dablelv/work/code/test/main.go:14 +0x48
                                                    +

                                                    recover 处理

                                                    +
                                                      +
                                                    • recover 用于捕获 runtime 的异常,禁止滥用 recover。
                                                    • +
                                                    • recover 只有在 defer 中调用才会生效。
                                                    • +
                                                    +

                                                    必须在 defer 中使用,一般用来捕获程序运行期间发生异常抛出的 panic 或程序主动抛出的 panic。

                                                    +
                                                    package main
                                                    +
                                                    +import (
                                                    +    "log"
                                                    +)
                                                    +
                                                    +func main() {
                                                    +    defer func() {
                                                    +        if err := recover(); err != nil {
                                                    +            // do something or record log
                                                    +            log.Println("exec panic error: ", err)
                                                    +            // log.Println(debug.Stack())
                                                    +        }
                                                    +    }()
                                                    +
                                                    +    getOne()
                                                    +
                                                    +    panic(44) //手动抛出 panic
                                                    +}
                                                    +
                                                    +// getOne 模拟 slice 越界运行时抛出的 panic。
                                                    +func getOne() {
                                                    +    defer func() {
                                                    +        if err := recover(); err != nil {
                                                    +            // do something or record log
                                                    +            log.Println("exec panic error: ", err)
                                                    +            // log.Println(debug.Stack())
                                                    +        }
                                                    +    }()
                                                    +
                                                    +    var arr = []string{"a", "b", "c"}
                                                    +    log.Println("hello,", arr[4])
                                                    +}
                                                    +
                                                    +

                                                    运行结果:

                                                    +
                                                    2022/03/27 10:48:42 exec panic error:  runtime error: index out of range [4] with length 3
                                                    +2022/03/27 10:48:42 exec panic error:  44
                                                    +

                                                    类型断言

                                                    +
                                                      +
                                                    • 类型断言使用 comma ok 式
                                                    • +
                                                    +

                                                    类型断言的单个返回值形式如果断言失败将产生 panic。因此,请始终使用 comma ok 式。如果不关心是否成功,ok 可显示使用空标识符(下划线)忽略。

                                                    +
                                                    // Bad
                                                    +t := i.(string)
                                                    +
                                                    +// Good
                                                    +t, ok := i.(string)
                                                    +if !ok {
                                                    +    // 优雅地处理错误。
                                                    +}
                                                    +
                                                    +// 如果不关心是否成功,可显示忽略 ok。
                                                    +t, _ := i.(string)
                                                    +
                                                    +
                                                    powered by Gitbook该文章修订时间: +2022-05-22 15:47:37 +
                                                    + + +
                                                    + +
                                                    +
                                                    +
                                                    + +

                                                    results matching ""

                                                    +
                                                      + +
                                                      +
                                                      + +

                                                      No results matching ""

                                                      + +
                                                      +
                                                      +
                                                      + +
                                                      +
                                                      + +
                                                      + + + + + + + + + + + + + + +
                                                      + + +
                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/7.\346\263\250\351\207\212.html" "b/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/7.\346\263\250\351\207\212.html" new file mode 100644 index 0000000..e20e2bd --- /dev/null +++ "b/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/7.\346\263\250\351\207\212.html" @@ -0,0 +1,1247 @@ + + + + + + + 7.注释 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                      +
                                                      + + + + + + + + +
                                                      + +
                                                      + +
                                                      + + + + + + + + +
                                                      +
                                                      + +
                                                      +
                                                      + +
                                                      + +

                                                      在编码阶段同步写好类型、变量、函数、包注释,注释可以通过godoc导出生成文档。

                                                      +

                                                      程序中每一个被导出的(大写的)名字,都应该有一个文档注释。

                                                      +

                                                      所有注释掉的代码在提交 Code Review 前都应该被删除,除非添加注释讲解为什么不删除, 并且标明后续处理建议(如删除计划)。

                                                      +

                                                      通用

                                                      +
                                                        +
                                                      • 不要用注释删除代码。
                                                      • +
                                                      • // 后面要有空格。
                                                      • +
                                                      • 中英文之间应该有空格。
                                                      • +
                                                      • 特殊实现需要注释。
                                                      • +
                                                      • 注释结束添加点或句号,参考标准库源码注释。
                                                      • +
                                                      +

                                                      包注释

                                                      +
                                                        +
                                                      • 每个包都应该有一个包注释。
                                                      • +
                                                      • 包如果有多个 go 文件,只需要出现在一个 go 文件中(一般是和包同名的文件)即可。
                                                      • +
                                                      • 格式为// Package 包名 包信息描述
                                                      • +
                                                      +
                                                      // Package math provides basic constants and mathematical functions.
                                                      +package math
                                                      +
                                                      +// 或者
                                                      +
                                                      +/*
                                                      +Package template implements data-driven templates for generating textual
                                                      +output such as HTML.
                                                      +....
                                                      +*/
                                                      +package template
                                                      +
                                                      +

                                                      函数注释

                                                      +
                                                        +
                                                      • 导出的函数和方法(结构体或接口下的函数称为方法)都必须有注释。
                                                      • +
                                                      +

                                                      注释描述函数或方法功能、调用方等信息。格式为:"// 函数名 函数信息描述"。

                                                      +

                                                      注意,如果方法的接收器为不可导出类型,可以不注释,但需要质疑该方法可导出的必要性。

                                                      +
                                                      // NewtAttrModel 是属性数据层操作类的工厂方法
                                                      +func NewAttrModel(ctx *common.Context) *AttrModel {
                                                      +    // TODO
                                                      +}
                                                      +
                                                      +
                                                        +
                                                      • 避免参数语义不明确。
                                                      • +
                                                      +

                                                      函数调用中意义不明确的实参可能会损害代码可读性。当参数名称的含义不明显时,请为参数添加 C 样式注释 (/* ... */)

                                                      +
                                                      // Bad
                                                      +// func printInfo(name string, isLocal, done bool)
                                                      +printInfo("foo", true, true)
                                                      +
                                                      +// Good 
                                                      +// func printInfo(name string, isLocal, done bool)
                                                      +printInfo("foo", true /* isLocal */, true /* done */)
                                                      +
                                                      +

                                                      对于上面的示例代码,还有一种更好的处理方式是将上面的 bool 类型换成自定义类型。将来,该参数可以支持不仅仅局限于两个状态(true/false)。

                                                      +
                                                      type Region int
                                                      +
                                                      +const (
                                                      +  UnknownRegion Region = iota
                                                      +  Local
                                                      +)
                                                      +
                                                      +type Status int
                                                      +
                                                      +const (
                                                      +  StatusReady Status= iota + 1
                                                      +  StatusDone
                                                      +  // Maybe we will have a StatusInProgress in the future.
                                                      +)
                                                      +
                                                      +func printInfo(name string, region Region, status Status)
                                                      +
                                                      +
                                                        +
                                                      • 非导出的函数,如果比较简单,不需要注释。
                                                      • +
                                                      • 解析函数应该注明解析字符串的范例,并明确不能处理的异常情况。
                                                      • +
                                                      +

                                                      结构体注释

                                                      +
                                                        +
                                                      • 每个需要导出的自定义结构体或者接口都必须有注释说明。
                                                      • +
                                                      +

                                                      注释对结构进行简要介绍,放在结构体定义的前一行。格式为:"// 结构体名 结构体信息描述"。

                                                      +
                                                        +
                                                      • 必要情况下字段给出注释。
                                                      • +
                                                      +

                                                      结构体内的可导出成员变量名,如果是个生僻词或意义不明确的词,必须要单独给出注释,放在成员变量的前一行或同一行的末尾。

                                                      +
                                                      // User 用户结构定义了用户基础信息
                                                      +type User struct {
                                                      +    Name  string
                                                      +    Email string
                                                      +    Demographic string // 族群
                                                      +}
                                                      +
                                                      +

                                                      变量和常量注释

                                                      +
                                                        +
                                                      • 每个需要导出的变量和常量都必须有注释说明。
                                                      • +
                                                      +

                                                      注释对变量和常量进行简要介绍,放在常量或变量定义的前一行。独行注释格式为:"// 变量名 描述",斜线后面紧跟一个空格。

                                                      +
                                                      // FlagConfigFile 配置文件的命令行参数名。
                                                      +const FlagConfigFile = "--config"
                                                      +
                                                      +// FullName 返回指定用户名的完整名称。
                                                      +var FullName = func(username string) string {
                                                      +    return fmt.Sprintf("fake-%s", username)
                                                      +}
                                                      +
                                                      +
                                                        +
                                                      • 大块变量或常量定义时的注释方式。
                                                      • +
                                                      +

                                                      块注释即在代码块前给出一个总的说明,然后每行变量或常量的末尾给出详细注释,这样看起来更加简洁。

                                                      +
                                                      // 命令行参数。
                                                      +const (
                                                      +    FlagConfigFile1 = "--config" // 配置文件的命令行参数名 1。
                                                      +    FlagConfigFile2 = "--config" // 配置文件的命令行参数名 2。
                                                      +    FlagConfigFile3 = "--config" // 配置文件的命令行参数名 3。
                                                      +    FlagConfigFile4 = "--config" // 配置文件的命令行参数名 4。
                                                      +)
                                                      +
                                                      +
                                                        +
                                                      • 命名清晰的地方,不要添加无意义的注释。

                                                        类型注释

                                                        +
                                                      • +
                                                      • 每个需要导出的类型定义(type definition)和类型别名(type aliases)都必须有注释说明。
                                                      • +
                                                      • 该注释对类型进行简要介绍,放在定义的前一行。
                                                      • +
                                                      • 格式为:"// 类型名 描述"。
                                                      • +
                                                      +
                                                      // StorageClass 存储类型
                                                      +type StorageClass string
                                                      +
                                                      +// FakeTime 标准库时间的类型别名
                                                      +type FakeTime = time.Time
                                                      +
                                                      +

                                                      接口注释

                                                      +
                                                        +
                                                      • 导出与非导出接口均需要有注释。
                                                      • +
                                                      • 需要描述谁,在什么场景下,如何使用接口。
                                                      • +
                                                      +
                                                      powered by Gitbook该文章修订时间: +2022-05-22 15:50:17 +
                                                      + + +
                                                      + +
                                                      +
                                                      +
                                                      + +

                                                      results matching ""

                                                      +
                                                        + +
                                                        +
                                                        + +

                                                        No results matching ""

                                                        + +
                                                        +
                                                        +
                                                        + +
                                                        +
                                                        + +
                                                        + + + + + + + + + + + + + + +
                                                        + + +
                                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/8.\345\221\275\345\220\215.html" "b/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/8.\345\221\275\345\220\215.html" new file mode 100644 index 0000000..bbb18aa --- /dev/null +++ "b/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/8.\345\221\275\345\220\215.html" @@ -0,0 +1,1432 @@ + + + + + + + 8.命名 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                        +
                                                        + + + + + + + + +
                                                        + +
                                                        + +
                                                        + + + + + + + + +
                                                        +
                                                        + +
                                                        +
                                                        + +
                                                        + +

                                                        命名是代码规范中很重要的一部分,统一的命名规范有利于提高代码的可读性,好的命名仅仅通过命名就可以获取到足够多的信息。

                                                        +

                                                        通用规则

                                                        +
                                                          +
                                                        • 不要用宽泛、无意义的名字,如:

                                                          +
                                                            +
                                                          • util
                                                          • +
                                                          • helper
                                                          • +
                                                          • info
                                                          • +
                                                          • common
                                                          • +
                                                          +
                                                        • +
                                                        • 缩略语要么全小写,要么全大写。

                                                          +
                                                        • +
                                                        +
                                                        // Bad
                                                        +Md5
                                                        +Uid
                                                        +
                                                        +// Good
                                                        +MD5
                                                        +md5
                                                        +UID
                                                        +uid
                                                        +
                                                        +
                                                          +
                                                        • 非缩略语则应该使用驼峰命名。
                                                        • +
                                                        • 不要使用2/4来表达英文 to/for。
                                                        • +
                                                        • 如无必要,不要起和包相同的名字。
                                                        • +
                                                        +

                                                        项目命名

                                                        +
                                                          +
                                                        • 小写,如果有多个单词使用连字符分隔。
                                                        • +
                                                        +
                                                        // Bad
                                                        +GoEcharts
                                                        +goecharts
                                                        +goEcharts
                                                        +
                                                        +// Good
                                                        +go-echarts
                                                        +
                                                        +

                                                        包命名

                                                        +
                                                          +
                                                        • 保持 package 的名字和目录一致。
                                                        • +
                                                        • 尽量采取有意义、简短的包名,尽量不要和标准库冲突。
                                                        • +
                                                        • 包名应该为小写单词,不要使用下划线或者混合大小写,使用多级目录来划分层级。
                                                        • +
                                                        • 简单明了的包命名,如:time、list、http。
                                                        • +
                                                        • 不用复数。如 net/url 而不是net/urls。
                                                        • +
                                                        • 包名谨慎使用缩写。当缩写是程序员广泛熟知的词时,可以使用缩写。例如:
                                                            +
                                                          • strconv (string conversion)
                                                          • +
                                                          • syscall (system call)
                                                          • +
                                                          • fmt (formatted I/O)
                                                          • +
                                                          +
                                                        • +
                                                        • 不要使用大而全的无意义包名。
                                                        • +
                                                        +

                                                        util、common、misc、global。package 名字应该追求清晰且越来越收敛,符合‘单一职责’原则,而不是像common一样,什么都能往里面放,越来越膨胀,让依赖关系变得复杂,不利于阅读、复用、重构。注意,xxx/utils/encryption这样的包名是允许的。

                                                        +
                                                          +
                                                        • 只有一个源文件的包,包名应该和文件名保持一致。
                                                        • +
                                                        • 不要轻易使用别名。
                                                        • +
                                                        +

                                                        更多可参考 Package names - The Go Blog 和 [Style guideline for Go packages] +(https://rakyll.org/style-packages/)。

                                                        +

                                                        文件命名

                                                        +
                                                          +
                                                        • 采用有意义、简短的文件名。
                                                        • +
                                                        • 文件名应该采用小写,并且使用下划线分割各个单词。
                                                        • +
                                                        +

                                                        函数命名

                                                        +
                                                          +
                                                        • 函数名必须遵循驼峰式,首字母根据访问控制决定使用大写或小写。
                                                        • +
                                                        • 代码生成工具自动生成的代码可排除此规则(如协议生成文件 xxx.pb.go,gotests 工具自动生成文件 xxx_test.go 里面的下划线)。
                                                        • +
                                                        • 函数应该以动词开头。
                                                        • +
                                                        +
                                                        // Bad
                                                        +func panicLinesParsing(){}
                                                        +func (f VerifyFlow) DataETL(ctx context.Context, datas []Data){}
                                                        +
                                                        +// Good
                                                        +func parsePanicLines(){}
                                                        +func (f VerifyFlow) ETLData(ctx context.Context, datas []Data){}
                                                        +
                                                        +

                                                        结构体命名

                                                        +
                                                          +
                                                        • 采用驼峰命名方式,首字母根据访问控制采用大写或者小写。
                                                        • +
                                                        • 结构体名应该是名词或名词短语,如 Customer、WikiPage、Account、AddressParser,它不应是动词。
                                                        • +
                                                        • 避免使用 Data、Info 这类意义太宽泛的结构体名。
                                                        • +
                                                        • 结构体的定义和初始化格式采用多行。
                                                        • +
                                                        +
                                                        // User 多行定义。
                                                        +type User struct {
                                                        +    Name  string
                                                        +    Email string
                                                        +}
                                                        +
                                                        +// 多行初始化。
                                                        +u := User{
                                                        +    UserName: "john",
                                                        +    Email:    "john@example.com",
                                                        +}
                                                        +
                                                        +

                                                        接口命名

                                                        +
                                                          +
                                                        • 命名规则基本保持和结构体命名规则一致。
                                                        • +
                                                        • 单个函数的接口名以 er 作为后缀,如 Reader,Writer。
                                                        • +
                                                        +
                                                        // Reader 字节数组读取接口。
                                                        +type Reader interface {
                                                        +    // Read 读取整个给定的字节数据并返回读取的长度
                                                        +    Read(p []byte) (n int, err error)
                                                        +}
                                                        +
                                                        +
                                                          +
                                                        • 两个函数的接口名综合两个函数名。
                                                        • +
                                                        • 三个以上函数的接口名,类似于结构体名。
                                                        • +
                                                        +
                                                        // Car 小汽车结构申明。
                                                        +type Car interface {
                                                        +    // Start ...
                                                        +    Start([]byte)
                                                        +    // Stop ...
                                                        +    Stop() error
                                                        +    // Recover ...
                                                        +    Recover()
                                                        +}
                                                        +
                                                        +

                                                        量命名

                                                        +

                                                        通用

                                                        +
                                                          +
                                                        • 量名不应该以类型作为前缀/后缀。
                                                        • +
                                                        +
                                                        // map
                                                        +filterHandlerMap -> opToHandler
                                                        +
                                                        +// slice
                                                        +uidSlice -> uids
                                                        +
                                                        +// array
                                                        +uidArray -> uids 
                                                        +
                                                        +// 二维切片或数组。
                                                        +// 比如多个班级下的学生ID。
                                                        +uidSliceSlice -> classesUIDs
                                                        +
                                                        +
                                                          +
                                                        • 量名应该是名词,进行时和过去式可以做形容词,成为量名的一部分。
                                                        • +
                                                        • 特有名词时,需遵循以下规则:
                                                            +
                                                          • 如果变量为私有,且特有名词为首个单词,则使用小写,如 apiClient;
                                                          • +
                                                          • 其他情况都应该使用该名词原有的写法,如 APIClient、repoID、UserID;
                                                          • +
                                                          • 错误示例:UrlArray,应该写成 urlArray 或者 URLArray;
                                                          • +
                                                          • 详细的专有名词列表可参考这里
                                                          • +
                                                          +
                                                        • +
                                                        • 尽量不要用拼音命名。
                                                        • +
                                                        • 量名遵循驼峰式,根据是否导出决定首字母大小写。
                                                        • +
                                                        +
                                                        // 导出全局变量。
                                                        +var AppVersion = "1.0.0"
                                                        +// 未导出全局变量。
                                                        +var appVersion = "1.0.0"
                                                        +
                                                        +// 导出全局常量。
                                                        +const AppVersion = "1.0.0"
                                                        +// 未导出全局常量。
                                                        +const appVersion = "1.0.0"
                                                        +
                                                        +
                                                          +
                                                        • 若量类型为 bool 类型,则名称应以 Has,Is,Can 或 Allow 等单词开头。
                                                        • +
                                                        • 私有量和局部量规范一致,均以小写字母开头。
                                                        • +
                                                        • 作用域较小的名字(局部变量/函数参数),尽量使用简短的名字。
                                                        • +
                                                        +

                                                        如 c 比 lineCount 要好,i 比 sliceIndex 要好。

                                                        +
                                                        // Bad
                                                        +lineCount := getlineCount()
                                                        +    for sliceIndex := range msgs {
                                                        +}
                                                        +
                                                        +// Good
                                                        +c := getlineCount()
                                                        +    for i := range msgs {
                                                        +}
                                                        +
                                                        +
                                                          +
                                                        • 作用域较大的名字(全局变量),不要使用缩写,要有明确的意义。
                                                        • +
                                                        +

                                                        如 lineCount 要比 c 好,sliceIndex 要比 i 好。

                                                        +
                                                        // Bad
                                                        +var c, i int
                                                        +
                                                        +// Good
                                                        +var lineCount, sliceIndex int
                                                        +
                                                        +
                                                          +
                                                        • 全局量中不要包含格式化字符,否则必然违反就近原则。
                                                        • +
                                                        +
                                                        // Bad
                                                        +var (
                                                        +    tGitHost     = "https://git.code.oa.com"
                                                        +    mrCommitsUri = "/api/v3/projects/%s/merge_request/%s/commits"
                                                        +)
                                                        +
                                                        +// Good
                                                        +func getMRCommitsUri() string {
                                                        +    return fmt.Sprintf("/api/v3/projects/%s/merge_request/%s/commits", "foo", "bar")
                                                        +}
                                                        +
                                                        +

                                                        常量命名

                                                        +
                                                          +
                                                        • 如果是枚举类型的常量,需要先创建相应类型。
                                                        • +
                                                        +
                                                        // Scheme 传输协议。
                                                        +type Scheme string
                                                        +
                                                        +// 传输协议。
                                                        +const (
                                                        +    HTTP Scheme = "http"     // HTTP 明文传输协议
                                                        +    HTTPS Scheme = "https"     // HTTPS 加密传输协议
                                                        +)
                                                        +
                                                        +

                                                        方法接收器命名

                                                        +
                                                          +
                                                        • 推荐以类名第一个英文首字母的小写作为接收器的命名。
                                                        • +
                                                        • 接收器的名称在函数超过 20 行的时候不要用单字符。
                                                        • +
                                                        • 命名不能采用 me,this,self 这类易混淆名称。
                                                        • +
                                                        +

                                                        错误命名

                                                        +

                                                        对于存储为全局变量的错误值,根据是否导出,使用前缀 Err 或 err。

                                                        +
                                                        var (
                                                        +  // 导出以下两个错误,以便此包的用户可以将它们与errors.Is 进行匹配。
                                                        +  ErrBrokenLink = errors.New("link is broken")
                                                        +  ErrCouldNotOpen = errors.New("could not open")
                                                        +
                                                        +  // 这个错误没有被导出,因为我们不想让它成为我们公共 API 的一部分。
                                                        +  errNotFound = errors.New("not found")
                                                        +)
                                                        +
                                                        +

                                                        对于自定义错误类型,请改用后缀 Error。

                                                        +
                                                        // 这个错误被导出,以便这个包的用户可以将它与 errors.As 匹配。
                                                        +type NotFoundError struct {
                                                        +  File string
                                                        +}
                                                        +
                                                        +func (e *NotFoundError) Error() string {
                                                        +  return fmt.Sprintf("file %q not found", e.File)
                                                        +}
                                                        +
                                                        +// 这个错误没有被导出,因为我们不想让它成为公共 API 的一部分。
                                                        +// 但我们仍然可以在的包内将其和 errors.As 一起使用。
                                                        +type resolveError struct {
                                                        +  Path string
                                                        +}
                                                        +
                                                        +func (e *resolveError) Error() string {
                                                        +  return fmt.Sprintf("resolve %q", e.Path)
                                                        +}
                                                        +
                                                        +

                                                        避免使用内置名称

                                                        +

                                                        Go 语言规范 language specification 概述了几个内置的,不应在 Go 项目中使用的标识符 [predeclared identifiers] +(https://golang.org/ref/spec#Predeclared_identifiers)。

                                                        +
                                                        Types:
                                                        +    bool byte complex64 complex128 error float32 float64
                                                        +    int int8 int16 int32 int64 rune string
                                                        +    uint uint8 uint16 uint32 uint64 uintptr
                                                        +
                                                        +Constants:
                                                        +    true false iota
                                                        +
                                                        +Zero value:
                                                        +    nil
                                                        +
                                                        +Functions:
                                                        +    append cap close complex copy delete imag len
                                                        +    make new panic print println real recover
                                                        +

                                                        在使用预先分配的标识符时编译器不会报告错误,但是诸如go vet之类的工具会正确地指出这些和其他情况下的隐式问题。

                                                        +
                                                        // Bad
                                                        +// 作用域内隐式覆盖 error interface
                                                        +var error string
                                                        +
                                                        +func handleErrorMessage(error string) {
                                                        +    // 作用域隐藏内置 error
                                                        +}
                                                        +
                                                        +type Foo struct {
                                                        +    // 虽然这些使用内置标识符的自定义字段可以编译通过,但对 error 或 string 字符串的搜索存在二义性
                                                        +    error  error
                                                        +    string string
                                                        +}
                                                        +
                                                        +func (f Foo) Error() error {
                                                        +    // error 和 f.error 在视觉上是相似的
                                                        +    return f.error
                                                        +}
                                                        +
                                                        +func (f Foo) String() string {
                                                        +    // string and f.string 在视觉上是相似的
                                                        +    return f.string
                                                        +}
                                                        +
                                                        +// Good
                                                        +var errorMessage string
                                                        +
                                                        +func handleErrorMessage(msg string) {
                                                        +}
                                                        +
                                                        +type Foo struct {
                                                        +    // error 和 string 现在是明确的
                                                        +    err error
                                                        +    str string
                                                        +}
                                                        +
                                                        +func (f Foo) Error() error {
                                                        +    return f.err
                                                        +}
                                                        +
                                                        +func (f Foo) String() string {
                                                        +    return f.str
                                                        +}
                                                        +
                                                        +
                                                        powered by Gitbook该文章修订时间: +2022-05-22 15:54:25 +
                                                        + + +
                                                        + +
                                                        +
                                                        +
                                                        + +

                                                        results matching ""

                                                        +
                                                          + +
                                                          +
                                                          + +

                                                          No results matching ""

                                                          + +
                                                          +
                                                          +
                                                          + +
                                                          +
                                                          + +
                                                          + + + + + + + + + + + + + + +
                                                          + + +
                                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/9.\346\265\201\347\250\213\346\216\247\345\210\266.html" "b/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/9.\346\265\201\347\250\213\346\216\247\345\210\266.html" new file mode 100644 index 0000000..c5dbb1d --- /dev/null +++ "b/docs/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/9.\346\265\201\347\250\213\346\216\247\345\210\266.html" @@ -0,0 +1,1433 @@ + + + + + + + 9.流程控制 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                          +
                                                          + + + + + + + + +
                                                          + +
                                                          + +
                                                          + + + + + + + + +
                                                          +
                                                          + +
                                                          +
                                                          + +
                                                          + +

                                                          if

                                                          +
                                                            +
                                                          • 最小化变量作用域。
                                                          • +
                                                          +

                                                          if 接受初始化语句,尽可能缩小变量作用域。

                                                          +
                                                          // Bad
                                                          +err := file.Chmod(0664)
                                                          +if err != nil {
                                                          +    return err
                                                          +}
                                                          +
                                                          +// Good
                                                          +if err := file.Chmod(0664); err != nil {
                                                          +    return err
                                                          +}
                                                          +
                                                          +

                                                          如果需要在 if 之外使用函数调用的结果,则不应尝试缩小范围。

                                                          +
                                                          // Bad
                                                          +if data, err := ioutil.ReadFile(name); err == nil {
                                                          +  err = cfg.Decode(data)
                                                          +  if err != nil {
                                                          +    return err
                                                          +  }
                                                          +
                                                          +  fmt.Println(cfg)
                                                          +  return nil
                                                          +} else {
                                                          +  return err
                                                          +}
                                                          +
                                                          +// Good
                                                          +data, err := ioutil.ReadFile(name)
                                                          +if err != nil {
                                                          +   return err
                                                          +}
                                                          +
                                                          +if err := cfg.Decode(data); err != nil {
                                                          +  return err
                                                          +}
                                                          +
                                                          +fmt.Println(cfg)
                                                          +return nil
                                                          +
                                                          +
                                                            +
                                                          • if 对两个值进行判断时,被比较的值放在左边。
                                                          • +
                                                          +
                                                          // Bad
                                                          +if nil != err {
                                                          +    // error handling
                                                          +}
                                                          +if 0 == errorCode {
                                                          +    // do something
                                                          +}
                                                          +
                                                          +// Good
                                                          +if err != nil {
                                                          +    // error handling
                                                          +}   
                                                          +if errorCode == 0 {
                                                          +    // do something
                                                          +}
                                                          +
                                                          +
                                                            +
                                                          • if 对于 bool 类型的变量,应直接进行真假判断。 +```go +var allowUserLogin bool +// Bad +if allowUserLogin == true { + // do something +} +if allowUserLogin == false { + // do something +}
                                                          • +
                                                          +

                                                          // Good +if allowUserLogin { + // do something +} +if !allowUserLogin { + // do something +}

                                                          +
                                                          - 不必要的 else。
                                                          +
                                                          +如果在 if 的两个分支中都设置变量,则可以将其替换为单个 if。
                                                          +```go
                                                          +// Bad
                                                          +var a int
                                                          +if b {
                                                          +  a = 100
                                                          +} else {
                                                          +  a = 10
                                                          +}
                                                          +
                                                          +// Good
                                                          +a := 10
                                                          +if b {
                                                          +  a = 100
                                                          +}
                                                          +

                                                          又如 if else 通常可以简写为 if return。

                                                          +
                                                          // Bad
                                                          +func Foo(bar int) {
                                                          +    if bar == 1 {
                                                          +        // ...
                                                          +    } else {
                                                          +        // ...
                                                          +    }
                                                          +}
                                                          +
                                                          +// Good
                                                          +func Foo() {
                                                          +    if bar == 1 {
                                                          +        // ...
                                                          +        return
                                                          +    }
                                                          +    // ...
                                                          +}
                                                          +
                                                          +
                                                            +
                                                          • 多个相似 if 用 switch 替换。 +```go +// Bad +func foo(key string) { + if key == pathKey {
                                                              ...
                                                            +
                                                            } + if key == urlKey {
                                                              ...
                                                            +
                                                            } +}
                                                          • +
                                                          +

                                                          // Good +func foo(key string) { + switch key { + case pathKey: + ... + case urlKey: + ... + } +}

                                                          +
                                                          - 使用 == "" 判断字符串是否为空,这样更加直观。
                                                          +```go
                                                          +// Bad
                                                          +if len(str) == 0 {
                                                          +    ...
                                                          +}
                                                          +
                                                          +// Good
                                                          +if str == "" {
                                                          +    ...
                                                          +}
                                                          +
                                                            +
                                                          • 把简单的逻辑判断放前面,复杂的逻辑判断放后面。
                                                          • +
                                                          • 不要使用双重否定。
                                                          • +
                                                          • 判断条件较为复杂时,考虑封装成函数。
                                                          • +
                                                          • 使用了 else if 则需要以 else 结束。
                                                          • +
                                                          +
                                                          // Bad
                                                          +if foo == "a" {
                                                          +    ...
                                                          +} else if foo == "b" {
                                                          +    ...
                                                          +}
                                                          +
                                                          +// Good
                                                          +if foo == "a" {
                                                          +    ...
                                                          +} else if foo == "b" {
                                                          +    ...
                                                          +} else {
                                                          +    // 需要有一个缺省处理逻辑
                                                          +}
                                                          +
                                                          +

                                                          for

                                                          +
                                                            +
                                                          • 最小化变量作用域。
                                                          • +
                                                          +

                                                          for 接受初始化语句,尽可能缩小变量作用域。

                                                          +
                                                          // Bad
                                                          +sum := 0
                                                          +i := 0
                                                          +for ; i < 10; i++ {
                                                          +    sum += 1
                                                          +}
                                                          +
                                                          +// Good
                                                          +sum := 0
                                                          +for i := 0; i < 10; i++ {
                                                          +    sum += 1
                                                          +}
                                                          +
                                                          +
                                                            +
                                                          • 循环变量的地址不要存储。
                                                          • +
                                                          +

                                                          循环变量的地址指向的是同一个变量,我们可以通过赋值给一个同名的变量,通过变量逃逸,来达到取不同地址的目的。

                                                          +
                                                          // Bad
                                                          +func main() {
                                                          +    ints := []int{1, 2, 3, 4, 5}
                                                          +    for _, v := range ints {
                                                          +        fmt.Println(&v) // 打印的是相同的地址
                                                          +    }
                                                          +}
                                                          +
                                                          +// Good
                                                          +func main() {
                                                          +    ints := []int{1, 2, 3, 4, 5}
                                                          +    for _, v := range ints {
                                                          +        v := v
                                                          +        fmt.Println(&v) // 打印的是不同的地址
                                                          +    }
                                                          +}
                                                          +
                                                          +

                                                          range

                                                          +
                                                            +
                                                          • 如果只需要第一项(key),就丢弃第二项(value)。
                                                          • +
                                                          +
                                                          for key := range m {
                                                          +    if key.expired() {
                                                          +        delete(m, key)
                                                          +    }
                                                          +}
                                                          +
                                                          +
                                                            +
                                                          • 如果只需要第二项,则把第一项置为空标识符(下划线)。
                                                          • +
                                                          +
                                                          sum := 0
                                                          +for _, v := range array {
                                                          +    sum += v
                                                          +}
                                                          +
                                                          +

                                                          switch

                                                          +
                                                            +
                                                          • 必须要有 default。
                                                          • +
                                                          +
                                                          switch os := runtime.GOOS; os {
                                                          +    case "darwin":
                                                          +        fmt.Println("MAC OS")
                                                          +    case "linux":
                                                          +        fmt.Println("Linux.")
                                                          +    default:
                                                          +        // freebsd, openbsd,
                                                          +        // plan9, windows...
                                                          +        fmt.Printf("%s.\n", os)
                                                          +}
                                                          +
                                                          +

                                                          return

                                                          +
                                                            +
                                                          • 尽早 return。
                                                          • +
                                                          +

                                                          一旦有错误发生,马上返回。

                                                          +
                                                          f, err := os.Open(name)
                                                          +if err != nil {
                                                          +    return err
                                                          +}
                                                          +
                                                          +defer f.Close()
                                                          +
                                                          +d, err := f.Stat()
                                                          +if err != nil {
                                                          +    return err
                                                          +}
                                                          +
                                                          +codeUsing(f, d)
                                                          +
                                                          +

                                                          goto

                                                          +

                                                          业务代码禁止使用 goto,其他框架或底层源码推荐尽量不用。

                                                          +

                                                          程序退出方式

                                                          +
                                                            +
                                                          • 使用os.Exit或者log.Fatal*退出程序,而不是panic
                                                          • +
                                                          • 在 main() 中退出程序且只退出一次。
                                                          • +
                                                          +

                                                          仅在 main() 函数中调用os.Exitlog.Fatal*且只调用一次。如果有多个错误场景停止程序执行,请将该逻辑放在单独的函数并从中返回错误。 这会精简main()函数,并将所有关键业务逻辑放入一个单独的、可测试的函数中。

                                                          +
                                                          // Bad
                                                          +package main
                                                          +func main() {
                                                          +  args := os.Args[1:]
                                                          +  if len(args) != 1 {
                                                          +    log.Fatal("missing file")
                                                          +  }
                                                          +  name := args[0]
                                                          +  f, err := os.Open(name)
                                                          +  if err != nil {
                                                          +    log.Fatal(err)
                                                          +  }
                                                          +  defer f.Close()
                                                          +  // 如果我们调用 log.Fatal f.Close 将不会被执行
                                                          +  b, err := ioutil.ReadAll(f)
                                                          +  if err != nil {
                                                          +    log.Fatal(err)
                                                          +  }
                                                          +  // ...
                                                          +}
                                                          +
                                                          +// Good
                                                          +package main
                                                          +func main() {
                                                          +  if err := run(); err != nil {
                                                          +    log.Fatal(err)
                                                          +  }
                                                          +}
                                                          +func run() error {
                                                          +  args := os.Args[1:]
                                                          +  if len(args) != 1 {
                                                          +    return errors.New("missing file")
                                                          +  }
                                                          +  name := args[0]
                                                          +  f, err := os.Open(name)
                                                          +  if err != nil {
                                                          +    return err
                                                          +  }
                                                          +  defer f.Close()
                                                          +  b, err := ioutil.ReadAll(f)
                                                          +  if err != nil {
                                                          +    return err
                                                          +  }
                                                          +  // ...
                                                          +}
                                                          +
                                                          +

                                                          当程序的多个函数具有退出能力时会存在一些问题:

                                                          +

                                                          (1)不明显的控制流:任何函数都可以退出程序,因此很难对控制流进行推理;

                                                          +

                                                          (2)难以测试:退出程序的函数也将退出调用它的测试,这使得函数很难测试,并跳过了尚未被运行的其他代码;

                                                          +

                                                          (3)跳过清理:当函数退出程序时,会跳过已经进入 defer 队列里的函数调用,这增加了跳过重要清理任务的风险。

                                                          +
                                                          powered by Gitbook该文章修订时间: +2022-05-22 16:56:50 +
                                                          + + +
                                                          + +
                                                          +
                                                          +
                                                          + +

                                                          results matching ""

                                                          +
                                                            + +
                                                            +
                                                            + +

                                                            No results matching ""

                                                            + +
                                                            +
                                                            +
                                                            + +
                                                            +
                                                            + +
                                                            + + + + + + + + + + + + + + +
                                                            + + +
                                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/0.\345\257\274\350\257\255.html" "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/0.\345\257\274\350\257\255.html" new file mode 100644 index 0000000..1afb1ed --- /dev/null +++ "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/0.\345\257\274\350\257\255.html" @@ -0,0 +1,1103 @@ + + + + + + + 0.导语 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                            +
                                                            + + + + + + + + +
                                                            + +
                                                            + +
                                                            + + + + + + + + +
                                                            +
                                                            + +
                                                            +
                                                            + +
                                                            + +

                                                            代码的稳健、可读和高效是我们每一个位 coder 的共同追求。本篇将结合 Go 语言特性,为书写高效的代码,力争从常用数据结构、内存管理和并发编程三个方面给出相关建议。话不多说,让我们一起学习 Go 高性能编程技法吧。

                                                            +
                                                            powered by Gitbook该文章修订时间: +2022-05-18 22:23:35 +
                                                            + + +
                                                            + +
                                                            +
                                                            +
                                                            + +

                                                            results matching ""

                                                            +
                                                              + +
                                                              +
                                                              + +

                                                              No results matching ""

                                                              + +
                                                              +
                                                              +
                                                              + +
                                                              +
                                                              + +
                                                              + + + + + + +
                                                              + + +
                                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/1.\345\217\215\345\260\204\350\231\275\345\245\275\357\274\214\345\210\207\350\216\253\350\264\252\346\235\257.html" "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/1.\345\217\215\345\260\204\350\231\275\345\245\275\357\274\214\345\210\207\350\216\253\350\264\252\346\235\257.html" new file mode 100644 index 0000000..c7d8c84 --- /dev/null +++ "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/1.\345\217\215\345\260\204\350\231\275\345\245\275\357\274\214\345\210\207\350\216\253\350\264\252\346\235\257.html" @@ -0,0 +1,1250 @@ + + + + + + + 1.反射虽好,切莫贪杯 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                              +
                                                              + + + + + + + + +
                                                              + +
                                                              + +
                                                              + + + + + + + + +
                                                              +
                                                              + +
                                                              +
                                                              + +
                                                              + +

                                                              标准库 reflect 为 Go 语言提供了运行时动态获取对象的类型和值以及动态创建对象的能力。反射可以帮助抽象和简化代码,提高开发效率。

                                                              +

                                                              Go 语言标准库以及很多开源软件中都使用了 Go 语言的反射能力,例如用于序列化和反序列化的 json、ORM 框架 gorm、xorm 等。

                                                              +

                                                              1.优先使用 strconv 而不是 fmt

                                                              +

                                                              基本数据类型与字符串之间的转换,优先使用 strconv 而不是 fmt,因为前者性能更佳。

                                                              +
                                                              // Bad
                                                              +for i := 0; i < b.N; i++ {
                                                              +    s := fmt.Sprint(rand.Int())
                                                              +}
                                                              +
                                                              +BenchmarkFmtSprint-4    143 ns/op    2 allocs/op
                                                              +
                                                              +// Good
                                                              +for i := 0; i < b.N; i++ {
                                                              +    s := strconv.Itoa(rand.Int())
                                                              +}
                                                              +
                                                              +BenchmarkStrconv-4    64.2 ns/op    1 allocs/op
                                                              +
                                                              +

                                                              为什么性能上会有两倍多的差距,因为 fmt 实现上利用反射来达到范型的效果,在运行时进行类型的动态判断,所以带来了一定的性能损耗。

                                                              +

                                                              2.少量的重复不比反射差

                                                              +

                                                              有时,我们需要一些工具函数。比如从 uint64 切片过滤掉指定的元素。

                                                              +

                                                              利用反射,我们可以实现一个类型泛化支持扩展的切片过滤函数。

                                                              +
                                                              // DeleteSliceElms 从切片中过滤指定元素。注意:不修改原切片。
                                                              +func DeleteSliceElms(i interface{}, elms ...interface{}) interface{} {
                                                              +    // 构建 map set。
                                                              +    m := make(map[interface{}]struct{}, len(elms))
                                                              +    for _, v := range elms {
                                                              +        m[v] = struct{}{}
                                                              +    }
                                                              +    // 创建新切片,过滤掉指定元素。
                                                              +    v := reflect.ValueOf(i)
                                                              +    t := reflect.MakeSlice(reflect.TypeOf(i), 0, v.Len())
                                                              +    for i := 0; i < v.Len(); i++ {
                                                              +        if _, ok := m[v.Index(i).Interface()]; !ok {
                                                              +            t = reflect.Append(t, v.Index(i))
                                                              +        }
                                                              +    }
                                                              +    return t.Interface()
                                                              +}
                                                              +
                                                              +

                                                              很多时候,我们可能只需要操作一个类型的切片,利用反射实现的类型泛化扩展的能力压根没用上。退一步说,如果我们真地需要对 uint64 以外类型的切片进行过滤,拷贝一次代码又何妨呢?可以肯定的是,绝大部份场景,根本不会对所有类型的切片进行过滤,那么反射带来好处我们并没有充分享受,但却要为其带来的性能成本买单。

                                                              +
                                                              // DeleteU64liceElms 从 []uint64 过滤指定元素。注意:不修改原切片。
                                                              +func DeleteU64liceElms(i []uint64, elms ...uint64) []uint64 {
                                                              +    // 构建 map set。
                                                              +    m := make(map[uint64]struct{}, len(elms))
                                                              +    for _, v := range elms {
                                                              +        m[v] = struct{}{}
                                                              +    }
                                                              +    // 创建新切片,过滤掉指定元素。
                                                              +    t := make([]uint64, 0, len(i))
                                                              +    for _, v := range i {
                                                              +        if _, ok := m[v]; !ok {
                                                              +            t = append(t, v)
                                                              +        }
                                                              +    }
                                                              +    return t
                                                              +}
                                                              +
                                                              +

                                                              下面看一下二者的性能对比。

                                                              +
                                                              func BenchmarkDeleteSliceElms(b *testing.B) {
                                                              +    slice := []uint64{1, 2, 3, 4, 5, 6, 7, 8, 9}
                                                              +    elms := []interface{}{uint64(1), uint64(3), uint64(5), uint64(7), uint64(9)}
                                                              +    for i := 0; i < b.N; i++ {
                                                              +        _ = DeleteSliceElms(slice, elms...)
                                                              +    }
                                                              +}
                                                              +
                                                              +func BenchmarkDeleteU64liceElms(b *testing.B) {
                                                              +    slice := []uint64{1, 2, 3, 4, 5, 6, 7, 8, 9}
                                                              +    elms := []uint64{1, 3, 5, 7, 9}
                                                              +    for i := 0; i < b.N; i++ {
                                                              +        _ = DeleteU64liceElms(slice, elms...)
                                                              +    }
                                                              +}
                                                              +
                                                              +

                                                              运行上面的基准测试。

                                                              +
                                                              go test -bench=. -benchmem main/reflect 
                                                              +goos: darwin
                                                              +goarch: amd64
                                                              +pkg: main/reflect
                                                              +cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
                                                              +BenchmarkDeleteSliceElms-12              1226868               978.2 ns/op           296 B/op         16 allocs/op
                                                              +BenchmarkDeleteU64liceElms-12            8249469               145.3 ns/op            80 B/op          1 allocs/op
                                                              +PASS
                                                              +ok      main/reflect    3.809s
                                                              +
                                                              +

                                                              可以看到,反射涉及了额外的类型判断和大量的内存分配,导致其对性能的影响非常明显。随着切片元素的递增,每一次判断元素是否在 map 中,因为 map 的 key 是不确定的类型,会发生变量逃逸,触发堆内存的分配。所以,可预见的是当元素数量增加时,性能差异会越来大。

                                                              +

                                                              当使用反射时,请问一下自己,我真地需要它吗?

                                                              +

                                                              3.慎用 binary.Read 和 binary.Write

                                                              +

                                                              binary.Read 和 binary.Write 使用反射并且很慢。如果有需要用到这两个函数的地方,我们应该手动实现这两个函数的相关功能,而不是直接去使用它们。

                                                              +

                                                              encoding/binary 包实现了数字和字节序列之间的简单转换以及 varints 的编码和解码。varints 是一种使用可变字节表示整数的方法。其中数值本身越小,其所占用的字节数越少。Protocol Buffers 对整数采用的便是这种编码方式。

                                                              +

                                                              其中数字与字节序列的转换可以用如下三个函数:

                                                              +
                                                              // Read 从结构化二进制数据 r 读取到 data。data 必须是指向固定大小值的指针或固定大小值的切片。
                                                              +func Read(r io.Reader, order ByteOrder, data interface{}) error
                                                              +// Write 将 data 的二进制表示形式写入 w。data 必须是固定大小的值或固定大小值的切片,或指向此类数据的指针。
                                                              +func Write(w io.Writer, order ByteOrder, data interface{}) error
                                                              +// Size 返回 Wirte 函数将 v 写入到 w 中的字节数。
                                                              +func Size(v interface{}) int
                                                              +
                                                              +

                                                              下面以我们熟知的 C 标准库函数 ntohl() 函数为例,看看 Go 利用 binary 包如何实现。

                                                              +
                                                              // Ntohl 将网络字节序的 uint32 转为主机字节序。
                                                              +func Ntohl(bys []byte) uint32 {
                                                              +    r := bytes.NewReader(bys)
                                                              +    err = binary.Read(buf, binary.BigEndian, &num)
                                                              +}
                                                              +
                                                              +// 如将 IP 127.0.0.1 网络字节序解析到 uint32
                                                              +fmt.Println(Ntohl([]byte{0x7f, 0, 0, 0x1})) // 2130706433 <nil>
                                                              +
                                                              +

                                                              如果我们针对 uint32 类型手动实现一个 ntohl() 呢?

                                                              +
                                                              func NtohlNotUseBinary(bys []byte) uint32 {
                                                              +    return uint32(bys[3]) | uint32(bys[2])<<8 | uint32(bys[1])<<16 | uint32(bys[0])<<24
                                                              +}
                                                              +
                                                              +// 如将 IP 127.0.0.1 网络字节序解析到 uint32
                                                              +fmt.Println(NtohlNotUseBinary([]byte{0x7f, 0, 0, 0x1})) // 2130706433
                                                              +
                                                              +

                                                              该函数也是参考了 encoding/binary 包针对大端字节序将字节序列转为 uint32 类型时的实现。

                                                              +

                                                              下面看下剥去反射前后二者的性能差异。

                                                              +
                                                              func BenchmarkNtohl(b *testing.B) {
                                                              +    for i := 0; i < b.N; i++ {
                                                              +        _, _ = Ntohl([]byte{0x7f, 0, 0, 0x1})
                                                              +    }
                                                              +}
                                                              +
                                                              +func BenchmarkNtohlNotUseBinary(b *testing.B) {
                                                              +    for i := 0; i < b.N; i++ {
                                                              +        _ = NtohlNotUseBinary([]byte{0x7f, 0, 0, 0x1})
                                                              +    }
                                                              +}
                                                              +
                                                              +

                                                              运行上面的基准测试,结果如下:

                                                              +
                                                              go test -bench=BenchmarkNtohl.* -benchmem main/reflect
                                                              +goos: darwin
                                                              +goarch: amd64
                                                              +pkg: main/reflect
                                                              +cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
                                                              +BenchmarkNtohl-12                       13026195                81.96 ns/op           60 B/op          4 allocs/op
                                                              +BenchmarkNtohlNotUseBinary-12           1000000000               0.2511 ns/op          0 B/op          0 allocs/op
                                                              +PASS
                                                              +ok      main/reflect    1.841s
                                                              +

                                                              可见使用反射实现的 encoding/binary 包的性能相较于针对具体类型实现的版本,性能差异非常大。

                                                              +
                                                              powered by Gitbook该文章修订时间: +2022-05-08 19:22:09 +
                                                              + + +
                                                              + +
                                                              +
                                                              +
                                                              + +

                                                              results matching ""

                                                              +
                                                                + +
                                                                +
                                                                + +

                                                                No results matching ""

                                                                + +
                                                                +
                                                                +
                                                                + +
                                                                +
                                                                + +
                                                                + + + + + + + + + + +
                                                                + + +
                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/2.\351\201\277\345\205\215\351\207\215\345\244\215\350\275\254\346\215\242\345\255\227\347\254\246\344\270\262\345\210\260\345\255\227\350\212\202\345\210\207\347\211\207.html" "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/2.\351\201\277\345\205\215\351\207\215\345\244\215\350\275\254\346\215\242\345\255\227\347\254\246\344\270\262\345\210\260\345\255\227\350\212\202\345\210\207\347\211\207.html" new file mode 100644 index 0000000..b3bd474 --- /dev/null +++ "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/2.\351\201\277\345\205\215\351\207\215\345\244\215\350\275\254\346\215\242\345\255\227\347\254\246\344\270\262\345\210\260\345\255\227\350\212\202\345\210\207\347\211\207.html" @@ -0,0 +1,1141 @@ + + + + + + + 2.避免重复转换字符串到字节切片 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                +
                                                                + + + + + + + + +
                                                                + +
                                                                + +
                                                                + + + + + + + + +
                                                                +
                                                                + +
                                                                +
                                                                + +
                                                                + +

                                                                不要反复从固定字符串创建字节 slice,因为重复的切片初始化会带来性能损耗。相反,请执行一次转换并捕获结果。

                                                                +
                                                                func BenchmarkStringToByte(b *testing.B) {
                                                                +   for i := 0; i < b.N; i++ {
                                                                +      by := []byte("Hello world")
                                                                +      _ = by
                                                                +   }
                                                                +}
                                                                +
                                                                +func BenchmarkStringToByteOnce(b *testing.B) {
                                                                +   bys := []byte("Hello world")
                                                                +   for i := 0; i < b.N; i++ {
                                                                +      by := bys
                                                                +      _ = by
                                                                +   }
                                                                +}
                                                                +
                                                                +

                                                                看一下性能差异,注意需要禁止编译器优化,不然看不出差别。

                                                                +
                                                                go test -bench=BenchmarkStringToByte -gcflags="-N" main/perf
                                                                +goos: windows
                                                                +goarch: amd64
                                                                +pkg: main/perf
                                                                +cpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz
                                                                +BenchmarkStringToByte-8         748467979                1.582 ns/op
                                                                +BenchmarkStringToByteOnce-8     878246492                1.379 ns/op
                                                                +PASS
                                                                +ok      main/perf       2.962s
                                                                +

                                                                差距不是很大,但是随着字符串长度的增加,差距将会越来越明显。此外,如果这种重复的转换在 Hot Path 上,那么其对性能的影响将被放大。这里解释下 Hot Path,即热点路径,顾名思义,是你的程序中那些会频繁执行到的代码。

                                                                +
                                                                powered by Gitbook该文章修订时间: +2022-05-08 19:22:09 +
                                                                + + +
                                                                + +
                                                                +
                                                                +
                                                                + +

                                                                results matching ""

                                                                +
                                                                  + +
                                                                  +
                                                                  + +

                                                                  No results matching ""

                                                                  + +
                                                                  +
                                                                  +
                                                                  + +
                                                                  +
                                                                  + +
                                                                  + + + + + + + + + + + + + + +
                                                                  + + +
                                                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/3.\346\214\207\345\256\232\345\256\271\345\231\250\345\256\271\351\207\217.html" "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/3.\346\214\207\345\256\232\345\256\271\345\231\250\345\256\271\351\207\217.html" new file mode 100644 index 0000000..062d242 --- /dev/null +++ "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/3.\346\214\207\345\256\232\345\256\271\345\231\250\345\256\271\351\207\217.html" @@ -0,0 +1,1171 @@ + + + + + + + 3.指定容器容量 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                  +
                                                                  + + + + + + + + +
                                                                  + +
                                                                  + +
                                                                  + + + + + + + + +
                                                                  +
                                                                  + +
                                                                  +
                                                                  + +
                                                                  + +

                                                                  尽可能指定容器容量,以便为容器预先分配内存。这将在后续添加元素时减少通过复制来调整容器大小。

                                                                  +

                                                                  1.指定 map 容量提示

                                                                  +

                                                                  在尽可能的情况下,在使用 make() 初始化的时候提供容量信息。

                                                                  +
                                                                  make(map[T1]T2, hint)
                                                                  +
                                                                  +

                                                                  向 make() 提供容量提示会在初始化时尝试调整 map 的大小,这将减少在将元素添加到 map 时为 map 重新分配内存。

                                                                  +

                                                                  注意,与 slice 不同。map capacity 提示并不保证完全的抢占式分配,而是用于估计所需的 hashmap bucket 的数量。 因此,在将元素添加到 map 时,甚至在指定 map 容量时,仍可能发生分配。

                                                                  +
                                                                  // Bad
                                                                  +m := make(map[string]os.FileInfo)
                                                                  +
                                                                  +files, _ := ioutil.ReadDir("./files")
                                                                  +for _, f := range files {
                                                                  +    m[f.Name()] = f
                                                                  +}
                                                                  +// m 是在没有大小提示的情况下创建的; 在运行时可能会有更多分配。
                                                                  +
                                                                  +// Good
                                                                  +files, _ := ioutil.ReadDir("./files")
                                                                  +
                                                                  +m := make(map[string]os.FileInfo, len(files))
                                                                  +for _, f := range files {
                                                                  +    m[f.Name()] = f
                                                                  +}
                                                                  +// m 是有大小提示创建的;在运行时可能会有更少的分配。
                                                                  +
                                                                  +

                                                                  2.指定切片容量

                                                                  +

                                                                  在尽可能的情况下,在使用 make() 初始化切片时提供容量信息,特别是在追加切片时。

                                                                  +
                                                                  make([]T, length, capacity)
                                                                  +
                                                                  +

                                                                  与 map 不同,slice capacity 不是一个提示:编译器将为提供给 make() 的 slice 的容量分配足够的内存,这意味着后续的 append() 操作将导致零分配(直到 slice 的长度与容量匹配,在此之后,任何 append 都可能调整大小以容纳其他元素)。

                                                                  +
                                                                  const size = 1000000
                                                                  +
                                                                  +// Bad
                                                                  +for n := 0; n < b.N; n++ {
                                                                  +    data := make([]int, 0)
                                                                  +      for k := 0; k < size; k++ {
                                                                  +        data = append(data, k)
                                                                  +  }
                                                                  +}
                                                                  +
                                                                  +BenchmarkBad-4    219    5202179 ns/op
                                                                  +
                                                                  +// Good
                                                                  +for n := 0; n < b.N; n++ {
                                                                  +    data := make([]int, 0, size)
                                                                  +      for k := 0; k < size; k++ {
                                                                  +        data = append(data, k)
                                                                  +  }
                                                                  +}
                                                                  +
                                                                  +BenchmarkGood-4   706    1528934 ns/op
                                                                  +
                                                                  +

                                                                  执行基准测试:

                                                                  +
                                                                  go test -bench=^BenchmarkJoinStr -benchmem 
                                                                  +BenchmarkJoinStrWithOperator-8    66930670    17.81 ns/op    0 B/op    0 allocs/op
                                                                  +BenchmarkJoinStrWithSprintf-8      7032921    166.0 ns/op    64 B/op   4 allocs/op
                                                                  +
                                                                  +
                                                                  powered by Gitbook该文章修订时间: +2022-05-08 19:22:09 +
                                                                  + + +
                                                                  + +
                                                                  +
                                                                  +
                                                                  + +

                                                                  results matching ""

                                                                  +
                                                                    + +
                                                                    +
                                                                    + +

                                                                    No results matching ""

                                                                    + +
                                                                    +
                                                                    +
                                                                    + +
                                                                    +
                                                                    + +
                                                                    + + + + + + + + + + + + + + +
                                                                    + + +
                                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/4.\345\255\227\347\254\246\344\270\262\346\213\274\346\216\245\346\226\271\345\274\217.html" "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/4.\345\255\227\347\254\246\344\270\262\346\213\274\346\216\245\346\226\271\345\274\217.html" new file mode 100644 index 0000000..6f06839 --- /dev/null +++ "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/4.\345\255\227\347\254\246\344\270\262\346\213\274\346\216\245\346\226\271\345\274\217.html" @@ -0,0 +1,1226 @@ + + + + + + + 4.字符串拼接方式 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                    +
                                                                    + + + + + + + + +
                                                                    + +
                                                                    + +
                                                                    + + + + + + + + +
                                                                    +
                                                                    + +
                                                                    +
                                                                    + +
                                                                    + +

                                                                    1.行内字符串拼接

                                                                    +

                                                                    行内拼接字符串为了书写方便快捷,最常用的两个方法是:

                                                                    +
                                                                      +
                                                                    • 运算符+
                                                                    • +
                                                                    • fmt.Sprintf()
                                                                    • +
                                                                    +

                                                                    行内字符串的拼接,主要追求的是代码的简洁可读。fmt.Sprintf() 能够接收不同类型的入参,通过格式化输出完成字符串的拼接,使用非常方便。但因其底层实现使用了反射,性能上会有所损耗。

                                                                    +

                                                                    运算符 + 只能简单地完成字符串之间的拼接,非字符串类型的变量需要单独做类型转换。行内拼接字符串不会产生内存分配,也不涉及类型地动态转换,所以性能上优于fmt.Sprintf()

                                                                    +

                                                                    从性能出发,兼顾实现的便捷与代码可读性,如果待拼接的字符串不涉及类型转换且数量较少(<=3),行内拼接字符串推荐使用运算符 +,反之使用 fmt.Sprintf()

                                                                    +

                                                                    下面看下二者的性能对比。

                                                                    +
                                                                    // Good
                                                                    +func BenchmarkJoinStrWithOperator(b *testing.B) {
                                                                    +    s1, s2, s3 := "foo", "bar", "baz"
                                                                    +    for i := 0; i < b.N; i++ {
                                                                    +        _ = s1 + s2 + s3
                                                                    +    }
                                                                    +}
                                                                    +
                                                                    +// Bad
                                                                    +func BenchmarkJoinStrWithSprintf(b *testing.B) {
                                                                    +    s1, s2, s3 := "foo", "bar", "baz"
                                                                    +    for i := 0; i < b.N; i++ {
                                                                    +        _ = fmt.Sprintf("%s%s%s", s1, s2, s3)
                                                                    +    }
                                                                    +}
                                                                    +
                                                                    +

                                                                    执行基准测试结果如下:

                                                                    +
                                                                    go test -bench=^BenchmarkJoinStr -benchmem .
                                                                    +BenchmarkJoinStrWithOperator-8    70638928    17.53 ns/op     0 B/op    0 allocs/op
                                                                    +BenchmarkJoinStrWithSprintf-8      7520017    157.2 ns/op    64 B/op    4 allocs/op
                                                                    +
                                                                    +

                                                                    可以看到,二者的性能差距很大,快达到一个数量级了。所以在不影响代码可读性时,行内字符串尽可能地使用运算符 + 来拼接而不是fmt.Sprintf()

                                                                    +

                                                                    2.非行内字符串拼接

                                                                    +

                                                                    字符串拼接还有其他的方式,比如strings.Join()strings.Builderbytes.Bufferbyte[],这几种不适合行内使用。当待拼接字符串数量较多时可考虑使用。

                                                                    +

                                                                    先看下其性能测试的对比。

                                                                    +
                                                                    func BenchmarkJoinStrWithStringsJoin(b *testing.B) {
                                                                    +    s1, s2, s3 := "foo", "bar", "baz"
                                                                    +    for i := 0; i < b.N; i++ {
                                                                    +        _ = strings.Join([]string{s1, s2, s3}, "")
                                                                    +    }
                                                                    +}
                                                                    +
                                                                    +func BenchmarkJoinStrWithStringsBuilder(b *testing.B) {
                                                                    +    s1, s2, s3 := "foo", "bar", "baz"
                                                                    +    for i := 0; i < b.N; i++ {
                                                                    +        var builder strings.Builder
                                                                    +        _, _ = builder.WriteString(s1)
                                                                    +        _, _ = builder.WriteString(s2)
                                                                    +        _, _ = builder.WriteString(s3)
                                                                    +    }
                                                                    +}
                                                                    +
                                                                    +func BenchmarkJoinStrWithBytesBuffer(b *testing.B) {
                                                                    +    s1, s2, s3 := "foo", "bar", "baz"
                                                                    +    for i := 0; i < b.N; i++ {
                                                                    +        var buffer bytes.Buffer
                                                                    +        _, _ = buffer.WriteString(s1)
                                                                    +        _, _ = buffer.WriteString(s2)
                                                                    +        _, _ = buffer.WriteString(s3)
                                                                    +    }
                                                                    +}
                                                                    +
                                                                    +func BenchmarkJoinStrWithByteSlice(b *testing.B) {
                                                                    +    s1, s2, s3 := "foo", "bar", "baz"
                                                                    +    for i := 0; i < b.N; i++ {
                                                                    +        var bys []byte
                                                                    +        bys= append(bys, s1...)
                                                                    +        bys= append(bys, s2...)
                                                                    +        _ = append(bys, s3...)
                                                                    +    }
                                                                    +}
                                                                    +
                                                                    +func BenchmarkJoinStrWithByteSlicePreAlloc(b *testing.B) {
                                                                    +    s1, s2, s3 := "foo", "bar", "baz"
                                                                    +    for i := 0; i < b.N; i++ {
                                                                    +        bys:= make([]byte, 0, 9)
                                                                    +        bys= append(bys, s1...)
                                                                    +        bys= append(bys, s2...)
                                                                    +        _ = append(bys, s3...)
                                                                    +    }
                                                                    +}
                                                                    +
                                                                    +

                                                                    基准测试结果如下:

                                                                    +
                                                                    go test -bench=^BenchmarkJoinStr .
                                                                    +goos: windows
                                                                    +goarch: amd64
                                                                    +pkg: main/perf
                                                                    +cpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz
                                                                    +BenchmarkJoinStrWithStringsJoin-8               31543916                36.39 ns/op
                                                                    +BenchmarkJoinStrWithStringsBuilder-8            30079785                40.60 ns/op
                                                                    +BenchmarkJoinStrWithBytesBuffer-8               31663521                39.58 ns/op
                                                                    +BenchmarkJoinStrWithByteSlice-8                 30748495                37.34 ns/op
                                                                    +BenchmarkJoinStrWithByteSlicePreAlloc-8         665341896               1.813 ns/op
                                                                    +
                                                                    +

                                                                    从结果可以看出,strings.Join()strings.Builderbytes.Bufferbyte[] 的性能相近。如果结果字符串的长度是可预知的,使用 byte[] 且预先分配容量的拼接方式性能最佳。

                                                                    +

                                                                    所以如果对性能要求非常严格,或待拼接的字符串数量足够多时,建议使用 byte[] 预先分配容量这种方式。

                                                                    +

                                                                    综合易用性和性能,一般推荐使用strings.Builder来拼接字符串。

                                                                    +

                                                                    string.Builder也提供了预分配内存的方式 Grow:

                                                                    +
                                                                    func BenchmarkJoinStrWithStringsBuilderPreAlloc(b *testing.B) {
                                                                    +    s1, s2, s3 := "foo", "bar", "baz"
                                                                    +    for i := 0; i < b.N; i++ {
                                                                    +        var builder strings.Builder
                                                                    +        builder.Grow(9)
                                                                    +        _, _ = builder.WriteString(s1)
                                                                    +        _, _ = builder.WriteString(s2)
                                                                    +        _, _ = builder.WriteString(s3)
                                                                    +    }
                                                                    +}
                                                                    +
                                                                    +

                                                                    使用了 Grow 优化后的版本的性能测试结果如下。可以看出相较于不预先分配空间的方式,性能提升了很多。

                                                                    +
                                                                    BenchmarkJoinStrWithStringsBuilderPreAlloc-8    60079003                20.95 ns/op
                                                                    +
                                                                    +
                                                                    powered by Gitbook该文章修订时间: +2022-05-13 15:46:40 +
                                                                    + + +
                                                                    + +
                                                                    +
                                                                    +
                                                                    + +

                                                                    results matching ""

                                                                    +
                                                                      + +
                                                                      +
                                                                      + +

                                                                      No results matching ""

                                                                      + +
                                                                      +
                                                                      +
                                                                      + +
                                                                      +
                                                                      + +
                                                                      + + + + + + + + + + + + + + +
                                                                      + + +
                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/5.[]struct{}\347\232\204\351\201\215\345\216\206\346\226\271\345\274\217.html" "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/5.[]struct{}\347\232\204\351\201\215\345\216\206\346\226\271\345\274\217.html" new file mode 100644 index 0000000..6c5224d --- /dev/null +++ "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/5.[]struct{}\347\232\204\351\201\215\345\216\206\346\226\271\345\274\217.html" @@ -0,0 +1,1294 @@ + + + + + + + 5.[]struct{} 的遍历方式 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                      +
                                                                      + + + + + + + + +
                                                                      + +
                                                                      + +
                                                                      + + + + + + + + +
                                                                      +
                                                                      + +
                                                                      +
                                                                      + +
                                                                      + +

                                                                      Go 遍历切片或数组有两种方式,一种是下标,一种是 range。二者在功能上没有区别,但在性能上会有区别吗?

                                                                      +

                                                                      1.[]int

                                                                      +

                                                                      首先看一下遍历基本类型切片时二者的性能差别,以 []int 为例。

                                                                      +
                                                                      // genRandomIntSlice 生成指定长度的随机 []int 切片
                                                                      +func genRandomIntSlice(n int) []int {
                                                                      +    rand.Seed(time.Now().UnixNano())
                                                                      +    nums := make([]int, 0, n)
                                                                      +    for i := 0; i < n; i++ {
                                                                      +        nums = append(nums, rand.Int())
                                                                      +    }
                                                                      +    return nums
                                                                      +}
                                                                      +
                                                                      +func BenchmarkIndexIntSlice(b *testing.B) {
                                                                      +    nums := genRandomIntSlice(1024)
                                                                      +    for i := 0; i < b.N; i++ {
                                                                      +        var tmp int
                                                                      +        for k := 0; k < len(nums); k++ {
                                                                      +            tmp = nums[k]
                                                                      +        }
                                                                      +        _ = tmp
                                                                      +    }
                                                                      +}
                                                                      +
                                                                      +func BenchmarkRangeIntSlice(b *testing.B) {
                                                                      +    nums := genRandomIntSlice(1024)
                                                                      +    for i := 0; i < b.N; i++ {
                                                                      +        var tmp int
                                                                      +        for _, num := range nums {
                                                                      +            tmp = num
                                                                      +        }
                                                                      +        _ = tmp
                                                                      +    }
                                                                      +}
                                                                      +
                                                                      +

                                                                      运行测试结果如下:

                                                                      +
                                                                      go test -bench=IntSlice$ .
                                                                      +goos: windows
                                                                      +goarch: amd64
                                                                      +pkg: main/perf
                                                                      +cpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz
                                                                      +BenchmarkIndexIntSlice-8         5043324               236.2 ns/op
                                                                      +BenchmarkRangeIntSlice-8         5076255               239.1 ns/op
                                                                      +
                                                                      +

                                                                      genRandomIntSlice() 函数用于生成指定长度元素类型为 int 的切片。从最终的结果可以看到,遍历 []int 类型的切片,下标与 range 遍历性能几乎没有区别。

                                                                      +

                                                                      2.[]struct{}

                                                                      +

                                                                      那么对于稍微复杂一点的 []struct 类型呢?

                                                                      +
                                                                      type Item struct {
                                                                      +    id  int
                                                                      +    val [1024]byte
                                                                      +}
                                                                      +
                                                                      +func BenchmarkIndexStructSlice(b *testing.B) {
                                                                      +    items := make([]Item, 1024)
                                                                      +    for i := 0; i < b.N; i++ {
                                                                      +        var tmp int
                                                                      +        for j := 0; j < len(items); j++ {
                                                                      +            tmp = items[j].id
                                                                      +        }
                                                                      +        _ = tmp
                                                                      +    }
                                                                      +}
                                                                      +
                                                                      +func BenchmarkRangeIndexStructSlice(b *testing.B) {
                                                                      +    items := make([]Item, 1024)
                                                                      +    for i := 0; i < b.N; i++ {
                                                                      +        var tmp int
                                                                      +        for k := range items {
                                                                      +            tmp = items[k].id
                                                                      +        }
                                                                      +        _ = tmp
                                                                      +    }
                                                                      +}
                                                                      +
                                                                      +func BenchmarkRangeStructSlice(b *testing.B) {
                                                                      +    items := make([]Item, 1024)
                                                                      +    for i := 0; i < b.N; i++ {
                                                                      +        var tmp int
                                                                      +        for _, item := range items {
                                                                      +            tmp = item.id
                                                                      +        }
                                                                      +        _ = tmp
                                                                      +    }
                                                                      +}
                                                                      +
                                                                      +

                                                                      运行测试结果如下:

                                                                      +
                                                                      go test -bench=. -gcflags=-N -benchmem main/range
                                                                      +goos: darwin
                                                                      +goarch: amd64
                                                                      +pkg: main/range
                                                                      +cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
                                                                      +BenchmarkIndexStructSlice-12              556436              2165 ns/op               1 B/op          0 allocs/op
                                                                      +BenchmarkRangeIndexStructSlice-12         535705              2124 ns/op               1 B/op          0 allocs/op
                                                                      +BenchmarkRangeStructSlice-12               38799             30914 ns/op              27 B/op          0 allocs/op
                                                                      +PASS
                                                                      +ok      main/range      5.097s
                                                                      +
                                                                      +

                                                                      可以看出,两种通过 index 遍历 []struct 性能没有差别,但是 range 遍历 []struct 中元素时,性能非常差。

                                                                      +

                                                                      range 只遍历 []struct 下标时,性能比 range 遍历 []struct 值好很多。从这里我们应该能够知道二者性能差别之大的原因。

                                                                      +

                                                                      Item 是一个结构体类型 ,Item 由两个字段构成,一个类型是 int,一个是类型是 [1024]byte,如果每次遍历 []Item,都会进行一次值拷贝,所以带来了性能损耗。

                                                                      +

                                                                      此外,因 range 时获取的是值拷贝,对副本的修改,是不会影响到原切片。

                                                                      +

                                                                      需要注意的时,上面运行基准测试时,使用编译选项-gcflags=-N禁用了编译器对切片遍历的优化。如果没有该选项,那么上面三种遍历方式没有性能差别。

                                                                      +

                                                                      为什么编译器会对上面的测试代码进行优化呢?因为代码实际上只取最后一个切片元素的值,所以前面的循环操作可以跳过,这样便带来性能的提升。如果是下面的代码,那么编器将无法优化,必须遍历拷贝所有元素。

                                                                      +
                                                                      func BenchmarkRange1(b *testing.B) {
                                                                      +    items := make([]Item, 1024)
                                                                      +    tmps := make([]int, 1024)
                                                                      +    for i := 0; i < b.N; i++ {
                                                                      +        for j := range items {
                                                                      +            tmps[j] = items[j].id
                                                                      +        }
                                                                      +    }
                                                                      +}
                                                                      +
                                                                      +func BenchmarkRange2(b *testing.B) {
                                                                      +    items := make([]Item, 1024)
                                                                      +    tmps := make([]int, 1024)
                                                                      +    for i := 0; i < b.N; i++ {
                                                                      +        for j, item := range items {
                                                                      +            tmps[j] = item.id
                                                                      +        }
                                                                      +    }
                                                                      +}
                                                                      +
                                                                      +

                                                                      无需去除编译器优化,基准测试结果如下:

                                                                      +
                                                                      go test -bench=BenchmarkRange -benchmem  main/range
                                                                      +goos: darwin
                                                                      +goarch: amd64
                                                                      +pkg: main/range
                                                                      +cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
                                                                      +BenchmarkRange1-12       2290372               534.8 ns/op             0 B/op          0 allocs/op
                                                                      +BenchmarkRange2-12         46161             27169 ns/op              22 B/op          0 allocs/op
                                                                      +PASS
                                                                      +ok      main/range      3.378s
                                                                      +
                                                                      +

                                                                      3.[]*struct

                                                                      +

                                                                      如果切片中是指向结构体的指针,而不是结构体呢?

                                                                      +
                                                                      // genItems 生成指定长度 []*Item 切片
                                                                      +func genItems(n int) []*Item {
                                                                      +    items := make([]*Item, 0, n)
                                                                      +    for i := 0; i < n; i++ {
                                                                      +        items = append(items, &Item{id: i})
                                                                      +    }
                                                                      +    return items
                                                                      +}
                                                                      +
                                                                      +func BenchmarkIndexPointer(b *testing.B) {
                                                                      +    items := genItems(1024)
                                                                      +    for i := 0; i < b.N; i++ {
                                                                      +        var tmp int
                                                                      +        for k := 0; k < len(items); k++ {
                                                                      +            tmp = items[k].id
                                                                      +        }
                                                                      +        _ = tmp
                                                                      +    }
                                                                      +}
                                                                      +
                                                                      +func BenchmarkRangePointer(b *testing.B) {
                                                                      +    items := genItems(1024)
                                                                      +    for i := 0; i < b.N; i++ {
                                                                      +        var tmp int
                                                                      +        for _, item := range items {
                                                                      +            tmp = item.id
                                                                      +        }
                                                                      +        _ = tmp
                                                                      +    }
                                                                      +}
                                                                      +
                                                                      +

                                                                      执行性能测试结果:

                                                                      +
                                                                      go test -bench=Pointer$ main/perf
                                                                      +goos: windows
                                                                      +goarch: amd64
                                                                      +pkg: main/perf
                                                                      +cpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz
                                                                      +BenchmarkIndexPointer-8           773634              1521 ns/op
                                                                      +BenchmarkRangePointer-8           752077              1514 ns/op
                                                                      +
                                                                      +

                                                                      切片元素从结构体 Item 替换为指针 *Item 后,for 和 range 的性能几乎是一样的。而且使用指针还有另一个好处,可以直接修改指针对应的结构体的值。

                                                                      +

                                                                      4.小结

                                                                      +

                                                                      range 在迭代过程中返回的是元素的拷贝,index 则不存在拷贝。

                                                                      +

                                                                      如果 range 迭代的元素较小,那么 index 和 range 的性能几乎一样,如基本类型的切片 []int。但如果迭代的元素较大,如一个包含很多属性的 struct 结构体,那么 index 的性能将显著地高于 range,有时候甚至会有上千倍的性能差异。对于这种场景,建议使用 index。如果使用 range,建议只迭代下标,通过下标访问元素,这种使用方式和 index 就没有区别了。如果想使用 range 同时迭代下标和值,则需要将切片/数组的元素改为指针,才能不影响性能。

                                                                      +
                                                                      powered by Gitbook该文章修订时间: +2022-05-08 19:22:09 +
                                                                      + + +
                                                                      + +
                                                                      +
                                                                      +
                                                                      + +

                                                                      results matching ""

                                                                      +
                                                                        + +
                                                                        +
                                                                        + +

                                                                        No results matching ""

                                                                        + +
                                                                        +
                                                                        +
                                                                        + +
                                                                        +
                                                                        + +
                                                                        + + + + + + + + + + + + + + +
                                                                        + + +
                                                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/6.\345\210\207\347\211\207\345\210\240\351\231\244\346\214\207\345\256\232\345\205\203\347\264\240.html" "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/6.\345\210\207\347\211\207\345\210\240\351\231\244\346\214\207\345\256\232\345\205\203\347\264\240.html" new file mode 100644 index 0000000..e1f283f --- /dev/null +++ "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/6.\345\210\207\347\211\207\345\210\240\351\231\244\346\214\207\345\256\232\345\205\203\347\264\240.html" @@ -0,0 +1,1233 @@ + + + + + + + 6.切片删除指定元素 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                        +
                                                                        + + + + + + + + +
                                                                        + +
                                                                        + +
                                                                        + + + + + + + + +
                                                                        +
                                                                        + +
                                                                        +
                                                                        + +
                                                                        + +

                                                                        Go 并没有提供删除切片元素专用的语法或函数,需要使用切片本身的特性来删除元素。

                                                                        +

                                                                        删除切片指定元素一般有如下几种方法,本文以 []int 为例给出具体实现。

                                                                        +

                                                                        1.截取法(修改原切片)

                                                                        +

                                                                        这里利用对 slice 的截取删除指定元素。注意删除时,后面的元素会前移,下标 i 应该后移一位。

                                                                        +
                                                                        // DeleteSlice1 删除指定元素。
                                                                        +func DeleteSlice1(a []int, elem int) []int {
                                                                        +    for i := 0; i < len(a); i++ {
                                                                        +        if a[i] == elem {
                                                                        +            a = append(a[:i], a[i+1:]...)
                                                                        +            i--
                                                                        +        }
                                                                        +    }
                                                                        +    return a
                                                                        +}
                                                                        +
                                                                        +

                                                                        2.拷贝法(不改原切片)

                                                                        +

                                                                        这种方法最容易理解,重新使用一个 slice,将要删除的元素过滤掉。缺点是需要开辟另一个 slice 的空间,优点是容易理解,而且不会修改原 slice。

                                                                        +
                                                                        // DeleteSlice2 删除指定元素。
                                                                        +func DeleteSlice2(a []int, elem int) []int {
                                                                        +    tmp := make([]int, 0, len(a))
                                                                        +    for _, v := range a {
                                                                        +        if v != elem {
                                                                        +            tmp = append(tmp, v)
                                                                        +        }
                                                                        +    }
                                                                        +    return tmp
                                                                        +}
                                                                        +
                                                                        +

                                                                        3.移位法(修改原切片)

                                                                        +
                                                                          +
                                                                        • 方式一
                                                                        • +
                                                                        +

                                                                        利用一个下标 index,记录下一个有效元素应该在的位置。遍历所有元素,当遇到有效元素,将其移动到 index 且 index 加一。最终 index 的位置就是所有有效元素的下一个位置,最后做一个截取就行了。这种方法会修改原来的 slice。

                                                                        +

                                                                        该方法可以看成对第一种方法截取法的改进,因为每次指需移动一个元素,性能更加。

                                                                        +
                                                                        // DeleteSlice3 删除指定元素。
                                                                        +func DeleteSlice3(a []int, elem int) []int {
                                                                        +    j := 0
                                                                        +    for _, v := range a {
                                                                        +        if v != elem {
                                                                        +            a[j] = v
                                                                        +            j++
                                                                        +        }
                                                                        +    }
                                                                        +    return a[:j]
                                                                        +}
                                                                        +
                                                                        +
                                                                          +
                                                                        • 方式二
                                                                        • +
                                                                        +

                                                                        创建了一个 slice,但是共用原始 slice 的底层数组。这样也不需要额外分配内存空间,直接在原 slice 上进行修改。

                                                                        +
                                                                        // DeleteSlice4 删除指定元素。
                                                                        +func DeleteSlice4(a []int, elem int) []int {
                                                                        +    tgt := a[:0]
                                                                        +    for _, v := range a {
                                                                        +        if v != elem {
                                                                        +            tgt = append(tgt, v)
                                                                        +        }
                                                                        +    }
                                                                        +    return tgt
                                                                        +}
                                                                        +
                                                                        +

                                                                        4.性能对比

                                                                        +

                                                                        假设我们的切片有 0 和 1,我们要删除所有的 0。

                                                                        +

                                                                        这里分别对长度为 10、100、1000 的切片进行测试,来上下上面四种实现的性能差异。

                                                                        +

                                                                        生成切片函数如下:

                                                                        +
                                                                        func getSlice(n int) []int {
                                                                        +    a := make([]int, 0, n)
                                                                        +    for i := 0; i < n; i++ {
                                                                        +        if i%2 == 0 {
                                                                        +            a = append(a, 0)
                                                                        +            continue
                                                                        +        }
                                                                        +        a = append(a, 1)
                                                                        +    }
                                                                        +    return a
                                                                        +}
                                                                        +
                                                                        +

                                                                        基准测试代码如下:

                                                                        +
                                                                        func BenchmarkDeleteSlice1(b *testing.B) {
                                                                        +    for i := 0; i < b.N; i++ {
                                                                        +        _ = DeleteSlice1(getSlice(10), 0)
                                                                        +    }
                                                                        +}
                                                                        +func BenchmarkDeleteSlice2(b *testing.B) {
                                                                        +    for i := 0; i < b.N; i++ {
                                                                        +        _ = DeleteSlice2(getSlice(10), 0)
                                                                        +    }
                                                                        +}
                                                                        +func BenchmarkDeleteSlice3(b *testing.B) {
                                                                        +    for i := 0; i < b.N; i++ {
                                                                        +        _ = DeleteSlice3(getSlice(10), 0)
                                                                        +    }
                                                                        +}
                                                                        +func BenchmarkDeleteSlice4(b *testing.B) {
                                                                        +    for i := 0; i < b.N; i++ {
                                                                        +        _ = DeleteSlice4(getSlice(10), 0)
                                                                        +    }
                                                                        +}
                                                                        +
                                                                        +

                                                                        测试结果如下: +原切片长度为 10:

                                                                        +
                                                                        go test -bench=. main/slice
                                                                        +goos: windows
                                                                        +goarch: amd64
                                                                        +pkg: main/slice
                                                                        +cpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz
                                                                        +BenchmarkDeleteSlice1-8         17466486                65.07 ns/op
                                                                        +BenchmarkDeleteSlice2-8         14897282                85.22 ns/op
                                                                        +BenchmarkDeleteSlice3-8         21952129                50.78 ns/op
                                                                        +BenchmarkDeleteSlice4-8         22176390                54.68 ns/op
                                                                        +PASS
                                                                        +ok      main/slice      5.427s
                                                                        +

                                                                        原切片长度为 100:

                                                                        +
                                                                        BenchmarkDeleteSlice1-8          1652146               762.1 ns/op
                                                                        +BenchmarkDeleteSlice2-8          2124237               578.4 ns/op
                                                                        +BenchmarkDeleteSlice3-8          3161318               359.9 ns/op
                                                                        +BenchmarkDeleteSlice4-8          2714158               423.7 ns/op
                                                                        +

                                                                        原切片长度为 1000:

                                                                        +
                                                                        BenchmarkDeleteSlice1-8            56067             21915 ns/op
                                                                        +BenchmarkDeleteSlice2-8           258662              5007 ns/op
                                                                        +BenchmarkDeleteSlice3-8           432049              2724 ns/op
                                                                        +BenchmarkDeleteSlice4-8           325194              3615 ns/op
                                                                        +

                                                                        5.小结

                                                                        +

                                                                        从基准测试结果来看,性能最佳的方法是移位法,其中又属第一种实现方式较佳。性能最差的也是最常用的方法是截取法。随着切片长度的增加,上面四种删除方式的性能差异会愈加明显。

                                                                        +

                                                                        实际使用时,我们可以根据不用场景来选择。如不能修改原切片使用拷贝法,可以修改原切片使用移位法中的第一种实现方式。

                                                                        +
                                                                        powered by Gitbook该文章修订时间: +2022-05-08 19:22:09 +
                                                                        + + +
                                                                        + +
                                                                        +
                                                                        +
                                                                        + +

                                                                        results matching ""

                                                                        +
                                                                          + +
                                                                          +
                                                                          + +

                                                                          No results matching ""

                                                                          + +
                                                                          +
                                                                          +
                                                                          + +
                                                                          +
                                                                          + +
                                                                          + + + + + + + + + + +
                                                                          + + +
                                                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/1.\344\275\277\347\224\250\347\251\272\347\273\223\346\236\204\344\275\223\350\212\202\347\234\201\345\206\205\345\255\230.html" "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/1.\344\275\277\347\224\250\347\251\272\347\273\223\346\236\204\344\275\223\350\212\202\347\234\201\345\206\205\345\255\230.html" new file mode 100644 index 0000000..645879b --- /dev/null +++ "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/1.\344\275\277\347\224\250\347\251\272\347\273\223\346\236\204\344\275\223\350\212\202\347\234\201\345\206\205\345\255\230.html" @@ -0,0 +1,1185 @@ + + + + + + + 1.使用空结构体节省内存 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                          +
                                                                          + + + + + + + + +
                                                                          + +
                                                                          + +
                                                                          + + + + + + + + +
                                                                          +
                                                                          + +
                                                                          +
                                                                          + +
                                                                          + +

                                                                          1.不占内存空间

                                                                          +

                                                                          在 Go 中,我们可以使用 unsafe.Sizeof 计算出一个数据类型实例需要占用的字节数。

                                                                          +
                                                                          package main
                                                                          +
                                                                          +import (
                                                                          +    "fmt"
                                                                          +    "unsafe"
                                                                          +)
                                                                          +
                                                                          +func main() {
                                                                          +    fmt.Println(unsafe.Sizeof(struct{}{}))
                                                                          +}
                                                                          +
                                                                          +

                                                                          运行上面的例子将会输出:

                                                                          +
                                                                          go run main.go
                                                                          +0
                                                                          +
                                                                          +

                                                                          可以看到,Go 中空结构体 struct{} 是不占用内存空间,不像 C/C++ 中空结构体仍占用 1 字节。

                                                                          +

                                                                          2.空结构体的作用

                                                                          +

                                                                          因为空结构体不占据内存空间,因此被广泛作为各种场景下的占位符使用。一是节省资源,二是空结构体本身就具备很强的语义,即这里不需要任何值,仅作为占位符,达到的代码即注释的效果。

                                                                          +

                                                                          2.1 实现集合(Set)

                                                                          +

                                                                          Go 语言标准库没有提供 Set 的实现,通常使用 map 来代替。事实上,对于集合来说,只需要 map 的键,而不需要值。即使是将值设置为 bool 类型,也会多占据 1 个字节,那假设 map 中有一百万条数据,就会浪费 1MB 的空间。

                                                                          +

                                                                          因此呢,将 map 作为集合(Set)使用时,可以将值类型定义为空结构体,仅作为占位符使用即可。

                                                                          +
                                                                          type Set map[string]struct{}
                                                                          +
                                                                          +func (s Set) Has(key string) bool {
                                                                          +    _, ok := s[key]
                                                                          +    return ok
                                                                          +}
                                                                          +
                                                                          +func (s Set) Add(key string) {
                                                                          +    s[key] = struct{}{}
                                                                          +}
                                                                          +
                                                                          +func (s Set) Delete(key string) {
                                                                          +    delete(s, key)
                                                                          +}
                                                                          +
                                                                          +func main() {
                                                                          +    s := make(Set)
                                                                          +    s.Add("foo")
                                                                          +    s.Add("bar")
                                                                          +    fmt.Println(s.Has("foo"))
                                                                          +    fmt.Println(s.Has("bar"))
                                                                          +}
                                                                          +
                                                                          +

                                                                          如果想使用 Set 的完整功能,如初始化(通过切片构建一个 Set)、Add、Del、Clear、Contains 等操作,可以使用开源库 golang-set

                                                                          +

                                                                          2.2 不发送数据的信道

                                                                          +
                                                                          func worker(ch chan struct{}) {
                                                                          +    <-ch
                                                                          +    fmt.Println("do something")
                                                                          +}
                                                                          +
                                                                          +func main() {
                                                                          +    ch := make(chan struct{})
                                                                          +    go worker(ch)
                                                                          +    ch <- struct{}{}
                                                                          +    close(ch)
                                                                          +}
                                                                          +
                                                                          +

                                                                          有时候使用 channel 不需要发送任何的数据,只用来通知子协程(goroutine)执行任务,或只用来控制协程的并发。这种情况下,使用空结构体作为占位符就非常合适了。

                                                                          +

                                                                          2.3 仅包含方法的结构体

                                                                          +
                                                                          type Door struct{}
                                                                          +
                                                                          +func (d Door) Open() {
                                                                          +    fmt.Println("Open the door")
                                                                          +}
                                                                          +
                                                                          +func (d Door) Close() {
                                                                          +    fmt.Println("Close the door")
                                                                          +}
                                                                          +
                                                                          +

                                                                          在部分场景下,结构体只包含方法,不包含任何的字段。例如上面例子中的 Door,在这种情况下,Door 事实上可以用任何的数据结构替代。

                                                                          +
                                                                          type Door int
                                                                          +type Door bool
                                                                          +
                                                                          +

                                                                          无论是 int 还是 bool 都会浪费额外的内存。因此,在这种情况下,声明为空结构体最合适。

                                                                          +
                                                                          powered by Gitbook该文章修订时间: +2022-05-08 19:22:09 +
                                                                          + + +
                                                                          + +
                                                                          +
                                                                          +
                                                                          + +

                                                                          results matching ""

                                                                          +
                                                                            + +
                                                                            +
                                                                            + +

                                                                            No results matching ""

                                                                            + +
                                                                            +
                                                                            +
                                                                            + +
                                                                            +
                                                                            + +
                                                                            + + + + + + + + + + +
                                                                            + + +
                                                                            + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/2.struct\345\270\203\345\261\200\350\200\203\350\231\221\345\206\205\345\255\230\345\257\271\351\275\220.html" "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/2.struct\345\270\203\345\261\200\350\200\203\350\231\221\345\206\205\345\255\230\345\257\271\351\275\220.html" new file mode 100644 index 0000000..8e92a92 --- /dev/null +++ "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/2.struct\345\270\203\345\261\200\350\200\203\350\231\221\345\206\205\345\255\230\345\257\271\351\275\220.html" @@ -0,0 +1,1187 @@ + + + + + + + 2.struct 布局考虑内存对齐 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                            +
                                                                            + + + + + + + + +
                                                                            + +
                                                                            + +
                                                                            + + + + + + + + +
                                                                            +
                                                                            + +
                                                                            +
                                                                            + +
                                                                            + +

                                                                            1.为什么需要内存对齐

                                                                            +

                                                                            CPU 访问内存并不是逐个字节访问,而是以字长(word size)为单位访问。如 32 位的 CPU ,字长为 4 字节,那么 CPU 访存的单位是 4 字节。

                                                                            +

                                                                            这么设计的目的,是减少 CPU 访问内存的次数,加大 CPU 访问内存的吞吐量。比如同样读取 8 个字节的数据,一次读取 4 个字节那么只需要读取 2 次。

                                                                            +

                                                                            CPU 始终以字长访问内存,如果不进行内存对齐,可能会增加 CPU 访存次数。

                                                                            +

                                                                            +

                                                                            内存对齐前变量 a、b 各占据 3 个字节,CPU 读取 b 变量的值需要两次访存,第一次访存得到前一个字节,第二次得到后两个字节。内存对齐后 a、b 各占 4 个字节,CPU 读取 b 变量的值只需要一次访存。

                                                                            +

                                                                            从这个例子可以看到,内存对齐对实现变量的原子性操作也是有好处的。每次内存访问是原子的,如果变量的大小不超过字长,那么内存对齐后,对该变量的访问就是原子的,这个特性在并发场景下至关重要。

                                                                            +

                                                                            简言之:合理的内存对齐可以提高内存读写的性能,并且便于实现变量操作的原子性。

                                                                            +

                                                                            2.Go 内存对齐规则

                                                                            +

                                                                            编译器一般为了减少 CPU 访存指令周期,提高内存的访问效率,会对变量进行内存对齐。Go 作为一门追求高性能的后台编程语言,当然也不例外。

                                                                            +

                                                                            Go Language Specification 中 Size and alignment guarantees 描述了内存对齐的规则。

                                                                            +
                                                                            +

                                                                            1.For a variable x of any type: unsafe.Alignof(x) is at least 1. +2.For a variable x of struct type: unsafe.Alignof(x) is the largest of all the values unsafe.Alignof(x.f) for each field f of x, but at least 1. +3.For a variable x of array type: unsafe.Alignof(x) is the same as the alignment of a variable of the array's element type.

                                                                            +
                                                                            +
                                                                              +
                                                                            • 对于任意类型的变量 x ,unsafe.Alignof(x) 至少为 1。
                                                                            • +
                                                                            • 对于结构体类型的变量 x,计算 x 每一个字段 f 的 unsafe.Alignof(x.f),unsafe.Alignof(x) 等于其中的最大值。
                                                                            • +
                                                                            • 对于数组类型的变量 x,unsafe.Alignof(x) 等于构成数组的元素类型的对齐系数。
                                                                            • +
                                                                            +

                                                                            其中函数 unsafe.Alignof 用于获取变量的对齐系数。 对齐系数决定了字段的偏移和变量的大小,两者必须是对齐系数的整数倍。

                                                                            +

                                                                            3.合理的 struct 布局

                                                                            +

                                                                            因为内存对齐的存在,合理的 struct 布局可以减少内存占用,提高程序性能。

                                                                            +
                                                                            type demo1 struct {
                                                                            +    a int8
                                                                            +    b int16
                                                                            +    c int32
                                                                            +}
                                                                            +
                                                                            +type demo2 struct {
                                                                            +    a int8
                                                                            +    c int32
                                                                            +    b int16
                                                                            +}
                                                                            +
                                                                            +func main() {
                                                                            +    fmt.Println(unsafe.Sizeof(demo1{})) // 8
                                                                            +    fmt.Println(unsafe.Sizeof(demo2{})) // 12
                                                                            +}
                                                                            +
                                                                            +

                                                                            可以看到,同样的字段,因排列顺序不同,会导致不一样的结构体大小。

                                                                            +

                                                                            每个字段按照自身的对齐系数来确定在内存中的偏移量,一个字段因偏移而浪费的大小也不同。

                                                                            +

                                                                            接下来逐个分析,首先是 demo1: +a 是第一个字段,默认是已经对齐的,从第 0 个位置开始占据 1 字节。 +b 是第二个字段,对齐系数为 2,因此,必须空出 1 个字节,偏移量才是 2 的倍数,从第 2 个位置开始占据 2 字节。 +c 是第三个字段,对齐倍数为 4,此时,内存已经是对齐的,从第 4 个位置开始占据 4 字节即可。

                                                                            +

                                                                            因此 demo1 的内存占用为 8 字节。

                                                                            +

                                                                            对于 demo2: +a 是第一个字段,默认是已经对齐的,从第 0 个位置开始占据 1 字节。 +c 是第二个字段,对齐倍数为 4,因此,必须空出 3 个字节,偏移量才是 4 的倍数,从第 4 个位置开始占据 4 字节。 +b 是第三个字段,对齐倍数为 2,从第 8 个位置开始占据 2 字节。

                                                                            +

                                                                            demo2 的对齐系数由 c 的对齐系数决定,也是 4,因此,demo2 的内存占用为 12 字节。

                                                                            +

                                                                            +

                                                                            因此,在对内存特别敏感的结构体的设计上,我们可以通过调整字段的顺序,将字段宽度从小到大由上到下排列,来减少内存的占用。

                                                                            +

                                                                            4.空结构与空数组对内存对齐的影响

                                                                            +

                                                                            空结构与空数组在 Go 中比较特殊。没有任何字段的空 struct{} 和没有任何元素的 array 占据的内存空间大小为 0。

                                                                            +

                                                                            因为这一点,空 struct{} 或空 array 作为其他 struct 的字段时,一般不需要内存对齐。但是有一种情况除外:即当 struct{} 或空 array 作为结构体最后一个字段时,需要内存对齐。因为如果有指针指向该字段,返回的地址将在结构体之外,如果此指针一直存活不释放对应的内存,就会有内存泄露的问题(该内存不因结构体释放而释放)。

                                                                            +
                                                                            type demo3 struct {
                                                                            +    a struct{}
                                                                            +    b int32
                                                                            +}
                                                                            +type demo4 struct {
                                                                            +    b int32
                                                                            +    a struct{}
                                                                            +}
                                                                            +
                                                                            +func main() {
                                                                            +    fmt.Println(unsafe.Sizeof(demo3{})) // 4
                                                                            +    fmt.Println(unsafe.Sizeof(demo4{})) // 8
                                                                            +}
                                                                            +
                                                                            +

                                                                            可以看到,demo3{} 的大小为 4 字节,与字段 b 占据空间一致,而 demo4{} 的大小为 8 字节,即额外填充了 4 字节的空间。

                                                                            +
                                                                            powered by Gitbook该文章修订时间: +2022-05-08 19:22:09 +
                                                                            + + +
                                                                            + +
                                                                            +
                                                                            +
                                                                            + +

                                                                            results matching ""

                                                                            +
                                                                              + +
                                                                              +
                                                                              + +

                                                                              No results matching ""

                                                                              + +
                                                                              +
                                                                              +
                                                                              + +
                                                                              +
                                                                              + +
                                                                              + + + + + + + + + + + + + + +
                                                                              + + +
                                                                              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/3.\345\207\217\345\260\221\351\200\203\351\200\270\357\274\214\345\260\206\345\217\230\351\207\217\351\231\220\345\210\266\345\234\250\346\240\210\344\270\212.html" "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/3.\345\207\217\345\260\221\351\200\203\351\200\270\357\274\214\345\260\206\345\217\230\351\207\217\351\231\220\345\210\266\345\234\250\346\240\210\344\270\212.html" new file mode 100644 index 0000000..1ddffce --- /dev/null +++ "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/3.\345\207\217\345\260\221\351\200\203\351\200\270\357\274\214\345\260\206\345\217\230\351\207\217\351\231\220\345\210\266\345\234\250\346\240\210\344\270\212.html" @@ -0,0 +1,1356 @@ + + + + + + + 3.减少逃逸,将变量限制在栈上 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                              +
                                                                              + + + + + + + + +
                                                                              + +
                                                                              + +
                                                                              + + + + + + + + +
                                                                              +
                                                                              + +
                                                                              +
                                                                              + +
                                                                              + +

                                                                              变量逃逸一般发生在如下几种情况:

                                                                              +
                                                                                +
                                                                              • 变量较大(栈空间不足)
                                                                              • +
                                                                              • 变量大小不确定(如 slice 长度或容量不定)
                                                                              • +
                                                                              • 返回地址
                                                                              • +
                                                                              • 返回引用(引用变量的底层是指针)
                                                                              • +
                                                                              • 返回值类型不确定(不能确定大小)
                                                                              • +
                                                                              • 闭包
                                                                              • +
                                                                              • 其他
                                                                              • +
                                                                              +

                                                                              知道变量逃逸的原因后,我们可以有意识地避免变量发生逃逸,将其限制在栈上,减少堆变量的分配,降低 GC 成本,可提高程序性能。

                                                                              +

                                                                              1.局部切片尽可能确定长度或容量

                                                                              +

                                                                              如果使用局部切片时,已知切片的长度或容量,请使用常量或数值字面量来定义。

                                                                              +
                                                                              package main
                                                                              +
                                                                              +func main() {
                                                                              +    number := 10
                                                                              +    s1 := make([]int, 0, number)
                                                                              +    for i := 0; i < number; i++ {
                                                                              +        s1 = append(s1, i)
                                                                              +    }
                                                                              +    s2 := make([]int, 0, 10)
                                                                              +    for i := 0; i < 10; i++ {
                                                                              +        s2 = append(s2, i)
                                                                              +    }
                                                                              +}
                                                                              +
                                                                              +

                                                                              我们来看一下编译器编译时对上面两个切片的优化决策。

                                                                              +
                                                                               go build -gcflags="-m -m -l" main.go
                                                                              +# command-line-arguments
                                                                              +./main.go:5:12: make([]int, 0, number) escapes to heap:
                                                                              +./main.go:5:12:   flow: {heap} = &{storage for make([]int, 0, number)}:
                                                                              +./main.go:5:12:     from make([]int, 0, number) (non-constant size) at ./main.go:5:12
                                                                              +./main.go:5:12: make([]int, 0, number) escapes to heap
                                                                              +./main.go:9:12: make([]int, 0, 10) does not escape
                                                                              +
                                                                              +

                                                                              从输出结果可以看到,使用变量(非常量)来指定切片的容量,会导致切片发生逃逸,影响性能。指定切片的长度时也是一样的,尽可能使用常量或数值字面量。

                                                                              +

                                                                              下面看下二者的性能差异。

                                                                              +
                                                                              // sliceEscape 发生逃逸,在堆上申请切片
                                                                              +func sliceEscape() {
                                                                              +    number := 10
                                                                              +    s1 := make([]int, 0, number)
                                                                              +    for i := 0; i < number; i++ {
                                                                              +        s1 = append(s1, i)
                                                                              +    }
                                                                              +}
                                                                              +
                                                                              +// sliceNoEscape 不逃逸,限制在栈上
                                                                              +func sliceNoEscape() {
                                                                              +    s1 := make([]int, 0, 10)
                                                                              +    for i := 0; i < 10; i++ {
                                                                              +        s1 = append(s1, i)
                                                                              +    }
                                                                              +}
                                                                              +
                                                                              +func BenchmarkSliceEscape(b *testing.B) {
                                                                              +    for i := 0; i < b.N; i++ {
                                                                              +        sliceEscape()
                                                                              +    }
                                                                              +}
                                                                              +
                                                                              +func BenchmarkSliceNoEscape(b *testing.B) {
                                                                              +    for i := 0; i < b.N; i++ {
                                                                              +        sliceNoEscape()
                                                                              +    }
                                                                              +}
                                                                              +
                                                                              +

                                                                              运行上面的基准测试结果如下:

                                                                              +
                                                                              go test -bench=BenchmarkSlice -benchmem main/copy  
                                                                              +goos: darwin
                                                                              +goarch: amd64
                                                                              +pkg: main/copy
                                                                              +cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
                                                                              +BenchmarkSliceEscape-12         43268738                27.40 ns/op           80 B/op          1 allocs/op
                                                                              +BenchmarkSliceNoEscape-12       186127288                6.454 ns/op           0 B/op          0 allocs/op
                                                                              +PASS
                                                                              +ok      main/copy       4.402s
                                                                              +
                                                                              +

                                                                              2.返回值 VS 返回指针

                                                                              +

                                                                              值传递会拷贝整个对象,而指针传递只会拷贝地址,指向的对象是同一个。传指针可以减少值的拷贝,但是会导致内存分配逃逸到堆中,增加垃圾回收(GC)的负担。在对象频繁创建和删除的场景下,返回指针导致的 GC 开销可能会严重影响性能。

                                                                              +

                                                                              一般情况下,对于需要修改原对象,或占用内存比较大的对象,返回指针。对于只读或占用内存较小的对象,返回值能够获得更好的性能。

                                                                              +

                                                                              下面以一个简单的示例来看下二者的性能差异。

                                                                              +
                                                                              type St struct {
                                                                              +    arr [1024]int
                                                                              +}
                                                                              +
                                                                              +func retValue() St {
                                                                              +    var st St
                                                                              +    return st
                                                                              +}
                                                                              +
                                                                              +func retPtr() *St {
                                                                              +    var st St
                                                                              +    return &st
                                                                              +}
                                                                              +
                                                                              +func BenchmarkRetValue(b *testing.B) {
                                                                              +    for i := 0; i < b.N; i++ {
                                                                              +        _ = retValue()
                                                                              +    }
                                                                              +}
                                                                              +
                                                                              +func BenchmarkRetPtr(b *testing.B) {
                                                                              +    for i := 0; i < b.N; i++ {
                                                                              +        _ = retPtr()
                                                                              +    }
                                                                              +}
                                                                              +
                                                                              +

                                                                              基准测试结果如下:

                                                                              +
                                                                              go test -gcflags="-l" -bench=BenchmarkRet -benchmem main/copy
                                                                              +goos: darwin
                                                                              +goarch: amd64
                                                                              +pkg: main/copy
                                                                              +cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
                                                                              +BenchmarkRetValue-12             5194722               216.2 ns/op             0 B/op          0 allocs/op
                                                                              +BenchmarkRetPtr-12               1342947               893.6 ns/op          8192 B/op          1 allocs/op
                                                                              +PASS
                                                                              +ok      main/copy       3.865s
                                                                              +
                                                                              +

                                                                              3.小的拷贝好过引用

                                                                              +

                                                                              小的拷贝好过引用,什么意思呢,就是尽量使用栈变量而不是堆变量。下面举一个反常识的例子,来证明小的拷贝比在堆上创建引用变量要好。

                                                                              +

                                                                              我们都知道 Go 里面的 Array 以 pass-by-value 方式传递后,再加上其长度不可扩展,考虑到性能我们一般很少使用它。实际上,凡事无绝对。有时使用数组进行拷贝传递,比使用切片要好。

                                                                              +
                                                                              // copy/copy.go
                                                                              +
                                                                              +const capacity = 1024
                                                                              +
                                                                              +func arrayFibonacci() [capacity]int {
                                                                              +    var d [capacity]int
                                                                              +    for i := 0; i < len(d); i++ {
                                                                              +        if i <= 1 {
                                                                              +            d[i] = 1
                                                                              +            continue
                                                                              +        }
                                                                              +        d[i] = d[i-1] + d[i-2]
                                                                              +    }
                                                                              +    return d
                                                                              +}
                                                                              +
                                                                              +func sliceFibonacci() []int {
                                                                              +    d := make([]int, capacity)
                                                                              +    for i := 0; i < len(d); i++ {
                                                                              +        if i <= 1 {
                                                                              +            d[i] = 1
                                                                              +            continue
                                                                              +        }
                                                                              +        d[i] = d[i-1] + d[i-2]
                                                                              +    }
                                                                              +    return d
                                                                              +}
                                                                              +
                                                                              +

                                                                              下面看一下性能对比。

                                                                              +
                                                                              func BenchmarkArray(b *testing.B) {
                                                                              +    for i := 0; i < b.N; i++ {
                                                                              +        _ = arrayFibonacci()
                                                                              +    }
                                                                              +}
                                                                              +
                                                                              +func BenchmarkSlice(b *testing.B) {
                                                                              +    for i := 0; i < b.N; i++ {
                                                                              +        _ = sliceFibonacci()
                                                                              +    }
                                                                              +}
                                                                              +
                                                                              +

                                                                              运行上面的基准测试,将得到如下结果。

                                                                              +
                                                                              go test -bench=. -benchmem -gcflags="-l" main/copy
                                                                              +goos: darwin
                                                                              +goarch: amd64
                                                                              +pkg: main/copy
                                                                              +cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
                                                                              +BenchmarkArray-12         692400              1708 ns/op               0 B/op          0 allocs/op
                                                                              +BenchmarkSlice-12         464974              2242 ns/op            8192 B/op          1 allocs/op
                                                                              +PASS
                                                                              +ok      main/copy       3.908s
                                                                              +
                                                                              +

                                                                              从测试结果可以看出,对数组的拷贝性能却比使用切片要好。为什么会这样呢?

                                                                              +

                                                                              sliceFibonacci()函数中分配的局部变量切片因为要返回到函数外部,所以发生了逃逸,需要在堆上申请内存空间。从测试也过也可以看出,arrayFibonacci()函数没有内存分配,完全在栈上完成数组的创建。这里说明了对于一些短小的对象,栈上复制的成本远小于在堆上分配和回收的成本。

                                                                              +

                                                                              需要注意,运行上面基准测试时,传递了禁止内联的编译选项 "-l",如果发生内联,那么将不会出现变量的逃逸,就不存在堆上分配内存与回收的操作了,二者将看不出性能差异。

                                                                              +

                                                                              编译时可以借助选项-gcflags=-m查看编译器对上面两个函数的优化决策。

                                                                              +
                                                                              go build  -gcflags=-m copy/copy.go
                                                                              +# command-line-arguments
                                                                              +copy/copy.go:5:6: can inline arrayFibonacci
                                                                              +copy/copy.go:17:6: can inline sliceFibonacci
                                                                              +copy/copy.go:18:11: make([]int, capacity) escapes to heap
                                                                              +
                                                                              +

                                                                              可以看到,arrayFibonacci() 和 sliceFibonacci() 函数均可内联。sliceFibonacci() 函数中定义的局部变量切片逃逸到了堆。

                                                                              +

                                                                              那么多大的变量才算是小变量呢? 对 Go 编译器而言,超过一定大小的局部变量将逃逸到堆上,不同 Go 版本的大小限制可能不一样。一般是 < 64KB,局部变量将不会逃逸到堆上。

                                                                              +

                                                                              4.返回值使用确定的类型

                                                                              +

                                                                              如果变量类型不确定,那么将会逃逸到堆上。所以,函数返回值如果能确定的类型,就不要使用 interface{}。

                                                                              +

                                                                              我们还是以上面斐波那契数列函数为例,看下返回值为确定类型和 interface{} 的性能差别。

                                                                              +
                                                                              const capacity = 1024
                                                                              +
                                                                              +func arrayFibonacci() [capacity]int {
                                                                              +    var d [capacity]int
                                                                              +    for i := 0; i < len(d); i++ {
                                                                              +        if i <= 1 {
                                                                              +            d[i] = 1
                                                                              +            continue
                                                                              +        }
                                                                              +        d[i] = d[i-1] + d[i-2]
                                                                              +    }
                                                                              +    return d
                                                                              +}
                                                                              +
                                                                              +func arrayFibonacciIfc() interface{} {
                                                                              +    var d [capacity]int
                                                                              +    for i := 0; i < len(d); i++ {
                                                                              +        if i <= 1 {
                                                                              +            d[i] = 1
                                                                              +            continue
                                                                              +        }
                                                                              +        d[i] = d[i-1] + d[i-2]
                                                                              +    }
                                                                              +    return d
                                                                              +}
                                                                              +
                                                                              +
                                                                              func BenchmarkArray(b *testing.B) {
                                                                              +    for i := 0; i < b.N; i++ {
                                                                              +        _ = arrayFibonacci()
                                                                              +    }
                                                                              +}
                                                                              +
                                                                              +func BenchmarkIfc(b *testing.B) {
                                                                              +    for i := 0; i < b.N; i++ {
                                                                              +        _ = arrayFibonacciIfc()
                                                                              +    }
                                                                              +}
                                                                              +
                                                                              +

                                                                              运行上面的基准测试结果如下:

                                                                              +
                                                                              go test -bench=. -benchmem main/copy
                                                                              +goos: darwin
                                                                              +goarch: amd64
                                                                              +pkg: main/copy
                                                                              +cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
                                                                              +BenchmarkArray-12         832418              1427 ns/op               0 B/op          0 allocs/op
                                                                              +BenchmarkIfc-12           380626              2861 ns/op            8192 B/op          1 allocs/op
                                                                              +PASS
                                                                              +ok      main/copy       3.742s
                                                                              +
                                                                              +

                                                                              可见,函数返回值使用 interface{} 返回时,编译器无法确定返回值的具体类型,导致返回值逃逸到堆上。当发生了堆上内存的申请与回收时,性能会差一点。

                                                                              +

                                                                              5.小结

                                                                              +

                                                                              栈上分配内存比在堆中分配内存有更高的效率。因为栈上分配的内存不需要 GC 处理,函数返回后就会直接释放,而堆上分配的内存使用完毕会交给 GC 处理。在知道常见的变量逃逸场景后,我们在编码时可以有意识地避免变量发生逃逸,尽可能地使用栈空间,而非堆空间。

                                                                              +

                                                                              以上仅列出了部分变量发生逃逸的情形。实际上,Go 编译器对变量的逃逸分析决策远比我们想像的要复杂。我们只能尽可能地去勾勒而无以绘其全貌。Go 官方也在 Frequently Asked Questions (FAQ) 明确地告诉我们,我们并不需要知道变量是分配在栈(stack)上还是堆(heap)上。Golang 中的变量只要被引用就一直会存活,存储在堆上还是栈上由 Go 内部实现决定而和具体的语法没有关系。

                                                                              +
                                                                              powered by Gitbook该文章修订时间: +2022-05-08 19:22:09 +
                                                                              + + +
                                                                              + +
                                                                              +
                                                                              +
                                                                              + +

                                                                              results matching ""

                                                                              +
                                                                                + +
                                                                                +
                                                                                + +

                                                                                No results matching ""

                                                                                + +
                                                                                +
                                                                                +
                                                                                + +
                                                                                +
                                                                                + +
                                                                                + + + + + + + + + + + + + + +
                                                                                + + +
                                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/4.sync.Pool\345\244\215\347\224\250\345\257\271\350\261\241.html" "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/4.sync.Pool\345\244\215\347\224\250\345\257\271\350\261\241.html" new file mode 100644 index 0000000..8f38013 --- /dev/null +++ "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/4.sync.Pool\345\244\215\347\224\250\345\257\271\350\261\241.html" @@ -0,0 +1,1239 @@ + + + + + + + 4.sync.Pool 复用对象 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                +
                                                                                + + + + + + + + +
                                                                                + +
                                                                                + +
                                                                                + + + + + + + + +
                                                                                +
                                                                                + +
                                                                                +
                                                                                + +
                                                                                + +

                                                                                1.简介

                                                                                +

                                                                                sync.Pool 是 sync 包下的一个组件,可以作为保存临时取还对象的一个“池子”。个人觉得它的名字有一定的误导性,因为 Pool 里装的对象可以被无通知地被回收,可能 sync.Cache 是一个更合适的名字。

                                                                                +

                                                                                sync.Pool 是可伸缩的,同时也是并发安全的,其容量仅受限于内存的大小。存放在池中的对象如果不活跃了会被自动清理。

                                                                                +

                                                                                2.作用

                                                                                +

                                                                                对于很多需要重复分配、回收内存的地方,sync.Pool 是一个很好的选择。频繁地分配、回收内存会给 GC 带来一定的负担,严重的时候会引起 CPU 的毛刺,而 sync.Pool 可以将暂时不用的对象缓存起来,待下次需要的时候直接使用,不用再次经过内存分配,复用对象的内存,减轻 GC 的压力,提升系统的性能。

                                                                                +

                                                                                一句话总结:用来保存和复用临时对象,减少内存分配,降低 GC 压力。

                                                                                +

                                                                                3.如何使用

                                                                                +

                                                                                sync.Pool 的使用方式非常简单,只需要实现 New 函数即可。对象池中没有对象时,将会调用 New 函数创建。

                                                                                +

                                                                                假设我们有一个“学生”结构体,并复用改结构体对象。

                                                                                +
                                                                                type Student struct {
                                                                                +    Name   string
                                                                                +    Age    int32
                                                                                +    Remark [1024]byte
                                                                                +}
                                                                                +
                                                                                +var studentPool = sync.Pool{
                                                                                +    New: func() interface{} { 
                                                                                +        return new(Student) 
                                                                                +    },
                                                                                +}
                                                                                +
                                                                                +

                                                                                然后调用 Pool 的 Get() 和 Put() 方法来获取和放回池子中。

                                                                                +
                                                                                stu := studentPool.Get().(*Student)
                                                                                +json.Unmarshal(buf, stu)
                                                                                +studentPool.Put(stu)
                                                                                +
                                                                                +
                                                                                  +
                                                                                • Get() 用于从对象池中获取对象,因为返回值是 interface{},因此需要类型转换。
                                                                                • +
                                                                                • Put() 则是在对象使用完毕后,放回到对象池。
                                                                                • +
                                                                                +

                                                                                4.性能差异

                                                                                +

                                                                                我们以 bytes.Buffer 字节缓冲器为例,利用 sync.Pool 复用 bytes.Buffer 对象,避免重复创建与回收内存,来看看对性能的提升效果。

                                                                                +
                                                                                var bufferPool = sync.Pool{
                                                                                +    New: func() interface{} {
                                                                                +        return &bytes.Buffer{}
                                                                                +    },
                                                                                +}
                                                                                +
                                                                                +var data = make([]byte, 10000)
                                                                                +
                                                                                +func BenchmarkBufferWithPool(b *testing.B) {
                                                                                +    for n := 0; n < b.N; n++ {
                                                                                +        buf := bufferPool.Get().(*bytes.Buffer)
                                                                                +        buf.Write(data)
                                                                                +        buf.Reset()
                                                                                +        bufferPool.Put(buf)
                                                                                +    }
                                                                                +}
                                                                                +
                                                                                +func BenchmarkBuffer(b *testing.B) {
                                                                                +    for n := 0; n < b.N; n++ {
                                                                                +        var buf bytes.Buffer
                                                                                +        buf.Write(data)
                                                                                +    }
                                                                                +}
                                                                                +
                                                                                +

                                                                                测试结果如下:

                                                                                +
                                                                                go test -bench=. -benchmem main/pool
                                                                                +goos: darwin
                                                                                +goarch: amd64
                                                                                +pkg: main/pool
                                                                                +cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
                                                                                +BenchmarkBufferWithPool-12      11987966                97.12 ns/op            0 B/op          0 allocs/op
                                                                                +BenchmarkBuffer-12               1246887              1020 ns/op           10240 B/op          1 allocs/op
                                                                                +PASS
                                                                                +ok      main/pool       3.510s
                                                                                +
                                                                                +

                                                                                这个例子创建了一个 bytes.Buffer 对象池,每次只执行 Write 操作,及做一次数据拷贝,耗时几乎可以忽略。而内存分配和回收的耗时占比较多,因此对程序整体的性能影响更大。从测试结果也可以看出,使用了 Pool 复用对象,每次操作不再有内存分配。

                                                                                +

                                                                                5.在标准库中的应用

                                                                                +

                                                                                Go 标准库也大量使用了 sync.Pool,例如 fmt 和 encoding/json。以 fmt 包为例,我们看下其是如何使用 sync.Pool 的。

                                                                                +

                                                                                我们可以看一下最常用的标准格式化输出函数 Printf() 函数。

                                                                                +
                                                                                // Printf formats according to a format specifier and writes to standard output.
                                                                                +// It returns the number of bytes written and any write error encountered.
                                                                                +func Printf(format string, a ...interface{}) (n int, err error) {
                                                                                +    return Fprintf(os.Stdout, format, a...)
                                                                                +}
                                                                                +
                                                                                +

                                                                                继续看 Fprintf() 的定义。

                                                                                +
                                                                                // Fprintf formats according to a format specifier and writes to w.
                                                                                +// It returns the number of bytes written and any write error encountered.
                                                                                +func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) {
                                                                                +    p := newPrinter()
                                                                                +    p.doPrintf(format, a)
                                                                                +    n, err = w.Write(p.buf)
                                                                                +    p.free()
                                                                                +    return
                                                                                +}
                                                                                +
                                                                                +

                                                                                Fprintf() 函数的参数是一个 io.Writer,Printf() 传的是 os.Stdout,相当于直接输出到标准输出。这里的 newPrinter 用的就是 sync.Pool。

                                                                                +
                                                                                // go version go1.17 darwin/amd64
                                                                                +
                                                                                +// pp is used to store a printer's state and is reused with sync.Pool to avoid allocations.
                                                                                +type pp struct {
                                                                                +    buf buffer
                                                                                +    ...
                                                                                +}
                                                                                +
                                                                                +var ppFree = sync.Pool{
                                                                                +    New: func() interface{} { return new(pp) },
                                                                                +}
                                                                                +
                                                                                +// newPrinter allocates a new pp struct or grabs a cached one.
                                                                                +func newPrinter() *pp {
                                                                                +    p := ppFree.Get().(*pp)
                                                                                +    p.panicking = false
                                                                                +    p.erroring = false
                                                                                +    p.wrapErrs = false
                                                                                +    p.fmt.init(&p.buf)
                                                                                +    return p
                                                                                +}
                                                                                +
                                                                                +// free saves used pp structs in ppFree; avoids an allocation per invocation.
                                                                                +func (p *pp) free() {
                                                                                +    // Proper usage of a sync.Pool requires each entry to have approximately
                                                                                +    // the same memory cost. To obtain this property when the stored type
                                                                                +    // contains a variably-sized buffer, we add a hard limit on the maximum buffer
                                                                                +    // to place back in the pool.
                                                                                +    //
                                                                                +    // See https://golang.org/issue/23199
                                                                                +    if cap(p.buf) > 64<<10 {
                                                                                +        return
                                                                                +    }
                                                                                +
                                                                                +    p.buf = p.buf[:0]
                                                                                +    p.arg = nil
                                                                                +    p.value = reflect.Value{}
                                                                                +    p.wrappedErr = nil
                                                                                +    ppFree.Put(p)
                                                                                +}
                                                                                +
                                                                                +

                                                                                fmt.Printf()的调用是非常频繁的,利用 sync.Pool 复用 pp 对象能够极大地提升性能,减少内存占用,同时降低 GC 压力。

                                                                                +
                                                                                powered by Gitbook该文章修订时间: +2022-05-08 19:22:09 +
                                                                                + + +
                                                                                + +
                                                                                +
                                                                                +
                                                                                + +

                                                                                results matching ""

                                                                                +
                                                                                  + +
                                                                                  +
                                                                                  + +

                                                                                  No results matching ""

                                                                                  + +
                                                                                  +
                                                                                  +
                                                                                  + +
                                                                                  +
                                                                                  + +
                                                                                  + + + + + + + + + + +
                                                                                  + + +
                                                                                  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/1.\345\205\263\344\272\216\351\224\201.html" "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/1.\345\205\263\344\272\216\351\224\201.html" new file mode 100644 index 0000000..d2196cc --- /dev/null +++ "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/1.\345\205\263\344\272\216\351\224\201.html" @@ -0,0 +1,1564 @@ + + + + + + + 1.关于锁 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                  +
                                                                                  + + + + + + + + +
                                                                                  + +
                                                                                  + +
                                                                                  + + + + + + + + +
                                                                                  +
                                                                                  + +
                                                                                  +
                                                                                  + +
                                                                                  + +

                                                                                  1.无锁化

                                                                                  +

                                                                                  加锁是为了避免在并发环境下,同时访问共享资源产生的安全问题。那么,在并发环境下,是否必须加锁?答案是否定的。并非所有的并发都需要加锁。适当地降低锁的粒度,甚至采用无锁化的设计,更能提升并发能力。

                                                                                  +

                                                                                  无锁化主要有两种实现,无锁数据结构和串行无锁。

                                                                                  +

                                                                                  1.1 无锁数据结构

                                                                                  +

                                                                                  利用硬件支持的原子操作可以实现无锁的数据结构,原子操作可以在 lock-free 的情况下保证并发安全,并且它的性能也能做到随 CPU 个数的增多而线性扩展。很多语言都提供 CAS 原子操作(如 Go 中的 atomic 包和 C++11 中的 atomic 库),可以用于实现无锁数据结构,如无锁链表。

                                                                                  +

                                                                                  我们以一个简单的线程安全单向链表的插入操作来看下无锁编程和普通加锁的区别。

                                                                                  +
                                                                                  package list
                                                                                  +
                                                                                  +import (
                                                                                  +    "fmt"
                                                                                  +    "sync"
                                                                                  +    "sync/atomic"
                                                                                  +
                                                                                  +    "golang.org/x/sync/errgroup"
                                                                                  +)
                                                                                  +
                                                                                  +// Node 链表节点
                                                                                  +type Node struct {
                                                                                  +    Value interface{}
                                                                                  +    Next  *Node
                                                                                  +}
                                                                                  +
                                                                                  +//
                                                                                  +// 有锁单向链表的简单实现
                                                                                  +//
                                                                                  +
                                                                                  +// WithLockList 有锁单向链表
                                                                                  +type WithLockList struct {
                                                                                  +    Head *Node
                                                                                  +    mu   sync.Mutex
                                                                                  +}
                                                                                  +
                                                                                  +// Push 将元素插入到链表的首部
                                                                                  +func (l *WithLockList) Push(v interface{}) {
                                                                                  +    l.mu.Lock()
                                                                                  +    defer l.mu.Unlock()
                                                                                  +    n := &Node{
                                                                                  +        Value: v,
                                                                                  +        Next:  l.Head,
                                                                                  +    }
                                                                                  +    l.Head = n
                                                                                  +}
                                                                                  +
                                                                                  +// String 有锁链表的字符串形式输出
                                                                                  +func (l WithLockList) String() string {
                                                                                  +    s := ""
                                                                                  +    cur := l.Head
                                                                                  +    for {
                                                                                  +        if cur == nil {
                                                                                  +            break
                                                                                  +        }
                                                                                  +        if s != "" {
                                                                                  +            s += ","
                                                                                  +        }
                                                                                  +        s += fmt.Sprintf("%v", cur.Value)
                                                                                  +        cur = cur.Next
                                                                                  +    }
                                                                                  +    return s
                                                                                  +}
                                                                                  +
                                                                                  +//
                                                                                  +// 无锁单向链表的简单实现
                                                                                  +//
                                                                                  +
                                                                                  +// LockFreeList 无锁单向链表
                                                                                  +type LockFreeList struct {
                                                                                  +    Head atomic.Value
                                                                                  +}
                                                                                  +
                                                                                  +// Push 有锁
                                                                                  +func (l *LockFreeList) Push(v interface{}) {
                                                                                  +    for {
                                                                                  +        head := l.Head.Load()
                                                                                  +        headNode, _ := head.(*Node)
                                                                                  +        n := &Node{
                                                                                  +            Value: v,
                                                                                  +            Next:  headNode,
                                                                                  +        }
                                                                                  +        if l.Head.CompareAndSwap(head, n) {
                                                                                  +            break
                                                                                  +        }
                                                                                  +    }
                                                                                  +}
                                                                                  +
                                                                                  +// String 有锁链表的字符串形式输出
                                                                                  +func (l LockFreeList) String() string {
                                                                                  +    s := ""
                                                                                  +    cur := l.Head.Load().(*Node)
                                                                                  +    for {
                                                                                  +        if cur == nil {
                                                                                  +            break
                                                                                  +        }
                                                                                  +        if s != "" {
                                                                                  +            s += ","
                                                                                  +        }
                                                                                  +        s += fmt.Sprintf("%v", cur.Value)
                                                                                  +        cur = cur.Next
                                                                                  +    }
                                                                                  +    return s
                                                                                  +}
                                                                                  +
                                                                                  +

                                                                                  上面的实现有几点需要注意一下:

                                                                                  +

                                                                                  (1)无锁单向链表实现时在插入时需要进行 CAS 操作,即调用CompareAndSwap()方法进行插入,如果插入失败则进行 for 循环多次尝试,直至成功。

                                                                                  +

                                                                                  (2)为了方便打印链表内容,实现一个String()方法遍历链表,且使用值作为接收者,避免打印对象指针时无法生效。

                                                                                  +
                                                                                  +
                                                                                    +
                                                                                  1. If an operand implements method String() string, that method will be invoked to convert the object to a string, which will then be formatted as required by the verb (if any).
                                                                                  2. +
                                                                                  +
                                                                                  +

                                                                                  我们分别对两种链表做一个并发写入的操作验证一下其功能。

                                                                                  +
                                                                                  package main
                                                                                  +
                                                                                  +import (
                                                                                  +    "fmt"
                                                                                  +
                                                                                  +    "main/list"
                                                                                  +)
                                                                                  +
                                                                                  +// ConcurWriteWithLockList 并发写入有锁链表
                                                                                  +func ConcurWriteWithLockList(l *WithLockList) {
                                                                                  +    var g errgroup.Group
                                                                                  +    // 10 个协程并发写入链表
                                                                                  +    for i := 0; i < 10; i++ {
                                                                                  +        i := i
                                                                                  +        g.Go(func() error {
                                                                                  +            l.Push(i)
                                                                                  +            return nil
                                                                                  +        })
                                                                                  +    }
                                                                                  +    _ = g.Wait()
                                                                                  +}
                                                                                  +
                                                                                  +// ConcurWriteLockFreeList 并发写入无锁链表
                                                                                  +func ConcurWriteLockFreeList(l *LockFreeList) {
                                                                                  +    var g errgroup.Group
                                                                                  +    // 10 个协程并发写入链表
                                                                                  +    for i := 0; i < 10; i++ {
                                                                                  +        i := i
                                                                                  +        g.Go(func() error {
                                                                                  +            l.Push(i)
                                                                                  +            return nil
                                                                                  +        })
                                                                                  +    }
                                                                                  +    _ = g.Wait()
                                                                                  +}
                                                                                  +
                                                                                  +func main() {
                                                                                  +    // 并发写入与遍历打印有锁链表
                                                                                  +    l1 := &list.WithLockList{}
                                                                                  +    list.ConcurWriteWithLockList(l1)
                                                                                  +    fmt.Println(l1)
                                                                                  +
                                                                                  +    // 并发写入与遍历打印无锁链表
                                                                                  +    l2 := &list.LockFreeList{}
                                                                                  +    list.ConcurWriteLockFreeList(l2)
                                                                                  +    fmt.Println(l2)
                                                                                  +}
                                                                                  +
                                                                                  +

                                                                                  注意,多次运行上面的main()函数的结果可能会不相同,因为并发是无序的。

                                                                                  +
                                                                                  8,7,6,9,5,4,3,1,2,0
                                                                                  +9,8,7,6,5,4,3,2,0,1
                                                                                  +

                                                                                  下面再看一下链表 Push 操作的基准测试,对比一下有锁与无锁的性能差异。

                                                                                  +
                                                                                  func BenchmarkWriteWithLockList(b *testing.B) {
                                                                                  +    l := &WithLockList{}
                                                                                  +    for n := 0; n < b.N; n++ {
                                                                                  +        l.Push(n)
                                                                                  +    }
                                                                                  +}
                                                                                  +BenchmarkWriteWithLockList-8    14234166                83.58 ns/op
                                                                                  +
                                                                                  +func BenchmarkWriteLockFreeList(b *testing.B) {
                                                                                  +    l := &LockFreeList{}
                                                                                  +    for n := 0; n < b.N; n++ {
                                                                                  +        l.Push(n)
                                                                                  +    }
                                                                                  +}
                                                                                  +BenchmarkWriteLockFreeList-8    15219405                73.15 ns/op
                                                                                  +
                                                                                  +

                                                                                  可以看出无锁版本比有锁版本性能高一些。

                                                                                  +

                                                                                  1.2 串行无锁

                                                                                  +

                                                                                  串行无锁是一种思想,就是避免对共享资源的并发访问,改为每个并发操作访问自己独占的资源,达到串行访问资源的效果,来避免使用锁。不同的场景有不同的实现方式。比如网络 I/O 场景下将单 Reactor 多线程模型改为主从 Reactor 多线程模型,避免对同一个消息队列锁读取。

                                                                                  +

                                                                                  这里我介绍的是后台微服务开发经常遇到的一种情况。我们经常需要并发拉取多方面的信息,汇聚到一个变量上。那么此时就存在对同一个变量互斥写入的情况。比如批量并发拉取用户信息写入到一个 map。此时我们可以将每个协程拉取的结果写入到一个临时对象,这样便将并发地协程与同一个变量解绑,然后再将其汇聚到一起,这样便可以不用使用锁。即独立处理,然后合并。

                                                                                  +

                                                                                  在这里插入图片描述

                                                                                  +

                                                                                  为了模拟上面的情况,简单地写个示例程序,对比下性能。

                                                                                  +
                                                                                  import (
                                                                                  +    "sync"
                                                                                  +
                                                                                  +    "golang.org/x/sync/errgroup"
                                                                                  +)
                                                                                  +
                                                                                  +// ConcurWriteMapWithLock 有锁并发写入 map
                                                                                  +func ConcurWriteMapWithLock() map[int]int {
                                                                                  +    m := make(map[int]int)
                                                                                  +    var mu sync.Mutex
                                                                                  +    var g errgroup.Group
                                                                                  +    // 10 个协程并发写入 map
                                                                                  +    for i := 0; i < 10; i++ {
                                                                                  +        i := i
                                                                                  +        g.Go(func() error {
                                                                                  +            mu.Lock()
                                                                                  +            defer mu.Unlock()
                                                                                  +            m[i] = i * i
                                                                                  +            return nil
                                                                                  +        })
                                                                                  +    }
                                                                                  +    _ = g.Wait()
                                                                                  +    return m
                                                                                  +}
                                                                                  +
                                                                                  +// ConcurWriteMapLockFree 无锁并发写入 map
                                                                                  +func ConcurWriteMapLockFree() map[int]int {
                                                                                  +    m := make(map[int]int)
                                                                                  +    // 每个协程独占一 value
                                                                                  +    values := make([]int, 10)
                                                                                  +    // 10 个协程并发写入 map
                                                                                  +    var g errgroup.Group
                                                                                  +    for i := 0; i < 10; i++ {
                                                                                  +        i := i
                                                                                  +        g.Go(func() error {
                                                                                  +            values[i] = i * i
                                                                                  +            return nil
                                                                                  +        })
                                                                                  +    }
                                                                                  +    _ = g.Wait()
                                                                                  +    // 汇聚结果到 map
                                                                                  +    for i, v := range values {
                                                                                  +        m[i] = v
                                                                                  +    }
                                                                                  +    return m
                                                                                  +}
                                                                                  +
                                                                                  +

                                                                                  看下二者的性能差异:

                                                                                  +
                                                                                  func BenchmarkConcurWriteMapWithLock(b *testing.B) {
                                                                                  +    for n := 0; n < b.N; n++ {
                                                                                  +        _ = ConcurWriteMapWithLock()
                                                                                  +    }
                                                                                  +}
                                                                                  +BenchmarkConcurWriteMapWithLock-8         218673              5089 ns/op
                                                                                  +
                                                                                  +func BenchmarkConcurWriteMapLockFree(b *testing.B) {
                                                                                  +    for n := 0; n < b.N; n++ {
                                                                                  +        _ = ConcurWriteMapLockFree()
                                                                                  +    }
                                                                                  +}
                                                                                  +BenchmarkConcurWriteMapLockFree-8         316635              4048 ns/op
                                                                                  +
                                                                                  +

                                                                                  2.减少锁竞争

                                                                                  +

                                                                                  如果加锁无法避免,则可以采用分片的形式,减少对资源加锁的次数,这样也可以提高整体的性能。

                                                                                  +

                                                                                  比如 Golang 优秀的本地缓存组件 bigcachego-cachefreecache 都实现了分片功能,每个分片一把锁,采用分片存储的方式减少加锁的次数从而提高整体性能。

                                                                                  +

                                                                                  以一个简单的示例,通过对map[uint64]struct{}分片前后并发写入的对比,来看下减少锁竞争带来的性能提升。

                                                                                  +
                                                                                  var (
                                                                                  +    num = 1000000
                                                                                  +    m0  = make(map[int]struct{}, num)
                                                                                  +    mu0 = sync.RWMutex{}
                                                                                  +    m1  = make(map[int]struct{}, num)
                                                                                  +    mu1 = sync.RWMutex{}
                                                                                  +)
                                                                                  +
                                                                                  +// ConWriteMapNoShard 不分片写入一个 map。
                                                                                  +func ConWriteMapNoShard() {
                                                                                  +    g := errgroup.Group{}
                                                                                  +    for i := 0; i < num; i++ {
                                                                                  +        g.Go(func() error {
                                                                                  +            mu0.Lock()
                                                                                  +            defer mu0.Unlock()
                                                                                  +            m0[i] = struct{}{}
                                                                                  +            return nil
                                                                                  +        })
                                                                                  +    }
                                                                                  +    _ = g.Wait()
                                                                                  +}
                                                                                  +
                                                                                  +// ConWriteMapTwoShard 分片写入两个 map。
                                                                                  +func ConWriteMapTwoShard() {
                                                                                  +    g := errgroup.Group{}
                                                                                  +    for i := 0; i < num; i++ {
                                                                                  +        g.Go(func() error {
                                                                                  +            if i&1 == 0 {
                                                                                  +                mu0.Lock()
                                                                                  +                defer mu0.Unlock()
                                                                                  +                m0[i] = struct{}{}
                                                                                  +                return nil
                                                                                  +            }
                                                                                  +            mu1.Lock()
                                                                                  +            defer mu1.Unlock()
                                                                                  +            m1[i] = struct{}{}
                                                                                  +            return nil
                                                                                  +        })
                                                                                  +    }
                                                                                  +    _ = g.Wait()
                                                                                  +}
                                                                                  +
                                                                                  +

                                                                                  看下二者的性能差异:

                                                                                  +
                                                                                  func BenchmarkConWriteMapNoShard(b *testing.B) {
                                                                                  +    for i := 0; i < b.N; i++ {
                                                                                  +        ConWriteMapNoShard()
                                                                                  +    }
                                                                                  +}
                                                                                  +BenchmarkConWriteMapNoShard-12                 3         472063245 ns/op
                                                                                  +
                                                                                  +func BenchmarkConWriteMapTwoShard(b *testing.B) {
                                                                                  +    for i := 0; i < b.N; i++ {
                                                                                  +        ConWriteMapTwoShard()
                                                                                  +    }
                                                                                  +}
                                                                                  +BenchmarkConWriteMapTwoShard-12                4         310588155 ns/op
                                                                                  +
                                                                                  +

                                                                                  可以看到,通过对分共享资源的分片处理,减少了锁竞争,能明显地提高程序的并发性能。可以预见的是,随着分片粒度地变小,性能差距会越来越大。当然,分片粒度不是越小越好。因为每一个分片都要配一把锁,那么会带来很多额外的不必要的开销。可以选择一个不太大的值,在性能和花销上寻找一个平衡。

                                                                                  +

                                                                                  3.优先使用共享锁而非互斥锁

                                                                                  +

                                                                                  如果并发无法做到无锁化,优先使用共享锁而非互斥锁。

                                                                                  +

                                                                                  所谓互斥锁,指锁只能被一个 Goroutine 获得。共享锁指可以同时被多个 Goroutine 获得的锁。

                                                                                  +

                                                                                  Go 标准库 sync 提供了两种锁,互斥锁(sync.Mutex)和读写锁(sync.RWMutex),读写锁便是共享锁的一种具体实现。

                                                                                  +

                                                                                  3.1 sync.Mutex

                                                                                  +

                                                                                  互斥锁的作用是保证共享资源同一时刻只能被一个 Goroutine 占用,一个 Goroutine 占用了,其他的 Goroutine 则阻塞等待。

                                                                                  +

                                                                                  +

                                                                                  sync.Mutex 提供了两个导出方法用来使用锁。

                                                                                  +
                                                                                  Lock()         // 加锁
                                                                                  +Unlock()      // 释放锁
                                                                                  +
                                                                                  +

                                                                                  我们可以通过在访问共享资源前前用 Lock 方法对资源进行上锁,在访问共享资源后调用 Unlock 方法来释放锁,也可以用 defer 语句来保证互斥锁一定会被解锁。在一个 Go 协程调用 Lock 方法获得锁后,其他请求锁的协程都会阻塞在 Lock 方法,直到锁被释放。

                                                                                  +

                                                                                  3.2 sync.RWMutex

                                                                                  +

                                                                                  读写锁是一种共享锁,也称之为多读单写锁 (multiple readers, single writer lock)。在使用锁时,对获取锁的目的操作做了区分,一种是读操作,一种是写操作。因为同一时刻允许多个 Gorouine 获取读锁,所以是一种共享锁。但写锁是互斥的。

                                                                                  +

                                                                                  一般来说,有如下几种情况:

                                                                                  +
                                                                                    +
                                                                                  • 读锁之间不互斥,没有写锁的情况下,读锁是无阻塞的,多个协程可以同时获得读锁。
                                                                                  • +
                                                                                  • 写锁之间是互斥的,存在写锁,其他写锁阻塞。
                                                                                  • +
                                                                                  • 写锁与读锁是互斥的,如果存在读锁,写锁阻塞,如果存在写锁,读锁阻塞。
                                                                                  • +
                                                                                  +

                                                                                  在这里插入图片描述 +sync.RWMutex 提供了五个导出方法用来使用锁。

                                                                                  +
                                                                                  Lock()                // 加写锁
                                                                                  +Unlock()            // 释放写锁
                                                                                  +RLock()                // 加读锁
                                                                                  +RUnlock()            // 释放读锁
                                                                                  +RLocker() Locker    // 返回读锁,使用 Lock() 和 Unlock() 进行 RLock() 和 RUnlock()
                                                                                  +
                                                                                  +

                                                                                  读写锁的存在是为了解决读多写少时的性能问题,读场景较多时,读写锁可有效地减少锁阻塞的时间。

                                                                                  +

                                                                                  3.3 性能对比

                                                                                  +

                                                                                  大部分业务场景是读多写少,所以使用读写锁可有效提高对共享数据的访问效率。最坏的情况,只有写请求,那么读写锁顶多退化成互斥锁。所以优先使用读写锁而非互斥锁,可以提高程序的并发性能。

                                                                                  +

                                                                                  接下来,我们测试三种情景下,互斥锁和读写锁的性能差异。

                                                                                  +
                                                                                    +
                                                                                  • 读多写少(读占 80%)
                                                                                  • +
                                                                                  • 读写一致(各占 50%)
                                                                                  • +
                                                                                  • 读少写多(读占 20%)
                                                                                  • +
                                                                                  +

                                                                                  首先根据互斥锁和读写锁分别实现对共享 map 的并发读写。

                                                                                  +
                                                                                  // OpMapWithMutex 使用互斥锁读写 map。
                                                                                  +// rpct 为读操作占比。
                                                                                  +func OpMapWithMutex(rpct int) {
                                                                                  +    m := make(map[int]struct{})
                                                                                  +    mu := sync.Mutex{}
                                                                                  +    var wg sync.WaitGroup
                                                                                  +    for i := 0; i < 100; i++ {
                                                                                  +        i := i
                                                                                  +        wg.Add(1)
                                                                                  +        go func() {
                                                                                  +            defer wg.Done()
                                                                                  +            mu.Lock()
                                                                                  +            defer mu.Unlock()
                                                                                  +            // 写操作。
                                                                                  +            if i >= rpct {
                                                                                  +                m[i] = struct{}{}
                                                                                  +                time.Sleep(time.Microsecond)
                                                                                  +                return
                                                                                  +            }
                                                                                  +            // 读操作。
                                                                                  +            _ = m[i]
                                                                                  +            time.Sleep(time.Microsecond)
                                                                                  +        }()
                                                                                  +    }
                                                                                  +    wg.Wait()
                                                                                  +}
                                                                                  +
                                                                                  +// OpMapWithRWMutex 使用读写锁读写 map。
                                                                                  +// rpct 为读操作占比。
                                                                                  +func OpMapWithRWMutex(rpct int) {
                                                                                  +    m := make(map[int]struct{})
                                                                                  +    mu := sync.RWMutex{}
                                                                                  +    var wg sync.WaitGroup
                                                                                  +    for i := 0; i < 100; i++ {
                                                                                  +        i := i
                                                                                  +        wg.Add(1)
                                                                                  +        go func() {
                                                                                  +            defer wg.Done()
                                                                                  +            // 写操作。
                                                                                  +            if i >= rpct {
                                                                                  +                mu.Lock()
                                                                                  +                defer mu.Unlock()
                                                                                  +                m[i] = struct{}{}
                                                                                  +                time.Sleep(time.Microsecond)
                                                                                  +                return
                                                                                  +            }
                                                                                  +            // 读操作。
                                                                                  +            mu.RLock()
                                                                                  +            defer mu.RUnlock()
                                                                                  +            _ = m[i]
                                                                                  +            time.Sleep(time.Microsecond)
                                                                                  +        }()
                                                                                  +    }
                                                                                  +    wg.Wait()
                                                                                  +}
                                                                                  +
                                                                                  +

                                                                                  入参 rpct 用来调节读操作的占比,来模拟读写占比不同的场景。rpct 设为 80 表示读多写少(读占 80%),rpct 设为 50 表示读写一致(各占 50%),rpct 设为 20 表示读少写多(读占 20%)。

                                                                                  +
                                                                                  func BenchmarkMutexReadMore(b *testing.B) {
                                                                                  +    for i := 0; i < b.N; i++ {
                                                                                  +        OpMapWithMutex(80)
                                                                                  +    }
                                                                                  +}
                                                                                  +
                                                                                  +func BenchmarkRWMutexReadMore(b *testing.B) {
                                                                                  +    for i := 0; i < b.N; i++ {
                                                                                  +        OpMapWithRWMutex(80)
                                                                                  +    }
                                                                                  +}
                                                                                  +
                                                                                  +func BenchmarkMutexRWEqual(b *testing.B) {
                                                                                  +    for i := 0; i < b.N; i++ {
                                                                                  +        OpMapWithMutex(50)
                                                                                  +    }
                                                                                  +}
                                                                                  +
                                                                                  +func BenchmarkRWMutexRWEqual(b *testing.B) {
                                                                                  +    for i := 0; i < b.N; i++ {
                                                                                  +        OpMapWithRWMutex(50)
                                                                                  +    }
                                                                                  +}
                                                                                  +
                                                                                  +func BenchmarkMutexWriteMore(b *testing.B) {
                                                                                  +    for i := 0; i < b.N; i++ {
                                                                                  +        OpMapWithMutex(20)
                                                                                  +    }
                                                                                  +}
                                                                                  +
                                                                                  +func BenchmarkRWMutexWriteMore(b *testing.B) {
                                                                                  +    for i := 0; i < b.N; i++ {
                                                                                  +        OpMapWithRWMutex(20)
                                                                                  +    }
                                                                                  +}
                                                                                  +
                                                                                  +

                                                                                  执行当前包下的所有基准测试,结果如下:

                                                                                  +
                                                                                  dablelv@DABLELV-MB0 mutex % go test -bench=.
                                                                                  +goos: darwin
                                                                                  +goarch: amd64
                                                                                  +pkg: main/mutex
                                                                                  +cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
                                                                                  +BenchmarkMutexReadMore-12                   2462            485917 ns/op
                                                                                  +BenchmarkRWMutexReadMore-12                 8074            145690 ns/op
                                                                                  +BenchmarkMutexRWEqual-12                    2406            498673 ns/op
                                                                                  +BenchmarkRWMutexRWEqual-12                  4124            303693 ns/op
                                                                                  +BenchmarkMutexWriteMore-12                  1906            532350 ns/op
                                                                                  +BenchmarkRWMutexWriteMore-12                2462            432386 ns/op
                                                                                  +PASS
                                                                                  +ok      main/mutex      9.532s
                                                                                  +
                                                                                  +

                                                                                  可见读多写少的场景,使用读写锁并发性能会更优。可以预见的是如果写占比更低,那么读写锁带的并发效果会更优。

                                                                                  +

                                                                                  这里需要注意的是,因为每次读写 map 的操作耗时很短,所以每次睡眠一微秒(百万分之一秒)来增加耗时,不然对共享资源的访问耗时,小于锁处理的本身耗时,那么使用读写锁带来的性能优化效果将变得不那么明显,甚至会降低性能。

                                                                                  +
                                                                                  powered by Gitbook该文章修订时间: +2022-05-08 19:22:09 +
                                                                                  + + +
                                                                                  + +
                                                                                  +
                                                                                  +
                                                                                  + +

                                                                                  results matching ""

                                                                                  +
                                                                                    + +
                                                                                    +
                                                                                    + +

                                                                                    No results matching ""

                                                                                    + +
                                                                                    +
                                                                                    +
                                                                                    + +
                                                                                    +
                                                                                    + +
                                                                                    + + + + + + + + + + +
                                                                                    + + +
                                                                                    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/2.\351\231\220\345\210\266\345\215\217\347\250\213\346\225\260\351\207\217.html" "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/2.\351\231\220\345\210\266\345\215\217\347\250\213\346\225\260\351\207\217.html" new file mode 100644 index 0000000..468ac29 --- /dev/null +++ "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/2.\351\231\220\345\210\266\345\215\217\347\250\213\346\225\260\351\207\217.html" @@ -0,0 +1,1322 @@ + + + + + + + 2.限制协程数量 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                    +
                                                                                    + + + + + + + + +
                                                                                    + +
                                                                                    + +
                                                                                    + + + + + + + + +
                                                                                    +
                                                                                    + +
                                                                                    +
                                                                                    + +
                                                                                    + +

                                                                                    1.协程数过多的问题

                                                                                    +

                                                                                    1.1 程序崩溃

                                                                                    +

                                                                                    Go 程(goroutine)是由 Go 运行时管理的轻量级线程。通过它我们可以轻松实现并发编程。但是当我们无限开辟协程时,将会遇到致命的问题。

                                                                                    +
                                                                                    func main() {
                                                                                    +    var wg sync.WaitGroup
                                                                                    +    for i := 0; i < math.MaxInt32; i++ {
                                                                                    +        wg.Add(1)
                                                                                    +        go func(i int) {
                                                                                    +            defer wg.Done()
                                                                                    +            fmt.Println(i)
                                                                                    +            time.Sleep(time.Second)
                                                                                    +        }(i)
                                                                                    +    }
                                                                                    +    wg.Wait()
                                                                                    +}
                                                                                    +
                                                                                    +

                                                                                    这个例子实现了 math.MaxInt32 个协程的并发,2^31 - 1 约为 20 亿个,每个协程内部几乎没有做什么事情。正常的情况下呢,这个程序会乱序输出 0 ~ 2^31-1 个数字。

                                                                                    +

                                                                                    程序会像预期的那样顺利的运行吗?

                                                                                    +
                                                                                    go run main.go
                                                                                    +...
                                                                                    +108668
                                                                                    +1142025
                                                                                    +panic: too many concurrent operations on a single file or socket (max 1048575)
                                                                                    +
                                                                                    +goroutine 1158408 [running]:
                                                                                    +internal/poll.(*fdMutex).rwlock(0xc0000ae060, 0x0)
                                                                                    +        /usr/local/go/src/internal/poll/fd_mutex.go:147 +0x11b
                                                                                    +internal/poll.(*FD).writeLock(...)
                                                                                    +        /usr/local/go/src/internal/poll/fd_mutex.go:239
                                                                                    +internal/poll.(*FD).Write(0xc0000ae060, {0xc12cadf690, 0x8, 0x8})
                                                                                    +        /usr/local/go/src/internal/poll/fd_unix.go:262 +0x72
                                                                                    +os.(*File).write(...)
                                                                                    +        /usr/local/go/src/os/file_posix.go:49
                                                                                    +os.(*File).Write(0xc0000ac008, {0xc12cadf690, 0x1, 0xc12ea62f50})
                                                                                    +        /usr/local/go/src/os/file.go:176 +0x65
                                                                                    +fmt.Fprintln({0x10c00e0, 0xc0000ac008}, {0xc12ea62f90, 0x1, 0x1})
                                                                                    +        /usr/local/go/src/fmt/print.go:265 +0x75
                                                                                    +fmt.Println(...)
                                                                                    +        /usr/local/go/src/fmt/print.go:274
                                                                                    +main.main.func1(0x0)
                                                                                    +        /Users/dablelv/work/code/test/main.go:16 +0x8f
                                                                                    +...
                                                                                    +
                                                                                    +

                                                                                    运行的结果是程序直接崩溃了,关键的报错信息是:

                                                                                    +
                                                                                    panic: too many concurrent operations on a single file or socket (max 1048575)
                                                                                    +

                                                                                    对单个 file/socket 的并发操作个数超过了系统上限,这个报错是 fmt.Printf 函数引起的,fmt.Printf 将格式化后的字符串打印到屏幕,即标准输出。在 Linux 系统中,标准输出也可以视为文件,内核(Kernel)利用文件描述符(File Descriptor)来访问文件,标准输出的文件描述符为 1,错误输出文件描述符为 2,标准输入的文件描述符为 0。

                                                                                    +

                                                                                    简而言之,系统的资源被耗尽了。

                                                                                    +

                                                                                    那如果我们将 fmt.Printf 这行代码去掉呢?那程序很可能会因为内存不足而崩溃。这一点更好理解,每个协程至少需要消耗 2KB 的空间,那么假设计算机的内存是 4GB,那么至多允许 4GB/2KB = 1M 个协程同时存在。那如果协程中还存在着其他需要分配内存的操作,那么允许并发执行的协程将会数量级地减少。

                                                                                    +

                                                                                    1.2 协程的代价

                                                                                    +

                                                                                    前面的例子过于极端,一般情况下程序也不会无限开辟协程,旨在说明协程数量是有限制的,不能无限开辟。

                                                                                    +

                                                                                    如果我们开辟很多协程,但不会导致程序崩溃,可以吗?如果真要这么做的话,我们应该清楚地知道,协程虽然轻量,但仍有开销。

                                                                                    +

                                                                                    Go 的开销主要是三个方面:创建(占用内存)、调度(增加调度器负担)和删除(增加 GC 压力)。

                                                                                    +
                                                                                      +
                                                                                    • 内存开销
                                                                                    • +
                                                                                    +

                                                                                    空间上,一个 Go 程占用约 2K 的内存,在源码 src/runtime/runtime2.go里面,我们可以找到 Go 程的结构定义type g struct。

                                                                                    +
                                                                                      +
                                                                                    • 调度开销
                                                                                    • +
                                                                                    +

                                                                                    时间上,协程调度也会有 CPU 开销。我们可以利用runntime.Gosched()让当前协程主动让出 CPU 去执行另外一个协程,下面看一下协程之间切换的耗时。

                                                                                    +
                                                                                    const NUM = 10000
                                                                                    +
                                                                                    +func cal() {
                                                                                    +    for i := 0; i < NUM; i++ {
                                                                                    +        runtime.Gosched()
                                                                                    +    }
                                                                                    +}
                                                                                    +
                                                                                    +func main() {
                                                                                    +    // 只设置一个 Processor
                                                                                    +    runtime.GOMAXPROCS(1)
                                                                                    +    start := time.Now().UnixNano()
                                                                                    +    go cal()
                                                                                    +    for i := 0; i < NUM; i++ {
                                                                                    +        runtime.Gosched()
                                                                                    +    }
                                                                                    +    end := time.Now().UnixNano()
                                                                                    +    fmt.Printf("total %vns per %vns", end-start, (end-start)/NUM)
                                                                                    +}
                                                                                    +
                                                                                    +

                                                                                    运行输出:

                                                                                    +
                                                                                    total 997200ns per 99ns
                                                                                    +

                                                                                    可见一次协程的切换,耗时大概在 100ns,相对于线程的微秒级耗时切换,性能表现非常优秀,但是仍有开销。

                                                                                    +
                                                                                      +
                                                                                    • GC 开销 +创建 Go 程到运行结束,占用的内存资源是需要由 GC 来回收,如果无休止地创建大量 Go 程后,势必会造成对 GC 的压力。 +```go +package main
                                                                                    • +
                                                                                    +

                                                                                    import ( + "fmt" + "runtime" + "runtime/debug" + "sync" + "time" +)

                                                                                    +

                                                                                    func createLargeNumGoroutine(num int, wg *sync.WaitGroup) { + wg.Add(num) + for i := 0; i < num; i++ { + go func() { + defer wg.Done() + }() + } +}

                                                                                    +

                                                                                    func main() { + // 只设置一个 Processor 保证 Go 程串行执行 + runtime.GOMAXPROCS(1) + // 关闭GC改为手动执行 + debug.SetGCPercent(-1)

                                                                                    +
                                                                                    var wg sync.WaitGroup
                                                                                    +createLargeNumGoroutine(1000, &wg)
                                                                                    +wg.Wait()
                                                                                    +t := time.Now()
                                                                                    +runtime.GC() // 手动GC
                                                                                    +cost := time.Since(t)
                                                                                    +fmt.Printf("GC cost %v when goroutine num is %v\n", cost, 1000)
                                                                                    +
                                                                                    +createLargeNumGoroutine(10000, &wg)
                                                                                    +wg.Wait()
                                                                                    +t = time.Now()
                                                                                    +runtime.GC() // 手动GC
                                                                                    +cost = time.Since(t)
                                                                                    +fmt.Printf("GC cost %v when goroutine num is %v\n", cost, 10000)
                                                                                    +
                                                                                    +createLargeNumGoroutine(100000, &wg)
                                                                                    +wg.Wait()
                                                                                    +t = time.Now()
                                                                                    +runtime.GC() // 手动GC
                                                                                    +cost = time.Since(t)
                                                                                    +fmt.Printf("GC cost %v when goroutine num is %v\n", cost, 100000)
                                                                                    +

                                                                                    }

                                                                                    +
                                                                                    运行输出:
                                                                                    +```shell
                                                                                    +GC cost 0s when goroutine num is 1000
                                                                                    +GC cost 2.0027ms when goroutine num is 10000
                                                                                    +GC cost 30.9523ms when goroutine num is 100000
                                                                                    +

                                                                                    当创建的 Go 程数量越多,GC 耗时越大。

                                                                                    +

                                                                                    上面的分析目的是为了尽可能地量化 Goroutine 的开销。虽然官方宣称用 Golang 写并发程序的时候随便起个成千上万的 Goroutine 毫无压力,但当我们起十万、百万甚至千万个 Goroutine 呢?Goroutine 轻量的开销将被放大。

                                                                                    +

                                                                                    2.2 限制协程数量

                                                                                    +

                                                                                    系统地资源是有限,协程是有代价的,为了保护程序,提高性能,我们应主动限制并发的协程数量。

                                                                                    +

                                                                                    可以利用信道 channel 的缓冲区大小来实现。

                                                                                    +
                                                                                    func main() {
                                                                                    +    var wg sync.WaitGroup
                                                                                    +    ch := make(chan struct{}, 3)
                                                                                    +    for i := 0; i < 10; i++ {
                                                                                    +        ch <- struct{}{}
                                                                                    +        wg.Add(1)
                                                                                    +        go func(i int) {
                                                                                    +            defer wg.Done()
                                                                                    +            log.Println(i)
                                                                                    +            time.Sleep(time.Second)
                                                                                    +            <-ch
                                                                                    +        }(i)
                                                                                    +    }
                                                                                    +    wg.Wait()
                                                                                    +}
                                                                                    +
                                                                                    +

                                                                                    上例中创建了缓冲区大小为 3 的 channel,在没有被接收的情况下,至多发送 3 个消息则被阻塞。开启协程前,调用ch <- struct{}{},若缓存区满,则阻塞。协程任务结束,调用 <-ch 释放缓冲区。

                                                                                    +

                                                                                    sync.WaitGroup 并不是必须的,例如 Http 服务,每个请求天然是并发的,此时使用 channel 控制并发处理的任务数量,就不需要 sync.WaitGroup。

                                                                                    +

                                                                                    运行结果如下:

                                                                                    +
                                                                                    2022/03/06 20:37:02 0
                                                                                    +2022/03/06 20:37:02 2
                                                                                    +2022/03/06 20:37:02 1
                                                                                    +2022/03/06 20:37:03 3
                                                                                    +2022/03/06 20:37:03 4
                                                                                    +2022/03/06 20:37:03 5
                                                                                    +2022/03/06 20:37:04 6
                                                                                    +2022/03/06 20:37:04 7
                                                                                    +2022/03/06 20:37:04 8
                                                                                    +2022/03/06 20:37:05 9
                                                                                    +
                                                                                    +

                                                                                    从日志中可以很容易看到,每秒钟只并发执行了 3 个任务,达到了协程并发控制的目的。

                                                                                    +

                                                                                    3.协程池化

                                                                                    +

                                                                                    上面的例子只是简单地限制了协程开辟的数量。在此基础之上,基于对象复用的思想,我们可以重复利用已开辟的协程,避免协程的重复创建销毁,达到池化的效果。

                                                                                    +

                                                                                    协程池化,我们可以自己写一个协程池,但不推荐这么做。因为已经有成熟的开源库可供使用,无需再重复造轮子。目前有很多第三方库实现了协程池,可以很方便地用来控制协程的并发数量,比较受欢迎的有:

                                                                                    + +

                                                                                    下面以 panjf2000/ants 为例,简单介绍其使用。

                                                                                    +

                                                                                    ants 是一个简单易用的高性能 Goroutine 池,实现了对大规模 Goroutine 的调度管理和复用,允许使用者在开发并发程序的时候限制 Goroutine 数量,复用协程,达到更高效执行任务的效果。

                                                                                    +
                                                                                    package main
                                                                                    +
                                                                                    +import (
                                                                                    +    "fmt"
                                                                                    +    "time"
                                                                                    +
                                                                                    +    "github.com/panjf2000/ants"
                                                                                    +)
                                                                                    +
                                                                                    +func main() {
                                                                                    +    // Use the common pool
                                                                                    +    for i := 0; i < 10; i++ {
                                                                                    +        i := i
                                                                                    +        ants.Submit(func() {
                                                                                    +            fmt.Println(i)
                                                                                    +        })
                                                                                    +    }
                                                                                    +    time.Sleep(time.Second)
                                                                                    +}
                                                                                    +
                                                                                    +

                                                                                    使用 ants,我们简单地使用其默认的协程池,直接将任务提交并发执行。默认协程池的缺省容量 math.MaxInt32。

                                                                                    +

                                                                                    如果自定义协程池容量大小,可以调用 NewPool 方法来实例化具有给定容量的池,如下所示:

                                                                                    +
                                                                                    // Set 10000 the size of goroutine pool
                                                                                    +p, _ := ants.NewPool(10000)
                                                                                    +
                                                                                    +

                                                                                    4.小结

                                                                                    +

                                                                                    Golang 为并发而生。Goroutine 是由 Go 运行时管理的轻量级线程,通过它我们可以轻松实现并发编程。Go 虽然轻量,但天下没有免费的午餐,无休止地开辟大量 Go 程势必会带来性能影响,甚至程序崩溃。所以,我们应尽可能的控制协程数量,如果有需要,请复用它。

                                                                                    +
                                                                                    powered by Gitbook该文章修订时间: +2022-05-08 19:22:09 +
                                                                                    + + +
                                                                                    + +
                                                                                    +
                                                                                    +
                                                                                    + +

                                                                                    results matching ""

                                                                                    +
                                                                                      + +
                                                                                      +
                                                                                      + +

                                                                                      No results matching ""

                                                                                      + +
                                                                                      +
                                                                                      +
                                                                                      + +
                                                                                      +
                                                                                      + +
                                                                                      + + + + + + + + + + + + + + +
                                                                                      + + +
                                                                                      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/3.\344\275\277\347\224\250sync.Once\351\201\277\345\205\215\351\207\215\345\244\215\346\211\247\350\241\214.html" "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/3.\344\275\277\347\224\250sync.Once\351\201\277\345\205\215\351\207\215\345\244\215\346\211\247\350\241\214.html" new file mode 100644 index 0000000..35c48e9 --- /dev/null +++ "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/3.\344\275\277\347\224\250sync.Once\351\201\277\345\205\215\351\207\215\345\244\215\346\211\247\350\241\214.html" @@ -0,0 +1,1262 @@ + + + + + + + 3.使用 sync.Once 避免重复执行 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                      +
                                                                                      + + + + + + + + +
                                                                                      + +
                                                                                      + +
                                                                                      + + + + + + + + +
                                                                                      +
                                                                                      + +
                                                                                      +
                                                                                      + +
                                                                                      + +

                                                                                      1.简介

                                                                                      +

                                                                                      sync.Once 是 Go 标准库提供的使函数只执行一次的实现,常应用于单例模式,例如初始化配置、保持数据库连接等。作用与 init 函数类似,但有区别。

                                                                                      +
                                                                                        +
                                                                                      • init 函数是当所在的 package 首次被加载时执行,若迟迟未被使用,则既浪费了内存,又延长了程序加载时间。
                                                                                      • +
                                                                                      • sync.Once 可以在代码的任意位置初始化和调用,因此可以延迟到使用时再执行,并发场景下是线程安全的。
                                                                                      • +
                                                                                      +

                                                                                      在多数情况下,sync.Once 被用于控制变量的初始化,这个变量的读写满足如下三个条件:

                                                                                      +
                                                                                        +
                                                                                      • 当且仅当第一次访问某个变量时,进行初始化(写);
                                                                                      • +
                                                                                      • 变量初始化过程中,所有读都被阻塞,直到初始化完成;
                                                                                      • +
                                                                                      • 变量仅初始化一次,初始化完成后驻留在内存里。
                                                                                      • +
                                                                                      +

                                                                                      2.原理

                                                                                      +

                                                                                      sync.Once 用来保证函数只执行一次。要达到这个效果,需要做到两点:

                                                                                      +
                                                                                        +
                                                                                      • 计数器,统计函数执行次数;
                                                                                      • +
                                                                                      • 线程安全,保障在多 Go 程的情况下,函数仍然只执行一次,比如锁。
                                                                                      • +
                                                                                      +

                                                                                      2.1 源码

                                                                                      +

                                                                                      下面看一下 sync.Once 结构,其有两个变量。使用 done 统计函数执行次数,使用锁 m 实现线程安全。果不其然,和上面的猜想一致。

                                                                                      +
                                                                                      // Once is an object that will perform exactly one action.
                                                                                      +//
                                                                                      +// A Once must not be copied after first use.
                                                                                      +type Once struct {
                                                                                      +    // done indicates whether the action has been performed.
                                                                                      +    // It is first in the struct because it is used in the hot path.
                                                                                      +    // The hot path is inlined at every call site.
                                                                                      +    // Placing done first allows more compact instructions on some architectures (amd64/386),
                                                                                      +    // and fewer instructions (to calculate offset) on other architectures.
                                                                                      +    done uint32
                                                                                      +    m    Mutex
                                                                                      +}
                                                                                      +
                                                                                      +

                                                                                      sync.Once 仅提供了一个导出方法 Do(),参数 f 是只会被执行一次的函数,一般为对象初始化函数。

                                                                                      +
                                                                                      // go version go1.17 darwin/amd64
                                                                                      +
                                                                                      +// Do calls the function f if and only if Do is being called for the
                                                                                      +// first time for this instance of Once. In other words, given
                                                                                      +//     var once Once
                                                                                      +// if once.Do(f) is called multiple times, only the first call will invoke f,
                                                                                      +// even if f has a different value in each invocation. A new instance of
                                                                                      +// Once is required for each function to execute.
                                                                                      +//
                                                                                      +// Do is intended for initialization that must be run exactly once. Since f
                                                                                      +// is niladic, it may be necessary to use a function literal to capture the
                                                                                      +// arguments to a function to be invoked by Do:
                                                                                      +//     config.once.Do(func() { config.init(filename) })
                                                                                      +//
                                                                                      +// Because no call to Do returns until the one call to f returns, if f causes
                                                                                      +// Do to be called, it will deadlock.
                                                                                      +//
                                                                                      +// If f panics, Do considers it to have returned; future calls of Do return
                                                                                      +// without calling f.
                                                                                      +//
                                                                                      +func (o *Once) Do(f func()) {
                                                                                      +    // Note: Here is an incorrect implementation of Do:
                                                                                      +    //
                                                                                      +    //    if atomic.CompareAndSwapUint32(&o.done, 0, 1) {
                                                                                      +    //        f()
                                                                                      +    //    }
                                                                                      +    //
                                                                                      +    // Do guarantees that when it returns, f has finished.
                                                                                      +    // This implementation would not implement that guarantee:
                                                                                      +    // given two simultaneous calls, the winner of the cas would
                                                                                      +    // call f, and the second would return immediately, without
                                                                                      +    // waiting for the first's call to f to complete.
                                                                                      +    // This is why the slow path falls back to a mutex, and why
                                                                                      +    // the atomic.StoreUint32 must be delayed until after f returns.
                                                                                      +
                                                                                      +    if atomic.LoadUint32(&o.done) == 0 {
                                                                                      +        // Outlined slow-path to allow inlining of the fast-path.
                                                                                      +        o.doSlow(f)
                                                                                      +    }
                                                                                      +}
                                                                                      +
                                                                                      +func (o *Once) doSlow(f func()) {
                                                                                      +    o.m.Lock()
                                                                                      +    defer o.m.Unlock()
                                                                                      +    if o.done == 0 {
                                                                                      +        defer atomic.StoreUint32(&o.done, 1)
                                                                                      +        f()
                                                                                      +    }
                                                                                      +}
                                                                                      +
                                                                                      +

                                                                                      抛去大段的注释,可以看到 sync.Once 实现非常简洁。Do() 函数中,通过对成员变量 done 的判断,来决定是否执行传入的任务函数。执行任务函数前,通过锁保证任务函数的执行和 done 的修改是一个互斥操作。在执行任务函数前,对 done 做一个二次判断,来保证任务函数只会被执行一次,done 只会被修改一次。

                                                                                      +

                                                                                      2.2 done 为什么是第一个字段?

                                                                                      +

                                                                                      从字段 done 前有一段注释,说明了done 为什么是第一个字段。

                                                                                      +

                                                                                      done 在热路径中,done 放在第一个字段,能够减少 CPU 指令,也就是说,这样做能够提升性能。

                                                                                      +

                                                                                      热路径(hot path)是程序非常频繁执行的一系列指令,sync.Once 绝大部分场景都会访问 o.done,在热路径上是比较好理解的。如果 hot path 编译后的机器码指令更少,更直接,必然是能够提升性能的。

                                                                                      +

                                                                                      为什么放在第一个字段就能够减少指令呢?因为结构体第一个字段的地址和结构体的指针是相同的,如果是第一个字段,直接对结构体的指针解引用即可。如果是其他的字段,除了结构体指针外,还需要计算与第一个值的偏移(calculate offset)。在机器码中,偏移量是随指令传递的附加值,CPU 需要做一次偏移值与指针的加法运算,才能获取要访问的值的地址。因为,访问第一个字段的机器代码更紧凑,速度更快。

                                                                                      +
                                                                                      +

                                                                                      参考 What does “hot path” mean in the context of sync.Once? - StackOverflow

                                                                                      +
                                                                                      +

                                                                                      3.性能差异

                                                                                      +

                                                                                      我们以一个简单示例,来说明使用 sync.Once 保证函数只会被执行一次和多次执行,二者的性能差异。

                                                                                      +

                                                                                      考虑一个简单的场景,函数 ReadConfig 需要读取环境变量,并转换为对应的配置。环境变量在程序执行前已经确定,执行过程中不会发生改变。ReadConfig 可能会被多个协程并发调用,为了提升性能(减少执行时间和内存占用),使用 sync.Once 是一个比较好的方式。

                                                                                      +
                                                                                      type Config struct {
                                                                                      +    GoRoot string
                                                                                      +    GoPath string
                                                                                      +}
                                                                                      +
                                                                                      +var (
                                                                                      +    once   sync.Once
                                                                                      +    config *Config
                                                                                      +)
                                                                                      +
                                                                                      +func ReadConfigWithOnce() *Config {
                                                                                      +    once.Do(func() {
                                                                                      +        config = &Config{
                                                                                      +            GoRoot: os.Getenv("GOROOT"),
                                                                                      +            GoPath: os.Getenv("GOPATH"),
                                                                                      +        }
                                                                                      +    })
                                                                                      +    return config
                                                                                      +}
                                                                                      +
                                                                                      +func ReadConfig() *Config {
                                                                                      +    return &Config{
                                                                                      +        GoRoot: os.Getenv("GOROOT"),
                                                                                      +        GoPath: os.Getenv("GOPATH"),
                                                                                      +    }
                                                                                      +}
                                                                                      +
                                                                                      +

                                                                                      我们看下二者的性能差异。

                                                                                      +
                                                                                      func BenchmarkReadConfigWithOnce(b *testing.B) {
                                                                                      +    for i := 0; i < b.N; i++ {
                                                                                      +        _ = ReadConfigWithOnce()
                                                                                      +    }
                                                                                      +}
                                                                                      +
                                                                                      +func BenchmarkReadConfig(b *testing.B) {
                                                                                      +    for i := 0; i < b.N; i++ {
                                                                                      +        _ = ReadConfig()
                                                                                      +    }
                                                                                      +}
                                                                                      +
                                                                                      +

                                                                                      执行测试结果如下:

                                                                                      +
                                                                                      go test -bench=. main/once
                                                                                      +goos: darwin
                                                                                      +goarch: amd64
                                                                                      +pkg: main/once
                                                                                      +cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
                                                                                      +BenchmarkReadConfigWithOnce-12          670438965                1.732 ns/op
                                                                                      +BenchmarkReadConfig-12                  13339154                87.46 ns/op
                                                                                      +PASS
                                                                                      +ok      main/once       3.006s
                                                                                      +
                                                                                      +

                                                                                      sync.Once 中保证了 Config 初始化函数仅执行了一次,避免了多次重复初始化,在并发环境下很有用。

                                                                                      +
                                                                                      powered by Gitbook该文章修订时间: +2022-05-08 19:22:09 +
                                                                                      + + +
                                                                                      + +
                                                                                      +
                                                                                      +
                                                                                      + +

                                                                                      results matching ""

                                                                                      +
                                                                                        + +
                                                                                        +
                                                                                        + +

                                                                                        No results matching ""

                                                                                        + +
                                                                                        +
                                                                                        +
                                                                                        + +
                                                                                        +
                                                                                        + +
                                                                                        + + + + + + + + + + + + + + +
                                                                                        + + +
                                                                                        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/4.\344\275\277\347\224\250sync.Cond\351\200\232\347\237\245\345\215\217\347\250\213.html" "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/4.\344\275\277\347\224\250sync.Cond\351\200\232\347\237\245\345\215\217\347\250\213.html" new file mode 100644 index 0000000..3d34459 --- /dev/null +++ "b/docs/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/4.\344\275\277\347\224\250sync.Cond\351\200\232\347\237\245\345\215\217\347\250\213.html" @@ -0,0 +1,1306 @@ + + + + + + + 4.使用 sync.Cond 通知协程 · Go 编码建议 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                                                                                        +
                                                                                        + + + + + + + + +
                                                                                        + +
                                                                                        + +
                                                                                        + + + + + + + + +
                                                                                        +
                                                                                        + +
                                                                                        +
                                                                                        + +
                                                                                        + +

                                                                                        1.简介

                                                                                        +

                                                                                        sync.Cond 是基于互斥锁/读写锁实现的条件变量,用来协调想要访问共享资源的那些 Goroutine。当共享资源的状态发生变化的时候,sync.Cond 可以用来通知等待条件发生而阻塞的 Goroutine。

                                                                                        +

                                                                                        sync.Cond 基于互斥锁/读写锁,那它和互斥锁的区别是什么呢?

                                                                                        +

                                                                                        互斥锁 sync.Mutex 通常用来保护共享的临界资源,条件变量 sync.Cond 用来协调想要访问共享资源的 Goroutine。当共享资源的状态发生变化时,sync.Cond 可以用来通知被阻塞的 Goroutine。

                                                                                        +

                                                                                        2.使用场景

                                                                                        +

                                                                                        sync.Cond 经常用在多个 Goroutine 等待,一个 Goroutine 通知(事件发生)的场景。如果是一个通知,一个等待,使用互斥锁或 channel 就能搞定了。

                                                                                        +

                                                                                        我们想象一个非常简单的场景:

                                                                                        +

                                                                                        有一个协程在异步地接收数据,剩下的多个协程必须等待这个协程接收完数据,才能读取到正确的数据。在这种情况下,如果单纯使用 chan 或互斥锁,那么只能有一个协程可以等待,并读取到数据,没办法通知其他的协程也读取数据。

                                                                                        +

                                                                                        这个时候,就需要有个全局的变量来标志第一个协程数据是否接受完毕,剩下的协程,反复检查该变量的值,直到满足要求。或者创建多个 channel,每个协程阻塞在一个 channel 上,由接收数据的协程在数据接收完毕后,逐个通知。总之,需要额外的复杂度来完成这件事。

                                                                                        +

                                                                                        Go 语言在标准库 sync 中内置一个 sync.Cond 用来解决这类问题。

                                                                                        +

                                                                                        3.实现原理

                                                                                        +

                                                                                        sync.Cond 内部维护了一个等待队列,队列中存放的是所有在等待这个 sync.Cond 的 Go 程,即保存了一个通知列表。sync.Cond 可以用来唤醒一个或所有因等待条件变量而阻塞的 Go 程,以此来实现多个 Go 程间的同步。

                                                                                        +

                                                                                        sync.Cond 的定义如下:

                                                                                        +
                                                                                        // Cond implements a condition variable, a rendezvous point
                                                                                        +// for goroutines waiting for or announcing the occurrence
                                                                                        +// of an event.
                                                                                        +//
                                                                                        +// Each Cond has an associated Locker L (often a *Mutex or *RWMutex),
                                                                                        +// which must be held when changing the condition and
                                                                                        +// when calling the Wait method.
                                                                                        +//
                                                                                        +// A Cond must not be copied after first use.
                                                                                        +type Cond struct {
                                                                                        +    noCopy noCopy
                                                                                        +
                                                                                        +    // L is held while observing or changing the condition
                                                                                        +    L Locker
                                                                                        +
                                                                                        +    notify  notifyList
                                                                                        +    checker copyChecker
                                                                                        +}
                                                                                        +
                                                                                        +

                                                                                        每个 Cond 实例都会关联一个锁 L(互斥锁 Mutex,或读写锁 RWMutex),当修改条件或者调用 Wait 方法时,必须加锁。

                                                                                        +

                                                                                        sync.Cond 的四个成员函数定义如下:

                                                                                        +
                                                                                        // NewCond returns a new Cond with Locker l.
                                                                                        +func NewCond(l Locker) *Cond {
                                                                                        +    return &Cond{L: l}
                                                                                        +}
                                                                                        +
                                                                                        +

                                                                                        NewCond 创建 Cond 实例时,需要关联一个锁。

                                                                                        +
                                                                                        // Wait atomically unlocks c.L and suspends execution
                                                                                        +// of the calling goroutine. After later resuming execution,
                                                                                        +// Wait locks c.L before returning. Unlike in other systems,
                                                                                        +// Wait cannot return unless awoken by Broadcast or Signal.
                                                                                        +//
                                                                                        +// Because c.L is not locked when Wait first resumes, the caller
                                                                                        +// typically cannot assume that the condition is true when
                                                                                        +// Wait returns. Instead, the caller should Wait in a loop:
                                                                                        +//
                                                                                        +//    c.L.Lock()
                                                                                        +//    for !condition() {
                                                                                        +//        c.Wait()
                                                                                        +//    }
                                                                                        +//    ... make use of condition ...
                                                                                        +//    c.L.Unlock()
                                                                                        +//
                                                                                        +func (c *Cond) Wait() {
                                                                                        +    c.checker.check()
                                                                                        +    t := runtime_notifyListAdd(&c.notify)
                                                                                        +    c.L.Unlock()
                                                                                        +    runtime_notifyListWait(&c.notify, t)
                                                                                        +    c.L.Lock()
                                                                                        +}
                                                                                        +
                                                                                        +

                                                                                        Wait 用于阻塞调用者,等待通知。

                                                                                        +

                                                                                        调用 Wait 会自动释放锁 c.L,因为 Wait() 会将主调加入条件变量的通知列表,需要修改条件变量,所以主调在调用 Wait() 前需要对条件变量进行上锁,主调加入条件变量的通知列表后再解锁。

                                                                                        +

                                                                                        执行runtime_notifyListWait会挂起调用者所在的 Goroutine。如果其他协程调用了 Signal 或 Broadcast 唤醒了该协程,那么 Wait 方法在结束阻塞时,会重新给 c.L 加锁,并且继续执行 Wait 后面的代码。

                                                                                        +

                                                                                        主调对条件的检查,使用了 for !condition() 而非 if,是因为当前协程被唤醒时,条件不一定符合要求,需要再次 Wait 等待下次被唤醒。为了保险起,使用 for 能够确保被唤醒后条件一定符合后,再执行后续的代码。

                                                                                        +
                                                                                        // Signal wakes one goroutine waiting on c, if there is any.
                                                                                        +//
                                                                                        +// It is allowed but not required for the caller to hold c.L
                                                                                        +// during the call.
                                                                                        +func (c *Cond) Signal() {
                                                                                        +    c.checker.check()
                                                                                        +    runtime_notifyListNotifyOne(&c.notify)
                                                                                        +}
                                                                                        +
                                                                                        +// Broadcast wakes all goroutines waiting on c.
                                                                                        +//
                                                                                        +// It is allowed but not required for the caller to hold c.L
                                                                                        +// during the call.
                                                                                        +func (c *Cond) Broadcast() {
                                                                                        +    c.checker.check()
                                                                                        +    runtime_notifyListNotifyAll(&c.notify)
                                                                                        +}
                                                                                        +
                                                                                        +

                                                                                        Signal 只唤醒任意 1 个等待条件变量 c 的 goroutine,无需锁保护。Broadcast 唤醒所有等待条件变量 c 的 goroutine,无需锁保护。

                                                                                        +

                                                                                        4.使用示例

                                                                                        +

                                                                                        我们实现一个简单的例子,三个协程调用 Wait() 等待,另一个协程调用 Broadcast() 唤醒所有等待的协程。

                                                                                        +
                                                                                        var done = false
                                                                                        +
                                                                                        +func read(name string, c *sync.Cond) {
                                                                                        +    c.L.Lock()
                                                                                        +    for !done {
                                                                                        +        c.Wait()
                                                                                        +    }
                                                                                        +    fmt.Println(name, "starts reading")
                                                                                        +    c.L.Unlock()
                                                                                        +}
                                                                                        +
                                                                                        +func write(name string, c *sync.Cond) {
                                                                                        +    fmt.Println(name, "starts writing")
                                                                                        +    time.Sleep(time.Second)
                                                                                        +    done = true
                                                                                        +    fmt.Println(name, "wakes all")
                                                                                        +    c.Broadcast()
                                                                                        +}
                                                                                        +
                                                                                        +func main() {
                                                                                        +    cond := sync.NewCond(&sync.Mutex{})
                                                                                        +
                                                                                        +    go read("reader1", cond)
                                                                                        +    go read("reader2", cond)
                                                                                        +    go read("reader3", cond)
                                                                                        +    write("writer", cond)
                                                                                        +
                                                                                        +    time.Sleep(time.Second * 3)
                                                                                        +}
                                                                                        +
                                                                                        +
                                                                                          +
                                                                                        • done 即多个 Goroutine 阻塞等待的条件。
                                                                                        • +
                                                                                        • read() 调用 Wait() 等待通知,直到 done 为 true。
                                                                                        • +
                                                                                        • write() 接收数据,接收完成后,将 done 置为 true,调用 Broadcast() 通知所有等待的协程。
                                                                                        • +
                                                                                        • write() 中的暂停了 1s,一方面是模拟耗时,另一方面是确保前面的 3 个 read 协程都执行到 Wait(),处于等待状态。main 函数最后暂停了 3s,确保所有操作执行完毕。
                                                                                        • +
                                                                                        +

                                                                                        运行结果如下,注意 reader 的打印顺序是随机的。

                                                                                        +
                                                                                        $ go run main.go
                                                                                        +writer starts writing
                                                                                        +writer wakes all
                                                                                        +reader3 starts reading
                                                                                        +reader1 starts reading
                                                                                        +reader2 starts reading
                                                                                        +
                                                                                        +

                                                                                        更多关于 sync.Cond 的讨论可参考 How to correctly use sync.Cond? - StackOverflow

                                                                                        +

                                                                                        5.注意事项

                                                                                        +
                                                                                          +
                                                                                        • sync.Cond 不能被复制
                                                                                        • +
                                                                                        +

                                                                                        sync.Cond 不能被复制的原因,并不是因为其内部嵌套了 Locker。因为 NewCond 时传入的 Mutex/RWMutex 指针,对于 Mutex 指针复制是没有问题的。

                                                                                        +

                                                                                        主要原因是 sync.Cond 内部是维护着一个 Goroutine 通知队列 notifyList。如果这个队列被复制的话,那么就在并发场景下导致不同 Goroutine 之间操作的 notifyList.wait、notifyList.notify 并不是同一个,这会导致出现有些 Goroutine 会一直阻塞。

                                                                                        +
                                                                                          +
                                                                                        • 唤醒顺序
                                                                                        • +
                                                                                        +

                                                                                        从等待队列中按照顺序唤醒,先进入等待队列,先被唤醒。

                                                                                        +
                                                                                          +
                                                                                        • 调用 Wait() 前要加锁
                                                                                        • +
                                                                                        +

                                                                                        调用 Wait() 函数前,需要先获得条件变量的成员锁,原因是需要互斥地变更条件变量的等待队列。在 Wait() 返回前,会重新上锁。重新上锁的原因是主调在 Wait 后会进行解锁操作,避免重复解锁引发 panic。

                                                                                        +
                                                                                          +
                                                                                        • sync.Cond 和 channel 的区别?
                                                                                        • +
                                                                                        +

                                                                                        实际上,我们可以使用无缓冲 channel 充当条件变量实现 Go 程同步。通过 close(ch) 表示广播通知,其他的 Goroutine 使用 for select 结构来接收通知就行了。

                                                                                        +

                                                                                        还是以上面给出的同步示例,这里换作 channel 来实现。

                                                                                        +
                                                                                        var done = false
                                                                                        +var ch = make(chan struct{})
                                                                                        +
                                                                                        +func read(name string) {
                                                                                        +    for !done {
                                                                                        +        select {
                                                                                        +        case <-ch:
                                                                                        +        }
                                                                                        +    }
                                                                                        +    fmt.Println(name, "starts reading")
                                                                                        +}
                                                                                        +
                                                                                        +func write(name string) {
                                                                                        +    fmt.Println(name, "starts writing")
                                                                                        +    time.Sleep(time.Second)
                                                                                        +    done = true
                                                                                        +    fmt.Println(name, "wakes all")
                                                                                        +    close(ch)
                                                                                        +}
                                                                                        +
                                                                                        +func main() {
                                                                                        +    go read("reader1")
                                                                                        +    go read("reader2")
                                                                                        +    go read("reader3")
                                                                                        +    write("writer")
                                                                                        +
                                                                                        +    time.Sleep(time.Second * 3)
                                                                                        +}
                                                                                        +
                                                                                        +

                                                                                        运行输出如下,注意 reader 的打印顺序是随机的。

                                                                                        +
                                                                                        $ go run main.go
                                                                                        +writer starts writing
                                                                                        +writer wakes all
                                                                                        +reader1 starts reading
                                                                                        +reader3 starts reading
                                                                                        +reader2 starts reading
                                                                                        +
                                                                                        +

                                                                                        既然 channel 可以实现,看起来代码更加简洁,那么 sync.Cond 的存在还有必要吗?

                                                                                        +

                                                                                        实际上 sync.Cond 与 Channel 是有区别的,channel 定位于通信,用于一发一收的场景,sync.Cond 定位于同步,用于一发多收的场景。虽然 channel 可以通过 close 操作来达到一发多收的效果,但是 closed 的 channel 已无法继续使用,而 sync.Cond 依旧可以继续使用。这可能就是“全能”与“专精”的区别。

                                                                                        +
                                                                                        powered by Gitbook该文章修订时间: +2022-05-08 22:45:54 +
                                                                                        + + +
                                                                                        + +
                                                                                        +
                                                                                        +
                                                                                        + +

                                                                                        results matching ""

                                                                                        +
                                                                                          + +
                                                                                          +
                                                                                          + +

                                                                                          No results matching ""

                                                                                          + +
                                                                                          +
                                                                                          +
                                                                                          + +
                                                                                          +
                                                                                          + +
                                                                                          + + + + + + + + + + + + + + +
                                                                                          + + +
                                                                                          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/gitbook/gitbook-plugin-anchor-navigation-expand/lib/config.js b/docs/gitbook/gitbook-plugin-anchor-navigation-expand/lib/config.js index 5382a1d..5340037 100644 --- a/docs/gitbook/gitbook-plugin-anchor-navigation-expand/lib/config.js +++ b/docs/gitbook/gitbook-plugin-anchor-navigation-expand/lib/config.js @@ -1,74 +1,74 @@ -require('./log'); - -const defaultConfig = { - // 标题是否显示层级序号 - showLevel: true, - // 页面内的序号是否与 summary.md 中官方默认主题生成的序号相关联 - associatedWithSummary: true, - printLog: false, // 是否打印日志,就如同自己使用了prism,但是很容易写错他的定义,比如css写成了csss,文章太多的话,生成出错,但是找不到是那篇文章,打开该选项就能定位了 - multipleH1: true, // 多H1模式么?一般正常的文章一个md文件只有一个H1标题,这个时候就适合关闭该选项,生成的标题不会多一个 1. 出来 - // 模式:分为三种:float:浮动导航、pageTop:页面内部顶部导航、null:不显示导航 - mode: "float", - showGoTop: true, //是否显示返回顶部摁扭 - float: { //浮动导航设置 - floatIcon: "fa fa-navicon", - showLevelIcon: false, //是否显示层级图标 - level1Icon: "fa fa-hand-o-right", - level2Icon: "fa fa-hand-o-right", - level3Icon: "fa fa-hand-o-right" - }, - pageTop: { - showLevelIcon: false, //是否显示层级图标 - level1Icon: "fa fa-hand-o-right", - level2Icon: "fa fa-hand-o-right", - level3Icon: "fa fa-hand-o-right" - }, - // 官方默认主题 层级开关 - themeDefault: { - showLevel: false - } -} - -/** - * 处理默认参数 - * @param defaultConfig - * @param config - */ -function handler(defaultConfig, config) { - if (config) { - for (var item in defaultConfig) { - if (item in config) { - defaultConfig[item] = config[item]; - } - } - } -} -/** - * 处理所有的配置参数 - * @param bookIns - */ -function handlerAll(bookIns) { - var config = bookIns.config.get('pluginsConfig')['anchor-navigation-expand']; - var themeDefaultConfig = bookIns.config.get('pluginsConfig')['theme-default']; - handler(defaultConfig, config); - handler(defaultConfig.themeDefault, themeDefaultConfig); - - if (config.hasOwnProperty("isRewritePageTitle") && config.isRewritePageTitle) { - console.error("error:".error + - "plugins[anchor-navigation-expand]:isRewritePageTitle 配置只支持0.3.x 版本," + - "请到https://github.com/zq99299/gitbook-plugin-anchor-navigation-expand查看最新版本的配置项"); - console.log(""); - console.error("error:".error + - "plugins[anchor-navigation-expand]:isRewritePageTitle Configuration only supports 0.3.x version," + - "Please check here https://github.com/zq99299/gitbook-plugin-anchor-navigation-expand for the latest version of the configuration item"); - } -} -/** - * 本类中 config 单例共享 - * @type {{config: {showLevel: boolean, associatedWithSummary: boolean, mode: string, float: {showLevelIcon: boolean, level1Icon: string, level2Icon: string, level3Icon: string}, top: {showLevelIcon: boolean, level1Icon: string, level2Icon: string, level3Icon: string}, themeDefault: {showLevel: boolean}}, handler: handler, handlerAll: handlerAll}} - */ -module.exports = { - config: defaultConfig, - handler: handler, - handlerAll: handlerAll -} +require('./log'); + +const defaultConfig = { + // 标题是否显示层级序号 + showLevel: true, + // 页面内的序号是否与 summary.md 中官方默认主题生成的序号相关联 + associatedWithSummary: true, + printLog: false, // 是否打印日志,就如同自己使用了prism,但是很容易写错他的定义,比如css写成了csss,文章太多的话,生成出错,但是找不到是那篇文章,打开该选项就能定位了 + multipleH1: true, // 多H1模式么?一般正常的文章一个md文件只有一个H1标题,这个时候就适合关闭该选项,生成的标题不会多一个 1. 出来 + // 模式:分为三种:float:浮动导航、pageTop:页面内部顶部导航、null:不显示导航 + mode: "float", + showGoTop: true, //是否显示返回顶部摁扭 + float: { //浮动导航设置 + floatIcon: "fa fa-navicon", + showLevelIcon: false, //是否显示层级图标 + level1Icon: "fa fa-hand-o-right", + level2Icon: "fa fa-hand-o-right", + level3Icon: "fa fa-hand-o-right" + }, + pageTop: { + showLevelIcon: false, //是否显示层级图标 + level1Icon: "fa fa-hand-o-right", + level2Icon: "fa fa-hand-o-right", + level3Icon: "fa fa-hand-o-right" + }, + // 官方默认主题 层级开关 + themeDefault: { + showLevel: false + } +} + +/** + * 处理默认参数 + * @param defaultConfig + * @param config + */ +function handler(defaultConfig, config) { + if (config) { + for (var item in defaultConfig) { + if (item in config) { + defaultConfig[item] = config[item]; + } + } + } +} +/** + * 处理所有的配置参数 + * @param bookIns + */ +function handlerAll(bookIns) { + var config = bookIns.config.get('pluginsConfig')['anchor-navigation-expand']; + var themeDefaultConfig = bookIns.config.get('pluginsConfig')['theme-default']; + handler(defaultConfig, config); + handler(defaultConfig.themeDefault, themeDefaultConfig); + + if (config.hasOwnProperty("isRewritePageTitle") && config.isRewritePageTitle) { + console.error("error:".error + + "plugins[anchor-navigation-expand]:isRewritePageTitle 配置只支持0.3.x 版本," + + "请到https://github.com/zq99299/gitbook-plugin-anchor-navigation-expand查看最新版本的配置项"); + console.log(""); + console.error("error:".error + + "plugins[anchor-navigation-expand]:isRewritePageTitle Configuration only supports 0.3.x version," + + "Please check here https://github.com/zq99299/gitbook-plugin-anchor-navigation-expand for the latest version of the configuration item"); + } +} +/** + * 本类中 config 单例共享 + * @type {{config: {showLevel: boolean, associatedWithSummary: boolean, mode: string, float: {showLevelIcon: boolean, level1Icon: string, level2Icon: string, level3Icon: string}, top: {showLevelIcon: boolean, level1Icon: string, level2Icon: string, level3Icon: string}, themeDefault: {showLevel: boolean}}, handler: handler, handlerAll: handlerAll}} + */ +module.exports = { + config: defaultConfig, + handler: handler, + handlerAll: handlerAll +} diff --git a/docs/gitbook/gitbook-plugin-anchor-navigation-expand/lib/log.js b/docs/gitbook/gitbook-plugin-anchor-navigation-expand/lib/log.js index 85a4d6a..4af71d3 100644 --- a/docs/gitbook/gitbook-plugin-anchor-navigation-expand/lib/log.js +++ b/docs/gitbook/gitbook-plugin-anchor-navigation-expand/lib/log.js @@ -1,16 +1,16 @@ -var colors = require('colors'); -colors.setTheme({ - silly: 'rainbow', - input: 'grey', - verbose: 'cyan', - prompt: 'grey', - info: 'green', - data: 'grey', - help: 'cyan', - warn: 'yellow', - debug: 'blue', - error: 'red' -}); - -module.exports = colors; - +var colors = require('colors'); +colors.setTheme({ + silly: 'rainbow', + input: 'grey', + verbose: 'cyan', + prompt: 'grey', + info: 'green', + data: 'grey', + help: 'cyan', + warn: 'yellow', + debug: 'blue', + error: 'red' +}); + +module.exports = colors; + diff --git a/docs/gitbook/gitbook-plugin-anchor-navigation-expand/lib/plugin.js b/docs/gitbook/gitbook-plugin-anchor-navigation-expand/lib/plugin.js index 1c8f5d6..e9541c2 100644 --- a/docs/gitbook/gitbook-plugin-anchor-navigation-expand/lib/plugin.js +++ b/docs/gitbook/gitbook-plugin-anchor-navigation-expand/lib/plugin.js @@ -1,370 +1,370 @@ -var cheerio = require('cheerio'); -var slug = require('github-slugid'); -var Config = require('./config.js'); - - -/** - * 处理toc相关,同时处理标题和id - * @param $ - * @param option - * @param page - * @returns {Array} 返回处理好的tocs合集 - */ -function handlerTocs($, page, modifyHeader) { - var config = Config.config; - var tocs = []; - - var count = { - h1: 0, - h2: 0, - h3: 0 - }; - var titleCountMap = {}; // 用来记录标题出现的次数 - var h1 = 0, h2 = 0, h3 = 0; - $(':header').each(function (i, elem) { - var header = $(elem); - var id = addId(header, titleCountMap); - - if (id) { - switch (elem.tagName) { - case "h1": - handlerH1Toc(config, count, header, tocs, page.level, modifyHeader); - break; - case "h2": - handlerH2Toc(config, count, header, tocs, page.level, modifyHeader); - break; - case "h3": - handlerH3Toc(config, count, header, tocs, page.level, modifyHeader); - break; - default: - titleAddAnchor(header, id); - break; - } - } - }); - // 不然标题重写就没有效果,如果在外面不调用这句话的话 - page.content = $.html(); - return tocs; -} - -/** - * 处理锚点 - * @param header - * @param titleCountMap 用来记录标题出现的次数 - * @returns {string} - */ -function addId(header, titleCountMap) { - var id = header.attr('id') || slug(header.text()); - var titleCount = titleCountMap[id] || 0; - titleCountMap[id] = titleCount + 1; - // console.log('id:', id, 'n:', titleCount, 'hashmap:', titleCountMap) - if (titleCount) {//此标题已经存在 null/undefined/0/NaN/ 表达式时,统统被解释为false - id = id + '_' + titleCount; - } - header.attr("id", id); - return id; -} - -/** - * 标题增加锚点效果 - * @param header - * @param id - */ -function titleAddAnchor(header, id) { - header.prepend('' - + '' - + ''); -} - -/** - * 处理h1 - * @param count 计数器 - * @param header - * @param tocs 根节点 - */ -function handlerH1Toc(config, count, header, tocs, pageLevel, modifyHeader) { - var title = header.text(); - var id = header.attr('id'); - var level = ''; //层级 - - if (config.showLevel) { - //层级显示仅在需要的时候处理 - count.h1 += 1; - count.h2 = 0; - count.h3 = 0; - if (config.multipleH1) { - level = count.h1 + '. '; - } else { - level = ' '; - } - // 是否与官网默认主题层级序号相关联 - if (config.associatedWithSummary && config.themeDefault.showLevel) { - level = pageLevel + '.' + level; - } - if (!modifyHeader) { - level = ''; - } - header.text(level + title); //重写标题 - } - titleAddAnchor(header, id); - tocs.push({ - name: title, - level: level, - url: id, - children: [] - }); -} - -/** - * 处理h2 - * @param count 计数器 - * @param header - */ -function handlerH2Toc(config, count, header, tocs, pageLevel, modifyHeader) { - var title = header.text(); - var id = header.attr('id'); - var level = ''; //层级 - - if (tocs.length <= 0) { - //一级节点为空时,生成一个空的一级节点,让二级节点附带在这个上面 - // 在显示层级的时候不乱 - if (config.showLevel) { - count.h1 += 1; - } - tocs.push({ - name: "", - level: "", - url: "", - children: [] - }); - } - - var h1Index = tocs.length - 1; - var h1Toc = tocs[h1Index]; - if (config.showLevel) { - count.h2 += 1; - count.h3 = 0; - if (config.multipleH1) { - level = (count.h1 + '.' + count.h2 + '. '); - } else { - level = (count.h2 + '. '); - } - if (config.associatedWithSummary && config.themeDefault.showLevel) { - level = pageLevel + '.' + level; - } - if (!modifyHeader) { - level = ''; - } - header.text(level + title); //重写标题 - } - titleAddAnchor(header, id); - h1Toc.children.push({ - name: title, - level: level, - url: id, - children: [] - }); -} - -/** - * 处理h3 - * @param count 计数器 - * @param header - */ -function handlerH3Toc(config, count, header, tocs, pageLevel, modifyHeader) { - var title = header.text(); - var id = header.attr('id'); - var level = ''; //层级 - - if (tocs.length <= 0) { - //一级节点为空时,生成一个空的一级节点,让二级节点附带在这个上面 - if (config.showLevel) { - count.h1 += 1; - } - tocs.push({ - name: "", - level: "", - url: "", - children: [] - }); - } - var h1Index = tocs.length - 1; - var h1Toc = tocs[h1Index]; - var h2Tocs = h1Toc.children; - if (h2Tocs.length <= 0) { - //二级节点为空时,生成一个空的二级节点,让三级节点附带在这个上面 - if (config.showLevel) { - count.h2 += 1; - } - h2Tocs.push({ - name: "", - level: "", - url: "", - children: [] - }); - } - var h2Toc = h1Toc.children[h2Tocs.length - 1]; - - if (config.showLevel) { - count.h3 += 1; - if (config.multipleH1) { - level = (count.h1 + '.' + count.h2 + '.' + count.h3 + '. '); - } else { - level = (count.h2 + '.' + count.h3 + '. '); - } - if (config.associatedWithSummary && config.themeDefault.showLevel) { - level = pageLevel + "." + level; - } - if (!modifyHeader) { - level = ''; - } - header.text(level + title); //重写标题 - } - titleAddAnchor(header, id); - h2Toc.children.push({ - name: title, - level: level, - url: id, - children: [] - }); -} - -/** - * 处理浮动导航:拼接锚点导航html,并添加到html末尾,利用css 悬浮 - * @param tocs - * @returns {string} - */ -function handlerFloatNavbar($, tocs) { - var config = Config.config; - var float = config.float; - var floatIcon = float.floatIcon; - var level1Icon = ''; - var level2Icon = ''; - var level3Icon = ''; - if (float.showLevelIcon) { - level1Icon = float.level1Icon; - level2Icon = float.level2Icon; - level3Icon = float.level3Icon; - } - - var html = "
                                                                                            "; - for (var i = 0; i < tocs.length; i++) { - var h1Toc = tocs[i]; - if (h1Toc.name){ - html += "
                                                                                          • " + h1Toc.level + "" + h1Toc.name + "
                                                                                          • "; - } - if (h1Toc.children.length > 0) { - html += "
                                                                                              " - for (var j = 0; j < h1Toc.children.length; j++) { - var h2Toc = h1Toc.children[j]; - if(h2Toc.name){ - html += "
                                                                                            • " + h2Toc.level + "" + h2Toc.name + "
                                                                                            • "; - } - if (h2Toc.children.length > 0) { - html += ""; - } - } - html += "
                                                                                            " - } - } - html += "
                                                                                          "; - return html; -} - -function handlerPageTopNavbar($, tocs) { - return buildTopNavbar($, tocs) -} - -function buildTopNavbar($, tocs) { - var config = Config.config; - var pageTop = config.pageTop; - var level1Icon = ''; - var level2Icon = ''; - var level3Icon = ''; - if (pageTop.showLevelIcon) { - level1Icon = pageTop.level1Icon; - level2Icon = pageTop.level2Icon; - level3Icon = pageTop.level3Icon; - } - - var html = "
                                                                                            "; - for (var i = 0; i < tocs.length; i++) { - var h1Toc = tocs[i]; - if(h1Toc.name){ - html += "
                                                                                          • " + h1Toc.level + "" + h1Toc.name + "
                                                                                          • "; - } - if (h1Toc.children.length > 0) { - html += "
                                                                                              " - for (var j = 0; j < h1Toc.children.length; j++) { - var h2Toc = h1Toc.children[j]; - if(h2Toc.name){ - html += "
                                                                                            • " + h2Toc.level + "" + h2Toc.name + "
                                                                                            • "; - } - if (h2Toc.children.length > 0) { - html += ""; - } - } - html += "
                                                                                            " - } - } - - html += "
                                                                                          "; - - return html; -} - -/** - * 添加返回顶部按钮 - * @param tocs - * @returns {string} - */ -function buildGoTop(tocs) { - var config = Config.config; - var html = ""; - if (config.showGoTop && tocs && tocs.length > 0) { - html = ""; - } - return html; -} - -function start(bookIns, page) { - var $ = cheerio.load(page.content); - var modifyHeader = !//.test(page.content) - - // 处理toc相关,同时处理标题和id - var tocs = handlerTocs($, page, modifyHeader); - - // 设置处理之后的内容 - if (tocs.length == 0) { - page.content = $.html(); - return; - } - var html = ""; - if (!//.test(page.content)) { - var config = Config.config; - var mode = config.mode; - if (mode == 'float') { - html = handlerFloatNavbar($, tocs); - } else if (mode == 'pageTop') { - html = handlerPageTopNavbar($, tocs); - } - } - html += buildGoTop(tocs); - page.content = html + $.html(); - var $x = cheerio.load(page.content); - $x('extoc').replaceWith($x(buildTopNavbar($, tocs, page))); - page.content = $x.html(); -} - -module.exports = start; +var cheerio = require('cheerio'); +var slug = require('github-slugid'); +var Config = require('./config.js'); + + +/** + * 处理toc相关,同时处理标题和id + * @param $ + * @param option + * @param page + * @returns {Array} 返回处理好的tocs合集 + */ +function handlerTocs($, page, modifyHeader) { + var config = Config.config; + var tocs = []; + + var count = { + h1: 0, + h2: 0, + h3: 0 + }; + var titleCountMap = {}; // 用来记录标题出现的次数 + var h1 = 0, h2 = 0, h3 = 0; + $(':header').each(function (i, elem) { + var header = $(elem); + var id = addId(header, titleCountMap); + + if (id) { + switch (elem.tagName) { + case "h1": + handlerH1Toc(config, count, header, tocs, page.level, modifyHeader); + break; + case "h2": + handlerH2Toc(config, count, header, tocs, page.level, modifyHeader); + break; + case "h3": + handlerH3Toc(config, count, header, tocs, page.level, modifyHeader); + break; + default: + titleAddAnchor(header, id); + break; + } + } + }); + // 不然标题重写就没有效果,如果在外面不调用这句话的话 + page.content = $.html(); + return tocs; +} + +/** + * 处理锚点 + * @param header + * @param titleCountMap 用来记录标题出现的次数 + * @returns {string} + */ +function addId(header, titleCountMap) { + var id = header.attr('id') || slug(header.text()); + var titleCount = titleCountMap[id] || 0; + titleCountMap[id] = titleCount + 1; + // console.log('id:', id, 'n:', titleCount, 'hashmap:', titleCountMap) + if (titleCount) {//此标题已经存在 null/undefined/0/NaN/ 表达式时,统统被解释为false + id = id + '_' + titleCount; + } + header.attr("id", id); + return id; +} + +/** + * 标题增加锚点效果 + * @param header + * @param id + */ +function titleAddAnchor(header, id) { + header.prepend('' + + '' + + ''); +} + +/** + * 处理h1 + * @param count 计数器 + * @param header + * @param tocs 根节点 + */ +function handlerH1Toc(config, count, header, tocs, pageLevel, modifyHeader) { + var title = header.text(); + var id = header.attr('id'); + var level = ''; //层级 + + if (config.showLevel) { + //层级显示仅在需要的时候处理 + count.h1 += 1; + count.h2 = 0; + count.h3 = 0; + if (config.multipleH1) { + level = count.h1 + '. '; + } else { + level = ' '; + } + // 是否与官网默认主题层级序号相关联 + if (config.associatedWithSummary && config.themeDefault.showLevel) { + level = pageLevel + '.' + level; + } + if (!modifyHeader) { + level = ''; + } + header.text(level + title); //重写标题 + } + titleAddAnchor(header, id); + tocs.push({ + name: title, + level: level, + url: id, + children: [] + }); +} + +/** + * 处理h2 + * @param count 计数器 + * @param header + */ +function handlerH2Toc(config, count, header, tocs, pageLevel, modifyHeader) { + var title = header.text(); + var id = header.attr('id'); + var level = ''; //层级 + + if (tocs.length <= 0) { + //一级节点为空时,生成一个空的一级节点,让二级节点附带在这个上面 + // 在显示层级的时候不乱 + if (config.showLevel) { + count.h1 += 1; + } + tocs.push({ + name: "", + level: "", + url: "", + children: [] + }); + } + + var h1Index = tocs.length - 1; + var h1Toc = tocs[h1Index]; + if (config.showLevel) { + count.h2 += 1; + count.h3 = 0; + if (config.multipleH1) { + level = (count.h1 + '.' + count.h2 + '. '); + } else { + level = (count.h2 + '. '); + } + if (config.associatedWithSummary && config.themeDefault.showLevel) { + level = pageLevel + '.' + level; + } + if (!modifyHeader) { + level = ''; + } + header.text(level + title); //重写标题 + } + titleAddAnchor(header, id); + h1Toc.children.push({ + name: title, + level: level, + url: id, + children: [] + }); +} + +/** + * 处理h3 + * @param count 计数器 + * @param header + */ +function handlerH3Toc(config, count, header, tocs, pageLevel, modifyHeader) { + var title = header.text(); + var id = header.attr('id'); + var level = ''; //层级 + + if (tocs.length <= 0) { + //一级节点为空时,生成一个空的一级节点,让二级节点附带在这个上面 + if (config.showLevel) { + count.h1 += 1; + } + tocs.push({ + name: "", + level: "", + url: "", + children: [] + }); + } + var h1Index = tocs.length - 1; + var h1Toc = tocs[h1Index]; + var h2Tocs = h1Toc.children; + if (h2Tocs.length <= 0) { + //二级节点为空时,生成一个空的二级节点,让三级节点附带在这个上面 + if (config.showLevel) { + count.h2 += 1; + } + h2Tocs.push({ + name: "", + level: "", + url: "", + children: [] + }); + } + var h2Toc = h1Toc.children[h2Tocs.length - 1]; + + if (config.showLevel) { + count.h3 += 1; + if (config.multipleH1) { + level = (count.h1 + '.' + count.h2 + '.' + count.h3 + '. '); + } else { + level = (count.h2 + '.' + count.h3 + '. '); + } + if (config.associatedWithSummary && config.themeDefault.showLevel) { + level = pageLevel + "." + level; + } + if (!modifyHeader) { + level = ''; + } + header.text(level + title); //重写标题 + } + titleAddAnchor(header, id); + h2Toc.children.push({ + name: title, + level: level, + url: id, + children: [] + }); +} + +/** + * 处理浮动导航:拼接锚点导航html,并添加到html末尾,利用css 悬浮 + * @param tocs + * @returns {string} + */ +function handlerFloatNavbar($, tocs) { + var config = Config.config; + var float = config.float; + var floatIcon = float.floatIcon; + var level1Icon = ''; + var level2Icon = ''; + var level3Icon = ''; + if (float.showLevelIcon) { + level1Icon = float.level1Icon; + level2Icon = float.level2Icon; + level3Icon = float.level3Icon; + } + + var html = "
                                                                                            "; + for (var i = 0; i < tocs.length; i++) { + var h1Toc = tocs[i]; + if (h1Toc.name){ + html += "
                                                                                          • " + h1Toc.level + "" + h1Toc.name + "
                                                                                          • "; + } + if (h1Toc.children.length > 0) { + html += "
                                                                                              " + for (var j = 0; j < h1Toc.children.length; j++) { + var h2Toc = h1Toc.children[j]; + if(h2Toc.name){ + html += "
                                                                                            • " + h2Toc.level + "" + h2Toc.name + "
                                                                                            • "; + } + if (h2Toc.children.length > 0) { + html += ""; + } + } + html += "
                                                                                            " + } + } + html += "
                                                                                          "; + return html; +} + +function handlerPageTopNavbar($, tocs) { + return buildTopNavbar($, tocs) +} + +function buildTopNavbar($, tocs) { + var config = Config.config; + var pageTop = config.pageTop; + var level1Icon = ''; + var level2Icon = ''; + var level3Icon = ''; + if (pageTop.showLevelIcon) { + level1Icon = pageTop.level1Icon; + level2Icon = pageTop.level2Icon; + level3Icon = pageTop.level3Icon; + } + + var html = "
                                                                                            "; + for (var i = 0; i < tocs.length; i++) { + var h1Toc = tocs[i]; + if(h1Toc.name){ + html += "
                                                                                          • " + h1Toc.level + "" + h1Toc.name + "
                                                                                          • "; + } + if (h1Toc.children.length > 0) { + html += "
                                                                                              " + for (var j = 0; j < h1Toc.children.length; j++) { + var h2Toc = h1Toc.children[j]; + if(h2Toc.name){ + html += "
                                                                                            • " + h2Toc.level + "" + h2Toc.name + "
                                                                                            • "; + } + if (h2Toc.children.length > 0) { + html += ""; + } + } + html += "
                                                                                            " + } + } + + html += "
                                                                                          "; + + return html; +} + +/** + * 添加返回顶部按钮 + * @param tocs + * @returns {string} + */ +function buildGoTop(tocs) { + var config = Config.config; + var html = ""; + if (config.showGoTop && tocs && tocs.length > 0) { + html = ""; + } + return html; +} + +function start(bookIns, page) { + var $ = cheerio.load(page.content); + var modifyHeader = !//.test(page.content) + + // 处理toc相关,同时处理标题和id + var tocs = handlerTocs($, page, modifyHeader); + + // 设置处理之后的内容 + if (tocs.length == 0) { + page.content = $.html(); + return; + } + var html = ""; + if (!//.test(page.content)) { + var config = Config.config; + var mode = config.mode; + if (mode == 'float') { + html = handlerFloatNavbar($, tocs); + } else if (mode == 'pageTop') { + html = handlerPageTopNavbar($, tocs); + } + } + html += buildGoTop(tocs); + page.content = html + $.html(); + var $x = cheerio.load(page.content); + $x('extoc').replaceWith($x(buildTopNavbar($, tocs, page))); + page.content = $x.html(); +} + +module.exports = start; diff --git a/docs/gitbook/gitbook-plugin-anchor-navigation-expand/style/plugin.css b/docs/gitbook/gitbook-plugin-anchor-navigation-expand/style/plugin.css index ebc9707..f6703bd 100644 --- a/docs/gitbook/gitbook-plugin-anchor-navigation-expand/style/plugin.css +++ b/docs/gitbook/gitbook-plugin-anchor-navigation-expand/style/plugin.css @@ -1,216 +1,216 @@ -/** 浮动导航 */ -#anchor-navigation-ex-navbar { - background-color: #fafafa; - border: 1px solid rgba(0, 0, 0, .07); - border-radius: 1px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); - box-shadow: 0 6px 12px rgba(0, 0, 0, .175); - background-clip: padding-box; - padding: 5px 10px; - position: fixed; - /*background-color: rgba(255,255,255,0.98);*/ - right: 50px; - top: 68px; - font-size: 12px; - white-space: nowrap; - z-index: 999; - cursor: pointer; - text-align: right; - max-height: 70%; - overflow-y: auto; - overflow-x: hidden; -} - -#anchor-navigation-ex-navbar ul { - display: block; - text-align: left; - padding-right: 10px; - padding-left: 10px; - list-style-type: none; -} -#anchor-navigation-ex-navbar input { - margin-left: 90%; - display: block; -} -#anchor-navigation-ex-navbar input:checked { - margin-left: 0%; - display: block; -} - -/* #anchor-navigation-ex-navbar div:active { - display: block; -} */ -#anchor-navigation-ex-navbar input:checked~ul { - display: none; -} - -#anchor-navigation-ex-navbar ul li a { - text-decoration: none; - border-bottom: none; - font-size: 14px; - color: #364149; - background: 0 0; - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - position: relative; -} - -#anchor-navigation-ex-navbar ul li a:hover { - text-decoration: underline; -} - -#anchor-navigation-ex-navbar ul li .title-icon { - padding-right: 4px; -} - -/*对应官网皮肤主题颜色*/ -.book.color-theme-1 #anchor-navigation-ex-navbar { - background-color: #111111; - border-color: #7e888b; - color: #afa790; -} - -.book.color-theme-1 #anchor-navigation-ex-navbar ul li a { - color: #877f6a; -} - -.book.color-theme-2 #anchor-navigation-ex-navbar { - background-color: #2d3143; - border-color: #272a3a; - color: #bcc1d2; -} - -.book.color-theme-2 #anchor-navigation-ex-navbar ul li a { - color: #c1c6d7; -} - -/* 返回顶部 */ -#anchorNavigationExGoTop { - position: fixed; - right: 50px; - bottom: 68px; - background-color: #fafafa; - border: 1px solid rgba(0, 0, 0, .07); - border-radius: 1px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); - box-shadow: 0 6px 12px rgba(0, 0, 0, .175); - background-clip: padding-box; - z-index: 999; - cursor: pointer; - font-size: 12px; - padding: 5px 10px; - color: #364149; -} -/*对应官网皮肤主题颜色*/ -.book.color-theme-1 #anchorNavigationExGoTop { - background-color: #111111; - border-color: #7e888b; - color: #afa790; -} - -.book.color-theme-2 #anchorNavigationExGoTop { - background-color: #2d3143; - border-color: #272a3a; - color: #bcc1d2; -} - -a.anchor-navigation-ex-anchor { - color: inherit !important; - display: none; - margin-left: -30px; - padding-left: 40px; - cursor: pointer; - position: absolute; - top: 0; - left: 0; - bottom: 0; -} - -a.anchor-navigation-ex-anchor i { - margin-left: -30px; - /*color: #000;*/ - vertical-align: middle; - font-size: 16px !important; -} - -h1, h2, h3, h4, h5, h6 { - position: relative; -} - -h1:hover a.anchor-navigation-ex-anchor, h2:hover a.anchor-navigation-ex-anchor, h3:hover a.anchor-navigation-ex-anchor, -h4:hover a.anchor-navigation-ex-anchor, h5:hover a.anchor-navigation-ex-anchor, h6:hover a.anchor-navigation-ex-anchor { - display: inline-block; -} - -.book .book-body .page-wrapper .page-inner section.normal { - overflow: visible; -} - -/* 页面内顶部固定导航 */ -#anchor-navigation-ex-pagetop-navbar{ - border: 1px solid rgba(0, 0, 0, .07); - border-radius: 1px; - background-clip: padding-box; - padding: 5px 10px; - background-color: #fafafa; - font-size: 12px; -} - -#anchor-navigation-ex-pagetop-navbar ul { - text-align: left; - padding-right: 10px; - padding-left: 10px; - list-style-type: none; -} - -#anchor-navigation-ex-pagetop-navbar:hover ul { - display: block; -} - -#anchor-navigation-ex-pagetop-navbar ul li a { - text-decoration: none; - border-bottom: none; - font-size: 14px; - color: #364149; - background: 0 0; - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - position: relative; -} - -#anchor-navigation-ex-pagetop-navbar ul li a:hover { - text-decoration: underline; -} - -#anchor-navigation-ex-pagetop-navbar ul li .title-icon { - padding-right: 4px; -} - -/*对应官网皮肤主题颜色*/ -.book.color-theme-1 #anchor-navigation-ex-pagetop-navbar { - background-color: #111111; - border-color: #7e888b; - color: #afa790; -} - -.book.color-theme-1 #anchor-navigation-ex-pagetop-navbar ul li a { - color: #877f6a; -} - -.book.color-theme-2 #anchor-navigation-ex-pagetop-navbar { - background-color: #2d3143; - border-color: #272a3a; - color: #bcc1d2; -} - -.book.color-theme-2 #anchor-navigation-ex-pagetop-navbar ul li a { - color: #c1c6d7; -} - - - - - - +/** 浮动导航 */ +#anchor-navigation-ex-navbar { + background-color: #fafafa; + border: 1px solid rgba(0, 0, 0, .07); + border-radius: 1px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + background-clip: padding-box; + padding: 5px 10px; + position: fixed; + /*background-color: rgba(255,255,255,0.98);*/ + right: 50px; + top: 68px; + font-size: 12px; + white-space: nowrap; + z-index: 999; + cursor: pointer; + text-align: right; + max-height: 70%; + overflow-y: auto; + overflow-x: hidden; +} + +#anchor-navigation-ex-navbar ul { + display: block; + text-align: left; + padding-right: 10px; + padding-left: 10px; + list-style-type: none; +} +#anchor-navigation-ex-navbar input { + margin-left: 90%; + display: block; +} +#anchor-navigation-ex-navbar input:checked { + margin-left: 0%; + display: block; +} + +/* #anchor-navigation-ex-navbar div:active { + display: block; +} */ +#anchor-navigation-ex-navbar input:checked~ul { + display: none; +} + +#anchor-navigation-ex-navbar ul li a { + text-decoration: none; + border-bottom: none; + font-size: 14px; + color: #364149; + background: 0 0; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + position: relative; +} + +#anchor-navigation-ex-navbar ul li a:hover { + text-decoration: underline; +} + +#anchor-navigation-ex-navbar ul li .title-icon { + padding-right: 4px; +} + +/*对应官网皮肤主题颜色*/ +.book.color-theme-1 #anchor-navigation-ex-navbar { + background-color: #111111; + border-color: #7e888b; + color: #afa790; +} + +.book.color-theme-1 #anchor-navigation-ex-navbar ul li a { + color: #877f6a; +} + +.book.color-theme-2 #anchor-navigation-ex-navbar { + background-color: #2d3143; + border-color: #272a3a; + color: #bcc1d2; +} + +.book.color-theme-2 #anchor-navigation-ex-navbar ul li a { + color: #c1c6d7; +} + +/* 返回顶部 */ +#anchorNavigationExGoTop { + position: fixed; + right: 50px; + bottom: 68px; + background-color: #fafafa; + border: 1px solid rgba(0, 0, 0, .07); + border-radius: 1px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + background-clip: padding-box; + z-index: 999; + cursor: pointer; + font-size: 12px; + padding: 5px 10px; + color: #364149; +} +/*对应官网皮肤主题颜色*/ +.book.color-theme-1 #anchorNavigationExGoTop { + background-color: #111111; + border-color: #7e888b; + color: #afa790; +} + +.book.color-theme-2 #anchorNavigationExGoTop { + background-color: #2d3143; + border-color: #272a3a; + color: #bcc1d2; +} + +a.anchor-navigation-ex-anchor { + color: inherit !important; + display: none; + margin-left: -30px; + padding-left: 40px; + cursor: pointer; + position: absolute; + top: 0; + left: 0; + bottom: 0; +} + +a.anchor-navigation-ex-anchor i { + margin-left: -30px; + /*color: #000;*/ + vertical-align: middle; + font-size: 16px !important; +} + +h1, h2, h3, h4, h5, h6 { + position: relative; +} + +h1:hover a.anchor-navigation-ex-anchor, h2:hover a.anchor-navigation-ex-anchor, h3:hover a.anchor-navigation-ex-anchor, +h4:hover a.anchor-navigation-ex-anchor, h5:hover a.anchor-navigation-ex-anchor, h6:hover a.anchor-navigation-ex-anchor { + display: inline-block; +} + +.book .book-body .page-wrapper .page-inner section.normal { + overflow: visible; +} + +/* 页面内顶部固定导航 */ +#anchor-navigation-ex-pagetop-navbar{ + border: 1px solid rgba(0, 0, 0, .07); + border-radius: 1px; + background-clip: padding-box; + padding: 5px 10px; + background-color: #fafafa; + font-size: 12px; +} + +#anchor-navigation-ex-pagetop-navbar ul { + text-align: left; + padding-right: 10px; + padding-left: 10px; + list-style-type: none; +} + +#anchor-navigation-ex-pagetop-navbar:hover ul { + display: block; +} + +#anchor-navigation-ex-pagetop-navbar ul li a { + text-decoration: none; + border-bottom: none; + font-size: 14px; + color: #364149; + background: 0 0; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + position: relative; +} + +#anchor-navigation-ex-pagetop-navbar ul li a:hover { + text-decoration: underline; +} + +#anchor-navigation-ex-pagetop-navbar ul li .title-icon { + padding-right: 4px; +} + +/*对应官网皮肤主题颜色*/ +.book.color-theme-1 #anchor-navigation-ex-pagetop-navbar { + background-color: #111111; + border-color: #7e888b; + color: #afa790; +} + +.book.color-theme-1 #anchor-navigation-ex-pagetop-navbar ul li a { + color: #877f6a; +} + +.book.color-theme-2 #anchor-navigation-ex-pagetop-navbar { + background-color: #2d3143; + border-color: #272a3a; + color: #bcc1d2; +} + +.book.color-theme-2 #anchor-navigation-ex-pagetop-navbar ul li a { + color: #c1c6d7; +} + + + + + + diff --git a/docs/gitbook/gitbook-plugin-sidebar-style/plugin.css b/docs/gitbook/gitbook-plugin-sidebar-style/plugin.css index 8bf126b..f11337a 100644 --- a/docs/gitbook/gitbook-plugin-sidebar-style/plugin.css +++ b/docs/gitbook/gitbook-plugin-sidebar-style/plugin.css @@ -1,3 +1,3 @@ -.sidebar-header { - text-align: center; +.sidebar-header { + text-align: center; } \ No newline at end of file diff --git a/docs/gitbook/gitbook-plugin-sidebar-style/plugin.js b/docs/gitbook/gitbook-plugin-sidebar-style/plugin.js index c4ba512..f755846 100644 --- a/docs/gitbook/gitbook-plugin-sidebar-style/plugin.js +++ b/docs/gitbook/gitbook-plugin-sidebar-style/plugin.js @@ -1,29 +1,29 @@ -require(['gitbook', 'jQuery'], function(gitbook, $, page) { - - var title; - var author; - - function insertDonateLink() { - if ($('.sidebar-header').length == 0) { - html = ''; - $('.book-summary').prepend(html) - - - if (author) { - $('.summary li:last').html('作者:'+author+''); - } else { - $('.summary li:last').html(''); - } - } - } - - gitbook.events.bind('start', function(e, config) { - title = config['sidebar-style'].title; - author = config['sidebar-style'].author; - insertDonateLink(); - }); - - gitbook.events.bind('page.change', function() { - insertDonateLink(); - }); -}); +require(['gitbook', 'jQuery'], function(gitbook, $, page) { + + var title; + var author; + + function insertDonateLink() { + if ($('.sidebar-header').length == 0) { + html = ''; + $('.book-summary').prepend(html) + + + if (author) { + $('.summary li:last').html('作者:'+author+''); + } else { + $('.summary li:last').html(''); + } + } + } + + gitbook.events.bind('start', function(e, config) { + title = config['sidebar-style'].title; + author = config['sidebar-style'].author; + insertDonateLink(); + }); + + gitbook.events.bind('page.change', function() { + insertDonateLink(); + }); +}); diff --git a/docs/index.html b/docs/index.html index fa3d596..11cac40 100644 --- a/docs/index.html +++ b/docs/index.html @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1036,7 +1032,7 @@

                                                                                          powered by Gitbook该文章修订时间: -2022-05-21 22:12:52 +2022-05-23 09:59:32 @@ -1073,7 +1069,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"前言","level":"1.1","depth":1,"next":{"title":"第一篇:项目布局","level":"1.2","depth":1,"ref":"","articles":[{"title":"项目布局","level":"1.2.1","depth":2,"path":"第一篇:项目布局/项目布局.md","ref":"第一篇:项目布局/项目布局.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"README.md","mtime":"2022-05-21T14:12:52.364Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":".","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"前言","level":"1.1","depth":1,"next":{"title":"第一篇:项目布局","level":"1.2","depth":1,"ref":"","articles":[{"title":"项目布局","level":"1.2.1","depth":2,"path":"第一篇:项目布局/项目布局.md","ref":"第一篇:项目布局/项目布局.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"README.md","mtime":"2022-05-23T01:59:32.902Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":".","book":{"language":""}}); }); @@ -1083,10 +1079,6 @@

                                                                                          No results matching " - - - - diff --git a/docs/search_index.json b/docs/search_index.json index 8f3d4ce..18d90fd 100644 --- a/docs/search_index.json +++ b/docs/search_index.json @@ -1 +1 @@ -{"index":{"version":"0.5.12","fields":[{"name":"title","boost":10},{"name":"keywords","boost":15},{"name":"body","boost":1}],"ref":"url","documentStore":{"store":{"./":["\"img\"","&&","(faq)","05","2009","2022","21","22:12:52","=","===","ask","c++","code","coder","comment","common","console.log(\"plugin","e.target.tagnam","effect","frequent","function(e){","gitbook该文章修订时间:","go","golang","gopher","gopher,想更好地管理","go,以及第三方书籍","go,这应该是入门必读最佳读物。","java","languag","layout,给出布局建议。一个清晰的项目结构,能帮忙我们高效有序的管理与日俱增的业务代码。不会随着代码量的递增,项目代码变得凌乱而不堪入目。","mistak","popup....\");document.onclick","power","program","project","pr,它将会变得更好。","question","review","specif","standard","tour","wiki","window.open(e.target.src,e.target.src)}img{cursor:pointer}","|","不仅易用,也很易学,这得益于与之匹配的丰富学习资料。go","之势。","也是不错的选择。","互动勘误","代码,想写出更加高效易读的","代码,想让自己拥有一个更好的编码风格,","内容简介","写出更优质的代码。","前言","功能实践","各个公司或组织,都有各自不同的","向","和","如果你对文章内容有任何疑问和建议,欢迎在应相应章节下留言探讨。","如果是","如果是想全面了解","如果是想深入了解","官方","官方文档","官方的入门指南","官方网站已有系统全面的指导文档,新手可以快速通过官方资料,轻松上手。此外,第三方资料,也有百家争鸣之势。有介绍","实践建议,帮助我们更好的使用","年诞生以来,因其出色的并发能力和简单易用的低门槛,已在各大厂商的后台高并发业务场景崭露头脚,甚至有取代传统后台服务开发语言","开发经验的","想离","最佳实践更近一步,建议看看本书。","本书为开源书籍,希望得到大家的协同共建,不断迭代丰富。如果有你的建议和","本书主要分为四个方面:","本书所述内容谈不上是","本书由来","本书由来内容简介目标读者互动勘误","本文所述内容均为参考意见,并非标准。其中许多是","本文结合官方编码建议,大厂编码规范、开源技术书籍和自身项目经验,尽可能以简短的语言给出一套行之有效","源码应该是你的首选,再结合精彩的第三方分析,如","源码进行剖析介绍实现原理的,有介绍高并发场景下实战指导的,也有介绍使用","的共同追求。为书写效率更高的代码,本文将结合","的初学者,建议先略过本书,了解下","的最佳实践更近一步。","的最佳实践,但希望能够帮助广大","的通用准则,其他扩展内容也参考了很多官方指南,包括但不限于。","目标读者","编码建议的。至此,本书应运而生。","编码建议,让您的代码高效易读。","编码规范,但大同小异。规范是一种倡导,不遵守并不代表错误,但当大家都遵守规范时,你会发现,整个世界将变得整洁有序。","编码风格","编码风格从简洁易读的角度出发,参考","虽然简单,但其功能特性却不单一。其丰富的语言特性,在使用时还是有很多不同的姿势。本书从功能特性出发,给出","语法知识和语言特性与,也建议先略过本书。go","语言圣经","语言基础和实战的,有对","语言实现原理,还是建议先略过本书。虽然本书略有涉及,但不够全面。go","语言特性,从常用数据结构、内存管理和并发,三个方面给出相关建议。","语言自","语言设计与实现,应该会大有收获。","进行高性能编程的,等等。很遗憾的是,没有发现一个系统介绍","那么到底是谁适合阅读本书呢?如果你是一位有","项目布局","项目布局参考业界认可度较高的","高性能编码","高效的代码是我们每一个",",并结合自身项目团队编码规范,力争给出全面、认可度较高的编码风格,帮助大家写出风格统一的简洁高效的代码。"],"第一篇:项目布局/项目布局.html":["\"img\"","#","&&","(travis、circle、drone)配置和脚本放在",")、容器(",")、操作系统(",")包配置和脚本放在","/api","/asset","/build","/build/ci","/build/packag","/cmd","/config","/deploy","/deploy。","/doc","/exampl","/githook","/init","/intern","/internal/app/myapp","/internal/pkg/","/pkg","/readme.md","/script","/src","/test","/test/data","/test/testdata。请注意,如果你需要忽略目录中的内容,go","/third_parti","/tool","/vendor","/web","/websit","01","05","1","1.13","1.前言2.项目布局2.1","19:54:14","2.1","2.2","2.3","2.4","2.5","2.6","2.7","2.项目布局","2022","3.小结","639","=","===","ami","api","application)。","asset","build","ci","cmd","cn.md。","code","comm","commit","compose、kubernetes/helm、mesos、terraform、bosh)。注意,在一些存储库中(特别是使用","config","console.log(\"plugin","deb、rpm、pkg","deploy","doc","docker","e.target.tagnam","exampl","function(e){","git","gitbook该文章修订时间:","githook","github","github/hashicorp/terraform/makefile。","go","go1.4","godoc","golang,目前官方团队并未提供权威规范。不过不用担心,我们依然有一个规范可以参考,那就是业界推崇的","gopher","https://proxy.golang.org","iaas、paas、系统和容器编排部署配置和模板(dock","init","intern","internal,所有名为","iso","java","kubernet","layout","layout。","list","logo,readm","main","makefile(如果有的话)变得小而简单,例如","markdown","modul","modules。从","modules,我们并不需要","offici","openapi","packag","page","pkg","popup....\");document.onclick","power","project","readm","readme.md","readme_zh","readme,相得益彰。","script","spa(singl","specification。","src","standard","supervisord)配置。","swagger","sysv)和进程管理(runit,","test","third_parti","tool","ui。","upstart,","util","vendor","web","websit","wikipedia","window.open(e.target.src,e.target.src)}img{cursor:pointer}","|","下面,就像不应该拥有","不应该拥有的目录","不应该拥有的目录/src3.小结参考文献1.前言","不管是什么语言,开发什么项目,一个稍大的项目,必然要面临如何管理项目结构布局的问题,因为一个简洁清晰的布局是项目可读的关键。","不要在该目录下放太多的代码,如果代码可以被其他项目导入使用,请放到","中引用的图片等。","中的代码,作为项目的主应用目录。目录也可以包含多个可执行文件,子目录名称一般与可执行文件相对应(如:/cmd/myapp","中,而应用的共享代码可以放在","丰富的示例将帮助用户更加便捷快速的了解上手一个项目,再加上","代码目录","代码目录/cmd/internal/pkg/vendor2.3","以后,go","们努力的结果。此项目布局是通用的,建议并非强制,当然我们最好遵守,因为这能让我的项目布局看起来更加规范,易于交流和维护。","作为他们的模块代理服务器)。使用","你实际的代码可以放在","你的项目结构布局看起来应该像下面这个样子。","你还可以在","使用","信息是否符合规范。","公有库代码(外部项目可以使用)","公有库代码(外部项目可以使用)。","关于项目的设计文档,用户的使用文档等(除了","其他目录","其他目录/docs/tools/examples/third_party/githooks/assets/website2.7","函数,调用","初始化信息","初始化信息。","参考文献","可执行文件目录","可执行文件目录。","含有","和","外部依赖库","外部依赖库。","外部辅助工具","外部辅助工具。","如","如不同环境(测试、正式)的服务配置信息。","如放置测试工具和测试依赖数据。对于较大的项目,有一个数据子目录是有意义的。例如,你可以使用","如果代码不可复用或者你不希望其他项目使用,请放到","如果你不使用","如果发现此项目布局规范并不适用自己的项目,可在其基础上适当做出改变,不要泥古拘方。","如果手动管理依赖包可以将依赖包放到该目录,当然推荐使用依赖包管理工具","存放","导入代码。","将你的","将你的云(","将更加人性化,如","应用程序和公共库的示例","应用程序和公共库的示例。","应用程序特定组件,如静态","应用程序的组件","应用程序目录","应用程序目录/web2.5","应用程序项目的基本布局,是社区","开始,官方推荐使用新的依赖管理系统","或","打包和持续集成","打包和持续集成。","执行各种构建、安装、分析等操作的脚本","执行各种构建、安装、分析等操作的脚本。","持续集成配置与脚本","整体风格","整体风格2.2","有些","有些语言自身提供了目录结构规范,但对于较为年轻的","服务对外接口","服务对外接口。","服务应用程序目录","服务应用程序目录/api2.4","构建依赖包","格式的说明文档,是用户了解一个项目最直观的入口。如果有需要,添加不同语言的","注意,1.11","测试相关","测试相关。","源码目录","源码目录。","生成的文档之外)均可以放在该目录。","的子目录都不能被导出。","目录。","目录下。","目录下,","目录内部增加一些代码结构来区分共享和非共享的。虽然它并不是必须的(尤其是小的项目),但是最好能从视觉上区分包的用途。","目录的项目结构是一种常见的布局模式,但并不是所有人都接受它,一些","目,但这通常发生在开发人员有","社区的人并不推荐它。","私有库代码(仅本项目使用)","私有库代码(仅本项目使用)。","简体中文","系统初始化(systemd,","背景。不同类型的代码应该有自己的目录,而不是全部放到","资源、服务器端模板和","起,从编译器层面限制该目录不可被导出,而且不只是项目根目录下的","还会忽略以“.”或“_”开头的目录或文件,因此在如何命名测试数据目录方面有更大的灵活性。","还启用了模块代理功能(默认使用","这些脚本帮助根目录下","这是","这样的目录,因为这些名称含义太泛了,违背了单一职责原则。","这里放不希望被其他应用程序或者库导入的代码。注意:从","这里放希望被其他应用程序或者库导入的代码,所以在这里放东西之前要三思。","这里是服务对外接口的实现,定义接口时,我们应该遵循","进行自动化管理。","通常只包含一个简单的","通用应用目录","通用应用目录/configs/init/scripts/build/deployments/test/readme.md2.6","部署的应用程序),这个目录被称为","部署相关","部署相关。","配置信息","配置信息。","钩子","钩子。","钩子,可以帮忙我们在代码提交时完成一些检测,比如分支名称和","页面,则在这里放置项目网站数据。","项目依赖的第三方工具,比如","项目工具","项目工具。","项目布局","项目文档","项目文档。","项目用到的相关资源文件,比如项目","项目确实有一个","项目网站数据","项目网站数据。","项目说明","项目说明。","项目资源文件","项目资源文件。","项目配套工具,实现这些工具可以使用从",")。"],"第二篇:代码风格/1.格式化.html":["\"img\"","%d,","%s\",","&&","//","05","1.格式化","2022","21","21:18:14","=","===",">","a,","b)","bad","console.log(\"plugin","e.target.tagnam","err","err.error())","err:%v\",","file","fmt","fmt.printf(\"%v这里要空格%v\",","function(e){","gitbook该文章修订时间:","go","gofmt","gofmt,如","goland","good","id","logger.errorf(\"num","logger.errorf(\"num:%d,","num,","popup....\");document.onclick","power","set","tool","watcher","window.open(e.target.src,e.target.src)}img{cursor:pointer}","中可勾选","主体风格占位符主体风格","代码必须用","使用制表符进行缩进,使用空白符进行对齐。","占位符","在保存代码时可设置自动执行","字符串占位符,如果输入数据来自外部,建议使用%q进行安全转义。","工具格式化。","并指定作用范围。","格式化字符串中多个占位符之间要有空格。","的","通过%v打印错误信息时建议加冒号。"],"第二篇:代码风格/2.代码行.html":["!=","\"img\"","%v","%v\\n\",","&&","(int(bar)","+","...","//","0","0)","0,","05","1","1,","13,","144,","2","2,","2.0,","2.代码行","2022","21","21,","21:18:32","233)","3,","3.0}[i","34,","5,","55,","55,89,","8,","80","800","89,",":=","=","===",">","[]float64{1.0,","bad","bodi","console.log(\"plugin","e.target.tagnam","err","fmt.printf(\"%f\\n\",","fmt.printf(\"%v","foo","foo()","func","function(e){","gitbook该文章修订时间:","gofmt","good","i]","import","int","int(bar)","nil","popup....\");document.onclick","power","res,","res.ret","return","struct","tag","v","v+1","v+1)","var","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","||","}","一行代码不要超过120列,超过的情况,使用合理的方法换行。","不必要的空行","不要添加没必要的括号。","作为下标不留空格","作为入参不要留空格","作为输入参数或者数组下标时,运算符和操作数之间不需要空格,紧凑展示。","例外场景:","函数体第一行不要换行。","函数调用和对调用结果的处理,是紧密相连的,不能加空行。","函数长度不能超过","工具生成的代码","括号和空格","换行方式","文件长度不能超过","模块语句","的逻辑。","行。","行数","行长度换行方式不必要的空行括号和空格行数行长度","语句前不要换行。","运算符和操作数之间要留空格","运算符和操作数之间要留空格。","遵循","采用惰性换行,换行前应尽可能占满当前行不留空位。"],"第二篇:代码风格/3.字符串.html":["\"","\"img\"","\"rsp","\"tom,jerry,spike\"","\"unknown","%v","%v\",","&&","+","//","05","2022","21","22:19:54","3.字符串",":=","=","===","[]string{\"tom\",\"jerry\",\"spike\"}","`unknown","bad","code","code)","code,","console.log(\"plugin","e.target.tagnam","error:\"test\"`","fmt.sprintf(\"rsp","function(e){","gitbook该文章修订时间:","go","good","is\"","list","map","msg","msg)","name:\\\"test\\\"\"","popup....\");document.onclick","power","receiv","str","var","wanterror","window.open(e.target.src,e.target.src)}img{cursor:pointer}","不要使用字符串表示","和","字符串字面量","字符串拼接","支持使用原始字符串字面值,可以使用反引号来表示原生字符串。在需要转义的场景下,我们应该尽量使用使用反引号表示字符串,避免转义。","结构。","行内字符串拼接时,出于性能的考虑,待拼接字符串数量较少(fmt.sprintf()。"],"第二篇:代码风格/4.依赖管理.html":["\"../net\"","\"bar/testutil\"","\"encoding/json\"","\"fmt\"","\"foo\"","\"github.com/olivere/elastic/v7\"","\"github.com/xxxxxxxx/utils/formatlog\"","\"github.com/xxxxxxxx/xxxserver/pkg/formatlog\"","\"go.uber.org/atomic\"","\"golang.org/x/sync/errgroup\"","\"img\"","\"myproject/controller\"","\"myproject/models\"","\"os\"","\"strings\"","\"xxxx.com/proj/net\"","&&","(",")",".",".形式导入包",".,因为它使程序难以阅读,比如使用","//","05","15:40:04","2022","22","4.依赖管理","404","=","===","bad","bar/testutil,后者导入","baz","console.log(\"plugin","e.target.tagnam","elast","foo","foo_test","foo。所以我们使用import","foo,让测试文件假装是包","fork","function(e){","git","git.code.oa.com/group/myrepo","gitbook该文章修订时间:","github","github.com/astaxie/beego/orm","github.com/xxx/xxx。内部包是指不能被外部","go","go.sum文件必须提交,不要添加到.gitignore规则中。","go1.11","goimport","good","import","init","mod","modul","packag","popup....\");document.onclick","power","public","vendor","window.open(e.target.src,e.target.src)}img{cursor:pointer}","一份。","上的包要确认活跃度,不知名的包可能会被下架或出现不兼容的版本升级情况,必要情况下可","不要使用相对路径导入内部包,应该使用完整的路径引入包。","中,因为它使用","了。","以上必须使用","会自动添加依赖的包,并移除未引用的包。把依赖包按字母序升序排列,并对包进行分组管理。通过空行隔开,默认分为标准库包和非标准库包(第三方包和内部包)。","作为依赖管理的项目不要提交","使用","依赖规范import","内部包","包名和","只能用于测试文件,且必须是为了解决循环依赖,才能使用。","在这种情况下,测试文件不能在包","外部包","如引入","导入的包按照先后顺序应该分为三组:","工具自动格式化引入的包名,import","带域名的包名都属于外部包,如","引入第三方包要慎重。","必要时给包起个别名","标准包","模式。go","的一部分,尽管它不是。除了这一种情况,不要使用import","的包。","目录。","目录下,而不是具体业务目录下。","管理依赖的项目,","规则为准。","规范","规范依赖规范","规范原则上以","该包已经","路径名不一致时,或者多个相同包名冲突时,使用别名代替会有更好的可读性。","这样的标识符,不知道其是顶级标识符还是导入包中的顶级标识符。","通用的功能包,应该放在"],"第二篇:代码风格/5.初始化.html":["\"\"","\"\",","\"0\",","\"a\"","\"add\"},","\"bar\"","\"bar\"}","\"config\",","\"config.yaml\"),","\"doe\",","\"error\"","\"foo\"","\"foo\"}","\"img\"","\"john\",","\"my_env\"","\"subtract\"},","&&","&_config)","&config)","&t{name:","(","(myerror)",")","+","...","//","0","0,","05","0},","0,但不够直观","0,更加直观","1","1)","15:43:51","2","2)","2022","22","3","3)","5.初始化",":=","=","==","===","[]int","[]int{}","[]string)","[]struct{","_","_config","_defaultfoo","_e","add","add1","add2","admin:","append(nums,","area","b","bad","bad:","blue","bool","cap)","cloud","color.new(0x0000ff)","color.new(0x00ff00)","color.new(0xff0000)","config","console.log(\"plugin","const","cwd,","database/sql、编码类型注册表等;","defaultfoo()","e.target.tagnam","envvar","err","error","error()","f","f()","false,","firstname:","float64","foo","foo()","foo(m","foo{","func","function","function(e){","gitbook该文章修订时间:","give","good","googl","green","handl","handle(info)","i/o","i/o,包括文件系统、网络和系统调用。","in64(0)","inconsist","info,","init()","init()初始化","init(),当","int","int64","iota","ioutil.readfile(","isempty(","k","k1:","k2:","k3:","lastname:","len(s)","loadconfig()","m","m1","m2","m[\"key\"].(info)","m[k1]","m[k2]","m[k3]","magic”。","main()","make()","make([]int)","make([]int,","make(map[t1]t2)","make(map[t1]t2,","map","map[string]interface{})","map[t1]t2","map[t1]t2{","map[t1]t2{}","map初始化","map,这样可以在初始化时指定元素。","middlename:","multipli","myerror","myerror{}","new(t)","nil","nil。","nil,另一个不是),并且在不同的情况下(例如序列化),这两个切片的处理方式可能不同。","num","op","oper","or,","os.getwd()","panic","path.join(cwd,","popup....\");document.onclick","power","raw,","red","return","s","s1","s2","slice","slice。","slice申明变量避免使用","slice,这意味着,","sptr","sptr.name","string","struct","struct{}","struct初始化","subtract","sval","test","true,","true}","type","t{name:","user","user{","user{\"john\",","user{}","v1","v1,","v2","v2,","v3","v3,","var","var。","volum","want","want:","window.open(e.target.src,e.target.src)}img{cursor:pointer}","x","yaml.unmarshal(raw,","{","{add,","{give:","{subtract,","}","}{","不可避免时,init()","不管是全局切片还是局部切片,使用","不能满足这些要求的代码可能要在","个或更少的字段,则可以在测试表中省略字段名称。","仅将相关的声明放在一组。不要将不相关的声明放在一组。","优先使用","使用make()初始化,并指定容量。","使用字段名初始化结构体。","例外,如果是相似的一组变量,请使用","例外:在字段名提供有意义上下文的地方可以显示指定零值。如表驱动单元测试中的测试用例,即使字段为零值,限制指定零值,通过字段名可清晰地表达用例的含义。","例外:如果","例外:如果有","全局变量使用","全局变量申明使用","关键字并省略类型。","关键字申明,一般情况下其类型与表达式的类型一致,这种情况下可省略其类型。","凡事无绝对,某些情况下,init()","函数中被调用(或程序生命周期中的其他地方),或作为","函数之间的关系可能会使代码变得脆弱和容易出错;","函数本身的一部分。特别是打算给其他程序使用的库应该特别注意代码行为的完全确定性,","函数的顺序或副作用。虽然","函数而不是字面量,因为这样看起来更容易和申明区分开来。","切片","切片是有效的切片,但它不等于长度为","切片,代码会更加简洁清晰。","创建。","初始化","初始化结构指针变量使用字面量","初始化结构指针变量时,请使用&t{}代替new(t),可以与结构体初始化在代码风格上保持一致。","包含固定的元素列表,则使用字面量初始化","变量申明的位置尽量靠近使用的地方。","另外,分组使用的位置没有限制,我们也可以在函数内部使用它们。","可能更可取或是必要的:","和其他形式的确定性预计算的优化。","因此","在写入时会","基于当前目录","声明","声明到一组。","声明和初始化在视觉上很相似","声明和初始化在视觉上是不同的","声明结构,因为这样更加简洁,其各个字段值为字段类型对应的零值。","声明零值结构使用关键字","如果全局变量仅在单个函数内使用,则应该定义为局部变量。","如果在声明中省略了结构的所有字段,请使用","如果表达式的类型与所需的类型不完全匹配,请指定类型。","容量大小。","对于变量、常量的声明,相似的声明应该放在一组。类型的定义同样适用。","就近申明。","尽可能地在初始化时提供","尽可能避免使用","局部变量使用短变量声明形式(:=)。","已经明确了返回一个字符串类型,因此我们没有必要显式指定类型。","应该做到:","或者为了更好的可测试性","是一个有效的","是一个有效的长度为","显示指明","来代替。","由于","申明","申明变量","的","的切片(一个为","的非","相似的声明放在一组。","省略结构中的零值字段。","空切片使用","类型。","类型的实例,但是我们要","而不是执行“init","而非","虽然默认为","记住,虽然","读写安全","返回一个","避免使用","长度为","非零值","顺序是明确的,但代码可以更改,","(1)不能表示为单个赋值的复杂表达式;","(1)您不应明确返回长度为零的切片。应该返回nil","(1)无论程序环境或调用如何,行为都必须是完全确定的;","(2)可插入的钩子,如","(2)要检查切片是否为空,请始终使用","(2)避免依赖其他","(3)对","(3)避免访问或操作全局变量和环境状态,如机器信息、环境变量、工作目录、程序参数/输入等;","(3)零值切片(用var声明的切片)可立即使用,无需调用","(4)避免"],"第二篇:代码风格/6.错误处理.html":["!=","!ok","\",","\"b\",","\"c\"}","\"fmt\"","\"img\"","\"log\"","\"time\"","%s\",","%v\",","%v\",err))","&&","(","(error,","(int,",")","*","+0x48","+0x65","...","//","//手动抛出","/users/dablelv/work/code/test/main.go:14","/users/dablelv/work/code/test/main.go:16","0","05","10:48:42","15:47:37","2022","2022/03/27","22","3","44","6","6.错误处理",":=","=","==","===","======begin","[4]","[]string)","[]string{\"a\",","[running]:","_","```go","argument","arr","arr[4])","bad","code","comma","console.log(\"plugin","continue,","creat","defer","do()","e.target.tagnam","err","err)","err.error())","error","error\")","error)","error:","errors.new(\"an","errors.new(fmt.sprintf(\"modul","error。","etc.","except","exception\")","exe.run()","exec","f()","fail","failures)的主要根源。如果发生错误,该函数应该返回错误,让调用方决定如何处理它。","fast","fmt.errorf(\"modul","fmt.errorf(\"run","fmt.errorf(\"som","fmt.errorf。","fmt.fprintln(os.stderr,","fmt.println(\"======aft","fmt.println(\"======begin","fmt.println(err)","func","func()","function(e){","geton","getone()","gitbook该文章修订时间:","go","good","goroutin","goroutine,必须在入口处捕获","handl","i.(string)","import","index","int)","len(args)","length","log","log.fat","log.fatalf","log.println(\"exec","log.println(\"hello,\",","log.println(debug.stack())","main","main()","main.main","main.main.func2()","nil","nil,但是满足其他逻辑进入到","normal","ok","ok。","os.exit(1)","out","packag","panic","panic(\"an","panic(\"nil","panic(44)","panic/recov","panic:","panic。","panic。因为","panic。因此,请始终使用","panic。每个自行启动的","panic,因为这样可以记录错误的同时结束程序,方便排查问题。","panic,并打印详细堆栈信息或进行其它处理。","panic,建议使用","pointer","popup....\");document.onclick","power","rang","record","recov","recover();","recover。","required\")","return","run(arg","run(os.args[1:])","run(os.args[1:]);","runtim","slice","someth","t","t,","time.second)","time.sleep(1","us","var","window.open(e.target.src,e.target.src)}img{cursor:pointer}","work======","work======\")","x","x,","xx.close()可以不用显式处理。","xxx:","y","y,","{","||","}","}()","一个可能引发的问题就是","下面是一个反面示例,其他","不是错误处理的合适策略,仅当发生不可恢复的异常(如","不要包装系统调用错误,并给出一些没意义的附加信息。","不要随便","中使用,一般用来捕获程序运行期间发生异常抛出的","中无法捕获当前","中调用才会生效。","中需要使用","优雅地处理错误。","作为函数的值返回,必须对","作为函数返回值且有多个返回值的时候,error","使用","值将引发","包中使用","包中程序初始化是一个例外,如程序启动时,文件无法打开或数据库无法连接导致程序无法正常运行可使用","原则。","只有在","只能在当前","可显示使用空标识符(下划线)忽略。","在","在业务逻辑处理中禁止使用","块内,读取","处理","处理panic","处理recov","处理类型断言error","如果","如果不关心是否成功,可显示忽略","如果为","如果出现失败应该立即返回error,如果继续处理,则属于特殊情况需要添加注释。","如果函数返回值需用于初始化其他变量,则采用下面的方式。","对于其它的包,可导出的接口也不能有","式","式。如果不关心是否成功,ok","引用)时,才可以","当y与err都为空时,函数的调用者会出现错误的调用逻辑","必须在","必须是最后一个参数。","或","或程序主动抛出的","捕获最晚要在当前","是级联失败(cascad","显示处理","最顶层将其捕获,在其他","来取代","模拟","生成带参数的","用于捕获","的","的异常,禁止滥用","程序将意外终止并输出:","类型断言","类型断言使用","类型断言的单个返回值形式如果断言失败将产生","结束程序而不是","被捕获。","越界运行时抛出的","运行结果:","进行处理,或使用空白标识符忽略。对于defer","采用独立的错误流进行处理。","错误判断独立处理,不与其他变量组合判断。"],"第二篇:代码风格/7.注释.html":["\"","\"img\"","%s\",","&&","(","(/*",")","*/","*/)","*/,","*attrmodel","*common.context)","+","...","....","/*","//","05","1","15:50:17","1。","2022","22","2。","3。","4。","7.注释","=","===","aliases)都必须有注释说明。","bad","basic","bool","bool)","c","code","config\"","console.log(\"plugin","const","constant","data","definition)和类型别名(typ","demograph","done","driven","e.target.tagnam","email","faketim","flagconfigfil","flagconfigfile1","flagconfigfile2","flagconfigfile3","flagconfigfile4","fmt.sprintf(\"fak","fullnam","func","func(usernam","function(e){","functions.","future.","gener","gitbook该文章修订时间:","go","good","html.","implement","int","iota","isloc","islocal,","local","math","mathemat","mayb","name","newattrmodel(ctx","newtattrmodel","output","packag","popup....\");document.onclick","power","printinfo(\"foo\",","printinfo(nam","provid","region","region,","return","review","statu","status)","status=","statusdon","statusinprogress","statusreadi","storageclass","string","string)","string,","struct","such","templat","textual","time.tim","todo","true","true)","true,","type","unknownregion","user","username)","var","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","不要用注释删除代码。","中英文之间应该有空格。","函数信息描述\"。","函数名","函数注释","函数调用中意义不明确的实参可能会损害代码可读性。当参数名称的含义不明显时,请为参数添加","前都应该被删除,除非添加注释讲解为什么不删除,","包信息描述。","包名","包如果有多个","包注释","变量名","变量和常量注释","后面要有空格。","命令行参数。","命名清晰的地方,不要添加无意义的注释。类型注释","块注释即在代码块前给出一个总的说明,然后每行变量或常量的末尾给出详细注释,这样看起来更加简洁。","大块变量或常量定义时的注释方式。","存储类型","对于上面的示例代码,还有一种更好的处理方式是将上面的","导出与非导出接口均需要有注释。","导出的函数和方法(结构体或接口下的函数称为方法)都必须有注释。","并且标明后续处理建议(如删除计划)。","必要情况下字段给出注释。","或者","所有注释掉的代码在提交","接口注释","描述\"。","描述\",斜线后面紧跟一个空格。","文件中(一般是和包同名的文件)即可。","文件,只需要出现在一个","族群","是属性数据层操作类的工厂方法","标准库时间的类型别名","样式注释","格式为//","格式为:\"//","每个包都应该有一个包注释。","每个需要导出的变量和常量都必须有注释说明。","每个需要导出的类型定义(type","每个需要导出的自定义结构体或者接口都必须有注释说明。","注意,如果方法的接收器为不可导出类型,可以不注释,但需要质疑该方法可导出的必要性。","注释对变量和常量进行简要介绍,放在常量或变量定义的前一行。独行注释格式为:\"//","注释对结构进行简要介绍,放在结构体定义的前一行。格式为:\"//","注释描述函数或方法功能、调用方等信息。格式为:\"//","注释结束添加点或句号,参考标准库源码注释。","特殊实现需要注释。","用户结构定义了用户基础信息","程序中每一个被导出的(大写的)名字,都应该有一个文档注释。","类型名","类型换成自定义类型。将来,该参数可以支持不仅仅局限于两个状态(true/false)。","结构体信息描述\"。","结构体内的可导出成员变量名,如果是个生僻词或意义不明确的词,必须要单独给出注释,放在成员变量的前一行或同一行的末尾。","结构体名","结构体注释","解析函数应该注明解析字符串的范例,并明确不能处理的异常情况。","该注释对类型进行简要介绍,放在定义的前一行。","返回指定用户名的完整名称。","通用","通用包注释函数注释结构体注释变量和常量注释类型注释接口注释在编码阶段同步写好类型、变量、函数、包注释,注释可以通过godoc导出生成文档。","避免参数语义不明确。","配置文件的命令行参数名","配置文件的命令行参数名。","需要描述谁,在什么场景下,如何使用接口。","非导出的函数,如果比较简单,不需要注释。"],"第二篇:代码风格/8.命名.html":["\"/api/v3/projects/%s/merge_request/%s/commits\"","\"1.0.0\"","\"bar\")","\"foo\",","\"http\"","\"https\"","\"https://git.code.oa.com\"","\"img\"","\"john\",","\"john@example.com\",","%q","%q\",","&&","(","(e","(f","(format","(https://golang.org/ref/spec#predeclared_identifiers)。","(https://rakyll.org/styl","(n","(string","(system",")","*notfounderror)","*resolveerror)","...","//","05","15:54:25","20","2022","22","8.命名",":=","=","===",">","[]byte)","[]data){}","[predeclar","[style","allow","api","apiclient、repoid、userid;","apiclient;","append","appvers","array","bad","blog","bool","broken\")","byte","c","c,","call)","cap","car","classesuid","close","common","complex","complex128","complex64","console.log(\"plugin","const","constants:","context.context,","conversion)","copi","customer、wikipage、account、addressparser,它不应是动词。","data","dataetl(ctx","data、info","delet","e.file)","e.path)","e.target.tagnam","echart","email","email:","er","err","errbrokenlink","errcouldnotopen","errnotfound","error","error()","error)","errormessag","errors.a","errors.new(\"could","errors.new(\"link","errors.new(\"not","error。","err。","etldata(ctx","f.err","f.error","f.str","f.string","fals","file","filterhandlermap","float32","float64","fmt","fmt.sprintf(\"/api/v3/projects/%s/merge_request/%s/commits\",","fmt.sprintf(\"fil","fmt.sprintf(\"resolv","foo","foo)","found\")","found\",","func","function(e){","functions:","getlinecount()","getmrcommitsuri()","gitbook该文章修订时间:","go","goechart","good","guidelin","handleerrormessage(error","handleerrormessage(msg","has,is,can","helper","http","i/o)","identifiers]","imag","info","int","int,","int16","int32","int64","int8","interfac","iota","languag","len","linecount","linecount,","make","map","md5","me,this,self","mrcommitsuri","msg","name","net/url","new","nil","notfounderror","open\")","optohandl","packag","packages/)。","packages]","panic","paniclinesparsing(){}","parsepaniclines(){}","path","popup....\");document.onclick","power","print","println","rang","read","read(p","reader","reader,writer。","real","recov","recover()","resolveerror","return","rune","scheme","slice","sliceindex","specif","start","start([]byte)","stop","stop()","str","strconv","string","string()","string)","struct","syscal","tgithost","to/for。","true","type","types:","u","uid","uidarray","uidslic","uidsliceslic","uint","uint16","uint32","uint64","uint8","uintptr","urlarray","urlarray;","user","username:","user{","util","util、common、misc、global。packag","value:","var","verifyflow)","vet之类的工具会正确地指出这些和其他情况下的隐式问题。","window.open(e.target.src,e.target.src)}img{cursor:pointer}","xxx.pb.go,gotest","xxx_test.go","zero","{","}","一起使用。","三个以上函数的接口名,类似于结构体名。","不用复数。如","不要使用2/4来表达英文","不要使用大而全的无意义包名。","不要用宽泛、无意义的名字,如:","不要轻易使用别名。","两个函数的接口名综合两个函数名。","二维切片或数组。","代码生成工具自动生成的代码可排除此规则(如协议生成文件","传输协议。","但我们仍然可以在的包内将其和","作为后缀,如","作用域内隐式覆盖","作用域较大的名字(全局变量),不要使用缩写,要有明确的意义。","作用域较小的名字(局部变量/函数参数),尽量使用简短的名字。","作用域隐藏内置","保持","全局量中不要包含格式化字符,否则必然违反就近原则。","其他情况都应该使用该名词原有的写法,如","函数名必须遵循驼峰式,首字母根据访问控制决定使用大写或小写。","函数命名","函数应该以动词开头。","加密传输协议","包名应该为小写单词,不要使用下划线或者混合大小写,使用多级目录来划分层级。","包名谨慎使用缩写。当缩写是程序员广泛熟知的词时,可以使用缩写。例如:","包命名","匹配。","单个函数的接口名以","只有一个源文件的包,包名应该和文件名保持一致。","名字应该追求清晰且越来越收敛,符合‘单一职责’原则,而不是像common一样,什么都能往里面放,越来越膨胀,让依赖关系变得复杂,不利于阅读、复用、重构。注意,xxx/utils/encryption这样的包名是允许的。","命名不能采用","命名规则基本保持和结构体命名规则一致。","和","在使用预先分配的标识符时编译器不会报告错误,但是诸如go","在视觉上是相似的","多行初始化。","多行定义。","好。","好,sliceindex","如","如无必要,不要起和包相同的名字。","如果变量为私有,且特有名词为首个单词,则使用小写,如","如果是枚举类型的常量,需要先创建相应类型。","字符串的搜索存在二义性","字节数组读取接口。","对于存储为全局变量的错误值,根据是否导出,使用前缀","对于自定义错误类型,请改用后缀","导出以下两个错误,以便此包的用户可以将它们与errors.i","导出全局变量。","导出全局常量。","小写,如果有多个单词使用连字符分隔。","小汽车结构申明。","尽量不要用拼音命名。","尽量采取有意义、简短的包名,尽量不要和标准库冲突。","工具自动生成文件","常量命名","或","或者","接口命名","接收器的名称在函数超过","推荐以类名第一个英文首字母的小写作为接收器的命名。","文件名应该采用小写,并且使用下划线分割各个单词。","文件命名","方法接收器命名","明文传输协议","更多可参考","未导出全局变量。","未导出全局常量。","概述了几个内置的,不应在","比","比如多个班级下的学生id。","特有名词时,需遵循以下规则:","现在是明确的","的一部分。","的名字和目录一致。","私有量和局部量规范一致,均以小写字母开头。","等单词开头。","简单明了的包命名,如:time、list、http。","类型,则名称应以","结构体名应该是名词或名词短语,如","结构体命名","结构体的定义和初始化格式采用多行。","缩略语要么全小写,要么全大写。","而不是net/urls。","若量类型为","虽然这些使用内置标识符的自定义字段可以编译通过,但对","行的时候不要用单字符。","要好。","要好,i","要比","详细的专有名词列表可参考这里。","语言规范","读取整个给定的字节数据并返回读取的长度","这个错误没有被导出,因为我们不想让它成为公共","这个错误没有被导出,因为我们不想让它成为我们公共","这个错误被导出,以便这个包的用户可以将它与","这类意义太宽泛的结构体名。","这类易混淆名称。","进行匹配。","通用","通用规则","通用规则项目命名包命名文件命名函数命名结构体命名接口命名量命名通用常量命名方法接收器命名错误命名避免使用内置名称命名是代码规范中很重要的一部分,统一的命名规范有利于提高代码的可读性,好的命名仅仅通过命名就可以获取到足够多的信息。","避免使用","避免使用内置名称","采用有意义、简短的文件名。","采用驼峰命名方式,首字母根据访问控制采用大写或者小写。","里面的下划线)。","量名不应该以类型作为前缀/后缀。","量名应该是名词,进行时和过去式可以做形容词,成为量名的一部分。","量名遵循驼峰式,根据是否导出决定首字母大小写。","量命名","错误命名","错误示例:urlarray,应该写成","非缩略语则应该使用驼峰命名。","项目中使用的标识符","项目命名"],"第二篇:代码风格/9.流程控制.html":["!=","!allowuserlogin","\"\"","\"a\"","\"b\"","\"darwin\":","\"img\"","\"linux\":","&&","+=","...","//","0","05","1","10","100","16:56:50","2,","2022","22","3,","4,","5}","9.流程控制",":=",";","=","==","===","[]int{1,","_,","```go","allowuserlogin","arg","args[0]","array","b","b,","bad","bar","bool","case","cfg.decode(data)","cfg.decode(data);","codeusing(f,","console.log(\"plugin","d)","d,","data,","default:","default。","defer","delete(m,","e.target.tagnam","else。","err","error","errorcod","errors.new(\"miss","f,","f.close","f.close()","f.stat()","fals","file\")","file.chmod(0664)","file.chmod(0664);","fmt.printf(\"%s.\\n\",","fmt.println(\"linux.\")","fmt.println(\"mac","fmt.println(&v)","fmt.println(cfg)","foo","foo()","foo(bar","foo(key","freebsd,","func","function(e){","gitbook该文章修订时间:","good","goto","goto,其他框架或底层源码推荐尽量不用。","handl","ifforrangeswitchreturngoto程序退出方式if","if。","int","int)","ioutil.readall(f)","ioutil.readfile(name)","ioutil.readfile(name);","key","key)","key.expired()","len(args)","len(str)","log.fat","log.fatal(\"miss","log.fatal(err)","m","main","main()","name","nil","openbsd,","os","os\")","os)","os.args[1:]","os.open(name)","packag","pathkey","pathkey:","plan9,","popup....\");document.onclick","power","rang","return","return。","run()","run();","runtime.goos;","someth","str","string)","sum","switch","true","urlkey","urlkey:","v","var","window.open(e.target.src,e.target.src)}img{cursor:pointer}","windows...","{","}","一旦有错误发生,马上返回。","不必要的","不要使用双重否定。","业务代码禁止使用","中退出程序且只退出一次。","之外使用函数调用的结果,则不应尝试缩小范围。","仅在","使用","使用os.exit或者log.fatal*退出程序,而不是panic。","使用了","函数中调用os.exit或log.fatal*且只调用一次。如果有多个错误场景停止程序执行,请将该逻辑放在单独的函数并从中返回错误。","则需要以","判断字符串是否为空,这样更加直观。","判断条件较为复杂时,考虑封装成函数。","又如","在","多个相似","如果只需要第一项(key),就丢弃第二项(value)。","如果只需要第二项,则把第一项置为空标识符(下划线)。","如果在","如果我们调用","如果需要在","对两个值进行判断时,被比较的值放在左边。","对于","将不会被执行","尽早","当程序的多个函数具有退出能力时会存在一些问题:","循环变量的地址不要存储。","循环变量的地址指向的是同一个变量,我们可以通过赋值给一个同名的变量,通过变量逃逸,来达到取不同地址的目的。","必须要有","打印的是不同的地址","打印的是相同的地址","把简单的逻辑判断放前面,复杂的逻辑判断放后面。","接受初始化语句,尽可能缩小变量作用域。","替换。","最小化变量作用域。","用","的两个分支中都设置变量,则可以将其替换为单个","程序退出方式","类型的变量,应直接进行真假判断。","结束。","这会精简main()函数,并将所有关键业务逻辑放入一个单独的、可测试的函数中。","通常可以简写为","队列里的函数调用,这增加了跳过重要清理任务的风险。","需要有一个缺省处理逻辑","(1)不明显的控制流:任何函数都可以退出程序,因此很难对控制流进行推理;","(2)难以测试:退出程序的函数也将退出调用它的测试,这使得函数很难测试,并跳过了尚未被运行的其他代码;","(3)跳过清理:当函数退出程序时,会跳过已经进入"],"第二篇:代码风格/10.函数.html":["!=","\"application/json\"","\"application/json\",","\"img\"","%v\",","&&","&something{}","(*node,","([]userinfo,","(f","(lat,","(map[uint64]userinfo,","(n","(s","*","*bookingservice)","*foo)","*node","*node)","*someth","*something)","+1,一个","...","...string)","...uint64)","//","0","05","1","1)","10.函数","16:00:37","1,不要使用魔法数字。","2","2022","22","3","3.14","5",":=","=","==","===",">=2","[]int)","[]string)","_,","addarea","addarea(area","append(s.areas,","area","area)","bad","bool","bytes.newbuffer([]byte(req)))","calccost(n","calccost(s.weights)","close()","console.log(\"plugin","const","const,","continu","cost()","data","db.query(v)","defer","defer。","e.target.tagnam","err","error","error)","fals","field","fields,","fields.close()","filtersomething(valu","float64","float64)","float64,","foo(getids())","foo(ids)","func","func()","function(e){","getarea(r","getids()","getlength(r","getuserinfobatch","getuserinfobatch(uid","gitbook该文章修订时间:","good","hasarea","hasarea(area","http.get(url)","http.post(url,","id","inccounter()","inccountern()","info","info,","int","int。","iscontinue,","jsoncontenttyp","locat","location()","log.printf(\"invalid","long","map。","map,slice,chan,interfac","metrics.incrcounter(cntcachemisskey,","modifyuserinfo(user)","new(order.areaorder)","newsomething()","nil","p.processunity()","parent1","parent1()","parent2","parent2()","pi","popup....\");document.onclick","power","process(v)","r","rang","resp,","resp.body.close()","ret","ret,","retcod","return","rsp,","s.area","s.areaorders[area]","s.hasarea(area)","s.lock()","s.unlock()","slice","someth","split()","splitn()。","sql","srverr.errareaconflict","stop()","string)","struct,","struct{","true","type","v","v)","v.call();","v.f1","v.send()","v:","valu","var的后面。","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","{...}","}","}()","不存在。如果不允许部分失败,使用","不要传递指针。","不要返回多个用于控制流程的状态。","不要这样使用","个,如果超过,请封装成新的类型。","个,或有相同类型的返回值,或者从上下文中不清楚返回值的含义,使用命名返回,其它情况不建议使用命名返回。","中执行。","从函数名开始算第一层,当函数的嵌套深度超过4层,往往会导致圈复杂度过高,函数变得复杂不可读,我们可以通过拆分函数的方式来减少嵌套深度。","代码也可以优先处理条件不满足或错误的情况,尽早返回或继续循环来减少嵌套。","入参&返回值成员函数局部变量defer减少嵌套(圈复杂度)魔法字面量函数分组与顺序入参&返回值","入参和返回值个数均不能超过","入参和返回值均以小写字母开头。","入参和返回值顺序根据关联性排在一起。","减少嵌套(圈复杂度)","函数分组与顺序","函数应按粗略的调用顺序排序。","函数应该放在","函数进行资源的释放。","判断是否有错误发生之后,再","单函数圈复杂度最大值","即可。可参考标准库包的","同一文件中的函数应按接收者分组。","和","和一个","圆周率","如下面这个函数的第二个参数是没有必要的,大部分时候都是","如果传入的参数通常是固定的,考虑通过实现多个函数实现默认参数。","如果字符串字面量出现","如果局部变量仅被使用一次,且不能起到解释逻辑的作用时,应该删除局部变量,直接内联。","如果操作成功,再","如果方法不使用类的成员,应该实现为非成员函数。","如果非成员函数要使用类的多个属性时,应该实现为成员函数。","导出的函数应该放在非导出函数前面","尽量用","尽量用值传递,非指针传递。","局部变量","嵌套深度不能超过4层。","应当使用如下的方式:","建议调整为这样:","当存在资源管理时,应紧跟","成员函数","或者","批量查询函数返回值使用","批量获取用户信息(允许部分失败)。","批量获取用户信息(需全部成功)。","按照上面的规则,下面给出好坏文件内容布局示例。","有时后我们需要根据多个","条件不满足或出现错误应尽早返回。","构造函数应该放在其他函数之前,如newxyz()/newxyz()。","查询对应的值,可能会出现部分失败的情况,如某个","次,则禁止使用,用一个有名称的常量代替,可读性更好。","正常逻辑不应该在","注入","添加成功或出错。","由于函数是按接收者分组的,因此普通工具函数应在文件末尾出现。","示例,实际不要这么查询,防止","禁止在循环中使用","类型为","继续使用","继续使用field","表示执行是否成功,而不是用","表示执行状态的返回值应该放在最后。","返回值超过","返回值,如果允许部分失败使用","还是","释放资源。","除了","魔法字面量"],"第二篇:代码风格/11.单元测试.html":["\"\",","\"1\",","\"192.0.2.0\",","\"192.0.2.0:8000\",","\"192.0.2.0:http\",","\"1:8\",","\"8\",","\"8000\",","\":8000\",","\"http\",","\"img\"","&&","*testing.t)","//","01","05","11.单元测试","2","2022","21:44:06",":=","=","===","[]struct{","_,","assert.equal(t,","bad","console.log(\"plugin","e.target.tagnam","err","err)","example_test.go。","func","func(t","function(e){","gitbook该文章修订时间:","give","give:","good","host)","host,","import","net.splithostport(\"192.0.2.0:8000\")","net.splithostport(\"192.0.2.0:http\")","net.splithostport(\"1:8\")","net.splithostport(\":8000\")","net.splithostport(tt.give)","popup....\");document.onclick","port)","port,","power","rang","require.noerror(t,","string","t.run(tt.give,","test","testexample。","testsplithostport(t","tt","tt.wanthost,","tt.wantport,","wanthost","wanthost:","wantport","wantport:","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","})","},","}{","使用表驱动的方式编写用例,代码看上去会更简洁。","倍(1600","分组等其他规范细节和普通文件保持一致。","单元测试文件名命名规范为","单测文件行数限制是普通文件的","开头,例如","每个重要的可导出函数都要首先编写测试用例,测试用例和正规代码一起提交方便进行回归测试。","测试用例的函数名称必须以","由于单测文件内的函数都是不对外的,所有可导出函数可以没有注释,但是结构体定义时尽量不要导出。","行)。单测函数行数限制也是普通函数的2倍(160行)。圈复杂度、列数限制、","表驱动测试."],"第二篇:代码风格/12.杂项.html":["\"img\"","&&","05","1.基本类型偏执通用场景结构体2.单一职责包&文件函数3.goroutine4.应用服务5.常用工具1.基本类型偏执","12.杂项","17:03:00","2.单一职责","2022","22","3.goroutin","4.应用服务","5.常用工具","=","===","console.log(\"plugin","e.target.tagnam","errgroup.group。","function(e){","gitbook该文章修订时间:","go","gofmt","goimport","golint","goroutin","goroutine一定要梳理清楚","int。","javascript","jslint","panic","popup....\");document.onclick","power","readme.md","recover。","recover,很容易发生","return","rpc、db","struct","tag","time.second,不要使用","vet","window.open(e.target.src,e.target.src)}img{cursor:pointer}","一个函数内不应该混杂多个实现细节,需要将独立的逻辑封装成函数。","一个函数只负责一个职责。","一个文件中出现多个结构体时,需要注意观察是否有重复的成员。","一个结构体中,成员较多,且多个成员有明显关联关系,需要封装新的结构体。","一次循环尽量只做一件事,不用担心多次循环。","中的","代码与官方推荐的格式保持一致,于是所有格式有关问题,都以","出现状态/类型等字眼时,需要使用枚举。","函数","包&文件","同一层级的逻辑细节不要拆分。","启动的","因为其他","复杂的执行/错误信息,需要定义结构体保存。","如果要开启多个线程执行一组动作,并且要等待全部完成后继续后续逻辑,考虑使用","导出的函数/变量的职责必须与包&文件职责高度一致。","导致整个进程退出。","工具可以帮我们静态分析我们的源码存在的各种问题,例如多余的代码,提前","应用服务建议有","应用服务必须要有接口测试","意义不明的成员变量,应该定义类型描述作用。","抛出的异常。如果启动的","时间类型尽量使用内置定义,如","是否符合标准等。编译前先执行代码静态分析。","是无法捕当前","最好有","有时候你会看到某个类里有很多基本类型字段,但是你隐约地能区分出某些字段好像应该在一起,如手机号和带区号的电话号码、描述某个日期范围的开始日期和结束日期,它们应该有一个真实的载体,如联系方式类和时间范围类)","本身在代码规范方面做了很多努力,很多限制都是语法要求,例如左大括号不换行,引用的包或者定义的变量不使用会报错。此外","没有","的","的基础上增加了自动删除和引入包。","的工具,主要功能就是检测代码中不规范的地方。","的结果为准。","的退出机制,防止泄漏。","的逻辑,","相关操作需要独立封装","结构体","自动格式化代码,保证所有的","解决,","解析、校验、计算的逻辑应该进行分离","说明文档,介绍服务功能、使用方法、部署时的限制与要求、基础环境依赖等","读、写、计算的逻辑应该进行分离","还是提供了很多好用的工具帮助我们进行代码的规范。","通用场景","遇到","配置文件的读取,和对象初始化应该分开,不要让对象自己根据配置文件初始化,保证构造函数足够简单","除了包的主逻辑文件中内容允许导出,包内的辅助函数都应该是非导出的。","需要判断当前文件是否应该归属于当前包,主要以职责进行判断。",",vet",",大部分的格式问题可以通过",",此工具在",",类似",",而不应全部零散放在一个大类型中。"],"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":["\"img\"","&&","*_type","*itab","...","//","05","08","1.不需要指向","16","19:22:09","2022","=","===","_type","bad","bar(&foo)","bar(foo)","bar(i","console.log(\"plugin","data","e.target.tagnam","efac","fmt.println(unsafe.sizeof(foo))","foo","foo{...}","func","function(e){","gitbook该文章修订时间:","go","good","ifac","interfac","interface{}","interface{})","map、slice、channel","popup....\");document.onclick","power","runtim","string","struct","t","tab","type","unsafe.point","var","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","一种是不含任何方法的空接口runtime.eface:","一种是带有一组方法的接口runtime.iface:","为什么可以这样,因为接口实质上在底层用两个字段表示:","具体可以看下","包两种接口类型的定义。","当然,凡事无绝对。如果需要修改接口变量本身,那么应该使用指向接口变量的指针,当然你必须清楚自己在干什么。","我们几乎不需要使用指向接口的指针,应该将接口直接赋值给接口,这样在传递过程中,实质上传递的底层数据仍然是指针,即不存在值拷贝的情况。","我们可以看下接口变量的内存宽度。","源码","的底层结构后,我们应该知道在传递过程中一般也不需要使用指向它们的指针。","的指针","类似地,在了解","(1)一个指向某些特定类型信息的指针;","(2)一个指向具体数据的指针。如果存储的数据是指针,则直接存储。如果存储的数据是一个值,则存储指向该值的指针。"],"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":["\"img\"","&&","(*handler)(nil)","(*handler)(nil)将无法编译通过。","(h","*handler)","*handler)、切片和映射是","*http.request)","*zap.logg","...","//","05","08","19:22:09","2.编译期验证","2022","=","===","_","api","bad","console.log(\"plugin","e.target.tagnam","func","function(e){","gitbook该文章修订时间:","good","h","handler","http.handler","http.responsewriter,","interfac","log","loghandl","loghandler)","loghandler{}","nil;对于结构类型是空结构。","popup....\");document.onclick","power","r","servehttp(w","struct","type","var","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","上面这三条是编译器对接口的检查机制,","合理性","在编译时验证接口的合理性,这包括:","如果*handler与http.handler的接口不匹配,那么语句var","实现了接口;","对于指针类型(如","赋值的右边应该是断言类型的零值。","错误地使用接口会在编译期报错。所以可以利用这个机制让部分问题在编译期暴露。","(1)导出类型的部分","(2)导出或非导出类型实现了接口且属于某类型的一部分(匿名嵌套);","(3)任何其他情况都违反接口合理性检查,终止编译并通知用户。"],"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":["\"img\"","#","&&","(bucket","(can","(d","(s","(use","*","*[]*bmap","*bmap","*driver)","*mapextra","*stats)","...","//","05","08","19:22:09","2022","2^b","3.在边界处拷贝",":=","=","==","===","[]trip)","alive,","allow","approxim","array","avoid","b","ba","bad","bmap.overflow","both","bucket","bucket.","buckets.","buckets;","builtin)","cap","cell","cmd/compile/internal/reflectdata/reflect.go.","compiler'","console.log(\"plugin","contain","copy(d.trips,","count","count==0.","counter","d.settrips(trips)","d.trip","defer","definition.","detail","e.target.tagnam","elem","encod","evacu","evacuated)","extra","field","first","flag","format","free","func","function(e){","gitbook该文章修订时间:","go","good","grow","half","hash","hash0","header","hiter.","hmap","hmap.buckets.","hmap.extra.oldoverflow.","hmap.extra.overflow","hmap.oldbuckets.","hold","however,","incrnoverflow","indirect","inline,","int","items)","k,","keep","key","len","len()","len(s.counters))","len(trips))","less","live","loadfactor","log_2","make","make([]trip,","make(map[string]int,","map","map.","map[string]int","mapextra","maps.","mark","mu","nevacu","nextoverflow","nil","non","note:","noverflow","number","oldbucket","oldoverflow","option","order","overflow","pointer","pointer.","pointers.","popup....\");document.onclick","power","present","previou","progress","rang","result","result[k]","return","runtime.hmap:","runtime.slice:","s.counter","s.mu.lock()","s.mu.unlock()","scan","see","seed","settrips(trip","size","size,","slice","snapshot","snapshot()","src/runtime/map.go","src/runtime/slice.go","stat","stats.snapshot()","stay","store","struct","such","sure","sync","sync.mutex","trip","trips)","trips[0]","trips[0],但不会影响","type","uint16","uint32","uint8","uintptr","unsafe.point","up","us","v","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","不再受互斥锁保护,可能会引发并发读写的错误","作为函数参数传入时,如果您存储了对它们的引用,则用户可以对其进行修改。","你是要修改","包含了指向底层数据的指针,因此在需要复制它们时要特别注意。","吗?","和","在","在接收","在返回","底层核心数据结构","我们可以找到","我们可以找到切片的底层数据结构","或","时,同样的,请注意用户对暴露内部状态的","时,请记住当","源码文件","现在是一个拷贝","的修改。","返回当前状态。","这里我们修改"],"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":["\"img\"","&&","(",")","+","//","0","05","08","1","19:22:09","2022","4.枚举从","=","===","_","add","add=0,","add=1,","assign","bad","blank","bytes","console.log(\"plugin","const","e.target.tagnam","enum","first","float64","function(e){","gitbook该文章修订时间:","go","good","identifi","ignor","int","iota","kb","logoutput","logtofil","logtofile=1,","logtoremot","logtoremote=2","logtostdout","logtostdout=0,","multipli","multiply=2","multiply=3","oper","popup....\");document.onclick","power","subtract","subtract=1,","subtract=2,","type","valu","window.open(e.target.src,e.target.src)}img{cursor:pointer}","并没有关键字","开始","开始。","开始,如果需要使第一个值为有意义的值,我们应该从","当然,凡事无绝对。如果第一个枚举值为零是有意义的,如当零值是理想的默认行为时。","来定义枚举类型,引入枚举的标准方法是声明一个自定义类型和一个使用了自增器","由于第一个值从","的","组来表示枚举值。","表示连续的非类型化整数常量,它的值是对应常量的下标(从零开始),它可用于构造一组相关常数:","预先声明的标识符"],"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":["\"img\"","&&","&s1{}","&s2{}","(s","*s)","*s2)","//","05","08","1.方法接收器为值和指针的区别","19:22:09","2022",":=","=","===","address","console.log(\"plugin","data","e.target.tagnam","effect","f","f()","func","function(e){","gitbook该文章修订时间:","go","interfac","map[int]*s{1:","map[int]s{1:","pointer","popup....\");document.onclick","power","read()","read。","read,也可以调用","return","s","s)","s.data","s1","s1)","s1ptr","s1val","s1{}","s2","s2ptr","s2val","s2{}","sptr","sptrs[1].read()","sptrs[1].write(\"test\")","str","string","string)","struct","struct{}","sval","svals[1]","svals[1].read()","svals[1].write(\"test\")","type","valu","var","vs.","window.open(e.target.src,e.target.src)}img{cursor:pointer}","write(str","write。","{","{\"a\"}}","{}","}","下面代码无法通过编译,因为","中一节","从前文可知,可取址的值可以调用接收器为指针的方法,但这里为何不能将值","你只能通过值调用","使用值接收器的方法既可以通过值调用,也可以通过指针调用。带指针接收器的方法只能通过指针或","做了说明,因为接收器为指针的方法会修改接受器,为了避免产生这种错误的行为,便禁止将值赋给和指针接收器方法集匹配的接口。","取址。","呢?","在","指针既可以调用","接收器为值和指针的方法在调用方式上是有区别的。","方法中没有使用值接收器。","是一个值,而","的","类似的,使用值接收器和指针接收器来实现接口,在判断与接口是否匹配时,也存在一定的区别。","编译不通过,因为无法对","调用。","赋给接口"],"第三篇:功能设计/2.函数/2.使用defer释放资源.html":["\"img\"","&&","//","05","08","19:22:09","2.使用","2022","=","===","bad","console.log(\"plugin","defer","defer。","e.target.tagnam","function(e){","gitbook该文章修订时间:","p.count","p.lock()","popup....\");document.onclick","power","return","unlock","window.open(e.target.src,e.target.src)}img{cursor:pointer}","使用","分支时,很容易遗忘","当有多个","提升可读性是值得的,因为使用它们的成本微不足道。尤其适用于那些不仅仅是简单内存访问的较大方法,在这些方法中其他计算的资源消耗远超过","的开销非常小,只有在您可以证明函数执行时间处于纳秒级的程度时,才应避免这样做。使用","释放资源","释放资源,诸如文件和锁。"],"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":["!=","\"img\"","%w\",","&&","'defer'","'for'","*db.row)","...","//","05","08","1.将","19:22:09","2.将","2022","3.不要在",":=","=","===","`fields`","bad","call","console.log(\"plugin","db.query(...)","db.query(.....)","defer","defer,因为这可能会导致资源泄漏(poss","defer,因为释放资源不会尽可能早地发生(在每次迭代结束时),只有在","defer,资源将在不需要时被立即释放。","e.target.tagnam","err","err)","error","error:","fields,","fields.close()","fmt.errorf(\"db.queri","foo(r","foo(rs);","func","func()","function(e){","gitbook该文章修订时间:","handl","leak,","loop)。","nil","popup....\");document.onclick","power","resourc","return","rows.next()","someth","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","}()","不是基于代码块的,而是基于函数的。你在循环中分配资源,那么不应该简单地使用","函数才会被执行。这带来的后果就是,如果迭代次数过多,那么可能导致资源长时间得不到释放,造成泄漏。","如果有一个类似上面分配资源的代码段,我们应该将其包裹在一个函数中(匿名函数或有名函数)。在该函数中,使用","尽可能地避免在","循环中使用","放在匿名函数中","放在有名函数中然后调用之","语句之后(所有迭代之后),即所在函数结束时,defer","调用有名函数"],"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":["\"img\"","&&","&smap{","(m","*smap","*smap)","//","05","08","1.零值","19:22:09","2022",":=","=","===","api,但又没有明确说明,既导致了模糊的文档,又泄露了","bad","console.log(\"plugin","data","data:","defer","e.target.tagnam","func","function(e){","get(k","gitbook该文章修订时间:","good","m.data[k]","m.lock()","m.mutex.lock()","m.mutex.unlock()","m.unlock()","make(map[string]string),","map[string]str","mu","mu.lock()","mutex","mutex、lock","new(sync.mutex)","newsmap()","popup....\");document.onclick","power","return","smap","string","string)","struct","sync.mutex","sync.rwmutex","type","unlock","var","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","作为其他结构体一个字段时,应该使用值而不是指针。即使该结构体不被导出,也不要直接把","及其方法是","和","导出的字段和","嵌入到结构体中。","方法是","是有效的","是有效的,所以指向","的实现细节。good","的实现细节,对其调用者不可见。","的指针基本是不必要的。","部分会导致字段","部分可以做到字段","零值"],"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":["\"img\"","&&","//","0","05","08","1","1)","19:22:09","2.channel","2022","64)",":=","=","===","bad","c","channel","console.log(\"plugin","e.target.tagnam","function(e){","gitbook该文章修订时间:","good","int)","int,","make(chan","popup....\");document.onclick","power","size","window.open(e.target.src,e.target.src)}img{cursor:pointer}","为","为零。任何其他尺寸都必须经过严格的审查,而不是拍脑袋给出一个大致的值。我们需要考虑如何确定大小,什么原因会导致","在高负载下被填满并阻塞写入者,以及当这种情况发生时系统会发生哪些变化。","应为","应该足以满足任何情况!","或","或无缓冲","或是无缓冲的。默认情况下,channel","是无缓冲的,其","要么是"],"第三篇:功能设计/4.错误处理/1.错误处理.html":["!=","\"fail","\"failed\"","\"img\"","\"new","%q","%v","%w","%w\",","%w。","&&","¬found)","¬founderror{file:","(e","*notfounderror","*notfounderror)","//","05","08","1.错误处理","1.错误类型2.错误包装1.错误类型","19:22:09","2.错误包装","2022",":=","=","===","api","bad","bar","can't","check","console.log(\"plugin","creat","custom","dynam","e.file)","e.target.tagnam","err","err)","errcouldnotopen","error","error\")","error()","error.","errors,","errors.a","errors.as(err,","errors.i","errors.is(err,","errors.new","errors.new(\"could","errors.new,但对于后者,我们必须使用","error。","file","file)","file}","fmt.errorf","fmt.errorf(","fmt.errorf(\"fil","fmt.sprintf(\"fil","foo","foo.errcouldnotopen)","foo.open(\"testfile.txt\");","foo.open();","foo:连接被拒绝”。","found\",","func","function(e){","gitbook该文章修订时间:","good","gracefully。","handl","level","new","nil","notfound","notfounderror","open\")","open()","open(fil","packag","panic(\"unknown","popup....\");document.onclick","power","return","s,","static","store.new()","store:","string","string)","struct","to\"之类的短语来保持上下文简洁,当错误通过堆栈向上传递时,它会一层一层被堆积起来:","top","type","var","window.open(e.target.src,e.target.src)}img{cursor:pointer}","ye","{","}","为你的错误添加上下文,","使用","例如,使用errors.new表示带有静态字符串的错误。如果调用者需要匹配并处理此错误,则将此错误导出为变量以支持将其与errors.is匹配。","函数。","前缀)。","另外请参考:don't","否则,尽可能在错误消息中添加上下文","和","在为返回的错误添加上下文时,通过避免使用\"fail","在调用失败时传播错误有三个主要方式:","声明错误可选的方式很少,在选择合适的错误申明方式之前,应考虑以下几点。","如果是这样,请参阅错误包装部分。","如果是静态字符串,我们可以使用","如果是,我们必须通过声明顶级错误变量或自定义类型来支持","如果没有要添加的其他上下文,则按原样返回原始错误。","如果调用者不需要匹配它,则使用fmt.errorf,如果调用者确实需要匹配它,则自定义","它们将成为包的公共","对于动态字符串的错误,","对于大多数包装错误,这是一个很好的默认值,但请注意,调用者可能会开始依赖此行为。因此,对于包装错误是已知变量或类型的情况,请将其作为函数契约的一部分进行记录和测试。","您会收到更多有用的错误,例如“呼叫服务","或","或自定义错误类型。","指导","无错误匹配。","来混淆底层错误,调用者将无法匹配它,但如果需要,您可以在将来切换到","标签或日志中的","根据调用者是否应该能够匹配和提取根本原因,在","格式之间进行选择。","添加上下文生成新错误。","添加上下文生成新错误;","然而,一旦错误被发送到另一个系统,应该清楚消息是一个错误(例如","的一部分。","请注意,如果您从包中导出错误变量或类型,","这将保留原始错误类型和消息。","这样就不会出现诸如“连接被拒绝”之类的模糊错误,","这非常适合底层错误消息有足够的信息来追踪它来自哪里的错误。","错误匹配","错误匹配。","错误消息","(1)如果调用者应该可以访问底层错误,请使用","(1)调用者是否需要匹配错误以便他们可以处理它?","(1)返回原始错误;","(2)使用","(2)错误消息是否为静态字符串,还是需要上下文信息的动态字符串?","(3)使用","(3)我们是否正在传递由下游函数返回的新错误?"],"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":["\"img\"","\"time\"","&&","*","*/)","*/,","...","/*","//","0","05","08","1","1.使用","15190)。如果您比较两个时刻,则差异将不包括这两个时刻之间可能发生的闰秒。","19:22:09","2000}","2022","24","2}","3339","365","60","7","8728),也不在计算中考虑闰秒(issu",":=","=","===","```go","`json:\"interval\"`","`json:\"intervalmillis\"`","`time.adddate`。但是,如果我们想保证某一时刻比前一时刻晚","bad","believ","bool","config","console.log(\"plugin","datetim","day","e.target.tagnam","encoding/json","falsehood","float64,并在字段名称中包含单位。","func","function(e){","gitbook该文章修订时间:","good","int","int)","interv","intervalmilli","isactive(now,","line","maybenewday","month","newday","poll(10)","poll(10*time.second)","poll(delay","popup....\");document.onclick","power","programm","return","rfc","start","start,","stop","string","struct","t.add(24","t.adddate(0","time","time.dur","time.duration)","time.duration,因此该单位包含在字段的名称中。","time.format","time.hour)","time.millisecond)","time.pars","time.parsedur","time.rfc3339","time.sleep(delay)","time.sleep(time.duration(delay)","time.tim","time.time,在比较、添加或减去时间时使用","time.time,如果底层驱动程序支持则返回;","time.unmarshaljson","timestamp","time。","type","window.open(e.target.src,e.target.src)}img{cursor:pointer}","year","{","{\"interval\":","{\"intervalmillis\":","}","。","一分钟有","一周有","一天有","一小时有","一年","不支持","中使用。","中定义的格式时间戳。默认情况下,time.unmarshaltext","中的方法。","为什么常识性的认知是错误的呢?因为地球自转的不均匀性和长期变慢性,会存在时间修正的情况,比如闰秒,闰年等。","代码即注释","作为","使用","使用此格式,并可通过","例如,在一个时间点上加上","例如,由于","分钟","列转换为","包不支持解析闰秒时间戳(issu","包处理时间","包,因为它有助于以更安全、更准确的方式处理这些不正确的假设。","和","回到第一个例子,在一个时间时刻加上","因此,在处理时间时始终使用","在","在处理时间的瞬间时使用","天","字符串,并通过","字符串;","对外部系统使用","小时","小时并不总是产生一个新的日历日。","小时,我们应该使用`time.add`。","小时,我们用于添加时间的方法取决于意图。如果我们想要下一个日历日(当前天的下一天)的同一个时间点,我们应该使用","尽可能在与外部系统交互中使用","尽管这在实践中并不成问题,但请记住,time","当不能在这些交互中使用","当在这些交互中不能使用","或","支持","支持将","方法支持将","时间处理看似简单,实则不然。关于时间的错误假设通常包括以下几点:","时,请使用","时,除非达成一致,否则使用","是几秒钟还是几毫秒?","标志:flag","秒","编码为","表达时间段","表达瞬时时间","还有更多,具体可参考","通过","通过其","(1)command","(2)json:encoding/json","(3)sql:database/sql","(4)yaml:gopkg.in/yaml.v2",";"],"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":["\"img\"","&&","(f","(f*","(int32,","*foo)","//","05","08","1","1)","19:22:09","2.使用第三方","2022","=","==","===","alreadi","atom","atomic.bool","atomic.swapint32(&f.running,","bad","bool","console.log(\"plugin","e.target.tagnam","f.run","f.running.load()","f.running.swap(true)","foo","foo)","func","function(e){","gitbook该文章修订时间:","go.uber.org/atom","good","int32","int64","isrunning()","popup....\");document.onclick","power","race!","return","run","running…","start","start()","struct","sync/atom","type","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","不建议使用","包","包的原子操作对基本类型","等)进行操作,因为很容易忘记使用原子操作来读取或修改变量。","类型。","通过隐藏基础类型为这些操作增加了类型安全性。此外,它还包括一个易用的"],"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":["\"img\"","&&","&signer{","(s","*signer","*signer)","*testing.t)","//","05","08","1.避免使用可变全局变量","19:22:09","2022",":=","=","===","assert.equal(t,","bad","console.log(\"plugin","defer","e.target.tagnam","func","func()","function(e){","gitbook该文章修订时间:","good","newsigner()","now","now)","now:","oldtimenow","popup....\");document.onclick","power","return","s","s.now","s.now()","s.sign(give))","sign(give))","sign(msg","sign.go","sign_test.go","signer","signwithtime(msg,","somefixedtim","string","string)","struct","testsign(t","testsigner(t","time.now","time.now,","time.tim","timenow","timenow()","type","var","want,","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","}()","中。","函数直接注入到使用方","可变全局变量在使用时,可能会被其他地方修改,导致程序运行时出现意外情况。","我们可以通过依赖注入的方式将依赖注入到使用方,这样便可以避免使用全局变量,进而避免了依赖的全局变量被错误修改的可能。","比如下面将依赖的"],"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":["\"img\"","&&","(l","*abstractlist","*abstractlist)","*concretelist)","...","//","05","08","19:22:09","2.避免在公共结构中嵌入类型","2022","=","===","abstractlist","abstractlist。相反,只需手动将方法写入具体的列表,委托给抽象列表的方法。","abstractlist,如果嵌入的类型是","add(","add(entity)","bad","concretelist","console.log(\"plugin","e.target.tagnam","entity)","func","function(e){","gitbook该文章修订时间:","good","interfac","interface,而不是结构体,这将为开发人员提供更大的灵活性来改变未来,但仍然泄露了具体列表使用抽象实现的细节。","l.list.add(e)","l.list.remove(e)","list","popup....\");document.onclick","power","public。为了保持向后兼容性,外部类型的每个未来版本都必须保留嵌入类型;","public,那么字段是","remove(","remove(entity)","struct","type","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","{}","}","产生模糊的接口文档指","假设您使用共享的","即使嵌入兼容的抽象列表","又没有明确说明,会产生模糊的接口文档。","实现了多种列表类型,请避免在具体的列表实现中嵌入","尽管编写这些委托方法是乏味的,但是额外的工作隐藏了实现细节,留下了更多的更改机会,还消除了在未能描述出潜在接口的模糊文档。","嵌入类型会泄漏实现细节、禁止类型演化和产生模糊的接口文档。","很少需要嵌入类型,虽然它可以帮助您避免编写冗长的委托方法。","无论是使用嵌入结构还是嵌入接口,都会限制类型的演化。","是一个实体列表。","是各种实体列表的通用实现。","泄漏实现细节指","添加将实体添加到列表中。","的实现是","的实现细节,被到处泄露了;","禁止类型演化指","移除从列表中移除实体。","获得了同名嵌套类型字段","被导出的字段和方法全部成为了","被导出的字段和方法,在","(1)向嵌入接口添加方法是一个破坏性的改变;","(2)从嵌入结构体删除方法是一个破坏性的改变;","(3)删除嵌入类型是一个破坏性的改变;","(4)即使使用满足相同接口的类型替换嵌入类型,也是一个破坏性的改变。"],"第四篇:最佳性能/0.导语.html":["\"img\"","&&","0.导语","05","18","2022","22:23:35","=","===","coder","console.log(\"plugin","e.target.tagnam","function(e){","gitbook该文章修订时间:","go","popup....\");document.onclick","power","window.open(e.target.src,e.target.src)}img{cursor:pointer}","代码的稳健、可读和高效是我们每一个位","的共同追求。本篇将结合","语言特性,为书写高效的代码,力争从常用数据结构、内存管理和并发编程三个方面给出相关建议。话不多说,让我们一起学习","高性能编程技法吧。"],"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":["!ok","\"img\"","&&","&num)","*testing.b)","...interface{})","...uint64)","//","0","0,","0.2511","05","08","0;","0x1}))","1","1.841","1.优先使用","1.反射虽好,切莫贪杯","1000000000","12","1226868","127.0.0.1","13026195","145.3","16","19:22:09","2,","2.60ghz","2.少量的重复不比反射差","2022","2130706433","296","3,","3.809","3.慎用","4","4,","5,","6,","60","7,","8,","80","81.96","8249469","9750h","978.2","9}",":=","=","===","@","[]byte)","[]interface{}{uint64(1),","[]uint64","[]uint64,","[]uint64{1,","_,","allocs/op","amd64","append(t,","b/op","bad","bench=.","bench=benchmarkntohl.*","benchmarkdeletesliceelm","benchmarkdeletesliceelms(b","benchmarkdeleteu64liceelm","benchmarkntohl","benchmarkntohl(b","benchmarkntohlnotusebinari","benchmem","binari","binary.bigendian,","binary.read","binary.read(buf,","binary.writ","binary.write标准库","buffer","byteorder,","bytes.newreader(bys)","c","console.log(\"plugin","core(tm)","cpu","cpu:","darwin","data","data。data","deletesliceelm","deletesliceelms(i","deleteu64liceelm","deleteu64liceelms(i","e.target.tagnam","elm","encoding/binari","err","error","fmt","fmt.println(ntohl([]byte{0x7f,","fmt2.少量的重复不比反射差3.慎用","fmt,因为前者性能更佳。","func","function(e){","gitbook该文章修订时间:","go","goarch:","goos:","gorm、xorm","i7","int","intel(r)","interface{}","interface{})","interface{},","io.reader,","io.writer,","ip","json、orm","key","len(elms))","len(i))","m","m[v]","m[v];","main/reflect","make([]uint64,","make(map[interface{}]struct{},","make(map[uint64]struct{},","map","ns/op","ntohl","ntohl()","ntohl(bi","ntohlnotusebinary(bi","ok","order","pass","pkg:","popup....\");document.onclick","power","r","rang","read","read(r","reflect","reflect.makeslice(reflect.typeof(i),","reflect.valueof(i)","return","set。","size","size(v","slice","strconv","struct{}{}","t","test","uint32","uint32(bys[2])","uint32(bys[3])","uint64","uint64(3),","uint64(5),","uint64(7),","uint64(9)}","v","v)","v.len())","varint","w","window.open(e.target.src,e.target.src)}img{cursor:pointer}","wirt","write","write(w","w。data","{","|","}","下面以我们熟知的","下面看一下二者的性能对比。","下面看下剥去反射前后二者的性能差异。","中的字节数。","中,因为","为","为什么性能上会有两倍多的差距,因为","从","从切片中过滤指定元素。注意:不修改原切片。","从结构化二进制数据","以外类型的切片进行过滤,拷贝一次代码又何妨呢?可以肯定的是,绝大部份场景,根本不会对所有类型的切片进行过滤,那么反射带来好处我们并没有充分享受,但却要为其带来的性能成本买单。","使用反射并且很慢。如果有需要用到这两个函数的地方,我们应该手动实现这两个函数的相关功能,而不是直接去使用它们。","其中数字与字节序列的转换可以用如下三个函数:","写入到","函数为例,看看","函数将","切片过滤掉指定的元素。","创建新切片,过滤掉指定元素。","利用","利用反射,我们可以实现一个类型泛化支持扩展的切片过滤函数。","包如何实现。","包实现了数字和字节序列之间的简单转换以及","包的性能相较于针对具体类型实现的版本,性能差异非常大。","包针对大端字节序将字节序列转为","可以看到,反射涉及了额外的类型判断和大量的内存分配,导致其对性能的影响非常明显。随着切片元素的递增,每一次判断元素是否在","可见使用反射实现的","呢?","和","基本数据类型与字符串之间的转换,优先使用","如将","如果我们针对","实现上利用反射来达到范型的效果,在运行时进行类型的动态判断,所以带来了一定的性能损耗。","对整数采用的便是这种编码方式。","将","将网络字节序的","当使用反射时,请问一下自己,我真地需要它吗?","很多时候,我们可能只需要操作一个类型的切片,利用反射实现的类型泛化扩展的能力压根没用上。退一步说,如果我们真地需要对","必须是固定大小的值或固定大小值的切片,或指向此类数据的指针。","必须是指向固定大小值的指针或固定大小值的切片。","是一种使用可变字节表示整数的方法。其中数值本身越小,其所占用的字节数越少。protocol","是不确定的类型,会发生变量逃逸,触发堆内存的分配。所以,可预见的是当元素数量增加时,性能差异会越来大。","有时,我们需要一些工具函数。比如从","构建","标准库函数","框架","的","的二进制表示形式写入","的编码和解码。varint","等。","类型手动实现一个","类型时的实现。","网络字节序解析到","而不是","该函数也是参考了","语言提供了运行时动态获取对象的类型和值以及动态创建对象的能力。反射可以帮助抽象和简化代码,提高开发效率。","语言标准库以及很多开源软件中都使用了","语言的反射能力,例如用于序列化和反序列化的","读取到","转为主机字节序。","过滤指定元素。注意:不修改原切片。","运行上面的基准测试。","运行上面的基准测试,结果如下:","返回"],"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":["\"img\"","&&","*testing.b)","05","08","0;","1.379","1.582","19:22:09","2.962","2.避免重复转换字符串到字节切片","2022","3.00ghz","748467979","8","878246492","9700",":=","=","===","@","amd64","bench=benchmarkstringtobyt","benchmarkstringtobyt","benchmarkstringtobyte(b","benchmarkstringtobyteonc","console.log(\"plugin","core(tm)","cpu","cpu:","e.target.tagnam","func","function(e){","gcflags=\"","gitbook该文章修订时间:","go","goarch:","goos:","hot","i7","intel(r)","main/perf","n\"","ns/op","ok","pass","path","path,即热点路径,顾名思义,是你的程序中那些会频繁执行到的代码。","pkg:","popup....\");document.onclick","power","slice,因为重复的切片初始化会带来性能损耗。相反,请执行一次转换并捕获结果。","test","window","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","上,那么其对性能的影响将被放大。这里解释下","不要反复从固定字符串创建字节","差距不是很大,但是随着字符串长度的增加,差距将会越来越明显。此外,如果这种重复的转换在","看一下性能差异,注意需要禁止编译器优化,不然看不出差别。"],"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":["\"img\"","&&","//","0","05","08","0;","1.指定","1000000","166.0","17.81","19:22:09","2.指定切片容量","2022","3.指定容器容量","4","64","66930670","7032921","8",":=","=","===","_","_,","allocs/op","append","append()","b/op","bad","bench=^benchmarkjoinstr","benchmarkjoinstrwithoper","benchmarkjoinstrwithsprintf","benchmem","bucket","capac","capacity)","console.log(\"plugin","const","e.target.tagnam","f","file","files,","function(e){","gitbook该文章修订时间:","go","good","hashmap","hint)","ioutil.readdir(\"./files\")","len(files))","length,","m","m[f.name()]","make()","make([]t,","make(map[string]os.fileinfo)","make(map[string]os.fileinfo,","make(map[t1]t2,","map","n","ns/op","popup....\");document.onclick","power","rang","size","slice","test","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","不同。map","不同,slice","不是一个提示:编译器将为提供给","与","初始化切片时提供容量信息,特别是在追加切片时。","初始化的时候提供容量信息。","向","因此,在将元素添加到","在尽可能的情况下,在使用","在运行时可能会有更多分配。","容量提示","容量提示2.指定切片容量尽可能指定容器容量,以便为容器预先分配内存。这将在后续添加元素时减少通过复制来调整容器大小。","容量时,仍可能发生分配。","执行基准测试:","提供容量提示会在初始化时尝试调整","提示并不保证完全的抢占式分配,而是用于估计所需的","操作将导致零分配(直到","时为","时,甚至在指定","是在没有大小提示的情况下创建的;","是有大小提示创建的;在运行时可能会有更少的分配。","注意,与","的","的大小,这将减少在将元素添加到","的容量分配足够的内存,这意味着后续的","的数量。","的长度与容量匹配,在此之后,任何","都可能调整大小以容纳其他元素)。","重新分配内存。"],"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":["\"bar\",","\"baz\"","\"foo\",","\"img\"","&&","*testing.b)","+",".","//","0","05","0;","1.813","1.行内字符串拼接2.非行内字符串拼接1.行内字符串拼接","13","157.2","15:46:40","17.53","2.非行内字符串拼接","20.95","2022","3.00ghz","30079785","30748495","31543916","31663521","36.39","37.34","39.58","4","4.字符串拼接方式","40.60","60079003","64","665341896","70638928","7520017","8","9700",":=","=","===","@","allocs/op","amd64","b/op","bench=^benchmarkjoinstr","benchmarkjoinstrwithbytesbuff","benchmarkjoinstrwithbyteslic","benchmarkjoinstrwithbytesliceprealloc","benchmarkjoinstrwithoper","benchmarkjoinstrwithoperator(b","benchmarkjoinstrwithsprintf","benchmarkjoinstrwithstringsbuild","benchmarkjoinstrwithstringsbuilderprealloc","benchmarkjoinstrwithstringsbuilderprealloc(b","benchmarkjoinstrwithstringsjoin","benchmarkjoinstrwithstringsjoin(b","benchmem","byte[]","console.log(\"plugin","core(tm)","cpu","cpu:","e.target.tagnam","fmt.sprintf()","func","function(e){","gitbook该文章修订时间:","go","goarch:","good","goos:","grow","grow:","i7","intel(r)","main/perf","ns/op","pkg:","popup....\");document.onclick","power","s1,","s2,","s3","string.builder也提供了预分配内存的方式","test","window","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","下面看下二者的性能对比。","且预先分配容量的拼接方式性能最佳。","从性能出发,兼顾实现的便捷与代码可读性,如果待拼接的字符串不涉及类型转换且数量较少(fmt.sprintf()。","从结果可以看出,strings.join()、strings.builder、bytes.buffer和byte[]","优化后的版本的性能测试结果如下。可以看出相较于不预先分配空间的方式,性能提升了很多。","使用了","先看下其性能测试的对比。","只能简单地完成字符串之间的拼接,非字符串类型的变量需要单独做类型转换。行内拼接字符串不会产生内存分配,也不涉及类型地动态转换,所以性能上优于fmt.sprintf()。","可以看到,二者的性能差距很大,快达到一个数量级了。所以在不影响代码可读性时,行内字符串尽可能地使用运算符","基准测试结果如下:","字符串拼接还有其他的方式,比如strings.join()、strings.builder、bytes.buffer和byte[],这几种不适合行内使用。当待拼接字符串数量较多时可考虑使用。","所以如果对性能要求非常严格,或待拼接的字符串数量足够多时,建议使用","执行基准测试结果如下:","来拼接而不是fmt.sprintf()。","的性能相近。如果结果字符串的长度是可预知的,使用","综合易用性和性能,一般推荐使用strings.builder来拼接字符串。","能够接收不同类型的入参,通过格式化输出完成字符串的拼接,使用非常方便。但因其底层实现使用了反射,性能上会有所损耗。","行内字符串的拼接,主要追求的是代码的简洁可读。fmt.sprintf()","行内拼接字符串为了书写方便快捷,最常用的两个方法是:","运算符","运算符+","预先分配容量这种方式。"],"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":["\"img\"","&&","*item","*testing.b)",".","//","0","0,","05","08","0;","1","1.[]int","1.[]int2.[]struct{}3.[]*struct4.小结go","1024)","12","1514","1521","19:22:09","2.60ghz","2.[]struct{}","2022","2124","2165","22","2290372","236.2","239.1","27","27169","3.00ghz","3.378","3.[]*struct","30914","38799","4.小结","46161","5.097","5.[]struct{}","5043324","5076255","534.8","535705","556436","752077","773634","8","9700","9750h",":=","=","===","@","[1024]byte","[1024]byte,如果每次遍历","[]*item","[]int","[]int。但如果迭代的元素较大,如一个包含很多属性的","[]item,都会进行一次值拷贝,所以带来了性能损耗。","[]struct","allocs/op","amd64","b/op","bench=.","bench=benchmarkrang","bench=intslice$","bench=pointer$","benchmarkindexintslic","benchmarkindexpoint","benchmarkindexstructslic","benchmarkindexstructslice(b","benchmarkrange1","benchmarkrange1(b","benchmarkrange2","benchmarkrangeindexstructslic","benchmarkrangeintslic","benchmarkrangepoint","benchmarkrangestructslic","benchmem","console.log(\"plugin","core(tm)","cpu","cpu:","darwin","e.target.tagnam","func","function(e){","gcflags=","genitem","genitems(n","genrandomintslic","genrandomintslice()","genrandomintslice(n","gitbook该文章修订时间:","go","goarch:","goos:","i7","id","index","index。如果使用","int","int)","intel(r)","int,一个是类型是","item","main/perf","main/rang","make([]*item,","make([]int,","make([]item,","n","n)","ns/op","num","n禁用了编译器对切片遍历的优化。如果没有该选项,那么上面三种遍历方式没有性能差别。","ok","pass","pkg:","popup....\");document.onclick","power","rand.seed(time.now().unixnano())","rang","range。二者在功能上没有区别,但在性能上会有区别吗?","range,建议只迭代下标,通过下标访问元素,这种使用方式和","range,有时候甚至会有上千倍的性能差异。对于这种场景,建议使用","struct","test","tmp","type","val","window","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","下标时,性能比","中元素时,性能非常差。","为什么编译器会对上面的测试代码进行优化呢?因为代码实际上只取最后一个切片元素的值,所以前面的循环操作可以跳过,这样便带来性能的提升。如果是下面的代码,那么编器将无法优化,必须遍历拷贝所有元素。","为例。","值好很多。从这里我们应该能够知道二者性能差别之大的原因。","函数用于生成指定长度元素类型为","切片","切片元素从结构体","则不存在拷贝。","只遍历","可以看出,两种通过","同时迭代下标和值,则需要将切片/数组的元素改为指针,才能不影响性能。","后,for","和","在迭代过程中返回的是元素的拷贝,index","如果","如果切片中是指向结构体的指针,而不是结构体呢?","就没有区别了。如果想使用","性能没有差别,但是","执行性能测试结果:","无需去除编译器优化,基准测试结果如下:","时获取的是值拷贝,对副本的修改,是不会影响到原切片。","是一个结构体类型","替换为指针","此外,因","生成指定长度","生成指定长度的随机","由两个字段构成,一个类型是","的切片。从最终的结果可以看到,遍历","的性能几乎一样,如基本类型的切片","的性能几乎是一样的。而且使用指针还有另一个好处,可以直接修改指针对应的结构体的值。","的性能将显著地高于","的遍历方式","类型呢?","类型的切片,下标与","结构体,那么","运行测试结果如下:","迭代的元素较小,那么","遍历","遍历切片或数组有两种方式,一种是下标,一种是","遍历性能几乎没有区别。","那么对于稍微复杂一点的","需要注意的时,上面运行基准测试时,使用编译选项","首先看一下遍历基本类型切片时二者的性能差别,以",",item"],"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":["!=","\"img\"","&&","*testing.b)","//","0","0,","05","08","0;","0。","1.截取法(修改原切片)","1.截取法(修改原切片)2.拷贝法(不改原切片)3.移位法(修改原切片)4.性能对比5.小结go","1000:","100:","10、100、1000","10:","14897282","1652146","17466486","19:22:09","1,我们要删除所有的","2.拷贝法(不改原切片)","2022","2124237","21915","21952129","22176390","258662","2714158","2724","3.00ghz","3.移位法(修改原切片)","3161318","325194","359.9","3615","4.性能对比","423.7","432049","5.427","5.小结","50.78","5007","54.68","56067","578.4","6.切片删除指定元素","65.07","762.1","8","85.22","9700",":=","=","===","@","[]int","[]int,","_,","a[:0]","a[:j]","a[j]","amd64","append(tgt,","append(tmp,","bench=.","benchmarkdeleteslice1","benchmarkdeleteslice1(b","benchmarkdeleteslice2","benchmarkdeleteslice3","benchmarkdeleteslice4","console.log(\"plugin","core(tm)","cpu","cpu:","deleteslice1","deleteslice1(a","deleteslice2","deleteslice2(a","deleteslice3","deleteslice3(a","deleteslice4","deleteslice4(a","e.target.tagnam","elem","func","function(e){","getslice(n","gitbook该文章修订时间:","go","goarch:","goos:","i7","index","index,记录下一个有效元素应该在的位置。遍历所有元素,当遇到有效元素,将其移动到","int)","intel(r)","j","j++","len(a))","main/slic","make([]int,","n)","ns/op","ok","pass","pkg:","popup....\");document.onclick","power","rang","return","slice","slice。","slice,但是共用原始","slice,将要删除的元素过滤掉。缺点是需要开辟另一个","test","tgt","tmp","v","v)","window","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","上进行修改。","且","为例给出具体实现。","从基准测试结果来看,性能最佳的方法是移位法,其中又属第一种实现方式较佳。性能最差的也是最常用的方法是截取法。随着切片长度的增加,上面四种删除方式的性能差异会愈加明显。","假设我们的切片有","创建了一个","删除切片指定元素一般有如下几种方法,本文以","删除指定元素。","利用一个下标","加一。最终","原切片长度为","和","基准测试代码如下:","实际使用时,我们可以根据不用场景来选择。如不能修改原切片使用拷贝法,可以修改原切片使用移位法中的第一种实现方式。","并没有提供删除切片元素专用的语法或函数,需要使用切片本身的特性来删除元素。","应该后移一位。","方式一","方式二","测试结果如下:","生成切片函数如下:","的位置就是所有有效元素的下一个位置,最后做一个截取就行了。这种方法会修改原来的","的切片进行测试,来上下上面四种实现的性能差异。","的底层数组。这样也不需要额外分配内存空间,直接在原","的截取删除指定元素。注意删除时,后面的元素会前移,下标","的空间,优点是容易理解,而且不会修改原","该方法可以看成对第一种方法截取法的改进,因为每次指需移动一个元素,性能更加。","这种方法最容易理解,重新使用一个","这里分别对长度为","这里利用对"],"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":["\"fmt\"","\"img\"","\"unsafe\"","&&","(","(d","(s",")","0","05","08","1","1.不占内存空间2.空结构体的作用2.1","1.使用空结构体节省内存","19:22:09","1mb","2.1","2.2","2.3","2.空结构体的作用","2022",":=","=","===","_,","add(key","bool","c/c++","chan","channel","close()","console.log(\"plugin","delete(key","delete(s,","door","door\")","door)","door,在这种情况下,door","e.target.tagnam","fmt.println(\"clos","fmt.println(\"open","fmt.println(s.has(\"bar\"))","fmt.println(s.has(\"foo\"))","fmt.println(unsafe.sizeof(struct{}{}))","func","function(e){","gitbook该文章修订时间:","go","golang","has(key","import","int","key)","main","main()","main.go","make(set)","map","map[string]struct{}","ok","open()","packag","popup....\");document.onclick","power","return","run","s","s.add(\"bar\")","s.add(\"foo\")","s[key]","set","set)","set。","set)、add、del、clear、contain","string)","struct{}","struct{})","struct{}{}","type","unsafe.sizeof","window.open(e.target.src,e.target.src)}img{cursor:pointer}","worker(ch","{","}","不发送数据的信道","不发送数据的信道2.3","不需要发送任何的数据,只用来通知子协程(goroutine)执行任务,或只用来控制协程的并发。这种情况下,使用空结构体作为占位符就非常合适了。","个字节,那假设","中有一百万条数据,就会浪费","中空结构体","中空结构体仍占用","中,我们可以使用","事实上可以用任何的数据结构替代。","仅包含方法的结构体","仅包含方法的结构体1.不占内存空间","作为集合(set)使用时,可以将值类型定义为空结构体,仅作为占位符使用即可。","可以看到,go","因为空结构体不占据内存空间,因此被广泛作为各种场景下的占位符使用。一是节省资源,二是空结构体本身就具备很强的语义,即这里不需要任何值,仅作为占位符,达到的代码即注释的效果。","因此呢,将","在","在部分场景下,结构体只包含方法,不包含任何的字段。例如上面例子中的","如果想使用","字节。","实现集合(set)","实现集合(set)2.2","无论是","是不占用内存空间,不像","有时候使用","来代替。事实上,对于集合来说,只需要","的完整功能,如初始化(通过切片构建一个","的实现,通常使用","的空间。","的键,而不需要值。即使是将值设置为","等操作,可以使用开源库","类型,也会多占据","计算出一个数据类型实例需要占用的字节数。","语言标准库没有提供","运行上面的例子将会输出:","还是","都会浪费额外的内存。因此,在这种情况下,声明为空结构体最合适。"],"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":["\"img\"","&&","//","0","05","08","0。","1","1.","1.for","1.为什么需要内存对齐2.go","12","19:22:09","1。","2","2.for","2.go","2.struct","2022","2,从第","2,因此,必须空出","3","3.for","3.合理的","32","4","4.空结构与空数组对内存对齐的影响","4,因此,demo2","4,因此,必须空出","4,此时,内存已经是对齐的,从第","8","=","===","align","array","array'","a、b","b","c","console.log(\"plugin","cpu","demo1","demo1:","demo2","demo2:","demo3","demo4","demo4{}","e.target.tagnam","each","element","f","field","fmt.println(unsafe.sizeof(demo1{}))","fmt.println(unsafe.sizeof(demo2{}))","fmt.println(unsafe.sizeof(demo3{}))","fmt.println(unsafe.sizeof(demo4{}))","func","function(e){","gitbook该文章修订时间:","go","guarante","int16","int32","int8","languag","largest","main()","popup....\");document.onclick","power","same","size","size)为单位访问。如","specif","struct","struct{}","type","type.","type:","unsafe.alignof","unsafe.alignof(x)","unsafe.alignof(x.f)","unsafe.alignof(x.f),unsafe.alignof(x)","valu","variabl","window.open(e.target.src,e.target.src)}img{cursor:pointer}","x","x,","x,unsafe.alignof(x)","x,计算","{","}","个位置开始占据","个字节的数据,一次读取","个字节那么只需要读取","个字节,cpu","个字节,偏移量才是","中","中比较特殊。没有任何字段的空","从这个例子可以看到,内存对齐对实现变量的原子性操作也是有好处的。每次内存访问是原子的,如果变量的大小不超过字长,那么内存对齐后,对该变量的访问就是原子的,这个特性在并发场景下至关重要。","位的","作为一门追求高性能的后台编程语言,当然也不例外。","作为其他","作为结构体最后一个字段时,需要内存对齐。因为如果有指针指向该字段,返回的地址将在结构体之外,如果此指针一直存活不释放对应的内存,就会有内存泄露的问题(该内存不因结构体释放而释放)。","其中函数","内存对齐前变量","内存对齐规则","内存对齐规则3.合理的","占据的内存空间大小为","占据空间一致,而","变量的值只需要一次访存。","变量的值需要两次访存,第一次访存得到前一个字节,第二次得到后两个字节。内存对齐后","可以看到,demo3{}","可以看到,同样的字段,因排列顺序不同,会导致不一样的结构体大小。","各占","各占据","和没有任何元素的","因为内存对齐的存在,合理的","因为这一点,空","因此","因此,在对内存特别敏感的结构体的设计上,我们可以通过调整字段的顺序,将字段宽度从小到大由上到下排列,来减少内存的占用。","始终以字长访问内存,如果不进行内存对齐,可能会增加","字节。","字节即可。","字节的空间。","字节,与字段","字节,即额外填充了","字节,那么","对于","对于任意类型的变量","对于数组类型的变量","对于结构体类型的变量","对齐系数决定了字段的偏移和变量的大小,两者必须是对齐系数的整数倍。","布局","布局4.空结构与空数组对内存对齐的影响1.为什么需要内存对齐","布局可以减少内存占用,提高程序性能。","布局考虑内存对齐","或空","接下来逐个分析,首先是","描述了内存对齐的规则。","是第一个字段,默认是已经对齐的,从第","是第三个字段,对齐倍数为","是第二个字段,对齐倍数为","是第二个字段,对齐系数为","次。","每一个字段","每个字段按照自身的对齐系数来确定在内存中的偏移量,一个字段因偏移而浪费的大小也不同。","用于获取变量的对齐系数。","的","的倍数,从第","的内存占用为","的大小为","的字段时,一般不需要内存对齐。但是有一种情况除外:即当","的对齐系数决定,也是","的对齐系数由","空结构与空数组在","等于其中的最大值。","等于构成数组的元素类型的对齐系数。","简言之:合理的内存对齐可以提高内存读写的性能,并且便于实现变量操作的原子性。","编译器一般为了减少","至少为","访存指令周期,提高内存的访问效率,会对变量进行内存对齐。go","访存次数。","访存的单位是","访问内存并不是逐个字节访问,而是以字长(word","访问内存的吞吐量。比如同样读取","访问内存的次数,加大","读取","这么设计的目的,是减少",",unsafe.alignof(x)",",字长为"],"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":["\"","\"img\"","#","&&","&st","&{storag","(faq)","(non","*st","*testing.b)","./main.go:5:12","./main.go:5:12:","./main.go:9:12:","//","0","0,","05","08","0;","1","1.局部切片尽可能确定长度或容量","1.局部切片尽可能确定长度或容量2.返回值","10","10)","1024","12","1342947","1427","1708","186127288","19:22:09","2.60ghz","2.返回值","2022","216.2","2242","27.40","2861","3.742","3.865","3.908","3.减少逃逸,将变量限制在栈上","3.小的拷贝好过引用","380626","4.402","4.返回值使用确定的类型","43268738","464974","5.小结","5194722","6.454","692400","80","8192","832418","893.6","9750h",":=","=","===","@","[1024]int","[capacity]int","allocs/op","amd64","argument","arr","array","arrayfibonacci","arrayfibonacci()","ask","b/op","bench=.","bench=benchmarkret","bench=benchmarkslic","benchmarkarray","benchmarkarray(b","benchmarkifc","benchmarkretptr","benchmarkretvalu","benchmarkretvalue(b","benchmarkslic","benchmarksliceescap","benchmarkslicenoescap","benchmem","build","capac","capacity)","command","console.log(\"plugin","const","constant","copy/copy.go","copy/copy.go:17:6:","copy/copy.go:18:11:","copy/copy.go:5:6:","core(tm)","cpu","cpu:","d","darwin","e.target.tagnam","escap","flow:","frequent","func","function(e){","gc","gcflags=","gcflags=\"","gitbook该文章修订时间:","go","goarch:","goos:","heap","heap:","i7","inlin","intel(r)","interface{}","interface{}。","l\"","l\",如果发生内联,那么将不会出现变量的逃逸,就不存在堆上分配内存与回收的操作了,二者将看不出性能差异。","line","m","main","main()","main.go","main/copi","make([]int,","m查看编译器对上面两个函数的优化决策。","ns/op","number","number)","number)}:","ok","packag","pass","pkg:","popup....\");document.onclick","power","question","retptr()","return","retvalue()","s1","size)","slice","sliceescap","sliceescape()","slicefibonacci","slicefibonacci()","slicefibonacci()函数中分配的局部变量切片因为要返回到函数外部,所以发生了逃逸,需要在堆上申请内存空间。从测试也过也可以看出,arrayfibonacci()函数没有内存分配,完全在栈上完成数组的创建。这里说明了对于一些短小的对象,栈上复制的成本远小于在堆上分配和回收的成本。","st","struct","test","type","valu","var","vs","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","{heap}","}","一般情况下,对于需要修改原对象,或占用内存比较大的对象,返回指针。对于只读或占用内存较小的对象,返回值能够获得更好的性能。","下面以一个简单的示例来看下二者的性能差异。","下面看一下性能对比。","下面看下二者的性能差异。","中的变量只要被引用就一直会存活,存储在堆上还是栈上由","从测试结果可以看出,对数组的拷贝性能却比使用切片要好。为什么会这样呢?","从输出结果可以看到,使用变量(非常量)来指定切片的容量,会导致切片发生逃逸,影响性能。指定切片的长度时也是一样的,尽可能使用常量或数值字面量。","以","以上仅列出了部分变量发生逃逸的情形。实际上,go","值传递会拷贝整个对象,而指针传递只会拷贝地址,指向的对象是同一个。传指针可以减少值的拷贝,但是会导致内存分配逃逸到堆中,增加垃圾回收(gc)的负担。在对象频繁创建和删除的场景下,返回指针导致的","其他","内部实现决定而和具体的语法没有关系。","函数中定义的局部变量切片逃逸到了堆。","函数均可内联。slicefibonacci()","发生逃逸,在堆上申请切片","变量大小不确定(如","变量较大(栈空间不足)","可以看到,arrayfibonacci()","可见,函数返回值使用","和","基准测试结果如下:","处理。在知道常见的变量逃逸场景后,我们在编码时可以有意识地避免变量发生逃逸,尽可能地使用栈空间,而非堆空间。","处理,函数返回后就会直接释放,而堆上分配的内存使用完毕会交给","如果使用局部切片时,已知切片的长度或容量,请使用常量或数值字面量来定义。","如果变量类型不确定,那么将会逃逸到堆上。所以,函数返回值如果能确定的类型,就不要使用","官方也在","对","小的拷贝好过引用,什么意思呢,就是尽量使用栈变量而不是堆变量。下面举一个反常识的例子,来证明小的拷贝比在堆上创建引用变量要好。","开销可能会严重影响性能。","成本,可提高程序性能。","我们来看一下编译器编译时对上面两个切片的优化决策。","我们还是以上面斐波那契数列函数为例,看下返回值为确定类型和","我们都知道","方式传递后,再加上其长度不可扩展,考虑到性能我们一般很少使用它。实际上,凡事无绝对。有时使用数组进行拷贝传递,比使用切片要好。","明确地告诉我们,我们并不需要知道变量是分配在栈(stack)上还是堆(heap)上。golang","栈上分配内存比在堆中分配内存有更高的效率。因为栈上分配的内存不需要","版本的大小限制可能不一样。一般是","的性能差别。","知道变量逃逸的原因后,我们可以有意识地避免变量发生逃逸,将其限制在栈上,减少堆变量的分配,降低","编译器对变量的逃逸分析决策远比我们想像的要复杂。我们只能尽可能地去勾勒而无以绘其全貌。go","编译器而言,超过一定大小的局部变量将逃逸到堆上,不同","编译时可以借助选项","运行上面的基准测试结果如下:","运行上面的基准测试,将得到如下结果。","返回值类型不确定(不能确定大小)","返回地址","返回引用(引用变量的底层是指针)","返回指针","返回指针3.小的拷贝好过引用4.返回值使用确定的类型5.小结变量逃逸一般发生在如下几种情况:","返回时,编译器无法确定返回值的具体类型,导致返回值逃逸到堆上。当发生了堆上内存的申请与回收时,性能会差一点。","那么多大的变量才算是小变量呢?","里面的","长度或容量不定)","闭包","需要注意,运行上面基准测试时,传递了禁止内联的编译选项"],"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":["\"img\"","&&","&bytes.buffer{}","(n","(p","*pp","*pp)","*testing.b)","...","...interface{})","//","0","05","08","0;","1","1.简介2.作用3.如何使用4.性能差异5.在标准库中的应用1.简介","10000)","1020","10240","11987966","12","1246887","19:22:09","2.60ghz","2.作用","2022","3.510","3.如何使用","4.sync.pool","4.性能差异","5.在标准库中的应用","64","97.12","9750h",":=","=","===",">","@","[1024]byte","a)","a...)","accord","add","ag","alloc","allocations.","allocs/op","amd64","approxim","avoid","b/op","back","bench=.","benchmarkbuff","benchmarkbufferwithpool","benchmarkbufferwithpool(b","benchmem","buf","buffer","buffer,","bufferpool","byte","bytes.buff","cach","cap(p.buf)","console.log(\"plugin","contain","core(tm)","cost.","cpu","cpu:","darwin","darwin/amd64","data","e.target.tagnam","each","encoding/json。以","encountered.","entri","err","error","error)","fals","fmt","fmt.printf()的调用是非常频繁的,利用","format","format,","fprintf","fprintf()","fprintf(os.stdout,","fprintf(w","free","free()","func","func()","function(e){","gc","get()","gitbook该文章修订时间:","go","go1.17","goarch:","goos:","grab","hard","https://golang.org/issue/23199","i7","int,","int32","intel(r)","interface{}","interface{},因此需要类型转换。","invocation.","io.writer,","io.writer,printf()","json.unmarshal(buf,","limit","main/pool","make([]byte,","maximum","memori","n","n,","name","new","new(pp)","new(student)","new:","newprint","newprinter()","ns/op","number","obtain","ok","one.","os.stdout,相当于直接输出到标准输出。这里的","output.","p","p.doprintf(format,","p.error","p.fmt.init(&p.buf)","p.free()","p.panick","p.wraperr","pass","per","pkg:","place","pool","pool.","popup....\");document.onclick","power","pp","ppfree","ppfree.get().(*pp)","ppfree;","printer'","printf","printf()","printf(format","proper","properti","put()","remark","requir","return","reus","same","save","see","size","specifi","standard","state","store","string","string,","struct","stu","stu)","student","studentpool","studentpool.get().(*student)","studentpool.put(stu)","sync","sync.cach","sync.pool","sync.pool{","sync.pool。","sync.pool,例如","test","type","us","usag","var","variabl","version","w.","w.write(p.buf)","window.open(e.target.src,e.target.src)}img{cursor:pointer}","write","written","{","}","},","一句话总结:用来保存和复用临时对象,减少内存分配,降低","传的是","假设我们有一个“学生”结构体,并复用改结构体对象。","函数。","函数创建。","函数即可。对象池中没有对象时,将会调用","函数的参数是一个","则是在对象使用完毕后,放回到对象池。","包下的一个组件,可以作为保存临时取还对象的一个“池子”。个人觉得它的名字有一定的误导性,因为","包为例,我们看下其是如何使用","压力。","可以将暂时不用的对象缓存起来,待下次需要的时候直接使用,不用再次经过内存分配,复用对象的内存,减轻","和","复用","复用对象","复用对象,每次操作不再有内存分配。","字节缓冲器为例,利用","对于很多需要重复分配、回收内存的地方,sync.pool","对象池,每次只执行","对象能够极大地提升性能,减少内存占用,同时降低","对象,避免重复创建与回收内存,来看看对性能的提升效果。","带来一定的负担,严重的时候会引起","我们以","我们可以看一下最常用的标准格式化输出函数","操作,及做一次数据拷贝,耗时几乎可以忽略。而内存分配和回收的耗时占比较多,因此对程序整体的性能影响更大。从测试结果也可以看出,使用了","方法来获取和放回池子中。","是","是一个很好的选择。频繁地分配、回收内存会给","是一个更合适的名字。","是可伸缩的,同时也是并发安全的,其容量仅受限于内存的大小。存放在池中的对象如果不活跃了会被自动清理。","标准库也大量使用了","测试结果如下:","然后调用","用于从对象池中获取对象,因为返回值是","用的就是","的","的。","的使用方式非常简单,只需要实现","的压力,提升系统的性能。","的定义。","的毛刺,而","继续看","这个例子创建了一个","里装的对象可以被无通知地被回收,可能"],"第四篇:最佳性能/3.并发编程/1.关于锁.html":["!=","\"\"","\",\"","\"fmt\"","\"golang.org/x/sync/errgroup\"","\"img\"","\"main/list\"","\"sync\"","\"sync/atomic\"","%","&&","&node{","&withlocklist{}","(","(if","(l","(multipl",")","*lockfreelist)","*node","*testing.b)","*withlocklist)","+=","//","05","08","0;","1.1","1.2","1.关于锁","1.无锁化1.1","10","1000000","12","145690","1906","19:22:09","2.60ghz","2.减少锁竞争","20","20%)","20%)。","2022","2406","2462","3.1","3.2","3.3","3.优先使用共享锁而非互斥锁","303693","4124","432386","485917","498673","50","50%)","50%),rpct","532350","8,7,6,9,5,4,3,1,2,0","80","80%)","80%),rpct","8074","9,8,7,6,5,4,3,2,0,1","9.532","9750h",":=","=","==","===","@","_","amd64","any).","atom","atomic.valu","bench=.","benchmarkconcurwritemapwithlock(b","benchmarkconwritemapnoshard(b","benchmarkmutexreadmor","benchmarkmutexreadmore(b","benchmarkmutexrwequ","benchmarkmutexwritemor","benchmarkrwmutexreadmor","benchmarkrwmutexrwequ","benchmarkrwmutexwritemor","benchmarkwritewithlocklist(b","bigcach","break","c++11","ca","cache、freecach","concurwritemapwithlock","concurwritemapwithlock()","concurwritewithlocklist","concurwritewithlocklist(l","console.log(\"plugin","convert","conwritemapnoshard","conwritemapnoshard()","core(tm)","cpu","cpu:","cur","cur.next","cur.value)","dablelv@dablelv","darwin","defer","e.target.tagnam","errgroup.group","errgroup.group{}","fmt.sprintf(\"%v\",","format","free","func","function(e){","g","gitbook该文章修订时间:","go","goarch:","golang","goos:","gorouin","goroutin","head","head.(*node)","headnode,","i/o","i7","implement","import","int)","intel(r)","interface{}","interface{})","invok","l","l.head","l.head,","l.head.compareandswap(head,","l.head.load()","l.head.load().(*node)","l.mu.lock()","l.mu.unlock()","list","lock","lock()","lock)。在使用锁时,对获取锁的目的操作做了区分,一种是读操作,一种是写操作。因为同一时刻允许多个","locker","lockfreelist","lockfreelist)","m","m0","m1","m[i]","main","main/mutex","make(map[int]int)","make(map[int]struct{})","make(map[int]struct{},","map","map[int]int","map。","map。此时我们可以将每个协程拉取的结果写入到一个临时对象,这样便将并发地协程与同一个变量解绑,然后再将其汇聚到一起,这样便可以不用使用锁。即独立处理,然后合并。","mb0","method","mu","mu.lock()","mu.rlock()","mu.runlock()","mu.unlock()","mu0","mu1","mutex","n","n)","next","next:","nil","node","ns/op","num","num)","object","ok","operand","opmapwithmutex","opmapwithmutex(rpct","opmapwithrwmutex","opmapwithrwmutex(rpct","packag","pass","pkg:","popup....\");document.onclick","power","push","push(v","reactor","readers,","requir","return","rlock()","rlocker()","rpct","runlock()","s","singl","string","string()","string,","struct","struct{}{}","sync","sync.mutex","sync.mutex3.2","sync.mutex{}","sync.rwmutex","sync.rwmutex3.3","sync.rwmutex{}","sync.waitgroup","test","time.sleep(time.microsecond)","type","unlock","unlock()","v,","valu","value:","var","verb","wg","wg.wait()","window.open(e.target.src,e.target.src)}img{cursor:pointer}","withlocklist","withlocklist)","writer","{","}","}()","、go","一般来说,有如下几种情况:","上面的实现有几点需要注意一下:","下面再看一下链表","不分片写入一个","个协程并发写入","个协程并发写入链表","个数的增多而线性扩展。很多语言都提供","中的","串行无锁","串行无锁2.减少锁竞争3.优先使用共享锁而非互斥锁3.1","串行无锁是一种思想,就是避免对共享资源的并发访问,改为每个并发操作访问自己独占的资源,达到串行访问资源的效果,来避免使用锁。不同的场景有不同的实现方式。比如网络","为了模拟上面的情况,简单地写个示例程序,对比下性能。","为读操作占比。","互斥锁的作用是保证共享资源同一时刻只能被一个","以一个简单的示例,通过对map[uint64]struct{}分片前后并发写入的对比,来看下减少锁竞争带来的性能提升。","优秀的本地缓存组件","使用互斥锁读写","使用读写锁读写","入参","写锁与读锁是互斥的,如果存在读锁,写锁阻塞,如果存在写锁,读锁阻塞。","写锁之间是互斥的,存在写锁,其他写锁阻塞。","则阻塞等待。","利用硬件支持的原子操作可以实现无锁的数据结构,原子操作可以在","加写锁","加读锁","加锁","加锁是为了避免在并发环境下,同时访问共享资源产生的安全问题。那么,在并发环境下,是否必须加锁?答案是否定的。并非所有的并发都需要加锁。适当地降低锁的粒度,甚至采用无锁化的设计,更能提升并发能力。","包和","协程调用","占用了,其他的","占用,一个","原子操作(如","可以看出无锁版本比有锁版本性能高一些。","可以看到,通过对分共享资源的分片处理,减少了锁竞争,能明显地提高程序的并发性能。可以预见的是,随着分片粒度地变小,性能差距会越来越大。当然,分片粒度不是越小越好。因为每一个分片都要配一把锁,那么会带来很多额外的不必要的开销。可以选择一个不太大的值,在性能和花销上寻找一个平衡。","可见读多写少的场景,使用读写锁并发性能会更优。可以预见的是如果写占比更低,那么读写锁带的并发效果会更优。","和","场景下将单","多线程模型改为主从","多线程模型,避免对同一个消息队列锁读取。","大部分业务场景是读多写少,所以使用读写锁可有效提高对共享数据的访问效率。最坏的情况,只有写请求,那么读写锁顶多退化成互斥锁。所以优先使用读写锁而非互斥锁,可以提高程序的并发性能。","如果加锁无法避免,则可以采用分片的形式,减少对资源加锁的次数,这样也可以提高整体的性能。","如果并发无法做到无锁化,优先使用共享锁而非互斥锁。","将元素插入到链表的首部","并发写入有锁链表","库),可以用于实现无锁数据结构,如无锁链表。","循环多次尝试,直至成功。","性能对比","性能对比1.无锁化","我们以一个简单的线程安全单向链表的插入操作来看下无锁编程和普通加锁的区别。","我们分别对两种链表做一个并发写入的操作验证一下其功能。","我们可以通过在访问共享资源前前用","所谓互斥锁,指锁只能被一个","执行当前包下的所有基准测试,结果如下:","接下来,我们测试三种情景下,互斥锁和读写锁的性能差异。","提供了两个导出方法用来使用锁。","提供了两种锁,互斥锁(sync.mutex)和读写锁(sync.rwmutex),读写锁便是共享锁的一种具体实现。","提供了五个导出方法用来使用锁。","操作的基准测试,对比一下有锁与无锁的性能差异。","操作,即调用compareandswap()方法进行插入,如果插入失败则进行","方法对资源进行上锁,在访问共享资源后调用","方法来释放锁,也可以用","方法获得锁后,其他请求锁的协程都会阻塞在","方法,直到锁被释放。","无锁化主要有两种实现,无锁数据结构和串行无锁。","无锁单向链表","无锁单向链表的简单实现","无锁数据结构","无锁数据结构1.2","有锁","有锁单向链表","有锁单向链表的简单实现","有锁并发写入","有锁链表的字符串形式输出","标准库","比如","注意,多次运行上面的main()函数的结果可能会不相同,因为并发是无序的。","用来调节读操作的占比,来模拟读写占比不同的场景。rpct","的并发读写。","的情况下保证并发安全,并且它的性能也能做到随","的操作耗时很短,所以每次睡眠一微秒(百万分之一秒)来增加耗时,不然对共享资源的访问耗时,小于锁处理的本身耗时,那么使用读写锁带来的性能优化效果将变得不那么明显,甚至会降低性能。","看下二者的性能差异:","获取读锁,所以是一种共享锁。但写锁是互斥的。","获得。共享锁指可以同时被多个","获得的锁。","表示读写一致(各占","表示读多写少(读占","表示读少写多(读占","设为","语句来保证互斥锁一定会被解锁。在一个","读写一致(各占","读写锁是一种共享锁,也称之为多读单写锁","读写锁的存在是为了解决读多写少时的性能问题,读场景较多时,读写锁可有效地减少锁阻塞的时间。","读多写少(读占","读少写多(读占","读操作。","读锁之间不互斥,没有写锁的情况下,读锁是无阻塞的,多个协程可以同时获得读锁。","返回读锁,使用","这里我介绍的是后台微服务开发经常遇到的一种情况。我们经常需要并发拉取多方面的信息,汇聚到一个变量上。那么此时就存在对同一个变量互斥写入的情况。比如批量并发拉取用户信息写入到一个","这里需要注意的是,因为每次读写","进行","都实现了分片功能,每个分片一把锁,采用分片存储的方式减少加锁的次数从而提高整体性能。","释放写锁","释放读锁","释放锁","链表节点","首先根据互斥锁和读写锁分别实现对共享","(1)无锁单向链表实现时在插入时需要进行","(2)为了方便打印链表内容,实现一个string()方法遍历链表,且使用值作为接收者,避免打印对象指针时无法生效。"],"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":["\"fmt\"","\"github.com/panjf2000/ants\"","\"img\"","\"runtime\"","\"runtime/debug\"","\"sync\"","\"time\"","%v","%v\\n\",","&&","&wg)","(","(max",")","*sync.waitgroup)","+0x11b","+0x65","+0x72","+0x75","+0x8f","...","//","/users/dablelv/work/code/test/main.go:16","/usr/local/go/src/fmt/print.go:265","/usr/local/go/src/fmt/print.go:274","/usr/local/go/src/internal/poll/fd_mutex.go:147","/usr/local/go/src/internal/poll/fd_mutex.go:239","/usr/local/go/src/internal/poll/fd_unix.go:262","/usr/local/go/src/os/file.go:176","/usr/local/go/src/os/file_posix.go:49","0","05","08","0;","0s","0x0)","0x1,","0x1})","0x8,","0x8})","0xc0000ac008},","0xc12ea62f50})","0。","1","1)","1.1","1.2","1.协程数过多的问题1.1","1000","1000)","10000","10000)","100000","100000)","100ns,相对于线程的微秒级耗时切换,性能表现非常优秀,但是仍有开销。","1048575)","108668","1142025","1158408","19:22:09","1m","1,错误输出文件描述符为","2","2.0027m","2.2","2.限制协程数量","20","2022","2022/03/06","20:37:02","20:37:03","20:37:04","20:37:05","2^31","2k","2kb","2,标准输入的文件描述符为","3","3)","3.协程池化","30.9523m","4","4.小结","4gb/2kb","4gb,那么至多允许","5","6","7","8","9","997200n","99n",":=","=","===","[running]:","_","```go","```shell","ant","ants.newpool(10000)","ants,我们简单地使用其默认的协程池,直接将任务提交并发执行。默认协程池的缺省容量","cal()","ch","channel","channel,在没有被接收的情况下,至多发送","common","concurr","console.log(\"plugin","const","cost","cost,","cpu","createlargenumgoroutine(1000,","createlargenumgoroutine(10000,","createlargenumgoroutine(100000,","createlargenumgoroutine(num","debug.setgcpercent(","descriptor)来访问文件,标准输出的文件描述符为","e.target.tagnam","file","file/socket","fmt.fprintln({0x10c00e0,","fmt.printf","fmt.printf(\"gc","fmt.println(...)","func","function(e){","g","gc","gitbook该文章修订时间:","go","golang","goroutin","http","import","int,","internal/poll.(*fd).write(0xc0000ae060,","internal/poll.(*fd).writelock(...)","internal/poll.(*fdmutex).rwlock(0xc0000ae060,","jeffail/tunni","linux","main","main()","main.go","main.main.func1(0x0)","make(chan","mani","math.maxint32","math.maxint32。","newpool","num","oper","os.(*file).write(...)","os.(*file).write(0xc0000ac008,","p,","packag","panic:","panjf2000/ant","per","pool","popup....\");document.onclick","power","processor","run","runtime.gc()","runtime.gomaxprocs(1)","set","singl","size","socket","src/runtime/runtime2.go里面,我们可以找到","struct{},","struct。","sync.waitgroup","sync.waitgroup。","t","time.now()","time.since(t)","total","us","var","wg","wg.add(num)","wg.wait()","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","{0xc12cadf690,","{0xc12ea62f90,","}","~","上例中创建了缓冲区大小为","上面的例子只是简单地限制了协程开辟的数量。在此基础之上,基于对象复用的思想,我们可以重复利用已开辟的协程,避免协程的重复创建销毁,达到池化的效果。","上面的分析目的是为了尽可能地量化","下面以","个任务,达到了协程并发控制的目的。","个协程同时存在。那如果协程中还存在着其他需要分配内存的操作,那么允许并发执行的协程将会数量级地减少。","个协程的并发,2^31","个数字。","个消息则被阻塞。开启协程前,调用ch","为例,简单介绍其使用。","为并发而生。goroutin","亿个,每个协程内部几乎没有做什么事情。正常的情况下呢,这个程序会乱序输出","从日志中可以很容易看到,每秒钟只并发执行了","使用","保证","关闭gc改为手动执行","内存开销","写并发程序的时候随便起个成千上万的","函数引起的,fmt.printf","创建","前面的例子过于极端,一般情况下程序也不会无限开辟协程,旨在说明协程数量是有限制的,不能无限开辟。","协程池化,我们可以自己写一个协程池,但不推荐这么做。因为已经有成熟的开源库可供使用,无需再重复造轮子。目前有很多第三方库实现了协程池,可以很方便地用来控制协程的并发数量,比较受欢迎的有:","协程的代价","协程的代价2.2","压力)。","去执行另外一个协程,下面看一下协程之间切换的耗时。","只设置一个","可以利用信道","可见一次协程的切换,耗时大概在","呢?goroutin","如果我们开辟很多协程,但不会导致程序崩溃,可以吗?如果真要这么做的话,我们应该清楚地知道,协程虽然轻量,但仍有开销。","如果自定义协程池容量大小,可以调用","对单个","将格式化后的字符串打印到屏幕,即标准输出。在","并不是必须的,例如","开销","开销。我们可以利用runntime.gosched()让当前协程主动让出","当创建的","手动gc","控制并发处理的任务数量,就不需要","数量,复用协程,达到更高效执行任务的效果。","方法来实例化具有给定容量的池,如下所示:","时间上,协程调度也会有","是一个简单易用的高性能","是由","服务,每个请求天然是并发的,此时使用","来回收,如果无休止地创建大量","毫无压力,但当我们起十万、百万甚至千万个","池,实现了对大规模","的","的内存,在源码","的压力。","的并发操作个数超过了系统上限,这个报错是","的开销。虽然官方宣称用","的开销主要是三个方面:创建(占用内存)、调度(增加调度器负担)和删除(增加","的空间,那么假设计算机的内存是","的缓冲区大小来实现。","的调度管理和复用,允许使用者在开发并发程序的时候限制","程串行执行","程到运行结束,占用的内存资源是需要由","程势必会带来性能影响,甚至程序崩溃。所以,我们应尽可能的控制协程数量,如果有需要,请复用它。","程占用约","程后,势必会造成对","程序会像预期的那样顺利的运行吗?","程序崩溃","程序崩溃1.2","程数量越多,gc","程的结构定义type","程(goroutine)是由","空间上,一个","简而言之,系统的资源被耗尽了。","系统中,标准输出也可以视为文件,内核(kernel)利用文件描述符(fil","系统地资源是有限,协程是有代价的,为了保护程序,提高性能,我们应主动限制并发的协程数量。","约为","耗时越大。","虽然轻量,但天下没有免费的午餐,无休止地开辟大量","调度开销","轻量的开销将被放大。","运行时管理的轻量级线程。通过它我们可以轻松实现并发编程。但是当我们无限开辟协程时,将会遇到致命的问题。","运行时管理的轻量级线程,通过它我们可以轻松实现并发编程。go","运行的结果是程序直接崩溃了,关键的报错信息是:","运行结果如下:","运行输出:","这个例子实现了","这行代码去掉呢?那程序很可能会因为内存不足而崩溃。这一点更好理解,每个协程至少需要消耗","那如果我们将","限制协程数量","限制协程数量3.协程池化4.小结1.协程数过多的问题",",若缓存区满,则阻塞。协程任务结束,调用"],"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":["\"img\"","&&","&config{","(","(amd64/386),","(o","(to",")","*config","*once)","*testing.b)","//","0","0,","05","08","0;","1)","1.732","1.简介2.原理2.1","12","13339154","19:22:09","2.1","2.2","2.60ghz","2.原理","2022","3.006","3.使用","3.性能差异","670438965","87.46","9750h",":=","=","==","===","@","action","action.","allow","amd64","architectur","architectures.","argument","atomic.compareandswapuint32(&o.done,","atomic.loaduint32(&o.done)","atomic.storeuint32","atomic.storeuint32(&o.done,","back","be","bench=.","benchmarkreadconfig","benchmarkreadconfigwithonc","benchmarkreadconfigwithonce(b","ca","calcul","call","called,","calls,","captur","caus","compact","complete.","config","config.init(filename)","config.once.do(func()","consid","console.log(\"plugin","context","copi","core(tm)","cpu","cpu:","darwin","darwin/amd64","deadlock.","defer","delay","differ","do(),参数","do(f","do:","done","doslow(f","e.target.tagnam","each","even","exactli","execute.","f","f()","f,","f.","fall","fast","fewer","finished.","first","first'","func","func())","function","function(e){","futur","gitbook该文章修订时间:","given","go","go1.17","goarch:","goos:","gopath","gopath:","goroot","goroot:","guarante","guarantee:","here","hot","i7","immediately,","implement","incorrect","indic","init","initi","inlin","instanc","instruct","intel(r)","intend","invocation.","invok","liter","m","main/onc","mean","more","multipl","mutex","mutex,","necessari","new","niladic,","note:","ns/op","o.don","o.done,在热路径上是比较好理解的。如果","o.doslow(f)","o.m.lock()","o.m.unlock()","object","offset)","offset)。在机器码中,偏移量是随指令传递的附加值,cpu","ok","on","onc","once.","once.do(f)","once.do(func()","os.getenv(\"gopath\"),","os.getenv(\"goroot\"),","outlin","packag","panics,","pass","path","path.","path”","path)是程序非常频繁执行的一系列指令,sync.onc","perform","performed.","pkg:","place","popup....\");document.onclick","power","readconfig","readconfig()","readconfigwithonce()","requir","return","returned;","returns,","returns.","run","second","simultan","site.","slow","stackoverflow","string","struct","sync.onc","sync.once?","test","time","times,","two","type","uint32","until","us","use.","valu","var","version","wait","whether","window.open(e.target.src,e.target.src)}img{cursor:pointer}","winner","without","words,","{","}","})","“hot","下面看一下","中保证了","为什么放在第一个字段就能够减少指令呢?因为结构体第一个字段的地址和结构体的指针是相同的,如果是第一个字段,直接对结构体的指针解引用即可。如果是其他的字段,除了结构体指针外,还需要计算与第一个值的偏移(calcul","为什么是第一个字段。","为什么是第一个字段?","为什么是第一个字段?3.性能差异1.简介","仅提供了一个导出方法","从字段","保证函数只会被执行一次和多次执行,二者的性能差异。","做一个二次判断,来保证任务函数只会被执行一次,done","函数中,通过对成员变量","函数是当所在的","函数类似,但有区别。","初始化函数仅执行了一次,避免了多次重复初始化,在并发环境下很有用。","前有一段注释,说明了done","参考","变量仅初始化一次,初始化完成后驻留在内存里。","变量初始化过程中,所有读都被阻塞,直到初始化完成;","只会被修改一次。","可以在代码的任意位置初始化和调用,因此可以延迟到使用时再执行,并发场景下是线程安全的。","可能会被多个协程并发调用,为了提升性能(减少执行时间和内存占用),使用","在多数情况下,sync.onc","在热路径中,done","实现线程安全。果不其然,和上面的猜想一致。","实现非常简洁。do()","当且仅当第一次访问某个变量时,进行初始化(写);","我们以一个简单示例,来说明使用","我们看下二者的性能差异。","执行测试结果如下:","抛去大段的注释,可以看到","指令,也就是说,这样做能够提升性能。","放在第一个字段,能够减少","是","是一个比较好的方式。","是只会被执行一次的函数,一般为对象初始化函数。","标准库提供的使函数只执行一次的实现,常应用于单例模式,例如初始化配置、保持数据库连接等。作用与","源码","源码2.2","热路径(hot","用来保证函数只执行一次。要达到这个效果,需要做到两点:","的修改是一个互斥操作。在执行任务函数前,对","的判断,来决定是否执行传入的任务函数。执行任务函数前,通过锁保证任务函数的执行和","程的情况下,函数仍然只执行一次,比如锁。","线程安全,保障在多","结构,其有两个变量。使用","绝大部分场景都会访问","统计函数执行次数,使用锁","编译后的机器码指令更少,更直接,必然是能够提升性能的。","考虑一个简单的场景,函数","被用于控制变量的初始化,这个变量的读写满足如下三个条件:","计数器,统计函数执行次数;","避免重复执行","需要做一次偏移值与指针的加法运算,才能获取要访问的值的地址。因为,访问第一个字段的机器代码更紧凑,速度更快。","需要读取环境变量,并转换为对应的配置。环境变量在程序执行前已经确定,执行过程中不会发生改变。readconfig","首次被加载时执行,若迟迟未被使用,则既浪费了内存,又延长了程序加载时间。"],"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":["!condition()","!done","\"img\"","\"start","\"wake","$","&&","&cond{l:","(c","(often","*","*cond","*cond)","*mutex","*rwmutex),","*sync.cond)","...","//","05","08","1","1.简介2.使用场景3.实现原理4.使用示例5.注意事项1.简介","1s,一方面是模拟耗时,另一方面是确保前面的","2.使用场景","2022","22:45:54","3","3)","3.实现原理","3s,确保所有操作执行完毕。","4.使用","4.使用示例","5.注意事项",":=","=","===","all\")","allow","announc","any.","associ","assum","atom","awoken","befor","broadcast","broadcast()","c","c,","c.","c.broadcast()","c.checker.check()","c.l","c.l.lock()","c.l.unlock()","c.l,因为","c.wait()","call","call.","caller","case","ch","chan","chang","channel","channel,每个协程阻塞在一个","checker","close","close(ch)","cond","cond)","condit","console.log(\"plugin","copi","copycheck","correctli","done","dure","e.target.tagnam","each","event.","execut","execution,","fals","first","fmt.println(name,","func","function(e){","gitbook该文章修订时间:","go","goroutin","goroutine.","goroutine。","goroutine。如果其他协程调用了","goroutine。当共享资源的状态发生变化时,sync.cond","goroutine。当共享资源的状态发生变化的时候,sync.cond","goroutine,无需锁保护。","goroutine,无需锁保护。broadcast","held","hold","if,是因为当前协程被唤醒时,条件不一定符合要求,需要再次","implement","instead,","l","l.","later","lock","locker","locker)","locker。因为","loop:","l}","l(互斥锁","main()","main.go","make","make(chan","method.","mutex","mutex/rwmutex","mutex,或读写锁","new","newcond","newcond(l","nocopi","notifi","notifylist","notifylist.wait、notifylist.notifi","notifylist。如果这个队列被复制的话,那么就在并发场景下导致不同","observ","occurr","on","panic。","point","popup....\");document.onclick","power","read","read(\"reader1\",","read(\"reader2\",","read(\"reader3\",","read()","read(nam","reader","reader1","reader2","reader3","reading\")","rendezv","requir","resum","resumes,","return","returning.","returns.","run","runtime_notifylistadd(&c.notify)","runtime_notifylistnotifyall(&c.notify)","runtime_notifylistnotifyone(&c.notify)","runtime_notifylistwait(&c.notify,","rwmutex),当修改条件或者调用","select","signal","signal()","signal.","stackoverflow。","start","string)","string,","struct","struct{})","suspend","sync","sync.cond","sync.cond?","sync.mutex","sync.newcond(&sync.mutex{})","systems,","t","t)","time.sleep(time.second","time.sleep(time.second)","true","true。","true,调用","type","typic","unless","unlik","unlock","us","use.","var","variable,","wait","wait()","wait(),处于等待状态。main","wake","window.open(e.target.src,e.target.src)}img{cursor:pointer}","write","write(\"writer\",","write()","write(nam","writer","writing\")","{","}","上,由接收数据的协程在数据接收完毕后,逐个通知。总之,需要额外的复杂度来完成这件事。","不能被复制","不能被复制的原因,并不是因为其内部嵌套了","与","个","个等待条件变量","中内置一个","中的暂停了","为","主要原因是","主调对条件的检查,使用了","之间操作的","互斥锁","从等待队列中按照顺序唤醒,先进入等待队列,先被唤醒。","会一直阻塞。","会将主调加入条件变量的通知列表,需要修改条件变量,所以主调在调用","会自动释放锁","使用","依旧可以继续使用。这可能就是“全能”与“专精”的区别。","充当条件变量实现","内部是维护着一个","内部维护了一个等待队列,队列中存放的是所有在等待这个","函数前,需要先获得条件变量的成员锁,原因是需要互斥地变更条件变量的等待队列。在","函数最后暂停了","创建","前要加锁","前需要对条件变量进行上锁,主调加入条件变量的通知列表后再解锁。","加锁,并且继续执行","协程都执行到","即多个","只唤醒任意","可以实现,看起来代码更加简洁,那么","可以用来唤醒一个或所有因等待条件变量而阻塞的","可以用来通知等待条件发生而阻塞的","可以用来通知被阻塞的","可以通过","后会进行解锁操作,避免重复解锁引发","后面的代码。","和","唤醒了该协程,那么","唤醒所有等待条件变量","唤醒所有等待的协程。","唤醒顺序","基于互斥锁/读写锁,那它和互斥锁的区别是什么呢?","定位于同步,用于一发多收的场景。虽然","定位于通信,用于一发一收的场景,sync.cond","实例时,需要关联一个锁。","实例都会关联一个锁","实际上","实际上,我们可以使用无缓冲","就能搞定了。","已无法继续使用,而","并不是同一个,这会导致出现有些","我们实现一个简单的例子,三个协程调用","我们想象一个非常简单的场景:","或","或互斥锁,那么只能有一个协程可以等待,并读取到数据,没办法通知其他的协程也读取数据。","执行runtime_notifylistwait会挂起调用者所在的","指针复制是没有问题的。","指针,对于","接收数据,接收完成后,将","操作来达到一发多收的效果,但是","方法在结束阻塞时,会重新给","方法时,必须加锁。","既然","时传入的","是基于互斥锁/读写锁实现的条件变量,用来协调想要访问共享资源的那些","是有区别的,channel","更多关于","有一个协程在异步地接收数据,剩下的多个协程必须等待这个协程接收完数据,才能读取到正确的数据。在这种情况下,如果单纯使用","来实现。","每个","用于阻塞调用者,等待通知。","用来协调想要访问共享资源的","用来解决这类问题。","的","的区别?","的四个成员函数定义如下:","的存在还有必要吗?","的定义如下:","的打印顺序是随机的。","的讨论可参考","程同步。通过","程间的同步。","程,以此来实现多个","程,即保存了一个通知列表。sync.cond","等待下次被唤醒。为了保险起,使用","等待通知,直到","等待,一个","等待,另一个协程调用","经常用在多个","结构来接收通知就行了。","置为","而非","能够确保被唤醒后条件一定符合后,再执行后续的代码。","表示广播通知,其他的","语言在标准库","调用","运行结果如下,注意","运行输出如下,注意","返回前,会重新上锁。重新上锁的原因是主调在","还是以上面给出的同步示例,这里换作","这个时候,就需要有个全局的变量来标志第一个协程数据是否接受完毕,剩下的协程,反复检查该变量的值,直到满足要求。或者创建多个","通常用来保护共享的临界资源,条件变量","通知协程","通知所有等待的协程。","通知队列","通知(事件发生)的场景。如果是一个通知,一个等待,使用互斥锁或","阻塞等待的条件。"],"参考文献.html":["\"img\"","&&","05","09","2022","22:37:19","=","===","advic","atom","cheney","code","comment","console.log(\"plugin","dave","e.target.tagnam","function(e){","gitbook该文章修订时间:","github.com/golang","github.com/ub","github/dgryski/go","go","go/guid","golang","golang内存分配逃逸分析","golang梦工厂","gopherzhang","go语言最佳实践go","go语言的内存逃逸分析","high","layout","perfbook","perform","popup....\");document.onclick","power","proverb","readabl","review","standards/project","stefno","window.open(e.target.src,e.target.src)}img{cursor:pointer}","workshop","|","代码风格","功能设计","博客园","参考文献","最佳性能","极客兔兔","深度解密go","的原理与使用场景","考点汇总","语言之sync.pool","语言高性能编程","项目布局代码风格功能设计最佳性能项目布局"]},"length":44},"tokenStore":{"root":{"0":{"1":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}},"5":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}},"8":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"9":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.013888888888888888},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.006016847172081829},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.009884678747940691},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":1.6851851851851851},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.018808777429467086},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.007220216606498195},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.018223234624145785},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},")":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.007220216606498195},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.015945330296127564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"}":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},",":{"docs":{},"但":{"docs":{},"不":{"docs":{},"够":{"docs":{},"直":{"docs":{},"观":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"更":{"docs":{},"加":{"docs":{},"直":{"docs":{},"观":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},".":{"2":{"5":{"1":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{}},"docs":{}},"docs":{},"导":{"docs":{},"语":{"docs":{"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":10}}}}},";":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.015945330296127564},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.013740458015267175},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.011389521640091117},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"x":{"0":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"1":{"docs":{},"}":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}},"8":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"}":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"docs":{},"c":{"0":{"0":{"0":{"0":{"docs":{},"a":{"docs":{},"c":{"0":{"0":{"8":{"docs":{},"}":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"docs":{}},"docs":{}},"docs":{}}}},"docs":{}},"docs":{}},"docs":{}},"1":{"2":{"docs":{},"e":{"docs":{},"a":{"6":{"2":{"docs":{},"f":{"5":{"0":{"docs":{},"}":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}},"docs":{}},"docs":{}}},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"s":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"1":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{}},"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"n":{"docs":{},"s":{"docs":{},",":{"docs":{},"相":{"docs":{},"对":{"docs":{},"于":{"docs":{},"线":{"docs":{},"程":{"docs":{},"的":{"docs":{},"微":{"docs":{},"秒":{"docs":{},"级":{"docs":{},"耗":{"docs":{},"时":{"docs":{},"切":{"docs":{},"换":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"表":{"docs":{},"现":{"docs":{},"非":{"docs":{},"常":{"docs":{},"优":{"docs":{},"秀":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"仍":{"docs":{},"有":{"docs":{},"开":{"docs":{},"销":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"2":{"0":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"4":{"0":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.009404388714733543}}}},"docs":{}},"4":{"8":{"5":{"7":{"5":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"8":{"6":{"6":{"8":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},":":{"4":{"8":{"docs":{},":":{"4":{"2":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},".":{"docs":{},"函":{"docs":{},"数":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":10}}}}},"、":{"1":{"0":{"0":{"docs":{},"、":{"1":{"0":{"0":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"1":{"4":{"2":{"0":{"2":{"5":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"5":{"8":{"4":{"0":{"8":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"9":{"8":{"7":{"9":{"6":{"6":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{},".":{"docs":{},"单":{"docs":{},"元":{"docs":{},"测":{"docs":{},"试":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":10}}}}}}}},"2":{"2":{"6":{"8":{"6":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"4":{"6":{"8":{"8":{"7":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.01567398119122257},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.018223234624145785},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.00916030534351145},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},".":{"docs":{},"杂":{"docs":{},"项":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":10}}}}}},"3":{"0":{"2":{"6":{"1":{"9":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"3":{"3":{"9":{"1":{"5":{"4":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"4":{"2":{"9":{"4":{"7":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}}}},"4":{"2":{"7":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"4":{"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}}}},"5":{"6":{"9":{"0":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{}},"docs":{},".":{"3":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}}},"8":{"9":{"7":{"2":{"8":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"5":{"1":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"9":{"0":{"docs":{},")":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"您":{"docs":{},"比":{"docs":{},"较":{"docs":{},"两":{"docs":{},"个":{"docs":{},"时":{"docs":{},"刻":{"docs":{},",":{"docs":{},"则":{"docs":{},"差":{"docs":{},"异":{"docs":{},"将":{"docs":{},"不":{"docs":{},"包":{"docs":{},"括":{"docs":{},"这":{"docs":{},"两":{"docs":{},"个":{"docs":{},"时":{"docs":{},"刻":{"docs":{},"之":{"docs":{},"间":{"docs":{},"可":{"docs":{},"能":{"docs":{},"发":{"docs":{},"生":{"docs":{},"的":{"docs":{},"闰":{"docs":{},"秒":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"2":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"7":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}}},"docs":{},":":{"4":{"0":{"docs":{},":":{"0":{"4":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}},"docs":{}},"docs":{}}},"3":{"docs":{},":":{"5":{"1":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"docs":{}},"docs":{}}},"6":{"docs":{},":":{"4":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}}},"7":{"docs":{},":":{"3":{"7":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"docs":{}},"docs":{}}},"docs":{}},"5":{"0":{"docs":{},":":{"1":{"7":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"docs":{}},"docs":{}}},"4":{"docs":{},":":{"2":{"5":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"6":{"5":{"2":{"1":{"4":{"6":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"6":{"docs":{},".":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},"docs":{}}},"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},":":{"0":{"0":{"docs":{},":":{"3":{"7":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}},"docs":{}},"docs":{}}},"docs":{}},"5":{"6":{"docs":{},":":{"5":{"0":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"7":{"0":{"8":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"4":{"6":{"6":{"4":{"8":{"6":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{},":":{"0":{"3":{"docs":{},":":{"0":{"0":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},".":{"5":{"3":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"8":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},"docs":{}},"docs":{}}},"8":{"6":{"1":{"2":{"7":{"2":{"8":{"8":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456}}},"9":{"0":{"6":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{},":":{"2":{"2":{"docs":{},":":{"0":{"9":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}},"docs":{}}},"docs":{}},"5":{"4":{"docs":{},":":{"1":{"4":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.007220216606498195},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.006589785831960461},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":3.3619047619047615},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":1.7037037037037035},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.010344827586206896},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},".":{"1":{"3":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"2":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"3":{"7":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}},"docs":{}},"docs":{}},"5":{"8":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}},"docs":{}},"docs":{}},"7":{"3":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}},"docs":{}},"8":{"1":{"3":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"4":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{}},"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}},"前":{"docs":{},"言":{"2":{"docs":{},".":{"docs":{},"项":{"docs":{},"目":{"docs":{},"布":{"docs":{},"局":{"2":{"docs":{},".":{"1":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}}},"docs":{}}}}}}},"docs":{}}},"格":{"docs":{},"式":{"docs":{},"化":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":10}}}}},"基":{"docs":{},"本":{"docs":{},"类":{"docs":{},"型":{"docs":{},"偏":{"docs":{},"执":{"docs":{},"通":{"docs":{},"用":{"docs":{},"场":{"docs":{},"景":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"2":{"docs":{},".":{"docs":{},"单":{"docs":{},"一":{"docs":{},"职":{"docs":{},"责":{"docs":{},"包":{"docs":{},"&":{"docs":{},"文":{"docs":{},"件":{"docs":{},"函":{"docs":{},"数":{"3":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"4":{"docs":{},".":{"docs":{},"应":{"docs":{},"用":{"docs":{},"服":{"docs":{},"务":{"5":{"docs":{},".":{"docs":{},"常":{"docs":{},"用":{"docs":{},"工":{"docs":{},"具":{"1":{"docs":{},".":{"docs":{},"基":{"docs":{},"本":{"docs":{},"类":{"docs":{},"型":{"docs":{},"偏":{"docs":{},"执":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}},"docs":{}}}}}}},"docs":{}}}}}}},"docs":{}}}}}}}}}}}},"docs":{}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"指":{"docs":{},"向":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":3.333333333333333}}}}}},"占":{"docs":{},"内":{"docs":{},"存":{"docs":{},"空":{"docs":{},"间":{"2":{"docs":{},".":{"docs":{},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"的":{"docs":{},"作":{"docs":{},"用":{"2":{"docs":{},".":{"1":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},"docs":{}}},"docs":{}}}}}}}}}},"docs":{}}}}}}},"方":{"docs":{},"法":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"为":{"docs":{},"值":{"docs":{},"和":{"docs":{},"指":{"docs":{},"针":{"docs":{},"的":{"docs":{},"区":{"docs":{},"别":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":10}}}}}}}}}}}}}}},"将":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}},"零":{"docs":{},"值":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":3.333333333333333}}}},"错":{"docs":{},"误":{"docs":{},"处":{"docs":{},"理":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":10}}}},"类":{"docs":{},"型":{"2":{"docs":{},".":{"docs":{},"错":{"docs":{},"误":{"docs":{},"包":{"docs":{},"装":{"1":{"docs":{},".":{"docs":{},"错":{"docs":{},"误":{"docs":{},"类":{"docs":{},"型":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}},"docs":{}}}}}}},"docs":{}}}}},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":3.333333333333333}},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"节":{"docs":{},"省":{"docs":{},"内":{"docs":{},"存":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":10}}}}}}}}}}}},"避":{"docs":{},"免":{"docs":{},"使":{"docs":{},"用":{"docs":{},"可":{"docs":{},"变":{"docs":{},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":10}}}}}}}}}}}},"优":{"docs":{},"先":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}}}}}},"反":{"docs":{},"射":{"docs":{},"虽":{"docs":{},"好":{"docs":{},",":{"docs":{},"切":{"docs":{},"莫":{"docs":{},"贪":{"docs":{},"杯":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":10}}}}}}}}}}},"指":{"docs":{},"定":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308}}}},"行":{"docs":{},"内":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"拼":{"docs":{},"接":{"2":{"docs":{},".":{"docs":{},"非":{"docs":{},"行":{"docs":{},"内":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"拼":{"docs":{},"接":{"1":{"docs":{},".":{"docs":{},"行":{"docs":{},"内":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"拼":{"docs":{},"接":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}},"docs":{}}}}}}}}}}},"docs":{}}}}}}}},"[":{"docs":{},"]":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"2":{"docs":{},".":{"docs":{},"[":{"docs":{},"]":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"3":{"docs":{},".":{"docs":{},"[":{"docs":{},"]":{"docs":{},"*":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"4":{"docs":{},".":{"docs":{},"小":{"docs":{},"结":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}},"docs":{}}}}}}}}}}}},"docs":{}}}}}}}}}}}}},"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}},"截":{"docs":{},"取":{"docs":{},"法":{"docs":{},"(":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},")":{"2":{"docs":{},".":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"法":{"docs":{},"(":{"docs":{},"不":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},")":{"3":{"docs":{},".":{"docs":{},"移":{"docs":{},"位":{"docs":{},"法":{"docs":{},"(":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},")":{"4":{"docs":{},".":{"docs":{},"性":{"docs":{},"能":{"docs":{},"对":{"docs":{},"比":{"5":{"docs":{},".":{"docs":{},"小":{"docs":{},"结":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}},"docs":{}}}}}}},"docs":{}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}},"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"为":{"docs":{},"什":{"docs":{},"么":{"docs":{},"需":{"docs":{},"要":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"2":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}},"docs":{}}}}}}}}}},"局":{"docs":{},"部":{"docs":{},"切":{"docs":{},"片":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"确":{"docs":{},"定":{"docs":{},"长":{"docs":{},"度":{"docs":{},"或":{"docs":{},"容":{"docs":{},"量":{"2":{"docs":{},".":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}},"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}},"简":{"docs":{},"介":{"2":{"docs":{},".":{"docs":{},"作":{"docs":{},"用":{"3":{"docs":{},".":{"docs":{},"如":{"docs":{},"何":{"docs":{},"使":{"docs":{},"用":{"4":{"docs":{},".":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"5":{"docs":{},".":{"docs":{},"在":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{},"中":{"docs":{},"的":{"docs":{},"应":{"docs":{},"用":{"1":{"docs":{},".":{"docs":{},"简":{"docs":{},"介":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"docs":{}}}}}}}}}}},"docs":{}}}}}}},"docs":{}}}}}}},"docs":{}}},"原":{"docs":{},"理":{"2":{"docs":{},".":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}}},"docs":{}}},"使":{"docs":{},"用":{"docs":{},"场":{"docs":{},"景":{"3":{"docs":{},".":{"docs":{},"实":{"docs":{},"现":{"docs":{},"原":{"docs":{},"理":{"4":{"docs":{},".":{"docs":{},"使":{"docs":{},"用":{"docs":{},"示":{"docs":{},"例":{"5":{"docs":{},".":{"docs":{},"注":{"docs":{},"意":{"docs":{},"事":{"docs":{},"项":{"1":{"docs":{},".":{"docs":{},"简":{"docs":{},"介":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"docs":{}}}}}}},"docs":{}}}}}}},"docs":{}}}}}}},"docs":{}}}}}}},"docs":{}}},"关":{"docs":{},"于":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":10}}}}},"无":{"docs":{},"锁":{"docs":{},"化":{"1":{"docs":{},".":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}}},"docs":{}}}},"协":{"docs":{},"程":{"docs":{},"数":{"docs":{},"过":{"docs":{},"多":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"1":{"docs":{},".":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}}},"docs":{}}}}}}}}}},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.018518518518518517}}},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"魔":{"docs":{},"法":{"docs":{},"数":{"docs":{},"字":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"我":{"docs":{},"们":{"docs":{},"要":{"docs":{},"删":{"docs":{},"除":{"docs":{},"所":{"docs":{},"有":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}},"错":{"docs":{},"误":{"docs":{},"输":{"docs":{},"出":{"docs":{},"文":{"docs":{},"件":{"docs":{},"描":{"docs":{},"述":{"docs":{},"符":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}},"m":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"b":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}},"s":{"docs":{},",":{"docs":{},"一":{"docs":{},"方":{"docs":{},"面":{"docs":{},"是":{"docs":{},"模":{"docs":{},"拟":{"docs":{},"耗":{"docs":{},"时":{"docs":{},",":{"docs":{},"另":{"docs":{},"一":{"docs":{},"方":{"docs":{},"面":{"docs":{},"是":{"docs":{},"确":{"docs":{},"保":{"docs":{},"前":{"docs":{},"面":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}},"2":{"0":{"0":{"0":{"docs":{},"}":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}},"9":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}},"docs":{}},"2":{"2":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},"/":{"0":{"3":{"docs":{},"/":{"0":{"6":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.022779043280182234}}},"docs":{}},"2":{"7":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},".":{"9":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},"%":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}},":":{"3":{"7":{"docs":{},":":{"0":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}},"3":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}},"4":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}},"5":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"1":{"2":{"4":{"2":{"3":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"3":{"0":{"7":{"0":{"6":{"4":{"3":{"3":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"6":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}}},"9":{"1":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"5":{"2":{"1":{"2":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}},":":{"1":{"8":{"docs":{},":":{"1":{"4":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}},"docs":{}},"3":{"2":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}},"docs":{}},"docs":{}}},"docs":{}},"4":{"4":{"docs":{},":":{"0":{"6":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}}}},"2":{"1":{"7":{"6":{"3":{"9":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"4":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"9":{"0":{"3":{"7":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},":":{"1":{"2":{"docs":{},":":{"5":{"2":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}},"docs":{}},"docs":{}}},"9":{"docs":{},":":{"5":{"4":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}},"docs":{}},"docs":{}}},"docs":{}},"2":{"3":{"docs":{},":":{"3":{"5":{"docs":{"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456}}},"docs":{}},"docs":{}}},"docs":{}},"3":{"7":{"docs":{},":":{"1":{"9":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}},"docs":{}},"docs":{}}},"docs":{}},"4":{"5":{"docs":{},":":{"5":{"4":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"3":{"3":{"docs":{},")":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}}}},"6":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}}},"9":{"docs":{},".":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}}},"docs":{}},"4":{"0":{"6":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"6":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}},"docs":{}},"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.018018018018018018}}},"5":{"8":{"6":{"6":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"7":{"1":{"4":{"1":{"5":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"6":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"2":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},".":{"4":{"0":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}}},"8":{"6":{"1":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"9":{"6":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.017241379310344827},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},".":{"0":{"0":{"2":{"7":{"docs":{},"m":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}},"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}},"1":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"2":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"3":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},"4":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"5":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"6":{"0":{"docs":{},"g":{"docs":{},"h":{"docs":{},"z":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"7":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"9":{"6":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}},"docs":{}},"docs":{}},"docs":{},"项":{"docs":{},"目":{"docs":{},"布":{"docs":{},"局":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"代":{"docs":{},"码":{"docs":{},"行":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":10}}}}},"单":{"docs":{},"一":{"docs":{},"职":{"docs":{},"责":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}},"编":{"docs":{},"译":{"docs":{},"期":{"docs":{},"验":{"docs":{},"证":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":3.333333333333333}}}}}}},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":3.333333333333333}},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":3.333333333333333}}}}},"场":{"docs":{},"景":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"将":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":1.6666666666666665}}}}}}}}},"错":{"docs":{},"误":{"docs":{},"包":{"docs":{},"装":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}},"避":{"docs":{},"免":{"docs":{},"在":{"docs":{},"公":{"docs":{},"共":{"docs":{},"结":{"docs":{},"构":{"docs":{},"中":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"类":{"docs":{},"型":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":10}}}}}}}}}}}},"重":{"docs":{},"复":{"docs":{},"转":{"docs":{},"换":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"到":{"docs":{},"字":{"docs":{},"节":{"docs":{},"切":{"docs":{},"片":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":10}}}}}}}}}}}}}}}},"少":{"docs":{},"量":{"docs":{},"的":{"docs":{},"重":{"docs":{},"复":{"docs":{},"不":{"docs":{},"比":{"docs":{},"反":{"docs":{},"射":{"docs":{},"差":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}},"指":{"docs":{},"定":{"docs":{},"切":{"docs":{},"片":{"docs":{},"容":{"docs":{},"量":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}},"非":{"docs":{},"行":{"docs":{},"内":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"拼":{"docs":{},"接":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}},"[":{"docs":{},"]":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}},"拷":{"docs":{},"贝":{"docs":{},"法":{"docs":{},"(":{"docs":{},"不":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"的":{"docs":{},"作":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":5}}}}}}}},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"作":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}},"减":{"docs":{},"少":{"docs":{},"锁":{"docs":{},"竞":{"docs":{},"争":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"限":{"docs":{},"制":{"docs":{},"协":{"docs":{},"程":{"docs":{},"数":{"docs":{},"量":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":10}}}}}}}},"原":{"docs":{},"理":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"^":{"3":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{},"b":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}},"}":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},",":{"docs":{},"从":{"docs":{},"第":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}},"因":{"docs":{},"此":{"docs":{},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"空":{"docs":{},"出":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}},"标":{"docs":{},"准":{"docs":{},"输":{"docs":{},"入":{"docs":{},"的":{"docs":{},"文":{"docs":{},"件":{"docs":{},"描":{"docs":{},"述":{"docs":{},"符":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}},"k":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"b":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"3":{"0":{"0":{"7":{"9":{"7":{"8":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"3":{"6":{"9":{"3":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{}},"docs":{}},"7":{"4":{"8":{"4":{"9":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"9":{"1":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{},".":{"9":{"5":{"2":{"3":{"docs":{},"m":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"1":{"5":{"4":{"3":{"9":{"1":{"6":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"6":{"1":{"3":{"1":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"6":{"3":{"5":{"2":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"2":{"5":{"1":{"9":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}},"3":{"3":{"9":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.013513513513513514}}},"docs":{}},"docs":{}},"4":{"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}}}},"5":{"9":{"docs":{},".":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}}},"docs":{}},"6":{"1":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"5":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"docs":{},".":{"3":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}}},"7":{"docs":{},".":{"3":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}}},"8":{"0":{"6":{"2":{"6":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"7":{"9":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{}},"9":{"docs":{},".":{"5":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}}},"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.009111617312072893},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},".":{"0":{"0":{"6":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{},"g":{"docs":{},"h":{"docs":{},"z":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}},"docs":{},"}":{"docs":{},"[":{"docs":{},"i":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}},"1":{"4":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.00510204081632653}}},"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"2":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"3":{"7":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"5":{"1":{"0":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"docs":{}},"docs":{}},"7":{"4":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"8":{"0":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"6":{"5":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"9":{"0":{"8":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{},"小":{"docs":{},"结":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"的":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"好":{"docs":{},"过":{"docs":{},"引":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":10}}}}},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}},"在":{"docs":{},"边":{"docs":{},"界":{"docs":{},"处":{"docs":{},"拷":{"docs":{},"贝":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":2.5}}}}}}}},"不":{"docs":{},"要":{"docs":{},"在":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":3.333333333333333}}}}},"慎":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"指":{"docs":{},"定":{"docs":{},"容":{"docs":{},"器":{"docs":{},"容":{"docs":{},"量":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":10}}}}}}}},"[":{"docs":{},"]":{"docs":{},"*":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}},"移":{"docs":{},"位":{"docs":{},"法":{"docs":{},"(":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"合":{"docs":{},"理":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"减":{"docs":{},"少":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"将":{"docs":{},"变":{"docs":{},"量":{"docs":{},"限":{"docs":{},"制":{"docs":{},"在":{"docs":{},"栈":{"docs":{},"上":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":10}}}}}}}}}}}}}}},"如":{"docs":{},"何":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"优":{"docs":{},"先":{"docs":{},"使":{"docs":{},"用":{"docs":{},"共":{"docs":{},"享":{"docs":{},"锁":{"docs":{},"而":{"docs":{},"非":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}},"协":{"docs":{},"程":{"docs":{},"池":{"docs":{},"化":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":3.333333333333333}}}},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"实":{"docs":{},"现":{"docs":{},"原":{"docs":{},"理":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"s":{"docs":{},",":{"docs":{},"确":{"docs":{},"保":{"docs":{},"所":{"docs":{},"有":{"docs":{},"操":{"docs":{},"作":{"docs":{},"执":{"docs":{},"行":{"docs":{},"完":{"docs":{},"毕":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}},"4":{"0":{"4":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}},"docs":{},".":{"6":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}}},"1":{"2":{"4":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{}},"2":{"3":{"docs":{},".":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}}},"docs":{}},"3":{"2":{"0":{"4":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"3":{"8":{"6":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{}},"6":{"8":{"7":{"3":{"8":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"4":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"6":{"1":{"6":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"4":{"9":{"7":{"4":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"8":{"5":{"9":{"1":{"7":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"9":{"8":{"6":{"7":{"3":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.041379310344827586},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},".":{"4":{"0":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{},"依":{"docs":{},"赖":{"docs":{},"管":{"docs":{},"理":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":10}}}}}},"应":{"docs":{},"用":{"docs":{},"服":{"docs":{},"务":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}},"枚":{"docs":{},"举":{"docs":{},"从":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":3.333333333333333}}}}},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"方":{"docs":{},"式":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":10}}}}}}}}},"小":{"docs":{},"结":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"性":{"docs":{},"能":{"docs":{},"对":{"docs":{},"比":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}},"差":{"docs":{},"异":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"与":{"docs":{},"空":{"docs":{},"数":{"docs":{},"组":{"docs":{},"对":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"的":{"docs":{},"影":{"docs":{},"响":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"使":{"docs":{},"用":{"docs":{},"确":{"docs":{},"定":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":5}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":3.333333333333333}},"示":{"docs":{},"例":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},",":{"docs":{},"d":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}},"docs":{}}}}},"必":{"docs":{},"须":{"docs":{},"空":{"docs":{},"出":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}},"此":{"docs":{},"时":{"docs":{},",":{"docs":{},"内":{"docs":{},"存":{"docs":{},"已":{"docs":{},"经":{"docs":{},"是":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"的":{"docs":{},",":{"docs":{},"从":{"docs":{},"第":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}},"g":{"docs":{},"b":{"docs":{},"/":{"2":{"docs":{},"k":{"docs":{},"b":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"docs":{}},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"至":{"docs":{},"多":{"docs":{},"允":{"docs":{},"许":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"5":{"0":{"0":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"4":{"3":{"3":{"2":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"7":{"6":{"2":{"5":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},".":{"7":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"%":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},",":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}},"1":{"9":{"4":{"7":{"2":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"3":{"2":{"3":{"5":{"0":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{}},"docs":{}},"4":{"docs":{},".":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}}},"5":{"7":{"0":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"4":{"docs":{},".":{"6":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}}},"5":{"6":{"4":{"3":{"6":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{}},"docs":{},",":{"8":{"9":{"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}},"docs":{}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}},"6":{"0":{"6":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"7":{"8":{"docs":{},".":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}}},"docs":{}},"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},".":{"0":{"9":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"4":{"2":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":10}}}}},"常":{"docs":{},"用":{"docs":{},"工":{"docs":{},"具":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}},"[":{"docs":{},"]":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":5}}}}}}}}}}}},"小":{"docs":{},"结":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"在":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{},"中":{"docs":{},"的":{"docs":{},"应":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}},"注":{"docs":{},"意":{"docs":{},"事":{"docs":{},"项":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"}":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}},"6":{"0":{"0":{"7":{"9":{"0":{"0":{"3":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"3":{"9":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}}},"docs":{}},"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},")":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517}}}},"5":{"docs":{},".":{"0":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}}},"6":{"5":{"3":{"4":{"1":{"8":{"9":{"6":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"9":{"3":{"0":{"6":{"7":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"7":{"0":{"4":{"3":{"8":{"9":{"6":{"5":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"9":{"2":{"4":{"0":{"0":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},".":{"4":{"5":{"4":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{},"错":{"docs":{},"误":{"docs":{},"处":{"docs":{},"理":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":10}}}}}},"切":{"docs":{},"片":{"docs":{},"删":{"docs":{},"除":{"docs":{},"指":{"docs":{},"定":{"docs":{},"元":{"docs":{},"素":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":10}}}}}}}}}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"7":{"0":{"3":{"2":{"9":{"2":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"6":{"3":{"8":{"9":{"2":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"4":{"8":{"4":{"6":{"7":{"9":{"7":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"5":{"2":{"0":{"0":{"1":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},"7":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"6":{"2":{"docs":{},".":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}}},"docs":{}},"7":{"3":{"6":{"3":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},".":{"docs":{},"注":{"docs":{},"释":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":10}}}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"8":{"0":{"0":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}},"7":{"4":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"%":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},",":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}},"1":{"9":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.00683371298405467}}},"docs":{}},"docs":{},".":{"9":{"6":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{}}},"2":{"4":{"9":{"4":{"6":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"3":{"2":{"4":{"1":{"8":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"5":{"docs":{},".":{"2":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}}},"7":{"2":{"8":{"docs":{},")":{"docs":{},",":{"docs":{},"也":{"docs":{},"不":{"docs":{},"在":{"docs":{},"计":{"docs":{},"算":{"docs":{},"中":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"闰":{"docs":{},"秒":{"docs":{},"(":{"docs":{},"i":{"docs":{},"s":{"docs":{},"s":{"docs":{},"u":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}},"docs":{}},"8":{"2":{"4":{"6":{"4":{"9":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{},".":{"4":{"6":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}},"docs":{}}},"9":{"3":{"docs":{},".":{"6":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}}},"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}},"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.03125},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.050314465408805034},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.04332129963898917},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.020689655172413793},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},",":{"7":{"docs":{},",":{"6":{"docs":{},",":{"9":{"docs":{},",":{"5":{"docs":{},",":{"4":{"docs":{},",":{"3":{"docs":{},",":{"1":{"docs":{},",":{"2":{"docs":{},",":{"0":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},".":{"docs":{},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":10}}}}}},"9":{"7":{"0":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"5":{"0":{"docs":{},"h":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"docs":{}},"8":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}}},"docs":{},".":{"1":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"docs":{}},"docs":{}}},"9":{"7":{"2":{"0":{"0":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},".":{"5":{"3":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{}},"docs":{},"流":{"docs":{},"程":{"docs":{},"控":{"docs":{},"制":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":10}}}}}}},"}":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},",":{"8":{"docs":{},",":{"7":{"docs":{},",":{"6":{"docs":{},",":{"5":{"docs":{},",":{"4":{"docs":{},",":{"3":{"docs":{},",":{"2":{"docs":{},",":{"0":{"docs":{},",":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{},"\"":{"0":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},"1":{"9":{"2":{"docs":{},".":{"0":{"docs":{},".":{"2":{"docs":{},".":{"0":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498}}}},":":{"8":{"0":{"0":{"0":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},"\"":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.006578947368421052}}}},"docs":{}}},"docs":{}},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.012269938650306749}}}},":":{"8":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}},"docs":{}}},"8":{"0":{"0":{"0":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498}}}}},"docs":{}},"docs":{}},"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.012269938650306749}}}}},"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.034482758620689655},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01845018450184502},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"i":{"docs":{},"m":{"docs":{},"g":{"docs":{},"\"":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"r":{"docs":{},"s":{"docs":{},"p":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.022988505747126436}}}},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"\"":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"/":{"docs":{},"d":{"docs":{},"e":{"docs":{},"b":{"docs":{},"u":{"docs":{},"g":{"docs":{},"\"":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},",":{"docs":{},"j":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{},"s":{"docs":{},"p":{"docs":{},"i":{"docs":{},"k":{"docs":{},"e":{"docs":{},"\"":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"\"":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}}}}},"u":{"docs":{},"n":{"docs":{},"k":{"docs":{},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}},"s":{"docs":{},"a":{"docs":{},"f":{"docs":{},"e":{"docs":{},"\"":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},".":{"docs":{},".":{"docs":{},"/":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"/":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}},"\"":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976}},"}":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886}}}}},"z":{"docs":{},"\"":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886}}}}},"\"":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"/":{"docs":{},"j":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"\"":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}}},"o":{"docs":{},"o":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635}},"}":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886}}}}}},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"e":{"docs":{},"d":{"docs":{},"\"":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"u":{"docs":{},"b":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"o":{"docs":{},"l":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"/":{"docs":{},"e":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"i":{"docs":{},"c":{"docs":{},"/":{"docs":{},"v":{"7":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613}}}},"docs":{}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"/":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{},"s":{"docs":{},"/":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"/":{"docs":{},"p":{"docs":{},"k":{"docs":{},"g":{"docs":{},"/":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"n":{"docs":{},"j":{"docs":{},"f":{"2":{"0":{"0":{"0":{"docs":{},"/":{"docs":{},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{},"s":{"docs":{},"\"":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}}}},"o":{"docs":{},".":{"docs":{},"u":{"docs":{},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},"i":{"docs":{},"c":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"x":{"docs":{},"/":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},"/":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"y":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"l":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613}}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"s":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613}}}}}}}}}}}}}}}}},"_":{"docs":{},"e":{"docs":{},"n":{"docs":{},"v":{"docs":{},"\"":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"\"":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}},"o":{"docs":{},"s":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}},"u":{"docs":{},"b":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"\"":{"docs":{},"}":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},"\"":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"/":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},"i":{"docs":{},"c":{"docs":{},"\"":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"j":{"docs":{},"/":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}},"\"":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335}},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.012269938650306749}}}},"a":{"docs":{},"\"":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}},"d":{"docs":{},"d":{"docs":{},"\"":{"docs":{},"}":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"p":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"/":{"docs":{},"j":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{},"\"":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}},".":{"docs":{},"y":{"docs":{},"a":{"docs":{},"m":{"docs":{},"l":{"docs":{},"\"":{"docs":{},")":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}}}}}}}}},"\"":{"docs":{},"}":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"d":{"docs":{},"o":{"docs":{},"e":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635}}}}}},"a":{"docs":{},"r":{"docs":{},"w":{"docs":{},"i":{"docs":{},"n":{"docs":{},"\"":{"docs":{},":":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}},"j":{"docs":{},"o":{"docs":{},"h":{"docs":{},"n":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"@":{"docs":{},"e":{"docs":{},"x":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}},"\"":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"\"":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"i":{"docs":{},"n":{"docs":{},"u":{"docs":{},"x":{"docs":{},"\"":{"docs":{},":":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}},"/":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{},"/":{"docs":{},"v":{"3":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"s":{"docs":{},"/":{"docs":{},"%":{"docs":{},"s":{"docs":{},"/":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"_":{"docs":{},"r":{"docs":{},"e":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"/":{"docs":{},"%":{"docs":{},"s":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"s":{"docs":{},"\"":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"\"":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.012269938650306749}}}},"s":{"docs":{},"\"":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},".":{"docs":{},"o":{"docs":{},"a":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"\"":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}},":":{"8":{"0":{"0":{"0":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}},"w":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"&":{"docs":{},"&":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.013888888888888888},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}},"_":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"{":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}},"d":{"docs":{},"{":{"docs":{},"l":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"t":{"docs":{},"{":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}},"s":{"1":{"docs":{},"{":{"docs":{},"}":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}},"2":{"docs":{},"{":{"docs":{},"}":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}},"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"{":{"docs":{},"}":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"{":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}}}}}},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"{":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}},"t":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{},")":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"{":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},":":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"{":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}},"u":{"docs":{},"m":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}},"{":{"docs":{},"s":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"a":{"docs":{},"g":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}},"g":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}}},"(":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.04516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.010830324909747292},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.0380952380952381},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"f":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.009868421052631578},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.029411764705882353}},"a":{"docs":{},"q":{"docs":{},")":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"*":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"v":{"docs":{},"i":{"docs":{},"s":{"docs":{},"、":{"docs":{},"c":{"docs":{},"i":{"docs":{},"r":{"docs":{},"c":{"docs":{},"l":{"docs":{},"e":{"docs":{},"、":{"docs":{},"d":{"docs":{},"r":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},")":{"docs":{},"配":{"docs":{},"置":{"docs":{},"和":{"docs":{},"脚":{"docs":{},"本":{"docs":{},"放":{"docs":{},"在":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"i":{"docs":{},"n":{"docs":{},"t":{"3":{"2":{"docs":{},",":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}},"docs":{}},"docs":{},"(":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"f":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"m":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}},"y":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}},"a":{"docs":{},"p":{"docs":{},"[":{"docs":{},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"6":{"4":{"docs":{},"]":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}},"x":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"i":{"docs":{},"p":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}},"e":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}},"/":{"docs":{},"*":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"h":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353}},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"s":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"g":{"docs":{},"o":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"/":{"docs":{},"s":{"docs":{},"p":{"docs":{},"e":{"docs":{},"c":{"docs":{},"#":{"docs":{},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"_":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"k":{"docs":{},"y":{"docs":{},"l":{"docs":{},"l":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"s":{"docs":{},"t":{"docs":{},"y":{"docs":{},"l":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},"o":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"s":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.011904761904761904},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.029411764705882353},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.017543859649122806}},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"*":{"docs":{},"n":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{},"(":{"docs":{},"n":{"docs":{},"i":{"docs":{},"l":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}},"将":{"docs":{},"无":{"docs":{},"法":{"docs":{},"编":{"docs":{},"译":{"docs":{},"通":{"docs":{},"过":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}}}}}}}},"[":{"docs":{},"]":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}},"l":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.03550295857988166},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335}},"a":{"docs":{},"t":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}},"b":{"docs":{},"u":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}},"c":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}},"a":{"docs":{},"n":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},"d":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537}}},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},"p":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"a":{"docs":{},"m":{"docs":{},"d":{"6":{"4":{"docs":{},"/":{"3":{"8":{"6":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}},"o":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},"f":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"=":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.034482758620689655},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0421179302045728},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.033210332103321034},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.019736842105263157},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.008237232289950576},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.015306122448979591},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.037037037037037035},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.0392156862745098},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.016304347826086956},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.05714285714285714},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.04411764705882353},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0390625},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.012531328320802004},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.026845637583892617},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.01444043321299639},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.023076923076923078},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.022900763358778626},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.015945330296127564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.008880994671403197},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},"=":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.006016847172081829},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.007782101167315175},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.026359143327841845},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.006802721088435374},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},"=":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{},"b":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"e":{"docs":{},"q":{"docs":{},"u":{"docs":{},"a":{"docs":{},"l":{"docs":{},"(":{"docs":{},"t":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.06134969325153374},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}}}}}}}}}}},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}},"o":{"docs":{},"c":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"u":{"docs":{},"m":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"m":{"docs":{},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"d":{"6":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}},"docs":{}}},"p":{"docs":{},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"、":{"docs":{},"r":{"docs":{},"e":{"docs":{},"p":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{},"、":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"d":{"docs":{},";":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}},";":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},",":{"docs":{},"但":{"docs":{},"又":{"docs":{},"没":{"docs":{},"有":{"docs":{},"明":{"docs":{},"确":{"docs":{},"说":{"docs":{},"明":{"docs":{},",":{"docs":{},"既":{"docs":{},"导":{"docs":{},"致":{"docs":{},"了":{"docs":{},"模":{"docs":{},"糊":{"docs":{},"的":{"docs":{},"文":{"docs":{},"档":{"docs":{},",":{"docs":{},"又":{"docs":{},"泄":{"docs":{},"露":{"docs":{},"了":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}},"(":{"docs":{},"n":{"docs":{},"u":{"docs":{},"m":{"docs":{},"s":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635}}}}}}},"s":{"docs":{},".":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"s":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}},"t":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"g":{"docs":{},"t":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"m":{"docs":{},"p":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.006578947368421052}}}}}},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"i":{"docs":{},"m":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}},",":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}},"d":{"docs":{},"d":{"1":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}},"2":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}},"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.01904761904761905},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}},"(":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}},"=":{"0":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"1":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"docs":{}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}},"(":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.01775147928994083}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.01020408163265306}},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}},"g":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"s":{"docs":{},"[":{"0":{"docs":{},"]":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}},"docs":{}}}},"r":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"[":{"4":{"docs":{},"]":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"docs":{}},"a":{"docs":{},"y":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.008152173913043478},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.013793103448275862},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"'":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}},"f":{"docs":{},"i":{"docs":{},"b":{"docs":{},"o":{"docs":{},"n":{"docs":{},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"i":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}}}}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},"s":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"s":{"docs":{},")":{"docs":{},"都":{"docs":{},"必":{"docs":{},"须":{"docs":{},"有":{"docs":{},"注":{"docs":{},"释":{"docs":{},"说":{"docs":{},"明":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},"g":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}}},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.006589785831960461}}}}}}}}}}}},"c":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},"s":{"docs":{},"/":{"docs":{},"o":{"docs":{},"p":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.01567398119122257},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.018223234624145785},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},".":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}},"\"":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"i":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549}}}}}}}},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}}},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":3.3431372549019605},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},"i":{"docs":{},"c":{"docs":{},".":{"docs":{},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549}}}}}},"s":{"docs":{},"w":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"3":{"2":{"docs":{},"(":{"docs":{},"&":{"docs":{},"f":{"docs":{},".":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"n":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},",":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"3":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"(":{"docs":{},"&":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"s":{"docs":{},"w":{"docs":{},"a":{"docs":{},"p":{"docs":{},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"3":{"2":{"docs":{},"(":{"docs":{},"&":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"3":{"2":{"docs":{},"(":{"docs":{},"&":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}}}}}}}}}},"b":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.047337278106508875}},"。":{"docs":{},"相":{"docs":{},"反":{"docs":{},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"手":{"docs":{},"动":{"docs":{},"将":{"docs":{},"方":{"docs":{},"法":{"docs":{},"写":{"docs":{},"入":{"docs":{},"具":{"docs":{},"体":{"docs":{},"的":{"docs":{},"列":{"docs":{},"表":{"docs":{},",":{"docs":{},"委":{"docs":{},"托":{"docs":{},"给":{"docs":{},"抽":{"docs":{},"象":{"docs":{},"列":{"docs":{},"表":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"是":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}},"[":{"docs":{},":":{"0":{"docs":{},"]":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}},"docs":{},"j":{"docs":{},"]":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"j":{"docs":{},"]":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"、":{"docs":{},"b":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},".":{"docs":{},".":{"docs":{},".":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"c":{"docs":{},"c":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}}},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}},"g":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"n":{"docs":{},"y":{"docs":{},")":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"t":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"s":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},"(":{"1":{"0":{"0":{"0":{"0":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"简":{"docs":{},"单":{"docs":{},"地":{"docs":{},"使":{"docs":{},"用":{"docs":{},"其":{"docs":{},"默":{"docs":{},"认":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},"池":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"将":{"docs":{},"任":{"docs":{},"务":{"docs":{},"提":{"docs":{},"交":{"docs":{},"并":{"docs":{},"发":{"docs":{},"执":{"docs":{},"行":{"docs":{},"。":{"docs":{},"默":{"docs":{},"认":{"docs":{},"协":{"docs":{},"程":{"docs":{},"池":{"docs":{},"的":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"容":{"docs":{},"量":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"w":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"c":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.05555555555555555},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.017241379310344827},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.007104795737122558}},"+":{"docs":{},"+":{"1":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.06896551724137931},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},"r":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456}}},")":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}},",":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}},"u":{"docs":{},"s":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"(":{"docs":{},"f":{"docs":{},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}},"m":{"docs":{},"m":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}},"o":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"i":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},"a":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}}}}}},"p":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"、":{"docs":{},"k":{"docs":{},"u":{"docs":{},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"/":{"docs":{},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"、":{"docs":{},"m":{"docs":{},"e":{"docs":{},"s":{"docs":{},"o":{"docs":{},"s":{"docs":{},"、":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"、":{"docs":{},"b":{"docs":{},"o":{"docs":{},"s":{"docs":{},"h":{"docs":{},")":{"docs":{},"。":{"docs":{},"注":{"docs":{},"意":{"docs":{},",":{"docs":{},"在":{"docs":{},"一":{"docs":{},"些":{"docs":{},"存":{"docs":{},"储":{"docs":{},"库":{"docs":{},"中":{"docs":{},"(":{"docs":{},"特":{"docs":{},"别":{"docs":{},"是":{"docs":{},"使":{"docs":{},"用":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"x":{"1":{"2":{"8":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"docs":{}},"docs":{}},"6":{"4":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"docs":{}},"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"t":{"docs":{},"e":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"'":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"n":{"docs":{},"s":{"docs":{},"o":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"p":{"docs":{},"l":{"docs":{},"u":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}},"t":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.007220216606498195},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.014760147601476014},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.047619047619047616},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"s":{"docs":{},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}},"i":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.00842358604091456},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.011086474501108648}},"\"":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01845018450184502}}},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},".":{"docs":{},"d":{"docs":{},"o":{"docs":{},"(":{"docs":{},"f":{"docs":{},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"u":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"e":{"docs":{},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}}}}}}}}}}}}},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.01358695652173913},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},"c":{"docs":{},"r":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.07100591715976332}}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"(":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"n":{"docs":{},"o":{"docs":{},"s":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.014209591474245116}},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.007104795737122558}}},"i":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.008880994671403197}}}}}},"l":{"docs":{},"o":{"docs":{},"r":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"(":{"0":{"docs":{},"x":{"0":{"0":{"0":{"0":{"docs":{},"f":{"docs":{},"f":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}},"docs":{}},"docs":{},"f":{"docs":{},"f":{"0":{"0":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}},"docs":{}},"docs":{}}}},"docs":{}},"docs":{},"f":{"docs":{},"f":{"0":{"0":{"0":{"0":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}},"docs":{}}}}}}}}},"p":{"docs":{},"i":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"y":{"docs":{},"(":{"docs":{},"d":{"docs":{},".":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"p":{"docs":{},"y":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},":":{"1":{"7":{"docs":{},":":{"6":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"docs":{}}},"8":{"docs":{},":":{"1":{"1":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}}},"docs":{}},"5":{"docs":{},":":{"6":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"docs":{}}},"docs":{}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"s":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.02050113895216401}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}},".":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"=":{"docs":{},"=":{"0":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"docs":{}}},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.008152173913043478}}}}}}},"r":{"docs":{},"e":{"docs":{},"(":{"docs":{},"t":{"docs":{},"m":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"l":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}}},"m":{"docs":{},"d":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"/":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"a":{"docs":{},"l":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},".":{"docs":{},"m":{"docs":{},"d":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"a":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"p":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"a":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}},"(":{"docs":{},"p":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"l":{"docs":{},"l":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.024390243902439025},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"e":{"docs":{},"d":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"r":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.007104795737122558}}}},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}},"c":{"docs":{},"c":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},"(":{"docs":{},"n":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}},"s":{"docs":{},".":{"docs":{},"w":{"docs":{},"e":{"docs":{},"i":{"docs":{},"g":{"docs":{},"h":{"docs":{},"t":{"docs":{},"s":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}},"u":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}},"s":{"docs":{},"e":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.006589785831960461},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"n":{"docs":{},"'":{"docs":{},"t":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}},"c":{"docs":{},"h":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"e":{"docs":{},"、":{"docs":{},"f":{"docs":{},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}},"u":{"docs":{},"s":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"l":{"docs":{},"o":{"docs":{},"u":{"docs":{},"d":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"s":{"docs":{},"e":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},"c":{"docs":{},"h":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"e":{"docs":{},"s":{"docs":{},"u":{"docs":{},"i":{"docs":{},"d":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}},"w":{"docs":{},"d":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"e":{"docs":{},"l":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"n":{"docs":{},"u":{"docs":{},"m":{"docs":{},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"(":{"1":{"0":{"0":{"0":{"0":{"0":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{},"n":{"docs":{},"u":{"docs":{},"m":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"e":{"docs":{},"r":{"docs":{},"、":{"docs":{},"w":{"docs":{},"i":{"docs":{},"k":{"docs":{},"i":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"、":{"docs":{},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"、":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{},"它":{"docs":{},"不":{"docs":{},"应":{"docs":{},"是":{"docs":{},"动":{"docs":{},"词":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.00916030534351145}},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{},"e":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}}}}},"f":{"docs":{},"g":{"docs":{},".":{"docs":{},"d":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},";":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},"h":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"a":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.037037037037037035},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.015985790408525755}},",":{"docs":{},"在":{"docs":{},"没":{"docs":{},"有":{"docs":{},"被":{"docs":{},"接":{"docs":{},"收":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"至":{"docs":{},"多":{"docs":{},"发":{"docs":{},"送":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}},"每":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"在":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}},"g":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"n":{"docs":{},"e":{"docs":{},"y":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}},"p":{"docs":{},"u":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.027586206896551724},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"/":{"docs":{},"c":{"docs":{},"+":{"docs":{},"+":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"b":{"docs":{},"r":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}}}}}}}}}}}}}}}}},"l":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.010657193605683837}},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}}}}}}}}}}},",":{"docs":{},"因":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"w":{"docs":{},"a":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}}}}}},"e":{"docs":{},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"g":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}},"a":{"docs":{},"c":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}},"x":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"e":{"docs":{},"_":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},"。":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}}},"c":{"docs":{},"t":{"docs":{},"l":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}}},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}},"e":{"docs":{},".":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}}}}},"c":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}},"u":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"e":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"r":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.018518518518518517},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.042801556420233464},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.06260296540362438},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.027210884353741496},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.03067484662576687},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.06153846153846154},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.04377104377104377},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693}},".":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{},")":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.03508771929824561},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}},":":{"docs":{},"%":{"docs":{},"v":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.019455252918287938},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.02138157894736842},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.004942339373970346},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.00510204081632653},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.023076923076923078},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.02356902356902357},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},":":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.009727626459143969},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}},"\"":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"\"":{"docs":{},"`":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}}}}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.006578947368421052},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.013468013468013467}}}},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.006802721088435374},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}},"s":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}},"(":{"docs":{},"\"":{"docs":{},"a":{"docs":{},"n":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"l":{"docs":{},"d":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}}}},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"k":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"m":{"docs":{},"i":{"docs":{},"s":{"docs":{},"s":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"m":{"docs":{},"o":{"docs":{},"d":{"docs":{},"u":{"docs":{},"l":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"但":{"docs":{},"对":{"docs":{},"于":{"docs":{},"后":{"docs":{},"者":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"必":{"docs":{},"须":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}},"a":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"s":{"docs":{},"(":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},",":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}},"i":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"s":{"docs":{},"(":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},",":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}},",":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}},"m":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"g":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}},".":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.007782101167315175},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.03067484662576687},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}},"b":{"docs":{},"r":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"k":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"l":{"docs":{},"d":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}}}}}}}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{},".":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613}}}}},"s":{"docs":{},"e":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"e":{"docs":{},"m":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.02527075812274368}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.012531328320802004}}}},"n":{"docs":{},"v":{"docs":{},"v":{"docs":{},"a":{"docs":{},"r":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"/":{"docs":{},"j":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}},"。":{"docs":{},"以":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203}}}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}}}}}}}}},"u":{"docs":{},"m":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"t":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.03550295857988166}}}}}},"r":{"docs":{},"i":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"t":{"docs":{},"c":{"docs":{},".":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}},"l":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"(":{"docs":{},"c":{"docs":{},"t":{"docs":{},"x":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"v":{"docs":{},"a":{"docs":{},"c":{"docs":{},"u":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}},"e":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"t":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"s":{"docs":{},"c":{"docs":{},"a":{"docs":{},"p":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893}}}}}}},"f":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.022058823529411766},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.026845637583892617},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.022172949002217297}},"r":{"docs":{},"e":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"b":{"docs":{},"s":{"docs":{},"d":{"docs":{},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.037037037037037035},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.017509727626459144},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.014760147601476014},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.02138157894736842},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.014827018121911038},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.03741496598639456},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.012269938650306749},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.010869565217391304},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.029411764705882353},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.03305785123966942},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.016835016835016835},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.013513513513513514},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0392156862745098},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0390625},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.03550295857988166},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.022556390977443608},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.021660649819494584},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.04678362573099415},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.02050113895216401},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.01282051282051282},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.01984732824427481},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.01366742596810934},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.011086474501108648},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.014209591474245116}},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.008869179600886918}},"(":{"docs":{},"e":{"docs":{},")":{"docs":{},"{":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"s":{"docs":{},".":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.007782101167315175},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.03125},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693}},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}},"t":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}},"l":{"docs":{},"l":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}}}}}}},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},".":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}},".":{"docs":{},"c":{"docs":{},"h":{"docs":{},"m":{"docs":{},"o":{"docs":{},"d":{"docs":{},"(":{"0":{"6":{"6":{"4":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},";":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}},")":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}},"}":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308}}}},"/":{"docs":{},"s":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}},"s":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"(":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"s":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.011086474501108648},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976}}}}}}},"'":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"e":{"docs":{},"l":{"docs":{},"d":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"s":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.023076923076923078}}},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.023076923076923078}}}}}}}}}}}}}},"n":{"docs":{},"i":{"docs":{},"s":{"docs":{},"h":{"docs":{},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}},"m":{"docs":{},"t":{"2":{"docs":{},".":{"docs":{},"少":{"docs":{},"量":{"docs":{},"的":{"docs":{},"重":{"docs":{},"复":{"docs":{},"不":{"docs":{},"比":{"docs":{},"反":{"docs":{},"射":{"docs":{},"差":{"3":{"docs":{},".":{"docs":{},"慎":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}},"docs":{}}}}}}}}}}}}},"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}},"(":{"docs":{},"\"":{"docs":{},"%":{"docs":{},"v":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}},"这":{"docs":{},"里":{"docs":{},"要":{"docs":{},"空":{"docs":{},"格":{"docs":{},"%":{"docs":{},"v":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}}}}},"f":{"docs":{},"\\":{"docs":{},"n":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}},"s":{"docs":{},".":{"docs":{},"\\":{"docs":{},"n":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}},"g":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}},")":{"docs":{},"的":{"docs":{},"调":{"docs":{},"用":{"docs":{},"是":{"docs":{},"非":{"docs":{},"常":{"docs":{},"频":{"docs":{},"繁":{"docs":{},"的":{"docs":{},",":{"docs":{},"利":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}},"l":{"docs":{},"n":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{},"a":{"docs":{},"f":{"docs":{},"t":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"b":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"u":{"docs":{},"x":{"docs":{},".":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"c":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"s":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}},"&":{"docs":{},"v":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}},"c":{"docs":{},"f":{"docs":{},"g":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}}},"u":{"docs":{},"n":{"docs":{},"s":{"docs":{},"a":{"docs":{},"f":{"docs":{},"e":{"docs":{},".":{"docs":{},"s":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"o":{"docs":{},"f":{"docs":{},"(":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},")":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"1":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"2":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"3":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"4":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"docs":{}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"t":{"docs":{},"o":{"docs":{},"h":{"docs":{},"l":{"docs":{},"(":{"docs":{},"[":{"docs":{},"]":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"{":{"0":{"docs":{},"x":{"7":{"docs":{},"f":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"docs":{}}},"docs":{}}}}}}}}}}}}},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}}}}}}},"s":{"docs":{},".":{"docs":{},"h":{"docs":{},"a":{"docs":{},"s":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"\"":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},"\"":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}},".":{"docs":{},".":{"docs":{},".":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"r":{"docs":{},"s":{"docs":{},"p":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.022988505747126436}}}},"e":{"docs":{},"s":{"docs":{},"o":{"docs":{},"l":{"docs":{},"v":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"f":{"docs":{},"a":{"docs":{},"k":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"i":{"docs":{},"l":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}},"/":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{},"/":{"docs":{},"v":{"3":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"s":{"docs":{},"/":{"docs":{},"%":{"docs":{},"s":{"docs":{},"/":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"_":{"docs":{},"r":{"docs":{},"e":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"/":{"docs":{},"%":{"docs":{},"s":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"s":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}},"%":{"docs":{},"v":{"docs":{},"\"":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"f":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.016835016835016835}},"(":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}},"\"":{"docs":{},"m":{"docs":{},"o":{"docs":{},"d":{"docs":{},"u":{"docs":{},"l":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"s":{"docs":{},"o":{"docs":{},"m":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"d":{"docs":{},"b":{"docs":{},".":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}},"f":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"l":{"docs":{},"n":{"docs":{},"(":{"docs":{},"o":{"docs":{},"s":{"docs":{},".":{"docs":{},"s":{"docs":{},"t":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}},"{":{"0":{"docs":{},"x":{"1":{"0":{"docs":{},"c":{"0":{"0":{"docs":{},"e":{"0":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}}}}}}}}}}}},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"前":{"docs":{},"者":{"docs":{},"性":{"docs":{},"能":{"docs":{},"更":{"docs":{},"佳":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}},"o":{"docs":{},"o":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.006589785831960461},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.037037037037037035},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.013468013468013467},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0392156862745098}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.027777777777777776},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.007220216606498195},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"m":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"i":{"docs":{},"d":{"docs":{},"s":{"docs":{},"(":{"docs":{},")":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"i":{"docs":{},"d":{"docs":{},"s":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}},"r":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}},"s":{"docs":{},")":{"docs":{},";":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}},"_":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{},"我":{"docs":{},"们":{"docs":{},"使":{"docs":{},"用":{"docs":{},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}},",":{"docs":{},"让":{"docs":{},"测":{"docs":{},"试":{"docs":{},"文":{"docs":{},"件":{"docs":{},"假":{"docs":{},"装":{"docs":{},"是":{"docs":{},"包":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}},"{":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976}},".":{"docs":{},".":{"docs":{},".":{"docs":{},"}":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.024691358024691357}}}}}}},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.006578947368421052},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}},".":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"l":{"docs":{},"d":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},")":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{},"t":{"docs":{},"x":{"docs":{},"t":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}}}}}}}}}}}}}}},")":{"docs":{},";":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}}}}}}},":":{"docs":{},"连":{"docs":{},"接":{"docs":{},"被":{"docs":{},"拒":{"docs":{},"绝":{"docs":{},"”":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}},"r":{"docs":{},"k":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.01282051282051282},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},",":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}}}}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.009626955475330927},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.005836575875486381},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.022058823529411766},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"e":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"h":{"docs":{},"o":{"docs":{},"o":{"docs":{},"d":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}},"l":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"i":{"docs":{},"l":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},"u":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},")":{"docs":{},"的":{"docs":{},"主":{"docs":{},"要":{"docs":{},"根":{"docs":{},"源":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"发":{"docs":{},"生":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"该":{"docs":{},"函":{"docs":{},"数":{"docs":{},"应":{"docs":{},"该":{"docs":{},"返":{"docs":{},"回":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"让":{"docs":{},"调":{"docs":{},"用":{"docs":{},"方":{"docs":{},"决":{"docs":{},"定":{"docs":{},"如":{"docs":{},"何":{"docs":{},"处":{"docs":{},"理":{"docs":{},"它":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"t":{"3":{"2":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"docs":{}},"6":{"4":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.006802721088435374},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.006802721088435374}}},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}},",":{"docs":{},"并":{"docs":{},"在":{"docs":{},"字":{"docs":{},"段":{"docs":{},"名":{"docs":{},"称":{"docs":{},"中":{"docs":{},"包":{"docs":{},"含":{"docs":{},"单":{"docs":{},"位":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}},"docs":{}},"docs":{}}},"w":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"a":{"docs":{},"g":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}},"e":{"1":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"2":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"3":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"4":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"docs":{}}}}}}}}}}}}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}}}}},"a":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.004942339373970346}}}}}}}}},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}},"n":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}}}},"s":{"docs":{},"w":{"docs":{},"a":{"docs":{},"p":{"docs":{},"(":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"e":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}}}}},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.004942339373970346},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}},"o":{"docs":{},"s":{"docs":{},".":{"docs":{},"s":{"docs":{},"t":{"docs":{},"d":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},",":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}},"w":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}},"e":{"docs":{},"w":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"g":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"i":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.008875739644970414},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"该":{"docs":{},"文":{"docs":{},"章":{"docs":{},"修":{"docs":{},"订":{"docs":{},"时":{"docs":{},"间":{"docs":{},":":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}}}},"h":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"u":{"docs":{},"b":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}},"/":{"docs":{},"h":{"docs":{},"a":{"docs":{},"s":{"docs":{},"h":{"docs":{},"i":{"docs":{},"c":{"docs":{},"o":{"docs":{},"r":{"docs":{},"p":{"docs":{},"/":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"/":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"g":{"docs":{},"r":{"docs":{},"y":{"docs":{},"s":{"docs":{},"k":{"docs":{},"i":{"docs":{},"/":{"docs":{},"g":{"docs":{},"o":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}}},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"x":{"docs":{},"i":{"docs":{},"e":{"docs":{},"/":{"docs":{},"b":{"docs":{},"e":{"docs":{},"e":{"docs":{},"g":{"docs":{},"o":{"docs":{},"/":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"/":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"。":{"docs":{},"内":{"docs":{},"部":{"docs":{},"包":{"docs":{},"是":{"docs":{},"指":{"docs":{},"不":{"docs":{},"能":{"docs":{},"被":{"docs":{},"外":{"docs":{},"部":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}},"g":{"docs":{},"o":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}},"u":{"docs":{},"b":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},".":{"docs":{},"o":{"docs":{},"a":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{},"/":{"docs":{},"m":{"docs":{},"y":{"docs":{},"r":{"docs":{},"e":{"docs":{},"p":{"docs":{},"o":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}},":":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498}}},"n":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}},"o":{"1":{"docs":{},".":{"1":{"1":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}},"7":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}},"4":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}}},"docs":{"./":{"ref":"./","tf":0.22666666666666666},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.03254437869822485},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.01935483870967742},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.008223684210526315},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.038461538461538464},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.008152173913043478},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.09090909090909091},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.015037593984962405},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.017543859649122806},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.022779043280182234},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.02733485193621868},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.008869179600886918},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.017761989342806393},"参考文献.html":{"ref":"参考文献.html","tf":0.07017543859649122}},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},",":{"docs":{},"目":{"docs":{},"前":{"docs":{},"官":{"docs":{},"方":{"docs":{},"团":{"docs":{},"队":{"docs":{},"并":{"docs":{},"未":{"docs":{},"提":{"docs":{},"供":{"docs":{},"权":{"docs":{},"威":{"docs":{},"规":{"docs":{},"范":{"docs":{},"。":{"docs":{},"不":{"docs":{},"过":{"docs":{},"不":{"docs":{},"用":{"docs":{},"担":{"docs":{},"心":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"依":{"docs":{},"然":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"规":{"docs":{},"范":{"docs":{},"可":{"docs":{},"以":{"docs":{},"参":{"docs":{},"考":{"docs":{},",":{"docs":{},"那":{"docs":{},"就":{"docs":{},"是":{"docs":{},"业":{"docs":{},"界":{"docs":{},"推":{"docs":{},"崇":{"docs":{},"的":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"分":{"docs":{},"析":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}},"梦":{"docs":{},"工":{"docs":{},"厂":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"d":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}},"p":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},",":{"docs":{},"想":{"docs":{},"更":{"docs":{},"好":{"docs":{},"地":{"docs":{},"管":{"docs":{},"理":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}},"z":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},":":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}}},",":{"docs":{},"以":{"docs":{},"及":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"书":{"docs":{},"籍":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}},"这":{"docs":{},"应":{"docs":{},"该":{"docs":{},"是":{"docs":{},"入":{"docs":{},"门":{"docs":{},"必":{"docs":{},"读":{"docs":{},"最":{"docs":{},"佳":{"docs":{},"读":{"docs":{},"物":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.03508771929824561},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.04807692307692308}},",":{"docs":{},"如":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}},"o":{"docs":{},"d":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.023148148148148147},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.034482758620689655},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.025806451612903226},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.013618677042801557},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.011513157894736841},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.018121911037891267},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.011904761904761904},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.011834319526627219},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"g":{"docs":{},"l":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"s":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},".":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{},"文":{"docs":{},"件":{"docs":{},"必":{"docs":{},"须":{"docs":{},"提":{"docs":{},"交":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"添":{"docs":{},"加":{"docs":{},"到":{"docs":{},".":{"docs":{},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"规":{"docs":{},"则":{"docs":{},"中":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}}}}}}}}}}}},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.01935483870967742},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.013618677042801557},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.04807692307692308},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.007633587786259542},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.03189066059225513},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.017761989342806393}},"e":{"docs":{},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"在":{"docs":{},"入":{"docs":{},"口":{"docs":{},"处":{"docs":{},"捕":{"docs":{},"获":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}},"无":{"docs":{},"需":{"docs":{},"锁":{"docs":{},"保":{"docs":{},"护":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"b":{"docs":{},"r":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}},"一":{"docs":{},"定":{"docs":{},"要":{"docs":{},"梳":{"docs":{},"理":{"docs":{},"清":{"docs":{},"楚":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"如":{"docs":{},"果":{"docs":{},"其":{"docs":{},"他":{"docs":{},"协":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{},"了":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"当":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"状":{"docs":{},"态":{"docs":{},"发":{"docs":{},"生":{"docs":{},"变":{"docs":{},"化":{"docs":{},"时":{"docs":{},",":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}},"o":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},":":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}},"m":{"docs":{},"、":{"docs":{},"x":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789}}}}}}}},"t":{"docs":{},"o":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},",":{"docs":{},"其":{"docs":{},"他":{"docs":{},"框":{"docs":{},"架":{"docs":{},"或":{"docs":{},"底":{"docs":{},"层":{"docs":{},"源":{"docs":{},"码":{"docs":{},"推":{"docs":{},"荐":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"不":{"docs":{},"用":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"/":{"docs":{},"g":{"docs":{},"u":{"docs":{},"i":{"docs":{},"d":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}},"语":{"docs":{},"言":{"docs":{},"最":{"docs":{},"佳":{"docs":{},"实":{"docs":{},"践":{"docs":{},"g":{"docs":{},"o":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"分":{"docs":{},"析":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"n":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"f":{"docs":{},"u":{"docs":{},"l":{"docs":{},"l":{"docs":{},"y":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}},"b":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"e":{"docs":{},"t":{"docs":{},"o":{"docs":{},"n":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}}}},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}}}}}}}}}}},"e":{"docs":{},"n":{"docs":{},"g":{"docs":{},"t":{"docs":{},"h":{"docs":{},"(":{"docs":{},"r":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}},"m":{"docs":{},"r":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"s":{"docs":{},"u":{"docs":{},"r":{"docs":{},"i":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"(":{"docs":{},"r":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}},"i":{"docs":{},"d":{"docs":{},"s":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{},"b":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}},"(":{"docs":{},"u":{"docs":{},"i":{"docs":{},"d":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}}}},"(":{"docs":{},"k":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}}},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"(":{"docs":{},"n":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},"s":{"docs":{},"(":{"docs":{},"n":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"n":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}},"c":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.010256410256410256},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.015945330296127564}},"f":{"docs":{},"l":{"docs":{},"a":{"docs":{},"g":{"docs":{},"s":{"docs":{},"=":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},"\"":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.00683371298405467}}}}}}}}}}},"j":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}},"、":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}},".":{"docs":{},"u":{"docs":{},"n":{"docs":{},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"h":{"docs":{},"a":{"docs":{},"l":{"docs":{},"(":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},",":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}},"+":{"docs":{},"+":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}},"e":{"docs":{},"f":{"docs":{},"f":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{},"/":{"docs":{},"t":{"docs":{},"u":{"docs":{},"n":{"docs":{},"n":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}},"l":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"u":{"docs":{},"a":{"docs":{},"g":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"y":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},",":{"docs":{},"给":{"docs":{},"出":{"docs":{},"布":{"docs":{},"局":{"docs":{},"建":{"docs":{},"议":{"docs":{},"。":{"docs":{},"一":{"docs":{},"个":{"docs":{},"清":{"docs":{},"晰":{"docs":{},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},"结":{"docs":{},"构":{"docs":{},",":{"docs":{},"能":{"docs":{},"帮":{"docs":{},"忙":{"docs":{},"我":{"docs":{},"们":{"docs":{},"高":{"docs":{},"效":{"docs":{},"有":{"docs":{},"序":{"docs":{},"的":{"docs":{},"管":{"docs":{},"理":{"docs":{},"与":{"docs":{},"日":{"docs":{},"俱":{"docs":{},"增":{"docs":{},"的":{"docs":{},"业":{"docs":{},"务":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{},"不":{"docs":{},"会":{"docs":{},"随":{"docs":{},"着":{"docs":{},"代":{"docs":{},"码":{"docs":{},"量":{"docs":{},"的":{"docs":{},"递":{"docs":{},"增":{"docs":{},",":{"docs":{},"项":{"docs":{},"目":{"docs":{},"代":{"docs":{},"码":{"docs":{},"变":{"docs":{},"得":{"docs":{},"凌":{"docs":{},"乱":{"docs":{},"而":{"docs":{},"不":{"docs":{},"堪":{"docs":{},"入":{"docs":{},"目":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"s":{"docs":{},"t":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976}}}}}}}}},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.011834319526627219},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"n":{"docs":{},"e":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789}},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"u":{"docs":{},"x":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"v":{"docs":{},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"o":{"docs":{},"g":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}},"o":{"docs":{},",":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.01904761904761905}}}}}}}},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"f":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"n":{"docs":{},"u":{"docs":{},"m":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}},":":{"docs":{},"%":{"docs":{},"d":{"docs":{},",":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}}}}}},".":{"docs":{},"f":{"docs":{},"a":{"docs":{},"t":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},"a":{"docs":{},"l":{"docs":{},"f":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}},"(":{"docs":{},"\"":{"docs":{},"m":{"docs":{},"i":{"docs":{},"s":{"docs":{},"s":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.004942339373970346}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"l":{"docs":{},"n":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"e":{"docs":{},"x":{"docs":{},"e":{"docs":{},"c":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}}},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},",":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"b":{"docs":{},"u":{"docs":{},"g":{"docs":{},".":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}},"{":{"docs":{},"}":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}},"_":{"2":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"docs":{}},"t":{"docs":{},"o":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}},"e":{"docs":{},"=":{"1":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"docs":{}}}}}},"r":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}},"e":{"docs":{},"=":{"2":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}},"docs":{}}}}}}}},"s":{"docs":{},"t":{"docs":{},"d":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}},"=":{"0":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"docs":{}}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"t":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}},"k":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}}}},")":{"docs":{},"。":{"docs":{},"在":{"docs":{},"使":{"docs":{},"用":{"docs":{},"锁":{"docs":{},"时":{"docs":{},",":{"docs":{},"对":{"docs":{},"获":{"docs":{},"取":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"目":{"docs":{},"的":{"docs":{},"操":{"docs":{},"作":{"docs":{},"做":{"docs":{},"了":{"docs":{},"区":{"docs":{},"分":{"docs":{},",":{"docs":{},"一":{"docs":{},"种":{"docs":{},"是":{"docs":{},"读":{"docs":{},"操":{"docs":{},"作":{"docs":{},",":{"docs":{},"一":{"docs":{},"种":{"docs":{},"是":{"docs":{},"写":{"docs":{},"操":{"docs":{},"作":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},"同":{"docs":{},"一":{"docs":{},"时":{"docs":{},"刻":{"docs":{},"允":{"docs":{},"许":{"docs":{},"多":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"f":{"docs":{},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}},"n":{"docs":{},"g":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}},"o":{"docs":{},"p":{"docs":{},")":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}},":":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"e":{"docs":{},"n":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"(":{"docs":{},"s":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}},"t":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},")":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"s":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}}},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{},")":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"s":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}}}}}}}},"i":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"s":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}},"g":{"docs":{},"t":{"docs":{},"h":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}},"s":{"docs":{},"s":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"a":{"docs":{},"k":{"docs":{},",":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"(":{"docs":{},"e":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.011834319526627219}}}}}}}},"r":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"(":{"docs":{},"e":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.011834319526627219}}}}}}}}}}}}}}}},"h":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},",":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"s":{"docs":{},"w":{"docs":{},"a":{"docs":{},"p":{"docs":{},"(":{"docs":{},"h":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},".":{"docs":{},"(":{"docs":{},"*":{"docs":{},"n":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"u":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}},"\"":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.00683371298405467}},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"发":{"docs":{},"生":{"docs":{},"内":{"docs":{},"联":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"将":{"docs":{},"不":{"docs":{},"会":{"docs":{},"出":{"docs":{},"现":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"就":{"docs":{},"不":{"docs":{},"存":{"docs":{},"在":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"与":{"docs":{},"回":{"docs":{},"收":{"docs":{},"的":{"docs":{},"操":{"docs":{},"作":{"docs":{},"了":{"docs":{},",":{"docs":{},"二":{"docs":{},"者":{"docs":{},"将":{"docs":{},"看":{"docs":{},"不":{"docs":{},"出":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"}":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"(":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"m":{"0":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"1":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"2":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635}}},"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.026845637583892617},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.00683371298405467},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"k":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}},"d":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.009727626459143969},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.007782101167315175},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.009884678747940691},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.009111617312072893},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},".":{"docs":{},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},".":{"docs":{},"f":{"docs":{},"u":{"docs":{},"n":{"docs":{},"c":{"1":{"docs":{},"(":{"0":{"docs":{},"x":{"0":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}}},"docs":{}}},"2":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"docs":{}}}}}}}}}},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.015037593984962405}}}}}}}},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.018808777429467086}}}}}},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.046875},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.009404388714733543}}}}},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693}}}}}},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}}}}}},"c":{"docs":{},"o":{"docs":{},"p":{"docs":{},"i":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.02733485193621868}}}}}},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0066518847006651885}}}}}}}},"k":{"docs":{},"e":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"的":{"docs":{},"话":{"docs":{},")":{"docs":{},"变":{"docs":{},"得":{"docs":{},"小":{"docs":{},"而":{"docs":{},"简":{"docs":{},"单":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.026845637583892617}}},"[":{"docs":{},"]":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.007220216606498195},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.018223234624145785}}}}},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028}}}}}}},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"6":{"4":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"docs":{}},"docs":{}}}}},"*":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},",":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"[":{"docs":{},"t":{"1":{"docs":{},"]":{"docs":{},"t":{"2":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}},"docs":{}}}},"docs":{}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"]":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},")":{"docs":{},",":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}}}}}}}}}},"o":{"docs":{},"s":{"docs":{},".":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"{":{"docs":{},"}":{"docs":{},"]":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}},"]":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}},",":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}}}}}}}}},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"6":{"4":{"docs":{},"]":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.05555555555555555},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},"r":{"docs":{},"k":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"d":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"p":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":2.516304347826087},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.053691275167785234},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.023391812865497075},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335}},"[":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"]":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.010869565217391304}},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}},"t":{"1":{"docs":{},"]":{"docs":{},"t":{"2":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}},"{":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},"}":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},"docs":{}}}},"docs":{}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"]":{"docs":{},"*":{"docs":{},"s":{"docs":{},"{":{"1":{"docs":{},":":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}},"docs":{}}}},"s":{"docs":{},"{":{"1":{"docs":{},":":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}},"docs":{}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"时":{"docs":{},"指":{"docs":{},"定":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},",":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},",":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}},"此":{"docs":{},"时":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"将":{"docs":{},"每":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"拉":{"docs":{},"取":{"docs":{},"的":{"docs":{},"结":{"docs":{},"果":{"docs":{},"写":{"docs":{},"入":{"docs":{},"到":{"docs":{},"一":{"docs":{},"个":{"docs":{},"临":{"docs":{},"时":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"便":{"docs":{},"将":{"docs":{},"并":{"docs":{},"发":{"docs":{},"地":{"docs":{},"协":{"docs":{},"程":{"docs":{},"与":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"变":{"docs":{},"量":{"docs":{},"解":{"docs":{},"绑":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"再":{"docs":{},"将":{"docs":{},"其":{"docs":{},"汇":{"docs":{},"聚":{"docs":{},"到":{"docs":{},"一":{"docs":{},"起":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"便":{"docs":{},"可":{"docs":{},"以":{"docs":{},"不":{"docs":{},"用":{"docs":{},"使":{"docs":{},"用":{"docs":{},"锁":{"docs":{},"。":{"docs":{},"即":{"docs":{},"独":{"docs":{},"立":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"合":{"docs":{},"并":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"、":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"、":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}},"s":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}},"g":{"docs":{},"i":{"docs":{},"c":{"docs":{},"”":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"t":{"docs":{},"h":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}},"e":{"docs":{},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}},".":{"docs":{},"m":{"docs":{},"a":{"docs":{},"x":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"3":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}}}}}}}}}},"y":{"docs":{},"b":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"d":{"docs":{},"a":{"docs":{},"y":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}},"x":{"docs":{},"i":{"docs":{},"m":{"docs":{},"u":{"docs":{},"m":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}},"n":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}}},"o":{"docs":{},"d":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}},"u":{"docs":{},"l":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.01935483870967742}},"e":{"docs":{},"s":{"docs":{},"。":{"docs":{},"从":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"并":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{},"(":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"t":{"docs":{},"h":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"r":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"s":{"docs":{},"g":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.034482758620689655},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}},")":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}},"[":{"docs":{},"\"":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{},"\"":{"docs":{},"]":{"docs":{},".":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}}}}}}}}},"k":{"1":{"docs":{},"]":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"2":{"docs":{},"]":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"3":{"docs":{},"]":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"docs":{}},"v":{"docs":{},"]":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}},";":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"f":{"docs":{},".":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},"]":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308}}}}}}}}}}},"i":{"docs":{},"]":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335}}}}},"u":{"0":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"1":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335}},"l":{"docs":{},"t":{"docs":{},"i":{"docs":{},"p":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"i":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.01904761904761905}}},"y":{"docs":{},"=":{"2":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}},"3":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}},"docs":{}}}}}}}},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"r":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":3.37465564738292},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"、":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"/":{"docs":{},"r":{"docs":{},"w":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},",":{"docs":{},"或":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"y":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976}},"{":{"docs":{},"}":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}},"d":{"5":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789}}},"docs":{}},"e":{"docs":{},",":{"docs":{},"t":{"docs":{},"h":{"docs":{},"i":{"docs":{},"s":{"docs":{},",":{"docs":{},"s":{"docs":{},"e":{"docs":{},"l":{"docs":{},"f":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"c":{"docs":{},"s":{"docs":{},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"c":{"docs":{},"r":{"docs":{},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"c":{"docs":{},"n":{"docs":{},"t":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"m":{"docs":{},"i":{"docs":{},"s":{"docs":{},"s":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"o":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"a":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"r":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"s":{"docs":{},"u":{"docs":{},"r":{"docs":{},"i":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}},".":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"[":{"docs":{},"k":{"docs":{},"]":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}}}},"查":{"docs":{},"看":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"对":{"docs":{},"上":{"docs":{},"面":{"docs":{},"两":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"优":{"docs":{},"化":{"docs":{},"决":{"docs":{},"策":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}},"b":{"0":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}}},"p":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693}},"o":{"docs":{},"p":{"docs":{},"u":{"docs":{},"p":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},".":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"e":{"docs":{},"r":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"e":{"docs":{},"r":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.010869565217391304},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"s":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}},"r":{"docs":{},"t":{"docs":{},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.03067484662576687}}},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.03067484662576687}}}}},"l":{"docs":{},"l":{"docs":{},"(":{"1":{"0":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"*":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}},"docs":{}},"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009}}}}}}}}}},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}},".":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"r":{"docs":{},"o":{"docs":{},"g":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{"./":{"ref":"./","tf":0.02}},"m":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}}}}}},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"e":{"docs":{},"r":{"docs":{},"b":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"(":{"docs":{},"v":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"t":{"docs":{},"i":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}},",":{"docs":{},"它":{"docs":{},"将":{"docs":{},"会":{"docs":{},"变":{"docs":{},"得":{"docs":{},"更":{"docs":{},"好":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}}}}}}}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701}}}}}}}}}},"l":{"docs":{},"n":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"e":{"docs":{},"r":{"docs":{},"'":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"f":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}},"e":{"docs":{},"s":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"v":{"docs":{},"i":{"docs":{},"o":{"docs":{},"u":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"a":{"docs":{},"g":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01845018450184502},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.026936026936026935},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},"s":{"docs":{},"/":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"]":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"g":{"docs":{},"e":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},"n":{"docs":{},"i":{"docs":{},"c":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.019455252918287938},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}},"(":{"4":{"4":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"docs":{}},"docs":{},"\"":{"docs":{},"a":{"docs":{},"n":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"n":{"docs":{},"i":{"docs":{},"l":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"u":{"docs":{},"n":{"docs":{},"k":{"docs":{},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.013468013468013467}}}}}}}}}}},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"v":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}},":":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.017509727626459144},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"因":{"docs":{},"为":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"此":{"docs":{},",":{"docs":{},"请":{"docs":{},"始":{"docs":{},"终":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}},"每":{"docs":{},"个":{"docs":{},"自":{"docs":{},"行":{"docs":{},"启":{"docs":{},"动":{"docs":{},"的":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"这":{"docs":{},"样":{"docs":{},"可":{"docs":{},"以":{"docs":{},"记":{"docs":{},"录":{"docs":{},"错":{"docs":{},"误":{"docs":{},"的":{"docs":{},"同":{"docs":{},"时":{"docs":{},"结":{"docs":{},"束":{"docs":{},"程":{"docs":{},"序":{"docs":{},",":{"docs":{},"方":{"docs":{},"便":{"docs":{},"排":{"docs":{},"查":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}}}}}},"并":{"docs":{},"打":{"docs":{},"印":{"docs":{},"详":{"docs":{},"细":{"docs":{},"堆":{"docs":{},"栈":{"docs":{},"信":{"docs":{},"息":{"docs":{},"或":{"docs":{},"进":{"docs":{},"行":{"docs":{},"其":{"docs":{},"它":{"docs":{},"处":{"docs":{},"理":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}},"建":{"docs":{},"议":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"(":{"docs":{},")":{"docs":{},"{":{"docs":{},"}":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"j":{"docs":{},"f":{"2":{"0":{"0":{"0":{"docs":{},"/":{"docs":{},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}},"t":{"docs":{},"h":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.008869179600886918}},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},"j":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"(":{"docs":{},"c":{"docs":{},"w":{"docs":{},"d":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}}}}}},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},":":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}},",":{"docs":{},"即":{"docs":{},"热":{"docs":{},"点":{"docs":{},"路":{"docs":{},"径":{"docs":{},",":{"docs":{},"顾":{"docs":{},"名":{"docs":{},"思":{"docs":{},"义":{"docs":{},",":{"docs":{},"是":{"docs":{},"你":{"docs":{},"的":{"docs":{},"程":{"docs":{},"序":{"docs":{},"中":{"docs":{},"那":{"docs":{},"些":{"docs":{},"会":{"docs":{},"频":{"docs":{},"繁":{"docs":{},"执":{"docs":{},"行":{"docs":{},"到":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"”":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},")":{"docs":{},"是":{"docs":{},"程":{"docs":{},"序":{"docs":{},"非":{"docs":{},"常":{"docs":{},"频":{"docs":{},"繁":{"docs":{},"执":{"docs":{},"行":{"docs":{},"的":{"docs":{},"一":{"docs":{},"系":{"docs":{},"列":{"docs":{},"指":{"docs":{},"令":{"docs":{},",":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"p":{"docs":{},"a":{"docs":{},"n":{"docs":{},"i":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"s":{"docs":{},"(":{"docs":{},")":{"docs":{},"{":{"docs":{},"}":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}},"e":{"docs":{},"n":{"docs":{},"t":{"1":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}},"2":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}},"docs":{}}}}},"s":{"docs":{},"s":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.011389521640091117},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"k":{"docs":{},"g":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"u":{"docs":{},"b":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}},"。":{"docs":{},"为":{"docs":{},"了":{"docs":{},"保":{"docs":{},"持":{"docs":{},"向":{"docs":{},"后":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"性":{"docs":{},",":{"docs":{},"外":{"docs":{},"部":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"每":{"docs":{},"个":{"docs":{},"未":{"docs":{},"来":{"docs":{},"版":{"docs":{},"本":{"docs":{},"都":{"docs":{},"必":{"docs":{},"须":{"docs":{},"保":{"docs":{},"留":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"类":{"docs":{},"型":{"docs":{},";":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"字":{"docs":{},"段":{"docs":{},"是":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}},"s":{"docs":{},"h":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}},"(":{"docs":{},"v":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}},"l":{"docs":{},"a":{"docs":{},"n":{"9":{"docs":{},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}},"docs":{}},"c":{"docs":{},"e":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}},"a":{"docs":{},"n":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125}}}}}}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125}}}}}}}},"d":{"docs":{},"o":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{},",":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},"&":{"docs":{},"p":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}},"i":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.006802721088435374}}},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}},"p":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.01282051282051282}},"f":{"docs":{},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"(":{"docs":{},"*":{"docs":{},"p":{"docs":{},"p":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}},";":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}},"r":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.01020408163265306},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}},"e":{"docs":{},"v":{"docs":{},"i":{"docs":{},"e":{"docs":{},"w":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"a":{"docs":{},"d":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.012433392539964476}},"m":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"e":{"docs":{},".":{"docs":{},"m":{"docs":{},"d":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"_":{"docs":{},"z":{"docs":{},"h":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},",":{"docs":{},"相":{"docs":{},"得":{"docs":{},"益":{"docs":{},"彰":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}},"(":{"docs":{},"p":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"r":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"\"":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"1":{"docs":{},"\"":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"2":{"docs":{},"\"":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"3":{"docs":{},"\"":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"docs":{}}}}}}}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}},"e":{"docs":{},"r":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}},"2":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}},"3":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}},"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},",":{"docs":{},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},"。":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"调":{"docs":{},"用":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"\"":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"l":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}},"s":{"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}}},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"t":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}}}}}},"o":{"docs":{},"l":{"docs":{},"v":{"docs":{},"e":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}},"p":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}},".":{"docs":{},"b":{"docs":{},"o":{"docs":{},"d":{"docs":{},"y":{"docs":{},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}},"[":{"docs":{},"k":{"docs":{},"]":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}},"m":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"e":{"docs":{},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"t":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"u":{"docs":{},"r":{"docs":{},"n":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.023148148148148147},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.01444043321299639},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.017509727626459144},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.011513157894736841},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.02471169686985173},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.02891156462585034},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.046153846153846156},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.03305785123966942},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.02356902356902357},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0392156862745098},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0390625},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.020512820512820513},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.011086474501108648},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}},"e":{"docs":{},"d":{"docs":{},";":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}},"p":{"docs":{},"t":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}},"c":{"docs":{},"e":{"docs":{},"i":{"docs":{},"v":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.022988505747126436}}}}},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}},"v":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.005836575875486381},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},";":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.005836575875486381}}}}},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}},",":{"docs":{},"很":{"docs":{},"容":{"docs":{},"易":{"docs":{},"发":{"docs":{},"生":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}},"d":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}},"q":{"docs":{},"u":{"docs":{},"i":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"e":{"docs":{},"d":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}},".":{"docs":{},"n":{"docs":{},"o":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},"t":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.03067484662576687}}}}}}}}}}}}}}}}}},"g":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701}},",":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}},"m":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"(":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.01775147928994083}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"k":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"f":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},".":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"(":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},".":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"o":{"docs":{},"f":{"docs":{},"(":{"docs":{},"i":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{},"e":{"docs":{},"o":{"docs":{},"f":{"docs":{},"(":{"docs":{},"i":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}},"u":{"docs":{},"s":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"z":{"docs":{},"v":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"a":{"docs":{},"w":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}},"n":{"docs":{},"g":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.008237232289950576},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.013605442176870748},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.03134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}},"e":{"docs":{},"。":{"docs":{},"二":{"docs":{},"者":{"docs":{},"在":{"docs":{},"功":{"docs":{},"能":{"docs":{},"上":{"docs":{},"没":{"docs":{},"有":{"docs":{},"区":{"docs":{},"别":{"docs":{},",":{"docs":{},"但":{"docs":{},"在":{"docs":{},"性":{"docs":{},"能":{"docs":{},"上":{"docs":{},"会":{"docs":{},"有":{"docs":{},"区":{"docs":{},"别":{"docs":{},"吗":{"docs":{},"?":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"只":{"docs":{},"迭":{"docs":{},"代":{"docs":{},"下":{"docs":{},"标":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"下":{"docs":{},"标":{"docs":{},"访":{"docs":{},"问":{"docs":{},"元":{"docs":{},"素":{"docs":{},",":{"docs":{},"这":{"docs":{},"种":{"docs":{},"使":{"docs":{},"用":{"docs":{},"方":{"docs":{},"式":{"docs":{},"和":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"时":{"docs":{},"候":{"docs":{},"甚":{"docs":{},"至":{"docs":{},"会":{"docs":{},"有":{"docs":{},"上":{"docs":{},"千":{"docs":{},"倍":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{},"对":{"docs":{},"于":{"docs":{},"这":{"docs":{},"种":{"docs":{},"场":{"docs":{},"景":{"docs":{},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"x":{"docs":{},"n":{"docs":{},"a":{"docs":{},"n":{"docs":{},"o":{"docs":{},"(":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"e":{"docs":{},"!":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}},"u":{"docs":{},"n":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"(":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}},"o":{"docs":{},"s":{"docs":{},".":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"s":{"docs":{},"[":{"1":{"docs":{},":":{"docs":{},"]":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},";":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}},"docs":{}}}}}}}}},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},";":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}},"e":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},"o":{"docs":{},"s":{"docs":{},";":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"m":{"docs":{},"a":{"docs":{},"x":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"c":{"docs":{},"s":{"docs":{},"(":{"1":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}}}}}}}}}}},"c":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}}},"h":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},":":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},":":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}},"_":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"(":{"docs":{},"&":{"docs":{},"c":{"docs":{},".":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"(":{"docs":{},"&":{"docs":{},"c":{"docs":{},".":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},"(":{"docs":{},"&":{"docs":{},"c":{"docs":{},".":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"a":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},"&":{"docs":{},"c":{"docs":{},".":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"n":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"…":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549}}}}}}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}}}},"s":{"docs":{},"p":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}},"p":{"docs":{},"c":{"docs":{},"、":{"docs":{},"d":{"docs":{},"b":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.007633587786259542}}}}},"o":{"docs":{},"w":{"docs":{},"s":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.023076923076923078}}}}}}}}}}}},"f":{"docs":{},"c":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.013513513513513514}}}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}},"w":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},")":{"docs":{},",":{"docs":{},"当":{"docs":{},"修":{"docs":{},"改":{"docs":{},"条":{"docs":{},"件":{"docs":{},"或":{"docs":{},"者":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}},"s":{"1":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}},"p":{"docs":{},"t":{"docs":{},"r":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176}}}}},"{":{"docs":{},"}":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886}}}},"2":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176}},"p":{"docs":{},"t":{"docs":{},"r":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.029411764705882353}}}}},"{":{"docs":{},"}":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886}}}},"3":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886}}},"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.006016847172081829},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.015267175572519083}},"p":{"docs":{},"e":{"docs":{},"c":{"docs":{},"i":{"docs":{},"f":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"i":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}},"a":{"docs":{},"(":{"docs":{},"s":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"l":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"t":{"docs":{},"r":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}},".":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"s":{"docs":{},"[":{"1":{"docs":{},"]":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"\"":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}}}}}}}},"docs":{}}}}},"l":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}},"t":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.015945330296127564}},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"a":{"docs":{},"r":{"docs":{},"d":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"s":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}}}}}},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}},"u":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}},"s":{"docs":{},")":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"=":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}},"i":{"docs":{},"n":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"g":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"i":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}},"s":{"docs":{},".":{"docs":{},"s":{"docs":{},"n":{"docs":{},"a":{"docs":{},"p":{"docs":{},"s":{"docs":{},"h":{"docs":{},"o":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}}}}}}},"i":{"docs":{},"c":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}},"e":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.014209591474245116}},"(":{"docs":{},"[":{"docs":{},"]":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},")":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549}}}},",":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"y":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"c":{"docs":{},"k":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}},"r":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.04597701149425287},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.008223684210526315},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.037037037037037035},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.01358695652173913},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.029585798816568046},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.03103448275862069},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.010256410256410256},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0066518847006651885},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"{":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}},"}":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.017241379310344827}},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.012033694344163659},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01845018450184502},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.03125},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.018404907975460124},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},")":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.017543859649122806},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},",":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}}}},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"也":{"docs":{},"提":{"docs":{},"供":{"docs":{},"了":{"docs":{},"预":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"v":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203}}}}}}},"o":{"docs":{},"r":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}}}}}}}}}},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}}}}},":":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}},"p":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}},"u":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"d":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"(":{"docs":{},"*":{"docs":{},"s":{"docs":{},"t":{"docs":{},"u":{"docs":{},"d":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},"(":{"docs":{},"s":{"docs":{},"t":{"docs":{},"u":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"f":{"docs":{},"n":{"docs":{},"o":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"h":{"docs":{},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.006578947368421052}}}}}},"a":{"docs":{},"n":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},"r":{"docs":{},"c":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.008875739644970414}},"/":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"/":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"2":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},"里":{"docs":{},"面":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"找":{"docs":{},"到":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},".":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"t":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"s":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},")":{"docs":{},"配":{"docs":{},"置":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}},"b":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.01904761904761905}},"=":{"1":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"2":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"docs":{}}}}}}}},"c":{"docs":{},"h":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"m":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.004942339373970346}}},"r":{"docs":{},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"s":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"w":{"docs":{},"a":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"i":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.006589785831960461}}}}}}},"y":{"docs":{},"s":{"docs":{},"v":{"docs":{},")":{"docs":{},"和":{"docs":{},"进":{"docs":{},"程":{"docs":{},"管":{"docs":{},"理":{"docs":{},"(":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},",":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"n":{"docs":{},"c":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},".":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"3":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}}},"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.03305785123966942},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}},"r":{"docs":{},"w":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"3":{"docs":{},".":{"3":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}}},"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}}}}}}}}}}},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":3.3635287152161037}},"?":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.023076923076923078}},"{":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693}}},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},",":{"docs":{},"例":{"docs":{},"如":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}},"w":{"docs":{},"a":{"docs":{},"i":{"docs":{},"t":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.009111617312072893}},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":3.35550628233555}},"e":{"docs":{},"?":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},"(":{"docs":{},"&":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}},"/":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}}}}}},"e":{"docs":{},"t":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.017543859649122806},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{},"(":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}}}}},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.017543859649122806}}},")":{"docs":{},"、":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"、":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"、":{"docs":{},"c":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"r":{"docs":{},"、":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"(":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353}}}}}}}}}}},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"d":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}}},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":2.5190217391304346},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.020134228187919462},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.01444043321299639},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.007220216606498195}}},"申":{"docs":{},"明":{"docs":{},"变":{"docs":{},"量":{"docs":{},"避":{"docs":{},"免":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}},",":{"docs":{},"这":{"docs":{},"意":{"docs":{},"味":{"docs":{},"着":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"因":{"docs":{},"为":{"docs":{},"重":{"docs":{},"复":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"会":{"docs":{},"带":{"docs":{},"来":{"docs":{},"性":{"docs":{},"能":{"docs":{},"损":{"docs":{},"耗":{"docs":{},"。":{"docs":{},"相":{"docs":{},"反":{"docs":{},",":{"docs":{},"请":{"docs":{},"执":{"docs":{},"行":{"docs":{},"一":{"docs":{},"次":{"docs":{},"转":{"docs":{},"换":{"docs":{},"并":{"docs":{},"捕":{"docs":{},"获":{"docs":{},"结":{"docs":{},"果":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"但":{"docs":{},"是":{"docs":{},"共":{"docs":{},"用":{"docs":{},"原":{"docs":{},"始":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}},"将":{"docs":{},"要":{"docs":{},"删":{"docs":{},"除":{"docs":{},"的":{"docs":{},"元":{"docs":{},"素":{"docs":{},"过":{"docs":{},"滤":{"docs":{},"掉":{"docs":{},"。":{"docs":{},"缺":{"docs":{},"点":{"docs":{},"是":{"docs":{},"需":{"docs":{},"要":{"docs":{},"开":{"docs":{},"辟":{"docs":{},"另":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"x":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789}}}}}}},"e":{"docs":{},"s":{"docs":{},"c":{"docs":{},"a":{"docs":{},"p":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"b":{"docs":{},"o":{"docs":{},"n":{"docs":{},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"i":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"函":{"docs":{},"数":{"docs":{},"中":{"docs":{},"分":{"docs":{},"配":{"docs":{},"的":{"docs":{},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{},"切":{"docs":{},"片":{"docs":{},"因":{"docs":{},"为":{"docs":{},"要":{"docs":{},"返":{"docs":{},"回":{"docs":{},"到":{"docs":{},"函":{"docs":{},"数":{"docs":{},"外":{"docs":{},"部":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"发":{"docs":{},"生":{"docs":{},"了":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"在":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"申":{"docs":{},"请":{"docs":{},"内":{"docs":{},"存":{"docs":{},"空":{"docs":{},"间":{"docs":{},"。":{"docs":{},"从":{"docs":{},"测":{"docs":{},"试":{"docs":{},"也":{"docs":{},"过":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"出":{"docs":{},",":{"docs":{},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"y":{"docs":{},"f":{"docs":{},"i":{"docs":{},"b":{"docs":{},"o":{"docs":{},"n":{"docs":{},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"i":{"docs":{},"(":{"docs":{},")":{"docs":{},"函":{"docs":{},"数":{"docs":{},"没":{"docs":{},"有":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},",":{"docs":{},"完":{"docs":{},"全":{"docs":{},"在":{"docs":{},"栈":{"docs":{},"上":{"docs":{},"完":{"docs":{},"成":{"docs":{},"数":{"docs":{},"组":{"docs":{},"的":{"docs":{},"创":{"docs":{},"建":{"docs":{},"。":{"docs":{},"这":{"docs":{},"里":{"docs":{},"说":{"docs":{},"明":{"docs":{},"了":{"docs":{},"对":{"docs":{},"于":{"docs":{},"一":{"docs":{},"些":{"docs":{},"短":{"docs":{},"小":{"docs":{},"的":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"栈":{"docs":{},"上":{"docs":{},"复":{"docs":{},"制":{"docs":{},"的":{"docs":{},"成":{"docs":{},"本":{"docs":{},"远":{"docs":{},"小":{"docs":{},"于":{"docs":{},"在":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"分":{"docs":{},"配":{"docs":{},"和":{"docs":{},"回":{"docs":{},"收":{"docs":{},"的":{"docs":{},"成":{"docs":{},"本":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"w":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}},"s":{"docs":{},"[":{"1":{"docs":{},"]":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"\"":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}}}}}}}},"docs":{}}}}}},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.009884678747940691},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.023076923076923078}}}},"f":{"docs":{},"i":{"docs":{},"x":{"docs":{},"e":{"docs":{},"d":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}}}}}}}}},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}}}}},".":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.006802721088435374}},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"[":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"]":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}},"d":{"docs":{},"d":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"\"":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},"\"":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}},"h":{"docs":{},"a":{"docs":{},"s":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"(":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}},"m":{"docs":{},"u":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}}}}}},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176}}}}}},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}},"s":{"docs":{},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"(":{"docs":{},"g":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},")":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}}}}}}}},"q":{"docs":{},"l":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":1.7407407407407405},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},",":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"(":{"docs":{},"v":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},")":{"docs":{},"为":{"docs":{},"单":{"docs":{},"位":{"docs":{},"访":{"docs":{},"问":{"docs":{},"。":{"docs":{},"如":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"g":{"docs":{},"n":{"docs":{},"(":{"docs":{},"g":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},")":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}},"m":{"docs":{},"s":{"docs":{},"g":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}}},".":{"docs":{},"g":{"docs":{},"o":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}},"_":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}}}}}}},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"(":{"docs":{},"m":{"docs":{},"s":{"docs":{},"g":{"docs":{},",":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}}}}}}}}}}}},"a":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"n":{"docs":{},"g":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}}},"m":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"a":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}},"t":{"docs":{},"e":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"n":{"docs":{},"a":{"docs":{},"p":{"docs":{},"s":{"docs":{},"h":{"docs":{},"o":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.01358695652173913}},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}}}},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.04132231404958678}}}}},",":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}},"[":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{},"]":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537}}}}}}},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}},"v":{"docs":{},"e":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"t":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}},"o":{"docs":{},"l":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}},"d":{"docs":{},"o":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"/":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"\"":{"docs":{},"之":{"docs":{},"类":{"docs":{},"的":{"docs":{},"短":{"docs":{},"语":{"docs":{},"来":{"docs":{},"保":{"docs":{},"持":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"简":{"docs":{},"洁":{"docs":{},",":{"docs":{},"当":{"docs":{},"错":{"docs":{},"误":{"docs":{},"通":{"docs":{},"过":{"docs":{},"堆":{"docs":{},"栈":{"docs":{},"向":{"docs":{},"上":{"docs":{},"传":{"docs":{},"递":{"docs":{},"时":{"docs":{},",":{"docs":{},"它":{"docs":{},"会":{"docs":{},"一":{"docs":{},"层":{"docs":{},"一":{"docs":{},"层":{"docs":{},"被":{"docs":{},"堆":{"docs":{},"积":{"docs":{},"起":{"docs":{},"来":{"docs":{},":":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.018404907975460124},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},"x":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"e":{"docs":{},"。":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}},"s":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},"t":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.012269938650306749}}}}}}}}}}}}}}}},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"(":{"docs":{},"t":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"t":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}}}}}},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"t":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701}}}}}}},"x":{"docs":{},"t":{"docs":{},"u":{"docs":{},"a":{"docs":{},"l":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}},"h":{"docs":{},"i":{"docs":{},"r":{"docs":{},"d":{"docs":{},"_":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}},"a":{"docs":{},"g":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}},"b":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}},"r":{"docs":{},"u":{"docs":{},"e":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"}":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},")":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},",":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"i":{"docs":{},"p":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.008152173913043478}},"s":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"[":{"0":{"docs":{},"]":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}},",":{"docs":{},"但":{"docs":{},"不":{"docs":{},"会":{"docs":{},"影":{"docs":{},"响":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}},"docs":{}}}}}},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.010830324909747292},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01845018450184502},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.013157894736842105},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.037037037037037035},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.016304347826086956},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.0380952380952381},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.029411764705882353},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.03550295857988166},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.023391812865497075},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.013793103448275862},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"s":{"docs":{},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},".":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}},":":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.010344827586206896}}}},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"{":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":3.333333333333333},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{},"(":{"1":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"r":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}},"m":{"docs":{},"i":{"docs":{},"c":{"docs":{},"r":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},"(":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.03153153153153153},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0234375}},"e":{"docs":{},",":{"docs":{},"在":{"docs":{},"比":{"docs":{},"较":{"docs":{},"、":{"docs":{},"添":{"docs":{},"加":{"docs":{},"或":{"docs":{},"减":{"docs":{},"去":{"docs":{},"时":{"docs":{},"间":{"docs":{},"时":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}},"如":{"docs":{},"果":{"docs":{},"底":{"docs":{},"层":{"docs":{},"驱":{"docs":{},"动":{"docs":{},"程":{"docs":{},"序":{"docs":{},"支":{"docs":{},"持":{"docs":{},"则":{"docs":{},"返":{"docs":{},"回":{"docs":{},";":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"u":{"docs":{},"r":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.02702702702702703}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"该":{"docs":{},"单":{"docs":{},"位":{"docs":{},"包":{"docs":{},"含":{"docs":{},"在":{"docs":{},"字":{"docs":{},"段":{"docs":{},"的":{"docs":{},"名":{"docs":{},"称":{"docs":{},"中":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}},"h":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}},"m":{"docs":{},"i":{"docs":{},"l":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}},"e":{"docs":{},"d":{"docs":{},"u":{"docs":{},"r":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009}}}}}}}}}},"r":{"docs":{},"f":{"docs":{},"c":{"3":{"3":{"3":{"9":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}},"u":{"docs":{},"n":{"docs":{},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"h":{"docs":{},"a":{"docs":{},"l":{"docs":{},"j":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}},",":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.03125}},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}}}},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}}}},".":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"(":{"docs":{},"t":{"docs":{},"t":{"docs":{},".":{"docs":{},"g":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"(":{"2":{"4":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"docs":{}},"docs":{}},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"0":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"docs":{}}}}}}}}}},"t":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}},".":{"docs":{},"w":{"docs":{},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}},"m":{"docs":{},"p":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}}}},"w":{"docs":{},"o":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"w":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"i":{"docs":{},"k":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.013333333333333334}},"p":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{},"a":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"w":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}},".":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"(":{"docs":{},"e":{"docs":{},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"r":{"docs":{},"c":{"docs":{},",":{"docs":{},"e":{"docs":{},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"r":{"docs":{},"c":{"docs":{},")":{"docs":{},"}":{"docs":{},"i":{"docs":{},"m":{"docs":{},"g":{"docs":{},"{":{"docs":{},"c":{"docs":{},"u":{"docs":{},"r":{"docs":{},"s":{"docs":{},"o":{"docs":{},"r":{"docs":{},":":{"docs":{},"p":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"}":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"r":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"t":{"docs":{},"h":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}}}},"e":{"docs":{},"b":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.020710059171597635}},"s":{"docs":{},"i":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.022988505747126436}}}}}}},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}},":":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498}}}}}}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}},":":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498}}}}}}},",":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}},"i":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.03019538188277087}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.014209591474245116}},",":{"docs":{},"处":{"docs":{},"于":{"docs":{},"等":{"docs":{},"待":{"docs":{},"状":{"docs":{},"态":{"docs":{},"。":{"docs":{},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}},"k":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.007104795737122558}}}}},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"c":{"docs":{},"h":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}},"s":{"docs":{},"h":{"docs":{},"o":{"docs":{},"p":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}},"d":{"docs":{},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.01282051282051282},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"(":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}},"w":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"\"":{"docs":{},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"。":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}},"r":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.007104795737122558}}}},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"\"":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"。":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}},".":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"p":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}},"g":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.009111617312072893}},".":{"docs":{},"w":{"docs":{},"a":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}}}}},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"(":{"docs":{},"n":{"docs":{},"u":{"docs":{},"m":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"h":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}},"|":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.06804733727810651},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},"|":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"不":{"docs":{},"仅":{"docs":{},"易":{"docs":{},"用":{"docs":{},",":{"docs":{},"也":{"docs":{},"很":{"docs":{},"易":{"docs":{},"学":{"docs":{},",":{"docs":{},"这":{"docs":{},"得":{"docs":{},"益":{"docs":{},"于":{"docs":{},"与":{"docs":{},"之":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"的":{"docs":{},"丰":{"docs":{},"富":{"docs":{},"学":{"docs":{},"习":{"docs":{},"资":{"docs":{},"料":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"应":{"docs":{},"该":{"docs":{},"拥":{"docs":{},"有":{"docs":{},"的":{"docs":{},"目":{"docs":{},"录":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}},"/":{"docs":{},"s":{"docs":{},"r":{"docs":{},"c":{"3":{"docs":{},".":{"docs":{},"小":{"docs":{},"结":{"docs":{},"参":{"docs":{},"考":{"docs":{},"文":{"docs":{},"献":{"1":{"docs":{},".":{"docs":{},"前":{"docs":{},"言":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"docs":{}}}}}}}}},"docs":{}}}}}}}}}}}},"管":{"docs":{},"是":{"docs":{},"什":{"docs":{},"么":{"docs":{},"语":{"docs":{},"言":{"docs":{},",":{"docs":{},"开":{"docs":{},"发":{"docs":{},"什":{"docs":{},"么":{"docs":{},"项":{"docs":{},"目":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"稍":{"docs":{},"大":{"docs":{},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},",":{"docs":{},"必":{"docs":{},"然":{"docs":{},"要":{"docs":{},"面":{"docs":{},"临":{"docs":{},"如":{"docs":{},"何":{"docs":{},"管":{"docs":{},"理":{"docs":{},"项":{"docs":{},"目":{"docs":{},"结":{"docs":{},"构":{"docs":{},"布":{"docs":{},"局":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"一":{"docs":{},"个":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"清":{"docs":{},"晰":{"docs":{},"的":{"docs":{},"布":{"docs":{},"局":{"docs":{},"是":{"docs":{},"项":{"docs":{},"目":{"docs":{},"可":{"docs":{},"读":{"docs":{},"的":{"docs":{},"关":{"docs":{},"键":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"全":{"docs":{},"局":{"docs":{},"切":{"docs":{},"片":{"docs":{},"还":{"docs":{},"是":{"docs":{},"局":{"docs":{},"部":{"docs":{},"切":{"docs":{},"片":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}},"要":{"docs":{},"在":{"docs":{},"该":{"docs":{},"目":{"docs":{},"录":{"docs":{},"下":{"docs":{},"放":{"docs":{},"太":{"docs":{},"多":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"以":{"docs":{},"被":{"docs":{},"其":{"docs":{},"他":{"docs":{},"项":{"docs":{},"目":{"docs":{},"导":{"docs":{},"入":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"请":{"docs":{},"放":{"docs":{},"到":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"添":{"docs":{},"加":{"docs":{},"没":{"docs":{},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{},"括":{"docs":{},"号":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}}}},"使":{"docs":{},"用":{"2":{"docs":{},"/":{"4":{"docs":{},"来":{"docs":{},"表":{"docs":{},"达":{"docs":{},"英":{"docs":{},"文":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"docs":{}}},"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"表":{"docs":{},"示":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}},"相":{"docs":{},"对":{"docs":{},"路":{"docs":{},"径":{"docs":{},"导":{"docs":{},"入":{"docs":{},"内":{"docs":{},"部":{"docs":{},"包":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"使":{"docs":{},"用":{"docs":{},"完":{"docs":{},"整":{"docs":{},"的":{"docs":{},"路":{"docs":{},"径":{"docs":{},"引":{"docs":{},"入":{"docs":{},"包":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}},"大":{"docs":{},"而":{"docs":{},"全":{"docs":{},"的":{"docs":{},"无":{"docs":{},"意":{"docs":{},"义":{"docs":{},"包":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}},"双":{"docs":{},"重":{"docs":{},"否":{"docs":{},"定":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}},"包":{"docs":{},"装":{"docs":{},"系":{"docs":{},"统":{"docs":{},"调":{"docs":{},"用":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"并":{"docs":{},"给":{"docs":{},"出":{"docs":{},"一":{"docs":{},"些":{"docs":{},"没":{"docs":{},"意":{"docs":{},"义":{"docs":{},"的":{"docs":{},"附":{"docs":{},"加":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}}}},"随":{"docs":{},"便":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"用":{"docs":{},"注":{"docs":{},"释":{"docs":{},"删":{"docs":{},"除":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}},"宽":{"docs":{},"泛":{"docs":{},"、":{"docs":{},"无":{"docs":{},"意":{"docs":{},"义":{"docs":{},"的":{"docs":{},"名":{"docs":{},"字":{"docs":{},",":{"docs":{},"如":{"docs":{},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}},"轻":{"docs":{},"易":{"docs":{},"使":{"docs":{},"用":{"docs":{},"别":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"传":{"docs":{},"递":{"docs":{},"指":{"docs":{},"针":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}},"返":{"docs":{},"回":{"docs":{},"多":{"docs":{},"个":{"docs":{},"用":{"docs":{},"于":{"docs":{},"控":{"docs":{},"制":{"docs":{},"流":{"docs":{},"程":{"docs":{},"的":{"docs":{},"状":{"docs":{},"态":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}},"这":{"docs":{},"样":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}},"反":{"docs":{},"复":{"docs":{},"从":{"docs":{},"固":{"docs":{},"定":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"创":{"docs":{},"建":{"docs":{},"字":{"docs":{},"节":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}}}}}}}}}}}}},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},"空":{"docs":{},"行":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}},"可":{"docs":{},"避":{"docs":{},"免":{"docs":{},"时":{"docs":{},",":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}},"能":{"docs":{},"满":{"docs":{},"足":{"docs":{},"这":{"docs":{},"些":{"docs":{},"要":{"docs":{},"求":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"能":{"docs":{},"要":{"docs":{},"在":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}},"被":{"docs":{},"复":{"docs":{},"制":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"的":{"docs":{},"原":{"docs":{},"因":{"docs":{},",":{"docs":{},"并":{"docs":{},"不":{"docs":{},"是":{"docs":{},"因":{"docs":{},"为":{"docs":{},"其":{"docs":{},"内":{"docs":{},"部":{"docs":{},"嵌":{"docs":{},"套":{"docs":{},"了":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}},"是":{"docs":{},"错":{"docs":{},"误":{"docs":{},"处":{"docs":{},"理":{"docs":{},"的":{"docs":{},"合":{"docs":{},"适":{"docs":{},"策":{"docs":{},"略":{"docs":{},",":{"docs":{},"仅":{"docs":{},"当":{"docs":{},"发":{"docs":{},"生":{"docs":{},"不":{"docs":{},"可":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"的":{"docs":{},"异":{"docs":{},"常":{"docs":{},"(":{"docs":{},"如":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}}}},"基":{"docs":{},"于":{"docs":{},"代":{"docs":{},"码":{"docs":{},"块":{"docs":{},"的":{"docs":{},",":{"docs":{},"而":{"docs":{},"是":{"docs":{},"基":{"docs":{},"于":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"。":{"docs":{},"你":{"docs":{},"在":{"docs":{},"循":{"docs":{},"环":{"docs":{},"中":{"docs":{},"分":{"docs":{},"配":{"docs":{},"资":{"docs":{},"源":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"不":{"docs":{},"应":{"docs":{},"该":{"docs":{},"简":{"docs":{},"单":{"docs":{},"地":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"提":{"docs":{},"示":{"docs":{},":":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"将":{"docs":{},"为":{"docs":{},"提":{"docs":{},"供":{"docs":{},"给":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}},"用":{"docs":{},"复":{"docs":{},"数":{"docs":{},"。":{"docs":{},"如":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"存":{"docs":{},"在":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"不":{"docs":{},"允":{"docs":{},"许":{"docs":{},"部":{"docs":{},"分":{"docs":{},"失":{"docs":{},"败":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}},"再":{"docs":{},"受":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"保":{"docs":{},"护":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"引":{"docs":{},"发":{"docs":{},"并":{"docs":{},"发":{"docs":{},"读":{"docs":{},"写":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}}}}}}}}}},"支":{"docs":{},"持":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}},"建":{"docs":{},"议":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}},"同":{"docs":{},"。":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}},",":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}},"发":{"docs":{},"送":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},"信":{"docs":{},"道":{"2":{"docs":{},".":{"3":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},"docs":{}}},"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"发":{"docs":{},"送":{"docs":{},"任":{"docs":{},"何":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"只":{"docs":{},"用":{"docs":{},"来":{"docs":{},"通":{"docs":{},"知":{"docs":{},"子":{"docs":{},"协":{"docs":{},"程":{"docs":{},"(":{"docs":{},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},")":{"docs":{},"执":{"docs":{},"行":{"docs":{},"任":{"docs":{},"务":{"docs":{},",":{"docs":{},"或":{"docs":{},"只":{"docs":{},"用":{"docs":{},"来":{"docs":{},"控":{"docs":{},"制":{"docs":{},"协":{"docs":{},"程":{"docs":{},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},"。":{"docs":{},"这":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"作":{"docs":{},"为":{"docs":{},"占":{"docs":{},"位":{"docs":{},"符":{"docs":{},"就":{"docs":{},"非":{"docs":{},"常":{"docs":{},"合":{"docs":{},"适":{"docs":{},"了":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"分":{"docs":{},"片":{"docs":{},"写":{"docs":{},"入":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}},"之":{"docs":{},"势":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}},"外":{"docs":{},"使":{"docs":{},"用":{"docs":{},"函":{"docs":{},"数":{"docs":{},"调":{"docs":{},"用":{"docs":{},"的":{"docs":{},"结":{"docs":{},"果":{"docs":{},",":{"docs":{},"则":{"docs":{},"不":{"docs":{},"应":{"docs":{},"尝":{"docs":{},"试":{"docs":{},"缩":{"docs":{},"小":{"docs":{},"范":{"docs":{},"围":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}},"间":{"docs":{},"操":{"docs":{},"作":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"也":{"docs":{},"是":{"docs":{},"不":{"docs":{},"错":{"docs":{},"的":{"docs":{},"选":{"docs":{},"择":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}},"互":{"docs":{},"动":{"docs":{},"勘":{"docs":{},"误":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}},"斥":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"的":{"docs":{},"作":{"docs":{},"用":{"docs":{},"是":{"docs":{},"保":{"docs":{},"证":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"同":{"docs":{},"一":{"docs":{},"时":{"docs":{},"刻":{"docs":{},"只":{"docs":{},"能":{"docs":{},"被":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"想":{"docs":{},"写":{"docs":{},"出":{"docs":{},"更":{"docs":{},"加":{"docs":{},"高":{"docs":{},"效":{"docs":{},"易":{"docs":{},"读":{"docs":{},"的":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}},"让":{"docs":{},"自":{"docs":{},"己":{"docs":{},"拥":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"更":{"docs":{},"好":{"docs":{},"的":{"docs":{},"编":{"docs":{},"码":{"docs":{},"风":{"docs":{},"格":{"docs":{},",":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}},"目":{"docs":{},"录":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}},"/":{"docs":{},"c":{"docs":{},"m":{"docs":{},"d":{"docs":{},"/":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"a":{"docs":{},"l":{"docs":{},"/":{"docs":{},"p":{"docs":{},"k":{"docs":{},"g":{"docs":{},"/":{"docs":{},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"r":{"2":{"docs":{},".":{"3":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}},"必":{"docs":{},"须":{"docs":{},"用":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}},"生":{"docs":{},"成":{"docs":{},"工":{"docs":{},"具":{"docs":{},"自":{"docs":{},"动":{"docs":{},"生":{"docs":{},"成":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"排":{"docs":{},"除":{"docs":{},"此":{"docs":{},"规":{"docs":{},"则":{"docs":{},"(":{"docs":{},"如":{"docs":{},"协":{"docs":{},"议":{"docs":{},"生":{"docs":{},"成":{"docs":{},"文":{"docs":{},"件":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"优":{"docs":{},"先":{"docs":{},"处":{"docs":{},"理":{"docs":{},"条":{"docs":{},"件":{"docs":{},"不":{"docs":{},"满":{"docs":{},"足":{"docs":{},"或":{"docs":{},"错":{"docs":{},"误":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"尽":{"docs":{},"早":{"docs":{},"返":{"docs":{},"回":{"docs":{},"或":{"docs":{},"继":{"docs":{},"续":{"docs":{},"循":{"docs":{},"环":{"docs":{},"来":{"docs":{},"减":{"docs":{},"少":{"docs":{},"嵌":{"docs":{},"套":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"与":{"docs":{},"官":{"docs":{},"方":{"docs":{},"推":{"docs":{},"荐":{"docs":{},"的":{"docs":{},"格":{"docs":{},"式":{"docs":{},"保":{"docs":{},"持":{"docs":{},"一":{"docs":{},"致":{"docs":{},",":{"docs":{},"于":{"docs":{},"是":{"docs":{},"所":{"docs":{},"有":{"docs":{},"格":{"docs":{},"式":{"docs":{},"有":{"docs":{},"关":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"都":{"docs":{},"以":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}},"即":{"docs":{},"注":{"docs":{},"释":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"的":{"docs":{},"稳":{"docs":{},"健":{"docs":{},"、":{"docs":{},"可":{"docs":{},"读":{"docs":{},"和":{"docs":{},"高":{"docs":{},"效":{"docs":{},"是":{"docs":{},"我":{"docs":{},"们":{"docs":{},"每":{"docs":{},"一":{"docs":{},"个":{"docs":{},"位":{"docs":{"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456}}}}}}}}}}}}}}}}}},"风":{"docs":{},"格":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"内":{"docs":{},"容":{"docs":{},"简":{"docs":{},"介":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}},"部":{"docs":{},"包":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}},"实":{"docs":{},"现":{"docs":{},"决":{"docs":{},"定":{"docs":{},"而":{"docs":{},"和":{"docs":{},"具":{"docs":{},"体":{"docs":{},"的":{"docs":{},"语":{"docs":{},"法":{"docs":{},"没":{"docs":{},"有":{"docs":{},"关":{"docs":{},"系":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}},"是":{"docs":{},"维":{"docs":{},"护":{"docs":{},"着":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"维":{"docs":{},"护":{"docs":{},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{},"等":{"docs":{},"待":{"docs":{},"队":{"docs":{},"列":{"docs":{},",":{"docs":{},"队":{"docs":{},"列":{"docs":{},"中":{"docs":{},"存":{"docs":{},"放":{"docs":{},"的":{"docs":{},"是":{"docs":{},"所":{"docs":{},"有":{"docs":{},"在":{"docs":{},"等":{"docs":{},"待":{"docs":{},"这":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"前":{"docs":{},"变":{"docs":{},"量":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"规":{"docs":{},"则":{"3":{"docs":{},".":{"docs":{},"合":{"docs":{},"理":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}},"开":{"docs":{},"销":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"写":{"docs":{},"出":{"docs":{},"更":{"docs":{},"优":{"docs":{},"质":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}},"入":{"docs":{},"到":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"锁":{"docs":{},"与":{"docs":{},"读":{"docs":{},"锁":{"docs":{},"是":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"的":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"存":{"docs":{},"在":{"docs":{},"读":{"docs":{},"锁":{"docs":{},",":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"存":{"docs":{},"在":{"docs":{},"写":{"docs":{},"锁":{"docs":{},",":{"docs":{},"读":{"docs":{},"锁":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"之":{"docs":{},"间":{"docs":{},"是":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"的":{"docs":{},",":{"docs":{},"存":{"docs":{},"在":{"docs":{},"写":{"docs":{},"锁":{"docs":{},",":{"docs":{},"其":{"docs":{},"他":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}},"并":{"docs":{},"发":{"docs":{},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"随":{"docs":{},"便":{"docs":{},"起":{"docs":{},"个":{"docs":{},"成":{"docs":{},"千":{"docs":{},"上":{"docs":{},"万":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}},"前":{"docs":{},"言":{"docs":{"./":{"ref":"./","tf":10}}},"都":{"docs":{},"应":{"docs":{},"该":{"docs":{},"被":{"docs":{},"删":{"docs":{},"除":{"docs":{},",":{"docs":{},"除":{"docs":{},"非":{"docs":{},"添":{"docs":{},"加":{"docs":{},"注":{"docs":{},"释":{"docs":{},"讲":{"docs":{},"解":{"docs":{},"为":{"docs":{},"什":{"docs":{},"么":{"docs":{},"不":{"docs":{},"删":{"docs":{},"除":{"docs":{},",":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}},"缀":{"docs":{},")":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}},"面":{"docs":{},"的":{"docs":{},"例":{"docs":{},"子":{"docs":{},"过":{"docs":{},"于":{"docs":{},"极":{"docs":{},"端":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"程":{"docs":{},"序":{"docs":{},"也":{"docs":{},"不":{"docs":{},"会":{"docs":{},"无":{"docs":{},"限":{"docs":{},"开":{"docs":{},"辟":{"docs":{},"协":{"docs":{},"程":{"docs":{},",":{"docs":{},"旨":{"docs":{},"在":{"docs":{},"说":{"docs":{},"明":{"docs":{},"协":{"docs":{},"程":{"docs":{},"数":{"docs":{},"量":{"docs":{},"是":{"docs":{},"有":{"docs":{},"限":{"docs":{},"制":{"docs":{},"的":{"docs":{},",":{"docs":{},"不":{"docs":{},"能":{"docs":{},"无":{"docs":{},"限":{"docs":{},"开":{"docs":{},"辟":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"一":{"docs":{},"段":{"docs":{},"注":{"docs":{},"释":{"docs":{},",":{"docs":{},"说":{"docs":{},"明":{"docs":{},"了":{"docs":{},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}},"要":{"docs":{},"加":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"需":{"docs":{},"要":{"docs":{},"对":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},"进":{"docs":{},"行":{"docs":{},"上":{"docs":{},"锁":{"docs":{},",":{"docs":{},"主":{"docs":{},"调":{"docs":{},"加":{"docs":{},"入":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"通":{"docs":{},"知":{"docs":{},"列":{"docs":{},"表":{"docs":{},"后":{"docs":{},"再":{"docs":{},"解":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"功":{"docs":{},"能":{"docs":{},"实":{"docs":{},"践":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}},"设":{"docs":{},"计":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"各":{"docs":{},"个":{"docs":{},"公":{"docs":{},"司":{"docs":{},"或":{"docs":{},"组":{"docs":{},"织":{"docs":{},",":{"docs":{},"都":{"docs":{},"有":{"docs":{},"各":{"docs":{},"自":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}},"占":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"据":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"向":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},"和":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.008875739644970414},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":2.5081521739130435},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.018018018018018018},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"其":{"docs":{},"他":{"docs":{},"形":{"docs":{},"式":{"docs":{},"的":{"docs":{},"确":{"docs":{},"定":{"docs":{},"性":{"docs":{},"预":{"docs":{},"计":{"docs":{},"算":{"docs":{},"的":{"docs":{},"优":{"docs":{},"化":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}},"没":{"docs":{},"有":{"docs":{},"任":{"docs":{},"何":{"docs":{},"元":{"docs":{},"素":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}},"如":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789}},"果":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},"你":{"docs":{},"对":{"docs":{},"文":{"docs":{},"章":{"docs":{},"内":{"docs":{},"容":{"docs":{},"有":{"docs":{},"任":{"docs":{},"何":{"docs":{},"疑":{"docs":{},"问":{"docs":{},"和":{"docs":{},"建":{"docs":{},"议":{"docs":{},",":{"docs":{},"欢":{"docs":{},"迎":{"docs":{},"在":{"docs":{},"应":{"docs":{},"相":{"docs":{},"应":{"docs":{},"章":{"docs":{},"节":{"docs":{},"下":{"docs":{},"留":{"docs":{},"言":{"docs":{},"探":{"docs":{},"讨":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"不":{"docs":{},"使":{"docs":{},"用":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"是":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}},"想":{"docs":{},"全":{"docs":{},"面":{"docs":{},"了":{"docs":{},"解":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}},"深":{"docs":{},"入":{"docs":{},"了":{"docs":{},"解":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}},"枚":{"docs":{},"举":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"常":{"docs":{},"量":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"先":{"docs":{},"创":{"docs":{},"建":{"docs":{},"相":{"docs":{},"应":{"docs":{},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}},"这":{"docs":{},"样":{"docs":{},",":{"docs":{},"请":{"docs":{},"参":{"docs":{},"阅":{"docs":{},"错":{"docs":{},"误":{"docs":{},"包":{"docs":{},"装":{"docs":{},"部":{"docs":{},"分":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}},"静":{"docs":{},"态":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"必":{"docs":{},"须":{"docs":{},"通":{"docs":{},"过":{"docs":{},"声":{"docs":{},"明":{"docs":{},"顶":{"docs":{},"级":{"docs":{},"错":{"docs":{},"误":{"docs":{},"变":{"docs":{},"量":{"docs":{},"或":{"docs":{},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"类":{"docs":{},"型":{"docs":{},"来":{"docs":{},"支":{"docs":{},"持":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}},"代":{"docs":{},"码":{"docs":{},"不":{"docs":{},"可":{"docs":{},"复":{"docs":{},"用":{"docs":{},"或":{"docs":{},"者":{"docs":{},"你":{"docs":{},"不":{"docs":{},"希":{"docs":{},"望":{"docs":{},"其":{"docs":{},"他":{"docs":{},"项":{"docs":{},"目":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"请":{"docs":{},"放":{"docs":{},"到":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}},"发":{"docs":{},"现":{"docs":{},"此":{"docs":{},"项":{"docs":{},"目":{"docs":{},"布":{"docs":{},"局":{"docs":{},"规":{"docs":{},"范":{"docs":{},"并":{"docs":{},"不":{"docs":{},"适":{"docs":{},"用":{"docs":{},"自":{"docs":{},"己":{"docs":{},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},",":{"docs":{},"可":{"docs":{},"在":{"docs":{},"其":{"docs":{},"基":{"docs":{},"础":{"docs":{},"上":{"docs":{},"适":{"docs":{},"当":{"docs":{},"做":{"docs":{},"出":{"docs":{},"改":{"docs":{},"变":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"泥":{"docs":{},"古":{"docs":{},"拘":{"docs":{},"方":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"手":{"docs":{},"动":{"docs":{},"管":{"docs":{},"理":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"包":{"docs":{},"可":{"docs":{},"以":{"docs":{},"将":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"包":{"docs":{},"放":{"docs":{},"到":{"docs":{},"该":{"docs":{},"目":{"docs":{},"录":{"docs":{},",":{"docs":{},"当":{"docs":{},"然":{"docs":{},"推":{"docs":{},"荐":{"docs":{},"使":{"docs":{},"用":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"包":{"docs":{},"管":{"docs":{},"理":{"docs":{},"工":{"docs":{},"具":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},"仅":{"docs":{},"在":{"docs":{},"单":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"内":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"则":{"docs":{},"应":{"docs":{},"该":{"docs":{},"定":{"docs":{},"义":{"docs":{},"为":{"docs":{},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},"声":{"docs":{},"明":{"docs":{},"中":{"docs":{},"省":{"docs":{},"略":{"docs":{},"了":{"docs":{},"结":{"docs":{},"构":{"docs":{},"的":{"docs":{},"所":{"docs":{},"有":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"请":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}},"表":{"docs":{},"达":{"docs":{},"式":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"与":{"docs":{},"所":{"docs":{},"需":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"不":{"docs":{},"完":{"docs":{},"全":{"docs":{},"匹":{"docs":{},"配":{"docs":{},",":{"docs":{},"请":{"docs":{},"指":{"docs":{},"定":{"docs":{},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}},"不":{"docs":{},"关":{"docs":{},"心":{"docs":{},"是":{"docs":{},"否":{"docs":{},"成":{"docs":{},"功":{"docs":{},",":{"docs":{},"可":{"docs":{},"显":{"docs":{},"示":{"docs":{},"忽":{"docs":{},"略":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}},"为":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"出":{"docs":{},"现":{"docs":{},"失":{"docs":{},"败":{"docs":{},"应":{"docs":{},"该":{"docs":{},"立":{"docs":{},"即":{"docs":{},"返":{"docs":{},"回":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"继":{"docs":{},"续":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"则":{"docs":{},"属":{"docs":{},"于":{"docs":{},"特":{"docs":{},"殊":{"docs":{},"情":{"docs":{},"况":{"docs":{},"需":{"docs":{},"要":{"docs":{},"添":{"docs":{},"加":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"函":{"docs":{},"数":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"需":{"docs":{},"用":{"docs":{},"于":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"其":{"docs":{},"他":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"则":{"docs":{},"采":{"docs":{},"用":{"docs":{},"下":{"docs":{},"面":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}}}}}},"变":{"docs":{},"量":{"docs":{},"为":{"docs":{},"私":{"docs":{},"有":{"docs":{},",":{"docs":{},"且":{"docs":{},"特":{"docs":{},"有":{"docs":{},"名":{"docs":{},"词":{"docs":{},"为":{"docs":{},"首":{"docs":{},"个":{"docs":{},"单":{"docs":{},"词":{"docs":{},",":{"docs":{},"则":{"docs":{},"使":{"docs":{},"用":{"docs":{},"小":{"docs":{},"写":{"docs":{},",":{"docs":{},"如":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}},"类":{"docs":{},"型":{"docs":{},"不":{"docs":{},"确":{"docs":{},"定":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"将":{"docs":{},"会":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"到":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{},",":{"docs":{},"函":{"docs":{},"数":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"如":{"docs":{},"果":{"docs":{},"能":{"docs":{},"确":{"docs":{},"定":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"就":{"docs":{},"不":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"第":{"docs":{},"一":{"docs":{},"项":{"docs":{},"(":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{},")":{"docs":{},",":{"docs":{},"就":{"docs":{},"丢":{"docs":{},"弃":{"docs":{},"第":{"docs":{},"二":{"docs":{},"项":{"docs":{},"(":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{},"e":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}},"二":{"docs":{},"项":{"docs":{},",":{"docs":{},"则":{"docs":{},"把":{"docs":{},"第":{"docs":{},"一":{"docs":{},"项":{"docs":{},"置":{"docs":{},"为":{"docs":{},"空":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{},"(":{"docs":{},"下":{"docs":{},"划":{"docs":{},"线":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}},"我":{"docs":{},"们":{"docs":{},"调":{"docs":{},"用":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}},"针":{"docs":{},"对":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"开":{"docs":{},"辟":{"docs":{},"很":{"docs":{},"多":{"docs":{},"协":{"docs":{},"程":{"docs":{},",":{"docs":{},"但":{"docs":{},"不":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"程":{"docs":{},"序":{"docs":{},"崩":{"docs":{},"溃":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"吗":{"docs":{},"?":{"docs":{},"如":{"docs":{},"果":{"docs":{},"真":{"docs":{},"要":{"docs":{},"这":{"docs":{},"么":{"docs":{},"做":{"docs":{},"的":{"docs":{},"话":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"清":{"docs":{},"楚":{"docs":{},"地":{"docs":{},"知":{"docs":{},"道":{"docs":{},",":{"docs":{},"协":{"docs":{},"程":{"docs":{},"虽":{"docs":{},"然":{"docs":{},"轻":{"docs":{},"量":{"docs":{},",":{"docs":{},"但":{"docs":{},"仍":{"docs":{},"有":{"docs":{},"开":{"docs":{},"销":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"在":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"传":{"docs":{},"入":{"docs":{},"的":{"docs":{},"参":{"docs":{},"数":{"docs":{},"通":{"docs":{},"常":{"docs":{},"是":{"docs":{},"固":{"docs":{},"定":{"docs":{},"的":{"docs":{},",":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"通":{"docs":{},"过":{"docs":{},"实":{"docs":{},"现":{"docs":{},"多":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"实":{"docs":{},"现":{"docs":{},"默":{"docs":{},"认":{"docs":{},"参":{"docs":{},"数":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{},"出":{"docs":{},"现":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{},"仅":{"docs":{},"被":{"docs":{},"使":{"docs":{},"用":{"docs":{},"一":{"docs":{},"次":{"docs":{},",":{"docs":{},"且":{"docs":{},"不":{"docs":{},"能":{"docs":{},"起":{"docs":{},"到":{"docs":{},"解":{"docs":{},"释":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"的":{"docs":{},"作":{"docs":{},"用":{"docs":{},"时":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"删":{"docs":{},"除":{"docs":{},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"内":{"docs":{},"联":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"操":{"docs":{},"作":{"docs":{},"成":{"docs":{},"功":{"docs":{},",":{"docs":{},"再":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}},"方":{"docs":{},"法":{"docs":{},"不":{"docs":{},"使":{"docs":{},"用":{"docs":{},"类":{"docs":{},"的":{"docs":{},"成":{"docs":{},"员":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"实":{"docs":{},"现":{"docs":{},"为":{"docs":{},"非":{"docs":{},"成":{"docs":{},"员":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}},"非":{"docs":{},"成":{"docs":{},"员":{"docs":{},"函":{"docs":{},"数":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"类":{"docs":{},"的":{"docs":{},"多":{"docs":{},"个":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"实":{"docs":{},"现":{"docs":{},"为":{"docs":{},"成":{"docs":{},"员":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}},"要":{"docs":{},"开":{"docs":{},"启":{"docs":{},"多":{"docs":{},"个":{"docs":{},"线":{"docs":{},"程":{"docs":{},"执":{"docs":{},"行":{"docs":{},"一":{"docs":{},"组":{"docs":{},"动":{"docs":{},"作":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"要":{"docs":{},"等":{"docs":{},"待":{"docs":{},"全":{"docs":{},"部":{"docs":{},"完":{"docs":{},"成":{"docs":{},"后":{"docs":{},"继":{"docs":{},"续":{"docs":{},"后":{"docs":{},"续":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},",":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"*":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"与":{"docs":{},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},".":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"不":{"docs":{},"匹":{"docs":{},"配":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"语":{"docs":{},"句":{"docs":{},"v":{"docs":{},"a":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"类":{"docs":{},"似":{"docs":{},"上":{"docs":{},"面":{"docs":{},"分":{"docs":{},"配":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"段":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"将":{"docs":{},"其":{"docs":{},"包":{"docs":{},"裹":{"docs":{},"在":{"docs":{},"一":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"中":{"docs":{},"(":{"docs":{},"匿":{"docs":{},"名":{"docs":{},"函":{"docs":{},"数":{"docs":{},"或":{"docs":{},"有":{"docs":{},"名":{"docs":{},"函":{"docs":{},"数":{"docs":{},")":{"docs":{},"。":{"docs":{},"在":{"docs":{},"该":{"docs":{},"函":{"docs":{},"数":{"docs":{},"中":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"没":{"docs":{},"有":{"docs":{},"要":{"docs":{},"添":{"docs":{},"加":{"docs":{},"的":{"docs":{},"其":{"docs":{},"他":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},",":{"docs":{},"则":{"docs":{},"按":{"docs":{},"原":{"docs":{},"样":{"docs":{},"返":{"docs":{},"回":{"docs":{},"原":{"docs":{},"始":{"docs":{},"错":{"docs":{},"误":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"它":{"docs":{},",":{"docs":{},"则":{"docs":{},"使":{"docs":{},"用":{"docs":{},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"f":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"确":{"docs":{},"实":{"docs":{},"需":{"docs":{},"要":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"它":{"docs":{},",":{"docs":{},"则":{"docs":{},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"切":{"docs":{},"片":{"docs":{},"中":{"docs":{},"是":{"docs":{},"指":{"docs":{},"向":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"呢":{"docs":{},"?":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}},"想":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}},"使":{"docs":{},"用":{"docs":{},"局":{"docs":{},"部":{"docs":{},"切":{"docs":{},"片":{"docs":{},"时":{"docs":{},",":{"docs":{},"已":{"docs":{},"知":{"docs":{},"切":{"docs":{},"片":{"docs":{},"的":{"docs":{},"长":{"docs":{},"度":{"docs":{},"或":{"docs":{},"容":{"docs":{},"量":{"docs":{},",":{"docs":{},"请":{"docs":{},"使":{"docs":{},"用":{"docs":{},"常":{"docs":{},"量":{"docs":{},"或":{"docs":{},"数":{"docs":{},"值":{"docs":{},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{},"来":{"docs":{},"定":{"docs":{},"义":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"加":{"docs":{},"锁":{"docs":{},"无":{"docs":{},"法":{"docs":{},"避":{"docs":{},"免":{"docs":{},",":{"docs":{},"则":{"docs":{},"可":{"docs":{},"以":{"docs":{},"采":{"docs":{},"用":{"docs":{},"分":{"docs":{},"片":{"docs":{},"的":{"docs":{},"形":{"docs":{},"式":{"docs":{},",":{"docs":{},"减":{"docs":{},"少":{"docs":{},"对":{"docs":{},"资":{"docs":{},"源":{"docs":{},"加":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"次":{"docs":{},"数":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"提":{"docs":{},"高":{"docs":{},"整":{"docs":{},"体":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"并":{"docs":{},"发":{"docs":{},"无":{"docs":{},"法":{"docs":{},"做":{"docs":{},"到":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"化":{"docs":{},",":{"docs":{},"优":{"docs":{},"先":{"docs":{},"使":{"docs":{},"用":{"docs":{},"共":{"docs":{},"享":{"docs":{},"锁":{"docs":{},"而":{"docs":{},"非":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"协":{"docs":{},"程":{"docs":{},"池":{"docs":{},"容":{"docs":{},"量":{"docs":{},"大":{"docs":{},"小":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}},"不":{"docs":{},"同":{"docs":{},"环":{"docs":{},"境":{"docs":{},"(":{"docs":{},"测":{"docs":{},"试":{"docs":{},"、":{"docs":{},"正":{"docs":{},"式":{"docs":{},")":{"docs":{},"的":{"docs":{},"服":{"docs":{},"务":{"docs":{},"配":{"docs":{},"置":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}},"放":{"docs":{},"置":{"docs":{},"测":{"docs":{},"试":{"docs":{},"工":{"docs":{},"具":{"docs":{},"和":{"docs":{},"测":{"docs":{},"试":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{},"对":{"docs":{},"于":{"docs":{},"较":{"docs":{},"大":{"docs":{},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},",":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"数":{"docs":{},"据":{"docs":{},"子":{"docs":{},"目":{"docs":{},"录":{"docs":{},"是":{"docs":{},"有":{"docs":{},"意":{"docs":{},"义":{"docs":{},"的":{"docs":{},"。":{"docs":{},"例":{"docs":{},"如":{"docs":{},",":{"docs":{},"你":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"引":{"docs":{},"入":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}},"无":{"docs":{},"必":{"docs":{},"要":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"起":{"docs":{},"和":{"docs":{},"包":{"docs":{},"相":{"docs":{},"同":{"docs":{},"的":{"docs":{},"名":{"docs":{},"字":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}},"下":{"docs":{},"面":{"docs":{},"这":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"第":{"docs":{},"二":{"docs":{},"个":{"docs":{},"参":{"docs":{},"数":{"docs":{},"是":{"docs":{},"没":{"docs":{},"有":{"docs":{},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{},",":{"docs":{},"大":{"docs":{},"部":{"docs":{},"分":{"docs":{},"时":{"docs":{},"候":{"docs":{},"都":{"docs":{},"是":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}},"将":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"官":{"docs":{},"方":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}},"文":{"docs":{},"档":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}},"的":{"docs":{},"入":{"docs":{},"门":{"docs":{},"指":{"docs":{},"南":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}},"网":{"docs":{},"站":{"docs":{},"已":{"docs":{},"有":{"docs":{},"系":{"docs":{},"统":{"docs":{},"全":{"docs":{},"面":{"docs":{},"的":{"docs":{},"指":{"docs":{},"导":{"docs":{},"文":{"docs":{},"档":{"docs":{},",":{"docs":{},"新":{"docs":{},"手":{"docs":{},"可":{"docs":{},"以":{"docs":{},"快":{"docs":{},"速":{"docs":{},"通":{"docs":{},"过":{"docs":{},"官":{"docs":{},"方":{"docs":{},"资":{"docs":{},"料":{"docs":{},",":{"docs":{},"轻":{"docs":{},"松":{"docs":{},"上":{"docs":{},"手":{"docs":{},"。":{"docs":{},"此":{"docs":{},"外":{"docs":{},",":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"资":{"docs":{},"料":{"docs":{},",":{"docs":{},"也":{"docs":{},"有":{"docs":{},"百":{"docs":{},"家":{"docs":{},"争":{"docs":{},"鸣":{"docs":{},"之":{"docs":{},"势":{"docs":{},"。":{"docs":{},"有":{"docs":{},"介":{"docs":{},"绍":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"也":{"docs":{},"在":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}},"实":{"docs":{},"践":{"docs":{},"建":{"docs":{},"议":{"docs":{},",":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"我":{"docs":{},"们":{"docs":{},"更":{"docs":{},"好":{"docs":{},"的":{"docs":{},"使":{"docs":{},"用":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}},"现":{"docs":{},"了":{"docs":{},"接":{"docs":{},"口":{"docs":{},";":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}},"多":{"docs":{},"种":{"docs":{},"列":{"docs":{},"表":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"请":{"docs":{},"避":{"docs":{},"免":{"docs":{},"在":{"docs":{},"具":{"docs":{},"体":{"docs":{},"的":{"docs":{},"列":{"docs":{},"表":{"docs":{},"实":{"docs":{},"现":{"docs":{},"中":{"docs":{},"嵌":{"docs":{},"入":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}},"上":{"docs":{},"利":{"docs":{},"用":{"docs":{},"反":{"docs":{},"射":{"docs":{},"来":{"docs":{},"达":{"docs":{},"到":{"docs":{},"范":{"docs":{},"型":{"docs":{},"的":{"docs":{},"效":{"docs":{},"果":{"docs":{},",":{"docs":{},"在":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"进":{"docs":{},"行":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"动":{"docs":{},"态":{"docs":{},"判":{"docs":{},"断":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"带":{"docs":{},"来":{"docs":{},"了":{"docs":{},"一":{"docs":{},"定":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"损":{"docs":{},"耗":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"集":{"docs":{},"合":{"docs":{},"(":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},")":{"2":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},"docs":{}}},"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},"线":{"docs":{},"程":{"docs":{},"安":{"docs":{},"全":{"docs":{},"。":{"docs":{},"果":{"docs":{},"不":{"docs":{},"其":{"docs":{},"然":{"docs":{},",":{"docs":{},"和":{"docs":{},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"猜":{"docs":{},"想":{"docs":{},"一":{"docs":{},"致":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}},"非":{"docs":{},"常":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"。":{"docs":{},"d":{"docs":{},"o":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"际":{"docs":{},"使":{"docs":{},"用":{"docs":{},"时":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"根":{"docs":{},"据":{"docs":{},"不":{"docs":{},"用":{"docs":{},"场":{"docs":{},"景":{"docs":{},"来":{"docs":{},"选":{"docs":{},"择":{"docs":{},"。":{"docs":{},"如":{"docs":{},"不":{"docs":{},"能":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},"使":{"docs":{},"用":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"法":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},"使":{"docs":{},"用":{"docs":{},"移":{"docs":{},"位":{"docs":{},"法":{"docs":{},"中":{"docs":{},"的":{"docs":{},"第":{"docs":{},"一":{"docs":{},"种":{"docs":{},"实":{"docs":{},"现":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"上":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{},"无":{"docs":{},"缓":{"docs":{},"冲":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}},"例":{"docs":{},"时":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"关":{"docs":{},"联":{"docs":{},"一":{"docs":{},"个":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}},"都":{"docs":{},"会":{"docs":{},"关":{"docs":{},"联":{"docs":{},"一":{"docs":{},"个":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"年":{"docs":{},"诞":{"docs":{},"生":{"docs":{},"以":{"docs":{},"来":{"docs":{},",":{"docs":{},"因":{"docs":{},"其":{"docs":{},"出":{"docs":{},"色":{"docs":{},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},"能":{"docs":{},"力":{"docs":{},"和":{"docs":{},"简":{"docs":{},"单":{"docs":{},"易":{"docs":{},"用":{"docs":{},"的":{"docs":{},"低":{"docs":{},"门":{"docs":{},"槛":{"docs":{},",":{"docs":{},"已":{"docs":{},"在":{"docs":{},"各":{"docs":{},"大":{"docs":{},"厂":{"docs":{},"商":{"docs":{},"的":{"docs":{},"后":{"docs":{},"台":{"docs":{},"高":{"docs":{},"并":{"docs":{},"发":{"docs":{},"业":{"docs":{},"务":{"docs":{},"场":{"docs":{},"景":{"docs":{},"崭":{"docs":{},"露":{"docs":{},"头":{"docs":{},"脚":{"docs":{},",":{"docs":{},"甚":{"docs":{},"至":{"docs":{},"有":{"docs":{},"取":{"docs":{},"代":{"docs":{},"传":{"docs":{},"统":{"docs":{},"后":{"docs":{},"台":{"docs":{},"服":{"docs":{},"务":{"docs":{},"开":{"docs":{},"发":{"docs":{},"语":{"docs":{},"言":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"开":{"docs":{},"发":{"docs":{},"经":{"docs":{},"验":{"docs":{},"的":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}},"始":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":3.333333333333333}},",":{"docs":{},"官":{"docs":{},"方":{"docs":{},"推":{"docs":{},"荐":{"docs":{},"使":{"docs":{},"用":{"docs":{},"新":{"docs":{},"的":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"管":{"docs":{},"理":{"docs":{},"系":{"docs":{},"统":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}},"如":{"docs":{},"果":{"docs":{},"需":{"docs":{},"要":{"docs":{},"使":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"值":{"docs":{},"为":{"docs":{},"有":{"docs":{},"意":{"docs":{},"义":{"docs":{},"的":{"docs":{},"值":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"从":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"头":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}},"销":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"严":{"docs":{},"重":{"docs":{},"影":{"docs":{},"响":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}},"。":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"利":{"docs":{},"用":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{},"让":{"docs":{},"当":{"docs":{},"前":{"docs":{},"协":{"docs":{},"程":{"docs":{},"主":{"docs":{},"动":{"docs":{},"让":{"docs":{},"出":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"想":{"docs":{},"离":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}},"最":{"docs":{},"佳":{"docs":{},"实":{"docs":{},"践":{"docs":{},"更":{"docs":{},"近":{"docs":{},"一":{"docs":{},"步":{"docs":{},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"看":{"docs":{},"看":{"docs":{},"本":{"docs":{},"书":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}},"性":{"docs":{},"能":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}},"顶":{"docs":{},"层":{"docs":{},"将":{"docs":{},"其":{"docs":{},"捕":{"docs":{},"获":{"docs":{},",":{"docs":{},"在":{"docs":{},"其":{"docs":{},"他":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}},"小":{"docs":{},"化":{"docs":{},"变":{"docs":{},"量":{"docs":{},"作":{"docs":{},"用":{"docs":{},"域":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}}}}}}},"好":{"docs":{},"有":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"本":{"docs":{},"书":{"docs":{},"为":{"docs":{},"开":{"docs":{},"源":{"docs":{},"书":{"docs":{},"籍":{"docs":{},",":{"docs":{},"希":{"docs":{},"望":{"docs":{},"得":{"docs":{},"到":{"docs":{},"大":{"docs":{},"家":{"docs":{},"的":{"docs":{},"协":{"docs":{},"同":{"docs":{},"共":{"docs":{},"建":{"docs":{},",":{"docs":{},"不":{"docs":{},"断":{"docs":{},"迭":{"docs":{},"代":{"docs":{},"丰":{"docs":{},"富":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"你":{"docs":{},"的":{"docs":{},"建":{"docs":{},"议":{"docs":{},"和":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"主":{"docs":{},"要":{"docs":{},"分":{"docs":{},"为":{"docs":{},"四":{"docs":{},"个":{"docs":{},"方":{"docs":{},"面":{"docs":{},":":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}},"所":{"docs":{},"述":{"docs":{},"内":{"docs":{},"容":{"docs":{},"谈":{"docs":{},"不":{"docs":{},"上":{"docs":{},"是":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}},"由":{"docs":{},"来":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}},"内":{"docs":{},"容":{"docs":{},"简":{"docs":{},"介":{"docs":{},"目":{"docs":{},"标":{"docs":{},"读":{"docs":{},"者":{"docs":{},"互":{"docs":{},"动":{"docs":{},"勘":{"docs":{},"误":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}},"文":{"docs":{},"所":{"docs":{},"述":{"docs":{},"内":{"docs":{},"容":{"docs":{},"均":{"docs":{},"为":{"docs":{},"参":{"docs":{},"考":{"docs":{},"意":{"docs":{},"见":{"docs":{},",":{"docs":{},"并":{"docs":{},"非":{"docs":{},"标":{"docs":{},"准":{"docs":{},"。":{"docs":{},"其":{"docs":{},"中":{"docs":{},"许":{"docs":{},"多":{"docs":{},"是":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}},"结":{"docs":{},"合":{"docs":{},"官":{"docs":{},"方":{"docs":{},"编":{"docs":{},"码":{"docs":{},"建":{"docs":{},"议":{"docs":{},",":{"docs":{},"大":{"docs":{},"厂":{"docs":{},"编":{"docs":{},"码":{"docs":{},"规":{"docs":{},"范":{"docs":{},"、":{"docs":{},"开":{"docs":{},"源":{"docs":{},"技":{"docs":{},"术":{"docs":{},"书":{"docs":{},"籍":{"docs":{},"和":{"docs":{},"自":{"docs":{},"身":{"docs":{},"项":{"docs":{},"目":{"docs":{},"经":{"docs":{},"验":{"docs":{},",":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"以":{"docs":{},"简":{"docs":{},"短":{"docs":{},"的":{"docs":{},"语":{"docs":{},"言":{"docs":{},"给":{"docs":{},"出":{"docs":{},"一":{"docs":{},"套":{"docs":{},"行":{"docs":{},"之":{"docs":{},"有":{"docs":{},"效":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"身":{"docs":{},"在":{"docs":{},"代":{"docs":{},"码":{"docs":{},"规":{"docs":{},"范":{"docs":{},"方":{"docs":{},"面":{"docs":{},"做":{"docs":{},"了":{"docs":{},"很":{"docs":{},"多":{"docs":{},"努":{"docs":{},"力":{"docs":{},",":{"docs":{},"很":{"docs":{},"多":{"docs":{},"限":{"docs":{},"制":{"docs":{},"都":{"docs":{},"是":{"docs":{},"语":{"docs":{},"法":{"docs":{},"要":{"docs":{},"求":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{},"左":{"docs":{},"大":{"docs":{},"括":{"docs":{},"号":{"docs":{},"不":{"docs":{},"换":{"docs":{},"行":{"docs":{},",":{"docs":{},"引":{"docs":{},"用":{"docs":{},"的":{"docs":{},"包":{"docs":{},"或":{"docs":{},"者":{"docs":{},"定":{"docs":{},"义":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{},"不":{"docs":{},"使":{"docs":{},"用":{"docs":{},"会":{"docs":{},"报":{"docs":{},"错":{"docs":{},"。":{"docs":{},"此":{"docs":{},"外":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"源":{"docs":{},"码":{"2":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}}},"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"应":{"docs":{},"该":{"docs":{},"是":{"docs":{},"你":{"docs":{},"的":{"docs":{},"首":{"docs":{},"选":{"docs":{},",":{"docs":{},"再":{"docs":{},"结":{"docs":{},"合":{"docs":{},"精":{"docs":{},"彩":{"docs":{},"的":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"分":{"docs":{},"析":{"docs":{},",":{"docs":{},"如":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}},"进":{"docs":{},"行":{"docs":{},"剖":{"docs":{},"析":{"docs":{},"介":{"docs":{},"绍":{"docs":{},"实":{"docs":{},"现":{"docs":{},"原":{"docs":{},"理":{"docs":{},"的":{"docs":{},",":{"docs":{},"有":{"docs":{},"介":{"docs":{},"绍":{"docs":{},"高":{"docs":{},"并":{"docs":{},"发":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},"实":{"docs":{},"战":{"docs":{},"指":{"docs":{},"导":{"docs":{},"的":{"docs":{},",":{"docs":{},"也":{"docs":{},"有":{"docs":{},"介":{"docs":{},"绍":{"docs":{},"使":{"docs":{},"用":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"目":{"docs":{},"录":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"文":{"docs":{},"件":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}},"的":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.007104795737122558}},"共":{"docs":{},"同":{"docs":{},"追":{"docs":{},"求":{"docs":{},"。":{"docs":{},"为":{"docs":{},"书":{"docs":{},"写":{"docs":{},"效":{"docs":{},"率":{"docs":{},"更":{"docs":{},"高":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"本":{"docs":{},"文":{"docs":{},"将":{"docs":{},"结":{"docs":{},"合":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}},"本":{"docs":{},"篇":{"docs":{},"将":{"docs":{},"结":{"docs":{},"合":{"docs":{"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456}}}}}}}}}}}},"初":{"docs":{},"学":{"docs":{},"者":{"docs":{},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"先":{"docs":{},"略":{"docs":{},"过":{"docs":{},"本":{"docs":{},"书":{"docs":{},",":{"docs":{},"了":{"docs":{},"解":{"docs":{},"下":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}},"最":{"docs":{},"佳":{"docs":{},"实":{"docs":{},"践":{"docs":{},"更":{"docs":{},"近":{"docs":{},"一":{"docs":{},"步":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}},",":{"docs":{},"但":{"docs":{},"希":{"docs":{},"望":{"docs":{},"能":{"docs":{},"够":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"广":{"docs":{},"大":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}},"通":{"docs":{},"用":{"docs":{},"准":{"docs":{},"则":{"docs":{},",":{"docs":{},"其":{"docs":{},"他":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"内":{"docs":{},"容":{"docs":{},"也":{"docs":{},"参":{"docs":{},"考":{"docs":{},"了":{"docs":{},"很":{"docs":{},"多":{"docs":{},"官":{"docs":{},"方":{"docs":{},"指":{"docs":{},"南":{"docs":{},",":{"docs":{},"包":{"docs":{},"括":{"docs":{},"但":{"docs":{},"不":{"docs":{},"限":{"docs":{},"于":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"子":{"docs":{},"目":{"docs":{},"录":{"docs":{},"都":{"docs":{},"不":{"docs":{},"能":{"docs":{},"被":{"docs":{},"导":{"docs":{},"出":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}},"逻":{"docs":{},"辑":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}},",":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},",":{"docs":{},"尽":{"docs":{},"管":{"docs":{},"它":{"docs":{},"不":{"docs":{},"是":{"docs":{},"。":{"docs":{},"除":{"docs":{},"了":{"docs":{},"这":{"docs":{},"一":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}},"包":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}},"切":{"docs":{},"片":{"docs":{},"(":{"docs":{},"一":{"docs":{},"个":{"docs":{},"为":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"。":{"docs":{},"从":{"docs":{},"最":{"docs":{},"终":{"docs":{},"的":{"docs":{},"结":{"docs":{},"果":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"到":{"docs":{},",":{"docs":{},"遍":{"docs":{},"历":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}},"进":{"docs":{},"行":{"docs":{},"测":{"docs":{},"试":{"docs":{},",":{"docs":{},"来":{"docs":{},"上":{"docs":{},"下":{"docs":{},"上":{"docs":{},"面":{"docs":{},"四":{"docs":{},"种":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}},"非":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"异":{"docs":{},"常":{"docs":{},",":{"docs":{},"禁":{"docs":{},"止":{"docs":{},"滥":{"docs":{},"用":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}},"名":{"docs":{},"字":{"docs":{},"和":{"docs":{},"目":{"docs":{},"录":{"docs":{},"一":{"docs":{},"致":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"两":{"docs":{},"个":{"docs":{},"分":{"docs":{},"支":{"docs":{},"中":{"docs":{},"都":{"docs":{},"设":{"docs":{},"置":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"则":{"docs":{},"可":{"docs":{},"以":{"docs":{},"将":{"docs":{},"其":{"docs":{},"替":{"docs":{},"换":{"docs":{},"为":{"docs":{},"单":{"docs":{},"个":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}},"基":{"docs":{},"础":{"docs":{},"上":{"docs":{},"增":{"docs":{},"加":{"docs":{},"了":{"docs":{},"自":{"docs":{},"动":{"docs":{},"删":{"docs":{},"除":{"docs":{},"和":{"docs":{},"引":{"docs":{},"入":{"docs":{},"包":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}},"工":{"docs":{},"具":{"docs":{},",":{"docs":{},"主":{"docs":{},"要":{"docs":{},"功":{"docs":{},"能":{"docs":{},"就":{"docs":{},"是":{"docs":{},"检":{"docs":{},"测":{"docs":{},"代":{"docs":{},"码":{"docs":{},"中":{"docs":{},"不":{"docs":{},"规":{"docs":{},"范":{"docs":{},"的":{"docs":{},"地":{"docs":{},"方":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}},"结":{"docs":{},"果":{"docs":{},"为":{"docs":{},"准":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}},"退":{"docs":{},"出":{"docs":{},"机":{"docs":{},"制":{"docs":{},",":{"docs":{},"防":{"docs":{},"止":{"docs":{},"泄":{"docs":{},"漏":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}},"底":{"docs":{},"层":{"docs":{},"结":{"docs":{},"构":{"docs":{},"后":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"知":{"docs":{},"道":{"docs":{},"在":{"docs":{},"传":{"docs":{},"递":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},"一":{"docs":{},"般":{"docs":{},"也":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"指":{"docs":{},"向":{"docs":{},"它":{"docs":{},"们":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"数":{"docs":{},"组":{"docs":{},"。":{"docs":{},"这":{"docs":{},"样":{"docs":{},"也":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"额":{"docs":{},"外":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"空":{"docs":{},"间":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"在":{"docs":{},"原":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}}}},"指":{"docs":{},"针":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":3.333333333333333}},"基":{"docs":{},"本":{"docs":{},"是":{"docs":{},"不":{"docs":{},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{},"。":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}}}}},"修":{"docs":{},"改":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"操":{"docs":{},"作":{"docs":{},"。":{"docs":{},"在":{"docs":{},"执":{"docs":{},"行":{"docs":{},"任":{"docs":{},"务":{"docs":{},"函":{"docs":{},"数":{"docs":{},"前":{"docs":{},",":{"docs":{},"对":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}},"开":{"docs":{},"销":{"docs":{},"非":{"docs":{},"常":{"docs":{},"小":{"docs":{},",":{"docs":{},"只":{"docs":{},"有":{"docs":{},"在":{"docs":{},"您":{"docs":{},"可":{"docs":{},"以":{"docs":{},"证":{"docs":{},"明":{"docs":{},"函":{"docs":{},"数":{"docs":{},"执":{"docs":{},"行":{"docs":{},"时":{"docs":{},"间":{"docs":{},"处":{"docs":{},"于":{"docs":{},"纳":{"docs":{},"秒":{"docs":{},"级":{"docs":{},"的":{"docs":{},"程":{"docs":{},"度":{"docs":{},"时":{"docs":{},",":{"docs":{},"才":{"docs":{},"应":{"docs":{},"避":{"docs":{},"免":{"docs":{},"这":{"docs":{},"样":{"docs":{},"做":{"docs":{},"。":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{},"虽":{"docs":{},"然":{"docs":{},"官":{"docs":{},"方":{"docs":{},"宣":{"docs":{},"称":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}},"主":{"docs":{},"要":{"docs":{},"是":{"docs":{},"三":{"docs":{},"个":{"docs":{},"方":{"docs":{},"面":{"docs":{},":":{"docs":{},"创":{"docs":{},"建":{"docs":{},"(":{"docs":{},"占":{"docs":{},"用":{"docs":{},"内":{"docs":{},"存":{"docs":{},")":{"docs":{},"、":{"docs":{},"调":{"docs":{},"度":{"docs":{},"(":{"docs":{},"增":{"docs":{},"加":{"docs":{},"调":{"docs":{},"度":{"docs":{},"器":{"docs":{},"负":{"docs":{},"担":{"docs":{},")":{"docs":{},"和":{"docs":{},"删":{"docs":{},"除":{"docs":{},"(":{"docs":{},"增":{"docs":{},"加":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},"细":{"docs":{},"节":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{},"o":{"docs":{},"d":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}},",":{"docs":{},"对":{"docs":{},"其":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"不":{"docs":{},"可":{"docs":{},"见":{"docs":{},"。":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}}}},"被":{"docs":{},"到":{"docs":{},"处":{"docs":{},"泄":{"docs":{},"露":{"docs":{},"了":{"docs":{},";":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}},"是":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}},",":{"docs":{},"通":{"docs":{},"常":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},"二":{"docs":{},"进":{"docs":{},"制":{"docs":{},"表":{"docs":{},"示":{"docs":{},"形":{"docs":{},"式":{"docs":{},"写":{"docs":{},"入":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}},"编":{"docs":{},"码":{"docs":{},"和":{"docs":{},"解":{"docs":{},"码":{"docs":{},"。":{"docs":{},"v":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}},"大":{"docs":{},"小":{"docs":{},",":{"docs":{},"这":{"docs":{},"将":{"docs":{},"减":{"docs":{},"少":{"docs":{},"在":{"docs":{},"将":{"docs":{},"元":{"docs":{},"素":{"docs":{},"添":{"docs":{},"加":{"docs":{},"到":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}},"为":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}}},"容":{"docs":{},"量":{"docs":{},"分":{"docs":{},"配":{"docs":{},"足":{"docs":{},"够":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},",":{"docs":{},"这":{"docs":{},"意":{"docs":{},"味":{"docs":{},"着":{"docs":{},"后":{"docs":{},"续":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}}}},"数":{"docs":{},"量":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}},"长":{"docs":{},"度":{"docs":{},"与":{"docs":{},"容":{"docs":{},"量":{"docs":{},"匹":{"docs":{},"配":{"docs":{},",":{"docs":{},"在":{"docs":{},"此":{"docs":{},"之":{"docs":{},"后":{"docs":{},",":{"docs":{},"任":{"docs":{},"何":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}},"性":{"docs":{},"能":{"docs":{},"相":{"docs":{},"近":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"结":{"docs":{},"果":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"的":{"docs":{},"长":{"docs":{},"度":{"docs":{},"是":{"docs":{},"可":{"docs":{},"预":{"docs":{},"知":{"docs":{},"的":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}},"几":{"docs":{},"乎":{"docs":{},"一":{"docs":{},"样":{"docs":{},",":{"docs":{},"如":{"docs":{},"基":{"docs":{},"本":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}},"是":{"docs":{},"一":{"docs":{},"样":{"docs":{},"的":{"docs":{},"。":{"docs":{},"而":{"docs":{},"且":{"docs":{},"使":{"docs":{},"用":{"docs":{},"指":{"docs":{},"针":{"docs":{},"还":{"docs":{},"有":{"docs":{},"另":{"docs":{},"一":{"docs":{},"个":{"docs":{},"好":{"docs":{},"处":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"直":{"docs":{},"接":{"docs":{},"修":{"docs":{},"改":{"docs":{},"指":{"docs":{},"针":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"的":{"docs":{},"值":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"将":{"docs":{},"显":{"docs":{},"著":{"docs":{},"地":{"docs":{},"高":{"docs":{},"于":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}},"差":{"docs":{},"别":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}},"遍":{"docs":{},"历":{"docs":{},"方":{"docs":{},"式":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":5}}}}}},"位":{"docs":{},"置":{"docs":{},"就":{"docs":{},"是":{"docs":{},"所":{"docs":{},"有":{"docs":{},"有":{"docs":{},"效":{"docs":{},"元":{"docs":{},"素":{"docs":{},"的":{"docs":{},"下":{"docs":{},"一":{"docs":{},"个":{"docs":{},"位":{"docs":{},"置":{"docs":{},",":{"docs":{},"最":{"docs":{},"后":{"docs":{},"做":{"docs":{},"一":{"docs":{},"个":{"docs":{},"截":{"docs":{},"取":{"docs":{},"就":{"docs":{},"行":{"docs":{},"了":{"docs":{},"。":{"docs":{},"这":{"docs":{},"种":{"docs":{},"方":{"docs":{},"法":{"docs":{},"会":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"来":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"截":{"docs":{},"取":{"docs":{},"删":{"docs":{},"除":{"docs":{},"指":{"docs":{},"定":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{},"注":{"docs":{},"意":{"docs":{},"删":{"docs":{},"除":{"docs":{},"时":{"docs":{},",":{"docs":{},"后":{"docs":{},"面":{"docs":{},"的":{"docs":{},"元":{"docs":{},"素":{"docs":{},"会":{"docs":{},"前":{"docs":{},"移":{"docs":{},",":{"docs":{},"下":{"docs":{},"标":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}}}}}},"空":{"docs":{},"间":{"docs":{},",":{"docs":{},"优":{"docs":{},"点":{"docs":{},"是":{"docs":{},"容":{"docs":{},"易":{"docs":{},"理":{"docs":{},"解":{"docs":{},",":{"docs":{},"而":{"docs":{},"且":{"docs":{},"不":{"docs":{},"会":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}},"那":{"docs":{},"么":{"docs":{},"假":{"docs":{},"设":{"docs":{},"计":{"docs":{},"算":{"docs":{},"机":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"是":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}},"。":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}},"完":{"docs":{},"整":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"如":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"(":{"docs":{},"通":{"docs":{},"过":{"docs":{},"切":{"docs":{},"片":{"docs":{},"构":{"docs":{},"建":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}}},"键":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"值":{"docs":{},"。":{"docs":{},"即":{"docs":{},"使":{"docs":{},"是":{"docs":{},"将":{"docs":{},"值":{"docs":{},"设":{"docs":{},"置":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}},"倍":{"docs":{},"数":{"docs":{},",":{"docs":{},"从":{"docs":{},"第":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}}}}},"内":{"docs":{},"存":{"docs":{},"占":{"docs":{},"用":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}}},",":{"docs":{},"在":{"docs":{},"源":{"docs":{},"码":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}},"字":{"docs":{},"段":{"docs":{},"时":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"。":{"docs":{},"但":{"docs":{},"是":{"docs":{},"有":{"docs":{},"一":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"除":{"docs":{},"外":{"docs":{},":":{"docs":{},"即":{"docs":{},"当":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}},"对":{"docs":{},"齐":{"docs":{},"系":{"docs":{},"数":{"docs":{},"决":{"docs":{},"定":{"docs":{},",":{"docs":{},"也":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"由":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"使":{"docs":{},"用":{"docs":{},"方":{"docs":{},"式":{"docs":{},"非":{"docs":{},"常":{"docs":{},"简":{"docs":{},"单":{"docs":{},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"实":{"docs":{},"现":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}},"压":{"docs":{},"力":{"docs":{},",":{"docs":{},"提":{"docs":{},"升":{"docs":{},"系":{"docs":{},"统":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"定":{"docs":{},"义":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"毛":{"docs":{},"刺":{"docs":{},",":{"docs":{},"而":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"并":{"docs":{},"发":{"docs":{},"读":{"docs":{},"写":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}},"操":{"docs":{},"作":{"docs":{},"个":{"docs":{},"数":{"docs":{},"超":{"docs":{},"过":{"docs":{},"了":{"docs":{},"系":{"docs":{},"统":{"docs":{},"上":{"docs":{},"限":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"报":{"docs":{},"错":{"docs":{},"是":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"保":{"docs":{},"证":{"docs":{},"并":{"docs":{},"发":{"docs":{},"安":{"docs":{},"全":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"它":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"也":{"docs":{},"能":{"docs":{},"做":{"docs":{},"到":{"docs":{},"随":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}},"操":{"docs":{},"作":{"docs":{},"耗":{"docs":{},"时":{"docs":{},"很":{"docs":{},"短":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"每":{"docs":{},"次":{"docs":{},"睡":{"docs":{},"眠":{"docs":{},"一":{"docs":{},"微":{"docs":{},"秒":{"docs":{},"(":{"docs":{},"百":{"docs":{},"万":{"docs":{},"分":{"docs":{},"之":{"docs":{},"一":{"docs":{},"秒":{"docs":{},")":{"docs":{},"来":{"docs":{},"增":{"docs":{},"加":{"docs":{},"耗":{"docs":{},"时":{"docs":{},",":{"docs":{},"不":{"docs":{},"然":{"docs":{},"对":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"访":{"docs":{},"问":{"docs":{},"耗":{"docs":{},"时":{"docs":{},",":{"docs":{},"小":{"docs":{},"于":{"docs":{},"锁":{"docs":{},"处":{"docs":{},"理":{"docs":{},"的":{"docs":{},"本":{"docs":{},"身":{"docs":{},"耗":{"docs":{},"时":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"使":{"docs":{},"用":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"带":{"docs":{},"来":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"优":{"docs":{},"化":{"docs":{},"效":{"docs":{},"果":{"docs":{},"将":{"docs":{},"变":{"docs":{},"得":{"docs":{},"不":{"docs":{},"那":{"docs":{},"么":{"docs":{},"明":{"docs":{},"显":{"docs":{},",":{"docs":{},"甚":{"docs":{},"至":{"docs":{},"会":{"docs":{},"降":{"docs":{},"低":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"缓":{"docs":{},"冲":{"docs":{},"区":{"docs":{},"大":{"docs":{},"小":{"docs":{},"来":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}},"调":{"docs":{},"度":{"docs":{},"管":{"docs":{},"理":{"docs":{},"和":{"docs":{},"复":{"docs":{},"用":{"docs":{},",":{"docs":{},"允":{"docs":{},"许":{"docs":{},"使":{"docs":{},"用":{"docs":{},"者":{"docs":{},"在":{"docs":{},"开":{"docs":{},"发":{"docs":{},"并":{"docs":{},"发":{"docs":{},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"限":{"docs":{},"制":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}},"判":{"docs":{},"断":{"docs":{},",":{"docs":{},"来":{"docs":{},"决":{"docs":{},"定":{"docs":{},"是":{"docs":{},"否":{"docs":{},"执":{"docs":{},"行":{"docs":{},"传":{"docs":{},"入":{"docs":{},"的":{"docs":{},"任":{"docs":{},"务":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{},"执":{"docs":{},"行":{"docs":{},"任":{"docs":{},"务":{"docs":{},"函":{"docs":{},"数":{"docs":{},"前":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"锁":{"docs":{},"保":{"docs":{},"证":{"docs":{},"任":{"docs":{},"务":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"执":{"docs":{},"行":{"docs":{},"和":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"区":{"docs":{},"别":{"docs":{},"?":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"四":{"docs":{},"个":{"docs":{},"成":{"docs":{},"员":{"docs":{},"函":{"docs":{},"数":{"docs":{},"定":{"docs":{},"义":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}},"存":{"docs":{},"在":{"docs":{},"还":{"docs":{},"有":{"docs":{},"必":{"docs":{},"要":{"docs":{},"吗":{"docs":{},"?":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"打":{"docs":{},"印":{"docs":{},"顺":{"docs":{},"序":{"docs":{},"是":{"docs":{},"随":{"docs":{},"机":{"docs":{},"的":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}}}}}}},"讨":{"docs":{},"论":{"docs":{},"可":{"docs":{},"参":{"docs":{},"考":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"原":{"docs":{},"理":{"docs":{},"与":{"docs":{},"使":{"docs":{},"用":{"docs":{},"场":{"docs":{},"景":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}},"目":{"docs":{},"标":{"docs":{},"读":{"docs":{},"者":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}},"录":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}},"下":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.011834319526627219}}},",":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"具":{"docs":{},"体":{"docs":{},"业":{"docs":{},"务":{"docs":{},"目":{"docs":{},"录":{"docs":{},"下":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}},"内":{"docs":{},"部":{"docs":{},"增":{"docs":{},"加":{"docs":{},"一":{"docs":{},"些":{"docs":{},"代":{"docs":{},"码":{"docs":{},"结":{"docs":{},"构":{"docs":{},"来":{"docs":{},"区":{"docs":{},"分":{"docs":{},"共":{"docs":{},"享":{"docs":{},"和":{"docs":{},"非":{"docs":{},"共":{"docs":{},"享":{"docs":{},"的":{"docs":{},"。":{"docs":{},"虽":{"docs":{},"然":{"docs":{},"它":{"docs":{},"并":{"docs":{},"不":{"docs":{},"是":{"docs":{},"必":{"docs":{},"须":{"docs":{},"的":{"docs":{},"(":{"docs":{},"尤":{"docs":{},"其":{"docs":{},"是":{"docs":{},"小":{"docs":{},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},")":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"最":{"docs":{},"好":{"docs":{},"能":{"docs":{},"从":{"docs":{},"视":{"docs":{},"觉":{"docs":{},"上":{"docs":{},"区":{"docs":{},"分":{"docs":{},"包":{"docs":{},"的":{"docs":{},"用":{"docs":{},"途":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},"结":{"docs":{},"构":{"docs":{},"是":{"docs":{},"一":{"docs":{},"种":{"docs":{},"常":{"docs":{},"见":{"docs":{},"的":{"docs":{},"布":{"docs":{},"局":{"docs":{},"模":{"docs":{},"式":{"docs":{},",":{"docs":{},"但":{"docs":{},"并":{"docs":{},"不":{"docs":{},"是":{"docs":{},"所":{"docs":{},"有":{"docs":{},"人":{"docs":{},"都":{"docs":{},"接":{"docs":{},"受":{"docs":{},"它":{"docs":{},",":{"docs":{},"一":{"docs":{},"些":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"但":{"docs":{},"这":{"docs":{},"通":{"docs":{},"常":{"docs":{},"发":{"docs":{},"生":{"docs":{},"在":{"docs":{},"开":{"docs":{},"发":{"docs":{},"人":{"docs":{},"员":{"docs":{},"有":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}},"编":{"docs":{},"码":{"docs":{},"建":{"docs":{},"议":{"docs":{},"的":{"docs":{},"。":{"docs":{},"至":{"docs":{},"此":{"docs":{},",":{"docs":{},"本":{"docs":{},"书":{"docs":{},"应":{"docs":{},"运":{"docs":{},"而":{"docs":{},"生":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}},",":{"docs":{},"让":{"docs":{},"您":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"高":{"docs":{},"效":{"docs":{},"易":{"docs":{},"读":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}},"规":{"docs":{},"范":{"docs":{},",":{"docs":{},"但":{"docs":{},"大":{"docs":{},"同":{"docs":{},"小":{"docs":{},"异":{"docs":{},"。":{"docs":{},"规":{"docs":{},"范":{"docs":{},"是":{"docs":{},"一":{"docs":{},"种":{"docs":{},"倡":{"docs":{},"导":{"docs":{},",":{"docs":{},"不":{"docs":{},"遵":{"docs":{},"守":{"docs":{},"并":{"docs":{},"不":{"docs":{},"代":{"docs":{},"表":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"但":{"docs":{},"当":{"docs":{},"大":{"docs":{},"家":{"docs":{},"都":{"docs":{},"遵":{"docs":{},"守":{"docs":{},"规":{"docs":{},"范":{"docs":{},"时":{"docs":{},",":{"docs":{},"你":{"docs":{},"会":{"docs":{},"发":{"docs":{},"现":{"docs":{},",":{"docs":{},"整":{"docs":{},"个":{"docs":{},"世":{"docs":{},"界":{"docs":{},"将":{"docs":{},"变":{"docs":{},"得":{"docs":{},"整":{"docs":{},"洁":{"docs":{},"有":{"docs":{},"序":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"风":{"docs":{},"格":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}},"从":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"易":{"docs":{},"读":{"docs":{},"的":{"docs":{},"角":{"docs":{},"度":{"docs":{},"出":{"docs":{},"发":{"docs":{},",":{"docs":{},"参":{"docs":{},"考":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}},"为":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}},"译":{"docs":{},"不":{"docs":{},"通":{"docs":{},"过":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"无":{"docs":{},"法":{"docs":{},"对":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}},"器":{"docs":{},"一":{"docs":{},"般":{"docs":{},"为":{"docs":{},"了":{"docs":{},"减":{"docs":{},"少":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}},"对":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"分":{"docs":{},"析":{"docs":{},"决":{"docs":{},"策":{"docs":{},"远":{"docs":{},"比":{"docs":{},"我":{"docs":{},"们":{"docs":{},"想":{"docs":{},"像":{"docs":{},"的":{"docs":{},"要":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"。":{"docs":{},"我":{"docs":{},"们":{"docs":{},"只":{"docs":{},"能":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"地":{"docs":{},"去":{"docs":{},"勾":{"docs":{},"勒":{"docs":{},"而":{"docs":{},"无":{"docs":{},"以":{"docs":{},"绘":{"docs":{},"其":{"docs":{},"全":{"docs":{},"貌":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"而":{"docs":{},"言":{"docs":{},",":{"docs":{},"超":{"docs":{},"过":{"docs":{},"一":{"docs":{},"定":{"docs":{},"大":{"docs":{},"小":{"docs":{},"的":{"docs":{},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{},"将":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"到":{"docs":{},"堆":{"docs":{},"上":{"docs":{},",":{"docs":{},"不":{"docs":{},"同":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}},"时":{"docs":{},"可":{"docs":{},"以":{"docs":{},"借":{"docs":{},"助":{"docs":{},"选":{"docs":{},"项":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}},"后":{"docs":{},"的":{"docs":{},"机":{"docs":{},"器":{"docs":{},"码":{"docs":{},"指":{"docs":{},"令":{"docs":{},"更":{"docs":{},"少":{"docs":{},",":{"docs":{},"更":{"docs":{},"直":{"docs":{},"接":{"docs":{},",":{"docs":{},"必":{"docs":{},"然":{"docs":{},"是":{"docs":{},"能":{"docs":{},"够":{"docs":{},"提":{"docs":{},"升":{"docs":{},"性":{"docs":{},"能":{"docs":{},"的":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"虽":{"docs":{},"然":{"docs":{},"简":{"docs":{},"单":{"docs":{},",":{"docs":{},"但":{"docs":{},"其":{"docs":{},"功":{"docs":{},"能":{"docs":{},"特":{"docs":{},"性":{"docs":{},"却":{"docs":{},"不":{"docs":{},"单":{"docs":{},"一":{"docs":{},"。":{"docs":{},"其":{"docs":{},"丰":{"docs":{},"富":{"docs":{},"的":{"docs":{},"语":{"docs":{},"言":{"docs":{},"特":{"docs":{},"性":{"docs":{},",":{"docs":{},"在":{"docs":{},"使":{"docs":{},"用":{"docs":{},"时":{"docs":{},"还":{"docs":{},"是":{"docs":{},"有":{"docs":{},"很":{"docs":{},"多":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"姿":{"docs":{},"势":{"docs":{},"。":{"docs":{},"本":{"docs":{},"书":{"docs":{},"从":{"docs":{},"功":{"docs":{},"能":{"docs":{},"特":{"docs":{},"性":{"docs":{},"出":{"docs":{},"发":{"docs":{},",":{"docs":{},"给":{"docs":{},"出":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"默":{"docs":{},"认":{"docs":{},"为":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},"这":{"docs":{},"些":{"docs":{},"使":{"docs":{},"用":{"docs":{},"内":{"docs":{},"置":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{},"的":{"docs":{},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"字":{"docs":{},"段":{"docs":{},"可":{"docs":{},"以":{"docs":{},"编":{"docs":{},"译":{"docs":{},"通":{"docs":{},"过":{"docs":{},",":{"docs":{},"但":{"docs":{},"对":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}},"轻":{"docs":{},"量":{"docs":{},",":{"docs":{},"但":{"docs":{},"天":{"docs":{},"下":{"docs":{},"没":{"docs":{},"有":{"docs":{},"免":{"docs":{},"费":{"docs":{},"的":{"docs":{},"午":{"docs":{},"餐":{"docs":{},",":{"docs":{},"无":{"docs":{},"休":{"docs":{},"止":{"docs":{},"地":{"docs":{},"开":{"docs":{},"辟":{"docs":{},"大":{"docs":{},"量":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}},"语":{"docs":{},"法":{"docs":{},"知":{"docs":{},"识":{"docs":{},"和":{"docs":{},"语":{"docs":{},"言":{"docs":{},"特":{"docs":{},"性":{"docs":{},"与":{"docs":{},",":{"docs":{},"也":{"docs":{},"建":{"docs":{},"议":{"docs":{},"先":{"docs":{},"略":{"docs":{},"过":{"docs":{},"本":{"docs":{},"书":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}},"言":{"docs":{},"圣":{"docs":{},"经":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}},"基":{"docs":{},"础":{"docs":{},"和":{"docs":{},"实":{"docs":{},"战":{"docs":{},"的":{"docs":{},",":{"docs":{},"有":{"docs":{},"对":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},"原":{"docs":{},"理":{"docs":{},",":{"docs":{},"还":{"docs":{},"是":{"docs":{},"建":{"docs":{},"议":{"docs":{},"先":{"docs":{},"略":{"docs":{},"过":{"docs":{},"本":{"docs":{},"书":{"docs":{},"。":{"docs":{},"虽":{"docs":{},"然":{"docs":{},"本":{"docs":{},"书":{"docs":{},"略":{"docs":{},"有":{"docs":{},"涉":{"docs":{},"及":{"docs":{},",":{"docs":{},"但":{"docs":{},"不":{"docs":{},"够":{"docs":{},"全":{"docs":{},"面":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"特":{"docs":{},"性":{"docs":{},",":{"docs":{},"从":{"docs":{},"常":{"docs":{},"用":{"docs":{},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"docs":{},"、":{"docs":{},"内":{"docs":{},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{},"和":{"docs":{},"并":{"docs":{},"发":{"docs":{},",":{"docs":{},"三":{"docs":{},"个":{"docs":{},"方":{"docs":{},"面":{"docs":{},"给":{"docs":{},"出":{"docs":{},"相":{"docs":{},"关":{"docs":{},"建":{"docs":{},"议":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"为":{"docs":{},"书":{"docs":{},"写":{"docs":{},"高":{"docs":{},"效":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"力":{"docs":{},"争":{"docs":{},"从":{"docs":{},"常":{"docs":{},"用":{"docs":{},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"docs":{},"、":{"docs":{},"内":{"docs":{},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{},"和":{"docs":{},"并":{"docs":{},"发":{"docs":{},"编":{"docs":{},"程":{"docs":{},"三":{"docs":{},"个":{"docs":{},"方":{"docs":{},"面":{"docs":{},"给":{"docs":{},"出":{"docs":{},"相":{"docs":{},"关":{"docs":{},"建":{"docs":{},"议":{"docs":{},"。":{"docs":{},"话":{"docs":{},"不":{"docs":{},"多":{"docs":{},"说":{"docs":{},",":{"docs":{},"让":{"docs":{},"我":{"docs":{},"们":{"docs":{},"一":{"docs":{},"起":{"docs":{},"学":{"docs":{},"习":{"docs":{"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"自":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}},"设":{"docs":{},"计":{"docs":{},"与":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"会":{"docs":{},"大":{"docs":{},"有":{"docs":{},"收":{"docs":{},"获":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}},"规":{"docs":{},"范":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"提":{"docs":{},"供":{"docs":{},"了":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"动":{"docs":{},"态":{"docs":{},"获":{"docs":{},"取":{"docs":{},"对":{"docs":{},"象":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"和":{"docs":{},"值":{"docs":{},"以":{"docs":{},"及":{"docs":{},"动":{"docs":{},"态":{"docs":{},"创":{"docs":{},"建":{"docs":{},"对":{"docs":{},"象":{"docs":{},"的":{"docs":{},"能":{"docs":{},"力":{"docs":{},"。":{"docs":{},"反":{"docs":{},"射":{"docs":{},"可":{"docs":{},"以":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"抽":{"docs":{},"象":{"docs":{},"和":{"docs":{},"简":{"docs":{},"化":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"提":{"docs":{},"高":{"docs":{},"开":{"docs":{},"发":{"docs":{},"效":{"docs":{},"率":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{},"以":{"docs":{},"及":{"docs":{},"很":{"docs":{},"多":{"docs":{},"开":{"docs":{},"源":{"docs":{},"软":{"docs":{},"件":{"docs":{},"中":{"docs":{},"都":{"docs":{},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}},"没":{"docs":{},"有":{"docs":{},"提":{"docs":{},"供":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},"的":{"docs":{},"反":{"docs":{},"射":{"docs":{},"能":{"docs":{},"力":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{},"用":{"docs":{},"于":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},"和":{"docs":{},"反":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"之":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}},"高":{"docs":{},"性":{"docs":{},"能":{"docs":{},"编":{"docs":{},"程":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}},"句":{"docs":{},"前":{"docs":{},"不":{"docs":{},"要":{"docs":{},"换":{"docs":{},"行":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}},"之":{"docs":{},"后":{"docs":{},"(":{"docs":{},"所":{"docs":{},"有":{"docs":{},"迭":{"docs":{},"代":{"docs":{},"之":{"docs":{},"后":{"docs":{},")":{"docs":{},",":{"docs":{},"即":{"docs":{},"所":{"docs":{},"在":{"docs":{},"函":{"docs":{},"数":{"docs":{},"结":{"docs":{},"束":{"docs":{},"时":{"docs":{},",":{"docs":{},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}}}}}}}}}}}}}}}}},"来":{"docs":{},"保":{"docs":{},"证":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"一":{"docs":{},"定":{"docs":{},"会":{"docs":{},"被":{"docs":{},"解":{"docs":{},"锁":{"docs":{},"。":{"docs":{},"在":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}},"进":{"docs":{},"行":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"高":{"docs":{},"性":{"docs":{},"能":{"docs":{},"编":{"docs":{},"程":{"docs":{},"的":{"docs":{},",":{"docs":{},"等":{"docs":{},"等":{"docs":{},"。":{"docs":{},"很":{"docs":{},"遗":{"docs":{},"憾":{"docs":{},"的":{"docs":{},"是":{"docs":{},",":{"docs":{},"没":{"docs":{},"有":{"docs":{},"发":{"docs":{},"现":{"docs":{},"一":{"docs":{},"个":{"docs":{},"系":{"docs":{},"统":{"docs":{},"介":{"docs":{},"绍":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}},"自":{"docs":{},"动":{"docs":{},"化":{"docs":{},"管":{"docs":{},"理":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"或":{"docs":{},"使":{"docs":{},"用":{"docs":{},"空":{"docs":{},"白":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{},"忽":{"docs":{},"略":{"docs":{},"。":{"docs":{},"对":{"docs":{},"于":{"docs":{},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}},"匹":{"docs":{},"配":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"那":{"docs":{},"么":{"docs":{},"到":{"docs":{},"底":{"docs":{},"是":{"docs":{},"谁":{"docs":{},"适":{"docs":{},"合":{"docs":{},"阅":{"docs":{},"读":{"docs":{},"本":{"docs":{},"书":{"docs":{},"呢":{"docs":{},"?":{"docs":{},"如":{"docs":{},"果":{"docs":{},"你":{"docs":{},"是":{"docs":{},"一":{"docs":{},"位":{"docs":{},"有":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}},"对":{"docs":{},"于":{"docs":{},"稍":{"docs":{},"微":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"一":{"docs":{},"点":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}},"多":{"docs":{},"大":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{},"才":{"docs":{},"算":{"docs":{},"是":{"docs":{},"小":{"docs":{},"变":{"docs":{},"量":{"docs":{},"呢":{"docs":{},"?":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}},"如":{"docs":{},"果":{"docs":{},"我":{"docs":{},"们":{"docs":{},"将":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}},"项":{"docs":{},"目":{"docs":{},"布":{"docs":{},"局":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":10}},"参":{"docs":{},"考":{"docs":{},"业":{"docs":{},"界":{"docs":{},"认":{"docs":{},"可":{"docs":{},"度":{"docs":{},"较":{"docs":{},"高":{"docs":{},"的":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}},"代":{"docs":{},"码":{"docs":{},"风":{"docs":{},"格":{"docs":{},"功":{"docs":{},"能":{"docs":{},"设":{"docs":{},"计":{"docs":{},"最":{"docs":{},"佳":{"docs":{},"性":{"docs":{},"能":{"docs":{},"项":{"docs":{},"目":{"docs":{},"布":{"docs":{},"局":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}}}}},"依":{"docs":{},"赖":{"docs":{},"的":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"工":{"docs":{},"具":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}},"工":{"docs":{},"具":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"文":{"docs":{},"档":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"用":{"docs":{},"到":{"docs":{},"的":{"docs":{},"相":{"docs":{},"关":{"docs":{},"资":{"docs":{},"源":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"项":{"docs":{},"目":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}},"确":{"docs":{},"实":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"网":{"docs":{},"站":{"docs":{},"数":{"docs":{},"据":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"说":{"docs":{},"明":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"资":{"docs":{},"源":{"docs":{},"文":{"docs":{},"件":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"配":{"docs":{},"套":{"docs":{},"工":{"docs":{},"具":{"docs":{},",":{"docs":{},"实":{"docs":{},"现":{"docs":{},"这":{"docs":{},"些":{"docs":{},"工":{"docs":{},"具":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{},"从":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}},"中":{"docs":{},"使":{"docs":{},"用":{"docs":{},"的":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"高":{"docs":{},"性":{"docs":{},"能":{"docs":{},"编":{"docs":{},"码":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}},"程":{"docs":{},"技":{"docs":{},"法":{"docs":{},"吧":{"docs":{},"。":{"docs":{"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456}}}}}}}}}},"效":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"是":{"docs":{},"我":{"docs":{},"们":{"docs":{},"每":{"docs":{},"一":{"docs":{},"个":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}},",":{"docs":{},"并":{"docs":{},"结":{"docs":{},"合":{"docs":{},"自":{"docs":{},"身":{"docs":{},"项":{"docs":{},"目":{"docs":{},"团":{"docs":{},"队":{"docs":{},"编":{"docs":{},"码":{"docs":{},"规":{"docs":{},"范":{"docs":{},",":{"docs":{},"力":{"docs":{},"争":{"docs":{},"给":{"docs":{},"出":{"docs":{},"全":{"docs":{},"面":{"docs":{},"、":{"docs":{},"认":{"docs":{},"可":{"docs":{},"度":{"docs":{},"较":{"docs":{},"高":{"docs":{},"的":{"docs":{},"编":{"docs":{},"码":{"docs":{},"风":{"docs":{},"格":{"docs":{},",":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"大":{"docs":{},"家":{"docs":{},"写":{"docs":{},"出":{"docs":{},"风":{"docs":{},"格":{"docs":{},"统":{"docs":{},"一":{"docs":{},"的":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"高":{"docs":{},"效":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"t":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"大":{"docs":{},"部":{"docs":{},"分":{"docs":{},"的":{"docs":{},"格":{"docs":{},"式":{"docs":{},"问":{"docs":{},"题":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}},"此":{"docs":{},"工":{"docs":{},"具":{"docs":{},"在":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}},"类":{"docs":{},"似":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}},"而":{"docs":{},"不":{"docs":{},"应":{"docs":{},"全":{"docs":{},"部":{"docs":{},"零":{"docs":{},"散":{"docs":{},"放":{"docs":{},"在":{"docs":{},"一":{"docs":{},"个":{"docs":{},"大":{"docs":{},"类":{"docs":{},"型":{"docs":{},"中":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}},"u":{"docs":{},"n":{"docs":{},"s":{"docs":{},"a":{"docs":{},"f":{"docs":{},"e":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"o":{"docs":{},"f":{"docs":{},"(":{"docs":{},"x":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}},"字":{"docs":{},"长":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"若":{"docs":{},"缓":{"docs":{},"存":{"docs":{},"区":{"docs":{},"满":{"docs":{},",":{"docs":{},"则":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"。":{"docs":{},"协":{"docs":{},"程":{"docs":{},"任":{"docs":{},"务":{"docs":{},"结":{"docs":{},"束":{"docs":{},",":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}},"#":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.01775147928994083},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}}},")":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.04516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.013237063778580024},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.02857142857142857},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"、":{"docs":{},"容":{"docs":{},"器":{"docs":{},"(":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"操":{"docs":{},"作":{"docs":{},"系":{"docs":{},"统":{"docs":{},"(":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"包":{"docs":{},"配":{"docs":{},"置":{"docs":{},"和":{"docs":{},"脚":{"docs":{},"本":{"docs":{},"放":{"docs":{},"在":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}},"/":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},"s":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"b":{"docs":{},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"/":{"docs":{},"c":{"docs":{},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"a":{"docs":{},"g":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}},"c":{"docs":{},"m":{"docs":{},"d":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"d":{"docs":{},"e":{"docs":{},"p":{"docs":{},"l":{"docs":{},"o":{"docs":{},"y":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"o":{"docs":{},"c":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"e":{"docs":{},"x":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.011834319526627219}},"a":{"docs":{},"l":{"docs":{},"/":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"/":{"docs":{},"m":{"docs":{},"y":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}},"p":{"docs":{},"k":{"docs":{},"g":{"docs":{},"/":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}},"p":{"docs":{},"k":{"docs":{},"g":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.014792899408284023}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"m":{"docs":{},"d":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"r":{"docs":{},"c":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"/":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"。":{"docs":{},"请":{"docs":{},"注":{"docs":{},"意":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"你":{"docs":{},"需":{"docs":{},"要":{"docs":{},"忽":{"docs":{},"略":{"docs":{},"目":{"docs":{},"录":{"docs":{},"中":{"docs":{},"的":{"docs":{},"内":{"docs":{},"容":{"docs":{},",":{"docs":{},"g":{"docs":{},"o":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"i":{"docs":{},"r":{"docs":{},"d":{"docs":{},"_":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"r":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"w":{"docs":{},"e":{"docs":{},"b":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"s":{"docs":{},"i":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"/":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.03508771929824561},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.08796296296296297},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.06896551724137931},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.06451612903225806},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.07942238267148015},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0622568093385214},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.07749077490774908},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.0756578947368421},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.07084019769357495},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.05612244897959184},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.037037037037037035},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.06862745098039216},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.08152173913043478},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.05714285714285714},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.04411764705882353},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.0625},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.07692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.03305785123966942},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.09259259259259259},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.05387205387205387},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.04954954954954955},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0784313725490196},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.046875},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.10059171597633136},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.03258145363408521},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.03355704697986577},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.01444043321299639},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.013793103448275862},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.035897435897435895},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.04732824427480916},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.015945330296127564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.09090909090909091},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.06216696269982238}},"手":{"docs":{},"动":{"docs":{},"抛":{"docs":{},"出":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"/":{"docs":{},"d":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"l":{"docs":{},"v":{"docs":{},"/":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"/":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"/":{"docs":{},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},":":{"1":{"4":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"6":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"/":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"/":{"docs":{},"g":{"docs":{},"o":{"docs":{},"/":{"docs":{},"s":{"docs":{},"r":{"docs":{},"c":{"docs":{},"/":{"docs":{},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},":":{"2":{"6":{"5":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"7":{"4":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"a":{"docs":{},"l":{"docs":{},"/":{"docs":{},"p":{"docs":{},"o":{"docs":{},"l":{"docs":{},"l":{"docs":{},"/":{"docs":{},"f":{"docs":{},"d":{"docs":{},"_":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},":":{"1":{"4":{"7":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"2":{"3":{"9":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"x":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},":":{"2":{"6":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"s":{"docs":{},"/":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},":":{"1":{"7":{"6":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}}}}},"_":{"docs":{},"p":{"docs":{},"o":{"docs":{},"s":{"docs":{},"i":{"docs":{},"x":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},":":{"4":{"9":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"*":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.013513513513513514}}}},"b":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.03103448275862069}},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}}},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.021739130434782608},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"s":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},";":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}},"f":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},",":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}},")":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}},"a":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"d":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.023148148148148147},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.034482758620689655},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.025806451612903226},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.013618677042801557},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.011513157894736841},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.019769357495881382},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.011904761904761904},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.024793388429752067},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.013513513513513514},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.011834319526627219},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308}},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}},"r":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.013468013468013467}},"/":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{},",":{"docs":{},"后":{"docs":{},"者":{"docs":{},"导":{"docs":{},"入":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}},"(":{"docs":{},"&":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}},"i":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}},"z":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}},"s":{"docs":{},"i":{"docs":{},"c":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}},"c":{"docs":{},"k":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"o":{"docs":{},"d":{"docs":{},"i":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.018518518518518517}}}},"o":{"docs":{},"l":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.023391812865497075}},")":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}}}}},"t":{"docs":{},"h":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},"l":{"docs":{},"u":{"docs":{},"e":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}},"o":{"docs":{},"g":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"a":{"docs":{},"n":{"docs":{},"k":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}},"r":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"a":{"docs":{},"d":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}}}}}}}}}}},"e":{"docs":{},"a":{"docs":{},"k":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}}}}}},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},"s":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.01904761904761905}},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"[":{"docs":{},"]":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"r":{"docs":{},"e":{"docs":{},"q":{"docs":{},")":{"docs":{},")":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"b":{"docs":{},"y":{"docs":{},"s":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},"f":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693}}}}}}}},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}}}}}}}},"[":{"docs":{},"]":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259}}}}}}},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},".":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}},"e":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"v":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}},"n":{"docs":{},"c":{"docs":{},"h":{"docs":{},"=":{"docs":{},".":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"b":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"h":{"docs":{},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"k":{"docs":{},"n":{"docs":{},"t":{"docs":{},"o":{"docs":{},"h":{"docs":{},"l":{"docs":{},".":{"docs":{},"*":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"t":{"docs":{},"o":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}},"e":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}},"^":{"docs":{},"b":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"h":{"docs":{},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"k":{"docs":{},"j":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"$":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}},"p":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"$":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"k":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}}},"3":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}}},"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}}},"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"s":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}},"u":{"6":{"4":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}},"docs":{}},"docs":{}}}}}}}},"n":{"docs":{},"t":{"docs":{},"o":{"docs":{},"h":{"docs":{},"l":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"t":{"docs":{},"o":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}},"e":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"e":{"docs":{},"e":{"docs":{},"s":{"docs":{},"c":{"docs":{},"a":{"docs":{},"p":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}},"n":{"docs":{},"o":{"docs":{},"e":{"docs":{},"s":{"docs":{},"c":{"docs":{},"a":{"docs":{},"p":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}},"j":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},"b":{"docs":{},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}},"e":{"docs":{},"r":{"docs":{},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}},"j":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},"f":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}},"e":{"docs":{},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"x":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}},"p":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},"e":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"c":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}},"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"x":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}},"t":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}},"p":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}},"e":{"docs":{},"t":{"docs":{},"p":{"docs":{},"t":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"e":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"w":{"docs":{},"e":{"docs":{},"q":{"docs":{},"u":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"y":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}}}}}}}}},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},"f":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"e":{"docs":{},"r":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{},"u":{"docs":{},"r":{"docs":{},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"n":{"docs":{},"o":{"docs":{},"s":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{},"d":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"e":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}},"w":{"docs":{},"e":{"docs":{},"q":{"docs":{},"u":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"/":{"docs":{},"o":{"docs":{},"p":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.01567398119122257},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.018223234624145785},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}},"i":{"docs":{},"n":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"y":{"docs":{},".":{"docs":{},"b":{"docs":{},"i":{"docs":{},"g":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"i":{"docs":{},"a":{"docs":{},"n":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203}},"(":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}},"e":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}},"g":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}},"d":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},"e":{"docs":{},"b":{"docs":{},"、":{"docs":{},"r":{"docs":{},"p":{"docs":{},"m":{"docs":{},"、":{"docs":{},"p":{"docs":{},"k":{"docs":{},"g":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}},"u":{"docs":{},"g":{"docs":{},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"g":{"docs":{},"c":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"c":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"(":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"l":{"docs":{},"o":{"docs":{},"y":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"f":{"docs":{},"a":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}},":":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}},"e":{"docs":{},"r":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.009727626459143969},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.006589785831960461},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.017006802721088437},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":3.427083333333333},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":3.379487179487179},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125}}},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"这":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"资":{"docs":{},"源":{"docs":{},"泄":{"docs":{},"漏":{"docs":{},"(":{"docs":{},"p":{"docs":{},"o":{"docs":{},"s":{"docs":{},"s":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}}}}}}},"释":{"docs":{},"放":{"docs":{},"资":{"docs":{},"源":{"docs":{},"不":{"docs":{},"会":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"早":{"docs":{},"地":{"docs":{},"发":{"docs":{},"生":{"docs":{},"(":{"docs":{},"在":{"docs":{},"每":{"docs":{},"次":{"docs":{},"迭":{"docs":{},"代":{"docs":{},"结":{"docs":{},"束":{"docs":{},"时":{"docs":{},")":{"docs":{},",":{"docs":{},"只":{"docs":{},"有":{"docs":{},"在":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"资":{"docs":{},"源":{"docs":{},"将":{"docs":{},"在":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"时":{"docs":{},"被":{"docs":{},"立":{"docs":{},"即":{"docs":{},"释":{"docs":{},"放":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{},"和":{"docs":{},"类":{"docs":{},"型":{"docs":{},"别":{"docs":{},"名":{"docs":{},"(":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}},"m":{"docs":{},"o":{"1":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}},":":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}},"2":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}},":":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}},"3":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}},"4":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"docs":{},"g":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"h":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"e":{"docs":{},"(":{"docs":{},"m":{"docs":{},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}},"(":{"docs":{},"a":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}},"(":{"docs":{},"a":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"3":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}},"(":{"docs":{},"a":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}},"(":{"docs":{},"a":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"s":{"docs":{},"(":{"docs":{},"i":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}},"u":{"6":{"4":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"s":{"docs":{},"(":{"docs":{},"i":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}},"docs":{}},"docs":{}}}}},"a":{"docs":{},"y":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},")":{"docs":{},"来":{"docs":{},"访":{"docs":{},"问":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"标":{"docs":{},"准":{"docs":{},"输":{"docs":{},"出":{"docs":{},"的":{"docs":{},"文":{"docs":{},"件":{"docs":{},"描":{"docs":{},"述":{"docs":{},"符":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}},"o":{"docs":{},"c":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}},",":{"docs":{},"参":{"docs":{},"数":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"f":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"n":{"docs":{},"e":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.024390243902439025},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.010657193605683837}}}},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.017543859649122806}},"\"":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537}}}},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537}}},",":{"docs":{},"在":{"docs":{},"这":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"d":{"docs":{},"o":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}},":":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}},"s":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},"(":{"docs":{},"f":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.024691358024691357},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"b":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"/":{"docs":{},"s":{"docs":{},"q":{"docs":{},"l":{"docs":{},"、":{"docs":{},"编":{"docs":{},"码":{"docs":{},"类":{"docs":{},"型":{"docs":{},"注":{"docs":{},"册":{"docs":{},"表":{"docs":{},"等":{"docs":{},";":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"t":{"docs":{},"l":{"docs":{},"(":{"docs":{},"c":{"docs":{},"t":{"docs":{},"x":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"、":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}},":":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}}},"。":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}},"e":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}},"y":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"r":{"docs":{},"w":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"/":{"docs":{},"a":{"docs":{},"m":{"docs":{},"d":{"6":{"4":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}},"docs":{}}}}}}}}},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"l":{"docs":{},"v":{"docs":{},"@":{"docs":{},"d":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"l":{"docs":{},"v":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}},"r":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"b":{"docs":{},".":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"r":{"docs":{},"y":{"docs":{},"(":{"docs":{},"v":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}},".":{"docs":{},".":{"docs":{},".":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.015384615384615385}}},".":{"docs":{},".":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}}}}}},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{},"(":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.010869565217391304}}}}}}},"y":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}}},"i":{"docs":{},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"u":{"docs":{},"r":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}},"h":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.006578947368421052},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"s":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"y":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}},"g":{"docs":{},"o":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"i":{"docs":{},"s":{"docs":{},"s":{"docs":{},"u":{"docs":{},"e":{"docs":{},"/":{"2":{"3":{"1":{"9":{"9":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}}},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}},"p":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.0392156862745098}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"e":{"docs":{},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"l":{"docs":{},".":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.005836575875486381},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.015384615384615385},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.016835016835016835}},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"(":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"m":{"docs":{},"s":{"docs":{},"g":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.0196078431372549}}}}}}},"s":{"docs":{},",":{"docs":{},"i":{"docs":{},"s":{"docs":{},",":{"docs":{},"c":{"docs":{},"a":{"docs":{},"n":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"(":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"h":{"0":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}},"(":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}},"l":{"docs":{},"f":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"r":{"docs":{},"d":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"e":{"docs":{},"l":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}},"a":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},".":{"docs":{},"(":{"docs":{},"*":{"docs":{},"n":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}},"n":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}},"p":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"r":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.03067484662576687}}},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.03067484662576687}}}}},"l":{"docs":{},"d":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.008152173913043478},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}},"w":{"docs":{},"e":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.03125},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0066518847006651885}}}},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"n":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}},"g":{"docs":{},"h":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{},"s":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},".":{"docs":{},"o":{"docs":{},"l":{"docs":{},"d":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}}}},"o":{"docs":{},"l":{"docs":{},"d":{"docs":{},"b":{"docs":{},"u":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{},"s":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}}}}}},"i":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{},"a":{"docs":{},"a":{"docs":{},"s":{"docs":{},"、":{"docs":{},"p":{"docs":{},"a":{"docs":{},"a":{"docs":{},"s":{"docs":{},"、":{"docs":{},"系":{"docs":{},"统":{"docs":{},"和":{"docs":{},"容":{"docs":{},"器":{"docs":{},"编":{"docs":{},"排":{"docs":{},"部":{"docs":{},"署":{"docs":{},"配":{"docs":{},"置":{"docs":{},"和":{"docs":{},"模":{"docs":{},"板":{"docs":{},"(":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"6":{"4":{"docs":{},"(":{"0":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"docs":{}}},"docs":{}},"docs":{},"i":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.00842358604091456}},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},",":{"docs":{},"当":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"i":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"t":{"1":{"6":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}},"docs":{}},"3":{"2":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.013793103448275862},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"docs":{}},"6":{"4":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}},"docs":{}},"8":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.008237232289950576},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.008152173913043478},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.02857142857142857},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.013513513513513514},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537}},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.008875739644970414}},"a":{"docs":{},"l":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"名":{"docs":{},"为":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"/":{"docs":{},"p":{"docs":{},"o":{"docs":{},"l":{"docs":{},"l":{"docs":{},".":{"docs":{},"(":{"docs":{},"*":{"docs":{},"f":{"docs":{},"d":{"docs":{},")":{"docs":{},".":{"docs":{},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"0":{"docs":{},"x":{"docs":{},"c":{"0":{"0":{"0":{"0":{"docs":{},"a":{"docs":{},"e":{"0":{"6":{"0":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}},"docs":{}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}},"docs":{}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},")":{"docs":{},".":{"docs":{},"r":{"docs":{},"w":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"0":{"docs":{},"x":{"docs":{},"c":{"0":{"0":{"0":{"0":{"docs":{},"a":{"docs":{},"e":{"0":{"6":{"0":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}},"docs":{}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":3.333333333333333},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":3.333333333333333},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}},"e":{"docs":{},"{":{"docs":{},"}":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.024691358024691357},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},")":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"需":{"docs":{},"要":{"docs":{},"类":{"docs":{},"型":{"docs":{},"转":{"docs":{},"换":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},",":{"docs":{},"这":{"docs":{},"将":{"docs":{},"为":{"docs":{},"开":{"docs":{},"发":{"docs":{},"人":{"docs":{},"员":{"docs":{},"提":{"docs":{},"供":{"docs":{},"更":{"docs":{},"大":{"docs":{},"的":{"docs":{},"灵":{"docs":{},"活":{"docs":{},"性":{"docs":{},"来":{"docs":{},"改":{"docs":{},"变":{"docs":{},"未":{"docs":{},"来":{"docs":{},",":{"docs":{},"但":{"docs":{},"仍":{"docs":{},"然":{"docs":{},"泄":{"docs":{},"露":{"docs":{},"了":{"docs":{},"具":{"docs":{},"体":{"docs":{},"列":{"docs":{},"表":{"docs":{},"使":{"docs":{},"用":{"docs":{},"抽":{"docs":{},"象":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"细":{"docs":{},"节":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}},"a":{"docs":{},"l":{"docs":{},"m":{"docs":{},"i":{"docs":{},"l":{"docs":{},"l":{"docs":{},"i":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}},"l":{"docs":{},"(":{"docs":{},"r":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"(":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.018050541516245487},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.037037037037037035},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"是":{"docs":{},"类":{"docs":{},"型":{"docs":{},"是":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"r":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}},"n":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}},"r":{"docs":{},"n":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}},"f":{"docs":{},"o":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}},"d":{"docs":{},"e":{"docs":{},"x":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}},",":{"docs":{},"记":{"docs":{},"录":{"docs":{},"下":{"docs":{},"一":{"docs":{},"个":{"docs":{},"有":{"docs":{},"效":{"docs":{},"元":{"docs":{},"素":{"docs":{},"应":{"docs":{},"该":{"docs":{},"在":{"docs":{},"的":{"docs":{},"位":{"docs":{},"置":{"docs":{},"。":{"docs":{},"遍":{"docs":{},"历":{"docs":{},"所":{"docs":{},"有":{"docs":{},"元":{"docs":{},"素":{"docs":{},",":{"docs":{},"当":{"docs":{},"遇":{"docs":{},"到":{"docs":{},"有":{"docs":{},"效":{"docs":{},"元":{"docs":{},"素":{"docs":{},",":{"docs":{},"将":{"docs":{},"其":{"docs":{},"移":{"docs":{},"动":{"docs":{},"到":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"c":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},"e":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}},"v":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}},"k":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"s":{"docs":{},"o":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}}},"\"":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}},"e":{"docs":{},"m":{"docs":{},"p":{"docs":{},"t":{"docs":{},"y":{"docs":{},"(":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}},"a":{"docs":{},"l":{"docs":{},",":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"u":{"docs":{},"e":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"(":{"docs":{},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{},",":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"n":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549}}}}}}}}}}}},"d":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.00510204081632653},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"]":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}},"]":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}},"m":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.08387096774193549},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}}},"l":{"docs":{},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0066518847006651885},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"a":{"docs":{},"g":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"m":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"y":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}},"/":{"docs":{},"o":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},",":{"docs":{},"包":{"docs":{},"括":{"docs":{},"文":{"docs":{},"件":{"docs":{},"系":{"docs":{},"统":{"docs":{},"、":{"docs":{},"网":{"docs":{},"络":{"docs":{},"和":{"docs":{},"系":{"docs":{},"统":{"docs":{},"调":{"docs":{},"用":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"o":{"docs":{},"t":{"docs":{},"a":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.05714285714285714}}}},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},";":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"(":{"docs":{},"f":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}}}}},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"(":{"docs":{},"\"":{"docs":{},".":{"docs":{},"/":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"s":{"docs":{},"\"":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308}}}}}}}}}}}}}}}}}}}}}}}}},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},",":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}},".":{"docs":{},"(":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.005836575875486381}}}}}}}}}}},"f":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"s":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{},"n":{"docs":{},"g":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"程":{"docs":{},"序":{"docs":{},"退":{"docs":{},"出":{"docs":{},"方":{"docs":{},"式":{"docs":{},"i":{"docs":{},"f":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"a":{"docs":{},"c":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}},",":{"docs":{},"是":{"docs":{},"因":{"docs":{},"为":{"docs":{},"当":{"docs":{},"前":{"docs":{},"协":{"docs":{},"程":{"docs":{},"被":{"docs":{},"唤":{"docs":{},"醒":{"docs":{},"时":{"docs":{},",":{"docs":{},"条":{"docs":{},"件":{"docs":{},"不":{"docs":{},"一":{"docs":{},"定":{"docs":{},"符":{"docs":{},"合":{"docs":{},"要":{"docs":{},"求":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"再":{"docs":{},"次":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.018808777429467086}},"s":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}},"g":{"docs":{},"n":{"docs":{},"o":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}},"p":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"k":{"1":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"2":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"3":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}},"u":{"docs":{},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"e":{"docs":{},"y":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.006589785831960461},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}},"e":{"docs":{},"p":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},",":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"b":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"o":{"docs":{},"f":{"docs":{},"f":{"docs":{},"i":{"docs":{},"c":{"docs":{},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},")":{"docs":{},"。":{"docs":{},"在":{"docs":{},"机":{"docs":{},"器":{"docs":{},"码":{"docs":{},"中":{"docs":{},",":{"docs":{},"偏":{"docs":{},"移":{"docs":{},"量":{"docs":{},"是":{"docs":{},"随":{"docs":{},"指":{"docs":{},"令":{"docs":{},"传":{"docs":{},"递":{"docs":{},"的":{"docs":{},"附":{"docs":{},"加":{"docs":{},"值":{"docs":{},",":{"docs":{},"c":{"docs":{},"p":{"docs":{},"u":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}},"b":{"docs":{},"s":{"docs":{},"d":{"docs":{},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}}}},"r":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.006016847172081829},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.0380952380952381},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"t":{"docs":{},"o":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"(":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}},"r":{"docs":{},"w":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"(":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}}}}}},"s":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}},"e":{"docs":{},"n":{"docs":{},"v":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"g":{"docs":{},"o":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},"\"":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{},"\"":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"1":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"docs":{}}}}}},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"s":{"docs":{},"[":{"1":{"docs":{},":":{"docs":{},"]":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}},"docs":{}}}}}},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"(":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.004942339373970346}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"d":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},",":{"docs":{},"相":{"docs":{},"当":{"docs":{},"于":{"docs":{},"直":{"docs":{},"接":{"docs":{},"输":{"docs":{},"出":{"docs":{},"到":{"docs":{},"标":{"docs":{},"准":{"docs":{},"输":{"docs":{},"出":{"docs":{},"。":{"docs":{},"这":{"docs":{},"里":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}},"(":{"docs":{},"*":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},")":{"docs":{},".":{"docs":{},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"0":{"docs":{},"x":{"docs":{},"c":{"0":{"0":{"0":{"0":{"docs":{},"a":{"docs":{},"c":{"0":{"0":{"8":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}},"docs":{}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}},"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}},"k":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.005836575875486381},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"u":{"docs":{},"t":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}},".":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"l":{"docs":{},"d":{"docs":{},"b":{"docs":{},"u":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.008152173913043478}}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.024456521739130436}}}}}}}}},"b":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"n":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"e":{"docs":{},".":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}},"c":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.015521064301552107}},"e":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},"d":{"docs":{},"o":{"docs":{},"(":{"docs":{},"f":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}},".":{"docs":{},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},",":{"docs":{},"在":{"docs":{},"热":{"docs":{},"路":{"docs":{},"径":{"docs":{},"上":{"docs":{},"是":{"docs":{},"比":{"docs":{},"较":{"docs":{},"好":{"docs":{},"理":{"docs":{},"解":{"docs":{},"的":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},"(":{"docs":{},"f":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}},"m":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}},"c":{"docs":{},"c":{"docs":{},"u":{"docs":{},"r":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"u":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"i":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"d":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.008223684210526315}},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"y":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"e":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}},"n":{"docs":{},"t":{"1":{"6":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"docs":{}},"3":{"2":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.015037593984962405},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"(":{"docs":{},"b":{"docs":{},"y":{"docs":{},"s":{"docs":{},"[":{"2":{"docs":{},"]":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"3":{"docs":{},"]":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"docs":{}}}}}}},"docs":{}},"6":{"4":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}},"(":{"3":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"5":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"7":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"9":{"docs":{},")":{"docs":{},"}":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"docs":{}}},"docs":{}},"8":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}},"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"p":{"docs":{},"t":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}},"p":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},",":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"、":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"、":{"docs":{},"m":{"docs":{},"i":{"docs":{},"s":{"docs":{},"c":{"docs":{},"、":{"docs":{},"g":{"docs":{},"l":{"docs":{},"o":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{},"。":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"a":{"docs":{},"g":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"e":{"docs":{},"r":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.006016847172081829},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}},"{":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"\"":{"docs":{},"j":{"docs":{},"o":{"docs":{},"h":{"docs":{},"n":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}},"}":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},")":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"a":{"docs":{},"g":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"n":{"docs":{},"k":{"docs":{},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}},"s":{"docs":{},"a":{"docs":{},"f":{"docs":{},"e":{"docs":{},".":{"docs":{},"p":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.024691358024691357},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.008152173913043478}}}}}}},"s":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"o":{"docs":{},"f":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"o":{"docs":{},"f":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"(":{"docs":{},"x":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.010344827586206896}}},".":{"docs":{},"f":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},",":{"docs":{},"u":{"docs":{},"n":{"docs":{},"s":{"docs":{},"a":{"docs":{},"f":{"docs":{},"e":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"o":{"docs":{},"f":{"docs":{},"(":{"docs":{},"x":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}}}}}}},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"i":{"docs":{},"k":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}},"r":{"docs":{},"l":{"docs":{},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"y":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},";":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},":":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}},"v":{"1":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"2":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"3":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.009884678747940691},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.01020408163265306},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.012531328320802004},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.02527075812274368}},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"r":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}},"r":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}}}}}}}}},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"b":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"t":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}},"之":{"docs":{},"类":{"docs":{},"的":{"docs":{},"工":{"docs":{},"具":{"docs":{},"会":{"docs":{},"正":{"docs":{},"确":{"docs":{},"地":{"docs":{},"指":{"docs":{},"出":{"docs":{},"这":{"docs":{},"些":{"docs":{},"和":{"docs":{},"其":{"docs":{},"他":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"的":{"docs":{},"隐":{"docs":{},"式":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"+":{"1":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}},")":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}},"docs":{}},"a":{"docs":{},"r":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.022988505747126436},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.031287605294825514},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.013157894736842105},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.024691358024691357},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.0196078431372549},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.010101010101010102},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.010256410256410256},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.00916030534351145},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"的":{"docs":{},"后":{"docs":{},"面":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.013793103448275862},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"e":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"l":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},"u":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}},"o":{"docs":{},"l":{"docs":{},"u":{"docs":{},"m":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.007220216606498195}}},".":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}},"f":{"1":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}},"docs":{}},"s":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}},"l":{"docs":{},"e":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}},":":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}},"s":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},".":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}},",":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}},"下":{"docs":{},"面":{"docs":{},",":{"docs":{},"就":{"docs":{},"像":{"docs":{},"不":{"docs":{},"应":{"docs":{},"该":{"docs":{},"拥":{"docs":{},"有":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"反":{"docs":{},"面":{"docs":{},"示":{"docs":{},"例":{"docs":{},",":{"docs":{},"其":{"docs":{},"他":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}},"代":{"docs":{},"码":{"docs":{},"无":{"docs":{},"法":{"docs":{},"通":{"docs":{},"过":{"docs":{},"编":{"docs":{},"译":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}}},"以":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"我":{"docs":{},"们":{"docs":{},"熟":{"docs":{},"知":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}},"一":{"docs":{},"个":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{},"示":{"docs":{},"例":{"docs":{},"来":{"docs":{},"看":{"docs":{},"下":{"docs":{},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}},"看":{"docs":{},"一":{"docs":{},"下":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"对":{"docs":{},"比":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}},"性":{"docs":{},"能":{"docs":{},"对":{"docs":{},"比":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}},"下":{"docs":{},"剥":{"docs":{},"去":{"docs":{},"反":{"docs":{},"射":{"docs":{},"前":{"docs":{},"后":{"docs":{},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"对":{"docs":{},"比":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}},"再":{"docs":{},"看":{"docs":{},"一":{"docs":{},"下":{"docs":{},"链":{"docs":{},"表":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}},"标":{"docs":{},"时":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"比":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}},"中":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"引":{"docs":{},"用":{"docs":{},"的":{"docs":{},"图":{"docs":{},"片":{"docs":{},"等":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"的":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"作":{"docs":{},"为":{"docs":{},"项":{"docs":{},"目":{"docs":{},"的":{"docs":{},"主":{"docs":{},"应":{"docs":{},"用":{"docs":{},"目":{"docs":{},"录":{"docs":{},"。":{"docs":{},"目":{"docs":{},"录":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"包":{"docs":{},"含":{"docs":{},"多":{"docs":{},"个":{"docs":{},"可":{"docs":{},"执":{"docs":{},"行":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"子":{"docs":{},"目":{"docs":{},"录":{"docs":{},"名":{"docs":{},"称":{"docs":{},"一":{"docs":{},"般":{"docs":{},"与":{"docs":{},"可":{"docs":{},"执":{"docs":{},"行":{"docs":{},"文":{"docs":{},"件":{"docs":{},"相":{"docs":{},"对":{"docs":{},"应":{"docs":{},"(":{"docs":{},"如":{"docs":{},":":{"docs":{},"/":{"docs":{},"c":{"docs":{},"m":{"docs":{},"d":{"docs":{},"/":{"docs":{},"m":{"docs":{},"y":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"方":{"docs":{},"法":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"字":{"docs":{},"节":{"docs":{},"数":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}},"变":{"docs":{},"量":{"docs":{},"只":{"docs":{},"要":{"docs":{},"被":{"docs":{},"引":{"docs":{},"用":{"docs":{},"就":{"docs":{},"一":{"docs":{},"直":{"docs":{},"会":{"docs":{},"存":{"docs":{},"活":{"docs":{},",":{"docs":{},"存":{"docs":{},"储":{"docs":{},"在":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"还":{"docs":{},"是":{"docs":{},"栈":{"docs":{},"上":{"docs":{},"由":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}},"暂":{"docs":{},"停":{"docs":{},"了":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},",":{"docs":{},"而":{"docs":{},"应":{"docs":{},"用":{"docs":{},"的":{"docs":{},"共":{"docs":{},"享":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"以":{"docs":{},"放":{"docs":{},"在":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}},"因":{"docs":{},"为":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"它":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},"可":{"docs":{},"勾":{"docs":{},"选":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"用":{"docs":{},"来":{"docs":{},"捕":{"docs":{},"获":{"docs":{},"程":{"docs":{},"序":{"docs":{},"运":{"docs":{},"行":{"docs":{},"期":{"docs":{},"间":{"docs":{},"发":{"docs":{},"生":{"docs":{},"异":{"docs":{},"常":{"docs":{},"抛":{"docs":{},"出":{"docs":{},"的":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"无":{"docs":{},"法":{"docs":{},"捕":{"docs":{},"获":{"docs":{},"当":{"docs":{},"前":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}}}}},"调":{"docs":{},"用":{"docs":{},"才":{"docs":{},"会":{"docs":{},"生":{"docs":{},"效":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}},"英":{"docs":{},"文":{"docs":{},"之":{"docs":{},"间":{"docs":{},"应":{"docs":{},"该":{"docs":{},"有":{"docs":{},"空":{"docs":{},"格":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}},"退":{"docs":{},"出":{"docs":{},"程":{"docs":{},"序":{"docs":{},"且":{"docs":{},"只":{"docs":{},"退":{"docs":{},"出":{"docs":{},"一":{"docs":{},"次":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}},"执":{"docs":{},"行":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}},"一":{"docs":{},"节":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}},"定":{"docs":{},"义":{"docs":{},"的":{"docs":{},"格":{"docs":{},"式":{"docs":{},"时":{"docs":{},"间":{"docs":{},"戳":{"docs":{},"。":{"docs":{},"默":{"docs":{},"认":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"u":{"docs":{},"n":{"docs":{},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"h":{"docs":{},"a":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}},"元":{"docs":{},"素":{"docs":{},"时":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"非":{"docs":{},"常":{"docs":{},"差":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}},"有":{"docs":{},"一":{"docs":{},"百":{"docs":{},"万":{"docs":{},"条":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"就":{"docs":{},"会":{"docs":{},"浪":{"docs":{},"费":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}},"仍":{"docs":{},"占":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},"比":{"docs":{},"较":{"docs":{},"特":{"docs":{},"殊":{"docs":{},"。":{"docs":{},"没":{"docs":{},"有":{"docs":{},"任":{"docs":{},"何":{"docs":{},"字":{"docs":{},"段":{"docs":{},"的":{"docs":{},"空":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}},"保":{"docs":{},"证":{"docs":{},"了":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"内":{"docs":{},"置":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"丰":{"docs":{},"富":{"docs":{},"的":{"docs":{},"示":{"docs":{},"例":{"docs":{},"将":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"用":{"docs":{},"户":{"docs":{},"更":{"docs":{},"加":{"docs":{},"便":{"docs":{},"捷":{"docs":{},"快":{"docs":{},"速":{"docs":{},"的":{"docs":{},"了":{"docs":{},"解":{"docs":{},"上":{"docs":{},"手":{"docs":{},"一":{"docs":{},"个":{"docs":{},"项":{"docs":{},"目":{"docs":{},",":{"docs":{},"再":{"docs":{},"加":{"docs":{},"上":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"以":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"后":{"docs":{},",":{"docs":{},"g":{"docs":{},"o":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"上":{"docs":{},"必":{"docs":{},"须":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}},"仅":{"docs":{},"列":{"docs":{},"出":{"docs":{},"了":{"docs":{},"部":{"docs":{},"分":{"docs":{},"变":{"docs":{},"量":{"docs":{},"发":{"docs":{},"生":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"的":{"docs":{},"情":{"docs":{},"形":{"docs":{},"。":{"docs":{},"实":{"docs":{},"际":{"docs":{},"上":{"docs":{},",":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}},"外":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},"进":{"docs":{},"行":{"docs":{},"过":{"docs":{},"滤":{"docs":{},",":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"一":{"docs":{},"次":{"docs":{},"代":{"docs":{},"码":{"docs":{},"又":{"docs":{},"何":{"docs":{},"妨":{"docs":{},"呢":{"docs":{},"?":{"docs":{},"可":{"docs":{},"以":{"docs":{},"肯":{"docs":{},"定":{"docs":{},"的":{"docs":{},"是":{"docs":{},",":{"docs":{},"绝":{"docs":{},"大":{"docs":{},"部":{"docs":{},"份":{"docs":{},"场":{"docs":{},"景":{"docs":{},",":{"docs":{},"根":{"docs":{},"本":{"docs":{},"不":{"docs":{},"会":{"docs":{},"对":{"docs":{},"所":{"docs":{},"有":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},"进":{"docs":{},"行":{"docs":{},"过":{"docs":{},"滤":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"反":{"docs":{},"射":{"docs":{},"带":{"docs":{},"来":{"docs":{},"好":{"docs":{},"处":{"docs":{},"我":{"docs":{},"们":{"docs":{},"并":{"docs":{},"没":{"docs":{},"有":{"docs":{},"充":{"docs":{},"分":{"docs":{},"享":{"docs":{},"受":{"docs":{},",":{"docs":{},"但":{"docs":{},"却":{"docs":{},"要":{"docs":{},"为":{"docs":{},"其":{"docs":{},"带":{"docs":{},"来":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"成":{"docs":{},"本":{"docs":{},"买":{"docs":{},"单":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{},"示":{"docs":{},"例":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"对":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"[":{"docs":{},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"6":{"4":{"docs":{},"]":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{},"分":{"docs":{},"片":{"docs":{},"前":{"docs":{},"后":{"docs":{},"并":{"docs":{},"发":{"docs":{},"写":{"docs":{},"入":{"docs":{},"的":{"docs":{},"对":{"docs":{},"比":{"docs":{},",":{"docs":{},"来":{"docs":{},"看":{"docs":{},"下":{"docs":{},"减":{"docs":{},"少":{"docs":{},"锁":{"docs":{},"竞":{"docs":{},"争":{"docs":{},"带":{"docs":{},"来":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"提":{"docs":{},"升":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}},"们":{"docs":{},"努":{"docs":{},"力":{"docs":{},"的":{"docs":{},"结":{"docs":{},"果":{"docs":{},"。":{"docs":{},"此":{"docs":{},"项":{"docs":{},"目":{"docs":{},"布":{"docs":{},"局":{"docs":{},"是":{"docs":{},"通":{"docs":{},"用":{"docs":{},"的":{"docs":{},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"并":{"docs":{},"非":{"docs":{},"强":{"docs":{},"制":{"docs":{},",":{"docs":{},"当":{"docs":{},"然":{"docs":{},"我":{"docs":{},"们":{"docs":{},"最":{"docs":{},"好":{"docs":{},"遵":{"docs":{},"守":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"这":{"docs":{},"能":{"docs":{},"让":{"docs":{},"我":{"docs":{},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},"布":{"docs":{},"局":{"docs":{},"看":{"docs":{},"起":{"docs":{},"来":{"docs":{},"更":{"docs":{},"加":{"docs":{},"规":{"docs":{},"范":{"docs":{},",":{"docs":{},"易":{"docs":{},"于":{"docs":{},"交":{"docs":{},"流":{"docs":{},"和":{"docs":{},"维":{"docs":{},"护":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"作":{"docs":{},"为":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}},"他":{"docs":{},"们":{"docs":{},"的":{"docs":{},"模":{"docs":{},"块":{"docs":{},"代":{"docs":{},"理":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},")":{"docs":{},"。":{"docs":{},"使":{"docs":{},"用":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}},"下":{"docs":{},"标":{"docs":{},"不":{"docs":{},"留":{"docs":{},"空":{"docs":{},"格":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}},"入":{"docs":{},"参":{"docs":{},"不":{"docs":{},"要":{"docs":{},"留":{"docs":{},"空":{"docs":{},"格":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}},"输":{"docs":{},"入":{"docs":{},"参":{"docs":{},"数":{"docs":{},"或":{"docs":{},"者":{"docs":{},"数":{"docs":{},"组":{"docs":{},"下":{"docs":{},"标":{"docs":{},"时":{"docs":{},",":{"docs":{},"运":{"docs":{},"算":{"docs":{},"符":{"docs":{},"和":{"docs":{},"操":{"docs":{},"作":{"docs":{},"数":{"docs":{},"之":{"docs":{},"间":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"空":{"docs":{},"格":{"docs":{},",":{"docs":{},"紧":{"docs":{},"凑":{"docs":{},"展":{"docs":{},"示":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"依":{"docs":{},"赖":{"docs":{},"管":{"docs":{},"理":{"docs":{},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},"不":{"docs":{},"要":{"docs":{},"提":{"docs":{},"交":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"值":{"docs":{},"返":{"docs":{},"回":{"docs":{},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"对":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"且":{"docs":{},"有":{"docs":{},"多":{"docs":{},"个":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}},"参":{"docs":{},"数":{"docs":{},"传":{"docs":{},"入":{"docs":{},"时":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"您":{"docs":{},"存":{"docs":{},"储":{"docs":{},"了":{"docs":{},"对":{"docs":{},"它":{"docs":{},"们":{"docs":{},"的":{"docs":{},"引":{"docs":{},"用":{"docs":{},",":{"docs":{},"则":{"docs":{},"用":{"docs":{},"户":{"docs":{},"可":{"docs":{},"以":{"docs":{},"对":{"docs":{},"其":{"docs":{},"进":{"docs":{},"行":{"docs":{},"修":{"docs":{},"改":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"后":{"docs":{},"缀":{"docs":{},",":{"docs":{},"如":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"其":{"docs":{},"他":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"时":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"使":{"docs":{},"用":{"docs":{},"值":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"指":{"docs":{},"针":{"docs":{},"。":{"docs":{},"即":{"docs":{},"使":{"docs":{},"该":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"不":{"docs":{},"被":{"docs":{},"导":{"docs":{},"出":{"docs":{},",":{"docs":{},"也":{"docs":{},"不":{"docs":{},"要":{"docs":{},"直":{"docs":{},"接":{"docs":{},"把":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"集":{"docs":{},"合":{"docs":{},"(":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},")":{"docs":{},"使":{"docs":{},"用":{"docs":{},"时":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"将":{"docs":{},"值":{"docs":{},"类":{"docs":{},"型":{"docs":{},"定":{"docs":{},"义":{"docs":{},"为":{"docs":{},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},",":{"docs":{},"仅":{"docs":{},"作":{"docs":{},"为":{"docs":{},"占":{"docs":{},"位":{"docs":{},"符":{"docs":{},"使":{"docs":{},"用":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"门":{"docs":{},"追":{"docs":{},"求":{"docs":{},"高":{"docs":{},"性":{"docs":{},"能":{"docs":{},"的":{"docs":{},"后":{"docs":{},"台":{"docs":{},"编":{"docs":{},"程":{"docs":{},"语":{"docs":{},"言":{"docs":{},",":{"docs":{},"当":{"docs":{},"然":{"docs":{},"也":{"docs":{},"不":{"docs":{},"例":{"docs":{},"外":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"最":{"docs":{},"后":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"时":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"指":{"docs":{},"针":{"docs":{},"指":{"docs":{},"向":{"docs":{},"该":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"返":{"docs":{},"回":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"将":{"docs":{},"在":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"之":{"docs":{},"外":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"此":{"docs":{},"指":{"docs":{},"针":{"docs":{},"一":{"docs":{},"直":{"docs":{},"存":{"docs":{},"活":{"docs":{},"不":{"docs":{},"释":{"docs":{},"放":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},",":{"docs":{},"就":{"docs":{},"会":{"docs":{},"有":{"docs":{},"内":{"docs":{},"存":{"docs":{},"泄":{"docs":{},"露":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},"(":{"docs":{},"该":{"docs":{},"内":{"docs":{},"存":{"docs":{},"不":{"docs":{},"因":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"释":{"docs":{},"放":{"docs":{},"而":{"docs":{},"释":{"docs":{},"放":{"docs":{},")":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"用":{"docs":{},"域":{"docs":{},"内":{"docs":{},"隐":{"docs":{},"式":{"docs":{},"覆":{"docs":{},"盖":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"较":{"docs":{},"大":{"docs":{},"的":{"docs":{},"名":{"docs":{},"字":{"docs":{},"(":{"docs":{},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},")":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"缩":{"docs":{},"写":{"docs":{},",":{"docs":{},"要":{"docs":{},"有":{"docs":{},"明":{"docs":{},"确":{"docs":{},"的":{"docs":{},"意":{"docs":{},"义":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}},"小":{"docs":{},"的":{"docs":{},"名":{"docs":{},"字":{"docs":{},"(":{"docs":{},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{},"/":{"docs":{},"函":{"docs":{},"数":{"docs":{},"参":{"docs":{},"数":{"docs":{},")":{"docs":{},",":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"使":{"docs":{},"用":{"docs":{},"简":{"docs":{},"短":{"docs":{},"的":{"docs":{},"名":{"docs":{},"字":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"隐":{"docs":{},"藏":{"docs":{},"内":{"docs":{},"置":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"你":{"docs":{},"实":{"docs":{},"际":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"以":{"docs":{},"放":{"docs":{},"在":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},"结":{"docs":{},"构":{"docs":{},"布":{"docs":{},"局":{"docs":{},"看":{"docs":{},"起":{"docs":{},"来":{"docs":{},"应":{"docs":{},"该":{"docs":{},"像":{"docs":{},"下":{"docs":{},"面":{"docs":{},"这":{"docs":{},"个":{"docs":{},"样":{"docs":{},"子":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}},"还":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"是":{"docs":{},"要":{"docs":{},"修":{"docs":{},"改":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"只":{"docs":{},"能":{"docs":{},"通":{"docs":{},"过":{"docs":{},"值":{"docs":{},"调":{"docs":{},"用":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}},"使":{"docs":{},"用":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.01935483870967742},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"制":{"docs":{},"表":{"docs":{},"符":{"docs":{},"进":{"docs":{},"行":{"docs":{},"缩":{"docs":{},"进":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"空":{"docs":{},"白":{"docs":{},"符":{"docs":{},"进":{"docs":{},"行":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"。":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},",":{"docs":{},"并":{"docs":{},"指":{"docs":{},"定":{"docs":{},"容":{"docs":{},"量":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}},"字":{"docs":{},"段":{"docs":{},"名":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}},"o":{"docs":{},"s":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"i":{"docs":{},"t":{"docs":{},"或":{"docs":{},"者":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},".":{"docs":{},"f":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{},"*":{"docs":{},"退":{"docs":{},"出":{"docs":{},"程":{"docs":{},"序":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"p":{"docs":{},"a":{"docs":{},"n":{"docs":{},"i":{"docs":{},"c":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"了":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"表":{"docs":{},"驱":{"docs":{},"动":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"编":{"docs":{},"写":{"docs":{},"用":{"docs":{},"例":{"docs":{},",":{"docs":{},"代":{"docs":{},"码":{"docs":{},"看":{"docs":{},"上":{"docs":{},"去":{"docs":{},"会":{"docs":{},"更":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"。":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}}}}}}}}}}},"值":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"既":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"值":{"docs":{},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"指":{"docs":{},"针":{"docs":{},"调":{"docs":{},"用":{"docs":{},"。":{"docs":{},"带":{"docs":{},"指":{"docs":{},"针":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"只":{"docs":{},"能":{"docs":{},"通":{"docs":{},"过":{"docs":{},"指":{"docs":{},"针":{"docs":{},"或":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"此":{"docs":{},"格":{"docs":{},"式":{"docs":{},",":{"docs":{},"并":{"docs":{},"可":{"docs":{},"通":{"docs":{},"过":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}},"反":{"docs":{},"射":{"docs":{},"并":{"docs":{},"且":{"docs":{},"很":{"docs":{},"慢":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"需":{"docs":{},"要":{"docs":{},"用":{"docs":{},"到":{"docs":{},"这":{"docs":{},"两":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"地":{"docs":{},"方":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"手":{"docs":{},"动":{"docs":{},"实":{"docs":{},"现":{"docs":{},"这":{"docs":{},"两":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"相":{"docs":{},"关":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"直":{"docs":{},"接":{"docs":{},"去":{"docs":{},"使":{"docs":{},"用":{"docs":{},"它":{"docs":{},"们":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"读":{"docs":{},"写":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"读":{"docs":{},"写":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}},"信":{"docs":{},"息":{"docs":{},"是":{"docs":{},"否":{"docs":{},"符":{"docs":{},"合":{"docs":{},"规":{"docs":{},"范":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}},"公":{"docs":{},"有":{"docs":{},"库":{"docs":{},"代":{"docs":{},"码":{"docs":{},"(":{"docs":{},"外":{"docs":{},"部":{"docs":{},"项":{"docs":{},"目":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{},")":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}},"关":{"docs":{},"于":{"docs":{},"项":{"docs":{},"目":{"docs":{},"的":{"docs":{},"设":{"docs":{},"计":{"docs":{},"文":{"docs":{},"档":{"docs":{},",":{"docs":{},"用":{"docs":{},"户":{"docs":{},"的":{"docs":{},"使":{"docs":{},"用":{"docs":{},"文":{"docs":{},"档":{"docs":{},"等":{"docs":{},"(":{"docs":{},"除":{"docs":{},"了":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}},"键":{"docs":{},"字":{"docs":{},"并":{"docs":{},"省":{"docs":{},"略":{"docs":{},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}},"申":{"docs":{},"明":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"其":{"docs":{},"类":{"docs":{},"型":{"docs":{},"与":{"docs":{},"表":{"docs":{},"达":{"docs":{},"式":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"一":{"docs":{},"致":{"docs":{},",":{"docs":{},"这":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"可":{"docs":{},"省":{"docs":{},"略":{"docs":{},"其":{"docs":{},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"闭":{"docs":{},"g":{"docs":{},"c":{"docs":{},"改":{"docs":{},"为":{"docs":{},"手":{"docs":{},"动":{"docs":{},"执":{"docs":{},"行":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"其":{"docs":{},"他":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"目":{"docs":{},"录":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}},"/":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"s":{"docs":{},"/":{"docs":{},"t":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},"s":{"docs":{},"/":{"docs":{},"e":{"docs":{},"x":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"e":{"docs":{},"s":{"docs":{},"/":{"docs":{},"t":{"docs":{},"h":{"docs":{},"i":{"docs":{},"r":{"docs":{},"d":{"docs":{},"_":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},"y":{"docs":{},"/":{"docs":{},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"s":{"docs":{},"/":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"s":{"docs":{},"/":{"docs":{},"w":{"docs":{},"e":{"docs":{},"b":{"docs":{},"s":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"2":{"docs":{},".":{"7":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"情":{"docs":{},"况":{"docs":{},"都":{"docs":{},"应":{"docs":{},"该":{"docs":{},"使":{"docs":{},"用":{"docs":{},"该":{"docs":{},"名":{"docs":{},"词":{"docs":{},"原":{"docs":{},"有":{"docs":{},"的":{"docs":{},"写":{"docs":{},"法":{"docs":{},",":{"docs":{},"如":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}},"中":{"docs":{},"数":{"docs":{},"字":{"docs":{},"与":{"docs":{},"字":{"docs":{},"节":{"docs":{},"序":{"docs":{},"列":{"docs":{},"的":{"docs":{},"转":{"docs":{},"换":{"docs":{},"可":{"docs":{},"以":{"docs":{},"用":{"docs":{},"如":{"docs":{},"下":{"docs":{},"三":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}},"函":{"docs":{},"数":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}},"函":{"docs":{},"数":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}},",":{"docs":{},"调":{"docs":{},"用":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"体":{"docs":{},"第":{"docs":{},"一":{"docs":{},"行":{"docs":{},"不":{"docs":{},"要":{"docs":{},"换":{"docs":{},"行":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}}}},"调":{"docs":{},"用":{"docs":{},"和":{"docs":{},"对":{"docs":{},"调":{"docs":{},"用":{"docs":{},"结":{"docs":{},"果":{"docs":{},"的":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"是":{"docs":{},"紧":{"docs":{},"密":{"docs":{},"相":{"docs":{},"连":{"docs":{},"的":{"docs":{},",":{"docs":{},"不":{"docs":{},"能":{"docs":{},"加":{"docs":{},"空":{"docs":{},"行":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}}}}}}}}}}}}}}}}}},"中":{"docs":{},"意":{"docs":{},"义":{"docs":{},"不":{"docs":{},"明":{"docs":{},"确":{"docs":{},"的":{"docs":{},"实":{"docs":{},"参":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"损":{"docs":{},"害":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"读":{"docs":{},"性":{"docs":{},"。":{"docs":{},"当":{"docs":{},"参":{"docs":{},"数":{"docs":{},"名":{"docs":{},"称":{"docs":{},"的":{"docs":{},"含":{"docs":{},"义":{"docs":{},"不":{"docs":{},"明":{"docs":{},"显":{"docs":{},"时":{"docs":{},",":{"docs":{},"请":{"docs":{},"为":{"docs":{},"参":{"docs":{},"数":{"docs":{},"添":{"docs":{},"加":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"长":{"docs":{},"度":{"docs":{},"不":{"docs":{},"能":{"docs":{},"超":{"docs":{},"过":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}},"中":{"docs":{},"被":{"docs":{},"调":{"docs":{},"用":{"docs":{},"(":{"docs":{},"或":{"docs":{},"程":{"docs":{},"序":{"docs":{},"生":{"docs":{},"命":{"docs":{},"周":{"docs":{},"期":{"docs":{},"中":{"docs":{},"的":{"docs":{},"其":{"docs":{},"他":{"docs":{},"地":{"docs":{},"方":{"docs":{},")":{"docs":{},",":{"docs":{},"或":{"docs":{},"作":{"docs":{},"为":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}},"调":{"docs":{},"用":{"docs":{},"o":{"docs":{},"s":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"i":{"docs":{},"t":{"docs":{},"或":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},".":{"docs":{},"f":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{},"*":{"docs":{},"且":{"docs":{},"只":{"docs":{},"调":{"docs":{},"用":{"docs":{},"一":{"docs":{},"次":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"多":{"docs":{},"个":{"docs":{},"错":{"docs":{},"误":{"docs":{},"场":{"docs":{},"景":{"docs":{},"停":{"docs":{},"止":{"docs":{},"程":{"docs":{},"序":{"docs":{},"执":{"docs":{},"行":{"docs":{},",":{"docs":{},"请":{"docs":{},"将":{"docs":{},"该":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"放":{"docs":{},"在":{"docs":{},"单":{"docs":{},"独":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"并":{"docs":{},"从":{"docs":{},"中":{"docs":{},"返":{"docs":{},"回":{"docs":{},"错":{"docs":{},"误":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"定":{"docs":{},"义":{"docs":{},"的":{"docs":{},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{},"切":{"docs":{},"片":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"到":{"docs":{},"了":{"docs":{},"堆":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"对":{"docs":{},"成":{"docs":{},"员":{"docs":{},"变":{"docs":{},"量":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}},"之":{"docs":{},"间":{"docs":{},"的":{"docs":{},"关":{"docs":{},"系":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"使":{"docs":{},"代":{"docs":{},"码":{"docs":{},"变":{"docs":{},"得":{"docs":{},"脆":{"docs":{},"弱":{"docs":{},"和":{"docs":{},"容":{"docs":{},"易":{"docs":{},"出":{"docs":{},"错":{"docs":{},";":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}},"本":{"docs":{},"身":{"docs":{},"的":{"docs":{},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},"。":{"docs":{},"特":{"docs":{},"别":{"docs":{},"是":{"docs":{},"打":{"docs":{},"算":{"docs":{},"给":{"docs":{},"其":{"docs":{},"他":{"docs":{},"程":{"docs":{},"序":{"docs":{},"使":{"docs":{},"用":{"docs":{},"的":{"docs":{},"库":{"docs":{},"应":{"docs":{},"该":{"docs":{},"特":{"docs":{},"别":{"docs":{},"注":{"docs":{},"意":{"docs":{},"代":{"docs":{},"码":{"docs":{},"行":{"docs":{},"为":{"docs":{},"的":{"docs":{},"完":{"docs":{},"全":{"docs":{},"确":{"docs":{},"定":{"docs":{},"性":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"顺":{"docs":{},"序":{"docs":{},"或":{"docs":{},"副":{"docs":{},"作":{"docs":{},"用":{"docs":{},"。":{"docs":{},"虽":{"docs":{},"然":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}},"参":{"docs":{},"数":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"这":{"docs":{},"样":{"docs":{},"看":{"docs":{},"起":{"docs":{},"来":{"docs":{},"更":{"docs":{},"容":{"docs":{},"易":{"docs":{},"和":{"docs":{},"申":{"docs":{},"明":{"docs":{},"区":{"docs":{},"分":{"docs":{},"开":{"docs":{},"来":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}},"信":{"docs":{},"息":{"docs":{},"描":{"docs":{},"述":{"docs":{},"\"":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}},"名":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}},"必":{"docs":{},"须":{"docs":{},"遵":{"docs":{},"循":{"docs":{},"驼":{"docs":{},"峰":{"docs":{},"式":{"docs":{},",":{"docs":{},"首":{"docs":{},"字":{"docs":{},"母":{"docs":{},"根":{"docs":{},"据":{"docs":{},"访":{"docs":{},"问":{"docs":{},"控":{"docs":{},"制":{"docs":{},"决":{"docs":{},"定":{"docs":{},"使":{"docs":{},"用":{"docs":{},"大":{"docs":{},"写":{"docs":{},"或":{"docs":{},"小":{"docs":{},"写":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"注":{"docs":{},"释":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"应":{"docs":{},"该":{"docs":{},"以":{"docs":{},"动":{"docs":{},"词":{"docs":{},"开":{"docs":{},"头":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"放":{"docs":{},"在":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}},"按":{"docs":{},"粗":{"docs":{},"略":{"docs":{},"的":{"docs":{},"调":{"docs":{},"用":{"docs":{},"顺":{"docs":{},"序":{"docs":{},"排":{"docs":{},"序":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}},"分":{"docs":{},"组":{"docs":{},"与":{"docs":{},"顺":{"docs":{},"序":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}},"进":{"docs":{},"行":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"释":{"docs":{},"放":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}},"才":{"docs":{},"会":{"docs":{},"被":{"docs":{},"执":{"docs":{},"行":{"docs":{},"。":{"docs":{},"这":{"docs":{},"带":{"docs":{},"来":{"docs":{},"的":{"docs":{},"后":{"docs":{},"果":{"docs":{},"就":{"docs":{},"是":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"迭":{"docs":{},"代":{"docs":{},"次":{"docs":{},"数":{"docs":{},"过":{"docs":{},"多":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"可":{"docs":{},"能":{"docs":{},"导":{"docs":{},"致":{"docs":{},"资":{"docs":{},"源":{"docs":{},"长":{"docs":{},"时":{"docs":{},"间":{"docs":{},"得":{"docs":{},"不":{"docs":{},"到":{"docs":{},"释":{"docs":{},"放":{"docs":{},",":{"docs":{},"造":{"docs":{},"成":{"docs":{},"泄":{"docs":{},"漏":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"直":{"docs":{},"接":{"docs":{},"注":{"docs":{},"入":{"docs":{},"到":{"docs":{},"使":{"docs":{},"用":{"docs":{},"方":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}}}},"为":{"docs":{},"例":{"docs":{},",":{"docs":{},"看":{"docs":{},"看":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}},"将":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"用":{"docs":{},"于":{"docs":{},"生":{"docs":{},"成":{"docs":{},"指":{"docs":{},"定":{"docs":{},"长":{"docs":{},"度":{"docs":{},"元":{"docs":{},"素":{"docs":{},"类":{"docs":{},"型":{"docs":{},"为":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}},"均":{"docs":{},"可":{"docs":{},"内":{"docs":{},"联":{"docs":{},"。":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"f":{"docs":{},"i":{"docs":{},"b":{"docs":{},"o":{"docs":{},"n":{"docs":{},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"i":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}},"创":{"docs":{},"建":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{},"对":{"docs":{},"象":{"docs":{},"池":{"docs":{},"中":{"docs":{},"没":{"docs":{},"有":{"docs":{},"对":{"docs":{},"象":{"docs":{},"时":{"docs":{},",":{"docs":{},"将":{"docs":{},"会":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}},"引":{"docs":{},"起":{"docs":{},"的":{"docs":{},",":{"docs":{},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}},"是":{"docs":{},"当":{"docs":{},"所":{"docs":{},"在":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"类":{"docs":{},"似":{"docs":{},",":{"docs":{},"但":{"docs":{},"有":{"docs":{},"区":{"docs":{},"别":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}},"前":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"先":{"docs":{},"获":{"docs":{},"得":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"成":{"docs":{},"员":{"docs":{},"锁":{"docs":{},",":{"docs":{},"原":{"docs":{},"因":{"docs":{},"是":{"docs":{},"需":{"docs":{},"要":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"地":{"docs":{},"变":{"docs":{},"更":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"等":{"docs":{},"待":{"docs":{},"队":{"docs":{},"列":{"docs":{},"。":{"docs":{},"在":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"最":{"docs":{},"后":{"docs":{},"暂":{"docs":{},"停":{"docs":{},"了":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635}},"信":{"docs":{},"息":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"结":{"docs":{},"构":{"docs":{},"指":{"docs":{},"针":{"docs":{},"变":{"docs":{},"量":{"docs":{},"使":{"docs":{},"用":{"docs":{},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"时":{"docs":{},",":{"docs":{},"请":{"docs":{},"使":{"docs":{},"用":{"docs":{},"&":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{},"代":{"docs":{},"替":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"(":{"docs":{},"t":{"docs":{},")":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"与":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"在":{"docs":{},"代":{"docs":{},"码":{"docs":{},"风":{"docs":{},"格":{"docs":{},"上":{"docs":{},"保":{"docs":{},"持":{"docs":{},"一":{"docs":{},"致":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"切":{"docs":{},"片":{"docs":{},"时":{"docs":{},"提":{"docs":{},"供":{"docs":{},"容":{"docs":{},"量":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"特":{"docs":{},"别":{"docs":{},"是":{"docs":{},"在":{"docs":{},"追":{"docs":{},"加":{"docs":{},"切":{"docs":{},"片":{"docs":{},"时":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"提":{"docs":{},"供":{"docs":{},"容":{"docs":{},"量":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}},"函":{"docs":{},"数":{"docs":{},"仅":{"docs":{},"执":{"docs":{},"行":{"docs":{},"了":{"docs":{},"一":{"docs":{},"次":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"了":{"docs":{},"多":{"docs":{},"次":{"docs":{},"重":{"docs":{},"复":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},",":{"docs":{},"在":{"docs":{},"并":{"docs":{},"发":{"docs":{},"环":{"docs":{},"境":{"docs":{},"下":{"docs":{},"很":{"docs":{},"有":{"docs":{},"用":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"参":{"docs":{},"考":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"文":{"docs":{},"献":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"参考文献.html":{"ref":"参考文献.html","tf":10}}}}}},"可":{"docs":{},"执":{"docs":{},"行":{"docs":{},"文":{"docs":{},"件":{"docs":{},"目":{"docs":{},"录":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"能":{"docs":{},"更":{"docs":{},"可":{"docs":{},"取":{"docs":{},"或":{"docs":{},"是":{"docs":{},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}},"会":{"docs":{},"被":{"docs":{},"多":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"并":{"docs":{},"发":{"docs":{},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"为":{"docs":{},"了":{"docs":{},"提":{"docs":{},"升":{"docs":{},"性":{"docs":{},"能":{"docs":{},"(":{"docs":{},"减":{"docs":{},"少":{"docs":{},"执":{"docs":{},"行":{"docs":{},"时":{"docs":{},"间":{"docs":{},"和":{"docs":{},"内":{"docs":{},"存":{"docs":{},"占":{"docs":{},"用":{"docs":{},")":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"显":{"docs":{},"示":{"docs":{},"使":{"docs":{},"用":{"docs":{},"空":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{},"(":{"docs":{},"下":{"docs":{},"划":{"docs":{},"线":{"docs":{},")":{"docs":{},"忽":{"docs":{},"略":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}},"变":{"docs":{},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},"在":{"docs":{},"使":{"docs":{},"用":{"docs":{},"时":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"被":{"docs":{},"其":{"docs":{},"他":{"docs":{},"地":{"docs":{},"方":{"docs":{},"修":{"docs":{},"改":{"docs":{},",":{"docs":{},"导":{"docs":{},"致":{"docs":{},"程":{"docs":{},"序":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"出":{"docs":{},"现":{"docs":{},"意":{"docs":{},"外":{"docs":{},"情":{"docs":{},"况":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"以":{"docs":{},"看":{"docs":{},"到":{"docs":{},",":{"docs":{},"反":{"docs":{},"射":{"docs":{},"涉":{"docs":{},"及":{"docs":{},"了":{"docs":{},"额":{"docs":{},"外":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"判":{"docs":{},"断":{"docs":{},"和":{"docs":{},"大":{"docs":{},"量":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},",":{"docs":{},"导":{"docs":{},"致":{"docs":{},"其":{"docs":{},"对":{"docs":{},"性":{"docs":{},"能":{"docs":{},"的":{"docs":{},"影":{"docs":{},"响":{"docs":{},"非":{"docs":{},"常":{"docs":{},"明":{"docs":{},"显":{"docs":{},"。":{"docs":{},"随":{"docs":{},"着":{"docs":{},"切":{"docs":{},"片":{"docs":{},"元":{"docs":{},"素":{"docs":{},"的":{"docs":{},"递":{"docs":{},"增":{"docs":{},",":{"docs":{},"每":{"docs":{},"一":{"docs":{},"次":{"docs":{},"判":{"docs":{},"断":{"docs":{},"元":{"docs":{},"素":{"docs":{},"是":{"docs":{},"否":{"docs":{},"在":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"距":{"docs":{},"很":{"docs":{},"大":{"docs":{},",":{"docs":{},"快":{"docs":{},"达":{"docs":{},"到":{"docs":{},"一":{"docs":{},"个":{"docs":{},"数":{"docs":{},"量":{"docs":{},"级":{"docs":{},"了":{"docs":{},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{},"在":{"docs":{},"不":{"docs":{},"影":{"docs":{},"响":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"读":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"行":{"docs":{},"内":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"地":{"docs":{},"使":{"docs":{},"用":{"docs":{},"运":{"docs":{},"算":{"docs":{},"符":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}},"d":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"3":{"docs":{},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"docs":{}}}}},"同":{"docs":{},"样":{"docs":{},"的":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"因":{"docs":{},"排":{"docs":{},"列":{"docs":{},"顺":{"docs":{},"序":{"docs":{},"不":{"docs":{},"同":{"docs":{},",":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"不":{"docs":{},"一":{"docs":{},"样":{"docs":{},"的":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"大":{"docs":{},"小":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"y":{"docs":{},"f":{"docs":{},"i":{"docs":{},"b":{"docs":{},"o":{"docs":{},"n":{"docs":{},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"i":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}},"通":{"docs":{},"过":{"docs":{},"对":{"docs":{},"分":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"分":{"docs":{},"片":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"减":{"docs":{},"少":{"docs":{},"了":{"docs":{},"锁":{"docs":{},"竞":{"docs":{},"争":{"docs":{},",":{"docs":{},"能":{"docs":{},"明":{"docs":{},"显":{"docs":{},"地":{"docs":{},"提":{"docs":{},"高":{"docs":{},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{},"可":{"docs":{},"以":{"docs":{},"预":{"docs":{},"见":{"docs":{},"的":{"docs":{},"是":{"docs":{},",":{"docs":{},"随":{"docs":{},"着":{"docs":{},"分":{"docs":{},"片":{"docs":{},"粒":{"docs":{},"度":{"docs":{},"地":{"docs":{},"变":{"docs":{},"小":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"距":{"docs":{},"会":{"docs":{},"越":{"docs":{},"来":{"docs":{},"越":{"docs":{},"大":{"docs":{},"。":{"docs":{},"当":{"docs":{},"然":{"docs":{},",":{"docs":{},"分":{"docs":{},"片":{"docs":{},"粒":{"docs":{},"度":{"docs":{},"不":{"docs":{},"是":{"docs":{},"越":{"docs":{},"小":{"docs":{},"越":{"docs":{},"好":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},"每":{"docs":{},"一":{"docs":{},"个":{"docs":{},"分":{"docs":{},"片":{"docs":{},"都":{"docs":{},"要":{"docs":{},"配":{"docs":{},"一":{"docs":{},"把":{"docs":{},"锁":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"会":{"docs":{},"带":{"docs":{},"来":{"docs":{},"很":{"docs":{},"多":{"docs":{},"额":{"docs":{},"外":{"docs":{},"的":{"docs":{},"不":{"docs":{},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{},"开":{"docs":{},"销":{"docs":{},"。":{"docs":{},"可":{"docs":{},"以":{"docs":{},"选":{"docs":{},"择":{"docs":{},"一":{"docs":{},"个":{"docs":{},"不":{"docs":{},"太":{"docs":{},"大":{"docs":{},"的":{"docs":{},"值":{"docs":{},",":{"docs":{},"在":{"docs":{},"性":{"docs":{},"能":{"docs":{},"和":{"docs":{},"花":{"docs":{},"销":{"docs":{},"上":{"docs":{},"寻":{"docs":{},"找":{"docs":{},"一":{"docs":{},"个":{"docs":{},"平":{"docs":{},"衡":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"出":{"docs":{},",":{"docs":{},"两":{"docs":{},"种":{"docs":{},"通":{"docs":{},"过":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}},"无":{"docs":{},"锁":{"docs":{},"版":{"docs":{},"本":{"docs":{},"比":{"docs":{},"有":{"docs":{},"锁":{"docs":{},"版":{"docs":{},"本":{"docs":{},"性":{"docs":{},"能":{"docs":{},"高":{"docs":{},"一":{"docs":{},"些":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}},"将":{"docs":{},"暂":{"docs":{},"时":{"docs":{},"不":{"docs":{},"用":{"docs":{},"的":{"docs":{},"对":{"docs":{},"象":{"docs":{},"缓":{"docs":{},"存":{"docs":{},"起":{"docs":{},"来":{"docs":{},",":{"docs":{},"待":{"docs":{},"下":{"docs":{},"次":{"docs":{},"需":{"docs":{},"要":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"直":{"docs":{},"接":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"不":{"docs":{},"用":{"docs":{},"再":{"docs":{},"次":{"docs":{},"经":{"docs":{},"过":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},",":{"docs":{},"复":{"docs":{},"用":{"docs":{},"对":{"docs":{},"象":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},",":{"docs":{},"减":{"docs":{},"轻":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"利":{"docs":{},"用":{"docs":{},"信":{"docs":{},"道":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"在":{"docs":{},"代":{"docs":{},"码":{"docs":{},"的":{"docs":{},"任":{"docs":{},"意":{"docs":{},"位":{"docs":{},"置":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"和":{"docs":{},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"可":{"docs":{},"以":{"docs":{},"延":{"docs":{},"迟":{"docs":{},"到":{"docs":{},"使":{"docs":{},"用":{"docs":{},"时":{"docs":{},"再":{"docs":{},"执":{"docs":{},"行":{"docs":{},",":{"docs":{},"并":{"docs":{},"发":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},"是":{"docs":{},"线":{"docs":{},"程":{"docs":{},"安":{"docs":{},"全":{"docs":{},"的":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"看":{"docs":{},"起":{"docs":{},"来":{"docs":{},"代":{"docs":{},"码":{"docs":{},"更":{"docs":{},"加":{"docs":{},"简":{"docs":{},"洁":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}},"用":{"docs":{},"来":{"docs":{},"唤":{"docs":{},"醒":{"docs":{},"一":{"docs":{},"个":{"docs":{},"或":{"docs":{},"所":{"docs":{},"有":{"docs":{},"因":{"docs":{},"等":{"docs":{},"待":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},"而":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}},"通":{"docs":{},"知":{"docs":{},"等":{"docs":{},"待":{"docs":{},"条":{"docs":{},"件":{"docs":{},"发":{"docs":{},"生":{"docs":{},"而":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}},"被":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"通":{"docs":{},"过":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"见":{"docs":{},"使":{"docs":{},"用":{"docs":{},"反":{"docs":{},"射":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}},",":{"docs":{},"函":{"docs":{},"数":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}},"读":{"docs":{},"多":{"docs":{},"写":{"docs":{},"少":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"并":{"docs":{},"发":{"docs":{},"性":{"docs":{},"能":{"docs":{},"会":{"docs":{},"更":{"docs":{},"优":{"docs":{},"。":{"docs":{},"可":{"docs":{},"以":{"docs":{},"预":{"docs":{},"见":{"docs":{},"的":{"docs":{},"是":{"docs":{},"如":{"docs":{},"果":{"docs":{},"写":{"docs":{},"占":{"docs":{},"比":{"docs":{},"更":{"docs":{},"低":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"带":{"docs":{},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},"效":{"docs":{},"果":{"docs":{},"会":{"docs":{},"更":{"docs":{},"优":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"次":{"docs":{},"协":{"docs":{},"程":{"docs":{},"的":{"docs":{},"切":{"docs":{},"换":{"docs":{},",":{"docs":{},"耗":{"docs":{},"时":{"docs":{},"大":{"docs":{},"概":{"docs":{},"在":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}},"含":{"docs":{},"有":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},"外":{"docs":{},"部":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"库":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"辅":{"docs":{},"助":{"docs":{},"工":{"docs":{},"具":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"包":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}},"存":{"docs":{},"放":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"储":{"docs":{},"类":{"docs":{},"型":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}},"导":{"docs":{},"入":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"的":{"docs":{},"包":{"docs":{},"按":{"docs":{},"照":{"docs":{},"先":{"docs":{},"后":{"docs":{},"顺":{"docs":{},"序":{"docs":{},"应":{"docs":{},"该":{"docs":{},"分":{"docs":{},"为":{"docs":{},"三":{"docs":{},"组":{"docs":{},":":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}},"出":{"docs":{},"与":{"docs":{},"非":{"docs":{},"导":{"docs":{},"出":{"docs":{},"接":{"docs":{},"口":{"docs":{},"均":{"docs":{},"需":{"docs":{},"要":{"docs":{},"有":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"和":{"docs":{},"方":{"docs":{},"法":{"docs":{},"(":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"或":{"docs":{},"接":{"docs":{},"口":{"docs":{},"下":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"称":{"docs":{},"为":{"docs":{},"方":{"docs":{},"法":{"docs":{},")":{"docs":{},"都":{"docs":{},"必":{"docs":{},"须":{"docs":{},"有":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}},"应":{"docs":{},"该":{"docs":{},"放":{"docs":{},"在":{"docs":{},"非":{"docs":{},"导":{"docs":{},"出":{"docs":{},"函":{"docs":{},"数":{"docs":{},"前":{"docs":{},"面":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}},"/":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"职":{"docs":{},"责":{"docs":{},"必":{"docs":{},"须":{"docs":{},"与":{"docs":{},"包":{"docs":{},"&":{"docs":{},"文":{"docs":{},"件":{"docs":{},"职":{"docs":{},"责":{"docs":{},"高":{"docs":{},"度":{"docs":{},"一":{"docs":{},"致":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}},"字":{"docs":{},"段":{"docs":{},"和":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}},"以":{"docs":{},"下":{"docs":{},"两":{"docs":{},"个":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"以":{"docs":{},"便":{"docs":{},"此":{"docs":{},"包":{"docs":{},"的":{"docs":{},"用":{"docs":{},"户":{"docs":{},"可":{"docs":{},"以":{"docs":{},"将":{"docs":{},"它":{"docs":{},"们":{"docs":{},"与":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"s":{"docs":{},".":{"docs":{},"i":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"常":{"docs":{},"量":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"致":{"docs":{},"整":{"docs":{},"个":{"docs":{},"进":{"docs":{},"程":{"docs":{},"退":{"docs":{},"出":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}},"将":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"你":{"docs":{},"的":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"云":{"docs":{},"(":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"更":{"docs":{},"加":{"docs":{},"人":{"docs":{},"性":{"docs":{},"化":{"docs":{},",":{"docs":{},"如":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"不":{"docs":{},"会":{"docs":{},"被":{"docs":{},"执":{"docs":{},"行":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}},"网":{"docs":{},"络":{"docs":{},"字":{"docs":{},"节":{"docs":{},"序":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}},"元":{"docs":{},"素":{"docs":{},"插":{"docs":{},"入":{"docs":{},"到":{"docs":{},"链":{"docs":{},"表":{"docs":{},"的":{"docs":{},"首":{"docs":{},"部":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}},"格":{"docs":{},"式":{"docs":{},"化":{"docs":{},"后":{"docs":{},"的":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"打":{"docs":{},"印":{"docs":{},"到":{"docs":{},"屏":{"docs":{},"幕":{"docs":{},",":{"docs":{},"即":{"docs":{},"标":{"docs":{},"准":{"docs":{},"输":{"docs":{},"出":{"docs":{},"。":{"docs":{},"在":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}},"应":{"docs":{},"用":{"docs":{},"程":{"docs":{},"序":{"docs":{},"和":{"docs":{},"公":{"docs":{},"共":{"docs":{},"库":{"docs":{},"的":{"docs":{},"示":{"docs":{},"例":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}},"特":{"docs":{},"定":{"docs":{},"组":{"docs":{},"件":{"docs":{},",":{"docs":{},"如":{"docs":{},"静":{"docs":{},"态":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}},"的":{"docs":{},"组":{"docs":{},"件":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"目":{"docs":{},"录":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}},"/":{"docs":{},"w":{"docs":{},"e":{"docs":{},"b":{"2":{"docs":{},".":{"5":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}}},"docs":{}}}}}}},"项":{"docs":{},"目":{"docs":{},"的":{"docs":{},"基":{"docs":{},"本":{"docs":{},"布":{"docs":{},"局":{"docs":{},",":{"docs":{},"是":{"docs":{},"社":{"docs":{},"区":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}},"服":{"docs":{},"务":{"docs":{},"建":{"docs":{},"议":{"docs":{},"有":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"必":{"docs":{},"须":{"docs":{},"要":{"docs":{},"有":{"docs":{},"接":{"docs":{},"口":{"docs":{},"测":{"docs":{},"试":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}},"该":{"docs":{},"做":{"docs":{},"到":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},"足":{"docs":{},"以":{"docs":{},"满":{"docs":{},"足":{"docs":{},"任":{"docs":{},"何":{"docs":{},"情":{"docs":{},"况":{"docs":{},"!":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517}}}}}}}}}}},"后":{"docs":{},"移":{"docs":{},"一":{"docs":{},"位":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}},"当":{"docs":{},"使":{"docs":{},"用":{"docs":{},"如":{"docs":{},"下":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},":":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"为":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517}}}},"或":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":1.6666666666666665},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"者":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"为":{"docs":{},"了":{"docs":{},"更":{"docs":{},"好":{"docs":{},"的":{"docs":{},"可":{"docs":{},"测":{"docs":{},"试":{"docs":{},"性":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}},"程":{"docs":{},"序":{"docs":{},"主":{"docs":{},"动":{"docs":{},"抛":{"docs":{},"出":{"docs":{},"的":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}},"无":{"docs":{},"缓":{"docs":{},"冲":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517}}}}},"是":{"docs":{},"无":{"docs":{},"缓":{"docs":{},"冲":{"docs":{},"的":{"docs":{},"。":{"docs":{},"默":{"docs":{},"认":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517}}}}}}}}}}}}}}}}}}}}},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"错":{"docs":{},"误":{"docs":{},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}},"空":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"只":{"docs":{},"能":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"可":{"docs":{},"以":{"docs":{},"等":{"docs":{},"待":{"docs":{},",":{"docs":{},"并":{"docs":{},"读":{"docs":{},"取":{"docs":{},"到":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"没":{"docs":{},"办":{"docs":{},"法":{"docs":{},"通":{"docs":{},"知":{"docs":{},"其":{"docs":{},"他":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},"也":{"docs":{},"读":{"docs":{},"取":{"docs":{},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"打":{"docs":{},"包":{"docs":{},"和":{"docs":{},"持":{"docs":{},"续":{"docs":{},"集":{"docs":{},"成":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"印":{"docs":{},"的":{"docs":{},"是":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}},"相":{"docs":{},"同":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}},"执":{"docs":{},"行":{"docs":{},"各":{"docs":{},"种":{"docs":{},"构":{"docs":{},"建":{"docs":{},"、":{"docs":{},"安":{"docs":{},"装":{"docs":{},"、":{"docs":{},"分":{"docs":{},"析":{"docs":{},"等":{"docs":{},"操":{"docs":{},"作":{"docs":{},"的":{"docs":{},"脚":{"docs":{},"本":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}},"基":{"docs":{},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}},"性":{"docs":{},"能":{"docs":{},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}},"当":{"docs":{},"前":{"docs":{},"包":{"docs":{},"下":{"docs":{},"的":{"docs":{},"所":{"docs":{},"有":{"docs":{},"基":{"docs":{},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},",":{"docs":{},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"_":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"w":{"docs":{},"a":{"docs":{},"i":{"docs":{},"t":{"docs":{},"会":{"docs":{},"挂":{"docs":{},"起":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"所":{"docs":{},"在":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"持":{"docs":{},"续":{"docs":{},"集":{"docs":{},"成":{"docs":{},"配":{"docs":{},"置":{"docs":{},"与":{"docs":{},"脚":{"docs":{},"本":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}},"整":{"docs":{},"体":{"docs":{},"风":{"docs":{},"格":{"2":{"docs":{},".":{"2":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}}},"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"有":{"docs":{},"些":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"语":{"docs":{},"言":{"docs":{},"自":{"docs":{},"身":{"docs":{},"提":{"docs":{},"供":{"docs":{},"了":{"docs":{},"目":{"docs":{},"录":{"docs":{},"结":{"docs":{},"构":{"docs":{},"规":{"docs":{},"范":{"docs":{},",":{"docs":{},"但":{"docs":{},"对":{"docs":{},"于":{"docs":{},"较":{"docs":{},"为":{"docs":{},"年":{"docs":{},"轻":{"docs":{},"的":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}},"时":{"docs":{},"后":{"docs":{},"我":{"docs":{},"们":{"docs":{},"需":{"docs":{},"要":{"docs":{},"根":{"docs":{},"据":{"docs":{},"多":{"docs":{},"个":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"候":{"docs":{},"你":{"docs":{},"会":{"docs":{},"看":{"docs":{},"到":{"docs":{},"某":{"docs":{},"个":{"docs":{},"类":{"docs":{},"里":{"docs":{},"有":{"docs":{},"很":{"docs":{},"多":{"docs":{},"基":{"docs":{},"本":{"docs":{},"类":{"docs":{},"型":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"你":{"docs":{},"隐":{"docs":{},"约":{"docs":{},"地":{"docs":{},"能":{"docs":{},"区":{"docs":{},"分":{"docs":{},"出":{"docs":{},"某":{"docs":{},"些":{"docs":{},"字":{"docs":{},"段":{"docs":{},"好":{"docs":{},"像":{"docs":{},"应":{"docs":{},"该":{"docs":{},"在":{"docs":{},"一":{"docs":{},"起":{"docs":{},",":{"docs":{},"如":{"docs":{},"手":{"docs":{},"机":{"docs":{},"号":{"docs":{},"和":{"docs":{},"带":{"docs":{},"区":{"docs":{},"号":{"docs":{},"的":{"docs":{},"电":{"docs":{},"话":{"docs":{},"号":{"docs":{},"码":{"docs":{},"、":{"docs":{},"描":{"docs":{},"述":{"docs":{},"某":{"docs":{},"个":{"docs":{},"日":{"docs":{},"期":{"docs":{},"范":{"docs":{},"围":{"docs":{},"的":{"docs":{},"开":{"docs":{},"始":{"docs":{},"日":{"docs":{},"期":{"docs":{},"和":{"docs":{},"结":{"docs":{},"束":{"docs":{},"日":{"docs":{},"期":{"docs":{},",":{"docs":{},"它":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"真":{"docs":{},"实":{"docs":{},"的":{"docs":{},"载":{"docs":{},"体":{"docs":{},",":{"docs":{},"如":{"docs":{},"联":{"docs":{},"系":{"docs":{},"方":{"docs":{},"式":{"docs":{},"类":{"docs":{},"和":{"docs":{},"时":{"docs":{},"间":{"docs":{},"范":{"docs":{},"围":{"docs":{},"类":{"docs":{},")":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"需":{"docs":{},"要":{"docs":{},"一":{"docs":{},"些":{"docs":{},"工":{"docs":{},"具":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},"从":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"单":{"docs":{},"向":{"docs":{},"链":{"docs":{},"表":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"的":{"docs":{},"简":{"docs":{},"单":{"docs":{},"实":{"docs":{},"现":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}},"并":{"docs":{},"发":{"docs":{},"写":{"docs":{},"入":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},"链":{"docs":{},"表":{"docs":{},"的":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"形":{"docs":{},"式":{"docs":{},"输":{"docs":{},"出":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"在":{"docs":{},"异":{"docs":{},"步":{"docs":{},"地":{"docs":{},"接":{"docs":{},"收":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"剩":{"docs":{},"下":{"docs":{},"的":{"docs":{},"多":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"必":{"docs":{},"须":{"docs":{},"等":{"docs":{},"待":{"docs":{},"这":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"接":{"docs":{},"收":{"docs":{},"完":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"才":{"docs":{},"能":{"docs":{},"读":{"docs":{},"取":{"docs":{},"到":{"docs":{},"正":{"docs":{},"确":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{},"在":{"docs":{},"这":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"单":{"docs":{},"纯":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"服":{"docs":{},"务":{"docs":{},"对":{"docs":{},"外":{"docs":{},"接":{"docs":{},"口":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"应":{"docs":{},"用":{"docs":{},"程":{"docs":{},"序":{"docs":{},"目":{"docs":{},"录":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}},"/":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"2":{"docs":{},".":{"4":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}}},"docs":{}}}}}}}}}}},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"请":{"docs":{},"求":{"docs":{},"天":{"docs":{},"然":{"docs":{},"是":{"docs":{},"并":{"docs":{},"发":{"docs":{},"的":{"docs":{},",":{"docs":{},"此":{"docs":{},"时":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}},"构":{"docs":{},"建":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}},"依":{"docs":{},"赖":{"docs":{},"包":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"造":{"docs":{},"函":{"docs":{},"数":{"docs":{},"应":{"docs":{},"该":{"docs":{},"放":{"docs":{},"在":{"docs":{},"其":{"docs":{},"他":{"docs":{},"函":{"docs":{},"数":{"docs":{},"之":{"docs":{},"前":{"docs":{},",":{"docs":{},"如":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"x":{"docs":{},"y":{"docs":{},"z":{"docs":{},"(":{"docs":{},")":{"docs":{},"/":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"x":{"docs":{},"y":{"docs":{},"z":{"docs":{},"(":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"格":{"docs":{},"式":{"docs":{},"的":{"docs":{},"说":{"docs":{},"明":{"docs":{},"文":{"docs":{},"档":{"docs":{},",":{"docs":{},"是":{"docs":{},"用":{"docs":{},"户":{"docs":{},"了":{"docs":{},"解":{"docs":{},"一":{"docs":{},"个":{"docs":{},"项":{"docs":{},"目":{"docs":{},"最":{"docs":{},"直":{"docs":{},"观":{"docs":{},"的":{"docs":{},"入":{"docs":{},"口":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"需":{"docs":{},"要":{"docs":{},",":{"docs":{},"添":{"docs":{},"加":{"docs":{},"不":{"docs":{},"同":{"docs":{},"语":{"docs":{},"言":{"docs":{},"的":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"化":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"中":{"docs":{},"多":{"docs":{},"个":{"docs":{},"占":{"docs":{},"位":{"docs":{},"符":{"docs":{},"之":{"docs":{},"间":{"docs":{},"要":{"docs":{},"有":{"docs":{},"空":{"docs":{},"格":{"docs":{},"。":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}}}},"为":{"docs":{},"/":{"docs":{},"/":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},":":{"docs":{},"\"":{"docs":{},"/":{"docs":{},"/":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}},"之":{"docs":{},"间":{"docs":{},"进":{"docs":{},"行":{"docs":{},"选":{"docs":{},"择":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}},"注":{"docs":{},"意":{"docs":{},",":{"1":{"docs":{},".":{"1":{"1":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}},"docs":{}}},"docs":{},"如":{"docs":{},"果":{"docs":{},"方":{"docs":{},"法":{"docs":{},"的":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"为":{"docs":{},"不":{"docs":{},"可":{"docs":{},"导":{"docs":{},"出":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"不":{"docs":{},"注":{"docs":{},"释":{"docs":{},",":{"docs":{},"但":{"docs":{},"需":{"docs":{},"要":{"docs":{},"质":{"docs":{},"疑":{"docs":{},"该":{"docs":{},"方":{"docs":{},"法":{"docs":{},"可":{"docs":{},"导":{"docs":{},"出":{"docs":{},"的":{"docs":{},"必":{"docs":{},"要":{"docs":{},"性":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"与":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},"多":{"docs":{},"次":{"docs":{},"运":{"docs":{},"行":{"docs":{},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"结":{"docs":{},"果":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"不":{"docs":{},"相":{"docs":{},"同":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"并":{"docs":{},"发":{"docs":{},"是":{"docs":{},"无":{"docs":{},"序":{"docs":{},"的":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"释":{"docs":{},"对":{"docs":{},"变":{"docs":{},"量":{"docs":{},"和":{"docs":{},"常":{"docs":{},"量":{"docs":{},"进":{"docs":{},"行":{"docs":{},"简":{"docs":{},"要":{"docs":{},"介":{"docs":{},"绍":{"docs":{},",":{"docs":{},"放":{"docs":{},"在":{"docs":{},"常":{"docs":{},"量":{"docs":{},"或":{"docs":{},"变":{"docs":{},"量":{"docs":{},"定":{"docs":{},"义":{"docs":{},"的":{"docs":{},"前":{"docs":{},"一":{"docs":{},"行":{"docs":{},"。":{"docs":{},"独":{"docs":{},"行":{"docs":{},"注":{"docs":{},"释":{"docs":{},"格":{"docs":{},"式":{"docs":{},"为":{"docs":{},":":{"docs":{},"\"":{"docs":{},"/":{"docs":{},"/":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"结":{"docs":{},"构":{"docs":{},"进":{"docs":{},"行":{"docs":{},"简":{"docs":{},"要":{"docs":{},"介":{"docs":{},"绍":{"docs":{},",":{"docs":{},"放":{"docs":{},"在":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"定":{"docs":{},"义":{"docs":{},"的":{"docs":{},"前":{"docs":{},"一":{"docs":{},"行":{"docs":{},"。":{"docs":{},"格":{"docs":{},"式":{"docs":{},"为":{"docs":{},":":{"docs":{},"\"":{"docs":{},"/":{"docs":{},"/":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"描":{"docs":{},"述":{"docs":{},"函":{"docs":{},"数":{"docs":{},"或":{"docs":{},"方":{"docs":{},"法":{"docs":{},"功":{"docs":{},"能":{"docs":{},"、":{"docs":{},"调":{"docs":{},"用":{"docs":{},"方":{"docs":{},"等":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{},"格":{"docs":{},"式":{"docs":{},"为":{"docs":{},":":{"docs":{},"\"":{"docs":{},"/":{"docs":{},"/":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}},"结":{"docs":{},"束":{"docs":{},"添":{"docs":{},"加":{"docs":{},"点":{"docs":{},"或":{"docs":{},"句":{"docs":{},"号":{"docs":{},",":{"docs":{},"参":{"docs":{},"考":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{},"源":{"docs":{},"码":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}},"入":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}},"测":{"docs":{},"试":{"docs":{},"相":{"docs":{},"关":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"用":{"docs":{},"例":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"名":{"docs":{},"称":{"docs":{},"必":{"docs":{},"须":{"docs":{},"以":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}},"生":{"docs":{},"成":{"docs":{},"的":{"docs":{},"文":{"docs":{},"档":{"docs":{},"之":{"docs":{},"外":{"docs":{},")":{"docs":{},"均":{"docs":{},"可":{"docs":{},"以":{"docs":{},"放":{"docs":{},"在":{"docs":{},"该":{"docs":{},"目":{"docs":{},"录":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}},"带":{"docs":{},"参":{"docs":{},"数":{"docs":{},"的":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}},"指":{"docs":{},"定":{"docs":{},"长":{"docs":{},"度":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},"的":{"docs":{},"随":{"docs":{},"机":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}},"切":{"docs":{},"片":{"docs":{},"函":{"docs":{},"数":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}},"社":{"docs":{},"区":{"docs":{},"的":{"docs":{},"人":{"docs":{},"并":{"docs":{},"不":{"docs":{},"推":{"docs":{},"荐":{"docs":{},"它":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}},"私":{"docs":{},"有":{"docs":{},"库":{"docs":{},"代":{"docs":{},"码":{"docs":{},"(":{"docs":{},"仅":{"docs":{},"本":{"docs":{},"项":{"docs":{},"目":{"docs":{},"使":{"docs":{},"用":{"docs":{},")":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}},"量":{"docs":{},"和":{"docs":{},"局":{"docs":{},"部":{"docs":{},"量":{"docs":{},"规":{"docs":{},"范":{"docs":{},"一":{"docs":{},"致":{"docs":{},",":{"docs":{},"均":{"docs":{},"以":{"docs":{},"小":{"docs":{},"写":{"docs":{},"字":{"docs":{},"母":{"docs":{},"开":{"docs":{},"头":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}},"简":{"docs":{},"体":{"docs":{},"中":{"docs":{},"文":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"单":{"docs":{},"明":{"docs":{},"了":{"docs":{},"的":{"docs":{},"包":{"docs":{},"命":{"docs":{},"名":{"docs":{},",":{"docs":{},"如":{"docs":{},":":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"、":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"、":{"docs":{},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}},"言":{"docs":{},"之":{"docs":{},":":{"docs":{},"合":{"docs":{},"理":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"可":{"docs":{},"以":{"docs":{},"提":{"docs":{},"高":{"docs":{},"内":{"docs":{},"存":{"docs":{},"读":{"docs":{},"写":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"便":{"docs":{},"于":{"docs":{},"实":{"docs":{},"现":{"docs":{},"变":{"docs":{},"量":{"docs":{},"操":{"docs":{},"作":{"docs":{},"的":{"docs":{},"原":{"docs":{},"子":{"docs":{},"性":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"而":{"docs":{},"言":{"docs":{},"之":{"docs":{},",":{"docs":{},"系":{"docs":{},"统":{"docs":{},"的":{"docs":{},"资":{"docs":{},"源":{"docs":{},"被":{"docs":{},"耗":{"docs":{},"尽":{"docs":{},"了":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}},"系":{"docs":{},"统":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"(":{"docs":{},"s":{"docs":{},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"d":{"docs":{},",":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}},"中":{"docs":{},",":{"docs":{},"标":{"docs":{},"准":{"docs":{},"输":{"docs":{},"出":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"视":{"docs":{},"为":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"内":{"docs":{},"核":{"docs":{},"(":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{},")":{"docs":{},"利":{"docs":{},"用":{"docs":{},"文":{"docs":{},"件":{"docs":{},"描":{"docs":{},"述":{"docs":{},"符":{"docs":{},"(":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"地":{"docs":{},"资":{"docs":{},"源":{"docs":{},"是":{"docs":{},"有":{"docs":{},"限":{"docs":{},",":{"docs":{},"协":{"docs":{},"程":{"docs":{},"是":{"docs":{},"有":{"docs":{},"代":{"docs":{},"价":{"docs":{},"的":{"docs":{},",":{"docs":{},"为":{"docs":{},"了":{"docs":{},"保":{"docs":{},"护":{"docs":{},"程":{"docs":{},"序":{"docs":{},",":{"docs":{},"提":{"docs":{},"高":{"docs":{},"性":{"docs":{},"能":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"主":{"docs":{},"动":{"docs":{},"限":{"docs":{},"制":{"docs":{},"并":{"docs":{},"发":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},"数":{"docs":{},"量":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"背":{"docs":{},"景":{"docs":{},"。":{"docs":{},"不":{"docs":{},"同":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"应":{"docs":{},"该":{"docs":{},"有":{"docs":{},"自":{"docs":{},"己":{"docs":{},"的":{"docs":{},"目":{"docs":{},"录":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"全":{"docs":{},"部":{"docs":{},"放":{"docs":{},"到":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}},"资":{"docs":{},"源":{"docs":{},"、":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"端":{"docs":{},"模":{"docs":{},"板":{"docs":{},"和":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}},"起":{"docs":{},",":{"docs":{},"从":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"层":{"docs":{},"面":{"docs":{},"限":{"docs":{},"制":{"docs":{},"该":{"docs":{},"目":{"docs":{},"录":{"docs":{},"不":{"docs":{},"可":{"docs":{},"被":{"docs":{},"导":{"docs":{},"出":{"docs":{},",":{"docs":{},"而":{"docs":{},"且":{"docs":{},"不":{"docs":{},"只":{"docs":{},"是":{"docs":{},"项":{"docs":{},"目":{"docs":{},"根":{"docs":{},"目":{"docs":{},"录":{"docs":{},"下":{"docs":{},"的":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"还":{"docs":{},"会":{"docs":{},"忽":{"docs":{},"略":{"docs":{},"以":{"docs":{},"“":{"docs":{},".":{"docs":{},"”":{"docs":{},"或":{"docs":{},"“":{"docs":{},"_":{"docs":{},"”":{"docs":{},"开":{"docs":{},"头":{"docs":{},"的":{"docs":{},"目":{"docs":{},"录":{"docs":{},"或":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"在":{"docs":{},"如":{"docs":{},"何":{"docs":{},"命":{"docs":{},"名":{"docs":{},"测":{"docs":{},"试":{"docs":{},"数":{"docs":{},"据":{"docs":{},"目":{"docs":{},"录":{"docs":{},"方":{"docs":{},"面":{"docs":{},"有":{"docs":{},"更":{"docs":{},"大":{"docs":{},"的":{"docs":{},"灵":{"docs":{},"活":{"docs":{},"性":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"启":{"docs":{},"用":{"docs":{},"了":{"docs":{},"模":{"docs":{},"块":{"docs":{},"代":{"docs":{},"理":{"docs":{},"功":{"docs":{},"能":{"docs":{},"(":{"docs":{},"默":{"docs":{},"认":{"docs":{},"使":{"docs":{},"用":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}},"是":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}},"提":{"docs":{},"供":{"docs":{},"了":{"docs":{},"很":{"docs":{},"多":{"docs":{},"好":{"docs":{},"用":{"docs":{},"的":{"docs":{},"工":{"docs":{},"具":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"我":{"docs":{},"们":{"docs":{},"进":{"docs":{},"行":{"docs":{},"代":{"docs":{},"码":{"docs":{},"的":{"docs":{},"规":{"docs":{},"范":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}},"以":{"docs":{},"上":{"docs":{},"面":{"docs":{},"给":{"docs":{},"出":{"docs":{},"的":{"docs":{},"同":{"docs":{},"步":{"docs":{},"示":{"docs":{},"例":{"docs":{},",":{"docs":{},"这":{"docs":{},"里":{"docs":{},"换":{"docs":{},"作":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}},"有":{"docs":{},"更":{"docs":{},"多":{"docs":{},",":{"docs":{},"具":{"docs":{},"体":{"docs":{},"可":{"docs":{},"参":{"docs":{},"考":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}},"这":{"docs":{},"些":{"docs":{},"脚":{"docs":{},"本":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"根":{"docs":{},"目":{"docs":{},"录":{"docs":{},"下":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}},"是":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"样":{"docs":{},"的":{"docs":{},"目":{"docs":{},"录":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"这":{"docs":{},"些":{"docs":{},"名":{"docs":{},"称":{"docs":{},"含":{"docs":{},"义":{"docs":{},"太":{"docs":{},"泛":{"docs":{},"了":{"docs":{},",":{"docs":{},"违":{"docs":{},"背":{"docs":{},"了":{"docs":{},"单":{"docs":{},"一":{"docs":{},"职":{"docs":{},"责":{"docs":{},"原":{"docs":{},"则":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{},",":{"docs":{},"不":{"docs":{},"知":{"docs":{},"道":{"docs":{},"其":{"docs":{},"是":{"docs":{},"顶":{"docs":{},"级":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{},"还":{"docs":{},"是":{"docs":{},"导":{"docs":{},"入":{"docs":{},"包":{"docs":{},"中":{"docs":{},"的":{"docs":{},"顶":{"docs":{},"级":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"就":{"docs":{},"不":{"docs":{},"会":{"docs":{},"出":{"docs":{},"现":{"docs":{},"诸":{"docs":{},"如":{"docs":{},"“":{"docs":{},"连":{"docs":{},"接":{"docs":{},"被":{"docs":{},"拒":{"docs":{},"绝":{"docs":{},"”":{"docs":{},"之":{"docs":{},"类":{"docs":{},"的":{"docs":{},"模":{"docs":{},"糊":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}},"里":{"docs":{},"放":{"docs":{},"不":{"docs":{},"希":{"docs":{},"望":{"docs":{},"被":{"docs":{},"其":{"docs":{},"他":{"docs":{},"应":{"docs":{},"用":{"docs":{},"程":{"docs":{},"序":{"docs":{},"或":{"docs":{},"者":{"docs":{},"库":{"docs":{},"导":{"docs":{},"入":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{},"注":{"docs":{},"意":{"docs":{},":":{"docs":{},"从":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}},"希":{"docs":{},"望":{"docs":{},"被":{"docs":{},"其":{"docs":{},"他":{"docs":{},"应":{"docs":{},"用":{"docs":{},"程":{"docs":{},"序":{"docs":{},"或":{"docs":{},"者":{"docs":{},"库":{"docs":{},"导":{"docs":{},"入":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"在":{"docs":{},"这":{"docs":{},"里":{"docs":{},"放":{"docs":{},"东":{"docs":{},"西":{"docs":{},"之":{"docs":{},"前":{"docs":{},"要":{"docs":{},"三":{"docs":{},"思":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"是":{"docs":{},"服":{"docs":{},"务":{"docs":{},"对":{"docs":{},"外":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"定":{"docs":{},"义":{"docs":{},"接":{"docs":{},"口":{"docs":{},"时":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"遵":{"docs":{},"循":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}},"我":{"docs":{},"们":{"docs":{},"修":{"docs":{},"改":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},"介":{"docs":{},"绍":{"docs":{},"的":{"docs":{},"是":{"docs":{},"后":{"docs":{},"台":{"docs":{},"微":{"docs":{},"服":{"docs":{},"务":{"docs":{},"开":{"docs":{},"发":{"docs":{},"经":{"docs":{},"常":{"docs":{},"遇":{"docs":{},"到":{"docs":{},"的":{"docs":{},"一":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"。":{"docs":{},"我":{"docs":{},"们":{"docs":{},"经":{"docs":{},"常":{"docs":{},"需":{"docs":{},"要":{"docs":{},"并":{"docs":{},"发":{"docs":{},"拉":{"docs":{},"取":{"docs":{},"多":{"docs":{},"方":{"docs":{},"面":{"docs":{},"的":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"汇":{"docs":{},"聚":{"docs":{},"到":{"docs":{},"一":{"docs":{},"个":{"docs":{},"变":{"docs":{},"量":{"docs":{},"上":{"docs":{},"。":{"docs":{},"那":{"docs":{},"么":{"docs":{},"此":{"docs":{},"时":{"docs":{},"就":{"docs":{},"存":{"docs":{},"在":{"docs":{},"对":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"变":{"docs":{},"量":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"写":{"docs":{},"入":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},"批":{"docs":{},"量":{"docs":{},"并":{"docs":{},"发":{"docs":{},"拉":{"docs":{},"取":{"docs":{},"用":{"docs":{},"户":{"docs":{},"信":{"docs":{},"息":{"docs":{},"写":{"docs":{},"入":{"docs":{},"到":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"分":{"docs":{},"别":{"docs":{},"对":{"docs":{},"长":{"docs":{},"度":{"docs":{},"为":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}},"利":{"docs":{},"用":{"docs":{},"对":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"需":{"docs":{},"要":{"docs":{},"注":{"docs":{},"意":{"docs":{},"的":{"docs":{},"是":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"每":{"docs":{},"次":{"docs":{},"读":{"docs":{},"写":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}},"个":{"docs":{},"错":{"docs":{},"误":{"docs":{},"没":{"docs":{},"有":{"docs":{},"被":{"docs":{},"导":{"docs":{},"出":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"我":{"docs":{},"们":{"docs":{},"不":{"docs":{},"想":{"docs":{},"让":{"docs":{},"它":{"docs":{},"成":{"docs":{},"为":{"docs":{},"公":{"docs":{},"共":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"我":{"docs":{},"们":{"docs":{},"公":{"docs":{},"共":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}},"被":{"docs":{},"导":{"docs":{},"出":{"docs":{},",":{"docs":{},"以":{"docs":{},"便":{"docs":{},"这":{"docs":{},"个":{"docs":{},"包":{"docs":{},"的":{"docs":{},"用":{"docs":{},"户":{"docs":{},"可":{"docs":{},"以":{"docs":{},"将":{"docs":{},"它":{"docs":{},"与":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}},"例":{"docs":{},"子":{"docs":{},"创":{"docs":{},"建":{"docs":{},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}},"实":{"docs":{},"现":{"docs":{},"了":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"就":{"docs":{},"需":{"docs":{},"要":{"docs":{},"有":{"docs":{},"个":{"docs":{},"全":{"docs":{},"局":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{},"来":{"docs":{},"标":{"docs":{},"志":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"数":{"docs":{},"据":{"docs":{},"是":{"docs":{},"否":{"docs":{},"接":{"docs":{},"受":{"docs":{},"完":{"docs":{},"毕":{"docs":{},",":{"docs":{},"剩":{"docs":{},"下":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},",":{"docs":{},"反":{"docs":{},"复":{"docs":{},"检":{"docs":{},"查":{"docs":{},"该":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"值":{"docs":{},",":{"docs":{},"直":{"docs":{},"到":{"docs":{},"满":{"docs":{},"足":{"docs":{},"要":{"docs":{},"求":{"docs":{},"。":{"docs":{},"或":{"docs":{},"者":{"docs":{},"创":{"docs":{},"建":{"docs":{},"多":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"类":{"docs":{},"意":{"docs":{},"义":{"docs":{},"太":{"docs":{},"宽":{"docs":{},"泛":{"docs":{},"的":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}},"易":{"docs":{},"混":{"docs":{},"淆":{"docs":{},"名":{"docs":{},"称":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"会":{"docs":{},"精":{"docs":{},"简":{"docs":{},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},"函":{"docs":{},"数":{"docs":{},",":{"docs":{},"并":{"docs":{},"将":{"docs":{},"所":{"docs":{},"有":{"docs":{},"关":{"docs":{},"键":{"docs":{},"业":{"docs":{},"务":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"放":{"docs":{},"入":{"docs":{},"一":{"docs":{},"个":{"docs":{},"单":{"docs":{},"独":{"docs":{},"的":{"docs":{},"、":{"docs":{},"可":{"docs":{},"测":{"docs":{},"试":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"中":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"将":{"docs":{},"保":{"docs":{},"留":{"docs":{},"原":{"docs":{},"始":{"docs":{},"错":{"docs":{},"误":{"docs":{},"类":{"docs":{},"型":{"docs":{},"和":{"docs":{},"消":{"docs":{},"息":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}},"非":{"docs":{},"常":{"docs":{},"适":{"docs":{},"合":{"docs":{},"底":{"docs":{},"层":{"docs":{},"错":{"docs":{},"误":{"docs":{},"消":{"docs":{},"息":{"docs":{},"有":{"docs":{},"足":{"docs":{},"够":{"docs":{},"的":{"docs":{},"信":{"docs":{},"息":{"docs":{},"来":{"docs":{},"追":{"docs":{},"踪":{"docs":{},"它":{"docs":{},"来":{"docs":{},"自":{"docs":{},"哪":{"docs":{},"里":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"种":{"docs":{},"方":{"docs":{},"法":{"docs":{},"最":{"docs":{},"容":{"docs":{},"易":{"docs":{},"理":{"docs":{},"解":{"docs":{},",":{"docs":{},"重":{"docs":{},"新":{"docs":{},"使":{"docs":{},"用":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}},"么":{"docs":{},"设":{"docs":{},"计":{"docs":{},"的":{"docs":{},"目":{"docs":{},"的":{"docs":{},",":{"docs":{},"是":{"docs":{},"减":{"docs":{},"少":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}},"行":{"docs":{},"代":{"docs":{},"码":{"docs":{},"去":{"docs":{},"掉":{"docs":{},"呢":{"docs":{},"?":{"docs":{},"那":{"docs":{},"程":{"docs":{},"序":{"docs":{},"很":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"因":{"docs":{},"为":{"docs":{},"内":{"docs":{},"存":{"docs":{},"不":{"docs":{},"足":{"docs":{},"而":{"docs":{},"崩":{"docs":{},"溃":{"docs":{},"。":{"docs":{},"这":{"docs":{},"一":{"docs":{},"点":{"docs":{},"更":{"docs":{},"好":{"docs":{},"理":{"docs":{},"解":{"docs":{},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"至":{"docs":{},"少":{"docs":{},"需":{"docs":{},"要":{"docs":{},"消":{"docs":{},"耗":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"通":{"docs":{},"常":{"docs":{},"只":{"docs":{},"包":{"docs":{},"含":{"docs":{},"一":{"docs":{},"个":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}},"可":{"docs":{},"以":{"docs":{},"简":{"docs":{},"写":{"docs":{},"为":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}},"用":{"docs":{},"来":{"docs":{},"保":{"docs":{},"护":{"docs":{},"共":{"docs":{},"享":{"docs":{},"的":{"docs":{},"临":{"docs":{},"界":{"docs":{},"资":{"docs":{},"源":{"docs":{},",":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}},"用":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"应":{"docs":{},"用":{"docs":{},"目":{"docs":{},"录":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"s":{"docs":{},"/":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"/":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},"s":{"docs":{},"/":{"docs":{},"b":{"docs":{},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{},"/":{"docs":{},"d":{"docs":{},"e":{"docs":{},"p":{"docs":{},"l":{"docs":{},"o":{"docs":{},"y":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"s":{"docs":{},"/":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"m":{"docs":{},"d":{"2":{"docs":{},".":{"6":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},"包":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"放":{"docs":{},"在":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}},"包":{"docs":{},"注":{"docs":{},"释":{"docs":{},"函":{"docs":{},"数":{"docs":{},"注":{"docs":{},"释":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"注":{"docs":{},"释":{"docs":{},"变":{"docs":{},"量":{"docs":{},"和":{"docs":{},"常":{"docs":{},"量":{"docs":{},"注":{"docs":{},"释":{"docs":{},"类":{"docs":{},"型":{"docs":{},"注":{"docs":{},"释":{"docs":{},"接":{"docs":{},"口":{"docs":{},"注":{"docs":{},"释":{"docs":{},"在":{"docs":{},"编":{"docs":{},"码":{"docs":{},"阶":{"docs":{},"段":{"docs":{},"同":{"docs":{},"步":{"docs":{},"写":{"docs":{},"好":{"docs":{},"类":{"docs":{},"型":{"docs":{},"、":{"docs":{},"变":{"docs":{},"量":{"docs":{},"、":{"docs":{},"函":{"docs":{},"数":{"docs":{},"、":{"docs":{},"包":{"docs":{},"注":{"docs":{},"释":{"docs":{},",":{"docs":{},"注":{"docs":{},"释":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"g":{"docs":{},"o":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"导":{"docs":{},"出":{"docs":{},"生":{"docs":{},"成":{"docs":{},"文":{"docs":{},"档":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"规":{"docs":{},"则":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"项":{"docs":{},"目":{"docs":{},"命":{"docs":{},"名":{"docs":{},"包":{"docs":{},"命":{"docs":{},"名":{"docs":{},"文":{"docs":{},"件":{"docs":{},"命":{"docs":{},"名":{"docs":{},"函":{"docs":{},"数":{"docs":{},"命":{"docs":{},"名":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"命":{"docs":{},"名":{"docs":{},"接":{"docs":{},"口":{"docs":{},"命":{"docs":{},"名":{"docs":{},"量":{"docs":{},"命":{"docs":{},"名":{"docs":{},"通":{"docs":{},"用":{"docs":{},"常":{"docs":{},"量":{"docs":{},"命":{"docs":{},"名":{"docs":{},"方":{"docs":{},"法":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"命":{"docs":{},"名":{"docs":{},"错":{"docs":{},"误":{"docs":{},"命":{"docs":{},"名":{"docs":{},"避":{"docs":{},"免":{"docs":{},"使":{"docs":{},"用":{"docs":{},"内":{"docs":{},"置":{"docs":{},"名":{"docs":{},"称":{"docs":{},"命":{"docs":{},"名":{"docs":{},"是":{"docs":{},"代":{"docs":{},"码":{"docs":{},"规":{"docs":{},"范":{"docs":{},"中":{"docs":{},"很":{"docs":{},"重":{"docs":{},"要":{"docs":{},"的":{"docs":{},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},",":{"docs":{},"统":{"docs":{},"一":{"docs":{},"的":{"docs":{},"命":{"docs":{},"名":{"docs":{},"规":{"docs":{},"范":{"docs":{},"有":{"docs":{},"利":{"docs":{},"于":{"docs":{},"提":{"docs":{},"高":{"docs":{},"代":{"docs":{},"码":{"docs":{},"的":{"docs":{},"可":{"docs":{},"读":{"docs":{},"性":{"docs":{},",":{"docs":{},"好":{"docs":{},"的":{"docs":{},"命":{"docs":{},"名":{"docs":{},"仅":{"docs":{},"仅":{"docs":{},"通":{"docs":{},"过":{"docs":{},"命":{"docs":{},"名":{"docs":{},"就":{"docs":{},"可":{"docs":{},"以":{"docs":{},"获":{"docs":{},"取":{"docs":{},"到":{"docs":{},"足":{"docs":{},"够":{"docs":{},"多":{"docs":{},"的":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"场":{"docs":{},"景":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"过":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}},"%":{"docs":{},"v":{"docs":{},"打":{"docs":{},"印":{"docs":{},"错":{"docs":{},"误":{"docs":{},"信":{"docs":{},"息":{"docs":{},"时":{"docs":{},"建":{"docs":{},"议":{"docs":{},"加":{"docs":{},"冒":{"docs":{},"号":{"docs":{},"。":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}},"其":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"隐":{"docs":{},"藏":{"docs":{},"基":{"docs":{},"础":{"docs":{},"类":{"docs":{},"型":{"docs":{},"为":{"docs":{},"这":{"docs":{},"些":{"docs":{},"操":{"docs":{},"作":{"docs":{},"增":{"docs":{},"加":{"docs":{},"了":{"docs":{},"类":{"docs":{},"型":{"docs":{},"安":{"docs":{},"全":{"docs":{},"性":{"docs":{},"。":{"docs":{},"此":{"docs":{},"外":{"docs":{},",":{"docs":{},"它":{"docs":{},"还":{"docs":{},"包":{"docs":{},"括":{"docs":{},"一":{"docs":{},"个":{"docs":{},"易":{"docs":{},"用":{"docs":{},"的":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"知":{"docs":{},"协":{"docs":{},"程":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":3.333333333333333}}}},"所":{"docs":{},"有":{"docs":{},"等":{"docs":{},"待":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"队":{"docs":{},"列":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"(":{"docs":{},"事":{"docs":{},"件":{"docs":{},"发":{"docs":{},"生":{"docs":{},")":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"通":{"docs":{},"知":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"等":{"docs":{},"待":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"或":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"部":{"docs":{},"署":{"docs":{},"的":{"docs":{},"应":{"docs":{},"用":{"docs":{},"程":{"docs":{},"序":{"docs":{},")":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"目":{"docs":{},"录":{"docs":{},"被":{"docs":{},"称":{"docs":{},"为":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}},"相":{"docs":{},"关":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"分":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"字":{"docs":{},"段":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}},"可":{"docs":{},"以":{"docs":{},"做":{"docs":{},"到":{"docs":{},"字":{"docs":{},"段":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}}},"配":{"docs":{},"置":{"docs":{},"信":{"docs":{},"息":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"文":{"docs":{},"件":{"docs":{},"的":{"docs":{},"命":{"docs":{},"令":{"docs":{},"行":{"docs":{},"参":{"docs":{},"数":{"docs":{},"名":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.014760147601476014}},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}},"读":{"docs":{},"取":{"docs":{},",":{"docs":{},"和":{"docs":{},"对":{"docs":{},"象":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"应":{"docs":{},"该":{"docs":{},"分":{"docs":{},"开":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"让":{"docs":{},"对":{"docs":{},"象":{"docs":{},"自":{"docs":{},"己":{"docs":{},"根":{"docs":{},"据":{"docs":{},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},",":{"docs":{},"保":{"docs":{},"证":{"docs":{},"构":{"docs":{},"造":{"docs":{},"函":{"docs":{},"数":{"docs":{},"足":{"docs":{},"够":{"docs":{},"简":{"docs":{},"单":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"钩":{"docs":{},"子":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"帮":{"docs":{},"忙":{"docs":{},"我":{"docs":{},"们":{"docs":{},"在":{"docs":{},"代":{"docs":{},"码":{"docs":{},"提":{"docs":{},"交":{"docs":{},"时":{"docs":{},"完":{"docs":{},"成":{"docs":{},"一":{"docs":{},"些":{"docs":{},"检":{"docs":{},"测":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"分":{"docs":{},"支":{"docs":{},"名":{"docs":{},"称":{"docs":{},"和":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"页":{"docs":{},"面":{"docs":{},",":{"docs":{},"则":{"docs":{},"在":{"docs":{},"这":{"docs":{},"里":{"docs":{},"放":{"docs":{},"置":{"docs":{},"项":{"docs":{},"目":{"docs":{},"网":{"docs":{},"站":{"docs":{},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}},")":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},"%":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"d":{"docs":{},",":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}},"s":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}},"v":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.1111111111111111},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.010101010101010102},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}},"\\":{"docs":{},"n":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}}},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.022988505747126436},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},")":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}},"q":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"w":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}},"\"":{"docs":{},",":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}},">":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.03508771929824561},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.006578947368421052},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"=":{"2":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}},"docs":{}}},"n":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.010687022900763359}},"u":{"docs":{},"m":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.013237063778580024},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.015945330296127564}},",":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.03508771929824561}}},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.011389521640091117}},"}":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}},"i":{"docs":{},"l":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.009626955475330927},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.029182879377431907},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.02800658978583196},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.011904761904761904},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.038461538461538464},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.020202020202020204},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},",":{"docs":{},"另":{"docs":{},"一":{"docs":{},"个":{"docs":{},"不":{"docs":{},"是":{"docs":{},")":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"在":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"(":{"docs":{},"例":{"docs":{},"如":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},")":{"docs":{},",":{"docs":{},"这":{"docs":{},"两":{"docs":{},"个":{"docs":{},"切":{"docs":{},"片":{"docs":{},"的":{"docs":{},"处":{"docs":{},"理":{"docs":{},"方":{"docs":{},"式":{"docs":{},"可":{"docs":{},"能":{"docs":{},"不":{"docs":{},"同":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"但":{"docs":{},"是":{"docs":{},"满":{"docs":{},"足":{"docs":{},"其":{"docs":{},"他":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"进":{"docs":{},"入":{"docs":{},"到":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}},";":{"docs":{},"对":{"docs":{},"于":{"docs":{},"结":{"docs":{},"构":{"docs":{},"类":{"docs":{},"型":{"docs":{},"是":{"docs":{},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"i":{"docs":{},"c":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},":":{"docs":{},"\\":{"docs":{},"\"":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"\\":{"docs":{},"\"":{"docs":{},"\"":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}}}}}}}}}},"e":{"docs":{},"w":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"(":{"docs":{},"t":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}}},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},")":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}}}}},"t":{"docs":{},"u":{"docs":{},"d":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}},"p":{"docs":{},"p":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"a":{"docs":{},"t":{"docs":{},"t":{"docs":{},"r":{"docs":{},"m":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"(":{"docs":{},"c":{"docs":{},"t":{"docs":{},"x":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"t":{"docs":{},"r":{"docs":{},"m":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}},"s":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}}}}}}},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}}}}}}},"d":{"docs":{},"a":{"docs":{},"y":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},":":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693}}},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}}}}}}},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}},"(":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"t":{"docs":{},"/":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},"\"":{"1":{"9":{"2":{"docs":{},".":{"0":{"docs":{},".":{"2":{"docs":{},".":{"0":{"docs":{},":":{"8":{"0":{"0":{"0":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{},":":{"8":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}},"docs":{}}},"docs":{},":":{"8":{"0":{"0":{"0":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"t":{"docs":{},"t":{"docs":{},".":{"docs":{},"g":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"c":{"docs":{},"u":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"x":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}}},":":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"l":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}}},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}},"e":{"docs":{},":":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"y":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},".":{"docs":{},"w":{"docs":{},"a":{"docs":{},"i":{"docs":{},"t":{"docs":{},"、":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"这":{"docs":{},"个":{"docs":{},"队":{"docs":{},"列":{"docs":{},"被":{"docs":{},"复":{"docs":{},"制":{"docs":{},"的":{"docs":{},"话":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"就":{"docs":{},"在":{"docs":{},"并":{"docs":{},"发":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},"导":{"docs":{},"致":{"docs":{},"不":{"docs":{},"同":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}},"w":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.03125}},")":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}},":":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}},"d":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}},"c":{"docs":{},"o":{"docs":{},"p":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}}},"s":{"docs":{},"/":{"docs":{},"o":{"docs":{},"p":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.03125},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.050314465408805034},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.02821316614420063},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.04332129963898917},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.018223234624145785},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.00916030534351145},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}},"t":{"docs":{},"o":{"docs":{},"h":{"docs":{},"l":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}}},"b":{"docs":{},"i":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"a":{"docs":{},"r":{"docs":{},"y":{"docs":{},"(":{"docs":{},"b":{"docs":{},"i":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}},"\"":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"禁":{"docs":{},"用":{"docs":{},"了":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"对":{"docs":{},"切":{"docs":{},"片":{"docs":{},"遍":{"docs":{},"历":{"docs":{},"的":{"docs":{},"优":{"docs":{},"化":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"没":{"docs":{},"有":{"docs":{},"该":{"docs":{},"选":{"docs":{},"项":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"上":{"docs":{},"面":{"docs":{},"三":{"docs":{},"种":{"docs":{},"遍":{"docs":{},"历":{"docs":{},"方":{"docs":{},"式":{"docs":{},"没":{"docs":{},"有":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"别":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}},"主":{"docs":{},"体":{"docs":{},"风":{"docs":{},"格":{"docs":{},"占":{"docs":{},"位":{"docs":{},"符":{"docs":{},"主":{"docs":{},"体":{"docs":{},"风":{"docs":{},"格":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}}}}},"要":{"docs":{},"原":{"docs":{},"因":{"docs":{},"是":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"调":{"docs":{},"对":{"docs":{},"条":{"docs":{},"件":{"docs":{},"的":{"docs":{},"检":{"docs":{},"查":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}},"占":{"docs":{},"位":{"docs":{},"符":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}},"据":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"空":{"docs":{},"间":{"docs":{},"大":{"docs":{},"小":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}},"空":{"docs":{},"间":{"docs":{},"一":{"docs":{},"致":{"docs":{},",":{"docs":{},"而":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}},"用":{"docs":{},"了":{"docs":{},",":{"docs":{},"其":{"docs":{},"他":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},",":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"在":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}},"保":{"docs":{},"存":{"docs":{},"代":{"docs":{},"码":{"docs":{},"时":{"docs":{},"可":{"docs":{},"设":{"docs":{},"置":{"docs":{},"自":{"docs":{},"动":{"docs":{},"执":{"docs":{},"行":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}}}}}}},"这":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"测":{"docs":{},"试":{"docs":{},"文":{"docs":{},"件":{"docs":{},"不":{"docs":{},"能":{"docs":{},"在":{"docs":{},"包":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}},"写":{"docs":{},"入":{"docs":{},"时":{"docs":{},"会":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}},"业":{"docs":{},"务":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"处":{"docs":{},"理":{"docs":{},"中":{"docs":{},"禁":{"docs":{},"止":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{},"预":{"docs":{},"先":{"docs":{},"分":{"docs":{},"配":{"docs":{},"的":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{},"时":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"不":{"docs":{},"会":{"docs":{},"报":{"docs":{},"告":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"诸":{"docs":{},"如":{"docs":{},"g":{"docs":{},"o":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"视":{"docs":{},"觉":{"docs":{},"上":{"docs":{},"是":{"docs":{},"相":{"docs":{},"似":{"docs":{},"的":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}}}}}}}},"编":{"docs":{},"译":{"docs":{},"时":{"docs":{},"验":{"docs":{},"证":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"合":{"docs":{},"理":{"docs":{},"性":{"docs":{},",":{"docs":{},"这":{"docs":{},"包":{"docs":{},"括":{"docs":{},":":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}},"接":{"docs":{},"收":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"返":{"docs":{},"回":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"高":{"docs":{},"负":{"docs":{},"载":{"docs":{},"下":{"docs":{},"被":{"docs":{},"填":{"docs":{},"满":{"docs":{},"并":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"写":{"docs":{},"入":{"docs":{},"者":{"docs":{},",":{"docs":{},"以":{"docs":{},"及":{"docs":{},"当":{"docs":{},"这":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"发":{"docs":{},"生":{"docs":{},"时":{"docs":{},"系":{"docs":{},"统":{"docs":{},"会":{"docs":{},"发":{"docs":{},"生":{"docs":{},"哪":{"docs":{},"些":{"docs":{},"变":{"docs":{},"化":{"docs":{},"。":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"为":{"docs":{},"返":{"docs":{},"回":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},"添":{"docs":{},"加":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"时":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"避":{"docs":{},"免":{"docs":{},"使":{"docs":{},"用":{"docs":{},"\"":{"docs":{},"f":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}},"调":{"docs":{},"用":{"docs":{},"失":{"docs":{},"败":{"docs":{},"时":{"docs":{},"传":{"docs":{},"播":{"docs":{},"错":{"docs":{},"误":{"docs":{},"有":{"docs":{},"三":{"docs":{},"个":{"docs":{},"主":{"docs":{},"要":{"docs":{},"方":{"docs":{},"式":{"docs":{},":":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}},"处":{"docs":{},"理":{"docs":{},"时":{"docs":{},"间":{"docs":{},"的":{"docs":{},"瞬":{"docs":{},"间":{"docs":{},"时":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"在":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308}}}}}}}}}}}}},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"有":{"docs":{},"更":{"docs":{},"多":{"docs":{},"分":{"docs":{},"配":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}},"迭":{"docs":{},"代":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},"返":{"docs":{},"回":{"docs":{},"的":{"docs":{},"是":{"docs":{},"元":{"docs":{},"素":{"docs":{},"的":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},",":{"docs":{},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"x":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}},"部":{"docs":{},"分":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},",":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"只":{"docs":{},"包":{"docs":{},"含":{"docs":{},"方":{"docs":{},"法":{"docs":{},",":{"docs":{},"不":{"docs":{},"包":{"docs":{},"含":{"docs":{},"任":{"docs":{},"何":{"docs":{},"的":{"docs":{},"字":{"docs":{},"段":{"docs":{},"。":{"docs":{},"例":{"docs":{},"如":{"docs":{},"上":{"docs":{},"面":{"docs":{},"例":{"docs":{},"子":{"docs":{},"中":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"多":{"docs":{},"数":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}},"热":{"docs":{},"路":{"docs":{},"径":{"docs":{},"中":{"docs":{},",":{"docs":{},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"占":{"docs":{},"位":{"docs":{},"符":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"输":{"docs":{},"入":{"docs":{},"数":{"docs":{},"据":{"docs":{},"来":{"docs":{},"自":{"docs":{},"外":{"docs":{},"部":{"docs":{},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"使":{"docs":{},"用":{"docs":{},"%":{"docs":{},"q":{"docs":{},"进":{"docs":{},"行":{"docs":{},"安":{"docs":{},"全":{"docs":{},"转":{"docs":{},"义":{"docs":{},"。":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}},"拼":{"docs":{},"接":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}},"还":{"docs":{},"有":{"docs":{},"其":{"docs":{},"他":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},".":{"docs":{},"j":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},"、":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"、":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"和":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"[":{"docs":{},"]":{"docs":{},",":{"docs":{},"这":{"docs":{},"几":{"docs":{},"种":{"docs":{},"不":{"docs":{},"适":{"docs":{},"合":{"docs":{},"行":{"docs":{},"内":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{},"当":{"docs":{},"待":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"数":{"docs":{},"量":{"docs":{},"较":{"docs":{},"多":{"docs":{},"时":{"docs":{},"可":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"搜":{"docs":{},"索":{"docs":{},"存":{"docs":{},"在":{"docs":{},"二":{"docs":{},"义":{"docs":{},"性":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},",":{"docs":{},"并":{"docs":{},"通":{"docs":{},"过":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}},";":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"节":{"docs":{},"数":{"docs":{},"组":{"docs":{},"读":{"docs":{},"取":{"docs":{},"接":{"docs":{},"口":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"。":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.027586206896551724}}},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"的":{"docs":{},"空":{"docs":{},"间":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}},",":{"docs":{},"与":{"docs":{},"字":{"docs":{},"段":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"即":{"docs":{},"额":{"docs":{},"外":{"docs":{},"填":{"docs":{},"充":{"docs":{},"了":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}},"那":{"docs":{},"么":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"缓":{"docs":{},"冲":{"docs":{},"器":{"docs":{},"为":{"docs":{},"例":{"docs":{},",":{"docs":{},"利":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}},"工":{"docs":{},"具":{"docs":{},"格":{"docs":{},"式":{"docs":{},"化":{"docs":{},"。":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}},"生":{"docs":{},"成":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}},"自":{"docs":{},"动":{"docs":{},"格":{"docs":{},"式":{"docs":{},"化":{"docs":{},"引":{"docs":{},"入":{"docs":{},"的":{"docs":{},"包":{"docs":{},"名":{"docs":{},",":{"docs":{},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}},"生":{"docs":{},"成":{"docs":{},"文":{"docs":{},"件":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"可":{"docs":{},"以":{"docs":{},"帮":{"docs":{},"我":{"docs":{},"们":{"docs":{},"静":{"docs":{},"态":{"docs":{},"分":{"docs":{},"析":{"docs":{},"我":{"docs":{},"们":{"docs":{},"的":{"docs":{},"源":{"docs":{},"码":{"docs":{},"存":{"docs":{},"在":{"docs":{},"的":{"docs":{},"各":{"docs":{},"种":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{},"多":{"docs":{},"余":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"提":{"docs":{},"前":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"并":{"docs":{},"指":{"docs":{},"定":{"docs":{},"作":{"docs":{},"用":{"docs":{},"范":{"docs":{},"围":{"docs":{},"。":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}},"且":{"docs":{},"标":{"docs":{},"明":{"docs":{},"后":{"docs":{},"续":{"docs":{},"处":{"docs":{},"理":{"docs":{},"建":{"docs":{},"议":{"docs":{},"(":{"docs":{},"如":{"docs":{},"删":{"docs":{},"除":{"docs":{},"计":{"docs":{},"划":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}},"没":{"docs":{},"有":{"docs":{},"关":{"docs":{},"键":{"docs":{},"字":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}},"提":{"docs":{},"供":{"docs":{},"删":{"docs":{},"除":{"docs":{},"切":{"docs":{},"片":{"docs":{},"元":{"docs":{},"素":{"docs":{},"专":{"docs":{},"用":{"docs":{},"的":{"docs":{},"语":{"docs":{},"法":{"docs":{},"或":{"docs":{},"函":{"docs":{},"数":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"切":{"docs":{},"片":{"docs":{},"本":{"docs":{},"身":{"docs":{},"的":{"docs":{},"特":{"docs":{},"性":{"docs":{},"来":{"docs":{},"删":{"docs":{},"除":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"发":{"docs":{},"写":{"docs":{},"入":{"docs":{},"有":{"docs":{},"锁":{"docs":{},"链":{"docs":{},"表":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}},"不":{"docs":{},"是":{"docs":{},"必":{"docs":{},"须":{"docs":{},"的":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},",":{"docs":{},"这":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"出":{"docs":{},"现":{"docs":{},"有":{"docs":{},"些":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}},"!":{"docs":{},"=":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.018518518518518517},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.019455252918287938},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.026359143327841845},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.008503401360544218},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.03076923076923077},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.020202020202020204},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}},"o":{"docs":{},"k":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},"i":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}}}}}}}}},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}}},"+":{"0":{"docs":{},"x":{"1":{"1":{"docs":{},"b":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"4":{"8":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"docs":{}},"6":{"5":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"7":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"5":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"8":{"docs":{},"f":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}}},"1":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.034482758620689655},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259}},"=":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335}}}},".":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},".":{"docs":{},".":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.018050541516245487},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.026359143327841845},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.017006802721088437},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.049019607843137254},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.010869565217391304},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.011834319526627219},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},".":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"6":{"4":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"docs":{}},"docs":{}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}}}}}}}}}}}}},"形":{"docs":{},"式":{"docs":{},"导":{"docs":{},"入":{"docs":{},"包":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"它":{"docs":{},"使":{"docs":{},"程":{"docs":{},"序":{"docs":{},"难":{"docs":{},"以":{"docs":{},"阅":{"docs":{},"读":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}},"/":{"docs":{},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},":":{"5":{"docs":{},":":{"1":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893}}}},"docs":{}},"docs":{}}},"9":{"docs":{},":":{"1":{"2":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}}},"docs":{}}}}}}}}}}},":":{"docs":{},"=":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.013888888888888888},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.06896551724137931},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.03730445246690734},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.021400778210116732},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.008223684210526315},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.04612850082372323},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.034013605442176874},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.016304347826086956},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.04411764705882353},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.03076923076923077},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.05555555555555555},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.020202020202020204},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.03125},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.040100250626566414},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.04697986577181208},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.03773584905660377},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.02821316614420063},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.036101083032490974},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.025056947608200455},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.010256410256410256},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0366412213740458},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.02050113895216401},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}},"[":{"1":{"0":{"2":{"4":{"docs":{},"]":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"每":{"docs":{},"次":{"docs":{},"遍":{"docs":{},"历":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}},"docs":{}},"docs":{}},"docs":{}},"4":{"docs":{},"]":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"docs":{},"]":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"t":{"6":{"4":{"docs":{},"{":{"1":{"docs":{},".":{"0":{"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"{":{"docs":{},"\"":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},"\"":{"docs":{},",":{"docs":{},"\"":{"docs":{},"j":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"y":{"docs":{},"\"":{"docs":{},",":{"docs":{},"\"":{"docs":{},"s":{"docs":{},"p":{"docs":{},"i":{"docs":{},"k":{"docs":{},"e":{"docs":{},"\"":{"docs":{},"}":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.01567398119122257}},"{":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.021660649819494584}},"{":{"1":{"docs":{},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}},"docs":{},"}":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635}}}},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"{":{"docs":{},"}":{"docs":{},"{":{"docs":{},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"6":{"4":{"docs":{},"(":{"1":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"docs":{}}},"docs":{}},"docs":{}}}}}}}}}}}}}},"。":{"docs":{},"但":{"docs":{},"如":{"docs":{},"果":{"docs":{},"迭":{"docs":{},"代":{"docs":{},"的":{"docs":{},"元":{"docs":{},"素":{"docs":{},"较":{"docs":{},"大":{"docs":{},",":{"docs":{},"如":{"docs":{},"一":{"docs":{},"个":{"docs":{},"包":{"docs":{},"含":{"docs":{},"很":{"docs":{},"多":{"docs":{},"属":{"docs":{},"性":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.01444043321299639}}}}},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},",":{"docs":{},"都":{"docs":{},"会":{"docs":{},"进":{"docs":{},"行":{"docs":{},"一":{"docs":{},"次":{"docs":{},"值":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"带":{"docs":{},"来":{"docs":{},"了":{"docs":{},"性":{"docs":{},"能":{"docs":{},"损":{"docs":{},"耗":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}}}}}}},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},")":{"docs":{},"{":{"docs":{},"}":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"6":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"{":{"1":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"docs":{}}},"docs":{}},"docs":{}}}}},"*":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028}}}}}}}},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"n":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"]":{"docs":{},":":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"y":{"docs":{},"l":{"docs":{},"e":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"c":{"docs":{},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},"]":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893}}}}}}}}}}}}}}},"{":{"0":{"docs":{},"x":{"docs":{},"c":{"1":{"2":{"docs":{},"c":{"docs":{},"a":{"docs":{},"d":{"docs":{},"f":{"6":{"9":{"0":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}},"docs":{}},"docs":{}},"docs":{}}}}},"e":{"docs":{},"a":{"6":{"2":{"docs":{},"f":{"9":{"0":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}},"docs":{}},"docs":{}}}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.037037037037037035},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.03489771359807461},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.054474708171206226},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.029605263157894735},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.09060955518945635},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.061224489795918366},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.03680981595092025},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.04938271604938271},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.058823529411764705},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.02717391304347826},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.029411764705882353},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.06923076923076923},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.049586776859504134},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.05387205387205387},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.03153153153153153},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0784313725490196},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0703125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.0650887573964497},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.02506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.01567398119122257},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.04332129963898917},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.04678362573099415},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.020689655172413793},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.022779043280182234},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.02564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.03969465648854962},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.01366742596810934},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.026607538802660754},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.023090586145648313}},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"g":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"s":{"docs":{},"u":{"docs":{},"b":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}},".":{"docs":{},".":{"docs":{},".":{"docs":{},"}":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.006802721088435374}}}}}},"\"":{"docs":{},"a":{"docs":{},"\"":{"docs":{},"}":{"docs":{},"}":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"\"":{"docs":{},":":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}},"m":{"docs":{},"i":{"docs":{},"l":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"\"":{"docs":{},":":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}},"}":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}},"h":{"docs":{},"e":{"docs":{},"a":{"docs":{},"p":{"docs":{},"}":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}},"}":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.037037037037037035},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0457280385078219},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.04669260700389105},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.03125},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.09060955518945635},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.06292517006802721},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.012269938650306749},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.04938271604938271},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.058823529411764705},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.02717391304347826},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.029411764705882353},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.06153846153846154},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.06611570247933884},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.05387205387205387},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.02702702702702703},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0784313725490196},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0703125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.0650887573964497},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.015037593984962405},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.032490974729241874},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.04093567251461988},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.020689655172413793},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.00683371298405467},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.020512820512820513},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.035114503816793895},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.024390243902439025},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.017761989342806393}},"{":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.007782101167315175},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693}}}},"一":{"docs":{},"行":{"docs":{},"代":{"docs":{},"码":{"docs":{},"不":{"docs":{},"要":{"docs":{},"超":{"docs":{},"过":{"1":{"2":{"0":{"docs":{},"列":{"docs":{},",":{"docs":{},"超":{"docs":{},"过":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"合":{"docs":{},"理":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"换":{"docs":{},"行":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}}}}}}}},"份":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}},"个":{"docs":{},"可":{"docs":{},"能":{"docs":{},"引":{"docs":{},"发":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},"就":{"docs":{},"是":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}},"函":{"docs":{},"数":{"docs":{},"内":{"docs":{},"不":{"docs":{},"应":{"docs":{},"该":{"docs":{},"混":{"docs":{},"杂":{"docs":{},"多":{"docs":{},"个":{"docs":{},"实":{"docs":{},"现":{"docs":{},"细":{"docs":{},"节":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"将":{"docs":{},"独":{"docs":{},"立":{"docs":{},"的":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"封":{"docs":{},"装":{"docs":{},"成":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"只":{"docs":{},"负":{"docs":{},"责":{"docs":{},"一":{"docs":{},"个":{"docs":{},"职":{"docs":{},"责":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}},"文":{"docs":{},"件":{"docs":{},"中":{"docs":{},"出":{"docs":{},"现":{"docs":{},"多":{"docs":{},"个":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"时":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"注":{"docs":{},"意":{"docs":{},"观":{"docs":{},"察":{"docs":{},"是":{"docs":{},"否":{"docs":{},"有":{"docs":{},"重":{"docs":{},"复":{"docs":{},"的":{"docs":{},"成":{"docs":{},"员":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"中":{"docs":{},",":{"docs":{},"成":{"docs":{},"员":{"docs":{},"较":{"docs":{},"多":{"docs":{},",":{"docs":{},"且":{"docs":{},"多":{"docs":{},"个":{"docs":{},"成":{"docs":{},"员":{"docs":{},"有":{"docs":{},"明":{"docs":{},"显":{"docs":{},"关":{"docs":{},"联":{"docs":{},"关":{"docs":{},"系":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"封":{"docs":{},"装":{"docs":{},"新":{"docs":{},"的":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"起":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"旦":{"docs":{},"有":{"docs":{},"错":{"docs":{},"误":{"docs":{},"发":{"docs":{},"生":{"docs":{},",":{"docs":{},"马":{"docs":{},"上":{"docs":{},"返":{"docs":{},"回":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}},"次":{"docs":{},"循":{"docs":{},"环":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"只":{"docs":{},"做":{"docs":{},"一":{"docs":{},"件":{"docs":{},"事":{"docs":{},",":{"docs":{},"不":{"docs":{},"用":{"docs":{},"担":{"docs":{},"心":{"docs":{},"多":{"docs":{},"次":{"docs":{},"循":{"docs":{},"环":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}},"种":{"docs":{},"是":{"docs":{},"不":{"docs":{},"含":{"docs":{},"任":{"docs":{},"何":{"docs":{},"方":{"docs":{},"法":{"docs":{},"的":{"docs":{},"空":{"docs":{},"接":{"docs":{},"口":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},":":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}}}}}}}},"带":{"docs":{},"有":{"docs":{},"一":{"docs":{},"组":{"docs":{},"方":{"docs":{},"法":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"i":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},":":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}}}}}}}}},"分":{"docs":{},"钟":{"docs":{},"有":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"周":{"docs":{},"有":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}},"天":{"docs":{},"有":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}},"小":{"docs":{},"时":{"docs":{},"有":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"年":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"般":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"对":{"docs":{},"于":{"docs":{},"需":{"docs":{},"要":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"或":{"docs":{},"占":{"docs":{},"用":{"docs":{},"内":{"docs":{},"存":{"docs":{},"比":{"docs":{},"较":{"docs":{},"大":{"docs":{},"的":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"返":{"docs":{},"回":{"docs":{},"指":{"docs":{},"针":{"docs":{},"。":{"docs":{},"对":{"docs":{},"于":{"docs":{},"只":{"docs":{},"读":{"docs":{},"或":{"docs":{},"占":{"docs":{},"用":{"docs":{},"内":{"docs":{},"存":{"docs":{},"较":{"docs":{},"小":{"docs":{},"的":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"能":{"docs":{},"够":{"docs":{},"获":{"docs":{},"得":{"docs":{},"更":{"docs":{},"好":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"来":{"docs":{},"说":{"docs":{},",":{"docs":{},"有":{"docs":{},"如":{"docs":{},"下":{"docs":{},"几":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}},"句":{"docs":{},"话":{"docs":{},"总":{"docs":{},"结":{"docs":{},":":{"docs":{},"用":{"docs":{},"来":{"docs":{},"保":{"docs":{},"存":{"docs":{},"和":{"docs":{},"复":{"docs":{},"用":{"docs":{},"临":{"docs":{},"时":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"减":{"docs":{},"少":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},",":{"docs":{},"降":{"docs":{},"低":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"例":{"docs":{},"外":{"docs":{},"场":{"docs":{},"景":{"docs":{},":":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"是":{"docs":{},"相":{"docs":{},"似":{"docs":{},"的":{"docs":{},"一":{"docs":{},"组":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"请":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}},":":{"docs":{},"在":{"docs":{},"字":{"docs":{},"段":{"docs":{},"名":{"docs":{},"提":{"docs":{},"供":{"docs":{},"有":{"docs":{},"意":{"docs":{},"义":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"的":{"docs":{},"地":{"docs":{},"方":{"docs":{},"可":{"docs":{},"以":{"docs":{},"显":{"docs":{},"示":{"docs":{},"指":{"docs":{},"定":{"docs":{},"零":{"docs":{},"值":{"docs":{},"。":{"docs":{},"如":{"docs":{},"表":{"docs":{},"驱":{"docs":{},"动":{"docs":{},"单":{"docs":{},"元":{"docs":{},"测":{"docs":{},"试":{"docs":{},"中":{"docs":{},"的":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{},"例":{"docs":{},",":{"docs":{},"即":{"docs":{},"使":{"docs":{},"字":{"docs":{},"段":{"docs":{},"为":{"docs":{},"零":{"docs":{},"值":{"docs":{},",":{"docs":{},"限":{"docs":{},"制":{"docs":{},"指":{"docs":{},"定":{"docs":{},"零":{"docs":{},"值":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"字":{"docs":{},"段":{"docs":{},"名":{"docs":{},"可":{"docs":{},"清":{"docs":{},"晰":{"docs":{},"地":{"docs":{},"表":{"docs":{},"达":{"docs":{},"用":{"docs":{},"例":{"docs":{},"的":{"docs":{},"含":{"docs":{},"义":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"如":{"docs":{},"果":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},"有":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"如":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"s":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"表":{"docs":{},"示":{"docs":{},"带":{"docs":{},"有":{"docs":{},"静":{"docs":{},"态":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"需":{"docs":{},"要":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"并":{"docs":{},"处":{"docs":{},"理":{"docs":{},"此":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"则":{"docs":{},"将":{"docs":{},"此":{"docs":{},"错":{"docs":{},"误":{"docs":{},"导":{"docs":{},"出":{"docs":{},"为":{"docs":{},"变":{"docs":{},"量":{"docs":{},"以":{"docs":{},"支":{"docs":{},"持":{"docs":{},"将":{"docs":{},"其":{"docs":{},"与":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"s":{"docs":{},".":{"docs":{},"i":{"docs":{},"s":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{},"一":{"docs":{},"个":{"docs":{},"时":{"docs":{},"间":{"docs":{},"点":{"docs":{},"上":{"docs":{},"加":{"docs":{},"上":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}},"由":{"docs":{},"于":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}},"括":{"docs":{},"号":{"docs":{},"和":{"docs":{},"空":{"docs":{},"格":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}},"换":{"docs":{},"行":{"docs":{},"方":{"docs":{},"式":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}},"文":{"docs":{},"件":{"docs":{},"长":{"docs":{},"度":{"docs":{},"不":{"docs":{},"能":{"docs":{},"超":{"docs":{},"过":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}},"中":{"docs":{},"(":{"docs":{},"一":{"docs":{},"般":{"docs":{},"是":{"docs":{},"和":{"docs":{},"包":{"docs":{},"同":{"docs":{},"名":{"docs":{},"的":{"docs":{},"文":{"docs":{},"件":{"docs":{},")":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"出":{"docs":{},"现":{"docs":{},"在":{"docs":{},"一":{"docs":{},"个":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}},"名":{"docs":{},"应":{"docs":{},"该":{"docs":{},"采":{"docs":{},"用":{"docs":{},"小":{"docs":{},"写":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"使":{"docs":{},"用":{"docs":{},"下":{"docs":{},"划":{"docs":{},"线":{"docs":{},"分":{"docs":{},"割":{"docs":{},"各":{"docs":{},"个":{"docs":{},"单":{"docs":{},"词":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"模":{"docs":{},"块":{"docs":{},"语":{"docs":{},"句":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}},"式":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}},"拟":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"行":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}}},"数":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}},"长":{"docs":{},"度":{"docs":{},"换":{"docs":{},"行":{"docs":{},"方":{"docs":{},"式":{"docs":{},"不":{"docs":{},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{},"空":{"docs":{},"行":{"docs":{},"括":{"docs":{},"号":{"docs":{},"和":{"docs":{},"空":{"docs":{},"格":{"docs":{},"行":{"docs":{},"数":{"docs":{},"行":{"docs":{},"长":{"docs":{},"度":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}}}}}}}}}}}}}}}}},"内":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"时":{"docs":{},",":{"docs":{},"出":{"docs":{},"于":{"docs":{},"性":{"docs":{},"能":{"docs":{},"的":{"docs":{},"考":{"docs":{},"虑":{"docs":{},",":{"docs":{},"待":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"数":{"docs":{},"量":{"docs":{},"较":{"docs":{},"少":{"docs":{},"(":{"docs":{},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"拼":{"docs":{},"接":{"docs":{},",":{"docs":{},"主":{"docs":{},"要":{"docs":{},"追":{"docs":{},"求":{"docs":{},"的":{"docs":{},"是":{"docs":{},"代":{"docs":{},"码":{"docs":{},"的":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"可":{"docs":{},"读":{"docs":{},"。":{"docs":{},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"拼":{"docs":{},"接":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"为":{"docs":{},"了":{"docs":{},"书":{"docs":{},"写":{"docs":{},"方":{"docs":{},"便":{"docs":{},"快":{"docs":{},"捷":{"docs":{},",":{"docs":{},"最":{"docs":{},"常":{"docs":{},"用":{"docs":{},"的":{"docs":{},"两":{"docs":{},"个":{"docs":{},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"不":{"docs":{},"要":{"docs":{},"用":{"docs":{},"单":{"docs":{},"字":{"docs":{},"符":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}},")":{"docs":{},"。":{"docs":{},"单":{"docs":{},"测":{"docs":{},"函":{"docs":{},"数":{"docs":{},"行":{"docs":{},"数":{"docs":{},"限":{"docs":{},"制":{"docs":{},"也":{"docs":{},"是":{"docs":{},"普":{"docs":{},"通":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"2":{"docs":{},"倍":{"docs":{},"(":{"1":{"6":{"0":{"docs":{},"行":{"docs":{},")":{"docs":{},"。":{"docs":{},"圈":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"度":{"docs":{},"、":{"docs":{},"列":{"docs":{},"数":{"docs":{},"限":{"docs":{},"制":{"docs":{},"、":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}}}},"docs":{}}}}}}}}}}}}}}}}}}},"运":{"docs":{},"算":{"docs":{},"符":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}},"和":{"docs":{},"操":{"docs":{},"作":{"docs":{},"数":{"docs":{},"之":{"docs":{},"间":{"docs":{},"要":{"docs":{},"留":{"docs":{},"空":{"docs":{},"格":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}}}}}},"+":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}},"行":{"docs":{},"结":{"docs":{},"果":{"docs":{},":":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},",":{"docs":{},"注":{"docs":{},"意":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"基":{"docs":{},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},",":{"docs":{},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}},"将":{"docs":{},"得":{"docs":{},"到":{"docs":{},"如":{"docs":{},"下":{"docs":{},"结":{"docs":{},"果":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}}}}}}}}}}},"例":{"docs":{},"子":{"docs":{},"将":{"docs":{},"会":{"docs":{},"输":{"docs":{},"出":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028}}}}}}}}},"时":{"docs":{},"管":{"docs":{},"理":{"docs":{},"的":{"docs":{},"轻":{"docs":{},"量":{"docs":{},"级":{"docs":{},"线":{"docs":{},"程":{"docs":{},"。":{"docs":{},"通":{"docs":{},"过":{"docs":{},"它":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"轻":{"docs":{},"松":{"docs":{},"实":{"docs":{},"现":{"docs":{},"并":{"docs":{},"发":{"docs":{},"编":{"docs":{},"程":{"docs":{},"。":{"docs":{},"但":{"docs":{},"是":{"docs":{},"当":{"docs":{},"我":{"docs":{},"们":{"docs":{},"无":{"docs":{},"限":{"docs":{},"开":{"docs":{},"辟":{"docs":{},"协":{"docs":{},"程":{"docs":{},"时":{"docs":{},",":{"docs":{},"将":{"docs":{},"会":{"docs":{},"遇":{"docs":{},"到":{"docs":{},"致":{"docs":{},"命":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"它":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"轻":{"docs":{},"松":{"docs":{},"实":{"docs":{},"现":{"docs":{},"并":{"docs":{},"发":{"docs":{},"编":{"docs":{},"程":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"结":{"docs":{},"果":{"docs":{},"是":{"docs":{},"程":{"docs":{},"序":{"docs":{},"直":{"docs":{},"接":{"docs":{},"崩":{"docs":{},"溃":{"docs":{},"了":{"docs":{},",":{"docs":{},"关":{"docs":{},"键":{"docs":{},"的":{"docs":{},"报":{"docs":{},"错":{"docs":{},"信":{"docs":{},"息":{"docs":{},"是":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}},"输":{"docs":{},"出":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}},"如":{"docs":{},"下":{"docs":{},",":{"docs":{},"注":{"docs":{},"意":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"遵":{"docs":{},"循":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}},"采":{"docs":{},"用":{"docs":{},"惰":{"docs":{},"性":{"docs":{},"换":{"docs":{},"行":{"docs":{},",":{"docs":{},"换":{"docs":{},"行":{"docs":{},"前":{"docs":{},"应":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"占":{"docs":{},"满":{"docs":{},"当":{"docs":{},"前":{"docs":{},"行":{"docs":{},"不":{"docs":{},"留":{"docs":{},"空":{"docs":{},"位":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}}}}}}}}}}}}}}}}},"独":{"docs":{},"立":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},"流":{"docs":{},"进":{"docs":{},"行":{"docs":{},"处":{"docs":{},"理":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}},"有":{"docs":{},"意":{"docs":{},"义":{"docs":{},"、":{"docs":{},"简":{"docs":{},"短":{"docs":{},"的":{"docs":{},"文":{"docs":{},"件":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}},"驼":{"docs":{},"峰":{"docs":{},"命":{"docs":{},"名":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"首":{"docs":{},"字":{"docs":{},"母":{"docs":{},"根":{"docs":{},"据":{"docs":{},"访":{"docs":{},"问":{"docs":{},"控":{"docs":{},"制":{"docs":{},"采":{"docs":{},"用":{"docs":{},"大":{"docs":{},"写":{"docs":{},"或":{"docs":{},"者":{"docs":{},"小":{"docs":{},"写":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"`":{"docs":{},"u":{"docs":{},"n":{"docs":{},"k":{"docs":{},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}}}},"`":{"docs":{},"`":{"docs":{},"g":{"docs":{},"o":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.007782101167315175},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.006589785831960461},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"s":{"docs":{},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"e":{"docs":{},"l":{"docs":{},"d":{"docs":{},"s":{"docs":{},"`":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.023076923076923078}}}}}}}}},"j":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{},":":{"docs":{},"\"":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"\"":{"docs":{},"`":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}},"m":{"docs":{},"i":{"docs":{},"l":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"\"":{"docs":{},"`":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"`":{"docs":{},"。":{"docs":{},"但":{"docs":{},"是":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"我":{"docs":{},"们":{"docs":{},"想":{"docs":{},"保":{"docs":{},"证":{"docs":{},"某":{"docs":{},"一":{"docs":{},"时":{"docs":{},"刻":{"docs":{},"比":{"docs":{},"前":{"docs":{},"一":{"docs":{},"时":{"docs":{},"刻":{"docs":{},"晚":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"支":{"docs":{},"持":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009}},"使":{"docs":{},"用":{"docs":{},"原":{"docs":{},"始":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"字":{"docs":{},"面":{"docs":{},"值":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{},"反":{"docs":{},"引":{"docs":{},"号":{"docs":{},"来":{"docs":{},"表":{"docs":{},"示":{"docs":{},"原":{"docs":{},"生":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"。":{"docs":{},"在":{"docs":{},"需":{"docs":{},"要":{"docs":{},"转":{"docs":{},"义":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"使":{"docs":{},"用":{"docs":{},"使":{"docs":{},"用":{"docs":{},"反":{"docs":{},"引":{"docs":{},"号":{"docs":{},"表":{"docs":{},"示":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"转":{"docs":{},"义":{"docs":{},"。":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"将":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009}}}}},"结":{"docs":{},"构":{"docs":{},"。":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}},"体":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}},"信":{"docs":{},"息":{"docs":{},"描":{"docs":{},"述":{"docs":{},"\"":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}},"内":{"docs":{},"的":{"docs":{},"可":{"docs":{},"导":{"docs":{},"出":{"docs":{},"成":{"docs":{},"员":{"docs":{},"变":{"docs":{},"量":{"docs":{},"名":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"是":{"docs":{},"个":{"docs":{},"生":{"docs":{},"僻":{"docs":{},"词":{"docs":{},"或":{"docs":{},"意":{"docs":{},"义":{"docs":{},"不":{"docs":{},"明":{"docs":{},"确":{"docs":{},"的":{"docs":{},"词":{"docs":{},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"要":{"docs":{},"单":{"docs":{},"独":{"docs":{},"给":{"docs":{},"出":{"docs":{},"注":{"docs":{},"释":{"docs":{},",":{"docs":{},"放":{"docs":{},"在":{"docs":{},"成":{"docs":{},"员":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"前":{"docs":{},"一":{"docs":{},"行":{"docs":{},"或":{"docs":{},"同":{"docs":{},"一":{"docs":{},"行":{"docs":{},"的":{"docs":{},"末":{"docs":{},"尾":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"名":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}},"应":{"docs":{},"该":{"docs":{},"是":{"docs":{},"名":{"docs":{},"词":{"docs":{},"或":{"docs":{},"名":{"docs":{},"词":{"docs":{},"短":{"docs":{},"语":{"docs":{},",":{"docs":{},"如":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}},"注":{"docs":{},"释":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"的":{"docs":{},"定":{"docs":{},"义":{"docs":{},"和":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"格":{"docs":{},"式":{"docs":{},"采":{"docs":{},"用":{"docs":{},"多":{"docs":{},"行":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}},",":{"docs":{},"那":{"docs":{},"么":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}},",":{"docs":{},"其":{"docs":{},"有":{"docs":{},"两":{"docs":{},"个":{"docs":{},"变":{"docs":{},"量":{"docs":{},"。":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"来":{"docs":{},"接":{"docs":{},"收":{"docs":{},"通":{"docs":{},"知":{"docs":{},"就":{"docs":{},"行":{"docs":{},"了":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}},"束":{"docs":{},"程":{"docs":{},"序":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"上":{"docs":{},"的":{"docs":{},"包":{"docs":{},"要":{"docs":{},"确":{"docs":{},"认":{"docs":{},"活":{"docs":{},"跃":{"docs":{},"度":{"docs":{},",":{"docs":{},"不":{"docs":{},"知":{"docs":{},"名":{"docs":{},"的":{"docs":{},"包":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"被":{"docs":{},"下":{"docs":{},"架":{"docs":{},"或":{"docs":{},"出":{"docs":{},"现":{"docs":{},"不":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"的":{"docs":{},"版":{"docs":{},"本":{"docs":{},"升":{"docs":{},"级":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"必":{"docs":{},"要":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"可":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"面":{"docs":{},"这":{"docs":{},"三":{"docs":{},"条":{"docs":{},"是":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"对":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"检":{"docs":{},"查":{"docs":{},"机":{"docs":{},"制":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"有":{"docs":{},"几":{"docs":{},"点":{"docs":{},"需":{"docs":{},"要":{"docs":{},"注":{"docs":{},"意":{"docs":{},"一":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}},"例":{"docs":{},"子":{"docs":{},"只":{"docs":{},"是":{"docs":{},"简":{"docs":{},"单":{"docs":{},"地":{"docs":{},"限":{"docs":{},"制":{"docs":{},"了":{"docs":{},"协":{"docs":{},"程":{"docs":{},"开":{"docs":{},"辟":{"docs":{},"的":{"docs":{},"数":{"docs":{},"量":{"docs":{},"。":{"docs":{},"在":{"docs":{},"此":{"docs":{},"基":{"docs":{},"础":{"docs":{},"之":{"docs":{},"上":{"docs":{},",":{"docs":{},"基":{"docs":{},"于":{"docs":{},"对":{"docs":{},"象":{"docs":{},"复":{"docs":{},"用":{"docs":{},"的":{"docs":{},"思":{"docs":{},"想":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"重":{"docs":{},"复":{"docs":{},"利":{"docs":{},"用":{"docs":{},"已":{"docs":{},"开":{"docs":{},"辟":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"协":{"docs":{},"程":{"docs":{},"的":{"docs":{},"重":{"docs":{},"复":{"docs":{},"创":{"docs":{},"建":{"docs":{},"销":{"docs":{},"毁":{"docs":{},",":{"docs":{},"达":{"docs":{},"到":{"docs":{},"池":{"docs":{},"化":{"docs":{},"的":{"docs":{},"效":{"docs":{},"果":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"分":{"docs":{},"析":{"docs":{},"目":{"docs":{},"的":{"docs":{},"是":{"docs":{},"为":{"docs":{},"了":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"地":{"docs":{},"量":{"docs":{},"化":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"其":{"docs":{},"对":{"docs":{},"性":{"docs":{},"能":{"docs":{},"的":{"docs":{},"影":{"docs":{},"响":{"docs":{},"将":{"docs":{},"被":{"docs":{},"放":{"docs":{},"大":{"docs":{},"。":{"docs":{},"这":{"docs":{},"里":{"docs":{},"解":{"docs":{},"释":{"docs":{},"下":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}},"由":{"docs":{},"接":{"docs":{},"收":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},"在":{"docs":{},"数":{"docs":{},"据":{"docs":{},"接":{"docs":{},"收":{"docs":{},"完":{"docs":{},"毕":{"docs":{},"后":{"docs":{},",":{"docs":{},"逐":{"docs":{},"个":{"docs":{},"通":{"docs":{},"知":{"docs":{},"。":{"docs":{},"总":{"docs":{},"之":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"额":{"docs":{},"外":{"docs":{},"的":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"度":{"docs":{},"来":{"docs":{},"完":{"docs":{},"成":{"docs":{},"这":{"docs":{},"件":{"docs":{},"事":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"进":{"docs":{},"行":{"docs":{},"修":{"docs":{},"改":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}},"例":{"docs":{},"中":{"docs":{},"创":{"docs":{},"建":{"docs":{},"了":{"docs":{},"缓":{"docs":{},"冲":{"docs":{},"区":{"docs":{},"大":{"docs":{},"小":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}},"了":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}},"会":{"docs":{},"自":{"docs":{},"动":{"docs":{},"添":{"docs":{},"加":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"的":{"docs":{},"包":{"docs":{},",":{"docs":{},"并":{"docs":{},"移":{"docs":{},"除":{"docs":{},"未":{"docs":{},"引":{"docs":{},"用":{"docs":{},"的":{"docs":{},"包":{"docs":{},"。":{"docs":{},"把":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"包":{"docs":{},"按":{"docs":{},"字":{"docs":{},"母":{"docs":{},"序":{"docs":{},"升":{"docs":{},"序":{"docs":{},"排":{"docs":{},"列":{"docs":{},",":{"docs":{},"并":{"docs":{},"对":{"docs":{},"包":{"docs":{},"进":{"docs":{},"行":{"docs":{},"分":{"docs":{},"组":{"docs":{},"管":{"docs":{},"理":{"docs":{},"。":{"docs":{},"通":{"docs":{},"过":{"docs":{},"空":{"docs":{},"行":{"docs":{},"隔":{"docs":{},"开":{"docs":{},",":{"docs":{},"默":{"docs":{},"认":{"docs":{},"分":{"docs":{},"为":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{},"包":{"docs":{},"和":{"docs":{},"非":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{},"包":{"docs":{},"(":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"包":{"docs":{},"和":{"docs":{},"内":{"docs":{},"部":{"docs":{},"包":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"释":{"docs":{},"放":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"一":{"docs":{},"直":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"将":{"docs":{},"主":{"docs":{},"调":{"docs":{},"加":{"docs":{},"入":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"通":{"docs":{},"知":{"docs":{},"列":{"docs":{},"表":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"修":{"docs":{},"改":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"主":{"docs":{},"调":{"docs":{},"在":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"依":{"docs":{},"赖":{"docs":{},"规":{"docs":{},"范":{"docs":{},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}},"旧":{"docs":{},"可":{"docs":{},"以":{"docs":{},"继":{"docs":{},"续":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{},"这":{"docs":{},"可":{"docs":{},"能":{"docs":{},"就":{"docs":{},"是":{"docs":{},"“":{"docs":{},"全":{"docs":{},"能":{"docs":{},"”":{"docs":{},"与":{"docs":{},"“":{"docs":{},"专":{"docs":{},"精":{"docs":{},"”":{"docs":{},"的":{"docs":{},"区":{"docs":{},"别":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"包":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":3.333333333333333}},"名":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}},"和":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}},"应":{"docs":{},"该":{"docs":{},"为":{"docs":{},"小":{"docs":{},"写":{"docs":{},"单":{"docs":{},"词":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"下":{"docs":{},"划":{"docs":{},"线":{"docs":{},"或":{"docs":{},"者":{"docs":{},"混":{"docs":{},"合":{"docs":{},"大":{"docs":{},"小":{"docs":{},"写":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"多":{"docs":{},"级":{"docs":{},"目":{"docs":{},"录":{"docs":{},"来":{"docs":{},"划":{"docs":{},"分":{"docs":{},"层":{"docs":{},"级":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"谨":{"docs":{},"慎":{"docs":{},"使":{"docs":{},"用":{"docs":{},"缩":{"docs":{},"写":{"docs":{},"。":{"docs":{},"当":{"docs":{},"缩":{"docs":{},"写":{"docs":{},"是":{"docs":{},"程":{"docs":{},"序":{"docs":{},"员":{"docs":{},"广":{"docs":{},"泛":{"docs":{},"熟":{"docs":{},"知":{"docs":{},"的":{"docs":{},"词":{"docs":{},"时":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{},"缩":{"docs":{},"写":{"docs":{},"。":{"docs":{},"例":{"docs":{},"如":{"docs":{},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"含":{"docs":{},"固":{"docs":{},"定":{"docs":{},"的":{"docs":{},"元":{"docs":{},"素":{"docs":{},"列":{"docs":{},"表":{"docs":{},",":{"docs":{},"则":{"docs":{},"使":{"docs":{},"用":{"docs":{},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}},"了":{"docs":{},"指":{"docs":{},"向":{"docs":{},"底":{"docs":{},"层":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"在":{"docs":{},"需":{"docs":{},"要":{"docs":{},"复":{"docs":{},"制":{"docs":{},"它":{"docs":{},"们":{"docs":{},"时":{"docs":{},"要":{"docs":{},"特":{"docs":{},"别":{"docs":{},"注":{"docs":{},"意":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"中":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"程":{"docs":{},"序":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"例":{"docs":{},"外":{"docs":{},",":{"docs":{},"如":{"docs":{},"程":{"docs":{},"序":{"docs":{},"启":{"docs":{},"动":{"docs":{},"时":{"docs":{},",":{"docs":{},"文":{"docs":{},"件":{"docs":{},"无":{"docs":{},"法":{"docs":{},"打":{"docs":{},"开":{"docs":{},"或":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"无":{"docs":{},"法":{"docs":{},"连":{"docs":{},"接":{"docs":{},"导":{"docs":{},"致":{"docs":{},"程":{"docs":{},"序":{"docs":{},"无":{"docs":{},"法":{"docs":{},"正":{"docs":{},"常":{"docs":{},"运":{"docs":{},"行":{"docs":{},"可":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"信":{"docs":{},"息":{"docs":{},"描":{"docs":{},"述":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"多":{"docs":{},"个":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}},"何":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}},"注":{"docs":{},"释":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"&":{"docs":{},"文":{"docs":{},"件":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"两":{"docs":{},"种":{"docs":{},"接":{"docs":{},"口":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"定":{"docs":{},"义":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}},"不":{"docs":{},"支":{"docs":{},"持":{"docs":{},"解":{"docs":{},"析":{"docs":{},"闰":{"docs":{},"秒":{"docs":{},"时":{"docs":{},"间":{"docs":{},"戳":{"docs":{},"(":{"docs":{},"i":{"docs":{},"s":{"docs":{},"s":{"docs":{},"u":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}},"处":{"docs":{},"理":{"docs":{},"时":{"docs":{},"间":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":3.333333333333333}}}}}},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"它":{"docs":{},"有":{"docs":{},"助":{"docs":{},"于":{"docs":{},"以":{"docs":{},"更":{"docs":{},"安":{"docs":{},"全":{"docs":{},"、":{"docs":{},"更":{"docs":{},"准":{"docs":{},"确":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"处":{"docs":{},"理":{"docs":{},"这":{"docs":{},"些":{"docs":{},"不":{"docs":{},"正":{"docs":{},"确":{"docs":{},"的":{"docs":{},"假":{"docs":{},"设":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"原":{"docs":{},"子":{"docs":{},"操":{"docs":{},"作":{"docs":{},"对":{"docs":{},"基":{"docs":{},"本":{"docs":{},"类":{"docs":{},"型":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}}}}}}},"性":{"docs":{},"能":{"docs":{},"相":{"docs":{},"较":{"docs":{},"于":{"docs":{},"针":{"docs":{},"对":{"docs":{},"具":{"docs":{},"体":{"docs":{},"类":{"docs":{},"型":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"版":{"docs":{},"本":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"非":{"docs":{},"常":{"docs":{},"大":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},"了":{"docs":{},"数":{"docs":{},"字":{"docs":{},"和":{"docs":{},"字":{"docs":{},"节":{"docs":{},"序":{"docs":{},"列":{"docs":{},"之":{"docs":{},"间":{"docs":{},"的":{"docs":{},"简":{"docs":{},"单":{"docs":{},"转":{"docs":{},"换":{"docs":{},"以":{"docs":{},"及":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}},"针":{"docs":{},"对":{"docs":{},"大":{"docs":{},"端":{"docs":{},"字":{"docs":{},"节":{"docs":{},"序":{"docs":{},"将":{"docs":{},"字":{"docs":{},"节":{"docs":{},"序":{"docs":{},"列":{"docs":{},"转":{"docs":{},"为":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}},"下":{"docs":{},"的":{"docs":{},"一":{"docs":{},"个":{"docs":{},"组":{"docs":{},"件":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"作":{"docs":{},"为":{"docs":{},"保":{"docs":{},"存":{"docs":{},"临":{"docs":{},"时":{"docs":{},"取":{"docs":{},"还":{"docs":{},"对":{"docs":{},"象":{"docs":{},"的":{"docs":{},"一":{"docs":{},"个":{"docs":{},"“":{"docs":{},"池":{"docs":{},"子":{"docs":{},"”":{"docs":{},"。":{"docs":{},"个":{"docs":{},"人":{"docs":{},"觉":{"docs":{},"得":{"docs":{},"它":{"docs":{},"的":{"docs":{},"名":{"docs":{},"字":{"docs":{},"有":{"docs":{},"一":{"docs":{},"定":{"docs":{},"的":{"docs":{},"误":{"docs":{},"导":{"docs":{},"性":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"为":{"docs":{},"例":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"看":{"docs":{},"下":{"docs":{},"其":{"docs":{},"是":{"docs":{},"如":{"docs":{},"何":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}},"和":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"只":{"docs":{},"能":{"docs":{},"用":{"docs":{},"于":{"docs":{},"测":{"docs":{},"试":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"且":{"docs":{},"必":{"docs":{},"须":{"docs":{},"是":{"docs":{},"为":{"docs":{},"了":{"docs":{},"解":{"docs":{},"决":{"docs":{},"循":{"docs":{},"环":{"docs":{},"依":{"docs":{},"赖":{"docs":{},",":{"docs":{},"才":{"docs":{},"能":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{},"当":{"docs":{},"前":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"简":{"docs":{},"单":{"docs":{},"地":{"docs":{},"完":{"docs":{},"成":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"之":{"docs":{},"间":{"docs":{},"的":{"docs":{},"拼":{"docs":{},"接":{"docs":{},",":{"docs":{},"非":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{},"需":{"docs":{},"要":{"docs":{},"单":{"docs":{},"独":{"docs":{},"做":{"docs":{},"类":{"docs":{},"型":{"docs":{},"转":{"docs":{},"换":{"docs":{},"。":{"docs":{},"行":{"docs":{},"内":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"不":{"docs":{},"会":{"docs":{},"产":{"docs":{},"生":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},",":{"docs":{},"也":{"docs":{},"不":{"docs":{},"涉":{"docs":{},"及":{"docs":{},"类":{"docs":{},"型":{"docs":{},"地":{"docs":{},"动":{"docs":{},"态":{"docs":{},"转":{"docs":{},"换":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"性":{"docs":{},"能":{"docs":{},"上":{"docs":{},"优":{"docs":{},"于":{"docs":{},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},")":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"在":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"一":{"docs":{},"个":{"docs":{},"源":{"docs":{},"文":{"docs":{},"件":{"docs":{},"的":{"docs":{},"包":{"docs":{},",":{"docs":{},"包":{"docs":{},"名":{"docs":{},"应":{"docs":{},"该":{"docs":{},"和":{"docs":{},"文":{"docs":{},"件":{"docs":{},"名":{"docs":{},"保":{"docs":{},"持":{"docs":{},"一":{"docs":{},"致":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}},"遍":{"docs":{},"历":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}},"设":{"docs":{},"置":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"会":{"docs":{},"被":{"docs":{},"修":{"docs":{},"改":{"docs":{},"一":{"docs":{},"次":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}},"唤":{"docs":{},"醒":{"docs":{},"任":{"docs":{},"意":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"带":{"docs":{},"域":{"docs":{},"名":{"docs":{},"的":{"docs":{},"包":{"docs":{},"名":{"docs":{},"都":{"docs":{},"属":{"docs":{},"于":{"docs":{},"外":{"docs":{},"部":{"docs":{},"包":{"docs":{},",":{"docs":{},"如":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}},"来":{"docs":{},"一":{"docs":{},"定":{"docs":{},"的":{"docs":{},"负":{"docs":{},"担":{"docs":{},",":{"docs":{},"严":{"docs":{},"重":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"会":{"docs":{},"引":{"docs":{},"起":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}},"引":{"docs":{},"入":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"包":{"docs":{},"要":{"docs":{},"慎":{"docs":{},"重":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}},"用":{"docs":{},")":{"docs":{},"时":{"docs":{},",":{"docs":{},"才":{"docs":{},"可":{"docs":{},"以":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}},"必":{"docs":{},"要":{"docs":{},"时":{"docs":{},"给":{"docs":{},"包":{"docs":{},"起":{"docs":{},"个":{"docs":{},"别":{"docs":{},"名":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"字":{"docs":{},"段":{"docs":{},"给":{"docs":{},"出":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}},"须":{"docs":{},"在":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"是":{"docs":{},"最":{"docs":{},"后":{"docs":{},"一":{"docs":{},"个":{"docs":{},"参":{"docs":{},"数":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}},"固":{"docs":{},"定":{"docs":{},"大":{"docs":{},"小":{"docs":{},"的":{"docs":{},"值":{"docs":{},"或":{"docs":{},"固":{"docs":{},"定":{"docs":{},"大":{"docs":{},"小":{"docs":{},"值":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},",":{"docs":{},"或":{"docs":{},"指":{"docs":{},"向":{"docs":{},"此":{"docs":{},"类":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"指":{"docs":{},"向":{"docs":{},"固":{"docs":{},"定":{"docs":{},"大":{"docs":{},"小":{"docs":{},"值":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},"或":{"docs":{},"固":{"docs":{},"定":{"docs":{},"大":{"docs":{},"小":{"docs":{},"值":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}},"要":{"docs":{},"有":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}},"标":{"docs":{},"准":{"docs":{},"包":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}},"库":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"时":{"docs":{},"间":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"别":{"docs":{},"名":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}},"函":{"docs":{},"数":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"也":{"docs":{},"大":{"docs":{},"量":{"docs":{},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}},"提":{"docs":{},"供":{"docs":{},"的":{"docs":{},"使":{"docs":{},"函":{"docs":{},"数":{"docs":{},"只":{"docs":{},"执":{"docs":{},"行":{"docs":{},"一":{"docs":{},"次":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"常":{"docs":{},"应":{"docs":{},"用":{"docs":{},"于":{"docs":{},"单":{"docs":{},"例":{"docs":{},"模":{"docs":{},"式":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"配":{"docs":{},"置":{"docs":{},"、":{"docs":{},"保":{"docs":{},"持":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"连":{"docs":{},"接":{"docs":{},"等":{"docs":{},"。":{"docs":{},"作":{"docs":{},"用":{"docs":{},"与":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"签":{"docs":{},"或":{"docs":{},"日":{"docs":{},"志":{"docs":{},"中":{"docs":{},"的":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}},"志":{"docs":{},":":{"docs":{},"f":{"docs":{},"l":{"docs":{},"a":{"docs":{},"g":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}},"管":{"docs":{},"理":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},",":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}},"规":{"docs":{},"则":{"docs":{},"为":{"docs":{},"准":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}},"范":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}},"依":{"docs":{},"赖":{"docs":{},"规":{"docs":{},"范":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}},"原":{"docs":{},"则":{"docs":{},"上":{"docs":{},"以":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}},"该":{"docs":{},"包":{"docs":{},"已":{"docs":{},"经":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}},"注":{"docs":{},"释":{"docs":{},"对":{"docs":{},"类":{"docs":{},"型":{"docs":{},"进":{"docs":{},"行":{"docs":{},"简":{"docs":{},"要":{"docs":{},"介":{"docs":{},"绍":{"docs":{},",":{"docs":{},"放":{"docs":{},"在":{"docs":{},"定":{"docs":{},"义":{"docs":{},"的":{"docs":{},"前":{"docs":{},"一":{"docs":{},"行":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}},"函":{"docs":{},"数":{"docs":{},"也":{"docs":{},"是":{"docs":{},"参":{"docs":{},"考":{"docs":{},"了":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}},"方":{"docs":{},"法":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"成":{"docs":{},"对":{"docs":{},"第":{"docs":{},"一":{"docs":{},"种":{"docs":{},"方":{"docs":{},"法":{"docs":{},"截":{"docs":{},"取":{"docs":{},"法":{"docs":{},"的":{"docs":{},"改":{"docs":{},"进":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"每":{"docs":{},"次":{"docs":{},"指":{"docs":{},"需":{"docs":{},"移":{"docs":{},"动":{"docs":{},"一":{"docs":{},"个":{"docs":{},"元":{"docs":{},"素":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"更":{"docs":{},"加":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"路":{"docs":{},"径":{"docs":{},"名":{"docs":{},"不":{"docs":{},"一":{"docs":{},"致":{"docs":{},"时":{"docs":{},",":{"docs":{},"或":{"docs":{},"者":{"docs":{},"多":{"docs":{},"个":{"docs":{},"相":{"docs":{},"同":{"docs":{},"包":{"docs":{},"名":{"docs":{},"冲":{"docs":{},"突":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"别":{"docs":{},"名":{"docs":{},"代":{"docs":{},"替":{"docs":{},"会":{"docs":{},"有":{"docs":{},"更":{"docs":{},"好":{"docs":{},"的":{"docs":{},"可":{"docs":{},"读":{"docs":{},"性":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635}}}}}}}}}}}},"e":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.004942339373970346},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.013605442176870748},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}},"x":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.017241379310344827}},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.005836575875486381},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}},"x":{"docs":{},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},"可":{"docs":{},"以":{"docs":{},"不":{"docs":{},"用":{"docs":{},"显":{"docs":{},"式":{"docs":{},"处":{"docs":{},"理":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}},"x":{"docs":{},":":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}},".":{"docs":{},"p":{"docs":{},"b":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},",":{"docs":{},"g":{"docs":{},"o":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}},"_":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}},",":{"docs":{},"u":{"docs":{},"n":{"docs":{},"s":{"docs":{},"a":{"docs":{},"f":{"docs":{},"e":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"o":{"docs":{},"f":{"docs":{},"(":{"docs":{},"x":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}},"计":{"docs":{},"算":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}},"y":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}},"a":{"docs":{},"m":{"docs":{},"l":{"docs":{},".":{"docs":{},"u":{"docs":{},"n":{"docs":{},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"h":{"docs":{},"a":{"docs":{},"l":{"docs":{},"(":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}}}}}}}}}}}}}},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}},"e":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}},"a":{"docs":{},"r":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"或":{"docs":{},"更":{"docs":{},"少":{"docs":{},"的":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"则":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"测":{"docs":{},"试":{"docs":{},"表":{"docs":{},"中":{"docs":{},"省":{"docs":{},"略":{"docs":{},"字":{"docs":{},"段":{"docs":{},"名":{"docs":{},"称":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"超":{"docs":{},"过":{"docs":{},",":{"docs":{},"请":{"docs":{},"封":{"docs":{},"装":{"docs":{},"成":{"docs":{},"新":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}},"或":{"docs":{},"有":{"docs":{},"相":{"docs":{},"同":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},",":{"docs":{},"或":{"docs":{},"者":{"docs":{},"从":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"中":{"docs":{},"不":{"docs":{},"清":{"docs":{},"楚":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"的":{"docs":{},"含":{"docs":{},"义":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"命":{"docs":{},"名":{"docs":{},"返":{"docs":{},"回":{"docs":{},",":{"docs":{},"其":{"docs":{},"它":{"docs":{},"情":{"docs":{},"况":{"docs":{},"不":{"docs":{},"建":{"docs":{},"议":{"docs":{},"使":{"docs":{},"用":{"docs":{},"命":{"docs":{},"名":{"docs":{},"返":{"docs":{},"回":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"字":{"docs":{},"节":{"docs":{},",":{"docs":{},"那":{"docs":{},"假":{"docs":{},"设":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}},"c":{"docs":{},"p":{"docs":{},"u":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}}},"偏":{"docs":{},"移":{"docs":{},"量":{"docs":{},"才":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}}}}}},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"一":{"docs":{},"次":{"docs":{},"读":{"docs":{},"取":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}},"那":{"docs":{},"么":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"读":{"docs":{},"取":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}},"位":{"docs":{},"置":{"docs":{},"开":{"docs":{},"始":{"docs":{},"占":{"docs":{},"据":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.020689655172413793}}}}}}}},"协":{"docs":{},"程":{"docs":{},"并":{"docs":{},"发":{"docs":{},"写":{"docs":{},"入":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"链":{"docs":{},"表":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"同":{"docs":{},"时":{"docs":{},"存":{"docs":{},"在":{"docs":{},"。":{"docs":{},"那":{"docs":{},"如":{"docs":{},"果":{"docs":{},"协":{"docs":{},"程":{"docs":{},"中":{"docs":{},"还":{"docs":{},"存":{"docs":{},"在":{"docs":{},"着":{"docs":{},"其":{"docs":{},"他":{"docs":{},"需":{"docs":{},"要":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"操":{"docs":{},"作":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"允":{"docs":{},"许":{"docs":{},"并":{"docs":{},"发":{"docs":{},"执":{"docs":{},"行":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},"将":{"docs":{},"会":{"docs":{},"数":{"docs":{},"量":{"docs":{},"级":{"docs":{},"地":{"docs":{},"减":{"docs":{},"少":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},",":{"2":{"docs":{},"^":{"3":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}}},"docs":{}}}}}}},"数":{"docs":{},"的":{"docs":{},"增":{"docs":{},"多":{"docs":{},"而":{"docs":{},"线":{"docs":{},"性":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"。":{"docs":{},"很":{"docs":{},"多":{"docs":{},"语":{"docs":{},"言":{"docs":{},"都":{"docs":{},"提":{"docs":{},"供":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}},"字":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"任":{"docs":{},"务":{"docs":{},",":{"docs":{},"达":{"docs":{},"到":{"docs":{},"了":{"docs":{},"协":{"docs":{},"程":{"docs":{},"并":{"docs":{},"发":{"docs":{},"控":{"docs":{},"制":{"docs":{},"的":{"docs":{},"目":{"docs":{},"的":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}},"消":{"docs":{},"息":{"docs":{},"则":{"docs":{},"被":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"。":{"docs":{},"开":{"docs":{},"启":{"docs":{},"协":{"docs":{},"程":{"docs":{},"前":{"docs":{},",":{"docs":{},"调":{"docs":{},"用":{"docs":{},"c":{"docs":{},"h":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}},"等":{"docs":{},"待":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"仅":{"docs":{},"将":{"docs":{},"相":{"docs":{},"关":{"docs":{},"的":{"docs":{},"声":{"docs":{},"明":{"docs":{},"放":{"docs":{},"在":{"docs":{},"一":{"docs":{},"组":{"docs":{},"。":{"docs":{},"不":{"docs":{},"要":{"docs":{},"将":{"docs":{},"不":{"docs":{},"相":{"docs":{},"关":{"docs":{},"的":{"docs":{},"声":{"docs":{},"明":{"docs":{},"放":{"docs":{},"在":{"docs":{},"一":{"docs":{},"组":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"包":{"docs":{},"含":{"docs":{},"方":{"docs":{},"法":{"docs":{},"的":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"1":{"docs":{},".":{"docs":{},"不":{"docs":{},"占":{"docs":{},"内":{"docs":{},"存":{"docs":{},"空":{"docs":{},"间":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}},"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}},"提":{"docs":{},"供":{"docs":{},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{},"导":{"docs":{},"出":{"docs":{},"方":{"docs":{},"法":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"优":{"docs":{},"先":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},"雅":{"docs":{},"地":{"docs":{},"处":{"docs":{},"理":{"docs":{},"错":{"docs":{},"误":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}},"化":{"docs":{},"后":{"docs":{},"的":{"docs":{},"版":{"docs":{},"本":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},"。":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"出":{"docs":{},"相":{"docs":{},"较":{"docs":{},"于":{"docs":{},"不":{"docs":{},"预":{"docs":{},"先":{"docs":{},"分":{"docs":{},"配":{"docs":{},"空":{"docs":{},"间":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"提":{"docs":{},"升":{"docs":{},"了":{"docs":{},"很":{"docs":{},"多":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"秀":{"docs":{},"的":{"docs":{},"本":{"docs":{},"地":{"docs":{},"缓":{"docs":{},"存":{"docs":{},"组":{"docs":{},"件":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"申":{"docs":{},"明":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}},"量":{"docs":{},"中":{"docs":{},"不":{"docs":{},"要":{"docs":{},"包":{"docs":{},"含":{"docs":{},"格":{"docs":{},"式":{"docs":{},"化":{"docs":{},"字":{"docs":{},"符":{"docs":{},",":{"docs":{},"否":{"docs":{},"则":{"docs":{},"必":{"docs":{},"然":{"docs":{},"违":{"docs":{},"反":{"docs":{},"就":{"docs":{},"近":{"docs":{},"原":{"docs":{},"则":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}},"凡":{"docs":{},"事":{"docs":{},"无":{"docs":{},"绝":{"docs":{},"对":{"docs":{},",":{"docs":{},"某":{"docs":{},"些":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}},"切":{"docs":{},"片":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028}},"是":{"docs":{},"有":{"docs":{},"效":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},",":{"docs":{},"但":{"docs":{},"它":{"docs":{},"不":{"docs":{},"等":{"docs":{},"于":{"docs":{},"长":{"docs":{},"度":{"docs":{},"为":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}},",":{"docs":{},"代":{"docs":{},"码":{"docs":{},"会":{"docs":{},"更":{"docs":{},"加":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"清":{"docs":{},"晰":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}},"过":{"docs":{},"滤":{"docs":{},"掉":{"docs":{},"指":{"docs":{},"定":{"docs":{},"的":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}},"元":{"docs":{},"素":{"docs":{},"从":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}},"创":{"docs":{},"建":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"新":{"docs":{},"切":{"docs":{},"片":{"docs":{},",":{"docs":{},"过":{"docs":{},"滤":{"docs":{},"掉":{"docs":{},"指":{"docs":{},"定":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}}}}}}}}}}}}}},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}},"变":{"docs":{},"量":{"docs":{},"申":{"docs":{},"明":{"docs":{},"的":{"docs":{},"位":{"docs":{},"置":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"靠":{"docs":{},"近":{"docs":{},"使":{"docs":{},"用":{"docs":{},"的":{"docs":{},"地":{"docs":{},"方":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}},"名":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"和":{"docs":{},"常":{"docs":{},"量":{"docs":{},"注":{"docs":{},"释":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}},"的":{"docs":{},"值":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"一":{"docs":{},"次":{"docs":{},"访":{"docs":{},"存":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"两":{"docs":{},"次":{"docs":{},"访":{"docs":{},"存":{"docs":{},",":{"docs":{},"第":{"docs":{},"一":{"docs":{},"次":{"docs":{},"访":{"docs":{},"存":{"docs":{},"得":{"docs":{},"到":{"docs":{},"前":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"节":{"docs":{},",":{"docs":{},"第":{"docs":{},"二":{"docs":{},"次":{"docs":{},"得":{"docs":{},"到":{"docs":{},"后":{"docs":{},"两":{"docs":{},"个":{"docs":{},"字":{"docs":{},"节":{"docs":{},"。":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"后":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"大":{"docs":{},"小":{"docs":{},"不":{"docs":{},"确":{"docs":{},"定":{"docs":{},"(":{"docs":{},"如":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}},"较":{"docs":{},"大":{"docs":{},"(":{"docs":{},"栈":{"docs":{},"空":{"docs":{},"间":{"docs":{},"不":{"docs":{},"足":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}},"仅":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"一":{"docs":{},"次":{"docs":{},",":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"完":{"docs":{},"成":{"docs":{},"后":{"docs":{},"驻":{"docs":{},"留":{"docs":{},"在":{"docs":{},"内":{"docs":{},"存":{"docs":{},"里":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"读":{"docs":{},"都":{"docs":{},"被":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},",":{"docs":{},"直":{"docs":{},"到":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"完":{"docs":{},"成":{"docs":{},";":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}},"另":{"docs":{},"外":{"docs":{},",":{"docs":{},"分":{"docs":{},"组":{"docs":{},"使":{"docs":{},"用":{"docs":{},"的":{"docs":{},"位":{"docs":{},"置":{"docs":{},"没":{"docs":{},"有":{"docs":{},"限":{"docs":{},"制":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"函":{"docs":{},"数":{"docs":{},"内":{"docs":{},"部":{"docs":{},"使":{"docs":{},"用":{"docs":{},"它":{"docs":{},"们":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"请":{"docs":{},"参":{"docs":{},"考":{"docs":{},":":{"docs":{},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{},"'":{"docs":{},"t":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}},"因":{"docs":{},"此":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},",":{"docs":{},"在":{"docs":{},"处":{"docs":{},"理":{"docs":{},"时":{"docs":{},"间":{"docs":{},"时":{"docs":{},"始":{"docs":{},"终":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}},"将":{"docs":{},"元":{"docs":{},"素":{"docs":{},"添":{"docs":{},"加":{"docs":{},"到":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}},"对":{"docs":{},"内":{"docs":{},"存":{"docs":{},"特":{"docs":{},"别":{"docs":{},"敏":{"docs":{},"感":{"docs":{},"的":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"的":{"docs":{},"设":{"docs":{},"计":{"docs":{},"上":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"调":{"docs":{},"整":{"docs":{},"字":{"docs":{},"段":{"docs":{},"的":{"docs":{},"顺":{"docs":{},"序":{"docs":{},",":{"docs":{},"将":{"docs":{},"字":{"docs":{},"段":{"docs":{},"宽":{"docs":{},"度":{"docs":{},"从":{"docs":{},"小":{"docs":{},"到":{"docs":{},"大":{"docs":{},"由":{"docs":{},"上":{"docs":{},"到":{"docs":{},"下":{"docs":{},"排":{"docs":{},"列":{"docs":{},",":{"docs":{},"来":{"docs":{},"减":{"docs":{},"少":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"占":{"docs":{},"用":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"呢":{"docs":{},",":{"docs":{},"将":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}},"为":{"docs":{},"其":{"docs":{},"他":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"不":{"docs":{},"占":{"docs":{},"据":{"docs":{},"内":{"docs":{},"存":{"docs":{},"空":{"docs":{},"间":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"被":{"docs":{},"广":{"docs":{},"泛":{"docs":{},"作":{"docs":{},"为":{"docs":{},"各":{"docs":{},"种":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},"的":{"docs":{},"占":{"docs":{},"位":{"docs":{},"符":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{},"一":{"docs":{},"是":{"docs":{},"节":{"docs":{},"省":{"docs":{},"资":{"docs":{},"源":{"docs":{},",":{"docs":{},"二":{"docs":{},"是":{"docs":{},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"本":{"docs":{},"身":{"docs":{},"就":{"docs":{},"具":{"docs":{},"备":{"docs":{},"很":{"docs":{},"强":{"docs":{},"的":{"docs":{},"语":{"docs":{},"义":{"docs":{},",":{"docs":{},"即":{"docs":{},"这":{"docs":{},"里":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"任":{"docs":{},"何":{"docs":{},"值":{"docs":{},",":{"docs":{},"仅":{"docs":{},"作":{"docs":{},"为":{"docs":{},"占":{"docs":{},"位":{"docs":{},"符":{"docs":{},",":{"docs":{},"达":{"docs":{},"到":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"即":{"docs":{},"注":{"docs":{},"释":{"docs":{},"的":{"docs":{},"效":{"docs":{},"果":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"的":{"docs":{},"存":{"docs":{},"在":{"docs":{},",":{"docs":{},"合":{"docs":{},"理":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}},"这":{"docs":{},"一":{"docs":{},"点":{"docs":{},",":{"docs":{},"空":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}},"基":{"docs":{},"于":{"docs":{},"当":{"docs":{},"前":{"docs":{},"目":{"docs":{},"录":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"/":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},",":{"docs":{},"那":{"docs":{},"它":{"docs":{},"和":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"区":{"docs":{},"别":{"docs":{},"是":{"docs":{},"什":{"docs":{},"么":{"docs":{},"呢":{"docs":{},"?":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}},"本":{"docs":{},"数":{"docs":{},"据":{"docs":{},"类":{"docs":{},"型":{"docs":{},"与":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"之":{"docs":{},"间":{"docs":{},"的":{"docs":{},"转":{"docs":{},"换":{"docs":{},",":{"docs":{},"优":{"docs":{},"先":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}},"代":{"docs":{},"码":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}},"声":{"docs":{},"明":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},"到":{"docs":{},"一":{"docs":{},"组":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"和":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"在":{"docs":{},"视":{"docs":{},"觉":{"docs":{},"上":{"docs":{},"很":{"docs":{},"相":{"docs":{},"似":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},"是":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}},"结":{"docs":{},"构":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"这":{"docs":{},"样":{"docs":{},"更":{"docs":{},"加":{"docs":{},"简":{"docs":{},"洁":{"docs":{},",":{"docs":{},"其":{"docs":{},"各":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"值":{"docs":{},"为":{"docs":{},"字":{"docs":{},"段":{"docs":{},"类":{"docs":{},"型":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"零":{"docs":{},"值":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"零":{"docs":{},"值":{"docs":{},"结":{"docs":{},"构":{"docs":{},"使":{"docs":{},"用":{"docs":{},"关":{"docs":{},"键":{"docs":{},"字":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}},"错":{"docs":{},"误":{"docs":{},"可":{"docs":{},"选":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"很":{"docs":{},"少":{"docs":{},",":{"docs":{},"在":{"docs":{},"选":{"docs":{},"择":{"docs":{},"合":{"docs":{},"适":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},"申":{"docs":{},"明":{"docs":{},"方":{"docs":{},"式":{"docs":{},"之":{"docs":{},"前":{"docs":{},",":{"docs":{},"应":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"以":{"docs":{},"下":{"docs":{},"几":{"docs":{},"点":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"容":{"docs":{},"量":{"docs":{},"大":{"docs":{},"小":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},"提":{"docs":{},"示":{"2":{"docs":{},".":{"docs":{},"指":{"docs":{},"定":{"docs":{},"切":{"docs":{},"片":{"docs":{},"容":{"docs":{},"量":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"指":{"docs":{},"定":{"docs":{},"容":{"docs":{},"器":{"docs":{},"容":{"docs":{},"量":{"docs":{},",":{"docs":{},"以":{"docs":{},"便":{"docs":{},"为":{"docs":{},"容":{"docs":{},"器":{"docs":{},"预":{"docs":{},"先":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"。":{"docs":{},"这":{"docs":{},"将":{"docs":{},"在":{"docs":{},"后":{"docs":{},"续":{"docs":{},"添":{"docs":{},"加":{"docs":{},"元":{"docs":{},"素":{"docs":{},"时":{"docs":{},"减":{"docs":{},"少":{"docs":{},"通":{"docs":{},"过":{"docs":{},"复":{"docs":{},"制":{"docs":{},"来":{"docs":{},"调":{"docs":{},"整":{"docs":{},"容":{"docs":{},"器":{"docs":{},"大":{"docs":{},"小":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}},"时":{"docs":{},",":{"docs":{},"仍":{"docs":{},"可":{"docs":{},"能":{"docs":{},"发":{"docs":{},"生":{"docs":{},"分":{"docs":{},"配":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}},"对":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"于":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"变":{"docs":{},"量":{"docs":{},"、":{"docs":{},"常":{"docs":{},"量":{"docs":{},"的":{"docs":{},"声":{"docs":{},"明":{"docs":{},",":{"docs":{},"相":{"docs":{},"似":{"docs":{},"的":{"docs":{},"声":{"docs":{},"明":{"docs":{},"应":{"docs":{},"该":{"docs":{},"放":{"docs":{},"在":{"docs":{},"一":{"docs":{},"组":{"docs":{},"。":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"定":{"docs":{},"义":{"docs":{},"同":{"docs":{},"样":{"docs":{},"适":{"docs":{},"用":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"其":{"docs":{},"它":{"docs":{},"的":{"docs":{},"包":{"docs":{},",":{"docs":{},"可":{"docs":{},"导":{"docs":{},"出":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"也":{"docs":{},"不":{"docs":{},"能":{"docs":{},"有":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"示":{"docs":{},"例":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"还":{"docs":{},"有":{"docs":{},"一":{"docs":{},"种":{"docs":{},"更":{"docs":{},"好":{"docs":{},"的":{"docs":{},"处":{"docs":{},"理":{"docs":{},"方":{"docs":{},"式":{"docs":{},"是":{"docs":{},"将":{"docs":{},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}},"存":{"docs":{},"储":{"docs":{},"为":{"docs":{},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},"值":{"docs":{},",":{"docs":{},"根":{"docs":{},"据":{"docs":{},"是":{"docs":{},"否":{"docs":{},"导":{"docs":{},"出":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"前":{"docs":{},"缀":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"错":{"docs":{},"误":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"请":{"docs":{},"改":{"docs":{},"用":{"docs":{},"后":{"docs":{},"缀":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}},"指":{"docs":{},"针":{"docs":{},"类":{"docs":{},"型":{"docs":{},"(":{"docs":{},"如":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}},"动":{"docs":{},"态":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}},"大":{"docs":{},"多":{"docs":{},"数":{"docs":{},"包":{"docs":{},"装":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"这":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"很":{"docs":{},"好":{"docs":{},"的":{"docs":{},"默":{"docs":{},"认":{"docs":{},"值":{"docs":{},",":{"docs":{},"但":{"docs":{},"请":{"docs":{},"注":{"docs":{},"意":{"docs":{},",":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"开":{"docs":{},"始":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"此":{"docs":{},"行":{"docs":{},"为":{"docs":{},"。":{"docs":{},"因":{"docs":{},"此":{"docs":{},",":{"docs":{},"对":{"docs":{},"于":{"docs":{},"包":{"docs":{},"装":{"docs":{},"错":{"docs":{},"误":{"docs":{},"是":{"docs":{},"已":{"docs":{},"知":{"docs":{},"变":{"docs":{},"量":{"docs":{},"或":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"请":{"docs":{},"将":{"docs":{},"其":{"docs":{},"作":{"docs":{},"为":{"docs":{},"函":{"docs":{},"数":{"docs":{},"契":{"docs":{},"约":{"docs":{},"的":{"docs":{},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},"进":{"docs":{},"行":{"docs":{},"记":{"docs":{},"录":{"docs":{},"和":{"docs":{},"测":{"docs":{},"试":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"任":{"docs":{},"意":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}},"数":{"docs":{},"组":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}},"很":{"docs":{},"多":{"docs":{},"需":{"docs":{},"要":{"docs":{},"重":{"docs":{},"复":{"docs":{},"分":{"docs":{},"配":{"docs":{},"、":{"docs":{},"回":{"docs":{},"收":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"地":{"docs":{},"方":{"docs":{},",":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"两":{"docs":{},"个":{"docs":{},"值":{"docs":{},"进":{"docs":{},"行":{"docs":{},"判":{"docs":{},"断":{"docs":{},"时":{"docs":{},",":{"docs":{},"被":{"docs":{},"比":{"docs":{},"较":{"docs":{},"的":{"docs":{},"值":{"docs":{},"放":{"docs":{},"在":{"docs":{},"左":{"docs":{},"边":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}},"外":{"docs":{},"部":{"docs":{},"系":{"docs":{},"统":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}},"整":{"docs":{},"数":{"docs":{},"采":{"docs":{},"用":{"docs":{},"的":{"docs":{},"便":{"docs":{},"是":{"docs":{},"这":{"docs":{},"种":{"docs":{},"编":{"docs":{},"码":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}},"齐":{"docs":{},"系":{"docs":{},"数":{"docs":{},"决":{"docs":{},"定":{"docs":{},"了":{"docs":{},"字":{"docs":{},"段":{"docs":{},"的":{"docs":{},"偏":{"docs":{},"移":{"docs":{},"和":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"大":{"docs":{},"小":{"docs":{},",":{"docs":{},"两":{"docs":{},"者":{"docs":{},"必":{"docs":{},"须":{"docs":{},"是":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"系":{"docs":{},"数":{"docs":{},"的":{"docs":{},"整":{"docs":{},"数":{"docs":{},"倍":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"象":{"docs":{},"池":{"docs":{},",":{"docs":{},"每":{"docs":{},"次":{"docs":{},"只":{"docs":{},"执":{"docs":{},"行":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}},"能":{"docs":{},"够":{"docs":{},"极":{"docs":{},"大":{"docs":{},"地":{"docs":{},"提":{"docs":{},"升":{"docs":{},"性":{"docs":{},"能":{"docs":{},",":{"docs":{},"减":{"docs":{},"少":{"docs":{},"内":{"docs":{},"存":{"docs":{},"占":{"docs":{},"用":{"docs":{},",":{"docs":{},"同":{"docs":{},"时":{"docs":{},"降":{"docs":{},"低":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"重":{"docs":{},"复":{"docs":{},"创":{"docs":{},"建":{"docs":{},"与":{"docs":{},"回":{"docs":{},"收":{"docs":{},"内":{"docs":{},"存":{"docs":{},",":{"docs":{},"来":{"docs":{},"看":{"docs":{},"看":{"docs":{},"对":{"docs":{},"性":{"docs":{},"能":{"docs":{},"的":{"docs":{},"提":{"docs":{},"升":{"docs":{},"效":{"docs":{},"果":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}}}}},"单":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"就":{"docs":{},"近":{"docs":{},"申":{"docs":{},"明":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"没":{"docs":{},"有":{"docs":{},"区":{"docs":{},"别":{"docs":{},"了":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"想":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}},"能":{"docs":{},"搞":{"docs":{},"定":{"docs":{},"了":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"地":{"docs":{},"在":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"时":{"docs":{},"提":{"docs":{},"供":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}},"避":{"docs":{},"免":{"docs":{},"在":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}},"避":{"docs":{},"免":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"在":{"docs":{},"与":{"docs":{},"外":{"docs":{},"部":{"docs":{},"系":{"docs":{},"统":{"docs":{},"交":{"docs":{},"互":{"docs":{},"中":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}},"量":{"docs":{},"不":{"docs":{},"要":{"docs":{},"用":{"docs":{},"拼":{"docs":{},"音":{"docs":{},"命":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"采":{"docs":{},"取":{"docs":{},"有":{"docs":{},"意":{"docs":{},"义":{"docs":{},"、":{"docs":{},"简":{"docs":{},"短":{"docs":{},"的":{"docs":{},"包":{"docs":{},"名":{"docs":{},",":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"不":{"docs":{},"要":{"docs":{},"和":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{},"冲":{"docs":{},"突":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}},"用":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"值":{"docs":{},"传":{"docs":{},"递":{"docs":{},",":{"docs":{},"非":{"docs":{},"指":{"docs":{},"针":{"docs":{},"传":{"docs":{},"递":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}},"早":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"管":{"docs":{},"这":{"docs":{},"在":{"docs":{},"实":{"docs":{},"践":{"docs":{},"中":{"docs":{},"并":{"docs":{},"不":{"docs":{},"成":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"但":{"docs":{},"请":{"docs":{},"记":{"docs":{},"住":{"docs":{},",":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}},"编":{"docs":{},"写":{"docs":{},"这":{"docs":{},"些":{"docs":{},"委":{"docs":{},"托":{"docs":{},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{},"乏":{"docs":{},"味":{"docs":{},"的":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"额":{"docs":{},"外":{"docs":{},"的":{"docs":{},"工":{"docs":{},"作":{"docs":{},"隐":{"docs":{},"藏":{"docs":{},"了":{"docs":{},"实":{"docs":{},"现":{"docs":{},"细":{"docs":{},"节":{"docs":{},",":{"docs":{},"留":{"docs":{},"下":{"docs":{},"了":{"docs":{},"更":{"docs":{},"多":{"docs":{},"的":{"docs":{},"更":{"docs":{},"改":{"docs":{},"机":{"docs":{},"会":{"docs":{},",":{"docs":{},"还":{"docs":{},"消":{"docs":{},"除":{"docs":{},"了":{"docs":{},"在":{"docs":{},"未":{"docs":{},"能":{"docs":{},"描":{"docs":{},"述":{"docs":{},"出":{"docs":{},"潜":{"docs":{},"在":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"模":{"docs":{},"糊":{"docs":{},"文":{"docs":{},"档":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"使":{"docs":{},"用":{"docs":{},"短":{"docs":{},"变":{"docs":{},"量":{"docs":{},"声":{"docs":{},"明":{"docs":{},"形":{"docs":{},"式":{"docs":{},"(":{"docs":{},":":{"docs":{},"=":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}},"已":{"docs":{},"经":{"docs":{},"明":{"docs":{},"确":{"docs":{},"了":{"docs":{},"返":{"docs":{},"回":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"我":{"docs":{},"们":{"docs":{},"没":{"docs":{},"有":{"docs":{},"必":{"docs":{},"要":{"docs":{},"显":{"docs":{},"式":{"docs":{},"指":{"docs":{},"定":{"docs":{},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"无":{"docs":{},"法":{"docs":{},"继":{"docs":{},"续":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"而":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"是":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"一":{"docs":{},"个":{"docs":{},"有":{"docs":{},"效":{"docs":{},"的":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},"长":{"docs":{},"度":{"docs":{},"为":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}},"值":{"docs":{},",":{"docs":{},"而":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}},"实":{"docs":{},"体":{"docs":{},"列":{"docs":{},"表":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.023668639053254437}}}}}}},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"类":{"docs":{},"型":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}},"很":{"docs":{},"好":{"docs":{},"的":{"docs":{},"选":{"docs":{},"择":{"docs":{},"。":{"docs":{},"频":{"docs":{},"繁":{"docs":{},"地":{"docs":{},"分":{"docs":{},"配":{"docs":{},"、":{"docs":{},"回":{"docs":{},"收":{"docs":{},"内":{"docs":{},"存":{"docs":{},"会":{"docs":{},"给":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}},"更":{"docs":{},"合":{"docs":{},"适":{"docs":{},"的":{"docs":{},"名":{"docs":{},"字":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}},"简":{"docs":{},"单":{"docs":{},"易":{"docs":{},"用":{"docs":{},"的":{"docs":{},"高":{"docs":{},"性":{"docs":{},"能":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}},"比":{"docs":{},"较":{"docs":{},"好":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}},"种":{"docs":{},"使":{"docs":{},"用":{"docs":{},"可":{"docs":{},"变":{"docs":{},"字":{"docs":{},"节":{"docs":{},"表":{"docs":{},"示":{"docs":{},"整":{"docs":{},"数":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"。":{"docs":{},"其":{"docs":{},"中":{"docs":{},"数":{"docs":{},"值":{"docs":{},"本":{"docs":{},"身":{"docs":{},"越":{"docs":{},"小":{"docs":{},",":{"docs":{},"其":{"docs":{},"所":{"docs":{},"占":{"docs":{},"用":{"docs":{},"的":{"docs":{},"字":{"docs":{},"节":{"docs":{},"数":{"docs":{},"越":{"docs":{},"少":{"docs":{},"。":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"级":{"docs":{},"联":{"docs":{},"失":{"docs":{},"败":{"docs":{},"(":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"c":{"docs":{},"a":{"docs":{},"d":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}},"属":{"docs":{},"性":{"docs":{},"数":{"docs":{},"据":{"docs":{},"层":{"docs":{},"操":{"docs":{},"作":{"docs":{},"类":{"docs":{},"的":{"docs":{},"工":{"docs":{},"厂":{"docs":{},"方":{"docs":{},"法":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}},"否":{"docs":{},"符":{"docs":{},"合":{"docs":{},"标":{"docs":{},"准":{"docs":{},"等":{"docs":{},"。":{"docs":{},"编":{"docs":{},"译":{"docs":{},"前":{"docs":{},"先":{"docs":{},"执":{"docs":{},"行":{"docs":{},"代":{"docs":{},"码":{"docs":{},"静":{"docs":{},"态":{"docs":{},"分":{"docs":{},"析":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}},"无":{"docs":{},"法":{"docs":{},"捕":{"docs":{},"当":{"docs":{},"前":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}},"缓":{"docs":{},"冲":{"docs":{},"的":{"docs":{},",":{"docs":{},"其":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517}}}}}}}},"有":{"docs":{},"效":{"docs":{},"的":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":3.333333333333333}},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"指":{"docs":{},"向":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}},"大":{"docs":{},"小":{"docs":{},"提":{"docs":{},"示":{"docs":{},"创":{"docs":{},"建":{"docs":{},"的":{"docs":{},";":{"docs":{},"在":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"有":{"docs":{},"更":{"docs":{},"少":{"docs":{},"的":{"docs":{},"分":{"docs":{},"配":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}}}}}}}}},"区":{"docs":{},"别":{"docs":{},"的":{"docs":{},",":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}},"几":{"docs":{},"秒":{"docs":{},"钟":{"docs":{},"还":{"docs":{},"是":{"docs":{},"几":{"docs":{},"毫":{"docs":{},"秒":{"docs":{},"?":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}},"各":{"docs":{},"种":{"docs":{},"实":{"docs":{},"体":{"docs":{},"列":{"docs":{},"表":{"docs":{},"的":{"docs":{},"通":{"docs":{},"用":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}},"不":{"docs":{},"确":{"docs":{},"定":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"会":{"docs":{},"发":{"docs":{},"生":{"docs":{},"变":{"docs":{},"量":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"触":{"docs":{},"发":{"docs":{},"堆":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"分":{"docs":{},"配":{"docs":{},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{},",":{"docs":{},"可":{"docs":{},"预":{"docs":{},"见":{"docs":{},"的":{"docs":{},"是":{"docs":{},"当":{"docs":{},"元":{"docs":{},"素":{"docs":{},"数":{"docs":{},"量":{"docs":{},"增":{"docs":{},"加":{"docs":{},"时":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"会":{"docs":{},"越":{"docs":{},"来":{"docs":{},"大":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"占":{"docs":{},"用":{"docs":{},"内":{"docs":{},"存":{"docs":{},"空":{"docs":{},"间":{"docs":{},",":{"docs":{},"不":{"docs":{},"像":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}},"在":{"docs":{},"没":{"docs":{},"有":{"docs":{},"大":{"docs":{},"小":{"docs":{},"提":{"docs":{},"示":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"创":{"docs":{},"建":{"docs":{},"的":{"docs":{},";":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"默":{"docs":{},"认":{"docs":{},"是":{"docs":{},"已":{"docs":{},"经":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"的":{"docs":{},",":{"docs":{},"从":{"docs":{},"第":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}}}}}}}}}}}}}}}},"三":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"倍":{"docs":{},"数":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}}}}}}}}}},"二":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"倍":{"docs":{},"数":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"系":{"docs":{},"数":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}},"可":{"docs":{},"伸":{"docs":{},"缩":{"docs":{},"的":{"docs":{},",":{"docs":{},"同":{"docs":{},"时":{"docs":{},"也":{"docs":{},"是":{"docs":{},"并":{"docs":{},"发":{"docs":{},"安":{"docs":{},"全":{"docs":{},"的":{"docs":{},",":{"docs":{},"其":{"docs":{},"容":{"docs":{},"量":{"docs":{},"仅":{"docs":{},"受":{"docs":{},"限":{"docs":{},"于":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"大":{"docs":{},"小":{"docs":{},"。":{"docs":{},"存":{"docs":{},"放":{"docs":{},"在":{"docs":{},"池":{"docs":{},"中":{"docs":{},"的":{"docs":{},"对":{"docs":{},"象":{"docs":{},"如":{"docs":{},"果":{"docs":{},"不":{"docs":{},"活":{"docs":{},"跃":{"docs":{},"了":{"docs":{},"会":{"docs":{},"被":{"docs":{},"自":{"docs":{},"动":{"docs":{},"清":{"docs":{},"理":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"由":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"只":{"docs":{},"会":{"docs":{},"被":{"docs":{},"执":{"docs":{},"行":{"docs":{},"一":{"docs":{},"次":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"为":{"docs":{},"对":{"docs":{},"象":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}},"基":{"docs":{},"于":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"/":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"用":{"docs":{},"来":{"docs":{},"协":{"docs":{},"调":{"docs":{},"想":{"docs":{},"要":{"docs":{},"访":{"docs":{},"问":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"那":{"docs":{},"些":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"显":{"docs":{},"示":{"docs":{},"指":{"docs":{},"明":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"处":{"docs":{},"理":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}},"来":{"docs":{},"代":{"docs":{},"替":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},"事":{"docs":{},"实":{"docs":{},"上":{"docs":{},",":{"docs":{},"对":{"docs":{},"于":{"docs":{},"集":{"docs":{},"合":{"docs":{},"来":{"docs":{},"说":{"docs":{},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}},"取":{"docs":{},"代":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"定":{"docs":{},"义":{"docs":{},"枚":{"docs":{},"举":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"引":{"docs":{},"入":{"docs":{},"枚":{"docs":{},"举":{"docs":{},"的":{"docs":{},"标":{"docs":{},"准":{"docs":{},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{},"声":{"docs":{},"明":{"docs":{},"一":{"docs":{},"个":{"docs":{},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"类":{"docs":{},"型":{"docs":{},"和":{"docs":{},"一":{"docs":{},"个":{"docs":{},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{},"自":{"docs":{},"增":{"docs":{},"器":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"混":{"docs":{},"淆":{"docs":{},"底":{"docs":{},"层":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"将":{"docs":{},"无":{"docs":{},"法":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"它":{"docs":{},",":{"docs":{},"但":{"docs":{},"如":{"docs":{},"果":{"docs":{},"需":{"docs":{},"要":{"docs":{},",":{"docs":{},"您":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"将":{"docs":{},"来":{"docs":{},"切":{"docs":{},"换":{"docs":{},"到":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"拼":{"docs":{},"接":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},")":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}},"回":{"docs":{},"收":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"无":{"docs":{},"休":{"docs":{},"止":{"docs":{},"地":{"docs":{},"创":{"docs":{},"建":{"docs":{},"大":{"docs":{},"量":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"由":{"docs":{},"于":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},"函":{"docs":{},"数":{"docs":{},"是":{"docs":{},"按":{"docs":{},"接":{"docs":{},"收":{"docs":{},"者":{"docs":{},"分":{"docs":{},"组":{"docs":{},"的":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"普":{"docs":{},"通":{"docs":{},"工":{"docs":{},"具":{"docs":{},"函":{"docs":{},"数":{"docs":{},"应":{"docs":{},"在":{"docs":{},"文":{"docs":{},"件":{"docs":{},"末":{"docs":{},"尾":{"docs":{},"出":{"docs":{},"现":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"单":{"docs":{},"测":{"docs":{},"文":{"docs":{},"件":{"docs":{},"内":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"都":{"docs":{},"是":{"docs":{},"不":{"docs":{},"对":{"docs":{},"外":{"docs":{},"的":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"可":{"docs":{},"导":{"docs":{},"出":{"docs":{},"函":{"docs":{},"数":{"docs":{},"可":{"docs":{},"以":{"docs":{},"没":{"docs":{},"有":{"docs":{},"注":{"docs":{},"释":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"定":{"docs":{},"义":{"docs":{},"时":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"不":{"docs":{},"要":{"docs":{},"导":{"docs":{},"出":{"docs":{},"。":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"值":{"docs":{},"从":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}}}},"两":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"构":{"docs":{},"成":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"类":{"docs":{},"型":{"docs":{},"是":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}},"申":{"docs":{},"明":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},"变":{"docs":{},"量":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"相":{"docs":{},"似":{"docs":{},"的":{"docs":{},"声":{"docs":{},"明":{"docs":{},"放":{"docs":{},"在":{"docs":{},"一":{"docs":{},"组":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}},"关":{"docs":{},"操":{"docs":{},"作":{"docs":{},"需":{"docs":{},"要":{"docs":{},"独":{"docs":{},"立":{"docs":{},"封":{"docs":{},"装":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}},"省":{"docs":{},"略":{"docs":{},"结":{"docs":{},"构":{"docs":{},"中":{"docs":{},"的":{"docs":{},"零":{"docs":{},"值":{"docs":{},"字":{"docs":{},"段":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}},"空":{"docs":{},"切":{"docs":{},"片":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"结":{"docs":{},"构":{"docs":{},"与":{"docs":{},"空":{"docs":{},"数":{"docs":{},"组":{"docs":{},"在":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}},"间":{"docs":{},"上":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}},"的":{"docs":{},"实":{"docs":{},"例":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"我":{"docs":{},"们":{"docs":{},"要":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"应":{"docs":{},"直":{"docs":{},"接":{"docs":{},"进":{"docs":{},"行":{"docs":{},"真":{"docs":{},"假":{"docs":{},"判":{"docs":{},"断":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}},"切":{"docs":{},"片":{"docs":{},",":{"docs":{},"下":{"docs":{},"标":{"docs":{},"与":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}},"断":{"docs":{},"言":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"的":{"docs":{},"单":{"docs":{},"个":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"形":{"docs":{},"式":{"docs":{},"如":{"docs":{},"果":{"docs":{},"断":{"docs":{},"言":{"docs":{},"失":{"docs":{},"败":{"docs":{},"将":{"docs":{},"产":{"docs":{},"生":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}},"名":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"换":{"docs":{},"成":{"docs":{},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{},"将":{"docs":{},"来":{"docs":{},",":{"docs":{},"该":{"docs":{},"参":{"docs":{},"数":{"docs":{},"可":{"docs":{},"以":{"docs":{},"支":{"docs":{},"持":{"docs":{},"不":{"docs":{},"仅":{"docs":{},"仅":{"docs":{},"局":{"docs":{},"限":{"docs":{},"于":{"docs":{},"两":{"docs":{},"个":{"docs":{},"状":{"docs":{},"态":{"docs":{},"(":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"e":{"docs":{},"/":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"则":{"docs":{},"名":{"docs":{},"称":{"docs":{},"应":{"docs":{},"以":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"也":{"docs":{},"会":{"docs":{},"多":{"docs":{},"占":{"docs":{},"据":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}},"为":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}},"手":{"docs":{},"动":{"docs":{},"实":{"docs":{},"现":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}},"时":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}},"呢":{"docs":{},"?":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}},"似":{"docs":{},"地":{"docs":{},",":{"docs":{},"在":{"docs":{},"了":{"docs":{},"解":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}},"的":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"值":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"和":{"docs":{},"指":{"docs":{},"针":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"来":{"docs":{},"实":{"docs":{},"现":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"在":{"docs":{},"判":{"docs":{},"断":{"docs":{},"与":{"docs":{},"接":{"docs":{},"口":{"docs":{},"是":{"docs":{},"否":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"时":{"docs":{},",":{"docs":{},"也":{"docs":{},"存":{"docs":{},"在":{"docs":{},"一":{"docs":{},"定":{"docs":{},"的":{"docs":{},"区":{"docs":{},"别":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203}},"执":{"docs":{},"行":{"docs":{},"“":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"/":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"s":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}},"非":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"记":{"docs":{},"住":{"docs":{},",":{"docs":{},"虽":{"docs":{},"然":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"读":{"docs":{},"写":{"docs":{},"安":{"docs":{},"全":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}},"一":{"docs":{},"致":{"docs":{},"(":{"docs":{},"各":{"docs":{},"占":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"锁":{"docs":{},"是":{"docs":{},"一":{"docs":{},"种":{"docs":{},"共":{"docs":{},"享":{"docs":{},"锁":{"docs":{},",":{"docs":{},"也":{"docs":{},"称":{"docs":{},"之":{"docs":{},"为":{"docs":{},"多":{"docs":{},"读":{"docs":{},"单":{"docs":{},"写":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}},"的":{"docs":{},"存":{"docs":{},"在":{"docs":{},"是":{"docs":{},"为":{"docs":{},"了":{"docs":{},"解":{"docs":{},"决":{"docs":{},"读":{"docs":{},"多":{"docs":{},"写":{"docs":{},"少":{"docs":{},"时":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"读":{"docs":{},"场":{"docs":{},"景":{"docs":{},"较":{"docs":{},"多":{"docs":{},"时":{"docs":{},",":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"可":{"docs":{},"有":{"docs":{},"效":{"docs":{},"地":{"docs":{},"减":{"docs":{},"少":{"docs":{},"锁":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"的":{"docs":{},"时":{"docs":{},"间":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"取":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}},"整":{"docs":{},"个":{"docs":{},"给":{"docs":{},"定":{"docs":{},"的":{"docs":{},"字":{"docs":{},"节":{"docs":{},"数":{"docs":{},"据":{"docs":{},"并":{"docs":{},"返":{"docs":{},"回":{"docs":{},"读":{"docs":{},"取":{"docs":{},"的":{"docs":{},"长":{"docs":{},"度":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}},"到":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"、":{"docs":{},"写":{"docs":{},"、":{"docs":{},"计":{"docs":{},"算":{"docs":{},"的":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"应":{"docs":{},"该":{"docs":{},"进":{"docs":{},"行":{"docs":{},"分":{"docs":{},"离":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}},"多":{"docs":{},"写":{"docs":{},"少":{"docs":{},"(":{"docs":{},"读":{"docs":{},"占":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"少":{"docs":{},"写":{"docs":{},"多":{"docs":{},"(":{"docs":{},"读":{"docs":{},"占":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"操":{"docs":{},"作":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}},"锁":{"docs":{},"之":{"docs":{},"间":{"docs":{},"不":{"docs":{},"互":{"docs":{},"斥":{"docs":{},",":{"docs":{},"没":{"docs":{},"有":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"读":{"docs":{},"锁":{"docs":{},"是":{"docs":{},"无":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"的":{"docs":{},",":{"docs":{},"多":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"可":{"docs":{},"以":{"docs":{},"同":{"docs":{},"时":{"docs":{},"获":{"docs":{},"得":{"docs":{},"读":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"返":{"docs":{},"回":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"一":{"docs":{},"个":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"指":{"docs":{},"定":{"docs":{},"用":{"docs":{},"户":{"docs":{},"名":{"docs":{},"的":{"docs":{},"完":{"docs":{},"整":{"docs":{},"名":{"docs":{},"称":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}},"针":{"3":{"docs":{},".":{"docs":{},"小":{"docs":{},"的":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"好":{"docs":{},"过":{"docs":{},"引":{"docs":{},"用":{"4":{"docs":{},".":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"使":{"docs":{},"用":{"docs":{},"确":{"docs":{},"定":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"5":{"docs":{},".":{"docs":{},"小":{"docs":{},"结":{"docs":{},"变":{"docs":{},"量":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"一":{"docs":{},"般":{"docs":{},"发":{"docs":{},"生":{"docs":{},"在":{"docs":{},"如":{"docs":{},"下":{"docs":{},"几":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}},"docs":{}}}}}}}}}}},"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"值":{"docs":{},"超":{"docs":{},"过":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"允":{"docs":{},"许":{"docs":{},"部":{"docs":{},"分":{"docs":{},"失":{"docs":{},"败":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}},"类":{"docs":{},"型":{"docs":{},"不":{"docs":{},"确":{"docs":{},"定":{"docs":{},"(":{"docs":{},"不":{"docs":{},"能":{"docs":{},"确":{"docs":{},"定":{"docs":{},"大":{"docs":{},"小":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}},"当":{"docs":{},"前":{"docs":{},"状":{"docs":{},"态":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}},"地":{"docs":{},"址":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"引":{"docs":{},"用":{"docs":{},"(":{"docs":{},"引":{"docs":{},"用":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"底":{"docs":{},"层":{"docs":{},"是":{"docs":{},"指":{"docs":{},"针":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}},"时":{"docs":{},",":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"无":{"docs":{},"法":{"docs":{},"确":{"docs":{},"定":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"的":{"docs":{},"具":{"docs":{},"体":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"导":{"docs":{},"致":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"到":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"。":{"docs":{},"当":{"docs":{},"发":{"docs":{},"生":{"docs":{},"了":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"申":{"docs":{},"请":{"docs":{},"与":{"docs":{},"回":{"docs":{},"收":{"docs":{},"时":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"会":{"docs":{},"差":{"docs":{},"一":{"docs":{},"点":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"读":{"docs":{},"锁":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"前":{"docs":{},",":{"docs":{},"会":{"docs":{},"重":{"docs":{},"新":{"docs":{},"上":{"docs":{},"锁":{"docs":{},"。":{"docs":{},"重":{"docs":{},"新":{"docs":{},"上":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"原":{"docs":{},"因":{"docs":{},"是":{"docs":{},"主":{"docs":{},"调":{"docs":{},"在":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}},"避":{"docs":{},"免":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"内":{"docs":{},"置":{"docs":{},"名":{"docs":{},"称":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"参":{"docs":{},"数":{"docs":{},"语":{"docs":{},"义":{"docs":{},"不":{"docs":{},"明":{"docs":{},"确":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}},"重":{"docs":{},"复":{"docs":{},"执":{"docs":{},"行":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":3.333333333333333}}}}}}}},"长":{"docs":{},"度":{"docs":{},"为":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"或":{"docs":{},"容":{"docs":{},"量":{"docs":{},"不":{"docs":{},"定":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}},"非":{"docs":{},"零":{"docs":{},"值":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"导":{"docs":{},"出":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"比":{"docs":{},"较":{"docs":{},"简":{"docs":{},"单":{"docs":{},",":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}},"缩":{"docs":{},"略":{"docs":{},"语":{"docs":{},"则":{"docs":{},"应":{"docs":{},"该":{"docs":{},"使":{"docs":{},"用":{"docs":{},"驼":{"docs":{},"峰":{"docs":{},"命":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}},"顺":{"docs":{},"序":{"docs":{},"是":{"docs":{},"明":{"docs":{},"确":{"docs":{},"的":{"docs":{},",":{"docs":{},"但":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"以":{"docs":{},"更":{"docs":{},"改":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}},"(":{"1":{"docs":{},")":{"docs":{},"不":{"docs":{},"能":{"docs":{},"表":{"docs":{},"示":{"docs":{},"为":{"docs":{},"单":{"docs":{},"个":{"docs":{},"赋":{"docs":{},"值":{"docs":{},"的":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"表":{"docs":{},"达":{"docs":{},"式":{"docs":{},";":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}},"明":{"docs":{},"显":{"docs":{},"的":{"docs":{},"控":{"docs":{},"制":{"docs":{},"流":{"docs":{},":":{"docs":{},"任":{"docs":{},"何":{"docs":{},"函":{"docs":{},"数":{"docs":{},"都":{"docs":{},"可":{"docs":{},"以":{"docs":{},"退":{"docs":{},"出":{"docs":{},"程":{"docs":{},"序":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"很":{"docs":{},"难":{"docs":{},"对":{"docs":{},"控":{"docs":{},"制":{"docs":{},"流":{"docs":{},"进":{"docs":{},"行":{"docs":{},"推":{"docs":{},"理":{"docs":{},";":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"您":{"docs":{},"不":{"docs":{},"应":{"docs":{},"明":{"docs":{},"确":{"docs":{},"返":{"docs":{},"回":{"docs":{},"长":{"docs":{},"度":{"docs":{},"为":{"docs":{},"零":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},"。":{"docs":{},"应":{"docs":{},"该":{"docs":{},"返":{"docs":{},"回":{"docs":{},"n":{"docs":{},"i":{"docs":{},"l":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}},"无":{"docs":{},"论":{"docs":{},"程":{"docs":{},"序":{"docs":{},"环":{"docs":{},"境":{"docs":{},"或":{"docs":{},"调":{"docs":{},"用":{"docs":{},"如":{"docs":{},"何":{"docs":{},",":{"docs":{},"行":{"docs":{},"为":{"docs":{},"都":{"docs":{},"必":{"docs":{},"须":{"docs":{},"是":{"docs":{},"完":{"docs":{},"全":{"docs":{},"确":{"docs":{},"定":{"docs":{},"的":{"docs":{},";":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}},"锁":{"docs":{},"单":{"docs":{},"向":{"docs":{},"链":{"docs":{},"表":{"docs":{},"实":{"docs":{},"现":{"docs":{},"时":{"docs":{},"在":{"docs":{},"插":{"docs":{},"入":{"docs":{},"时":{"docs":{},"需":{"docs":{},"要":{"docs":{},"进":{"docs":{},"行":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"指":{"docs":{},"向":{"docs":{},"某":{"docs":{},"些":{"docs":{},"特":{"docs":{},"定":{"docs":{},"类":{"docs":{},"型":{"docs":{},"信":{"docs":{},"息":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},";":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}},"导":{"docs":{},"出":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"部":{"docs":{},"分":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}},"如":{"docs":{},"果":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"应":{"docs":{},"该":{"docs":{},"可":{"docs":{},"以":{"docs":{},"访":{"docs":{},"问":{"docs":{},"底":{"docs":{},"层":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"请":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"是":{"docs":{},"否":{"docs":{},"需":{"docs":{},"要":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"错":{"docs":{},"误":{"docs":{},"以":{"docs":{},"便":{"docs":{},"他":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"处":{"docs":{},"理":{"docs":{},"它":{"docs":{},"?":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}},"返":{"docs":{},"回":{"docs":{},"原":{"docs":{},"始":{"docs":{},"错":{"docs":{},"误":{"docs":{},";":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}},"向":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"接":{"docs":{},"口":{"docs":{},"添":{"docs":{},"加":{"docs":{},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"破":{"docs":{},"坏":{"docs":{},"性":{"docs":{},"的":{"docs":{},"改":{"docs":{},"变":{"docs":{},";":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}},"2":{"docs":{},")":{"docs":{},"可":{"docs":{},"插":{"docs":{},"入":{"docs":{},"的":{"docs":{},"钩":{"docs":{},"子":{"docs":{},",":{"docs":{},"如":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}},"要":{"docs":{},"检":{"docs":{},"查":{"docs":{},"切":{"docs":{},"片":{"docs":{},"是":{"docs":{},"否":{"docs":{},"为":{"docs":{},"空":{"docs":{},",":{"docs":{},"请":{"docs":{},"始":{"docs":{},"终":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}},"避":{"docs":{},"免":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"其":{"docs":{},"他":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}},"难":{"docs":{},"以":{"docs":{},"测":{"docs":{},"试":{"docs":{},":":{"docs":{},"退":{"docs":{},"出":{"docs":{},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"也":{"docs":{},"将":{"docs":{},"退":{"docs":{},"出":{"docs":{},"调":{"docs":{},"用":{"docs":{},"它":{"docs":{},"的":{"docs":{},"测":{"docs":{},"试":{"docs":{},",":{"docs":{},"这":{"docs":{},"使":{"docs":{},"得":{"docs":{},"函":{"docs":{},"数":{"docs":{},"很":{"docs":{},"难":{"docs":{},"测":{"docs":{},"试":{"docs":{},",":{"docs":{},"并":{"docs":{},"跳":{"docs":{},"过":{"docs":{},"了":{"docs":{},"尚":{"docs":{},"未":{"docs":{},"被":{"docs":{},"运":{"docs":{},"行":{"docs":{},"的":{"docs":{},"其":{"docs":{},"他":{"docs":{},"代":{"docs":{},"码":{"docs":{},";":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"指":{"docs":{},"向":{"docs":{},"具":{"docs":{},"体":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"存":{"docs":{},"储":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"是":{"docs":{},"指":{"docs":{},"针":{"docs":{},",":{"docs":{},"则":{"docs":{},"直":{"docs":{},"接":{"docs":{},"存":{"docs":{},"储":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"存":{"docs":{},"储":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"值":{"docs":{},",":{"docs":{},"则":{"docs":{},"存":{"docs":{},"储":{"docs":{},"指":{"docs":{},"向":{"docs":{},"该":{"docs":{},"值":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"导":{"docs":{},"出":{"docs":{},"或":{"docs":{},"非":{"docs":{},"导":{"docs":{},"出":{"docs":{},"类":{"docs":{},"型":{"docs":{},"实":{"docs":{},"现":{"docs":{},"了":{"docs":{},"接":{"docs":{},"口":{"docs":{},"且":{"docs":{},"属":{"docs":{},"于":{"docs":{},"某":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},"(":{"docs":{},"匿":{"docs":{},"名":{"docs":{},"嵌":{"docs":{},"套":{"docs":{},")":{"docs":{},";":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}},"错":{"docs":{},"误":{"docs":{},"消":{"docs":{},"息":{"docs":{},"是":{"docs":{},"否":{"docs":{},"为":{"docs":{},"静":{"docs":{},"态":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},",":{"docs":{},"还":{"docs":{},"是":{"docs":{},"需":{"docs":{},"要":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"信":{"docs":{},"息":{"docs":{},"的":{"docs":{},"动":{"docs":{},"态":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"?":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"j":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{},":":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"/":{"docs":{},"j":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}},"从":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"删":{"docs":{},"除":{"docs":{},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"破":{"docs":{},"坏":{"docs":{},"性":{"docs":{},"的":{"docs":{},"改":{"docs":{},"变":{"docs":{},";":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}},"为":{"docs":{},"了":{"docs":{},"方":{"docs":{},"便":{"docs":{},"打":{"docs":{},"印":{"docs":{},"链":{"docs":{},"表":{"docs":{},"内":{"docs":{},"容":{"docs":{},",":{"docs":{},"实":{"docs":{},"现":{"docs":{},"一":{"docs":{},"个":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"(":{"docs":{},")":{"docs":{},"方":{"docs":{},"法":{"docs":{},"遍":{"docs":{},"历":{"docs":{},"链":{"docs":{},"表":{"docs":{},",":{"docs":{},"且":{"docs":{},"使":{"docs":{},"用":{"docs":{},"值":{"docs":{},"作":{"docs":{},"为":{"docs":{},"接":{"docs":{},"收":{"docs":{},"者":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"打":{"docs":{},"印":{"docs":{},"对":{"docs":{},"象":{"docs":{},"指":{"docs":{},"针":{"docs":{},"时":{"docs":{},"无":{"docs":{},"法":{"docs":{},"生":{"docs":{},"效":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"3":{"docs":{},")":{"docs":{},"对":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"避":{"docs":{},"免":{"docs":{},"访":{"docs":{},"问":{"docs":{},"或":{"docs":{},"操":{"docs":{},"作":{"docs":{},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},"和":{"docs":{},"环":{"docs":{},"境":{"docs":{},"状":{"docs":{},"态":{"docs":{},",":{"docs":{},"如":{"docs":{},"机":{"docs":{},"器":{"docs":{},"信":{"docs":{},"息":{"docs":{},"、":{"docs":{},"环":{"docs":{},"境":{"docs":{},"变":{"docs":{},"量":{"docs":{},"、":{"docs":{},"工":{"docs":{},"作":{"docs":{},"目":{"docs":{},"录":{"docs":{},"、":{"docs":{},"程":{"docs":{},"序":{"docs":{},"参":{"docs":{},"数":{"docs":{},"/":{"docs":{},"输":{"docs":{},"入":{"docs":{},"等":{"docs":{},";":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"零":{"docs":{},"值":{"docs":{},"切":{"docs":{},"片":{"docs":{},"(":{"docs":{},"用":{"docs":{},"v":{"docs":{},"a":{"docs":{},"r":{"docs":{},"声":{"docs":{},"明":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},")":{"docs":{},"可":{"docs":{},"立":{"docs":{},"即":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"无":{"docs":{},"需":{"docs":{},"调":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}},"跳":{"docs":{},"过":{"docs":{},"清":{"docs":{},"理":{"docs":{},":":{"docs":{},"当":{"docs":{},"函":{"docs":{},"数":{"docs":{},"退":{"docs":{},"出":{"docs":{},"程":{"docs":{},"序":{"docs":{},"时":{"docs":{},",":{"docs":{},"会":{"docs":{},"跳":{"docs":{},"过":{"docs":{},"已":{"docs":{},"经":{"docs":{},"进":{"docs":{},"入":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}},"任":{"docs":{},"何":{"docs":{},"其":{"docs":{},"他":{"docs":{},"情":{"docs":{},"况":{"docs":{},"都":{"docs":{},"违":{"docs":{},"反":{"docs":{},"接":{"docs":{},"口":{"docs":{},"合":{"docs":{},"理":{"docs":{},"性":{"docs":{},"检":{"docs":{},"查":{"docs":{},",":{"docs":{},"终":{"docs":{},"止":{"docs":{},"编":{"docs":{},"译":{"docs":{},"并":{"docs":{},"通":{"docs":{},"知":{"docs":{},"用":{"docs":{},"户":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}},"我":{"docs":{},"们":{"docs":{},"是":{"docs":{},"否":{"docs":{},"正":{"docs":{},"在":{"docs":{},"传":{"docs":{},"递":{"docs":{},"由":{"docs":{},"下":{"docs":{},"游":{"docs":{},"函":{"docs":{},"数":{"docs":{},"返":{"docs":{},"回":{"docs":{},"的":{"docs":{},"新":{"docs":{},"错":{"docs":{},"误":{"docs":{},"?":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"q":{"docs":{},"l":{"docs":{},":":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"/":{"docs":{},"s":{"docs":{},"q":{"docs":{},"l":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}},"删":{"docs":{},"除":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"类":{"docs":{},"型":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"破":{"docs":{},"坏":{"docs":{},"性":{"docs":{},"的":{"docs":{},"改":{"docs":{},"变":{"docs":{},";":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}},"4":{"docs":{},")":{"docs":{},"避":{"docs":{},"免":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"y":{"docs":{},"a":{"docs":{},"m":{"docs":{},"l":{"docs":{},":":{"docs":{},"g":{"docs":{},"o":{"docs":{},"p":{"docs":{},"k":{"docs":{},"g":{"docs":{},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"y":{"docs":{},"a":{"docs":{},"m":{"docs":{},"l":{"docs":{},".":{"docs":{},"v":{"2":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"docs":{}}}}}}}}}}}}}}}}}}}}},"即":{"docs":{},"使":{"docs":{},"使":{"docs":{},"用":{"docs":{},"满":{"docs":{},"足":{"docs":{},"相":{"docs":{},"同":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"替":{"docs":{},"换":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"也":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"破":{"docs":{},"坏":{"docs":{},"性":{"docs":{},"的":{"docs":{},"改":{"docs":{},"变":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"*":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.013605442176870748},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"/":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}},")":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},",":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009}}}},"a":{"docs":{},"t":{"docs":{},"t":{"docs":{},"r":{"docs":{},"m":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}},"b":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.011834319526627219}},")":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.011834319526627219}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},")":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}},"n":{"docs":{},"c":{"docs":{},"r":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.023668639053254437}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0066518847006651885}}}}},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}}}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"o":{"docs":{},"l":{"docs":{},"v":{"docs":{},"e":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}},"w":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.00510204081632653}}}}}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.029411764705882353}}}}}},"s":{"2":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}},"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.006802721088435374}}}}}}}}}}},"t":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"a":{"docs":{},"t":{"docs":{},"s":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}},")":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}}}}}},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}},")":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"w":{"docs":{},"a":{"docs":{},"i":{"docs":{},"t":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"t":{"docs":{},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.018404907975460124},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}},"b":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.00683371298405467},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"_":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}},"i":{"docs":{},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}},"e":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.0196078431372549}}},")":{"docs":{},"、":{"docs":{},"切":{"docs":{},"片":{"docs":{},"和":{"docs":{},"映":{"docs":{},"射":{"docs":{},"是":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353}}}}}}}}}}}}}}},"z":{"docs":{},"a":{"docs":{},"p":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}},"[":{"docs":{},"]":{"docs":{},"*":{"docs":{},"b":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}},"d":{"docs":{},"r":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}},"b":{"docs":{},".":{"docs":{},"r":{"docs":{},"o":{"docs":{},"w":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"p":{"docs":{},"p":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"f":{"docs":{},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}}}},"值":{"docs":{},"将":{"docs":{},"引":{"docs":{},"发":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"好":{"docs":{},"很":{"docs":{},"多":{"docs":{},"。":{"docs":{},"从":{"docs":{},"这":{"docs":{},"里":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"能":{"docs":{},"够":{"docs":{},"知":{"docs":{},"道":{"docs":{},"二":{"docs":{},"者":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"别":{"docs":{},"之":{"docs":{},"大":{"docs":{},"的":{"docs":{},"原":{"docs":{},"因":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"传":{"docs":{},"递":{"docs":{},"会":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"整":{"docs":{},"个":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"而":{"docs":{},"指":{"docs":{},"针":{"docs":{},"传":{"docs":{},"递":{"docs":{},"只":{"docs":{},"会":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"指":{"docs":{},"向":{"docs":{},"的":{"docs":{},"对":{"docs":{},"象":{"docs":{},"是":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"。":{"docs":{},"传":{"docs":{},"指":{"docs":{},"针":{"docs":{},"可":{"docs":{},"以":{"docs":{},"减":{"docs":{},"少":{"docs":{},"值":{"docs":{},"的":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"到":{"docs":{},"堆":{"docs":{},"中":{"docs":{},",":{"docs":{},"增":{"docs":{},"加":{"docs":{},"垃":{"docs":{},"圾":{"docs":{},"回":{"docs":{},"收":{"docs":{},"(":{"docs":{},"g":{"docs":{},"c":{"docs":{},")":{"docs":{},"的":{"docs":{},"负":{"docs":{},"担":{"docs":{},"。":{"docs":{},"在":{"docs":{},"对":{"docs":{},"象":{"docs":{},"频":{"docs":{},"繁":{"docs":{},"创":{"docs":{},"建":{"docs":{},"和":{"docs":{},"删":{"docs":{},"除":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},",":{"docs":{},"返":{"docs":{},"回":{"docs":{},"指":{"docs":{},"针":{"docs":{},"导":{"docs":{},"致":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"原":{"docs":{},"则":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"切":{"docs":{},"片":{"docs":{},"长":{"docs":{},"度":{"docs":{},"为":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}}}}}}},"子":{"docs":{},"操":{"docs":{},"作":{"docs":{},"(":{"docs":{},"如":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"块":{"docs":{},"内":{"docs":{},",":{"docs":{},"读":{"docs":{},"取":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}},"注":{"docs":{},"释":{"docs":{},"即":{"docs":{},"在":{"docs":{},"代":{"docs":{},"码":{"docs":{},"块":{"docs":{},"前":{"docs":{},"给":{"docs":{},"出":{"docs":{},"一":{"docs":{},"个":{"docs":{},"总":{"docs":{},"的":{"docs":{},"说":{"docs":{},"明":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"每":{"docs":{},"行":{"docs":{},"变":{"docs":{},"量":{"docs":{},"或":{"docs":{},"常":{"docs":{},"量":{"docs":{},"的":{"docs":{},"末":{"docs":{},"尾":{"docs":{},"给":{"docs":{},"出":{"docs":{},"详":{"docs":{},"细":{"docs":{},"注":{"docs":{},"释":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"看":{"docs":{},"起":{"docs":{},"来":{"docs":{},"更":{"docs":{},"加":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"处":{"docs":{},"理":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.005836575875486381}},"p":{"docs":{},"a":{"docs":{},"n":{"docs":{},"i":{"docs":{},"c":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"v":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}},"类":{"docs":{},"型":{"docs":{},"断":{"docs":{},"言":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}},"。":{"docs":{},"在":{"docs":{},"知":{"docs":{},"道":{"docs":{},"常":{"docs":{},"见":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"场":{"docs":{},"景":{"docs":{},"后":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"在":{"docs":{},"编":{"docs":{},"码":{"docs":{},"时":{"docs":{},"可":{"docs":{},"以":{"docs":{},"有":{"docs":{},"意":{"docs":{},"识":{"docs":{},"地":{"docs":{},"避":{"docs":{},"免":{"docs":{},"变":{"docs":{},"量":{"docs":{},"发":{"docs":{},"生":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"地":{"docs":{},"使":{"docs":{},"用":{"docs":{},"栈":{"docs":{},"空":{"docs":{},"间":{"docs":{},",":{"docs":{},"而":{"docs":{},"非":{"docs":{},"堆":{"docs":{},"空":{"docs":{},"间":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"函":{"docs":{},"数":{"docs":{},"返":{"docs":{},"回":{"docs":{},"后":{"docs":{},"就":{"docs":{},"会":{"docs":{},"直":{"docs":{},"接":{"docs":{},"释":{"docs":{},"放":{"docs":{},",":{"docs":{},"而":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"分":{"docs":{},"配":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"使":{"docs":{},"用":{"docs":{},"完":{"docs":{},"毕":{"docs":{},"会":{"docs":{},"交":{"docs":{},"给":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"式":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"不":{"docs":{},"关":{"docs":{},"心":{"docs":{},"是":{"docs":{},"否":{"docs":{},"成":{"docs":{},"功":{"docs":{},",":{"docs":{},"o":{"docs":{},"k":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}},"当":{"docs":{},"y":{"docs":{},"与":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"都":{"docs":{},"为":{"docs":{},"空":{"docs":{},"时":{"docs":{},",":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"会":{"docs":{},"出":{"docs":{},"现":{"docs":{},"错":{"docs":{},"误":{"docs":{},"的":{"docs":{},"调":{"docs":{},"用":{"docs":{},"逻":{"docs":{},"辑":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}}}}}}},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{},"多":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"具":{"docs":{},"有":{"docs":{},"退":{"docs":{},"出":{"docs":{},"能":{"docs":{},"力":{"docs":{},"时":{"docs":{},"会":{"docs":{},"存":{"docs":{},"在":{"docs":{},"一":{"docs":{},"些":{"docs":{},"问":{"docs":{},"题":{"docs":{},":":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}},"存":{"docs":{},"在":{"docs":{},"资":{"docs":{},"源":{"docs":{},"管":{"docs":{},"理":{"docs":{},"时":{"docs":{},",":{"docs":{},"应":{"docs":{},"紧":{"docs":{},"跟":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}},"然":{"docs":{},",":{"docs":{},"凡":{"docs":{},"事":{"docs":{},"无":{"docs":{},"绝":{"docs":{},"对":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"需":{"docs":{},"要":{"docs":{},"修":{"docs":{},"改":{"docs":{},"接":{"docs":{},"口":{"docs":{},"变":{"docs":{},"量":{"docs":{},"本":{"docs":{},"身":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"应":{"docs":{},"该":{"docs":{},"使":{"docs":{},"用":{"docs":{},"指":{"docs":{},"向":{"docs":{},"接":{"docs":{},"口":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},",":{"docs":{},"当":{"docs":{},"然":{"docs":{},"你":{"docs":{},"必":{"docs":{},"须":{"docs":{},"清":{"docs":{},"楚":{"docs":{},"自":{"docs":{},"己":{"docs":{},"在":{"docs":{},"干":{"docs":{},"什":{"docs":{},"么":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"枚":{"docs":{},"举":{"docs":{},"值":{"docs":{},"为":{"docs":{},"零":{"docs":{},"是":{"docs":{},"有":{"docs":{},"意":{"docs":{},"义":{"docs":{},"的":{"docs":{},",":{"docs":{},"如":{"docs":{},"当":{"docs":{},"零":{"docs":{},"值":{"docs":{},"是":{"docs":{},"理":{"docs":{},"想":{"docs":{},"的":{"docs":{},"默":{"docs":{},"认":{"docs":{},"行":{"docs":{},"为":{"docs":{},"时":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"多":{"docs":{},"个":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125}}}}},"不":{"docs":{},"能":{"docs":{},"在":{"docs":{},"这":{"docs":{},"些":{"docs":{},"交":{"docs":{},"互":{"docs":{},"中":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}},"在":{"docs":{},"这":{"docs":{},"些":{"docs":{},"交":{"docs":{},"互":{"docs":{},"中":{"docs":{},"不":{"docs":{},"能":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{},"反":{"docs":{},"射":{"docs":{},"时":{"docs":{},",":{"docs":{},"请":{"docs":{},"问":{"docs":{},"一":{"docs":{},"下":{"docs":{},"自":{"docs":{},"己":{"docs":{},",":{"docs":{},"我":{"docs":{},"真":{"docs":{},"地":{"docs":{},"需":{"docs":{},"要":{"docs":{},"它":{"docs":{},"吗":{"docs":{},"?":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}},"创":{"docs":{},"建":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"且":{"docs":{},"仅":{"docs":{},"当":{"docs":{},"第":{"docs":{},"一":{"docs":{},"次":{"docs":{},"访":{"docs":{},"问":{"docs":{},"某":{"docs":{},"个":{"docs":{},"变":{"docs":{},"量":{"docs":{},"时":{"docs":{},",":{"docs":{},"进":{"docs":{},"行":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"(":{"docs":{},"写":{"docs":{},")":{"docs":{},";":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}},"捕":{"docs":{},"获":{"docs":{},"最":{"docs":{},"晚":{"docs":{},"要":{"docs":{},"在":{"docs":{},"当":{"docs":{},"前":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}},"用":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},"于":{"docs":{},"捕":{"docs":{},"获":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"获":{"docs":{},"取":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"系":{"docs":{},"数":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}},"从":{"docs":{},"对":{"docs":{},"象":{"docs":{},"池":{"docs":{},"中":{"docs":{},"获":{"docs":{},"取":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}},"阻":{"docs":{},"塞":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},",":{"docs":{},"等":{"docs":{},"待":{"docs":{},"通":{"docs":{},"知":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}},"户":{"docs":{},"结":{"docs":{},"构":{"docs":{},"定":{"docs":{},"义":{"docs":{},"了":{"docs":{},"用":{"docs":{},"户":{"docs":{},"基":{"docs":{},"础":{"docs":{},"信":{"docs":{},"息":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}},"的":{"docs":{},"就":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"来":{"docs":{},"调":{"docs":{},"节":{"docs":{},"读":{"docs":{},"操":{"docs":{},"作":{"docs":{},"的":{"docs":{},"占":{"docs":{},"比":{"docs":{},",":{"docs":{},"来":{"docs":{},"模":{"docs":{},"拟":{"docs":{},"读":{"docs":{},"写":{"docs":{},"占":{"docs":{},"比":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},"。":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}},"保":{"docs":{},"证":{"docs":{},"函":{"docs":{},"数":{"docs":{},"只":{"docs":{},"执":{"docs":{},"行":{"docs":{},"一":{"docs":{},"次":{"docs":{},"。":{"docs":{},"要":{"docs":{},"达":{"docs":{},"到":{"docs":{},"这":{"docs":{},"个":{"docs":{},"效":{"docs":{},"果":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"做":{"docs":{},"到":{"docs":{},"两":{"docs":{},"点":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}},"协":{"docs":{},"调":{"docs":{},"想":{"docs":{},"要":{"docs":{},"访":{"docs":{},"问":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}},"解":{"docs":{},"决":{"docs":{},"这":{"docs":{},"类":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"程":{"docs":{},"序":{"docs":{},"将":{"docs":{},"意":{"docs":{},"外":{"docs":{},"终":{"docs":{},"止":{"docs":{},"并":{"docs":{},"输":{"docs":{},"出":{"docs":{},":":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}},"中":{"docs":{},"每":{"docs":{},"一":{"docs":{},"个":{"docs":{},"被":{"docs":{},"导":{"docs":{},"出":{"docs":{},"的":{"docs":{},"(":{"docs":{},"大":{"docs":{},"写":{"docs":{},"的":{"docs":{},")":{"docs":{},"名":{"docs":{},"字":{"docs":{},",":{"docs":{},"都":{"docs":{},"应":{"docs":{},"该":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"文":{"docs":{},"档":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"退":{"docs":{},"出":{"docs":{},"方":{"docs":{},"式":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}},"会":{"docs":{},"像":{"docs":{},"预":{"docs":{},"期":{"docs":{},"的":{"docs":{},"那":{"docs":{},"样":{"docs":{},"顺":{"docs":{},"利":{"docs":{},"的":{"docs":{},"运":{"docs":{},"行":{"docs":{},"吗":{"docs":{},"?":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}},"崩":{"docs":{},"溃":{"1":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}}},"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"串":{"docs":{},"行":{"docs":{},"执":{"docs":{},"行":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"到":{"docs":{},"运":{"docs":{},"行":{"docs":{},"结":{"docs":{},"束":{"docs":{},",":{"docs":{},"占":{"docs":{},"用":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"资":{"docs":{},"源":{"docs":{},"是":{"docs":{},"需":{"docs":{},"要":{"docs":{},"由":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}},"势":{"docs":{},"必":{"docs":{},"会":{"docs":{},"带":{"docs":{},"来":{"docs":{},"性":{"docs":{},"能":{"docs":{},"影":{"docs":{},"响":{"docs":{},",":{"docs":{},"甚":{"docs":{},"至":{"docs":{},"程":{"docs":{},"序":{"docs":{},"崩":{"docs":{},"溃":{"docs":{},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"的":{"docs":{},"控":{"docs":{},"制":{"docs":{},"协":{"docs":{},"程":{"docs":{},"数":{"docs":{},"量":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"需":{"docs":{},"要":{"docs":{},",":{"docs":{},"请":{"docs":{},"复":{"docs":{},"用":{"docs":{},"它":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"占":{"docs":{},"用":{"docs":{},"约":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"后":{"docs":{},",":{"docs":{},"势":{"docs":{},"必":{"docs":{},"会":{"docs":{},"造":{"docs":{},"成":{"docs":{},"对":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}},"数":{"docs":{},"量":{"docs":{},"越":{"docs":{},"多":{"docs":{},",":{"docs":{},"g":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}},"的":{"docs":{},"结":{"docs":{},"构":{"docs":{},"定":{"docs":{},"义":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"函":{"docs":{},"数":{"docs":{},"仍":{"docs":{},"然":{"docs":{},"只":{"docs":{},"执":{"docs":{},"行":{"docs":{},"一":{"docs":{},"次":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}},"(":{"docs":{},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},")":{"docs":{},"是":{"docs":{},"由":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}},"同":{"docs":{},"步":{"docs":{},"。":{"docs":{},"通":{"docs":{},"过":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"间":{"docs":{},"的":{"docs":{},"同":{"docs":{},"步":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},",":{"docs":{},"以":{"docs":{},"此":{"docs":{},"来":{"docs":{},"实":{"docs":{},"现":{"docs":{},"多":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"即":{"docs":{},"保":{"docs":{},"存":{"docs":{},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{},"通":{"docs":{},"知":{"docs":{},"列":{"docs":{},"表":{"docs":{},"。":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}},"被":{"docs":{},"捕":{"docs":{},"获":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"导":{"docs":{},"出":{"docs":{},"的":{"docs":{},"字":{"docs":{},"段":{"docs":{},"和":{"docs":{},"方":{"docs":{},"法":{"docs":{},"全":{"docs":{},"部":{"docs":{},"成":{"docs":{},"为":{"docs":{},"了":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}},",":{"docs":{},"在":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}},"用":{"docs":{},"于":{"docs":{},"控":{"docs":{},"制":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"读":{"docs":{},"写":{"docs":{},"满":{"docs":{},"足":{"docs":{},"如":{"docs":{},"下":{"docs":{},"三":{"docs":{},"个":{"docs":{},"条":{"docs":{},"件":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"越":{"docs":{},"界":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"抛":{"docs":{},"出":{"docs":{},"的":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}},"错":{"docs":{},"误":{"docs":{},"判":{"docs":{},"断":{"docs":{},"独":{"docs":{},"立":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"不":{"docs":{},"与":{"docs":{},"其":{"docs":{},"他":{"docs":{},"变":{"docs":{},"量":{"docs":{},"组":{"docs":{},"合":{"docs":{},"判":{"docs":{},"断":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"示":{"docs":{},"例":{"docs":{},":":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"y":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"写":{"docs":{},"成":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}},"地":{"docs":{},"使":{"docs":{},"用":{"docs":{},"接":{"docs":{},"口":{"docs":{},"会":{"docs":{},"在":{"docs":{},"编":{"docs":{},"译":{"docs":{},"期":{"docs":{},"报":{"docs":{},"错":{"docs":{},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{},"可":{"docs":{},"以":{"docs":{},"利":{"docs":{},"用":{"docs":{},"这":{"docs":{},"个":{"docs":{},"机":{"docs":{},"制":{"docs":{},"让":{"docs":{},"部":{"docs":{},"分":{"docs":{},"问":{"docs":{},"题":{"docs":{},"在":{"docs":{},"编":{"docs":{},"译":{"docs":{},"期":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"匹":{"docs":{},"配":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}},"消":{"docs":{},"息":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}},"后":{"docs":{},"面":{"docs":{},"要":{"docs":{},"有":{"docs":{},"空":{"docs":{},"格":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},",":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}},"会":{"docs":{},"进":{"docs":{},"行":{"docs":{},"解":{"docs":{},"锁":{"docs":{},"操":{"docs":{},"作":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"重":{"docs":{},"复":{"docs":{},"解":{"docs":{},"锁":{"docs":{},"引":{"docs":{},"发":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}},"命":{"docs":{},"令":{"docs":{},"行":{"docs":{},"参":{"docs":{},"数":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}},"名":{"docs":{},"清":{"docs":{},"晰":{"docs":{},"的":{"docs":{},"地":{"docs":{},"方":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"添":{"docs":{},"加":{"docs":{},"无":{"docs":{},"意":{"docs":{},"义":{"docs":{},"的":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{},"类":{"docs":{},"型":{"docs":{},"注":{"docs":{},"释":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}},"不":{"docs":{},"能":{"docs":{},"采":{"docs":{},"用":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"规":{"docs":{},"则":{"docs":{},"基":{"docs":{},"本":{"docs":{},"保":{"docs":{},"持":{"docs":{},"和":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"命":{"docs":{},"名":{"docs":{},"规":{"docs":{},"则":{"docs":{},"一":{"docs":{},"致":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}},"大":{"docs":{},"块":{"docs":{},"变":{"docs":{},"量":{"docs":{},"或":{"docs":{},"常":{"docs":{},"量":{"docs":{},"定":{"docs":{},"义":{"docs":{},"时":{"docs":{},"的":{"docs":{},"注":{"docs":{},"释":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}},"部":{"docs":{},"分":{"docs":{},"业":{"docs":{},"务":{"docs":{},"场":{"docs":{},"景":{"docs":{},"是":{"docs":{},"读":{"docs":{},"多":{"docs":{},"写":{"docs":{},"少":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"可":{"docs":{},"有":{"docs":{},"效":{"docs":{},"提":{"docs":{},"高":{"docs":{},"对":{"docs":{},"共":{"docs":{},"享":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},"访":{"docs":{},"问":{"docs":{},"效":{"docs":{},"率":{"docs":{},"。":{"docs":{},"最":{"docs":{},"坏":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"只":{"docs":{},"有":{"docs":{},"写":{"docs":{},"请":{"docs":{},"求":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"顶":{"docs":{},"多":{"docs":{},"退":{"docs":{},"化":{"docs":{},"成":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{},"优":{"docs":{},"先":{"docs":{},"使":{"docs":{},"用":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"而":{"docs":{},"非":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"提":{"docs":{},"高":{"docs":{},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"所":{"docs":{},"有":{"docs":{},"注":{"docs":{},"释":{"docs":{},"掉":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"在":{"docs":{},"提":{"docs":{},"交":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}},"以":{"docs":{},"如":{"docs":{},"果":{"docs":{},"对":{"docs":{},"性":{"docs":{},"能":{"docs":{},"要":{"docs":{},"求":{"docs":{},"非":{"docs":{},"常":{"docs":{},"严":{"docs":{},"格":{"docs":{},",":{"docs":{},"或":{"docs":{},"待":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"的":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"数":{"docs":{},"量":{"docs":{},"足":{"docs":{},"够":{"docs":{},"多":{"docs":{},"时":{"docs":{},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"谓":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},",":{"docs":{},"指":{"docs":{},"锁":{"docs":{},"只":{"docs":{},"能":{"docs":{},"被":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}},"接":{"docs":{},"口":{"docs":{},"注":{"docs":{},"释":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"收":{"docs":{},"器":{"docs":{},"的":{"docs":{},"名":{"docs":{},"称":{"docs":{},"在":{"docs":{},"函":{"docs":{},"数":{"docs":{},"超":{"docs":{},"过":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"为":{"docs":{},"值":{"docs":{},"和":{"docs":{},"指":{"docs":{},"针":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"在":{"docs":{},"调":{"docs":{},"用":{"docs":{},"方":{"docs":{},"式":{"docs":{},"上":{"docs":{},"是":{"docs":{},"有":{"docs":{},"区":{"docs":{},"别":{"docs":{},"的":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}}}}}}}}}}}}},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"接":{"docs":{},"收":{"docs":{},"完":{"docs":{},"成":{"docs":{},"后":{"docs":{},",":{"docs":{},"将":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}},"受":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"语":{"docs":{},"句":{"docs":{},",":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"缩":{"docs":{},"小":{"docs":{},"变":{"docs":{},"量":{"docs":{},"作":{"docs":{},"用":{"docs":{},"域":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}}}}}}}}}}}}}}}}},"下":{"docs":{},"来":{"docs":{},"逐":{"docs":{},"个":{"docs":{},"分":{"docs":{},"析":{"docs":{},",":{"docs":{},"首":{"docs":{},"先":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"测":{"docs":{},"试":{"docs":{},"三":{"docs":{},"种":{"docs":{},"情":{"docs":{},"景":{"docs":{},"下":{"docs":{},",":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"和":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"描":{"docs":{},"述":{"docs":{},"\"":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},",":{"docs":{},"斜":{"docs":{},"线":{"docs":{},"后":{"docs":{},"面":{"docs":{},"紧":{"docs":{},"跟":{"docs":{},"一":{"docs":{},"个":{"docs":{},"空":{"docs":{},"格":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}},"了":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"的":{"docs":{},"规":{"docs":{},"则":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}},"族":{"docs":{},"群":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"样":{"docs":{},"式":{"docs":{},"注":{"docs":{},"释":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}},"每":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"包":{"docs":{},"都":{"docs":{},"应":{"docs":{},"该":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"包":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"导":{"docs":{},"出":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{},"和":{"docs":{},"常":{"docs":{},"量":{"docs":{},"都":{"docs":{},"必":{"docs":{},"须":{"docs":{},"有":{"docs":{},"注":{"docs":{},"释":{"docs":{},"说":{"docs":{},"明":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}},"类":{"docs":{},"型":{"docs":{},"定":{"docs":{},"义":{"docs":{},"(":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"或":{"docs":{},"者":{"docs":{},"接":{"docs":{},"口":{"docs":{},"都":{"docs":{},"必":{"docs":{},"须":{"docs":{},"有":{"docs":{},"注":{"docs":{},"释":{"docs":{},"说":{"docs":{},"明":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}},"重":{"docs":{},"要":{"docs":{},"的":{"docs":{},"可":{"docs":{},"导":{"docs":{},"出":{"docs":{},"函":{"docs":{},"数":{"docs":{},"都":{"docs":{},"要":{"docs":{},"首":{"docs":{},"先":{"docs":{},"编":{"docs":{},"写":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{},"例":{"docs":{},",":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{},"例":{"docs":{},"和":{"docs":{},"正":{"docs":{},"规":{"docs":{},"代":{"docs":{},"码":{"docs":{},"一":{"docs":{},"起":{"docs":{},"提":{"docs":{},"交":{"docs":{},"方":{"docs":{},"便":{"docs":{},"进":{"docs":{},"行":{"docs":{},"回":{"docs":{},"归":{"docs":{},"测":{"docs":{},"试":{"docs":{},"。":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"字":{"docs":{},"段":{"docs":{},"按":{"docs":{},"照":{"docs":{},"自":{"docs":{},"身":{"docs":{},"的":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"系":{"docs":{},"数":{"docs":{},"来":{"docs":{},"确":{"docs":{},"定":{"docs":{},"在":{"docs":{},"内":{"docs":{},"存":{"docs":{},"中":{"docs":{},"的":{"docs":{},"偏":{"docs":{},"移":{"docs":{},"量":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"因":{"docs":{},"偏":{"docs":{},"移":{"docs":{},"而":{"docs":{},"浪":{"docs":{},"费":{"docs":{},"的":{"docs":{},"大":{"docs":{},"小":{"docs":{},"也":{"docs":{},"不":{"docs":{},"同":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"特":{"docs":{},"殊":{"docs":{},"实":{"docs":{},"现":{"docs":{},"需":{"docs":{},"要":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}},"有":{"docs":{},"名":{"docs":{},"词":{"docs":{},"时":{"docs":{},",":{"docs":{},"需":{"docs":{},"遵":{"docs":{},"循":{"docs":{},"以":{"docs":{},"下":{"docs":{},"规":{"docs":{},"则":{"docs":{},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}},"解":{"docs":{},"析":{"docs":{},"函":{"docs":{},"数":{"docs":{},"应":{"docs":{},"该":{"docs":{},"注":{"docs":{},"明":{"docs":{},"解":{"docs":{},"析":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"的":{"docs":{},"范":{"docs":{},"例":{"docs":{},",":{"docs":{},"并":{"docs":{},"明":{"docs":{},"确":{"docs":{},"不":{"docs":{},"能":{"docs":{},"处":{"docs":{},"理":{"docs":{},"的":{"docs":{},"异":{"docs":{},"常":{"docs":{},"情":{"docs":{},"况":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"、":{"docs":{},"校":{"docs":{},"验":{"docs":{},"、":{"docs":{},"计":{"docs":{},"算":{"docs":{},"的":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"应":{"docs":{},"该":{"docs":{},"进":{"docs":{},"行":{"docs":{},"分":{"docs":{},"离":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}},"决":{"docs":{},",":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"需":{"docs":{},"要":{"docs":{},"描":{"docs":{},"述":{"docs":{},"谁":{"docs":{},",":{"docs":{},"在":{"docs":{},"什":{"docs":{},"么":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},",":{"docs":{},"如":{"docs":{},"何":{"docs":{},"使":{"docs":{},"用":{"docs":{},"接":{"docs":{},"口":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"处":{"docs":{},"理":{"docs":{},"逻":{"docs":{},"辑":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}},"判":{"docs":{},"断":{"docs":{},"当":{"docs":{},"前":{"docs":{},"文":{"docs":{},"件":{"docs":{},"是":{"docs":{},"否":{"docs":{},"应":{"docs":{},"该":{"docs":{},"归":{"docs":{},"属":{"docs":{},"于":{"docs":{},"当":{"docs":{},"前":{"docs":{},"包":{"docs":{},",":{"docs":{},"主":{"docs":{},"要":{"docs":{},"以":{"docs":{},"职":{"docs":{},"责":{"docs":{},"进":{"docs":{},"行":{"docs":{},"判":{"docs":{},"断":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"注":{"docs":{},"意":{"docs":{},"的":{"docs":{},"时":{"docs":{},",":{"docs":{},"上":{"docs":{},"面":{"docs":{},"运":{"docs":{},"行":{"docs":{},"基":{"docs":{},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"编":{"docs":{},"译":{"docs":{},"选":{"docs":{},"项":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"运":{"docs":{},"行":{"docs":{},"上":{"docs":{},"面":{"docs":{},"基":{"docs":{},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},"时":{"docs":{},",":{"docs":{},"传":{"docs":{},"递":{"docs":{},"了":{"docs":{},"禁":{"docs":{},"止":{"docs":{},"内":{"docs":{},"联":{"docs":{},"的":{"docs":{},"编":{"docs":{},"译":{"docs":{},"选":{"docs":{},"项":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}},"做":{"docs":{},"一":{"docs":{},"次":{"docs":{},"偏":{"docs":{},"移":{"docs":{},"值":{"docs":{},"与":{"docs":{},"指":{"docs":{},"针":{"docs":{},"的":{"docs":{},"加":{"docs":{},"法":{"docs":{},"运":{"docs":{},"算":{"docs":{},",":{"docs":{},"才":{"docs":{},"能":{"docs":{},"获":{"docs":{},"取":{"docs":{},"要":{"docs":{},"访":{"docs":{},"问":{"docs":{},"的":{"docs":{},"值":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},",":{"docs":{},"访":{"docs":{},"问":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"的":{"docs":{},"机":{"docs":{},"器":{"docs":{},"代":{"docs":{},"码":{"docs":{},"更":{"docs":{},"紧":{"docs":{},"凑":{"docs":{},",":{"docs":{},"速":{"docs":{},"度":{"docs":{},"更":{"docs":{},"快":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"读":{"docs":{},"取":{"docs":{},"环":{"docs":{},"境":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"并":{"docs":{},"转":{"docs":{},"换":{"docs":{},"为":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"。":{"docs":{},"环":{"docs":{},"境":{"docs":{},"变":{"docs":{},"量":{"docs":{},"在":{"docs":{},"程":{"docs":{},"序":{"docs":{},"执":{"docs":{},"行":{"docs":{},"前":{"docs":{},"已":{"docs":{},"经":{"docs":{},"确":{"docs":{},"定":{"docs":{},",":{"docs":{},"执":{"docs":{},"行":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},"不":{"docs":{},"会":{"docs":{},"发":{"docs":{},"生":{"docs":{},"改":{"docs":{},"变":{"docs":{},"。":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"z":{"docs":{},"e":{"docs":{},"r":{"docs":{},"o":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"三":{"docs":{},"个":{"docs":{},"以":{"docs":{},"上":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"名":{"docs":{},",":{"docs":{},"类":{"docs":{},"似":{"docs":{},"于":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}},"两":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"名":{"docs":{},"综":{"docs":{},"合":{"docs":{},"两":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}},"二":{"docs":{},"维":{"docs":{},"切":{"docs":{},"片":{"docs":{},"或":{"docs":{},"数":{"docs":{},"组":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"传":{"docs":{},"输":{"docs":{},"协":{"docs":{},"议":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}}}}},"的":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"但":{"docs":{},"我":{"docs":{},"们":{"docs":{},"仍":{"docs":{},"然":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"的":{"docs":{},"包":{"docs":{},"内":{"docs":{},"将":{"docs":{},"其":{"docs":{},"和":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}},"保":{"docs":{},"持":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"证":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"函":{"docs":{},"数":{"docs":{},"只":{"docs":{},"会":{"docs":{},"被":{"docs":{},"执":{"docs":{},"行":{"docs":{},"一":{"docs":{},"次":{"docs":{},"和":{"docs":{},"多":{"docs":{},"次":{"docs":{},"执":{"docs":{},"行":{"docs":{},",":{"docs":{},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}},"加":{"docs":{},"密":{"docs":{},"传":{"docs":{},"输":{"docs":{},"协":{"docs":{},"议":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"一":{"docs":{},"。":{"docs":{},"最":{"docs":{},"终":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}},"写":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"读":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"是":{"docs":{},"为":{"docs":{},"了":{"docs":{},"避":{"docs":{},"免":{"docs":{},"在":{"docs":{},"并":{"docs":{},"发":{"docs":{},"环":{"docs":{},"境":{"docs":{},"下":{"docs":{},",":{"docs":{},"同":{"docs":{},"时":{"docs":{},"访":{"docs":{},"问":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"产":{"docs":{},"生":{"docs":{},"的":{"docs":{},"安":{"docs":{},"全":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{},"那":{"docs":{},"么":{"docs":{},",":{"docs":{},"在":{"docs":{},"并":{"docs":{},"发":{"docs":{},"环":{"docs":{},"境":{"docs":{},"下":{"docs":{},",":{"docs":{},"是":{"docs":{},"否":{"docs":{},"必":{"docs":{},"须":{"docs":{},"加":{"docs":{},"锁":{"docs":{},"?":{"docs":{},"答":{"docs":{},"案":{"docs":{},"是":{"docs":{},"否":{"docs":{},"定":{"docs":{},"的":{"docs":{},"。":{"docs":{},"并":{"docs":{},"非":{"docs":{},"所":{"docs":{},"有":{"docs":{},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},"都":{"docs":{},"需":{"docs":{},"要":{"docs":{},"加":{"docs":{},"锁":{"docs":{},"。":{"docs":{},"适":{"docs":{},"当":{"docs":{},"地":{"docs":{},"降":{"docs":{},"低":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"粒":{"docs":{},"度":{"docs":{},",":{"docs":{},"甚":{"docs":{},"至":{"docs":{},"采":{"docs":{},"用":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"化":{"docs":{},"的":{"docs":{},"设":{"docs":{},"计":{"docs":{},",":{"docs":{},"更":{"docs":{},"能":{"docs":{},"提":{"docs":{},"升":{"docs":{},"并":{"docs":{},"发":{"docs":{},"能":{"docs":{},"力":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"继":{"docs":{},"续":{"docs":{},"执":{"docs":{},"行":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"匹":{"docs":{},"配":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"单":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"名":{"docs":{},"以":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"函":{"docs":{},"数":{"docs":{},"圈":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"度":{"docs":{},"最":{"docs":{},"大":{"docs":{},"值":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"元":{"docs":{},"测":{"docs":{},"试":{"docs":{},"文":{"docs":{},"件":{"docs":{},"名":{"docs":{},"命":{"docs":{},"名":{"docs":{},"规":{"docs":{},"范":{"docs":{},"为":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}},"测":{"docs":{},"文":{"docs":{},"件":{"docs":{},"行":{"docs":{},"数":{"docs":{},"限":{"docs":{},"制":{"docs":{},"是":{"docs":{},"普":{"docs":{},"通":{"docs":{},"文":{"docs":{},"件":{"docs":{},"的":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}}}},"名":{"docs":{},"字":{"docs":{},"应":{"docs":{},"该":{"docs":{},"追":{"docs":{},"求":{"docs":{},"清":{"docs":{},"晰":{"docs":{},"且":{"docs":{},"越":{"docs":{},"来":{"docs":{},"越":{"docs":{},"收":{"docs":{},"敛":{"docs":{},",":{"docs":{},"符":{"docs":{},"合":{"docs":{},"‘":{"docs":{},"单":{"docs":{},"一":{"docs":{},"职":{"docs":{},"责":{"docs":{},"’":{"docs":{},"原":{"docs":{},"则":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"像":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"一":{"docs":{},"样":{"docs":{},",":{"docs":{},"什":{"docs":{},"么":{"docs":{},"都":{"docs":{},"能":{"docs":{},"往":{"docs":{},"里":{"docs":{},"面":{"docs":{},"放":{"docs":{},",":{"docs":{},"越":{"docs":{},"来":{"docs":{},"越":{"docs":{},"膨":{"docs":{},"胀":{"docs":{},",":{"docs":{},"让":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"关":{"docs":{},"系":{"docs":{},"变":{"docs":{},"得":{"docs":{},"复":{"docs":{},"杂":{"docs":{},",":{"docs":{},"不":{"docs":{},"利":{"docs":{},"于":{"docs":{},"阅":{"docs":{},"读":{"docs":{},"、":{"docs":{},"复":{"docs":{},"用":{"docs":{},"、":{"docs":{},"重":{"docs":{},"构":{"docs":{},"。":{"docs":{},"注":{"docs":{},"意":{"docs":{},",":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"/":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{},"s":{"docs":{},"/":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"r":{"docs":{},"y":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"这":{"docs":{},"样":{"docs":{},"的":{"docs":{},"包":{"docs":{},"名":{"docs":{},"是":{"docs":{},"允":{"docs":{},"许":{"docs":{},"的":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"多":{"docs":{},"行":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"定":{"docs":{},"义":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"个":{"docs":{},"相":{"docs":{},"似":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"线":{"docs":{},"程":{"docs":{},"模":{"docs":{},"型":{"docs":{},"改":{"docs":{},"为":{"docs":{},"主":{"docs":{},"从":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"对":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"消":{"docs":{},"息":{"docs":{},"队":{"docs":{},"列":{"docs":{},"锁":{"docs":{},"读":{"docs":{},"取":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}},"好":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},",":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"x":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}},"小":{"docs":{},"写":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"多":{"docs":{},"个":{"docs":{},"单":{"docs":{},"词":{"docs":{},"使":{"docs":{},"用":{"docs":{},"连":{"docs":{},"字":{"docs":{},"符":{"docs":{},"分":{"docs":{},"隔":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}},"汽":{"docs":{},"车":{"docs":{},"结":{"docs":{},"构":{"docs":{},"申":{"docs":{},"明":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"时":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}},"并":{"docs":{},"不":{"docs":{},"总":{"docs":{},"是":{"docs":{},"产":{"docs":{},"生":{"docs":{},"一":{"docs":{},"个":{"docs":{},"新":{"docs":{},"的":{"docs":{},"日":{"docs":{},"历":{"docs":{},"日":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"使":{"docs":{},"用":{"docs":{},"`":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"`":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}},"用":{"docs":{},"于":{"docs":{},"添":{"docs":{},"加":{"docs":{},"时":{"docs":{},"间":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"取":{"docs":{},"决":{"docs":{},"于":{"docs":{},"意":{"docs":{},"图":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"我":{"docs":{},"们":{"docs":{},"想":{"docs":{},"要":{"docs":{},"下":{"docs":{},"一":{"docs":{},"个":{"docs":{},"日":{"docs":{},"历":{"docs":{},"日":{"docs":{},"(":{"docs":{},"当":{"docs":{},"前":{"docs":{},"天":{"docs":{},"的":{"docs":{},"下":{"docs":{},"一":{"docs":{},"天":{"docs":{},")":{"docs":{},"的":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"时":{"docs":{},"间":{"docs":{},"点":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"好":{"docs":{},"过":{"docs":{},"引":{"docs":{},"用":{"docs":{},",":{"docs":{},"什":{"docs":{},"么":{"docs":{},"意":{"docs":{},"思":{"docs":{},"呢":{"docs":{},",":{"docs":{},"就":{"docs":{},"是":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"使":{"docs":{},"用":{"docs":{},"栈":{"docs":{},"变":{"docs":{},"量":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"堆":{"docs":{},"变":{"docs":{},"量":{"docs":{},"。":{"docs":{},"下":{"docs":{},"面":{"docs":{},"举":{"docs":{},"一":{"docs":{},"个":{"docs":{},"反":{"docs":{},"常":{"docs":{},"识":{"docs":{},"的":{"docs":{},"例":{"docs":{},"子":{"docs":{},",":{"docs":{},"来":{"docs":{},"证":{"docs":{},"明":{"docs":{},"小":{"docs":{},"的":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"比":{"docs":{},"在":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"创":{"docs":{},"建":{"docs":{},"引":{"docs":{},"用":{"docs":{},"变":{"docs":{},"量":{"docs":{},"要":{"docs":{},"好":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"常":{"docs":{},"量":{"docs":{},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"推":{"docs":{},"荐":{"docs":{},"以":{"docs":{},"类":{"docs":{},"名":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"英":{"docs":{},"文":{"docs":{},"首":{"docs":{},"字":{"docs":{},"母":{"docs":{},"的":{"docs":{},"小":{"docs":{},"写":{"docs":{},"作":{"docs":{},"为":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"的":{"docs":{},"命":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}},"方":{"docs":{},"法":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"中":{"docs":{},"没":{"docs":{},"有":{"docs":{},"使":{"docs":{},"用":{"docs":{},"值":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}},"是":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}},"支":{"docs":{},"持":{"docs":{},"将":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"来":{"docs":{},"获":{"docs":{},"取":{"docs":{},"和":{"docs":{},"放":{"docs":{},"回":{"docs":{},"池":{"docs":{},"子":{"docs":{},"中":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}},"释":{"docs":{},"放":{"docs":{},"锁":{"docs":{},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}},"实":{"docs":{},"例":{"docs":{},"化":{"docs":{},"具":{"docs":{},"有":{"docs":{},"给":{"docs":{},"定":{"docs":{},"容":{"docs":{},"量":{"docs":{},"的":{"docs":{},"池":{"docs":{},",":{"docs":{},"如":{"docs":{},"下":{"docs":{},"所":{"docs":{},"示":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}},"对":{"docs":{},"资":{"docs":{},"源":{"docs":{},"进":{"docs":{},"行":{"docs":{},"上":{"docs":{},"锁":{"docs":{},",":{"docs":{},"在":{"docs":{},"访":{"docs":{},"问":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"后":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}},"获":{"docs":{},"得":{"docs":{},"锁":{"docs":{},"后":{"docs":{},",":{"docs":{},"其":{"docs":{},"他":{"docs":{},"请":{"docs":{},"求":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},"都":{"docs":{},"会":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"在":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"直":{"docs":{},"到":{"docs":{},"锁":{"docs":{},"被":{"docs":{},"释":{"docs":{},"放":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}},"在":{"docs":{},"结":{"docs":{},"束":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"时":{"docs":{},",":{"docs":{},"会":{"docs":{},"重":{"docs":{},"新":{"docs":{},"给":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}},"时":{"docs":{},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"加":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"式":{"docs":{},"一":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"二":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"传":{"docs":{},"递":{"docs":{},"后":{"docs":{},",":{"docs":{},"再":{"docs":{},"加":{"docs":{},"上":{"docs":{},"其":{"docs":{},"长":{"docs":{},"度":{"docs":{},"不":{"docs":{},"可":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"到":{"docs":{},"性":{"docs":{},"能":{"docs":{},"我":{"docs":{},"们":{"docs":{},"一":{"docs":{},"般":{"docs":{},"很":{"docs":{},"少":{"docs":{},"使":{"docs":{},"用":{"docs":{},"它":{"docs":{},"。":{"docs":{},"实":{"docs":{},"际":{"docs":{},"上":{"docs":{},",":{"docs":{},"凡":{"docs":{},"事":{"docs":{},"无":{"docs":{},"绝":{"docs":{},"对":{"docs":{},"。":{"docs":{},"有":{"docs":{},"时":{"docs":{},"使":{"docs":{},"用":{"docs":{},"数":{"docs":{},"组":{"docs":{},"进":{"docs":{},"行":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"传":{"docs":{},"递":{"docs":{},",":{"docs":{},"比":{"docs":{},"使":{"docs":{},"用":{"docs":{},"切":{"docs":{},"片":{"docs":{},"要":{"docs":{},"好":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"明":{"docs":{},"文":{"docs":{},"传":{"docs":{},"输":{"docs":{},"协":{"docs":{},"议":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"确":{"docs":{},"地":{"docs":{},"告":{"docs":{},"诉":{"docs":{},"我":{"docs":{},"们":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"并":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"知":{"docs":{},"道":{"docs":{},"变":{"docs":{},"量":{"docs":{},"是":{"docs":{},"分":{"docs":{},"配":{"docs":{},"在":{"docs":{},"栈":{"docs":{},"(":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},")":{"docs":{},"上":{"docs":{},"还":{"docs":{},"是":{"docs":{},"堆":{"docs":{},"(":{"docs":{},"h":{"docs":{},"e":{"docs":{},"a":{"docs":{},"p":{"docs":{},")":{"docs":{},"上":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"更":{"docs":{},"多":{"docs":{},"可":{"docs":{},"参":{"docs":{},"考":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"关":{"docs":{},"于":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"未":{"docs":{},"导":{"docs":{},"出":{"docs":{},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"常":{"docs":{},"量":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"概":{"docs":{},"述":{"docs":{},"了":{"docs":{},"几":{"docs":{},"个":{"docs":{},"内":{"docs":{},"置":{"docs":{},"的":{"docs":{},",":{"docs":{},"不":{"docs":{},"应":{"docs":{},"在":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}},"比":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}},"如":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"多":{"docs":{},"个":{"docs":{},"班":{"docs":{},"级":{"docs":{},"下":{"docs":{},"的":{"docs":{},"学":{"docs":{},"生":{"docs":{},"i":{"docs":{},"d":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}},"下":{"docs":{},"面":{"docs":{},"将":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"的":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}}}},"现":{"docs":{},"在":{"docs":{},"是":{"docs":{},"明":{"docs":{},"确":{"docs":{},"的":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"一":{"docs":{},"个":{"docs":{},"拷":{"docs":{},"贝":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}},"等":{"docs":{},"单":{"docs":{},"词":{"docs":{},"开":{"docs":{},"头":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},")":{"docs":{},"进":{"docs":{},"行":{"docs":{},"操":{"docs":{},"作":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"很":{"docs":{},"容":{"docs":{},"易":{"docs":{},"忘":{"docs":{},"记":{"docs":{},"使":{"docs":{},"用":{"docs":{},"原":{"docs":{},"子":{"docs":{},"操":{"docs":{},"作":{"docs":{},"来":{"docs":{},"读":{"docs":{},"取":{"docs":{},"或":{"docs":{},"修":{"docs":{},"改":{"docs":{},"变":{"docs":{},"量":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"操":{"docs":{},"作":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{},"开":{"docs":{},"源":{"docs":{},"库":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}},"于":{"docs":{},"其":{"docs":{},"中":{"docs":{},"的":{"docs":{},"最":{"docs":{},"大":{"docs":{},"值":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}},"构":{"docs":{},"成":{"docs":{},"数":{"docs":{},"组":{"docs":{},"的":{"docs":{},"元":{"docs":{},"素":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"系":{"docs":{},"数":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}},"待":{"docs":{},"下":{"docs":{},"次":{"docs":{},"被":{"docs":{},"唤":{"docs":{},"醒":{"docs":{},"。":{"docs":{},"为":{"docs":{},"了":{"docs":{},"保":{"docs":{},"险":{"docs":{},"起":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}},"通":{"docs":{},"知":{"docs":{},",":{"docs":{},"直":{"docs":{},"到":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},",":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"另":{"docs":{},"一":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}},"缩":{"docs":{},"略":{"docs":{},"语":{"docs":{},"要":{"docs":{},"么":{"docs":{},"全":{"docs":{},"小":{"docs":{},"写":{"docs":{},",":{"docs":{},"要":{"docs":{},"么":{"docs":{},"全":{"docs":{},"大":{"docs":{},"写":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}},"若":{"docs":{},"量":{"docs":{},"类":{"docs":{},"型":{"docs":{},"为":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"要":{"docs":{},"好":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},",":{"docs":{},"i":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"比":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}},"么":{"docs":{},"是":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":1.6666666666666665}}}}},"详":{"docs":{},"细":{"docs":{},"的":{"docs":{},"专":{"docs":{},"有":{"docs":{},"名":{"docs":{},"词":{"docs":{},"列":{"docs":{},"表":{"docs":{},"可":{"docs":{},"参":{"docs":{},"考":{"docs":{},"这":{"docs":{},"里":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}},"里":{"docs":{},"面":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"下":{"docs":{},"划":{"docs":{},"线":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"装":{"docs":{},"的":{"docs":{},"对":{"docs":{},"象":{"docs":{},"可":{"docs":{},"以":{"docs":{},"被":{"docs":{},"无":{"docs":{},"通":{"docs":{},"知":{"docs":{},"地":{"docs":{},"被":{"docs":{},"回":{"docs":{},"收":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}},"量":{"docs":{},"名":{"docs":{},"不":{"docs":{},"应":{"docs":{},"该":{"docs":{},"以":{"docs":{},"类":{"docs":{},"型":{"docs":{},"作":{"docs":{},"为":{"docs":{},"前":{"docs":{},"缀":{"docs":{},"/":{"docs":{},"后":{"docs":{},"缀":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}},"应":{"docs":{},"该":{"docs":{},"是":{"docs":{},"名":{"docs":{},"词":{"docs":{},",":{"docs":{},"进":{"docs":{},"行":{"docs":{},"时":{"docs":{},"和":{"docs":{},"过":{"docs":{},"去":{"docs":{},"式":{"docs":{},"可":{"docs":{},"以":{"docs":{},"做":{"docs":{},"形":{"docs":{},"容":{"docs":{},"词":{"docs":{},",":{"docs":{},"成":{"docs":{},"为":{"docs":{},"量":{"docs":{},"名":{"docs":{},"的":{"docs":{},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"遵":{"docs":{},"循":{"docs":{},"驼":{"docs":{},"峰":{"docs":{},"式":{"docs":{},",":{"docs":{},"根":{"docs":{},"据":{"docs":{},"是":{"docs":{},"否":{"docs":{},"导":{"docs":{},"出":{"docs":{},"决":{"docs":{},"定":{"docs":{},"首":{"docs":{},"字":{"docs":{},"母":{"docs":{},"大":{"docs":{},"小":{"docs":{},"写":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},";":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"业":{"docs":{},"务":{"docs":{},"代":{"docs":{},"码":{"docs":{},"禁":{"docs":{},"止":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}},"则":{"docs":{},"需":{"docs":{},"要":{"docs":{},"以":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"不":{"docs":{},"存":{"docs":{},"在":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}},"是":{"docs":{},"在":{"docs":{},"对":{"docs":{},"象":{"docs":{},"使":{"docs":{},"用":{"docs":{},"完":{"docs":{},"毕":{"docs":{},"后":{"docs":{},",":{"docs":{},"放":{"docs":{},"回":{"docs":{},"到":{"docs":{},"对":{"docs":{},"象":{"docs":{},"池":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}},"阻":{"docs":{},"塞":{"docs":{},"等":{"docs":{},"待":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"判":{"docs":{},"断":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"是":{"docs":{},"否":{"docs":{},"为":{"docs":{},"空":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"更":{"docs":{},"加":{"docs":{},"直":{"docs":{},"观":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}},"条":{"docs":{},"件":{"docs":{},"较":{"docs":{},"为":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"时":{"docs":{},",":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"封":{"docs":{},"装":{"docs":{},"成":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}},"是":{"docs":{},"否":{"docs":{},"有":{"docs":{},"错":{"docs":{},"误":{"docs":{},"发":{"docs":{},"生":{"docs":{},"之":{"docs":{},"后":{"docs":{},",":{"docs":{},"再":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}},"又":{"docs":{},"如":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"没":{"docs":{},"有":{"docs":{},"明":{"docs":{},"确":{"docs":{},"说":{"docs":{},"明":{"docs":{},",":{"docs":{},"会":{"docs":{},"产":{"docs":{},"生":{"docs":{},"模":{"docs":{},"糊":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"文":{"docs":{},"档":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}},"循":{"docs":{},"环":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"不":{"docs":{},"要":{"docs":{},"存":{"docs":{},"储":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}},"指":{"docs":{},"向":{"docs":{},"的":{"docs":{},"是":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"赋":{"docs":{},"值":{"docs":{},"给":{"docs":{},"一":{"docs":{},"个":{"docs":{},"同":{"docs":{},"名":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"变":{"docs":{},"量":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"来":{"docs":{},"达":{"docs":{},"到":{"docs":{},"取":{"docs":{},"不":{"docs":{},"同":{"docs":{},"地":{"docs":{},"址":{"docs":{},"的":{"docs":{},"目":{"docs":{},"的":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"中":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":3.3410256410256407}}}}},"多":{"docs":{},"次":{"docs":{},"尝":{"docs":{},"试":{"docs":{},",":{"docs":{},"直":{"docs":{},"至":{"docs":{},"成":{"docs":{},"功":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}},"把":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"判":{"docs":{},"断":{"docs":{},"放":{"docs":{},"前":{"docs":{},"面":{"docs":{},",":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"的":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"判":{"docs":{},"断":{"docs":{},"放":{"docs":{},"后":{"docs":{},"面":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}},"替":{"docs":{},"换":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"为":{"docs":{},"指":{"docs":{},"针":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}},"队":{"docs":{},"列":{"docs":{},"里":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"这":{"docs":{},"增":{"docs":{},"加":{"docs":{},"了":{"docs":{},"跳":{"docs":{},"过":{"docs":{},"重":{"docs":{},"要":{"docs":{},"清":{"docs":{},"理":{"docs":{},"任":{"docs":{},"务":{"docs":{},"的":{"docs":{},"风":{"docs":{},"险":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}}},"从":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"函":{"docs":{},"数":{"docs":{},"名":{"docs":{},"开":{"docs":{},"始":{"docs":{},"算":{"docs":{},"第":{"docs":{},"一":{"docs":{},"层":{"docs":{},",":{"docs":{},"当":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"嵌":{"docs":{},"套":{"docs":{},"深":{"docs":{},"度":{"docs":{},"超":{"docs":{},"过":{"4":{"docs":{},"层":{"docs":{},",":{"docs":{},"往":{"docs":{},"往":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"圈":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"度":{"docs":{},"过":{"docs":{},"高":{"docs":{},",":{"docs":{},"函":{"docs":{},"数":{"docs":{},"变":{"docs":{},"得":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"不":{"docs":{},"可":{"docs":{},"读":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"拆":{"docs":{},"分":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"来":{"docs":{},"减":{"docs":{},"少":{"docs":{},"嵌":{"docs":{},"套":{"docs":{},"深":{"docs":{},"度":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}}}}}},"前":{"docs":{},"文":{"docs":{},"可":{"docs":{},"知":{"docs":{},",":{"docs":{},"可":{"docs":{},"取":{"docs":{},"址":{"docs":{},"的":{"docs":{},"值":{"docs":{},"可":{"docs":{},"以":{"docs":{},"调":{"docs":{},"用":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"为":{"docs":{},"指":{"docs":{},"针":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},",":{"docs":{},"但":{"docs":{},"这":{"docs":{},"里":{"docs":{},"为":{"docs":{},"何":{"docs":{},"不":{"docs":{},"能":{"docs":{},"将":{"docs":{},"值":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"切":{"docs":{},"片":{"docs":{},"中":{"docs":{},"过":{"docs":{},"滤":{"docs":{},"指":{"docs":{},"定":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{},"注":{"docs":{},"意":{"docs":{},":":{"docs":{},"不":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}},"结":{"docs":{},"构":{"docs":{},"化":{"docs":{},"二":{"docs":{},"进":{"docs":{},"制":{"docs":{},"数":{"docs":{},"据":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}},"果":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"出":{"docs":{},",":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},".":{"docs":{},"j":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},"、":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"、":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"和":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"[":{"docs":{},"]":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"性":{"docs":{},"能":{"docs":{},"出":{"docs":{},"发":{"docs":{},",":{"docs":{},"兼":{"docs":{},"顾":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"便":{"docs":{},"捷":{"docs":{},"与":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"读":{"docs":{},"性":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"待":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"的":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"不":{"docs":{},"涉":{"docs":{},"及":{"docs":{},"类":{"docs":{},"型":{"docs":{},"转":{"docs":{},"换":{"docs":{},"且":{"docs":{},"数":{"docs":{},"量":{"docs":{},"较":{"docs":{},"少":{"docs":{},"(":{"docs":{},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},")":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"基":{"docs":{},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},"来":{"docs":{},"看":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"最":{"docs":{},"佳":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{},"移":{"docs":{},"位":{"docs":{},"法":{"docs":{},",":{"docs":{},"其":{"docs":{},"中":{"docs":{},"又":{"docs":{},"属":{"docs":{},"第":{"docs":{},"一":{"docs":{},"种":{"docs":{},"实":{"docs":{},"现":{"docs":{},"方":{"docs":{},"式":{"docs":{},"较":{"docs":{},"佳":{"docs":{},"。":{"docs":{},"性":{"docs":{},"能":{"docs":{},"最":{"docs":{},"差":{"docs":{},"的":{"docs":{},"也":{"docs":{},"是":{"docs":{},"最":{"docs":{},"常":{"docs":{},"用":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{},"截":{"docs":{},"取":{"docs":{},"法":{"docs":{},"。":{"docs":{},"随":{"docs":{},"着":{"docs":{},"切":{"docs":{},"片":{"docs":{},"长":{"docs":{},"度":{"docs":{},"的":{"docs":{},"增":{"docs":{},"加":{"docs":{},",":{"docs":{},"上":{"docs":{},"面":{"docs":{},"四":{"docs":{},"种":{"docs":{},"删":{"docs":{},"除":{"docs":{},"方":{"docs":{},"式":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"会":{"docs":{},"愈":{"docs":{},"加":{"docs":{},"明":{"docs":{},"显":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"这":{"docs":{},"个":{"docs":{},"例":{"docs":{},"子":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"到":{"docs":{},",":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"对":{"docs":{},"实":{"docs":{},"现":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"原":{"docs":{},"子":{"docs":{},"性":{"docs":{},"操":{"docs":{},"作":{"docs":{},"也":{"docs":{},"是":{"docs":{},"有":{"docs":{},"好":{"docs":{},"处":{"docs":{},"的":{"docs":{},"。":{"docs":{},"每":{"docs":{},"次":{"docs":{},"内":{"docs":{},"存":{"docs":{},"访":{"docs":{},"问":{"docs":{},"是":{"docs":{},"原":{"docs":{},"子":{"docs":{},"的":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"大":{"docs":{},"小":{"docs":{},"不":{"docs":{},"超":{"docs":{},"过":{"docs":{},"字":{"docs":{},"长":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"后":{"docs":{},",":{"docs":{},"对":{"docs":{},"该":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"访":{"docs":{},"问":{"docs":{},"就":{"docs":{},"是":{"docs":{},"原":{"docs":{},"子":{"docs":{},"的":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"特":{"docs":{},"性":{"docs":{},"在":{"docs":{},"并":{"docs":{},"发":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},"至":{"docs":{},"关":{"docs":{},"重":{"docs":{},"要":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"出":{"docs":{},",":{"docs":{},"对":{"docs":{},"数":{"docs":{},"组":{"docs":{},"的":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"性":{"docs":{},"能":{"docs":{},"却":{"docs":{},"比":{"docs":{},"使":{"docs":{},"用":{"docs":{},"切":{"docs":{},"片":{"docs":{},"要":{"docs":{},"好":{"docs":{},"。":{"docs":{},"为":{"docs":{},"什":{"docs":{},"么":{"docs":{},"会":{"docs":{},"这":{"docs":{},"样":{"docs":{},"呢":{"docs":{},"?":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"输":{"docs":{},"出":{"docs":{},"结":{"docs":{},"果":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"到":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"变":{"docs":{},"量":{"docs":{},"(":{"docs":{},"非":{"docs":{},"常":{"docs":{},"量":{"docs":{},")":{"docs":{},"来":{"docs":{},"指":{"docs":{},"定":{"docs":{},"切":{"docs":{},"片":{"docs":{},"的":{"docs":{},"容":{"docs":{},"量":{"docs":{},",":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"切":{"docs":{},"片":{"docs":{},"发":{"docs":{},"生":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"影":{"docs":{},"响":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{},"指":{"docs":{},"定":{"docs":{},"切":{"docs":{},"片":{"docs":{},"的":{"docs":{},"长":{"docs":{},"度":{"docs":{},"时":{"docs":{},"也":{"docs":{},"是":{"docs":{},"一":{"docs":{},"样":{"docs":{},"的":{"docs":{},",":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"使":{"docs":{},"用":{"docs":{},"常":{"docs":{},"量":{"docs":{},"或":{"docs":{},"数":{"docs":{},"值":{"docs":{},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"日":{"docs":{},"志":{"docs":{},"中":{"docs":{},"可":{"docs":{},"以":{"docs":{},"很":{"docs":{},"容":{"docs":{},"易":{"docs":{},"看":{"docs":{},"到":{"docs":{},",":{"docs":{},"每":{"docs":{},"秒":{"docs":{},"钟":{"docs":{},"只":{"docs":{},"并":{"docs":{},"发":{"docs":{},"执":{"docs":{},"行":{"docs":{},"了":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}},"字":{"docs":{},"段":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"等":{"docs":{},"待":{"docs":{},"队":{"docs":{},"列":{"docs":{},"中":{"docs":{},"按":{"docs":{},"照":{"docs":{},"顺":{"docs":{},"序":{"docs":{},"唤":{"docs":{},"醒":{"docs":{},",":{"docs":{},"先":{"docs":{},"进":{"docs":{},"入":{"docs":{},"等":{"docs":{},"待":{"docs":{},"队":{"docs":{},"列":{"docs":{},",":{"docs":{},"先":{"docs":{},"被":{"docs":{},"唤":{"docs":{},"醒":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}},"入":{"docs":{},"参":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"&":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"成":{"docs":{},"员":{"docs":{},"函":{"docs":{},"数":{"docs":{},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"减":{"docs":{},"少":{"docs":{},"嵌":{"docs":{},"套":{"docs":{},"(":{"docs":{},"圈":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"度":{"docs":{},")":{"docs":{},"魔":{"docs":{},"法":{"docs":{},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{},"函":{"docs":{},"数":{"docs":{},"分":{"docs":{},"组":{"docs":{},"与":{"docs":{},"顺":{"docs":{},"序":{"docs":{},"入":{"docs":{},"参":{"docs":{},"&":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"和":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"个":{"docs":{},"数":{"docs":{},"均":{"docs":{},"不":{"docs":{},"能":{"docs":{},"超":{"docs":{},"过":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}},"均":{"docs":{},"以":{"docs":{},"小":{"docs":{},"写":{"docs":{},"字":{"docs":{},"母":{"docs":{},"开":{"docs":{},"头":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"顺":{"docs":{},"序":{"docs":{},"根":{"docs":{},"据":{"docs":{},"关":{"docs":{},"联":{"docs":{},"性":{"docs":{},"排":{"docs":{},"在":{"docs":{},"一":{"docs":{},"起":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}},"减":{"docs":{},"少":{"docs":{},"嵌":{"docs":{},"套":{"docs":{},"(":{"docs":{},"圈":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"度":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{},"可":{"docs":{},"参":{"docs":{},"考":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{},"包":{"docs":{},"的":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}},"使":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"的":{"docs":{},"抽":{"docs":{},"象":{"docs":{},"列":{"docs":{},"表":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}},"多":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"同":{"docs":{},"一":{"docs":{},"文":{"docs":{},"件":{"docs":{},"中":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"应":{"docs":{},"按":{"docs":{},"接":{"docs":{},"收":{"docs":{},"者":{"docs":{},"分":{"docs":{},"组":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}},"层":{"docs":{},"级":{"docs":{},"的":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"细":{"docs":{},"节":{"docs":{},"不":{"docs":{},"要":{"docs":{},"拆":{"docs":{},"分":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}},"时":{"docs":{},"迭":{"docs":{},"代":{"docs":{},"下":{"docs":{},"标":{"docs":{},"和":{"docs":{},"值":{"docs":{},",":{"docs":{},"则":{"docs":{},"需":{"docs":{},"要":{"docs":{},"将":{"docs":{},"切":{"docs":{},"片":{"docs":{},"/":{"docs":{},"数":{"docs":{},"组":{"docs":{},"的":{"docs":{},"元":{"docs":{},"素":{"docs":{},"改":{"docs":{},"为":{"docs":{},"指":{"docs":{},"针":{"docs":{},",":{"docs":{},"才":{"docs":{},"能":{"docs":{},"不":{"docs":{},"影":{"docs":{},"响":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"圆":{"docs":{},"周":{"docs":{},"率":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}},"嵌":{"docs":{},"套":{"docs":{},"深":{"docs":{},"度":{"docs":{},"不":{"docs":{},"能":{"docs":{},"超":{"docs":{},"过":{"4":{"docs":{},"层":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}},"docs":{}}}}}}}},"入":{"docs":{},"到":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"中":{"docs":{},"。":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}},"类":{"docs":{},"型":{"docs":{},"会":{"docs":{},"泄":{"docs":{},"漏":{"docs":{},"实":{"docs":{},"现":{"docs":{},"细":{"docs":{},"节":{"docs":{},"、":{"docs":{},"禁":{"docs":{},"止":{"docs":{},"类":{"docs":{},"型":{"docs":{},"演":{"docs":{},"化":{"docs":{},"和":{"docs":{},"产":{"docs":{},"生":{"docs":{},"模":{"docs":{},"糊":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"文":{"docs":{},"档":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"建":{"docs":{},"议":{"docs":{},"调":{"docs":{},"整":{"docs":{},"为":{"docs":{},"这":{"docs":{},"样":{"docs":{},":":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}},"成":{"docs":{},"员":{"docs":{},"函":{"docs":{},"数":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}},"本":{"docs":{},",":{"docs":{},"可":{"docs":{},"提":{"docs":{},"高":{"docs":{},"程":{"docs":{},"序":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}},"批":{"docs":{},"量":{"docs":{},"查":{"docs":{},"询":{"docs":{},"函":{"docs":{},"数":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"获":{"docs":{},"取":{"docs":{},"用":{"docs":{},"户":{"docs":{},"信":{"docs":{},"息":{"docs":{},"(":{"docs":{},"允":{"docs":{},"许":{"docs":{},"部":{"docs":{},"分":{"docs":{},"失":{"docs":{},"败":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}},"需":{"docs":{},"全":{"docs":{},"部":{"docs":{},"成":{"docs":{},"功":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}},"按":{"docs":{},"照":{"docs":{},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"规":{"docs":{},"则":{"docs":{},",":{"docs":{},"下":{"docs":{},"面":{"docs":{},"给":{"docs":{},"出":{"docs":{},"好":{"docs":{},"坏":{"docs":{},"文":{"docs":{},"件":{"docs":{},"内":{"docs":{},"容":{"docs":{},"布":{"docs":{},"局":{"docs":{},"示":{"docs":{},"例":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}},"条":{"docs":{},"件":{"docs":{},"不":{"docs":{},"满":{"docs":{},"足":{"docs":{},"或":{"docs":{},"出":{"docs":{},"现":{"docs":{},"错":{"docs":{},"误":{"docs":{},"应":{"docs":{},"尽":{"docs":{},"早":{"docs":{},"返":{"docs":{},"回":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}},"查":{"docs":{},"询":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"值":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"出":{"docs":{},"现":{"docs":{},"部":{"docs":{},"分":{"docs":{},"失":{"docs":{},"败":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"如":{"docs":{},"某":{"docs":{},"个":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}},"次":{"docs":{},",":{"docs":{},"则":{"docs":{},"禁":{"docs":{},"止":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"用":{"docs":{},"一":{"docs":{},"个":{"docs":{},"有":{"docs":{},"名":{"docs":{},"称":{"docs":{},"的":{"docs":{},"常":{"docs":{},"量":{"docs":{},"代":{"docs":{},"替":{"docs":{},",":{"docs":{},"可":{"docs":{},"读":{"docs":{},"性":{"docs":{},"更":{"docs":{},"好":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}},"正":{"docs":{},"常":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"不":{"docs":{},"应":{"docs":{},"该":{"docs":{},"在":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}},"添":{"docs":{},"加":{"docs":{},"成":{"docs":{},"功":{"docs":{},"或":{"docs":{},"出":{"docs":{},"错":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"生":{"docs":{},"成":{"docs":{},"新":{"docs":{},"错":{"docs":{},"误":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}},";":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}},"将":{"docs":{},"实":{"docs":{},"体":{"docs":{},"添":{"docs":{},"加":{"docs":{},"到":{"docs":{},"列":{"docs":{},"表":{"docs":{},"中":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.01775147928994083}}}}}}}}}}}}}},"示":{"docs":{},"例":{"docs":{},",":{"docs":{},"实":{"docs":{},"际":{"docs":{},"不":{"docs":{},"要":{"docs":{},"这":{"docs":{},"么":{"docs":{},"查":{"docs":{},"询":{"docs":{},",":{"docs":{},"防":{"docs":{},"止":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}},"禁":{"docs":{},"止":{"docs":{},"在":{"docs":{},"循":{"docs":{},"环":{"docs":{},"中":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}},"类":{"docs":{},"型":{"docs":{},"演":{"docs":{},"化":{"docs":{},"指":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}},"继":{"docs":{},"续":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"f":{"docs":{},"i":{"docs":{},"e":{"docs":{},"l":{"docs":{},"d":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}},"看":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"表":{"docs":{},"示":{"docs":{},"执":{"docs":{},"行":{"docs":{},"是":{"docs":{},"否":{"docs":{},"成":{"docs":{},"功":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"用":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"状":{"docs":{},"态":{"docs":{},"的":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"应":{"docs":{},"该":{"docs":{},"放":{"docs":{},"在":{"docs":{},"最":{"docs":{},"后":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}},"连":{"docs":{},"续":{"docs":{},"的":{"docs":{},"非":{"docs":{},"类":{"docs":{},"型":{"docs":{},"化":{"docs":{},"整":{"docs":{},"数":{"docs":{},"常":{"docs":{},"量":{"docs":{},",":{"docs":{},"它":{"docs":{},"的":{"docs":{},"值":{"docs":{},"是":{"docs":{},"对":{"docs":{},"应":{"docs":{},"常":{"docs":{},"量":{"docs":{},"的":{"docs":{},"下":{"docs":{},"标":{"docs":{},"(":{"docs":{},"从":{"docs":{},"零":{"docs":{},"开":{"docs":{},"始":{"docs":{},")":{"docs":{},",":{"docs":{},"它":{"docs":{},"可":{"docs":{},"用":{"docs":{},"于":{"docs":{},"构":{"docs":{},"造":{"docs":{},"一":{"docs":{},"组":{"docs":{},"相":{"docs":{},"关":{"docs":{},"常":{"docs":{},"数":{"docs":{},":":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"读":{"docs":{},"写":{"docs":{},"一":{"docs":{},"致":{"docs":{},"(":{"docs":{},"各":{"docs":{},"占":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"多":{"docs":{},"写":{"docs":{},"少":{"docs":{},"(":{"docs":{},"读":{"docs":{},"占":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"少":{"docs":{},"写":{"docs":{},"多":{"docs":{},"(":{"docs":{},"读":{"docs":{},"占":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}},"广":{"docs":{},"播":{"docs":{},"通":{"docs":{},"知":{"docs":{},",":{"docs":{},"其":{"docs":{},"他":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"驱":{"docs":{},"动":{"docs":{},"测":{"docs":{},"试":{"docs":{},".":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}},"达":{"docs":{},"时":{"docs":{},"间":{"docs":{},"段":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"瞬":{"docs":{},"时":{"docs":{},"时":{"docs":{},"间":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}},"释":{"docs":{},"放":{"docs":{},"资":{"docs":{},"源":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":3.333333333333333}},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}},",":{"docs":{},"诸":{"docs":{},"如":{"docs":{},"文":{"docs":{},"件":{"docs":{},"和":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125}}}}}}}}}}}},"写":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"读":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}},"除":{"docs":{},"了":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"包":{"docs":{},"的":{"docs":{},"主":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"文":{"docs":{},"件":{"docs":{},"中":{"docs":{},"内":{"docs":{},"容":{"docs":{},"允":{"docs":{},"许":{"docs":{},"导":{"docs":{},"出":{"docs":{},",":{"docs":{},"包":{"docs":{},"内":{"docs":{},"的":{"docs":{},"辅":{"docs":{},"助":{"docs":{},"函":{"docs":{},"数":{"docs":{},"都":{"docs":{},"应":{"docs":{},"该":{"docs":{},"是":{"docs":{},"非":{"docs":{},"导":{"docs":{},"出":{"docs":{},"的":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"魔":{"docs":{},"法":{"docs":{},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}},"倍":{"docs":{},"(":{"1":{"6":{"0":{"0":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"分":{"docs":{},"组":{"docs":{},"等":{"docs":{},"其":{"docs":{},"他":{"docs":{},"规":{"docs":{},"范":{"docs":{},"细":{"docs":{},"节":{"docs":{},"和":{"docs":{},"普":{"docs":{},"通":{"docs":{},"文":{"docs":{},"件":{"docs":{},"保":{"docs":{},"持":{"docs":{},"一":{"docs":{},"致":{"docs":{},"。":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}}}}}}}},"支":{"docs":{},"时":{"docs":{},",":{"docs":{},"很":{"docs":{},"容":{"docs":{},"易":{"docs":{},"遗":{"docs":{},"忘":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125}}}}}}}}}},"钟":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}},"出":{"docs":{},"现":{"docs":{},"状":{"docs":{},"态":{"docs":{},"/":{"docs":{},"类":{"docs":{},"型":{"docs":{},"等":{"docs":{},"字":{"docs":{},"眼":{"docs":{},"时":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"枚":{"docs":{},"举":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}},"启":{"docs":{},"动":{"docs":{},"的":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"复":{"docs":{},"杂":{"docs":{},"的":{"docs":{},"执":{"docs":{},"行":{"docs":{},"/":{"docs":{},"错":{"docs":{},"误":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"定":{"docs":{},"义":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"保":{"docs":{},"存":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},"对":{"docs":{},"象":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":5}},",":{"docs":{},"每":{"docs":{},"次":{"docs":{},"操":{"docs":{},"作":{"docs":{},"不":{"docs":{},"再":{"docs":{},"有":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}},"意":{"docs":{},"义":{"docs":{},"不":{"docs":{},"明":{"docs":{},"的":{"docs":{},"成":{"docs":{},"员":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"定":{"docs":{},"义":{"docs":{},"类":{"docs":{},"型":{"docs":{},"描":{"docs":{},"述":{"docs":{},"作":{"docs":{},"用":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}},"抛":{"docs":{},"出":{"docs":{},"的":{"docs":{},"异":{"docs":{},"常":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"启":{"docs":{},"动":{"docs":{},"的":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}},"去":{"docs":{},"大":{"docs":{},"段":{"docs":{},"的":{"docs":{},"注":{"docs":{},"释":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"到":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}},"时":{"docs":{},"间":{"docs":{},"类":{"docs":{},"型":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"使":{"docs":{},"用":{"docs":{},"内":{"docs":{},"置":{"docs":{},"定":{"docs":{},"义":{"docs":{},",":{"docs":{},"如":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}},"处":{"docs":{},"理":{"docs":{},"看":{"docs":{},"似":{"docs":{},"简":{"docs":{},"单":{"docs":{},",":{"docs":{},"实":{"docs":{},"则":{"docs":{},"不":{"docs":{},"然":{"docs":{},"。":{"docs":{},"关":{"docs":{},"于":{"docs":{},"时":{"docs":{},"间":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},"假":{"docs":{},"设":{"docs":{},"通":{"docs":{},"常":{"docs":{},"包":{"docs":{},"括":{"docs":{},"以":{"docs":{},"下":{"docs":{},"几":{"docs":{},"点":{"docs":{},":":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"上":{"docs":{},",":{"docs":{},"协":{"docs":{},"程":{"docs":{},"调":{"docs":{},"度":{"docs":{},"也":{"docs":{},"会":{"docs":{},"有":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},",":{"docs":{},"同":{"docs":{},"样":{"docs":{},"的":{"docs":{},",":{"docs":{},"请":{"docs":{},"注":{"docs":{},"意":{"docs":{},"用":{"docs":{},"户":{"docs":{},"对":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"内":{"docs":{},"部":{"docs":{},"状":{"docs":{},"态":{"docs":{},"的":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}}}}}}},"请":{"docs":{},"记":{"docs":{},"住":{"docs":{},"当":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"除":{"docs":{},"非":{"docs":{},"达":{"docs":{},"成":{"docs":{},"一":{"docs":{},"致":{"docs":{},",":{"docs":{},"否":{"docs":{},"则":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}},"甚":{"docs":{},"至":{"docs":{},"在":{"docs":{},"指":{"docs":{},"定":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}},"为":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},"获":{"docs":{},"取":{"docs":{},"的":{"docs":{},"是":{"docs":{},"值":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},",":{"docs":{},"对":{"docs":{},"副":{"docs":{},"本":{"docs":{},"的":{"docs":{},"修":{"docs":{},"改":{"docs":{},",":{"docs":{},"是":{"docs":{},"不":{"docs":{},"会":{"docs":{},"影":{"docs":{},"响":{"docs":{},"到":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}},"传":{"docs":{},"入":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"没":{"docs":{},"有":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}},"自":{"docs":{},"动":{"docs":{},"格":{"docs":{},"式":{"docs":{},"化":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"保":{"docs":{},"证":{"docs":{},"所":{"docs":{},"有":{"docs":{},"的":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}},"说":{"docs":{},"明":{"docs":{},"文":{"docs":{},"档":{"docs":{},",":{"docs":{},"介":{"docs":{},"绍":{"docs":{},"服":{"docs":{},"务":{"docs":{},"功":{"docs":{},"能":{"docs":{},"、":{"docs":{},"使":{"docs":{},"用":{"docs":{},"方":{"docs":{},"法":{"docs":{},"、":{"docs":{},"部":{"docs":{},"署":{"docs":{},"时":{"docs":{},"的":{"docs":{},"限":{"docs":{},"制":{"docs":{},"与":{"docs":{},"要":{"docs":{},"求":{"docs":{},"、":{"docs":{},"基":{"docs":{},"础":{"docs":{},"环":{"docs":{},"境":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"等":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"遇":{"docs":{},"到":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}},"为":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.037037037037037035},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"什":{"docs":{},"么":{"docs":{},"可":{"docs":{},"以":{"docs":{},"这":{"docs":{},"样":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"接":{"docs":{},"口":{"docs":{},"实":{"docs":{},"质":{"docs":{},"上":{"docs":{},"在":{"docs":{},"底":{"docs":{},"层":{"docs":{},"用":{"docs":{},"两":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"表":{"docs":{},"示":{"docs":{},":":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}}}}}}},"常":{"docs":{},"识":{"docs":{},"性":{"docs":{},"的":{"docs":{},"认":{"docs":{},"知":{"docs":{},"是":{"docs":{},"错":{"docs":{},"误":{"docs":{},"的":{"docs":{},"呢":{"docs":{},"?":{"docs":{},"因":{"docs":{},"为":{"docs":{},"地":{"docs":{},"球":{"docs":{},"自":{"docs":{},"转":{"docs":{},"的":{"docs":{},"不":{"docs":{},"均":{"docs":{},"匀":{"docs":{},"性":{"docs":{},"和":{"docs":{},"长":{"docs":{},"期":{"docs":{},"变":{"docs":{},"慢":{"docs":{},"性":{"docs":{},",":{"docs":{},"会":{"docs":{},"存":{"docs":{},"在":{"docs":{},"时":{"docs":{},"间":{"docs":{},"修":{"docs":{},"正":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"闰":{"docs":{},"秒":{"docs":{},",":{"docs":{},"闰":{"docs":{},"年":{"docs":{},"等":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"性":{"docs":{},"能":{"docs":{},"上":{"docs":{},"会":{"docs":{},"有":{"docs":{},"两":{"docs":{},"倍":{"docs":{},"多":{"docs":{},"的":{"docs":{},"差":{"docs":{},"距":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"会":{"docs":{},"对":{"docs":{},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"测":{"docs":{},"试":{"docs":{},"代":{"docs":{},"码":{"docs":{},"进":{"docs":{},"行":{"docs":{},"优":{"docs":{},"化":{"docs":{},"呢":{"docs":{},"?":{"docs":{},"因":{"docs":{},"为":{"docs":{},"代":{"docs":{},"码":{"docs":{},"实":{"docs":{},"际":{"docs":{},"上":{"docs":{},"只":{"docs":{},"取":{"docs":{},"最":{"docs":{},"后":{"docs":{},"一":{"docs":{},"个":{"docs":{},"切":{"docs":{},"片":{"docs":{},"元":{"docs":{},"素":{"docs":{},"的":{"docs":{},"值":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"前":{"docs":{},"面":{"docs":{},"的":{"docs":{},"循":{"docs":{},"环":{"docs":{},"操":{"docs":{},"作":{"docs":{},"可":{"docs":{},"以":{"docs":{},"跳":{"docs":{},"过":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"便":{"docs":{},"带":{"docs":{},"来":{"docs":{},"性":{"docs":{},"能":{"docs":{},"的":{"docs":{},"提":{"docs":{},"升":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"是":{"docs":{},"下":{"docs":{},"面":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"编":{"docs":{},"器":{"docs":{},"将":{"docs":{},"无":{"docs":{},"法":{"docs":{},"优":{"docs":{},"化":{"docs":{},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"遍":{"docs":{},"历":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"所":{"docs":{},"有":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"放":{"docs":{},"在":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"就":{"docs":{},"能":{"docs":{},"够":{"docs":{},"减":{"docs":{},"少":{"docs":{},"指":{"docs":{},"令":{"docs":{},"呢":{"docs":{},"?":{"docs":{},"因":{"docs":{},"为":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"和":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},"是":{"docs":{},"相":{"docs":{},"同":{"docs":{},"的":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"是":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"对":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},"解":{"docs":{},"引":{"docs":{},"用":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"是":{"docs":{},"其":{"docs":{},"他":{"docs":{},"的":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"除":{"docs":{},"了":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"指":{"docs":{},"针":{"docs":{},"外":{"docs":{},",":{"docs":{},"还":{"docs":{},"需":{"docs":{},"要":{"docs":{},"计":{"docs":{},"算":{"docs":{},"与":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"值":{"docs":{},"的":{"docs":{},"偏":{"docs":{},"移":{"docs":{},"(":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"c":{"docs":{},"u":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"是":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"?":{"3":{"docs":{},".":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"1":{"docs":{},".":{"docs":{},"简":{"docs":{},"介":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"docs":{}}}}}}},"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}},"零":{"docs":{},"。":{"docs":{},"任":{"docs":{},"何":{"docs":{},"其":{"docs":{},"他":{"docs":{},"尺":{"docs":{},"寸":{"docs":{},"都":{"docs":{},"必":{"docs":{},"须":{"docs":{},"经":{"docs":{},"过":{"docs":{},"严":{"docs":{},"格":{"docs":{},"的":{"docs":{},"审":{"docs":{},"查":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"拍":{"docs":{},"脑":{"docs":{},"袋":{"docs":{},"给":{"docs":{},"出":{"docs":{},"一":{"docs":{},"个":{"docs":{},"大":{"docs":{},"致":{"docs":{},"的":{"docs":{},"值":{"docs":{},"。":{"docs":{},"我":{"docs":{},"们":{"docs":{},"需":{"docs":{},"要":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"如":{"docs":{},"何":{"docs":{},"确":{"docs":{},"定":{"docs":{},"大":{"docs":{},"小":{"docs":{},",":{"docs":{},"什":{"docs":{},"么":{"docs":{},"原":{"docs":{},"因":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"你":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},"添":{"docs":{},"加":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},",":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}},"例":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"给":{"docs":{},"出":{"docs":{},"具":{"docs":{},"体":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}},",":{"docs":{},"简":{"docs":{},"单":{"docs":{},"介":{"docs":{},"绍":{"docs":{},"其":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"了":{"docs":{},"模":{"docs":{},"拟":{"docs":{},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"简":{"docs":{},"单":{"docs":{},"地":{"docs":{},"写":{"docs":{},"个":{"docs":{},"示":{"docs":{},"例":{"docs":{},"程":{"docs":{},"序":{"docs":{},",":{"docs":{},"对":{"docs":{},"比":{"docs":{},"下":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}},"读":{"docs":{},"操":{"docs":{},"作":{"docs":{},"占":{"docs":{},"比":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}},"并":{"docs":{},"发":{"docs":{},"而":{"docs":{},"生":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}},"具":{"docs":{},"体":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"下":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}},"我":{"docs":{},"们":{"docs":{},"几":{"docs":{},"乎":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"指":{"docs":{},"向":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"将":{"docs":{},"接":{"docs":{},"口":{"docs":{},"直":{"docs":{},"接":{"docs":{},"赋":{"docs":{},"值":{"docs":{},"给":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"在":{"docs":{},"传":{"docs":{},"递":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},",":{"docs":{},"实":{"docs":{},"质":{"docs":{},"上":{"docs":{},"传":{"docs":{},"递":{"docs":{},"的":{"docs":{},"底":{"docs":{},"层":{"docs":{},"数":{"docs":{},"据":{"docs":{},"仍":{"docs":{},"然":{"docs":{},"是":{"docs":{},"指":{"docs":{},"针":{"docs":{},",":{"docs":{},"即":{"docs":{},"不":{"docs":{},"存":{"docs":{},"在":{"docs":{},"值":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"下":{"docs":{},"接":{"docs":{},"口":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"宽":{"docs":{},"度":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}},"一":{"docs":{},"下":{"docs":{},"最":{"docs":{},"常":{"docs":{},"用":{"docs":{},"的":{"docs":{},"标":{"docs":{},"准":{"docs":{},"格":{"docs":{},"式":{"docs":{},"化":{"docs":{},"输":{"docs":{},"出":{"docs":{},"函":{"docs":{},"数":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}},"找":{"docs":{},"到":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"切":{"docs":{},"片":{"docs":{},"的":{"docs":{},"底":{"docs":{},"层":{"docs":{},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}},"通":{"docs":{},"过":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"注":{"docs":{},"入":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"将":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"注":{"docs":{},"入":{"docs":{},"到":{"docs":{},"使":{"docs":{},"用":{"docs":{},"方":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"便":{"docs":{},"可":{"docs":{},"以":{"docs":{},"避":{"docs":{},"免":{"docs":{},"使":{"docs":{},"用":{"docs":{},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"进":{"docs":{},"而":{"docs":{},"避":{"docs":{},"免":{"docs":{},"了":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"的":{"docs":{},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},"被":{"docs":{},"错":{"docs":{},"误":{"docs":{},"修":{"docs":{},"改":{"docs":{},"的":{"docs":{},"可":{"docs":{},"能":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{},"访":{"docs":{},"问":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"前":{"docs":{},"前":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}},"来":{"docs":{},"看":{"docs":{},"一":{"docs":{},"下":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"编":{"docs":{},"译":{"docs":{},"时":{"docs":{},"对":{"docs":{},"上":{"docs":{},"面":{"docs":{},"两":{"docs":{},"个":{"docs":{},"切":{"docs":{},"片":{"docs":{},"的":{"docs":{},"优":{"docs":{},"化":{"docs":{},"决":{"docs":{},"策":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}},"还":{"docs":{},"是":{"docs":{},"以":{"docs":{},"上":{"docs":{},"面":{"docs":{},"斐":{"docs":{},"波":{"docs":{},"那":{"docs":{},"契":{"docs":{},"数":{"docs":{},"列":{"docs":{},"函":{"docs":{},"数":{"docs":{},"为":{"docs":{},"例":{"docs":{},",":{"docs":{},"看":{"docs":{},"下":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"为":{"docs":{},"确":{"docs":{},"定":{"docs":{},"类":{"docs":{},"型":{"docs":{},"和":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"都":{"docs":{},"知":{"docs":{},"道":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"以":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"一":{"docs":{},"个":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{},"线":{"docs":{},"程":{"docs":{},"安":{"docs":{},"全":{"docs":{},"单":{"docs":{},"向":{"docs":{},"链":{"docs":{},"表":{"docs":{},"的":{"docs":{},"插":{"docs":{},"入":{"docs":{},"操":{"docs":{},"作":{"docs":{},"来":{"docs":{},"看":{"docs":{},"下":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"编":{"docs":{},"程":{"docs":{},"和":{"docs":{},"普":{"docs":{},"通":{"docs":{},"加":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"区":{"docs":{},"别":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"示":{"docs":{},"例":{"docs":{},",":{"docs":{},"来":{"docs":{},"说":{"docs":{},"明":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}},"分":{"docs":{},"别":{"docs":{},"对":{"docs":{},"两":{"docs":{},"种":{"docs":{},"链":{"docs":{},"表":{"docs":{},"做":{"docs":{},"一":{"docs":{},"个":{"docs":{},"并":{"docs":{},"发":{"docs":{},"写":{"docs":{},"入":{"docs":{},"的":{"docs":{},"操":{"docs":{},"作":{"docs":{},"验":{"docs":{},"证":{"docs":{},"一":{"docs":{},"下":{"docs":{},"其":{"docs":{},"功":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}},"看":{"docs":{},"下":{"docs":{},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},"一":{"docs":{},"个":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{},"例":{"docs":{},"子":{"docs":{},",":{"docs":{},"三":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}},"想":{"docs":{},"象":{"docs":{},"一":{"docs":{},"个":{"docs":{},"非":{"docs":{},"常":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}},"合":{"docs":{},"理":{"docs":{},"性":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":3.333333333333333}}}}},"赋":{"docs":{},"值":{"docs":{},"的":{"docs":{},"右":{"docs":{},"边":{"docs":{},"应":{"docs":{},"该":{"docs":{},"是":{"docs":{},"断":{"docs":{},"言":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"零":{"docs":{},"值":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}},"给":{"docs":{},"接":{"docs":{},"口":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}},"吗":{"docs":{},"?":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"底":{"docs":{},"层":{"docs":{},"核":{"docs":{},"心":{"docs":{},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}},"组":{"docs":{},"来":{"docs":{},"表":{"docs":{},"示":{"docs":{},"枚":{"docs":{},"举":{"docs":{},"值":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}}}}}},"预":{"docs":{},"先":{"docs":{},"声":{"docs":{},"明":{"docs":{},"的":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}}}},"分":{"docs":{},"配":{"docs":{},"容":{"docs":{},"量":{"docs":{},"这":{"docs":{},"种":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}},"做":{"docs":{},"了":{"docs":{},"说":{"docs":{},"明":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"为":{"docs":{},"指":{"docs":{},"针":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"会":{"docs":{},"修":{"docs":{},"改":{"docs":{},"接":{"docs":{},"受":{"docs":{},"器":{"docs":{},",":{"docs":{},"为":{"docs":{},"了":{"docs":{},"避":{"docs":{},"免":{"docs":{},"产":{"docs":{},"生":{"docs":{},"这":{"docs":{},"种":{"docs":{},"错":{"docs":{},"误":{"docs":{},"的":{"docs":{},"行":{"docs":{},"为":{"docs":{},",":{"docs":{},"便":{"docs":{},"禁":{"docs":{},"止":{"docs":{},"将":{"docs":{},"值":{"docs":{},"赋":{"docs":{},"给":{"docs":{},"和":{"docs":{},"指":{"docs":{},"针":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"方":{"docs":{},"法":{"docs":{},"集":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"二":{"docs":{},"次":{"docs":{},"判":{"docs":{},"断":{"docs":{},",":{"docs":{},"来":{"docs":{},"保":{"docs":{},"证":{"docs":{},"任":{"docs":{},"务":{"docs":{},"函":{"docs":{},"数":{"docs":{},"只":{"docs":{},"会":{"docs":{},"被":{"docs":{},"执":{"docs":{},"行":{"docs":{},"一":{"docs":{},"次":{"docs":{},",":{"docs":{},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"取":{"docs":{},"址":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}},"呢":{"docs":{},"?":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"指":{"docs":{},"针":{"docs":{},"既":{"docs":{},"可":{"docs":{},"以":{"docs":{},"调":{"docs":{},"用":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}},"复":{"docs":{},"制":{"docs":{},"是":{"docs":{},"没":{"docs":{},"有":{"docs":{},"问":{"docs":{},"题":{"docs":{},"的":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},",":{"docs":{},"对":{"docs":{},"于":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"导":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}},"令":{"docs":{},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"说":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"做":{"docs":{},"能":{"docs":{},"够":{"docs":{},"提":{"docs":{},"升":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.007104795737122558}},"。":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}},"有":{"docs":{},"名":{"docs":{},"函":{"docs":{},"数":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}},"度":{"docs":{},"开":{"docs":{},"销":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"提":{"docs":{},"升":{"docs":{},"可":{"docs":{},"读":{"docs":{},"性":{"docs":{},"是":{"docs":{},"值":{"docs":{},"得":{"docs":{},"的":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"使":{"docs":{},"用":{"docs":{},"它":{"docs":{},"们":{"docs":{},"的":{"docs":{},"成":{"docs":{},"本":{"docs":{},"微":{"docs":{},"不":{"docs":{},"足":{"docs":{},"道":{"docs":{},"。":{"docs":{},"尤":{"docs":{},"其":{"docs":{},"适":{"docs":{},"用":{"docs":{},"于":{"docs":{},"那":{"docs":{},"些":{"docs":{},"不":{"docs":{},"仅":{"docs":{},"仅":{"docs":{},"是":{"docs":{},"简":{"docs":{},"单":{"docs":{},"内":{"docs":{},"存":{"docs":{},"访":{"docs":{},"问":{"docs":{},"的":{"docs":{},"较":{"docs":{},"大":{"docs":{},"方":{"docs":{},"法":{"docs":{},",":{"docs":{},"在":{"docs":{},"这":{"docs":{},"些":{"docs":{},"方":{"docs":{},"法":{"docs":{},"中":{"docs":{},"其":{"docs":{},"他":{"docs":{},"计":{"docs":{},"算":{"docs":{},"的":{"docs":{},"资":{"docs":{},"源":{"docs":{},"消":{"docs":{},"耗":{"docs":{},"远":{"docs":{},"超":{"docs":{},"过":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"供":{"docs":{},"容":{"docs":{},"量":{"docs":{},"提":{"docs":{},"示":{"docs":{},"会":{"docs":{},"在":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"时":{"docs":{},"尝":{"docs":{},"试":{"docs":{},"调":{"docs":{},"整":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}},"了":{"docs":{},"两":{"docs":{},"个":{"docs":{},"导":{"docs":{},"出":{"docs":{},"方":{"docs":{},"法":{"docs":{},"用":{"docs":{},"来":{"docs":{},"使":{"docs":{},"用":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}},"种":{"docs":{},"锁":{"docs":{},",":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"(":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},")":{"docs":{},"和":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"(":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"r":{"docs":{},"w":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},")":{"docs":{},",":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"便":{"docs":{},"是":{"docs":{},"共":{"docs":{},"享":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"一":{"docs":{},"种":{"docs":{},"具":{"docs":{},"体":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"五":{"docs":{},"个":{"docs":{},"导":{"docs":{},"出":{"docs":{},"方":{"docs":{},"法":{"docs":{},"用":{"docs":{},"来":{"docs":{},"使":{"docs":{},"用":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}},"示":{"docs":{},"并":{"docs":{},"不":{"docs":{},"保":{"docs":{},"证":{"docs":{},"完":{"docs":{},"全":{"docs":{},"的":{"docs":{},"抢":{"docs":{},"占":{"docs":{},"式":{"docs":{},"分":{"docs":{},"配":{"docs":{},",":{"docs":{},"而":{"docs":{},"是":{"docs":{},"用":{"docs":{},"于":{"docs":{},"估":{"docs":{},"计":{"docs":{},"所":{"docs":{},"需":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}}}}}}}}}}},"'":{"docs":{},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"'":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"'":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}},"放":{"docs":{},"在":{"docs":{},"匿":{"docs":{},"名":{"docs":{},"函":{"docs":{},"数":{"docs":{},"中":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}},"有":{"docs":{},"名":{"docs":{},"函":{"docs":{},"数":{"docs":{},"中":{"docs":{},"然":{"docs":{},"后":{"docs":{},"调":{"docs":{},"用":{"docs":{},"之":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"能":{"docs":{},"够":{"docs":{},"减":{"docs":{},"少":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}},"及":{"docs":{},"其":{"docs":{},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}},"零":{"docs":{},"值":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}},"否":{"docs":{},"则":{"docs":{},",":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"在":{"docs":{},"错":{"docs":{},"误":{"docs":{},"消":{"docs":{},"息":{"docs":{},"中":{"docs":{},"添":{"docs":{},"加":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}},"它":{"docs":{},"们":{"docs":{},"将":{"docs":{},"成":{"docs":{},"为":{"docs":{},"包":{"docs":{},"的":{"docs":{},"公":{"docs":{},"共":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}},"您":{"docs":{},"会":{"docs":{},"收":{"docs":{},"到":{"docs":{},"更":{"docs":{},"多":{"docs":{},"有":{"docs":{},"用":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{},"“":{"docs":{},"呼":{"docs":{},"叫":{"docs":{},"服":{"docs":{},"务":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}},"无":{"docs":{},"错":{"docs":{},"误":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}},"论":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}},"使":{"docs":{},"用":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"结":{"docs":{},"构":{"docs":{},"还":{"docs":{},"是":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"都":{"docs":{},"会":{"docs":{},"限":{"docs":{},"制":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"演":{"docs":{},"化":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}}}}},"需":{"docs":{},"去":{"docs":{},"除":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"优":{"docs":{},"化":{"docs":{},",":{"docs":{},"基":{"docs":{},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}},"锁":{"docs":{},"化":{"docs":{},"主":{"docs":{},"要":{"docs":{},"有":{"docs":{},"两":{"docs":{},"种":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"docs":{},"和":{"docs":{},"串":{"docs":{},"行":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}},"单":{"docs":{},"向":{"docs":{},"链":{"docs":{},"表":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"的":{"docs":{},"简":{"docs":{},"单":{"docs":{},"实":{"docs":{},"现":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"1":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}}},"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"根":{"docs":{},"据":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"是":{"docs":{},"否":{"docs":{},"应":{"docs":{},"该":{"docs":{},"能":{"docs":{},"够":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"和":{"docs":{},"提":{"docs":{},"取":{"docs":{},"根":{"docs":{},"本":{"docs":{},"原":{"docs":{},"因":{"docs":{},",":{"docs":{},"在":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}},"然":{"docs":{},"而":{"docs":{},",":{"docs":{},"一":{"docs":{},"旦":{"docs":{},"错":{"docs":{},"误":{"docs":{},"被":{"docs":{},"发":{"docs":{},"送":{"docs":{},"到":{"docs":{},"另":{"docs":{},"一":{"docs":{},"个":{"docs":{},"系":{"docs":{},"统":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"清":{"docs":{},"楚":{"docs":{},"消":{"docs":{},"息":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"错":{"docs":{},"误":{"docs":{},"(":{"docs":{},"例":{"docs":{},"如":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"后":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"请":{"docs":{},"注":{"docs":{},"意":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"您":{"docs":{},"从":{"docs":{},"包":{"docs":{},"中":{"docs":{},"导":{"docs":{},"出":{"docs":{},"错":{"docs":{},"误":{"docs":{},"变":{"docs":{},"量":{"docs":{},"或":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009}}},"列":{"docs":{},"转":{"docs":{},"换":{"docs":{},"为":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}},"回":{"docs":{},"到":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"例":{"docs":{},"子":{"docs":{},",":{"docs":{},"在":{"docs":{},"一":{"docs":{},"个":{"docs":{},"时":{"docs":{},"间":{"docs":{},"时":{"docs":{},"刻":{"docs":{},"加":{"docs":{},"上":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}},"天":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009}}},"秒":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},";":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"产":{"docs":{},"生":{"docs":{},"模":{"docs":{},"糊":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"文":{"docs":{},"档":{"docs":{},"指":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}},"假":{"docs":{},"设":{"docs":{},"您":{"docs":{},"使":{"docs":{},"用":{"docs":{},"共":{"docs":{},"享":{"docs":{},"的":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}},"我":{"docs":{},"们":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},"有":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"“":{"docs":{},"学":{"docs":{},"生":{"docs":{},"”":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},",":{"docs":{},"并":{"docs":{},"复":{"docs":{},"用":{"docs":{},"改":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"对":{"docs":{},"象":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}}}},"很":{"docs":{},"少":{"docs":{},"需":{"docs":{},"要":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"虽":{"docs":{},"然":{"docs":{},"它":{"docs":{},"可":{"docs":{},"以":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"您":{"docs":{},"避":{"docs":{},"免":{"docs":{},"编":{"docs":{},"写":{"docs":{},"冗":{"docs":{},"长":{"docs":{},"的":{"docs":{},"委":{"docs":{},"托":{"docs":{},"方":{"docs":{},"法":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"多":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"能":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"操":{"docs":{},"作":{"docs":{},"一":{"docs":{},"个":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},",":{"docs":{},"利":{"docs":{},"用":{"docs":{},"反":{"docs":{},"射":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"泛":{"docs":{},"化":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"的":{"docs":{},"能":{"docs":{},"力":{"docs":{},"压":{"docs":{},"根":{"docs":{},"没":{"docs":{},"用":{"docs":{},"上":{"docs":{},"。":{"docs":{},"退":{"docs":{},"一":{"docs":{},"步":{"docs":{},"说":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"我":{"docs":{},"们":{"docs":{},"真":{"docs":{},"地":{"docs":{},"需":{"docs":{},"要":{"docs":{},"对":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"泄":{"docs":{},"漏":{"docs":{},"实":{"docs":{},"现":{"docs":{},"细":{"docs":{},"节":{"docs":{},"指":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}},"移":{"docs":{},"除":{"docs":{},"从":{"docs":{},"列":{"docs":{},"表":{"docs":{},"中":{"docs":{},"移":{"docs":{},"除":{"docs":{},"实":{"docs":{},"体":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.01775147928994083}}}}}}}}}}}}},"获":{"docs":{},"得":{"docs":{},"了":{"docs":{},"同":{"docs":{},"名":{"docs":{},"嵌":{"docs":{},"套":{"docs":{},"类":{"docs":{},"型":{"docs":{},"字":{"docs":{},"段":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}},"。":{"docs":{},"共":{"docs":{},"享":{"docs":{},"锁":{"docs":{},"指":{"docs":{},"可":{"docs":{},"以":{"docs":{},"同":{"docs":{},"时":{"docs":{},"被":{"docs":{},"多":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}},"的":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},"取":{"docs":{},"读":{"docs":{},"锁":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"是":{"docs":{},"一":{"docs":{},"种":{"docs":{},"共":{"docs":{},"享":{"docs":{},"锁":{"docs":{},"。":{"docs":{},"但":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"是":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"的":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}},"@":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"利":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"反":{"docs":{},"射":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"实":{"docs":{},"现":{"docs":{},"一":{"docs":{},"个":{"docs":{},"类":{"docs":{},"型":{"docs":{},"泛":{"docs":{},"化":{"docs":{},"支":{"docs":{},"持":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},"过":{"docs":{},"滤":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"下":{"docs":{},"标":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}},"硬":{"docs":{},"件":{"docs":{},"支":{"docs":{},"持":{"docs":{},"的":{"docs":{},"原":{"docs":{},"子":{"docs":{},"操":{"docs":{},"作":{"docs":{},"可":{"docs":{},"以":{"docs":{},"实":{"docs":{},"现":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"docs":{},",":{"docs":{},"原":{"docs":{},"子":{"docs":{},"操":{"docs":{},"作":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"框":{"docs":{},"架":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"网":{"docs":{},"络":{"docs":{},"字":{"docs":{},"节":{"docs":{},"序":{"docs":{},"解":{"docs":{},"析":{"docs":{},"到":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}},"转":{"docs":{},"为":{"docs":{},"主":{"docs":{},"机":{"docs":{},"字":{"docs":{},"节":{"docs":{},"序":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}},"过":{"docs":{},"滤":{"docs":{},"指":{"docs":{},"定":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{},"注":{"docs":{},"意":{"docs":{},":":{"docs":{},"不":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}},"差":{"docs":{},"距":{"docs":{},"不":{"docs":{},"是":{"docs":{},"很":{"docs":{},"大":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"随":{"docs":{},"着":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"长":{"docs":{},"度":{"docs":{},"的":{"docs":{},"增":{"docs":{},"加":{"docs":{},",":{"docs":{},"差":{"docs":{},"距":{"docs":{},"将":{"docs":{},"会":{"docs":{},"越":{"docs":{},"来":{"docs":{},"越":{"docs":{},"明":{"docs":{},"显":{"docs":{},"。":{"docs":{},"此":{"docs":{},"外":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"这":{"docs":{},"种":{"docs":{},"重":{"docs":{},"复":{"docs":{},"的":{"docs":{},"转":{"docs":{},"换":{"docs":{},"在":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"看":{"docs":{},"一":{"docs":{},"下":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},",":{"docs":{},"注":{"docs":{},"意":{"docs":{},"需":{"docs":{},"要":{"docs":{},"禁":{"docs":{},"止":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"优":{"docs":{},"化":{"docs":{},",":{"docs":{},"不":{"docs":{},"然":{"docs":{},"看":{"docs":{},"不":{"docs":{},"出":{"docs":{},"差":{"docs":{},"别":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"下":{"docs":{},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}}}}}},"与":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"操":{"docs":{},"作":{"docs":{},"将":{"docs":{},"导":{"docs":{},"致":{"docs":{},"零":{"docs":{},"分":{"docs":{},"配":{"docs":{},"(":{"docs":{},"直":{"docs":{},"到":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}},",":{"docs":{},"及":{"docs":{},"做":{"docs":{},"一":{"docs":{},"次":{"docs":{},"数":{"docs":{},"据":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},",":{"docs":{},"耗":{"docs":{},"时":{"docs":{},"几":{"docs":{},"乎":{"docs":{},"可":{"docs":{},"以":{"docs":{},"忽":{"docs":{},"略":{"docs":{},"。":{"docs":{},"而":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},"和":{"docs":{},"回":{"docs":{},"收":{"docs":{},"的":{"docs":{},"耗":{"docs":{},"时":{"docs":{},"占":{"docs":{},"比":{"docs":{},"较":{"docs":{},"多":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"对":{"docs":{},"程":{"docs":{},"序":{"docs":{},"整":{"docs":{},"体":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"影":{"docs":{},"响":{"docs":{},"更":{"docs":{},"大":{"docs":{},"。":{"docs":{},"从":{"docs":{},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"出":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"即":{"docs":{},"调":{"docs":{},"用":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"s":{"docs":{},"w":{"docs":{},"a":{"docs":{},"p":{"docs":{},"(":{"docs":{},")":{"docs":{},"方":{"docs":{},"法":{"docs":{},"进":{"docs":{},"行":{"docs":{},"插":{"docs":{},"入":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"插":{"docs":{},"入":{"docs":{},"失":{"docs":{},"败":{"docs":{},"则":{"docs":{},"进":{"docs":{},"行":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"基":{"docs":{},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},",":{"docs":{},"对":{"docs":{},"比":{"docs":{},"一":{"docs":{},"下":{"docs":{},"有":{"docs":{},"锁":{"docs":{},"与":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}},"来":{"docs":{},"达":{"docs":{},"到":{"docs":{},"一":{"docs":{},"发":{"docs":{},"多":{"docs":{},"收":{"docs":{},"的":{"docs":{},"效":{"docs":{},"果":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}},"都":{"docs":{},"可":{"docs":{},"能":{"docs":{},"调":{"docs":{},"整":{"docs":{},"大":{"docs":{},"小":{"docs":{},"以":{"docs":{},"容":{"docs":{},"纳":{"docs":{},"其":{"docs":{},"他":{"docs":{},"元":{"docs":{},"素":{"docs":{},")":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}},"会":{"docs":{},"浪":{"docs":{},"费":{"docs":{},"额":{"docs":{},"外":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"。":{"docs":{},"因":{"docs":{},"此":{"docs":{},",":{"docs":{},"在":{"docs":{},"这":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"声":{"docs":{},"明":{"docs":{},"为":{"docs":{},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"最":{"docs":{},"合":{"docs":{},"适":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},"了":{"docs":{},"分":{"docs":{},"片":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"分":{"docs":{},"片":{"docs":{},"一":{"docs":{},"把":{"docs":{},"锁":{"docs":{},",":{"docs":{},"采":{"docs":{},"用":{"docs":{},"分":{"docs":{},"片":{"docs":{},"存":{"docs":{},"储":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"减":{"docs":{},"少":{"docs":{},"加":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"次":{"docs":{},"数":{"docs":{},"从":{"docs":{},"而":{"docs":{},"提":{"docs":{},"高":{"docs":{},"整":{"docs":{},"体":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"重":{"docs":{},"新":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}},"且":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}},"预":{"docs":{},"先":{"docs":{},"分":{"docs":{},"配":{"docs":{},"容":{"docs":{},"量":{"docs":{},"的":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"方":{"docs":{},"式":{"docs":{},"性":{"docs":{},"能":{"docs":{},"最":{"docs":{},"佳":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}},"先":{"docs":{},"看":{"docs":{},"下":{"docs":{},"其":{"docs":{},"性":{"docs":{},"能":{"docs":{},"测":{"docs":{},"试":{"docs":{},"的":{"docs":{},"对":{"docs":{},"比":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}},"综":{"docs":{},"合":{"docs":{},"易":{"docs":{},"用":{"docs":{},"性":{"docs":{},"和":{"docs":{},"性":{"docs":{},"能":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"推":{"docs":{},"荐":{"docs":{},"使":{"docs":{},"用":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"来":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"能":{"docs":{},"够":{"docs":{},"接":{"docs":{},"收":{"docs":{},"不":{"docs":{},"同":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"入":{"docs":{},"参":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"格":{"docs":{},"式":{"docs":{},"化":{"docs":{},"输":{"docs":{},"出":{"docs":{},"完":{"docs":{},"成":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"的":{"docs":{},"拼":{"docs":{},"接":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"非":{"docs":{},"常":{"docs":{},"方":{"docs":{},"便":{"docs":{},"。":{"docs":{},"但":{"docs":{},"因":{"docs":{},"其":{"docs":{},"底":{"docs":{},"层":{"docs":{},"实":{"docs":{},"现":{"docs":{},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{},"反":{"docs":{},"射":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"上":{"docs":{},"会":{"docs":{},"有":{"docs":{},"所":{"docs":{},"损":{"docs":{},"耗":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"确":{"docs":{},"保":{"docs":{},"被":{"docs":{},"唤":{"docs":{},"醒":{"docs":{},"后":{"docs":{},"条":{"docs":{},"件":{"docs":{},"一":{"docs":{},"定":{"docs":{},"符":{"docs":{},"合":{"docs":{},"后":{"docs":{},",":{"docs":{},"再":{"docs":{},"执":{"docs":{},"行":{"docs":{},"后":{"docs":{},"续":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}},"性":{"docs":{},"能":{"docs":{},"没":{"docs":{},"有":{"docs":{},"差":{"docs":{},"别":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}},"对":{"docs":{},"比":{"1":{"docs":{},".":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"化":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},"此":{"docs":{},"外":{"docs":{},",":{"docs":{},"因":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}},"迭":{"docs":{},"代":{"docs":{},"的":{"docs":{},"元":{"docs":{},"素":{"docs":{},"较":{"docs":{},"小":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}},"遍":{"docs":{},"历":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.009404388714733543}},"切":{"docs":{},"片":{"docs":{},"或":{"docs":{},"数":{"docs":{},"组":{"docs":{},"有":{"docs":{},"两":{"docs":{},"种":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"一":{"docs":{},"种":{"docs":{},"是":{"docs":{},"下":{"docs":{},"标":{"docs":{},",":{"docs":{},"一":{"docs":{},"种":{"docs":{},"是":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}},"性":{"docs":{},"能":{"docs":{},"几":{"docs":{},"乎":{"docs":{},"没":{"docs":{},"有":{"docs":{},"区":{"docs":{},"别":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}},"首":{"docs":{},"先":{"docs":{},"看":{"docs":{},"一":{"docs":{},"下":{"docs":{},"遍":{"docs":{},"历":{"docs":{},"基":{"docs":{},"本":{"docs":{},"类":{"docs":{},"型":{"docs":{},"切":{"docs":{},"片":{"docs":{},"时":{"docs":{},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"别":{"docs":{},",":{"docs":{},"以":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}},"根":{"docs":{},"据":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"和":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"分":{"docs":{},"别":{"docs":{},"实":{"docs":{},"现":{"docs":{},"对":{"docs":{},"共":{"docs":{},"享":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}},"次":{"docs":{},"被":{"docs":{},"加":{"docs":{},"载":{"docs":{},"时":{"docs":{},"执":{"docs":{},"行":{"docs":{},",":{"docs":{},"若":{"docs":{},"迟":{"docs":{},"迟":{"docs":{},"未":{"docs":{},"被":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"则":{"docs":{},"既":{"docs":{},"浪":{"docs":{},"费":{"docs":{},"了":{"docs":{},"内":{"docs":{},"存":{"docs":{},",":{"docs":{},"又":{"docs":{},"延":{"docs":{},"长":{"docs":{},"了":{"docs":{},"程":{"docs":{},"序":{"docs":{},"加":{"docs":{},"载":{"docs":{},"时":{"docs":{},"间":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"删":{"docs":{},"除":{"docs":{},"切":{"docs":{},"片":{"docs":{},"指":{"docs":{},"定":{"docs":{},"元":{"docs":{},"素":{"docs":{},"一":{"docs":{},"般":{"docs":{},"有":{"docs":{},"如":{"docs":{},"下":{"docs":{},"几":{"docs":{},"种":{"docs":{},"方":{"docs":{},"法":{"docs":{},",":{"docs":{},"本":{"docs":{},"文":{"docs":{},"以":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}},"指":{"docs":{},"定":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.01444043321299639}}}}}}}}},"事":{"docs":{},"实":{"docs":{},"上":{"docs":{},"可":{"docs":{},"以":{"docs":{},"用":{"docs":{},"任":{"docs":{},"何":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"docs":{},"替":{"docs":{},"代":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}},"计":{"docs":{},"算":{"docs":{},"出":{"docs":{},"一":{"docs":{},"个":{"docs":{},"数":{"docs":{},"据":{"docs":{},"类":{"docs":{},"型":{"docs":{},"实":{"docs":{},"例":{"docs":{},"需":{"docs":{},"要":{"docs":{},"占":{"docs":{},"用":{"docs":{},"的":{"docs":{},"字":{"docs":{},"节":{"docs":{},"数":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}}}},"数":{"docs":{},"器":{"docs":{},",":{"docs":{},"统":{"docs":{},"计":{"docs":{},"函":{"docs":{},"数":{"docs":{},"执":{"docs":{},"行":{"docs":{},"次":{"docs":{},"数":{"docs":{},";":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}},"位":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}},"始":{"docs":{},"终":{"docs":{},"以":{"docs":{},"字":{"docs":{},"长":{"docs":{},"访":{"docs":{},"问":{"docs":{},"内":{"docs":{},"存":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"不":{"docs":{},"进":{"docs":{},"行":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"增":{"docs":{},"加":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}},"布":{"docs":{},"局":{"4":{"docs":{},".":{"docs":{},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"与":{"docs":{},"空":{"docs":{},"数":{"docs":{},"组":{"docs":{},"对":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"的":{"docs":{},"影":{"docs":{},"响":{"1":{"docs":{},".":{"docs":{},"为":{"docs":{},"什":{"docs":{},"么":{"docs":{},"需":{"docs":{},"要":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}}},"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"可":{"docs":{},"以":{"docs":{},"减":{"docs":{},"少":{"docs":{},"内":{"docs":{},"存":{"docs":{},"占":{"docs":{},"用":{"docs":{},",":{"docs":{},"提":{"docs":{},"高":{"docs":{},"程":{"docs":{},"序":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}},"考":{"docs":{},"虑":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":5}}}}}}}}}},"至":{"docs":{},"少":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"访":{"docs":{},"存":{"docs":{},"指":{"docs":{},"令":{"docs":{},"周":{"docs":{},"期":{"docs":{},",":{"docs":{},"提":{"docs":{},"高":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"访":{"docs":{},"问":{"docs":{},"效":{"docs":{},"率":{"docs":{},",":{"docs":{},"会":{"docs":{},"对":{"docs":{},"变":{"docs":{},"量":{"docs":{},"进":{"docs":{},"行":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"次":{"docs":{},"数":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"的":{"docs":{},"单":{"docs":{},"位":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"问":{"docs":{},"内":{"docs":{},"存":{"docs":{},"并":{"docs":{},"不":{"docs":{},"是":{"docs":{},"逐":{"docs":{},"个":{"docs":{},"字":{"docs":{},"节":{"docs":{},"访":{"docs":{},"问":{"docs":{},",":{"docs":{},"而":{"docs":{},"是":{"docs":{},"以":{"docs":{},"字":{"docs":{},"长":{"docs":{},"(":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"吞":{"docs":{},"吐":{"docs":{},"量":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},"同":{"docs":{},"样":{"docs":{},"读":{"docs":{},"取":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}},"次":{"docs":{},"数":{"docs":{},",":{"docs":{},"加":{"docs":{},"大":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}},"发":{"docs":{},"生":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"在":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"申":{"docs":{},"请":{"docs":{},"切":{"docs":{},"片":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}},"栈":{"docs":{},"上":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"比":{"docs":{},"在":{"docs":{},"堆":{"docs":{},"中":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"有":{"docs":{},"更":{"docs":{},"高":{"docs":{},"的":{"docs":{},"效":{"docs":{},"率":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},"栈":{"docs":{},"上":{"docs":{},"分":{"docs":{},"配":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"版":{"docs":{},"本":{"docs":{},"的":{"docs":{},"大":{"docs":{},"小":{"docs":{},"限":{"docs":{},"制":{"docs":{},"可":{"docs":{},"能":{"docs":{},"不":{"docs":{},"一":{"docs":{},"样":{"docs":{},"。":{"docs":{},"一":{"docs":{},"般":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}},"知":{"docs":{},"道":{"docs":{},"变":{"docs":{},"量":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"的":{"docs":{},"原":{"docs":{},"因":{"docs":{},"后":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"有":{"docs":{},"意":{"docs":{},"识":{"docs":{},"地":{"docs":{},"避":{"docs":{},"免":{"docs":{},"变":{"docs":{},"量":{"docs":{},"发":{"docs":{},"生":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"将":{"docs":{},"其":{"docs":{},"限":{"docs":{},"制":{"docs":{},"在":{"docs":{},"栈":{"docs":{},"上":{"docs":{},",":{"docs":{},"减":{"docs":{},"少":{"docs":{},"堆":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"分":{"docs":{},"配":{"docs":{},",":{"docs":{},"降":{"docs":{},"低":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"闭":{"docs":{},"包":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"压":{"docs":{},"力":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}},")":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"、":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}},"串":{"docs":{},"行":{"docs":{},"无":{"docs":{},"锁":{"2":{"docs":{},".":{"docs":{},"减":{"docs":{},"少":{"docs":{},"锁":{"docs":{},"竞":{"docs":{},"争":{"3":{"docs":{},".":{"docs":{},"优":{"docs":{},"先":{"docs":{},"使":{"docs":{},"用":{"docs":{},"共":{"docs":{},"享":{"docs":{},"锁":{"docs":{},"而":{"docs":{},"非":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"3":{"docs":{},".":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}},"docs":{}}}}}}}},"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"是":{"docs":{},"一":{"docs":{},"种":{"docs":{},"思":{"docs":{},"想":{"docs":{},",":{"docs":{},"就":{"docs":{},"是":{"docs":{},"避":{"docs":{},"免":{"docs":{},"对":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},"访":{"docs":{},"问":{"docs":{},",":{"docs":{},"改":{"docs":{},"为":{"docs":{},"每":{"docs":{},"个":{"docs":{},"并":{"docs":{},"发":{"docs":{},"操":{"docs":{},"作":{"docs":{},"访":{"docs":{},"问":{"docs":{},"自":{"docs":{},"己":{"docs":{},"独":{"docs":{},"占":{"docs":{},"的":{"docs":{},"资":{"docs":{},"源":{"docs":{},",":{"docs":{},"达":{"docs":{},"到":{"docs":{},"串":{"docs":{},"行":{"docs":{},"访":{"docs":{},"问":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"效":{"docs":{},"果":{"docs":{},",":{"docs":{},"来":{"docs":{},"避":{"docs":{},"免":{"docs":{},"使":{"docs":{},"用":{"docs":{},"锁":{"docs":{},"。":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},"有":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},"网":{"docs":{},"络":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"协":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"池":{"docs":{},"化":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"自":{"docs":{},"己":{"docs":{},"写":{"docs":{},"一":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"池":{"docs":{},",":{"docs":{},"但":{"docs":{},"不":{"docs":{},"推":{"docs":{},"荐":{"docs":{},"这":{"docs":{},"么":{"docs":{},"做":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},"已":{"docs":{},"经":{"docs":{},"有":{"docs":{},"成":{"docs":{},"熟":{"docs":{},"的":{"docs":{},"开":{"docs":{},"源":{"docs":{},"库":{"docs":{},"可":{"docs":{},"供":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"无":{"docs":{},"需":{"docs":{},"再":{"docs":{},"重":{"docs":{},"复":{"docs":{},"造":{"docs":{},"轮":{"docs":{},"子":{"docs":{},"。":{"docs":{},"目":{"docs":{},"前":{"docs":{},"有":{"docs":{},"很":{"docs":{},"多":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"库":{"docs":{},"实":{"docs":{},"现":{"docs":{},"了":{"docs":{},"协":{"docs":{},"程":{"docs":{},"池":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"很":{"docs":{},"方":{"docs":{},"便":{"docs":{},"地":{"docs":{},"用":{"docs":{},"来":{"docs":{},"控":{"docs":{},"制":{"docs":{},"协":{"docs":{},"程":{"docs":{},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},"数":{"docs":{},"量":{"docs":{},",":{"docs":{},"比":{"docs":{},"较":{"docs":{},"受":{"docs":{},"欢":{"docs":{},"迎":{"docs":{},"的":{"docs":{},"有":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"代":{"docs":{},"价":{"2":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}}},"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"都":{"docs":{},"执":{"docs":{},"行":{"docs":{},"到":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},"将":{"docs":{},"单":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"库":{"docs":{},")":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"用":{"docs":{},"于":{"docs":{},"实":{"docs":{},"现":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"docs":{},",":{"docs":{},"如":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"链":{"docs":{},"表":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}},"设":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}}}},"链":{"docs":{},"表":{"docs":{},"节":{"docs":{},"点":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},"~":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"亿":{"docs":{},"个":{"docs":{},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"内":{"docs":{},"部":{"docs":{},"几":{"docs":{},"乎":{"docs":{},"没":{"docs":{},"有":{"docs":{},"做":{"docs":{},"什":{"docs":{},"么":{"docs":{},"事":{"docs":{},"情":{"docs":{},"。":{"docs":{},"正":{"docs":{},"常":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"呢":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"程":{"docs":{},"序":{"docs":{},"会":{"docs":{},"乱":{"docs":{},"序":{"docs":{},"输":{"docs":{},"出":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"去":{"docs":{},"执":{"docs":{},"行":{"docs":{},"另":{"docs":{},"外":{"docs":{},"一":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},",":{"docs":{},"下":{"docs":{},"面":{"docs":{},"看":{"docs":{},"一":{"docs":{},"下":{"docs":{},"协":{"docs":{},"程":{"docs":{},"之":{"docs":{},"间":{"docs":{},"切":{"docs":{},"换":{"docs":{},"的":{"docs":{},"耗":{"docs":{},"时":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}},"手":{"docs":{},"动":{"docs":{},"g":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}}},"控":{"docs":{},"制":{"docs":{},"并":{"docs":{},"发":{"docs":{},"处":{"docs":{},"理":{"docs":{},"的":{"docs":{},"任":{"docs":{},"务":{"docs":{},"数":{"docs":{},"量":{"docs":{},",":{"docs":{},"就":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}},"数":{"docs":{},"量":{"docs":{},",":{"docs":{},"复":{"docs":{},"用":{"docs":{},"协":{"docs":{},"程":{"docs":{},",":{"docs":{},"达":{"docs":{},"到":{"docs":{},"更":{"docs":{},"高":{"docs":{},"效":{"docs":{},"执":{"docs":{},"行":{"docs":{},"任":{"docs":{},"务":{"docs":{},"的":{"docs":{},"效":{"docs":{},"果":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}},"毫":{"docs":{},"无":{"docs":{},"压":{"docs":{},"力":{"docs":{},",":{"docs":{},"但":{"docs":{},"当":{"docs":{},"我":{"docs":{},"们":{"docs":{},"起":{"docs":{},"十":{"docs":{},"万":{"docs":{},"、":{"docs":{},"百":{"docs":{},"万":{"docs":{},"甚":{"docs":{},"至":{"docs":{},"千":{"docs":{},"万":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}},"池":{"docs":{},",":{"docs":{},"实":{"docs":{},"现":{"docs":{},"了":{"docs":{},"对":{"docs":{},"大":{"docs":{},"规":{"docs":{},"模":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}},"约":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"耗":{"docs":{},"时":{"docs":{},"越":{"docs":{},"大":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}},"轻":{"docs":{},"量":{"docs":{},"的":{"docs":{},"开":{"docs":{},"销":{"docs":{},"将":{"docs":{},"被":{"docs":{},"放":{"docs":{},"大":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"限":{"docs":{},"制":{"docs":{},"协":{"docs":{},"程":{"docs":{},"数":{"docs":{},"量":{"3":{"docs":{},".":{"docs":{},"协":{"docs":{},"程":{"docs":{},"池":{"docs":{},"化":{"4":{"docs":{},".":{"docs":{},"小":{"docs":{},"结":{"1":{"docs":{},".":{"docs":{},"协":{"docs":{},"程":{"docs":{},"数":{"docs":{},"过":{"docs":{},"多":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"docs":{}}}}},"docs":{}}}}}}},"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}},"“":{"docs":{},"h":{"docs":{},"o":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"热":{"docs":{},"路":{"docs":{},"径":{"docs":{},"(":{"docs":{},"h":{"docs":{},"o":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}},"线":{"docs":{},"程":{"docs":{},"安":{"docs":{},"全":{"docs":{},",":{"docs":{},"保":{"docs":{},"障":{"docs":{},"在":{"docs":{},"多":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}},"绝":{"docs":{},"大":{"docs":{},"部":{"docs":{},"分":{"docs":{},"场":{"docs":{},"景":{"docs":{},"都":{"docs":{},"会":{"docs":{},"访":{"docs":{},"问":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"统":{"docs":{},"计":{"docs":{},"函":{"docs":{},"数":{"docs":{},"执":{"docs":{},"行":{"docs":{},"次":{"docs":{},"数":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}},"考":{"docs":{},"虑":{"docs":{},"一":{"docs":{},"个":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},",":{"docs":{},"函":{"docs":{},"数":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}},"点":{"docs":{},"汇":{"docs":{},"总":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"$":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}},"充":{"docs":{},"当":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},"实":{"docs":{},"现":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"唤":{"docs":{},"醒":{"docs":{},"了":{"docs":{},"该":{"docs":{},"协":{"docs":{},"程":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"所":{"docs":{},"有":{"docs":{},"等":{"docs":{},"待":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"顺":{"docs":{},"序":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"定":{"docs":{},"位":{"docs":{},"于":{"docs":{},"同":{"docs":{},"步":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"一":{"docs":{},"发":{"docs":{},"多":{"docs":{},"收":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},"。":{"docs":{},"虽":{"docs":{},"然":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}},"通":{"docs":{},"信":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"一":{"docs":{},"发":{"docs":{},"一":{"docs":{},"收":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},",":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}},"既":{"docs":{},"然":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"经":{"docs":{},"常":{"docs":{},"用":{"docs":{},"在":{"docs":{},"多":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"置":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"阻":{"docs":{},"塞":{"docs":{},"等":{"docs":{},"待":{"docs":{},"的":{"docs":{},"条":{"docs":{},"件":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"博":{"docs":{},"客":{"docs":{},"园":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}},"极":{"docs":{},"客":{"docs":{},"兔":{"docs":{},"兔":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"深":{"docs":{},"度":{"docs":{},"解":{"docs":{},"密":{"docs":{},"g":{"docs":{},"o":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}},"length":6401},"corpusTokens":["!=","!allowuserlogin","!condition()","!done","!ok","\"","\"\"","\"\",","\",","\",\"","\"../net\"","\"/api/v3/projects/%s/merge_request/%s/commits\"","\"0\",","\"1\",","\"1.0.0\"","\"192.0.2.0\",","\"192.0.2.0:8000\",","\"192.0.2.0:http\",","\"1:8\",","\"8\",","\"8000\",","\":8000\",","\"a\"","\"add\"},","\"application/json\"","\"application/json\",","\"b\"","\"b\",","\"bar\"","\"bar\")","\"bar\",","\"bar\"}","\"bar/testutil\"","\"baz\"","\"c\"}","\"config\",","\"config.yaml\"),","\"darwin\":","\"doe\",","\"encoding/json\"","\"error\"","\"fail","\"failed\"","\"fmt\"","\"foo\"","\"foo\",","\"foo\"}","\"github.com/olivere/elastic/v7\"","\"github.com/panjf2000/ants\"","\"github.com/xxxxxxxx/utils/formatlog\"","\"github.com/xxxxxxxx/xxxserver/pkg/formatlog\"","\"go.uber.org/atomic\"","\"golang.org/x/sync/errgroup\"","\"http\"","\"http\",","\"https\"","\"https://git.code.oa.com\"","\"img\"","\"john\",","\"john@example.com\",","\"linux\":","\"log\"","\"main/list\"","\"my_env\"","\"myproject/controller\"","\"myproject/models\"","\"new","\"os\"","\"rsp","\"runtime\"","\"runtime/debug\"","\"start","\"strings\"","\"subtract\"},","\"sync\"","\"sync/atomic\"","\"time\"","\"tom,jerry,spike\"","\"unknown","\"unsafe\"","\"wake","\"xxxx.com/proj/net\"","#","$","%","%d,","%q","%q\",","%s\",","%v","%v\",","%v\",err))","%v\\n\",","%w","%w\",","%w。","&&","&_config)","&bytes.buffer{}","&cond{l:","&config)","&config{","&node{","¬found)","¬founderror{file:","&num)","&s1{}","&s2{}","&signer{","&smap{","&something{}","&st","&t{name:","&wg)","&withlocklist{}","&{storag","'defer'","'for'","(","(*handler)(nil)","(*handler)(nil)将无法编译通过。","(*node,","(/*","([]userinfo,","(amd64/386),","(bucket","(c","(can","(d","(e","(error,","(f","(f*","(faq)","(format","(h","(https://golang.org/ref/spec#predeclared_identifiers)。","(https://rakyll.org/styl","(if","(int(bar)","(int,","(int32,","(l","(lat,","(m","(map[uint64]userinfo,","(max","(multipl","(myerror)","(n","(non","(o","(often","(p","(s","(string","(system","(to","(travis、circle、drone)配置和脚本放在","(use",")",")、容器(",")、操作系统(",")包配置和脚本放在","*","*/","*/)","*/,","*[]*bmap","*_type","*abstractlist","*abstractlist)","*attrmodel","*bmap","*bookingservice)","*common.context)","*concretelist)","*cond","*cond)","*config","*db.row)","*driver)","*foo)","*handler)","*handler)、切片和映射是","*http.request)","*itab","*item","*lockfreelist)","*mapextra","*mutex","*node","*node)","*notfounderror","*notfounderror)","*once)","*pp","*pp)","*resolveerror)","*rwmutex),","*s)","*s2)","*signer","*signer)","*smap","*smap)","*someth","*something)","*st","*stats)","*sync.cond)","*sync.waitgroup)","*testing.b)","*testing.t)","*withlocklist)","*zap.logg","+","+0x11b","+0x48","+0x65","+0x72","+0x75","+0x8f","+1,一个","+=",".","...","....","...interface{})","...string)","...uint64)","./main.go:5:12","./main.go:5:12:","./main.go:9:12:",".形式导入包",".,因为它使程序难以阅读,比如使用","/*","//","//手动抛出","/api","/asset","/build","/build/ci","/build/packag","/cmd","/config","/deploy","/deploy。","/doc","/exampl","/githook","/init","/intern","/internal/app/myapp","/internal/pkg/","/pkg","/readme.md","/script","/src","/test","/test/data","/test/testdata。请注意,如果你需要忽略目录中的内容,go","/third_parti","/tool","/users/dablelv/work/code/test/main.go:14","/users/dablelv/work/code/test/main.go:16","/usr/local/go/src/fmt/print.go:265","/usr/local/go/src/fmt/print.go:274","/usr/local/go/src/internal/poll/fd_mutex.go:147","/usr/local/go/src/internal/poll/fd_mutex.go:239","/usr/local/go/src/internal/poll/fd_unix.go:262","/usr/local/go/src/os/file.go:176","/usr/local/go/src/os/file_posix.go:49","/vendor","/web","/websit","0","0)","0,","0.2511","0.导语","01","05","08","09","0;","0s","0x0)","0x1,","0x1})","0x1}))","0x8,","0x8})","0xc0000ac008},","0xc12ea62f50})","0},","0。","0,但不够直观","0,更加直观","1","1)","1,","1.","1.1","1.13","1.2","1.379","1.582","1.732","1.813","1.841","1.[]int","1.[]int2.[]struct{}3.[]*struct4.小结go","1.for","1.不占内存空间2.空结构体的作用2.1","1.不需要指向","1.为什么需要内存对齐2.go","1.优先使用","1.使用","1.使用空结构体节省内存","1.关于锁","1.前言2.项目布局2.1","1.协程数过多的问题1.1","1.反射虽好,切莫贪杯","1.基本类型偏执通用场景结构体2.单一职责包&文件函数3.goroutine4.应用服务5.常用工具1.基本类型偏执","1.将","1.局部切片尽可能确定长度或容量","1.局部切片尽可能确定长度或容量2.返回值","1.截取法(修改原切片)","1.截取法(修改原切片)2.拷贝法(不改原切片)3.移位法(修改原切片)4.性能对比5.小结go","1.指定","1.方法接收器为值和指针的区别","1.无锁化1.1","1.格式化","1.简介2.作用3.如何使用4.性能差异5.在标准库中的应用1.简介","1.简介2.使用场景3.实现原理4.使用示例5.注意事项1.简介","1.简介2.原理2.1","1.行内字符串拼接2.非行内字符串拼接1.行内字符串拼接","1.避免使用可变全局变量","1.错误处理","1.错误类型2.错误包装1.错误类型","1.零值","10","10)","10.函数","100","1000","1000)","10000","10000)","100000","100000)","1000000","1000000000","1000:","100ns,相对于线程的微秒级耗时切换,性能表现非常优秀,但是仍有开销。","100:","1020","1024","1024)","10240","1048575)","108668","10:48:42","10、100、1000","10:","11.单元测试","1142025","1158408","11987966","12","12.杂项","1226868","1246887","127.0.0.1","13","13,","13026195","13339154","1342947","1427","144,","145.3","145690","14897282","1514","15190)。如果您比较两个时刻,则差异将不包括这两个时刻之间可能发生的闰秒。","1521","157.2","15:40:04","15:43:51","15:46:40","15:47:37","15:50:17","15:54:25","16","1652146","166.0","16:00:37","16:56:50","17.53","17.81","1708","17466486","17:03:00","18","186127288","1906","19:22:09","19:54:14","1m","1mb","1s,一方面是模拟耗时,另一方面是确保前面的","1。","1,不要使用魔法数字。","1,我们要删除所有的","1,错误输出文件描述符为","2","2)","2,","2.0,","2.0027m","2.1","2.2","2.3","2.4","2.5","2.6","2.60ghz","2.7","2.962","2.[]struct{}","2.channel","2.for","2.go","2.struct","2.代码行","2.作用","2.使用","2.使用场景","2.使用第三方","2.减少锁竞争","2.单一职责","2.原理","2.将","2.少量的重复不比反射差","2.拷贝法(不改原切片)","2.指定切片容量","2.空结构体的作用","2.编译期验证","2.返回值","2.避免在公共结构中嵌入类型","2.避免重复转换字符串到字节切片","2.错误包装","2.限制协程数量","2.非行内字符串拼接","2.项目布局","20","20%)","20%)。","20.95","2000}","2009","2022","2022/03/06","2022/03/27","20:37:02","20:37:03","20:37:04","20:37:05","21","21,","2124","2124237","2130706433","216.2","2165","21915","21952129","21:18:14","21:18:32","21:44:06","22","22176390","2242","2290372","22:12:52","22:19:54","22:23:35","22:37:19","22:45:54","233)","236.2","239.1","24","2406","2462","258662","27","27.40","2714158","27169","2724","2861","296","2^31","2^b","2k","2kb","2}","2。","2,从第","2,因此,必须空出","2,标准输入的文件描述符为","3","3)","3,","3.006","3.00ghz","3.0}[i","3.1","3.14","3.2","3.3","3.378","3.510","3.742","3.809","3.865","3.908","3.[]*struct","3.for","3.goroutin","3.不要在","3.优先使用共享锁而非互斥锁","3.使用","3.减少逃逸,将变量限制在栈上","3.协程池化","3.合理的","3.在边界处拷贝","3.如何使用","3.字符串","3.实现原理","3.小的拷贝好过引用","3.小结","3.性能差异","3.慎用","3.指定容器容量","3.移位法(修改原切片)","30.9523m","30079785","303693","30748495","30914","31543916","3161318","31663521","32","325194","3339","34,","359.9","36.39","3615","365","37.34","380626","38799","39.58","3s,确保所有操作执行完毕。","3。","4","4,","4.402","4.sync.pool","4.使用","4.使用示例","4.依赖管理","4.字符串拼接方式","4.小结","4.应用服务","4.性能对比","4.性能差异","4.枚举从","4.空结构与空数组对内存对齐的影响","4.返回值使用确定的类型","40.60","404","4124","423.7","432049","432386","43268738","44","46161","464974","485917","498673","4gb/2kb","4gb,那么至多允许","4。","4,因此,demo2","4,因此,必须空出","4,此时,内存已经是对齐的,从第","5","5,","5.097","5.427","5.[]struct{}","5.初始化","5.在标准库中的应用","5.小结","5.常用工具","5.注意事项","50","50%)","50%),rpct","50.78","5007","5043324","5076255","5194722","532350","534.8","535705","54.68","55,","55,89,","556436","56067","578.4","5}","6","6,","6.454","6.切片删除指定元素","6.错误处理","60","60079003","639","64","64)","65.07","665341896","66930670","670438965","692400","7","7,","7.注释","7032921","70638928","748467979","7520017","752077","762.1","773634","8","8,","8,7,6,9,5,4,3,1,2,0","8.命名","80","80%)","80%),rpct","800","8074","81.96","8192","8249469","832418","85.22","87.46","8728),也不在计算中考虑闰秒(issu","878246492","89,","893.6","9","9,8,7,6,5,4,3,2,0,1","9.532","9.流程控制","97.12","9700","9750h","978.2","997200n","99n","9}",":=",";","=","==","===","======begin",">",">=2","@","[1024]byte","[1024]byte,如果每次遍历","[1024]int","[4]","[]*item","[]byte)","[]data){}","[]float64{1.0,","[]int","[]int)","[]int,","[]interface{}{uint64(1),","[]int{1,","[]int{}","[]int。但如果迭代的元素较大,如一个包含很多属性的","[]item,都会进行一次值拷贝,所以带来了性能损耗。","[]string)","[]string{\"a\",","[]string{\"tom\",\"jerry\",\"spike\"}","[]struct","[]struct{","[]trip)","[]uint64","[]uint64,","[]uint64{1,","[capacity]int","[predeclar","[running]:","[style","_","_,","_config","_defaultfoo","_e","_type","```go","```shell","`fields`","`json:\"interval\"`","`json:\"intervalmillis\"`","`time.adddate`。但是,如果我们想保证某一时刻比前一时刻晚","`unknown","a)","a,","a...)","a[:0]","a[:j]","a[j]","abstractlist","abstractlist。相反,只需手动将方法写入具体的列表,委托给抽象列表的方法。","abstractlist,如果嵌入的类型是","accord","action","action.","add","add(","add(entity)","add(key","add1","add2","add=0,","add=1,","addarea","addarea(area","address","admin:","advic","ag","aliases)都必须有注释说明。","align","alive,","all\")","alloc","allocations.","allocs/op","allow","allowuserlogin","alreadi","amd64","ami","announc","ant","ants.newpool(10000)","ants,我们简单地使用其默认的协程池,直接将任务提交并发执行。默认协程池的缺省容量","any).","any.","api","apiclient、repoid、userid;","apiclient;","api,但又没有明确说明,既导致了模糊的文档,又泄露了","append","append()","append(nums,","append(s.areas,","append(t,","append(tgt,","append(tmp,","application)。","approxim","appvers","architectur","architectures.","area","area)","arg","args[0]","argument","arr","arr[4])","array","array'","arrayfibonacci","arrayfibonacci()","ask","assert.equal(t,","asset","assign","associ","assum","atom","atomic.bool","atomic.compareandswapuint32(&o.done,","atomic.loaduint32(&o.done)","atomic.storeuint32","atomic.storeuint32(&o.done,","atomic.swapint32(&f.running,","atomic.valu","avoid","awoken","a、b","b","b)","b,","b/op","ba","back","bad","bad:","bar","bar(&foo)","bar(foo)","bar(i","bar/testutil,后者导入","basic","baz","be","befor","believ","bench=.","bench=^benchmarkjoinstr","bench=benchmarkntohl.*","bench=benchmarkrang","bench=benchmarkret","bench=benchmarkslic","bench=benchmarkstringtobyt","bench=intslice$","bench=pointer$","benchmarkarray","benchmarkarray(b","benchmarkbuff","benchmarkbufferwithpool","benchmarkbufferwithpool(b","benchmarkconcurwritemapwithlock(b","benchmarkconwritemapnoshard(b","benchmarkdeleteslice1","benchmarkdeleteslice1(b","benchmarkdeleteslice2","benchmarkdeleteslice3","benchmarkdeleteslice4","benchmarkdeletesliceelm","benchmarkdeletesliceelms(b","benchmarkdeleteu64liceelm","benchmarkifc","benchmarkindexintslic","benchmarkindexpoint","benchmarkindexstructslic","benchmarkindexstructslice(b","benchmarkjoinstrwithbytesbuff","benchmarkjoinstrwithbyteslic","benchmarkjoinstrwithbytesliceprealloc","benchmarkjoinstrwithoper","benchmarkjoinstrwithoperator(b","benchmarkjoinstrwithsprintf","benchmarkjoinstrwithstringsbuild","benchmarkjoinstrwithstringsbuilderprealloc","benchmarkjoinstrwithstringsbuilderprealloc(b","benchmarkjoinstrwithstringsjoin","benchmarkjoinstrwithstringsjoin(b","benchmarkmutexreadmor","benchmarkmutexreadmore(b","benchmarkmutexrwequ","benchmarkmutexwritemor","benchmarkntohl","benchmarkntohl(b","benchmarkntohlnotusebinari","benchmarkrange1","benchmarkrange1(b","benchmarkrange2","benchmarkrangeindexstructslic","benchmarkrangeintslic","benchmarkrangepoint","benchmarkrangestructslic","benchmarkreadconfig","benchmarkreadconfigwithonc","benchmarkreadconfigwithonce(b","benchmarkretptr","benchmarkretvalu","benchmarkretvalue(b","benchmarkrwmutexreadmor","benchmarkrwmutexrwequ","benchmarkrwmutexwritemor","benchmarkslic","benchmarksliceescap","benchmarkslicenoescap","benchmarkstringtobyt","benchmarkstringtobyte(b","benchmarkstringtobyteonc","benchmarkwritewithlocklist(b","benchmem","bigcach","binari","binary.bigendian,","binary.read","binary.read(buf,","binary.writ","binary.write标准库","blank","blog","blue","bmap.overflow","bodi","bool","bool)","both","break","broadcast","broadcast()","broken\")","bucket","bucket.","buckets.","buckets;","buf","buffer","buffer,","bufferpool","build","builtin)","byte","byte[]","byteorder,","bytes","bytes.buff","bytes.newbuffer([]byte(req)))","bytes.newreader(bys)","c","c++","c++11","c,","c.","c.broadcast()","c.checker.check()","c.l","c.l.lock()","c.l.unlock()","c.l,因为","c.wait()","c/c++","ca","cach","cache、freecach","cal()","calccost(n","calccost(s.weights)","calcul","call","call)","call.","called,","caller","calls,","can't","cap","cap(p.buf)","cap)","capac","capacity)","captur","car","case","caus","cell","cfg.decode(data)","cfg.decode(data);","ch","chan","chang","channel","channel,在没有被接收的情况下,至多发送","channel,每个协程阻塞在一个","check","checker","cheney","ci","classesuid","close","close()","close(ch)","cloud","cmd","cmd/compile/internal/reflectdata/reflect.go.","cn.md。","code","code)","code,","coder","codeusing(f,","color.new(0x0000ff)","color.new(0x00ff00)","color.new(0xff0000)","comm","comma","command","comment","commit","common","compact","compiler'","complete.","complex","complex128","complex64","compose、kubernetes/helm、mesos、terraform、bosh)。注意,在一些存储库中(特别是使用","concretelist","concurr","concurwritemapwithlock","concurwritemapwithlock()","concurwritewithlocklist","concurwritewithlocklist(l","cond","cond)","condit","config","config\"","config.init(filename)","config.once.do(func()","consid","console.log(\"plugin","const","const,","constant","constants:","contain","context","context.context,","continu","continue,","conversion)","convert","conwritemapnoshard","conwritemapnoshard()","copi","copy(d.trips,","copy/copy.go","copy/copy.go:17:6:","copy/copy.go:18:11:","copy/copy.go:5:6:","copycheck","core(tm)","correctli","cost","cost()","cost,","cost.","count","count==0.","counter","cpu","cpu:","creat","createlargenumgoroutine(1000,","createlargenumgoroutine(10000,","createlargenumgoroutine(100000,","createlargenumgoroutine(num","cur","cur.next","cur.value)","custom","customer、wikipage、account、addressparser,它不应是动词。","cwd,","d","d)","d,","d.settrips(trips)","d.trip","dablelv@dablelv","darwin","darwin/amd64","data","data,","data:","database/sql、编码类型注册表等;","dataetl(ctx","data、info","data。data","datetim","dave","day","db.query(...)","db.query(.....)","db.query(v)","deadlock.","debug.setgcpercent(","deb、rpm、pkg","default:","defaultfoo()","default。","defer","defer。","defer,因为这可能会导致资源泄漏(poss","defer,因为释放资源不会尽可能早地发生(在每次迭代结束时),只有在","defer,资源将在不需要时被立即释放。","definition.","definition)和类型别名(typ","delay","delet","delete(key","delete(m,","delete(s,","deleteslice1","deleteslice1(a","deleteslice2","deleteslice2(a","deleteslice3","deleteslice3(a","deleteslice4","deleteslice4(a","deletesliceelm","deletesliceelms(i","deleteu64liceelm","deleteu64liceelms(i","demo1","demo1:","demo2","demo2:","demo3","demo4","demo4{}","demograph","deploy","descriptor)来访问文件,标准输出的文件描述符为","detail","differ","do()","do(),参数","do(f","do:","doc","docker","done","door","door\")","door)","door,在这种情况下,door","doslow(f","driven","dure","dynam","e.file)","e.path)","e.target.tagnam","each","echart","efac","effect","elast","elem","element","elm","else。","email","email:","encod","encoding/binari","encoding/json","encoding/json。以","encountered.","entity)","entri","enum","envvar","er","err","err)","err.error())","err:%v\",","errbrokenlink","errcouldnotopen","errgroup.group","errgroup.group{}","errgroup.group。","errnotfound","error","error\")","error()","error)","error.","error:","error:\"test\"`","errorcod","errormessag","errors,","errors.a","errors.as(err,","errors.i","errors.is(err,","errors.new","errors.new(\"an","errors.new(\"could","errors.new(\"link","errors.new(\"miss","errors.new(\"not","errors.new(fmt.sprintf(\"modul","errors.new,但对于后者,我们必须使用","error。","err。","escap","etc.","etldata(ctx","evacu","evacuated)","even","event.","exactli","exampl","example_test.go。","except","exception\")","exe.run()","exec","execut","execute.","execution,","extra","f","f()","f,","f.","f.close","f.close()","f.err","f.error","f.run","f.running.load()","f.running.swap(true)","f.stat()","f.str","f.string","fail","failures)的主要根源。如果发生错误,该函数应该返回错误,让调用方决定如何处理它。","faketim","fall","fals","false,","falsehood","fast","fewer","field","fields,","fields.close()","file","file\")","file)","file.chmod(0664)","file.chmod(0664);","file/socket","files,","file}","filterhandlermap","filtersomething(valu","finished.","first","first'","firstname:","flag","flagconfigfil","flagconfigfile1","flagconfigfile2","flagconfigfile3","flagconfigfile4","float32","float64","float64)","float64,","float64,并在字段名称中包含单位。","flow:","fmt","fmt.errorf","fmt.errorf(","fmt.errorf(\"db.queri","fmt.errorf(\"fil","fmt.errorf(\"modul","fmt.errorf(\"run","fmt.errorf(\"som","fmt.errorf。","fmt.fprintln(os.stderr,","fmt.fprintln({0x10c00e0,","fmt.printf","fmt.printf(\"%f\\n\",","fmt.printf(\"%s.\\n\",","fmt.printf(\"%v","fmt.printf(\"%v这里要空格%v\",","fmt.printf(\"gc","fmt.printf()的调用是非常频繁的,利用","fmt.println(\"======aft","fmt.println(\"======begin","fmt.println(\"clos","fmt.println(\"linux.\")","fmt.println(\"mac","fmt.println(\"open","fmt.println(&v)","fmt.println(...)","fmt.println(cfg)","fmt.println(err)","fmt.println(name,","fmt.println(ntohl([]byte{0x7f,","fmt.println(s.has(\"bar\"))","fmt.println(s.has(\"foo\"))","fmt.println(unsafe.sizeof(demo1{}))","fmt.println(unsafe.sizeof(demo2{}))","fmt.println(unsafe.sizeof(demo3{}))","fmt.println(unsafe.sizeof(demo4{}))","fmt.println(unsafe.sizeof(foo))","fmt.println(unsafe.sizeof(struct{}{}))","fmt.sprintf(\"%v\",","fmt.sprintf(\"/api/v3/projects/%s/merge_request/%s/commits\",","fmt.sprintf(\"fak","fmt.sprintf(\"fil","fmt.sprintf(\"resolv","fmt.sprintf(\"rsp","fmt.sprintf()","fmt2.少量的重复不比反射差3.慎用","fmt,因为前者性能更佳。","foo","foo()","foo(bar","foo(getids())","foo(ids)","foo(key","foo(m","foo(r","foo(rs);","foo)","foo.errcouldnotopen)","foo.open(\"testfile.txt\");","foo.open();","foo_test","foo{","foo{...}","foo。所以我们使用import","foo,让测试文件假装是包","foo:连接被拒绝”。","fork","format","format,","found\")","found\",","fprintf","fprintf()","fprintf(os.stdout,","fprintf(w","free","free()","freebsd,","frequent","fullnam","func","func()","func())","func(t","func(usernam","function","function(e){","functions.","functions:","futur","future.","g","gc","gcflags=","gcflags=\"","gener","genitem","genitems(n","genrandomintslic","genrandomintslice()","genrandomintslice(n","get()","get(k","getarea(r","getids()","getlength(r","getlinecount()","getmrcommitsuri()","geton","getone()","getslice(n","getuserinfobatch","getuserinfobatch(uid","git","git.code.oa.com/group/myrepo","gitbook该文章修订时间:","githook","github","github.com/astaxie/beego/orm","github.com/golang","github.com/ub","github.com/xxx/xxx。内部包是指不能被外部","github/dgryski/go","github/hashicorp/terraform/makefile。","give","give:","given","go","go.sum文件必须提交,不要添加到.gitignore规则中。","go.uber.org/atom","go/guid","go1.11","go1.17","go1.4","goarch:","godoc","goechart","gofmt","gofmt,如","goimport","goland","golang","golang内存分配逃逸分析","golang梦工厂","golang,目前官方团队并未提供权威规范。不过不用担心,我们依然有一个规范可以参考,那就是业界推崇的","golint","good","googl","goos:","gopath","gopath:","gopher","gopherzhang","gopher,想更好地管理","gorm、xorm","goroot","goroot:","gorouin","goroutin","goroutine.","goroutine。","goroutine。如果其他协程调用了","goroutine。当共享资源的状态发生变化时,sync.cond","goroutine。当共享资源的状态发生变化的时候,sync.cond","goroutine一定要梳理清楚","goroutine,必须在入口处捕获","goroutine,无需锁保护。","goroutine,无需锁保护。broadcast","goto","goto,其他框架或底层源码推荐尽量不用。","go语言最佳实践go","go语言的内存逃逸分析","go,以及第三方书籍","go,这应该是入门必读最佳读物。","grab","gracefully。","green","grow","grow:","guarante","guarantee:","guidelin","h","half","handl","handle(info)","handleerrormessage(error","handleerrormessage(msg","handler","hard","has(key","hasarea","hasarea(area","hash","hash0","hashmap","has,is,can","head","head.(*node)","header","headnode,","heap","heap:","held","helper","here","high","hint)","hiter.","hmap","hmap.buckets.","hmap.extra.oldoverflow.","hmap.extra.overflow","hmap.oldbuckets.","hold","host)","host,","hot","however,","html.","http","http.get(url)","http.handler","http.post(url,","http.responsewriter,","https://golang.org/issue/23199","https://proxy.golang.org","i.(string)","i/o","i/o)","i/o,包括文件系统、网络和系统调用。","i7","i]","iaas、paas、系统和容器编排部署配置和模板(dock","id","identifi","identifiers]","ifac","ifforrangeswitchreturngoto程序退出方式if","if。","if,是因为当前协程被唤醒时,条件不一定符合要求,需要再次","ignor","imag","immediately,","implement","import","in64(0)","inccounter()","inccountern()","inconsist","incorrect","incrnoverflow","index","index。如果使用","index,记录下一个有效元素应该在的位置。遍历所有元素,当遇到有效元素,将其移动到","indic","indirect","info","info,","init","init()","init()初始化","init(),当","initi","inlin","inline,","instanc","instead,","instruct","int","int(bar)","int)","int,","int16","int32","int64","int8","intel(r)","intend","interfac","interface{}","interface{})","interface{},","interface{}。","interface{},因此需要类型转换。","interface,而不是结构体,这将为开发人员提供更大的灵活性来改变未来,但仍然泄露了具体列表使用抽象实现的细节。","intern","internal/poll.(*fd).write(0xc0000ae060,","internal/poll.(*fd).writelock(...)","internal/poll.(*fdmutex).rwlock(0xc0000ae060,","internal,所有名为","interv","intervalmilli","int。","int,一个是类型是","invocation.","invok","io.reader,","io.writer,","io.writer,printf()","iota","ioutil.readall(f)","ioutil.readdir(\"./files\")","ioutil.readfile(","ioutil.readfile(name)","ioutil.readfile(name);","ip","is\"","isactive(now,","iscontinue,","isempty(","isloc","islocal,","iso","isrunning()","item","items)","j","j++","java","javascript","jeffail/tunni","jslint","json.unmarshal(buf,","jsoncontenttyp","json、orm","k","k,","k1:","k2:","k3:","kb","keep","key","key)","key.expired()","kubernet","l","l\"","l\",如果发生内联,那么将不会出现变量的逃逸,就不存在堆上分配内存与回收的操作了,二者将看不出性能差异。","l.","l.head","l.head,","l.head.compareandswap(head,","l.head.load()","l.head.load().(*node)","l.list.add(e)","l.list.remove(e)","l.mu.lock()","l.mu.unlock()","languag","largest","lastname:","later","layout","layout。","layout,给出布局建议。一个清晰的项目结构,能帮忙我们高效有序的管理与日俱增的业务代码。不会随着代码量的递增,项目代码变得凌乱而不堪入目。","leak,","len","len()","len(a))","len(args)","len(elms))","len(files))","len(i))","len(s)","len(s.counters))","len(str)","len(trips))","length","length,","less","level","limit","line","linecount","linecount,","linux","list","liter","live","loadconfig()","loadfactor","local","locat","location()","lock","lock()","lock)。在使用锁时,对获取锁的目的操作做了区分,一种是读操作,一种是写操作。因为同一时刻允许多个","locker","locker)","locker。因为","lockfreelist","lockfreelist)","log","log.fat","log.fatal(\"miss","log.fatal(err)","log.fatalf","log.printf(\"invalid","log.println(\"exec","log.println(\"hello,\",","log.println(debug.stack())","log_2","logger.errorf(\"num","logger.errorf(\"num:%d,","loghandl","loghandler)","loghandler{}","logoutput","logo,readm","logtofil","logtofile=1,","logtoremot","logtoremote=2","logtostdout","logtostdout=0,","long","loop:","loop)。","l}","l(互斥锁","m","m.data[k]","m.lock()","m.mutex.lock()","m.mutex.unlock()","m.unlock()","m0","m1","m2","m[\"key\"].(info)","m[f.name()]","m[i]","m[k1]","m[k2]","m[k3]","m[v]","m[v];","magic”。","main","main()","main.go","main.main","main.main.func1(0x0)","main.main.func2()","main/copi","main/mutex","main/onc","main/perf","main/pool","main/rang","main/reflect","main/slic","make","make()","make([]*item,","make([]byte,","make([]int)","make([]int,","make([]item,","make([]t,","make([]trip,","make([]uint64,","make(chan","make(map[int]int)","make(map[int]struct{})","make(map[int]struct{},","make(map[interface{}]struct{},","make(map[string]int,","make(map[string]os.fileinfo)","make(map[string]os.fileinfo,","make(map[string]string),","make(map[t1]t2)","make(map[t1]t2,","make(map[uint64]struct{},","make(set)","makefile(如果有的话)变得小而简单,例如","mani","map","map.","map[int]*s{1:","map[int]int","map[int]s{1:","map[string]int","map[string]interface{})","map[string]str","map[string]struct{}","map[t1]t2","map[t1]t2{","map[t1]t2{}","mapextra","maps.","map、slice、channel","map。","map。此时我们可以将每个协程拉取的结果写入到一个临时对象,这样便将并发地协程与同一个变量解绑,然后再将其汇聚到一起,这样便可以不用使用锁。即独立处理,然后合并。","map初始化","map,slice,chan,interfac","map,这样可以在初始化时指定元素。","mark","markdown","math","math.maxint32","math.maxint32。","mathemat","maximum","mayb","maybenewday","mb0","md5","mean","memori","method","method.","metrics.incrcounter(cntcachemisskey,","me,this,self","middlename:","mistak","mod","modifyuserinfo(user)","modul","modules。从","modules,我们并不需要","month","more","mrcommitsuri","msg","msg)","mu","mu.lock()","mu.rlock()","mu.runlock()","mu.unlock()","mu0","mu1","multipl","multipli","multiply=2","multiply=3","mutex","mutex,","mutex/rwmutex","mutex、lock","mutex,或读写锁","myerror","myerror{}","m查看编译器对上面两个函数的优化决策。","n","n\"","n)","n,","name","name:\\\"test\\\"\"","necessari","net.splithostport(\"192.0.2.0:8000\")","net.splithostport(\"192.0.2.0:http\")","net.splithostport(\"1:8\")","net.splithostport(\":8000\")","net.splithostport(tt.give)","net/url","nevacu","new","new(order.areaorder)","new(pp)","new(student)","new(sync.mutex)","new(t)","new:","newattrmodel(ctx","newcond","newcond(l","newday","newpool","newprint","newprinter()","newsigner()","newsmap()","newsomething()","newtattrmodel","next","next:","nextoverflow","nil","niladic,","nil。","nil,但是满足其他逻辑进入到","nil,另一个不是),并且在不同的情况下(例如序列化),这两个切片的处理方式可能不同。","nil;对于结构类型是空结构。","nocopi","node","non","normal","note:","notfound","notfounderror","notifi","notifylist","notifylist.wait、notifylist.notifi","notifylist。如果这个队列被复制的话,那么就在并发场景下导致不同","noverflow","now","now)","now:","ns/op","ntohl","ntohl()","ntohl(bi","ntohlnotusebinary(bi","num","num)","num,","number","number)","number)}:","n禁用了编译器对切片遍历的优化。如果没有该选项,那么上面三种遍历方式没有性能差别。","o.don","o.done,在热路径上是比较好理解的。如果","o.doslow(f)","o.m.lock()","o.m.unlock()","object","observ","obtain","occurr","offici","offset)","offset)。在机器码中,偏移量是随指令传递的附加值,cpu","ok","ok。","oldbucket","oldoverflow","oldtimenow","on","onc","once.","once.do(f)","once.do(func()","one.","op","open\")","open()","open(fil","openapi","openbsd,","oper","operand","opmapwithmutex","opmapwithmutex(rpct","opmapwithrwmutex","opmapwithrwmutex(rpct","option","optohandl","or,","order","os","os\")","os)","os.(*file).write(...)","os.(*file).write(0xc0000ac008,","os.args[1:]","os.exit(1)","os.getenv(\"gopath\"),","os.getenv(\"goroot\"),","os.getwd()","os.open(name)","os.stdout,相当于直接输出到标准输出。这里的","out","outlin","output","output.","overflow","p","p,","p.count","p.doprintf(format,","p.error","p.fmt.init(&p.buf)","p.free()","p.lock()","p.panick","p.processunity()","p.wraperr","packag","packages/)。","packages]","page","panic","panic(\"an","panic(\"nil","panic(\"unknown","panic(44)","panic/recov","panic:","paniclinesparsing(){}","panics,","panic。","panic。因为","panic。因此,请始终使用","panic。每个自行启动的","panic,因为这样可以记录错误的同时结束程序,方便排查问题。","panic,并打印详细堆栈信息或进行其它处理。","panic,建议使用","panjf2000/ant","parent1","parent1()","parent2","parent2()","parsepaniclines(){}","pass","path","path.","path.join(cwd,","pathkey","pathkey:","path”","path)是程序非常频繁执行的一系列指令,sync.onc","path,即热点路径,顾名思义,是你的程序中那些会频繁执行到的代码。","per","perfbook","perform","performed.","pi","pkg","pkg:","place","plan9,","point","pointer","pointer.","pointers.","poll(10)","poll(10*time.second)","poll(delay","pool","pool.","popup....\");document.onclick","port)","port,","power","pp","ppfree","ppfree.get().(*pp)","ppfree;","present","previou","print","printer'","printf","printf()","printf(format","printinfo(\"foo\",","printinfo(nam","println","process(v)","processor","program","programm","progress","project","proper","properti","proverb","provid","pr,它将会变得更好。","public","public。为了保持向后兼容性,外部类型的每个未来版本都必须保留嵌入类型;","public,那么字段是","push","push(v","put()","question","r","race!","rand.seed(time.now().unixnano())","rang","range。二者在功能上没有区别,但在性能上会有区别吗?","range,建议只迭代下标,通过下标访问元素,这种使用方式和","range,有时候甚至会有上千倍的性能差异。对于这种场景,建议使用","raw,","reactor","read","read(\"reader1\",","read(\"reader2\",","read(\"reader3\",","read()","read(nam","read(p","read(r","readabl","readconfig","readconfig()","readconfigwithonce()","reader","reader1","reader2","reader3","readers,","reader,writer。","reading\")","readm","readme.md","readme_zh","readme,相得益彰。","read。","read,也可以调用","real","receiv","record","recov","recover()","recover();","recover。","recover,很容易发生","red","reflect","reflect.makeslice(reflect.typeof(i),","reflect.valueof(i)","region","region,","remark","remove(","remove(entity)","rendezv","requir","require.noerror(t,","required\")","res,","res.ret","resolveerror","resourc","resp,","resp.body.close()","result","result[k]","resum","resumes,","ret","ret,","retcod","retptr()","return","returned;","returning.","returns,","returns.","return。","retvalue()","reus","review","rfc","rlock()","rlocker()","rows.next()","rpct","rpc、db","rsp,","run","run()","run();","run(arg","run(os.args[1:])","run(os.args[1:]);","rune","runlock()","running…","runtim","runtime.gc()","runtime.gomaxprocs(1)","runtime.goos;","runtime.hmap:","runtime.slice:","runtime_notifylistadd(&c.notify)","runtime_notifylistnotifyall(&c.notify)","runtime_notifylistnotifyone(&c.notify)","runtime_notifylistwait(&c.notify,","rwmutex),当修改条件或者调用","s","s)","s,","s.add(\"bar\")","s.add(\"foo\")","s.area","s.areaorders[area]","s.counter","s.data","s.hasarea(area)","s.lock()","s.mu.lock()","s.mu.unlock()","s.now","s.now()","s.sign(give))","s.unlock()","s1","s1)","s1,","s1ptr","s1val","s1{}","s2","s2,","s2ptr","s2val","s2{}","s3","s[key]","same","save","scan","scheme","script","second","see","seed","select","servehttp(w","set","set)","settrips(trip","set。","set)、add、del、clear、contain","sign(give))","sign(msg","sign.go","sign_test.go","signal","signal()","signal.","signer","signwithtime(msg,","simultan","singl","site.","size","size(v","size)","size,","size)为单位访问。如","slice","sliceescap","sliceescape()","slicefibonacci","slicefibonacci()","slicefibonacci()函数中分配的局部变量切片因为要返回到函数外部,所以发生了逃逸,需要在堆上申请内存空间。从测试也过也可以看出,arrayfibonacci()函数没有内存分配,完全在栈上完成数组的创建。这里说明了对于一些短小的对象,栈上复制的成本远小于在堆上分配和回收的成本。","sliceindex","slice。","slice申明变量避免使用","slice,但是共用原始","slice,因为重复的切片初始化会带来性能损耗。相反,请执行一次转换并捕获结果。","slice,将要删除的元素过滤掉。缺点是需要开辟另一个","slice,这意味着,","slow","smap","snapshot","snapshot()","socket","somefixedtim","someth","spa(singl","specif","specifi","specification。","split()","splitn()。","sptr","sptr.name","sptrs[1].read()","sptrs[1].write(\"test\")","sql","src","src/runtime/map.go","src/runtime/runtime2.go里面,我们可以找到","src/runtime/slice.go","srverr.errareaconflict","st","stackoverflow","stackoverflow。","standard","standards/project","start","start()","start([]byte)","start,","stat","state","static","stats.snapshot()","statu","status)","status=","statusdon","statusinprogress","statusreadi","stay","stefno","stop","stop()","storageclass","store","store.new()","store:","str","strconv","string","string()","string)","string,","string.builder也提供了预分配内存的方式","struct","struct,","struct{","struct{}","struct{})","struct{},","struct{}{}","struct。","struct初始化","stu","stu)","student","studentpool","studentpool.get().(*student)","studentpool.put(stu)","subtract","subtract=1,","subtract=2,","such","sum","supervisord)配置。","sure","suspend","sval","svals[1]","svals[1].read()","svals[1].write(\"test\")","swagger","switch","sync","sync.cach","sync.cond","sync.cond?","sync.mutex","sync.mutex3.2","sync.mutex{}","sync.newcond(&sync.mutex{})","sync.onc","sync.once?","sync.pool","sync.pool{","sync.pool。","sync.pool,例如","sync.rwmutex","sync.rwmutex3.3","sync.rwmutex{}","sync.waitgroup","sync.waitgroup。","sync/atom","syscal","systems,","sysv)和进程管理(runit,","t","t)","t,","t.add(24","t.adddate(0","t.run(tt.give,","tab","tag","templat","test","testexample。","testsign(t","testsigner(t","testsplithostport(t","textual","tgithost","tgt","third_parti","time","time.dur","time.duration)","time.duration,因此该单位包含在字段的名称中。","time.format","time.hour)","time.millisecond)","time.now","time.now()","time.now,","time.pars","time.parsedur","time.rfc3339","time.second)","time.second,不要使用","time.since(t)","time.sleep(1","time.sleep(delay)","time.sleep(time.duration(delay)","time.sleep(time.microsecond)","time.sleep(time.second","time.sleep(time.second)","time.tim","time.time,在比较、添加或减去时间时使用","time.time,如果底层驱动程序支持则返回;","time.unmarshaljson","timenow","timenow()","times,","timestamp","time。","tmp","to\"之类的短语来保持上下文简洁,当错误通过堆栈向上传递时,它会一层一层被堆积起来:","to/for。","todo","tool","top","total","tour","trip","trips)","trips[0]","trips[0],但不会影响","true","true)","true,","true}","true。","true,调用","tt","tt.wanthost,","tt.wantport,","two","type","type.","type:","types:","typic","t{name:","u","uid","uidarray","uidslic","uidsliceslic","uint","uint16","uint32","uint32(bys[2])","uint32(bys[3])","uint64","uint64(3),","uint64(5),","uint64(7),","uint64(9)}","uint8","uintptr","ui。","unknownregion","unless","unlik","unlock","unlock()","unsafe.alignof","unsafe.alignof(x)","unsafe.alignof(x.f)","unsafe.alignof(x.f),unsafe.alignof(x)","unsafe.point","unsafe.sizeof","until","up","upstart,","urlarray","urlarray;","urlkey","urlkey:","us","usag","use.","user","username)","username:","user{","user{\"john\",","user{}","util","util、common、misc、global。packag","v","v)","v+1","v+1)","v,","v.call();","v.f1","v.len())","v.send()","v1","v1,","v2","v2,","v3","v3,","v:","val","valu","value:","var","variabl","variable,","varint","var。","var的后面。","vendor","verb","verifyflow)","version","vet","vet之类的工具会正确地指出这些和其他情况下的隐式问题。","volum","vs","vs.","w","w.","w.write(p.buf)","wait","wait()","wait(),处于等待状态。main","wake","want","want,","want:","wanterror","wanthost","wanthost:","wantport","wantport:","watcher","web","websit","wg","wg.add(num)","wg.wait()","whether","wiki","wikipedia","window","window.open(e.target.src,e.target.src)}img{cursor:pointer}","windows...","winner","wirt","withlocklist","withlocklist)","without","words,","work======","work======\")","worker(ch","workshop","write","write(\"writer\",","write()","write(nam","write(str","write(w","writer","write。","writing\")","written","w。data","x","x,","xx.close()可以不用显式处理。","xxx.pb.go,gotest","xxx:","xxx_test.go","x,unsafe.alignof(x)","x,计算","y","y,","yaml.unmarshal(raw,","ye","year","zero","{","{\"a\"}}","{\"interval\":","{\"intervalmillis\":","{...}","{0xc12cadf690,","{0xc12ea62f90,","{add,","{give:","{heap}","{subtract,","{}","|","||","}","}()","})","},","}{","~","“hot","、go","。","一个函数内不应该混杂多个实现细节,需要将独立的逻辑封装成函数。","一个函数只负责一个职责。","一个可能引发的问题就是","一个文件中出现多个结构体时,需要注意观察是否有重复的成员。","一个结构体中,成员较多,且多个成员有明显关联关系,需要封装新的结构体。","一份。","一分钟有","一句话总结:用来保存和复用临时对象,减少内存分配,降低","一周有","一天有","一小时有","一年","一旦有错误发生,马上返回。","一次循环尽量只做一件事,不用担心多次循环。","一种是不含任何方法的空接口runtime.eface:","一种是带有一组方法的接口runtime.iface:","一般情况下,对于需要修改原对象,或占用内存比较大的对象,返回指针。对于只读或占用内存较小的对象,返回值能够获得更好的性能。","一般来说,有如下几种情况:","一行代码不要超过120列,超过的情况,使用合理的方法换行。","一起使用。","三个以上函数的接口名,类似于结构体名。","上例中创建了缓冲区大小为","上的包要确认活跃度,不知名的包可能会被下架或出现不兼容的版本升级情况,必要情况下可","上进行修改。","上面的例子只是简单地限制了协程开辟的数量。在此基础之上,基于对象复用的思想,我们可以重复利用已开辟的协程,避免协程的重复创建销毁,达到池化的效果。","上面的分析目的是为了尽可能地量化","上面的实现有几点需要注意一下:","上面这三条是编译器对接口的检查机制,","上,由接收数据的协程在数据接收完毕后,逐个通知。总之,需要额外的复杂度来完成这件事。","上,那么其对性能的影响将被放大。这里解释下","下标时,性能比","下面代码无法通过编译,因为","下面以","下面以一个简单的示例来看下二者的性能差异。","下面以我们熟知的","下面再看一下链表","下面是一个反面示例,其他","下面看一下","下面看一下二者的性能对比。","下面看一下性能对比。","下面看下二者的性能对比。","下面看下二者的性能差异。","下面看下剥去反射前后二者的性能差异。","下面,就像不应该拥有","不仅易用,也很易学,这得益于与之匹配的丰富学习资料。go","不再受互斥锁保护,可能会引发并发读写的错误","不分片写入一个","不发送数据的信道","不发送数据的信道2.3","不可避免时,init()","不同。map","不同,slice","不存在。如果不允许部分失败,使用","不应该拥有的目录","不应该拥有的目录/src3.小结参考文献1.前言","不建议使用","不必要的","不必要的空行","不支持","不是一个提示:编译器将为提供给","不是基于代码块的,而是基于函数的。你在循环中分配资源,那么不应该简单地使用","不是错误处理的合适策略,仅当发生不可恢复的异常(如","不用复数。如","不管是什么语言,开发什么项目,一个稍大的项目,必然要面临如何管理项目结构布局的问题,因为一个简洁清晰的布局是项目可读的关键。","不管是全局切片还是局部切片,使用","不能满足这些要求的代码可能要在","不能被复制","不能被复制的原因,并不是因为其内部嵌套了","不要传递指针。","不要使用2/4来表达英文","不要使用双重否定。","不要使用大而全的无意义包名。","不要使用字符串表示","不要使用相对路径导入内部包,应该使用完整的路径引入包。","不要包装系统调用错误,并给出一些没意义的附加信息。","不要反复从固定字符串创建字节","不要在该目录下放太多的代码,如果代码可以被其他项目导入使用,请放到","不要添加没必要的括号。","不要用宽泛、无意义的名字,如:","不要用注释删除代码。","不要轻易使用别名。","不要返回多个用于控制流程的状态。","不要这样使用","不要随便","不需要发送任何的数据,只用来通知子协程(goroutine)执行任务,或只用来控制协程的并发。这种情况下,使用空结构体作为占位符就非常合适了。","与","且","且预先分配容量的拼接方式性能最佳。","业务代码禁止使用","两个函数的接口名综合两个函数名。","个","个任务,达到了协程并发控制的目的。","个位置开始占据","个协程同时存在。那如果协程中还存在着其他需要分配内存的操作,那么允许并发执行的协程将会数量级地减少。","个协程并发写入","个协程并发写入链表","个协程的并发,2^31","个字节的数据,一次读取","个字节那么只需要读取","个字节,cpu","个字节,偏移量才是","个字节,那假设","个或更少的字段,则可以在测试表中省略字段名称。","个数字。","个数的增多而线性扩展。很多语言都提供","个消息则被阻塞。开启协程前,调用ch","个等待条件变量","个,如果超过,请封装成新的类型。","个,或有相同类型的返回值,或者从上下文中不清楚返回值的含义,使用命名返回,其它情况不建议使用命名返回。","中","中。","中一节","中使用。","中使用,一般用来捕获程序运行期间发生异常抛出的","中保证了","中元素时,性能非常差。","中内置一个","中可勾选","中定义的格式时间戳。默认情况下,time.unmarshaltext","中引用的图片等。","中执行。","中无法捕获当前","中有一百万条数据,就会浪费","中比较特殊。没有任何字段的空","中的","中的代码,作为项目的主应用目录。目录也可以包含多个可执行文件,子目录名称一般与可执行文件相对应(如:/cmd/myapp","中的变量只要被引用就一直会存活,存储在堆上还是栈上由","中的字节数。","中的方法。","中的暂停了","中空结构体","中空结构体仍占用","中英文之间应该有空格。","中调用才会生效。","中退出程序且只退出一次。","中需要使用","中,因为","中,因为它使用","中,我们可以使用","中,而应用的共享代码可以放在","丰富的示例将帮助用户更加便捷快速的了解上手一个项目,再加上","串行无锁","串行无锁2.减少锁竞争3.优先使用共享锁而非互斥锁3.1","串行无锁是一种思想,就是避免对共享资源的并发访问,改为每个并发操作访问自己独占的资源,达到串行访问资源的效果,来避免使用锁。不同的场景有不同的实现方式。比如网络","为","为了模拟上面的情况,简单地写个示例程序,对比下性能。","为什么可以这样,因为接口实质上在底层用两个字段表示:","为什么常识性的认知是错误的呢?因为地球自转的不均匀性和长期变慢性,会存在时间修正的情况,比如闰秒,闰年等。","为什么性能上会有两倍多的差距,因为","为什么放在第一个字段就能够减少指令呢?因为结构体第一个字段的地址和结构体的指针是相同的,如果是第一个字段,直接对结构体的指针解引用即可。如果是其他的字段,除了结构体指针外,还需要计算与第一个值的偏移(calcul","为什么是第一个字段。","为什么是第一个字段?","为什么是第一个字段?3.性能差异1.简介","为什么编译器会对上面的测试代码进行优化呢?因为代码实际上只取最后一个切片元素的值,所以前面的循环操作可以跳过,这样便带来性能的提升。如果是下面的代码,那么编器将无法优化,必须遍历拷贝所有元素。","为你的错误添加上下文,","为例。","为例给出具体实现。","为例,简单介绍其使用。","为并发而生。goroutin","为读操作占比。","为零。任何其他尺寸都必须经过严格的审查,而不是拍脑袋给出一个大致的值。我们需要考虑如何确定大小,什么原因会导致","主体风格占位符主体风格","主要原因是","主调对条件的检查,使用了","之势。","之外使用函数调用的结果,则不应尝试缩小范围。","之间操作的","也是不错的选择。","了。","事实上可以用任何的数据结构替代。","二维切片或数组。","互动勘误","互斥锁","互斥锁的作用是保证共享资源同一时刻只能被一个","产生模糊的接口文档指","亿个,每个协程内部几乎没有做什么事情。正常的情况下呢,这个程序会乱序输出","仅包含方法的结构体","仅包含方法的结构体1.不占内存空间","仅在","仅将相关的声明放在一组。不要将不相关的声明放在一组。","仅提供了一个导出方法","从","从函数名开始算第一层,当函数的嵌套深度超过4层,往往会导致圈复杂度过高,函数变得复杂不可读,我们可以通过拆分函数的方式来减少嵌套深度。","从切片中过滤指定元素。注意:不修改原切片。","从前文可知,可取址的值可以调用接收器为指针的方法,但这里为何不能将值","从基准测试结果来看,性能最佳的方法是移位法,其中又属第一种实现方式较佳。性能最差的也是最常用的方法是截取法。随着切片长度的增加,上面四种删除方式的性能差异会愈加明显。","从字段","从性能出发,兼顾实现的便捷与代码可读性,如果待拼接的字符串不涉及类型转换且数量较少(fmt.sprintf()。","从日志中可以很容易看到,每秒钟只并发执行了","从测试结果可以看出,对数组的拷贝性能却比使用切片要好。为什么会这样呢?","从等待队列中按照顺序唤醒,先进入等待队列,先被唤醒。","从结构化二进制数据","从结果可以看出,strings.join()、strings.builder、bytes.buffer和byte[]","从输出结果可以看到,使用变量(非常量)来指定切片的容量,会导致切片发生逃逸,影响性能。指定切片的长度时也是一样的,尽可能使用常量或数值字面量。","从这个例子可以看到,内存对齐对实现变量的原子性操作也是有好处的。每次内存访问是原子的,如果变量的大小不超过字长,那么内存对齐后,对该变量的访问就是原子的,这个特性在并发场景下至关重要。","代码与官方推荐的格式保持一致,于是所有格式有关问题,都以","代码也可以优先处理条件不满足或错误的情况,尽早返回或继续循环来减少嵌套。","代码即注释","代码必须用","代码生成工具自动生成的代码可排除此规则(如协议生成文件","代码的稳健、可读和高效是我们每一个位","代码目录","代码目录/cmd/internal/pkg/vendor2.3","代码风格","代码,想写出更加高效易读的","代码,想让自己拥有一个更好的编码风格,","以","以一个简单的示例,通过对map[uint64]struct{}分片前后并发写入的对比,来看下减少锁竞争带来的性能提升。","以上仅列出了部分变量发生逃逸的情形。实际上,go","以上必须使用","以后,go","以外类型的切片进行过滤,拷贝一次代码又何妨呢?可以肯定的是,绝大部份场景,根本不会对所有类型的切片进行过滤,那么反射带来好处我们并没有充分享受,但却要为其带来的性能成本买单。","们努力的结果。此项目布局是通用的,建议并非强制,当然我们最好遵守,因为这能让我的项目布局看起来更加规范,易于交流和维护。","优先使用","优化后的版本的性能测试结果如下。可以看出相较于不预先分配空间的方式,性能提升了很多。","优秀的本地缓存组件","优雅地处理错误。","会一直阻塞。","会将主调加入条件变量的通知列表,需要修改条件变量,所以主调在调用","会自动添加依赖的包,并移除未引用的包。把依赖包按字母序升序排列,并对包进行分组管理。通过空行隔开,默认分为标准库包和非标准库包(第三方包和内部包)。","会自动释放锁","传的是","传输协议。","但我们仍然可以在的包内将其和","位的","作为","作为一门追求高性能的后台编程语言,当然也不例外。","作为下标不留空格","作为他们的模块代理服务器)。使用","作为依赖管理的项目不要提交","作为入参不要留空格","作为其他","作为其他结构体一个字段时,应该使用值而不是指针。即使该结构体不被导出,也不要直接把","作为函数参数传入时,如果您存储了对它们的引用,则用户可以对其进行修改。","作为函数的值返回,必须对","作为函数返回值且有多个返回值的时候,error","作为后缀,如","作为结构体最后一个字段时,需要内存对齐。因为如果有指针指向该字段,返回的地址将在结构体之外,如果此指针一直存活不释放对应的内存,就会有内存泄露的问题(该内存不因结构体释放而释放)。","作为输入参数或者数组下标时,运算符和操作数之间不需要空格,紧凑展示。","作为集合(set)使用时,可以将值类型定义为空结构体,仅作为占位符使用即可。","作用域内隐式覆盖","作用域较大的名字(全局变量),不要使用缩写,要有明确的意义。","作用域较小的名字(局部变量/函数参数),尽量使用简短的名字。","作用域隐藏内置","你只能通过值调用","你实际的代码可以放在","你是要修改","你的项目结构布局看起来应该像下面这个样子。","你还可以在","使用","使用make()初始化,并指定容量。","使用os.exit或者log.fatal*退出程序,而不是panic。","使用了","使用互斥锁读写","使用值接收器的方法既可以通过值调用,也可以通过指针调用。带指针接收器的方法只能通过指针或","使用制表符进行缩进,使用空白符进行对齐。","使用反射并且很慢。如果有需要用到这两个函数的地方,我们应该手动实现这两个函数的相关功能,而不是直接去使用它们。","使用字段名初始化结构体。","使用此格式,并可通过","使用表驱动的方式编写用例,代码看上去会更简洁。","使用读写锁读写","例外场景:","例外,如果是相似的一组变量,请使用","例外:在字段名提供有意义上下文的地方可以显示指定零值。如表驱动单元测试中的测试用例,即使字段为零值,限制指定零值,通过字段名可清晰地表达用例的含义。","例外:如果","例外:如果有","例如,使用errors.new表示带有静态字符串的错误。如果调用者需要匹配并处理此错误,则将此错误导出为变量以支持将其与errors.is匹配。","例如,在一个时间点上加上","例如,由于","依旧可以继续使用。这可能就是“全能”与“专精”的区别。","依赖规范import","保持","保证","保证函数只会被执行一次和多次执行,二者的性能差异。","信息是否符合规范。","倍(1600","值传递会拷贝整个对象,而指针传递只会拷贝地址,指向的对象是同一个。传指针可以减少值的拷贝,但是会导致内存分配逃逸到堆中,增加垃圾回收(gc)的负担。在对象频繁创建和删除的场景下,返回指针导致的","值好很多。从这里我们应该能够知道二者性能差别之大的原因。","值将引发","假设您使用共享的","假设我们有一个“学生”结构体,并复用改结构体对象。","假设我们的切片有","做一个二次判断,来保证任务函数只会被执行一次,done","做了说明,因为接收器为指针的方法会修改接受器,为了避免产生这种错误的行为,便禁止将值赋给和指针接收器方法集匹配的接口。","充当条件变量实现","先看下其性能测试的对比。","入参","入参&返回值成员函数局部变量defer减少嵌套(圈复杂度)魔法字面量函数分组与顺序入参&返回值","入参和返回值个数均不能超过","入参和返回值均以小写字母开头。","入参和返回值顺序根据关联性排在一起。","全局变量使用","全局变量申明使用","全局量中不要包含格式化字符,否则必然违反就近原则。","公有库代码(外部项目可以使用)","公有库代码(外部项目可以使用)。","关于项目的设计文档,用户的使用文档等(除了","关键字并省略类型。","关键字申明,一般情况下其类型与表达式的类型一致,这种情况下可省略其类型。","关闭gc改为手动执行","其中函数","其中数字与字节序列的转换可以用如下三个函数:","其他","其他情况都应该使用该名词原有的写法,如","其他目录","其他目录/docs/tools/examples/third_party/githooks/assets/website2.7","具体可以看下","内存对齐前变量","内存对齐规则","内存对齐规则3.合理的","内存开销","内容简介","内部包","内部实现决定而和具体的语法没有关系。","内部是维护着一个","内部维护了一个等待队列,队列中存放的是所有在等待这个","写入到","写出更优质的代码。","写并发程序的时候随便起个成千上万的","写锁与读锁是互斥的,如果存在读锁,写锁阻塞,如果存在写锁,读锁阻塞。","写锁之间是互斥的,存在写锁,其他写锁阻塞。","减少嵌套(圈复杂度)","凡事无绝对,某些情况下,init()","出现状态/类型等字眼时,需要使用枚举。","函数","函数。","函数中定义的局部变量切片逃逸到了堆。","函数中被调用(或程序生命周期中的其他地方),或作为","函数中调用os.exit或log.fatal*且只调用一次。如果有多个错误场景停止程序执行,请将该逻辑放在单独的函数并从中返回错误。","函数中,通过对成员变量","函数为例,看看","函数之间的关系可能会使代码变得脆弱和容易出错;","函数体第一行不要换行。","函数信息描述\"。","函数分组与顺序","函数创建。","函数前,需要先获得条件变量的成员锁,原因是需要互斥地变更条件变量的等待队列。在","函数即可。对象池中没有对象时,将会调用","函数名","函数名必须遵循驼峰式,首字母根据访问控制决定使用大写或小写。","函数命名","函数均可内联。slicefibonacci()","函数将","函数应按粗略的调用顺序排序。","函数应该以动词开头。","函数应该放在","函数引起的,fmt.printf","函数才会被执行。这带来的后果就是,如果迭代次数过多,那么可能导致资源长时间得不到释放,造成泄漏。","函数是当所在的","函数最后暂停了","函数本身的一部分。特别是打算给其他程序使用的库应该特别注意代码行为的完全确定性,","函数注释","函数用于生成指定长度元素类型为","函数的参数是一个","函数的顺序或副作用。虽然","函数直接注入到使用方","函数类似,但有区别。","函数而不是字面量,因为这样看起来更容易和申明区分开来。","函数调用中意义不明确的实参可能会损害代码可读性。当参数名称的含义不明显时,请为参数添加","函数调用和对调用结果的处理,是紧密相连的,不能加空行。","函数进行资源的释放。","函数长度不能超过","函数,调用","分支时,很容易遗忘","分组等其他规范细节和普通文件保持一致。","分钟","切片","切片元素从结构体","切片是有效的切片,但它不等于长度为","切片过滤掉指定的元素。","切片,代码会更加简洁清晰。","列转换为","则不存在拷贝。","则是在对象使用完毕后,放回到对象池。","则阻塞等待。","则需要以","创建","创建。","创建了一个","创建新切片,过滤掉指定元素。","初始化","初始化信息","初始化信息。","初始化函数仅执行了一次,避免了多次重复初始化,在并发环境下很有用。","初始化切片时提供容量信息,特别是在追加切片时。","初始化的时候提供容量信息。","初始化结构指针变量使用字面量","初始化结构指针变量时,请使用&t{}代替new(t),可以与结构体初始化在代码风格上保持一致。","删除切片指定元素一般有如下几种方法,本文以","删除指定元素。","判断字符串是否为空,这样更加直观。","判断是否有错误发生之后,再","判断条件较为复杂时,考虑封装成函数。","利用","利用一个下标","利用反射,我们可以实现一个类型泛化支持扩展的切片过滤函数。","利用硬件支持的原子操作可以实现无锁的数据结构,原子操作可以在","前有一段注释,说明了done","前缀)。","前要加锁","前言","前都应该被删除,除非添加注释讲解为什么不删除,","前需要对条件变量进行上锁,主调加入条件变量的通知列表后再解锁。","前面的例子过于极端,一般情况下程序也不会无限开辟协程,旨在说明协程数量是有限制的,不能无限开辟。","功能实践","功能设计","加一。最终","加写锁","加密传输协议","加读锁","加锁","加锁是为了避免在并发环境下,同时访问共享资源产生的安全问题。那么,在并发环境下,是否必须加锁?答案是否定的。并非所有的并发都需要加锁。适当地降低锁的粒度,甚至采用无锁化的设计,更能提升并发能力。","加锁,并且继续执行","包","包&文件","包下的一个组件,可以作为保存临时取还对象的一个“池子”。个人觉得它的名字有一定的误导性,因为","包不支持解析闰秒时间戳(issu","包两种接口类型的定义。","包中使用","包中程序初始化是一个例外,如程序启动时,文件无法打开或数据库无法连接导致程序无法正常运行可使用","包为例,我们看下其是如何使用","包信息描述。","包名","包名和","包名应该为小写单词,不要使用下划线或者混合大小写,使用多级目录来划分层级。","包名谨慎使用缩写。当缩写是程序员广泛熟知的词时,可以使用缩写。例如:","包含了指向底层数据的指针,因此在需要复制它们时要特别注意。","包含固定的元素列表,则使用字面量初始化","包命名","包和","包处理时间","包如何实现。","包如果有多个","包实现了数字和字节序列之间的简单转换以及","包注释","包的原子操作对基本类型","包的性能相较于针对具体类型实现的版本,性能差异非常大。","包针对大端字节序将字节序列转为","包,因为它有助于以更安全、更准确的方式处理这些不正确的假设。","匹配。","协程池化,我们可以自己写一个协程池,但不推荐这么做。因为已经有成熟的开源库可供使用,无需再重复造轮子。目前有很多第三方库实现了协程池,可以很方便地用来控制协程的并发数量,比较受欢迎的有:","协程的代价","协程的代价2.2","协程调用","协程都执行到","单个函数的接口名以","单元测试文件名命名规范为","单函数圈复杂度最大值","单测文件行数限制是普通文件的","博客园","占位符","占据的内存空间大小为","占据空间一致,而","占用了,其他的","占用,一个","即使嵌入兼容的抽象列表","即可。可参考标准库包的","即多个","压力。","压力)。","原切片长度为","原则。","原子操作(如","去执行另外一个协程,下面看一下协程之间切换的耗时。","参考","参考文献","又如","又没有明确说明,会产生模糊的接口文档。","及其方法是","发生逃逸,在堆上申请切片","取址。","变量仅初始化一次,初始化完成后驻留在内存里。","变量初始化过程中,所有读都被阻塞,直到初始化完成;","变量名","变量和常量注释","变量大小不确定(如","变量申明的位置尽量靠近使用的地方。","变量的值只需要一次访存。","变量的值需要两次访存,第一次访存得到前一个字节,第二次得到后两个字节。内存对齐后","变量较大(栈空间不足)","另外请参考:don't","另外,分组使用的位置没有限制,我们也可以在函数内部使用它们。","只会被修改一次。","只唤醒任意","只有一个源文件的包,包名应该和文件名保持一致。","只有在","只能在当前","只能用于测试文件,且必须是为了解决循环依赖,才能使用。","只能简单地完成字符串之间的拼接,非字符串类型的变量需要单独做类型转换。行内拼接字符串不会产生内存分配,也不涉及类型地动态转换,所以性能上优于fmt.sprintf()。","只设置一个","只遍历","可以利用信道","可以在代码的任意位置初始化和调用,因此可以延迟到使用时再执行,并发场景下是线程安全的。","可以实现,看起来代码更加简洁,那么","可以将暂时不用的对象缓存起来,待下次需要的时候直接使用,不用再次经过内存分配,复用对象的内存,减轻","可以用来唤醒一个或所有因等待条件变量而阻塞的","可以用来通知等待条件发生而阻塞的","可以用来通知被阻塞的","可以看出无锁版本比有锁版本性能高一些。","可以看出,两种通过","可以看到,arrayfibonacci()","可以看到,demo3{}","可以看到,go","可以看到,二者的性能差距很大,快达到一个数量级了。所以在不影响代码可读性时,行内字符串尽可能地使用运算符","可以看到,反射涉及了额外的类型判断和大量的内存分配,导致其对性能的影响非常明显。随着切片元素的递增,每一次判断元素是否在","可以看到,同样的字段,因排列顺序不同,会导致不一样的结构体大小。","可以看到,通过对分共享资源的分片处理,减少了锁竞争,能明显地提高程序的并发性能。可以预见的是,随着分片粒度地变小,性能差距会越来越大。当然,分片粒度不是越小越好。因为每一个分片都要配一把锁,那么会带来很多额外的不必要的开销。可以选择一个不太大的值,在性能和花销上寻找一个平衡。","可以通过","可变全局变量在使用时,可能会被其他地方修改,导致程序运行时出现意外情况。","可执行文件目录","可执行文件目录。","可显示使用空标识符(下划线)忽略。","可能会被多个协程并发调用,为了提升性能(减少执行时间和内存占用),使用","可能更可取或是必要的:","可见一次协程的切换,耗时大概在","可见使用反射实现的","可见读多写少的场景,使用读写锁并发性能会更优。可以预见的是如果写占比更低,那么读写锁带的并发效果会更优。","可见,函数返回值使用","各个公司或组织,都有各自不同的","各占","各占据","合理性","同一层级的逻辑细节不要拆分。","同一文件中的函数应按接收者分组。","同时迭代下标和值,则需要将切片/数组的元素改为指针,才能不影响性能。","名字应该追求清晰且越来越收敛,符合‘单一职责’原则,而不是像common一样,什么都能往里面放,越来越膨胀,让依赖关系变得复杂,不利于阅读、复用、重构。注意,xxx/utils/encryption这样的包名是允许的。","后会进行解锁操作,避免重复解锁引发","后面的代码。","后面要有空格。","后,for","向","吗?","否则,尽可能在错误消息中添加上下文","含有","启动的","呢?","呢?goroutin","命令行参数。","命名不能采用","命名清晰的地方,不要添加无意义的注释。类型注释","命名规则基本保持和结构体命名规则一致。","和","和一个","和其他形式的确定性预计算的优化。","和没有任何元素的","唤醒了该协程,那么","唤醒所有等待条件变量","唤醒所有等待的协程。","唤醒顺序","回到第一个例子,在一个时间时刻加上","因为其他","因为内存对齐的存在,合理的","因为空结构体不占据内存空间,因此被广泛作为各种场景下的占位符使用。一是节省资源,二是空结构体本身就具备很强的语义,即这里不需要任何值,仅作为占位符,达到的代码即注释的效果。","因为这一点,空","因此","因此呢,将","因此,在处理时间时始终使用","因此,在对内存特别敏感的结构体的设计上,我们可以通过调整字段的顺序,将字段宽度从小到大由上到下排列,来减少内存的占用。","因此,在将元素添加到","圆周率","在","在业务逻辑处理中禁止使用","在为返回的错误添加上下文时,通过避免使用\"fail","在使用预先分配的标识符时编译器不会报告错误,但是诸如go","在保存代码时可设置自动执行","在写入时会","在处理时间的瞬间时使用","在多数情况下,sync.onc","在尽可能的情况下,在使用","在接收","在热路径中,done","在编译时验证接口的合理性,这包括:","在视觉上是相似的","在调用失败时传播错误有三个主要方式:","在运行时可能会有更多分配。","在返回","在这种情况下,测试文件不能在包","在迭代过程中返回的是元素的拷贝,index","在部分场景下,结构体只包含方法,不包含任何的字段。例如上面例子中的","在高负载下被填满并阻塞写入者,以及当这种情况发生时系统会发生哪些变化。","场景下将单","块内,读取","块注释即在代码块前给出一个总的说明,然后每行变量或常量的末尾给出详细注释,这样看起来更加简洁。","基于互斥锁/读写锁,那它和互斥锁的区别是什么呢?","基于当前目录","基准测试代码如下:","基准测试结果如下:","基本数据类型与字符串之间的转换,优先使用","声明","声明到一组。","声明和初始化在视觉上很相似","声明和初始化在视觉上是不同的","声明结构,因为这样更加简洁,其各个字段值为字段类型对应的零值。","声明错误可选的方式很少,在选择合适的错误申明方式之前,应考虑以下几点。","声明零值结构使用关键字","处理","处理panic","处理recov","处理。在知道常见的变量逃逸场景后,我们在编码时可以有意识地避免变量发生逃逸,尽可能地使用栈空间,而非堆空间。","处理类型断言error","处理,函数返回后就会直接释放,而堆上分配的内存使用完毕会交给","复杂的执行/错误信息,需要定义结构体保存。","复用","复用对象","复用对象,每次操作不再有内存分配。","外部依赖库","外部依赖库。","外部包","外部辅助工具","外部辅助工具。","多个相似","多线程模型改为主从","多线程模型,避免对同一个消息队列锁读取。","多行初始化。","多行定义。","大块变量或常量定义时的注释方式。","大部分业务场景是读多写少,所以使用读写锁可有效提高对共享数据的访问效率。最坏的情况,只有写请求,那么读写锁顶多退化成互斥锁。所以优先使用读写锁而非互斥锁,可以提高程序的并发性能。","天","好。","好,sliceindex","如","如下面这个函数的第二个参数是没有必要的,大部分时候都是","如不同环境(测试、正式)的服务配置信息。","如将","如引入","如放置测试工具和测试依赖数据。对于较大的项目,有一个数据子目录是有意义的。例如,你可以使用","如无必要,不要起和包相同的名字。","如果","如果*handler与http.handler的接口不匹配,那么语句var","如果不关心是否成功,可显示忽略","如果为","如果代码不可复用或者你不希望其他项目使用,请放到","如果传入的参数通常是固定的,考虑通过实现多个函数实现默认参数。","如果你不使用","如果你对文章内容有任何疑问和建议,欢迎在应相应章节下留言探讨。","如果使用局部切片时,已知切片的长度或容量,请使用常量或数值字面量来定义。","如果全局变量仅在单个函数内使用,则应该定义为局部变量。","如果出现失败应该立即返回error,如果继续处理,则属于特殊情况需要添加注释。","如果函数返回值需用于初始化其他变量,则采用下面的方式。","如果切片中是指向结构体的指针,而不是结构体呢?","如果加锁无法避免,则可以采用分片的形式,减少对资源加锁的次数,这样也可以提高整体的性能。","如果发现此项目布局规范并不适用自己的项目,可在其基础上适当做出改变,不要泥古拘方。","如果变量为私有,且特有名词为首个单词,则使用小写,如","如果变量类型不确定,那么将会逃逸到堆上。所以,函数返回值如果能确定的类型,就不要使用","如果只需要第一项(key),就丢弃第二项(value)。","如果只需要第二项,则把第一项置为空标识符(下划线)。","如果在","如果在声明中省略了结构的所有字段,请使用","如果字符串字面量出现","如果局部变量仅被使用一次,且不能起到解释逻辑的作用时,应该删除局部变量,直接内联。","如果并发无法做到无锁化,优先使用共享锁而非互斥锁。","如果想使用","如果我们开辟很多协程,但不会导致程序崩溃,可以吗?如果真要这么做的话,我们应该清楚地知道,协程虽然轻量,但仍有开销。","如果我们调用","如果我们针对","如果手动管理依赖包可以将依赖包放到该目录,当然推荐使用依赖包管理工具","如果操作成功,再","如果方法不使用类的成员,应该实现为非成员函数。","如果是","如果是想全面了解","如果是想深入了解","如果是枚举类型的常量,需要先创建相应类型。","如果是这样,请参阅错误包装部分。","如果是静态字符串,我们可以使用","如果是,我们必须通过声明顶级错误变量或自定义类型来支持","如果有一个类似上面分配资源的代码段,我们应该将其包裹在一个函数中(匿名函数或有名函数)。在该函数中,使用","如果没有要添加的其他上下文,则按原样返回原始错误。","如果自定义协程池容量大小,可以调用","如果表达式的类型与所需的类型不完全匹配,请指定类型。","如果要开启多个线程执行一组动作,并且要等待全部完成后继续后续逻辑,考虑使用","如果调用者不需要匹配它,则使用fmt.errorf,如果调用者确实需要匹配它,则自定义","如果需要在","如果非成员函数要使用类的多个属性时,应该实现为成员函数。","始终以字长访问内存,如果不进行内存对齐,可能会增加","字符串占位符,如果输入数据来自外部,建议使用%q进行安全转义。","字符串字面量","字符串拼接","字符串拼接还有其他的方式,比如strings.join()、strings.builder、bytes.buffer和byte[],这几种不适合行内使用。当待拼接字符串数量较多时可考虑使用。","字符串的搜索存在二义性","字符串,并通过","字符串;","字节。","字节即可。","字节数组读取接口。","字节的空间。","字节缓冲器为例,利用","字节,与字段","字节,即额外填充了","字节,那么","存储类型","存放","它们将成为包的公共","官方","官方也在","官方文档","官方的入门指南","官方网站已有系统全面的指导文档,新手可以快速通过官方资料,轻松上手。此外,第三方资料,也有百家争鸣之势。有介绍","定位于同步,用于一发多收的场景。虽然","定位于通信,用于一发一收的场景,sync.cond","实例时,需要关联一个锁。","实例都会关联一个锁","实现上利用反射来达到范型的效果,在运行时进行类型的动态判断,所以带来了一定的性能损耗。","实现了多种列表类型,请避免在具体的列表实现中嵌入","实现了接口;","实现线程安全。果不其然,和上面的猜想一致。","实现集合(set)","实现集合(set)2.2","实现非常简洁。do()","实践建议,帮助我们更好的使用","实际上","实际上,我们可以使用无缓冲","实际使用时,我们可以根据不用场景来选择。如不能修改原切片使用拷贝法,可以修改原切片使用移位法中的第一种实现方式。","容量大小。","容量提示","容量提示2.指定切片容量尽可能指定容器容量,以便为容器预先分配内存。这将在后续添加元素时减少通过复制来调整容器大小。","容量时,仍可能发生分配。","对","对两个值进行判断时,被比较的值放在左边。","对于","对于上面的示例代码,还有一种更好的处理方式是将上面的","对于任意类型的变量","对于其它的包,可导出的接口也不能有","对于动态字符串的错误,","对于变量、常量的声明,相似的声明应该放在一组。类型的定义同样适用。","对于大多数包装错误,这是一个很好的默认值,但请注意,调用者可能会开始依赖此行为。因此,对于包装错误是已知变量或类型的情况,请将其作为函数契约的一部分进行记录和测试。","对于存储为全局变量的错误值,根据是否导出,使用前缀","对于很多需要重复分配、回收内存的地方,sync.pool","对于指针类型(如","对于数组类型的变量","对于结构体类型的变量","对于自定义错误类型,请改用后缀","对单个","对外部系统使用","对整数采用的便是这种编码方式。","对象池,每次只执行","对象能够极大地提升性能,减少内存占用,同时降低","对象,避免重复创建与回收内存,来看看对性能的提升效果。","对齐系数决定了字段的偏移和变量的大小,两者必须是对齐系数的整数倍。","导入代码。","导入的包按照先后顺序应该分为三组:","导出与非导出接口均需要有注释。","导出以下两个错误,以便此包的用户可以将它们与errors.i","导出全局变量。","导出全局常量。","导出的函数/变量的职责必须与包&文件职责高度一致。","导出的函数和方法(结构体或接口下的函数称为方法)都必须有注释。","导出的函数应该放在非导出函数前面","导出的字段和","导致整个进程退出。","将","将不会被执行","将你的","将你的云(","将元素插入到链表的首部","将更加人性化,如","将格式化后的字符串打印到屏幕,即标准输出。在","将网络字节序的","小写,如果有多个单词使用连字符分隔。","小时","小时并不总是产生一个新的日历日。","小时,我们应该使用`time.add`。","小时,我们用于添加时间的方法取决于意图。如果我们想要下一个日历日(当前天的下一天)的同一个时间点,我们应该使用","小汽车结构申明。","小的拷贝好过引用,什么意思呢,就是尽量使用栈变量而不是堆变量。下面举一个反常识的例子,来证明小的拷贝比在堆上创建引用变量要好。","就没有区别了。如果想使用","就能搞定了。","就近申明。","尽可能在与外部系统交互中使用","尽可能地在初始化时提供","尽可能地避免在","尽可能避免使用","尽早","尽管编写这些委托方法是乏味的,但是额外的工作隐藏了实现细节,留下了更多的更改机会,还消除了在未能描述出潜在接口的模糊文档。","尽管这在实践中并不成问题,但请记住,time","尽量不要用拼音命名。","尽量用","尽量用值传递,非指针传递。","尽量采取有意义、简短的包名,尽量不要和标准库冲突。","局部变量","局部变量使用短变量声明形式(:=)。","嵌入到结构体中。","嵌入类型会泄漏实现细节、禁止类型演化和产生模糊的接口文档。","嵌套深度不能超过4层。","工具可以帮我们静态分析我们的源码存在的各种问题,例如多余的代码,提前","工具格式化。","工具生成的代码","工具自动格式化引入的包名,import","工具自动生成文件","差距不是很大,但是随着字符串长度的增加,差距将会越来越明显。此外,如果这种重复的转换在","已无法继续使用,而","已经明确了返回一个字符串类型,因此我们没有必要显式指定类型。","布局","布局4.空结构与空数组对内存对齐的影响1.为什么需要内存对齐","布局可以减少内存占用,提高程序性能。","布局考虑内存对齐","带域名的包名都属于外部包,如","带来一定的负担,严重的时候会引起","常量命名","年诞生以来,因其出色的并发能力和简单易用的低门槛,已在各大厂商的后台高并发业务场景崭露头脚,甚至有取代传统后台服务开发语言","并不是同一个,这会导致出现有些","并不是必须的,例如","并且标明后续处理建议(如删除计划)。","并发写入有锁链表","并指定作用范围。","并没有关键字","并没有提供删除切片元素专用的语法或函数,需要使用切片本身的特性来删除元素。","库),可以用于实现无锁数据结构,如无锁链表。","应为","应当使用如下的方式:","应用服务建议有","应用服务必须要有接口测试","应用程序和公共库的示例","应用程序和公共库的示例。","应用程序特定组件,如静态","应用程序的组件","应用程序目录","应用程序目录/web2.5","应用程序项目的基本布局,是社区","应该做到:","应该后移一位。","应该足以满足任何情况!","底层核心数据结构","建议调整为这样:","开发经验的","开头,例如","开始","开始。","开始,如果需要使第一个值为有意义的值,我们应该从","开始,官方推荐使用新的依赖管理系统","开销","开销。我们可以利用runntime.gosched()让当前协程主动让出","开销可能会严重影响性能。","式","式。如果不关心是否成功,ok","引入第三方包要慎重。","引用)时,才可以","当y与err都为空时,函数的调用者会出现错误的调用逻辑","当不能在这些交互中使用","当且仅当第一次访问某个变量时,进行初始化(写);","当使用反射时,请问一下自己,我真地需要它吗?","当创建的","当在这些交互中不能使用","当存在资源管理时,应紧跟","当有多个","当然,凡事无绝对。如果第一个枚举值为零是有意义的,如当零值是理想的默认行为时。","当然,凡事无绝对。如果需要修改接口变量本身,那么应该使用指向接口变量的指针,当然你必须清楚自己在干什么。","当程序的多个函数具有退出能力时会存在一些问题:","很多时候,我们可能只需要操作一个类型的切片,利用反射实现的类型泛化扩展的能力压根没用上。退一步说,如果我们真地需要对","很少需要嵌入类型,虽然它可以帮助您避免编写冗长的委托方法。","循环中使用","循环变量的地址不要存储。","循环变量的地址指向的是同一个变量,我们可以通过赋值给一个同名的变量,通过变量逃逸,来达到取不同地址的目的。","循环多次尝试,直至成功。","必要情况下字段给出注释。","必要时给包起个别名","必须在","必须是固定大小的值或固定大小值的切片,或指向此类数据的指针。","必须是指向固定大小值的指针或固定大小值的切片。","必须是最后一个参数。","必须要有","性能对比","性能对比1.无锁化","性能没有差别,但是","您会收到更多有用的错误,例如“呼叫服务","想离","意义不明的成员变量,应该定义类型描述作用。","成员函数","成本,可提高程序性能。","我们以","我们以一个简单的线程安全单向链表的插入操作来看下无锁编程和普通加锁的区别。","我们以一个简单示例,来说明使用","我们几乎不需要使用指向接口的指针,应该将接口直接赋值给接口,这样在传递过程中,实质上传递的底层数据仍然是指针,即不存在值拷贝的情况。","我们分别对两种链表做一个并发写入的操作验证一下其功能。","我们可以找到","我们可以找到切片的底层数据结构","我们可以看一下最常用的标准格式化输出函数","我们可以看下接口变量的内存宽度。","我们可以通过依赖注入的方式将依赖注入到使用方,这样便可以避免使用全局变量,进而避免了依赖的全局变量被错误修改的可能。","我们可以通过在访问共享资源前前用","我们实现一个简单的例子,三个协程调用","我们想象一个非常简单的场景:","我们来看一下编译器编译时对上面两个切片的优化决策。","我们看下二者的性能差异。","我们还是以上面斐波那契数列函数为例,看下返回值为确定类型和","我们都知道","或","或互斥锁,那么只能有一个协程可以等待,并读取到数据,没办法通知其他的协程也读取数据。","或无缓冲","或是无缓冲的。默认情况下,channel","或程序主动抛出的","或空","或者","或者为了更好的可测试性","或自定义错误类型。","所以如果对性能要求非常严格,或待拼接的字符串数量足够多时,建议使用","所有注释掉的代码在提交","所谓互斥锁,指锁只能被一个","手动gc","打包和持续集成","打包和持续集成。","打印的是不同的地址","打印的是相同的地址","执行runtime_notifylistwait会挂起调用者所在的","执行各种构建、安装、分析等操作的脚本","执行各种构建、安装、分析等操作的脚本。","执行基准测试结果如下:","执行基准测试:","执行当前包下的所有基准测试,结果如下:","执行性能测试结果:","执行测试结果如下:","批量查询函数返回值使用","批量获取用户信息(允许部分失败)。","批量获取用户信息(需全部成功)。","把简单的逻辑判断放前面,复杂的逻辑判断放后面。","抛出的异常。如果启动的","抛去大段的注释,可以看到","括号和空格","持续集成配置与脚本","指令,也就是说,这样做能够提升性能。","指导","指针复制是没有问题的。","指针既可以调用","指针,对于","按照上面的规则,下面给出好坏文件内容布局示例。","捕获最晚要在当前","换行方式","接下来逐个分析,首先是","接下来,我们测试三种情景下,互斥锁和读写锁的性能差异。","接受初始化语句,尽可能缩小变量作用域。","接口命名","接口注释","接收器为值和指针的方法在调用方式上是有区别的。","接收器的名称在函数超过","接收数据,接收完成后,将","控制并发处理的任务数量,就不需要","推荐以类名第一个英文首字母的小写作为接收器的命名。","描述\"。","描述\",斜线后面紧跟一个空格。","描述了内存对齐的规则。","提供了两个导出方法用来使用锁。","提供了两种锁,互斥锁(sync.mutex)和读写锁(sync.rwmutex),读写锁便是共享锁的一种具体实现。","提供了五个导出方法用来使用锁。","提供容量提示会在初始化时尝试调整","提升可读性是值得的,因为使用它们的成本微不足道。尤其适用于那些不仅仅是简单内存访问的较大方法,在这些方法中其他计算的资源消耗远超过","提示并不保证完全的抢占式分配,而是用于估计所需的","操作将导致零分配(直到","操作来达到一发多收的效果,但是","操作的基准测试,对比一下有锁与无锁的性能差异。","操作,即调用compareandswap()方法进行插入,如果插入失败则进行","操作,及做一次数据拷贝,耗时几乎可以忽略。而内存分配和回收的耗时占比较多,因此对程序整体的性能影响更大。从测试结果也可以看出,使用了","支持","支持使用原始字符串字面值,可以使用反引号来表示原生字符串。在需要转义的场景下,我们应该尽量使用使用反引号表示字符串,避免转义。","支持将","放在匿名函数中","放在有名函数中然后调用之","放在第一个字段,能够减少","数量,复用协程,达到更高效执行任务的效果。","整体风格","整体风格2.2","文件中(一般是和包同名的文件)即可。","文件名应该采用小写,并且使用下划线分割各个单词。","文件命名","文件长度不能超过","文件,只需要出现在一个","方式一","方式二","方式传递后,再加上其长度不可扩展,考虑到性能我们一般很少使用它。实际上,凡事无绝对。有时使用数组进行拷贝传递,比使用切片要好。","方法中没有使用值接收器。","方法在结束阻塞时,会重新给","方法对资源进行上锁,在访问共享资源后调用","方法接收器命名","方法支持将","方法时,必须加锁。","方法是","方法来实例化具有给定容量的池,如下所示:","方法来获取和放回池子中。","方法来释放锁,也可以用","方法获得锁后,其他请求锁的协程都会阻塞在","方法,直到锁被释放。","族群","无论是","无论是使用嵌入结构还是嵌入接口,都会限制类型的演化。","无锁化主要有两种实现,无锁数据结构和串行无锁。","无锁单向链表","无锁单向链表的简单实现","无锁数据结构","无锁数据结构1.2","无错误匹配。","无需去除编译器优化,基准测试结果如下:","既然","时为","时传入的","时获取的是值拷贝,对副本的修改,是不会影响到原切片。","时间上,协程调度也会有","时间处理看似简单,实则不然。关于时间的错误假设通常包括以下几点:","时间类型尽量使用内置定义,如","时,同样的,请注意用户对暴露内部状态的","时,甚至在指定","时,请使用","时,请记住当","时,除非达成一致,否则使用","明文传输协议","明确地告诉我们,我们并不需要知道变量是分配在栈(stack)上还是堆(heap)上。golang","是","是一个值,而","是一个实体列表。","是一个很好的选择。频繁地分配、回收内存会给","是一个更合适的名字。","是一个有效的","是一个有效的长度为","是一个比较好的方式。","是一个简单易用的高性能","是一个结构体类型","是一种使用可变字节表示整数的方法。其中数值本身越小,其所占用的字节数越少。protocol","是不占用内存空间,不像","是不确定的类型,会发生变量逃逸,触发堆内存的分配。所以,可预见的是当元素数量增加时,性能差异会越来大。","是几秒钟还是几毫秒?","是只会被执行一次的函数,一般为对象初始化函数。","是可伸缩的,同时也是并发安全的,其容量仅受限于内存的大小。存放在池中的对象如果不活跃了会被自动清理。","是各种实体列表的通用实现。","是否符合标准等。编译前先执行代码静态分析。","是在没有大小提示的情况下创建的;","是基于互斥锁/读写锁实现的条件变量,用来协调想要访问共享资源的那些","是属性数据层操作类的工厂方法","是无法捕当前","是无缓冲的,其","是有区别的,channel","是有大小提示创建的;在运行时可能会有更少的分配。","是有效的","是有效的,所以指向","是由","是第一个字段,默认是已经对齐的,从第","是第三个字段,对齐倍数为","是第二个字段,对齐倍数为","是第二个字段,对齐系数为","是级联失败(cascad","显示处理","显示指明","更多关于","更多可参考","替换。","替换为指针","最佳实践更近一步,建议看看本书。","最佳性能","最好有","最小化变量作用域。","最顶层将其捕获,在其他","有一个协程在异步地接收数据,剩下的多个协程必须等待这个协程接收完数据,才能读取到正确的数据。在这种情况下,如果单纯使用","有些","有些语言自身提供了目录结构规范,但对于较为年轻的","有时候你会看到某个类里有很多基本类型字段,但是你隐约地能区分出某些字段好像应该在一起,如手机号和带区号的电话号码、描述某个日期范围的开始日期和结束日期,它们应该有一个真实的载体,如联系方式类和时间范围类)","有时候使用","有时后我们需要根据多个","有时,我们需要一些工具函数。比如从","有锁","有锁单向链表","有锁单向链表的简单实现","有锁并发写入","有锁链表的字符串形式输出","服务对外接口","服务对外接口。","服务应用程序目录","服务应用程序目录/api2.4","服务,每个请求天然是并发的,此时使用","未导出全局变量。","未导出全局常量。","本书为开源书籍,希望得到大家的协同共建,不断迭代丰富。如果有你的建议和","本书主要分为四个方面:","本书所述内容谈不上是","本书由来","本书由来内容简介目标读者互动勘误","本文所述内容均为参考意见,并非标准。其中许多是","本文结合官方编码建议,大厂编码规范、开源技术书籍和自身项目经验,尽可能以简短的语言给出一套行之有效","本身在代码规范方面做了很多努力,很多限制都是语法要求,例如左大括号不换行,引用的包或者定义的变量不使用会报错。此外","条件不满足或出现错误应尽早返回。","来代替。","来代替。事实上,对于集合来说,只需要","来取代","来回收,如果无休止地创建大量","来定义枚举类型,引入枚举的标准方法是声明一个自定义类型和一个使用了自增器","来实现。","来拼接而不是fmt.sprintf()。","来混淆底层错误,调用者将无法匹配它,但如果需要,您可以在将来切换到","极客兔兔","构建","构建依赖包","构造函数应该放在其他函数之前,如newxyz()/newxyz()。","查询对应的值,可能会出现部分失败的情况,如某个","标准包","标准库","标准库也大量使用了","标准库函数","标准库提供的使函数只执行一次的实现,常应用于单例模式,例如初始化配置、保持数据库连接等。作用与","标准库时间的类型别名","标志:flag","标签或日志中的","栈上分配内存比在堆中分配内存有更高的效率。因为栈上分配的内存不需要","样式注释","根据调用者是否应该能够匹配和提取根本原因,在","格式为//","格式为:\"//","格式之间进行选择。","格式化字符串中多个占位符之间要有空格。","格式的说明文档,是用户了解一个项目最直观的入口。如果有需要,添加不同语言的","框架","概述了几个内置的,不应在","模块语句","模式。go","模拟","次。","次,则禁止使用,用一个有名称的常量代替,可读性更好。","正常逻辑不应该在","此外,因","每一个字段","每个","每个包都应该有一个包注释。","每个字段按照自身的对齐系数来确定在内存中的偏移量,一个字段因偏移而浪费的大小也不同。","每个重要的可导出函数都要首先编写测试用例,测试用例和正规代码一起提交方便进行回归测试。","每个需要导出的变量和常量都必须有注释说明。","每个需要导出的类型定义(type","每个需要导出的自定义结构体或者接口都必须有注释说明。","比","比如","比如下面将依赖的","比如多个班级下的学生id。","毫无压力,但当我们起十万、百万甚至千万个","池,实现了对大规模","没有","泄漏实现细节指","注入","注意,1.11","注意,与","注意,多次运行上面的main()函数的结果可能会不相同,因为并发是无序的。","注意,如果方法的接收器为不可导出类型,可以不注释,但需要质疑该方法可导出的必要性。","注释对变量和常量进行简要介绍,放在常量或变量定义的前一行。独行注释格式为:\"//","注释对结构进行简要介绍,放在结构体定义的前一行。格式为:\"//","注释描述函数或方法功能、调用方等信息。格式为:\"//","注释结束添加点或句号,参考标准库源码注释。","测试用例的函数名称必须以","测试相关","测试相关。","测试结果如下:","深度解密go","添加上下文生成新错误。","添加上下文生成新错误;","添加将实体添加到列表中。","添加成功或出错。","源码","源码2.2","源码应该是你的首选,再结合精彩的第三方分析,如","源码文件","源码目录","源码目录。","源码进行剖析介绍实现原理的,有介绍高并发场景下实战指导的,也有介绍使用","热路径(hot","然后调用","然而,一旦错误被发送到另一个系统,应该清楚消息是一个错误(例如","版本的大小限制可能不一样。一般是","特有名词时,需遵循以下规则:","特殊实现需要注释。","现在是一个拷贝","现在是明确的","生成切片函数如下:","生成带参数的","生成指定长度","生成指定长度的随机","生成的文档之外)均可以放在该目录。","用","用于从对象池中获取对象,因为返回值是","用于捕获","用于获取变量的对齐系数。","用于阻塞调用者,等待通知。","用户结构定义了用户基础信息","用来保证函数只执行一次。要达到这个效果,需要做到两点:","用来协调想要访问共享资源的","用来解决这类问题。","用来调节读操作的占比,来模拟读写占比不同的场景。rpct","用的就是","由两个字段构成,一个类型是","由于","由于函数是按接收者分组的,因此普通工具函数应在文件末尾出现。","由于单测文件内的函数都是不对外的,所有可导出函数可以没有注释,但是结构体定义时尽量不要导出。","由于第一个值从","申明","申明变量","的","的。","的一部分。","的一部分,尽管它不是。除了这一种情况,不要使用import","的两个分支中都设置变量,则可以将其替换为单个","的二进制表示形式写入","的位置就是所有有效元素的下一个位置,最后做一个截取就行了。这种方法会修改原来的","的使用方式非常简单,只需要实现","的修改。","的修改是一个互斥操作。在执行任务函数前,对","的倍数,从第","的共同追求。为书写效率更高的代码,本文将结合","的共同追求。本篇将结合","的内存占用为","的内存,在源码","的切片。从最终的结果可以看到,遍历","的切片进行测试,来上下上面四种实现的性能差异。","的切片(一个为","的初学者,建议先略过本书,了解下","的判断,来决定是否执行传入的任务函数。执行任务函数前,通过锁保证任务函数的执行和","的包。","的区别?","的压力。","的压力,提升系统的性能。","的原理与使用场景","的名字和目录一致。","的四个成员函数定义如下:","的基础上增加了自动删除和引入包。","的大小为","的大小,这将减少在将元素添加到","的子目录都不能被导出。","的字段时,一般不需要内存对齐。但是有一种情况除外:即当","的存在还有必要吗?","的完整功能,如初始化(通过切片构建一个","的定义。","的定义如下:","的实现是","的实现细节。good","的实现细节,对其调用者不可见。","的实现细节,被到处泄露了;","的实现,通常使用","的容量分配足够的内存,这意味着后续的","的对齐系数决定,也是","的对齐系数由","的工具,主要功能就是检测代码中不规范的地方。","的并发操作个数超过了系统上限,这个报错是","的并发读写。","的底层数组。这样也不需要额外分配内存空间,直接在原","的底层结构后,我们应该知道在传递过程中一般也不需要使用指向它们的指针。","的开销。虽然官方宣称用","的开销主要是三个方面:创建(占用内存)、调度(增加调度器负担)和删除(增加","的开销非常小,只有在您可以证明函数执行时间处于纳秒级的程度时,才应避免这样做。使用","的异常,禁止滥用","的性能几乎一样,如基本类型的切片","的性能几乎是一样的。而且使用指针还有另一个好处,可以直接修改指针对应的结构体的值。","的性能将显著地高于","的性能差别。","的性能相近。如果结果字符串的长度是可预知的,使用","的情况下保证并发安全,并且它的性能也能做到随","的截取删除指定元素。注意删除时,后面的元素会前移,下标","的打印顺序是随机的。","的指针","的指针基本是不必要的。","的操作耗时很短,所以每次睡眠一微秒(百万分之一秒)来增加耗时,不然对共享资源的访问耗时,小于锁处理的本身耗时,那么使用读写锁带来的性能优化效果将变得不那么明显,甚至会降低性能。","的数量。","的最佳实践更近一步。","的最佳实践,但希望能够帮助广大","的毛刺,而","的空间。","的空间,优点是容易理解,而且不会修改原","的空间,那么假设计算机的内存是","的结果为准。","的缓冲区大小来实现。","的编码和解码。varint","的讨论可参考","的调度管理和复用,允许使用者在开发并发程序的时候限制","的退出机制,防止泄漏。","的通用准则,其他扩展内容也参考了很多官方指南,包括但不限于。","的逻辑。","的逻辑,","的遍历方式","的键,而不需要值。即使是将值设置为","的长度与容量匹配,在此之后,任何","的非","目录。","目录下。","目录下,","目录下,而不是具体业务目录下。","目录内部增加一些代码结构来区分共享和非共享的。虽然它并不是必须的(尤其是小的项目),但是最好能从视觉上区分包的用途。","目录的项目结构是一种常见的布局模式,但并不是所有人都接受它,一些","目标读者","目,但这通常发生在开发人员有","相似的声明放在一组。","相关操作需要独立封装","省略结构中的零值字段。","看一下性能差异,注意需要禁止编译器优化,不然看不出差别。","看下二者的性能差异:","知道变量逃逸的原因后,我们可以有意识地避免变量发生逃逸,将其限制在栈上,减少堆变量的分配,降低","示例,实际不要这么查询,防止","社区的人并不推荐它。","禁止在循环中使用","禁止类型演化指","私有库代码(仅本项目使用)","私有库代码(仅本项目使用)。","私有量和局部量规范一致,均以小写字母开头。","秒","移除从列表中移除实体。","程串行执行","程到运行结束,占用的内存资源是需要由","程势必会带来性能影响,甚至程序崩溃。所以,我们应尽可能的控制协程数量,如果有需要,请复用它。","程占用约","程同步。通过","程后,势必会造成对","程序中每一个被导出的(大写的)名字,都应该有一个文档注释。","程序会像预期的那样顺利的运行吗?","程序将意外终止并输出:","程序崩溃","程序崩溃1.2","程序退出方式","程数量越多,gc","程的情况下,函数仍然只执行一次,比如锁。","程的结构定义type","程间的同步。","程(goroutine)是由","程,以此来实现多个","程,即保存了一个通知列表。sync.cond","空切片使用","空结构与空数组在","空间上,一个","等。","等于其中的最大值。","等于构成数组的元素类型的对齐系数。","等单词开头。","等待下次被唤醒。为了保险起,使用","等待通知,直到","等待,一个","等待,另一个协程调用","等操作,可以使用开源库","等)进行操作,因为很容易忘记使用原子操作来读取或修改变量。","简体中文","简单明了的包命名,如:time、list、http。","简而言之,系统的资源被耗尽了。","简言之:合理的内存对齐可以提高内存读写的性能,并且便于实现变量操作的原子性。","管理依赖的项目,","类似地,在了解","类似的,使用值接收器和指针接收器来实现接口,在判断与接口是否匹配时,也存在一定的区别。","类型。","类型为","类型名","类型呢?","类型手动实现一个","类型换成自定义类型。将来,该参数可以支持不仅仅局限于两个状态(true/false)。","类型断言","类型断言使用","类型断言的单个返回值形式如果断言失败将产生","类型时的实现。","类型的切片,下标与","类型的变量,应直接进行真假判断。","类型的实例,但是我们要","类型,也会多占据","类型,则名称应以","系统中,标准输出也可以视为文件,内核(kernel)利用文件描述符(fil","系统初始化(systemd,","系统地资源是有限,协程是有代价的,为了保护程序,提高性能,我们应主动限制并发的协程数量。","约为","线程安全,保障在多","组来表示枚举值。","经常用在多个","结束。","结束程序而不是","结构。","结构体","结构体信息描述\"。","结构体内的可导出成员变量名,如果是个生僻词或意义不明确的词,必须要单独给出注释,放在成员变量的前一行或同一行的末尾。","结构体名","结构体名应该是名词或名词短语,如","结构体命名","结构体注释","结构体的定义和初始化格式采用多行。","结构体,那么","结构来接收通知就行了。","结构,其有两个变量。使用","绝大部分场景都会访问","统计函数执行次数,使用锁","继续使用","继续使用field","继续看","综合易用性和性能,一般推荐使用strings.builder来拼接字符串。","编码为","编码建议的。至此,本书应运而生。","编码建议,让您的代码高效易读。","编码规范,但大同小异。规范是一种倡导,不遵守并不代表错误,但当大家都遵守规范时,你会发现,整个世界将变得整洁有序。","编码风格","编码风格从简洁易读的角度出发,参考","编译不通过,因为无法对","编译后的机器码指令更少,更直接,必然是能够提升性能的。","编译器一般为了减少","编译器对变量的逃逸分析决策远比我们想像的要复杂。我们只能尽可能地去勾勒而无以绘其全貌。go","编译器而言,超过一定大小的局部变量将逃逸到堆上,不同","编译时可以借助选项","缩略语要么全小写,要么全大写。","网络字节序解析到","置为","考点汇总","考虑一个简单的场景,函数","而不是","而不是net/urls。","而不是执行“init","而非","耗时越大。","背景。不同类型的代码应该有自己的目录,而不是全部放到","能够接收不同类型的入参,通过格式化输出完成字符串的拼接,使用非常方便。但因其底层实现使用了反射,性能上会有所损耗。","能够确保被唤醒后条件一定符合后,再执行后续的代码。","自动格式化代码,保证所有的","至少为","若量类型为","获取读锁,所以是一种共享锁。但写锁是互斥的。","获得。共享锁指可以同时被多个","获得了同名嵌套类型字段","获得的锁。","虽然简单,但其功能特性却不单一。其丰富的语言特性,在使用时还是有很多不同的姿势。本书从功能特性出发,给出","虽然轻量,但天下没有免费的午餐,无休止地开辟大量","虽然这些使用内置标识符的自定义字段可以编译通过,但对","虽然默认为","行。","行内字符串拼接时,出于性能的考虑,待拼接字符串数量较少(fmt.sprintf()。","行内字符串的拼接,主要追求的是代码的简洁可读。fmt.sprintf()","行内拼接字符串为了书写方便快捷,最常用的两个方法是:","行数","行的时候不要用单字符。","行长度换行方式不必要的空行括号和空格行数行长度","行)。单测函数行数限制也是普通函数的2倍(160行)。圈复杂度、列数限制、","表示广播通知,其他的","表示执行是否成功,而不是用","表示执行状态的返回值应该放在最后。","表示读写一致(各占","表示读多写少(读占","表示读少写多(读占","表示连续的非类型化整数常量,它的值是对应常量的下标(从零开始),它可用于构造一组相关常数:","表达时间段","表达瞬时时间","表驱动测试.","被导出的字段和方法全部成为了","被导出的字段和方法,在","被捕获。","被用于控制变量的初始化,这个变量的读写满足如下三个条件:","要么是","要好。","要好,i","要比","规则为准。","规范","规范依赖规范","规范原则上以","解决,","解析、校验、计算的逻辑应该进行分离","解析函数应该注明解析字符串的范例,并明确不能处理的异常情况。","计数器,统计函数执行次数;","计算出一个数据类型实例需要占用的字节数。","记住,虽然","设为","访存指令周期,提高内存的访问效率,会对变量进行内存对齐。go","访存次数。","访存的单位是","访问内存并不是逐个字节访问,而是以字长(word","访问内存的吞吐量。比如同样读取","访问内存的次数,加大","该函数也是参考了","该包已经","该方法可以看成对第一种方法截取法的改进,因为每次指需移动一个元素,性能更加。","该注释对类型进行简要介绍,放在定义的前一行。","详细的专有名词列表可参考这里。","语句之后(所有迭代之后),即所在函数结束时,defer","语句前不要换行。","语句来保证互斥锁一定会被解锁。在一个","语法知识和语言特性与,也建议先略过本书。go","语言之sync.pool","语言圣经","语言在标准库","语言基础和实战的,有对","语言实现原理,还是建议先略过本书。虽然本书略有涉及,但不够全面。go","语言提供了运行时动态获取对象的类型和值以及动态创建对象的能力。反射可以帮助抽象和简化代码,提高开发效率。","语言标准库以及很多开源软件中都使用了","语言标准库没有提供","语言特性,为书写高效的代码,力争从常用数据结构、内存管理和并发编程三个方面给出相关建议。话不多说,让我们一起学习","语言特性,从常用数据结构、内存管理和并发,三个方面给出相关建议。","语言的反射能力,例如用于序列化和反序列化的","语言自","语言规范","语言设计与实现,应该会大有收获。","语言高性能编程","说明文档,介绍服务功能、使用方法、部署时的限制与要求、基础环境依赖等","请注意,如果您从包中导出错误变量或类型,","读、写、计算的逻辑应该进行分离","读写一致(各占","读写安全","读写锁是一种共享锁,也称之为多读单写锁","读写锁的存在是为了解决读多写少时的性能问题,读场景较多时,读写锁可有效地减少锁阻塞的时间。","读取","读取到","读取整个给定的字节数据并返回读取的长度","读多写少(读占","读少写多(读占","读操作。","读锁之间不互斥,没有写锁的情况下,读锁是无阻塞的,多个协程可以同时获得读锁。","调度开销","调用","调用。","调用有名函数","资源、服务器端模板和","赋值的右边应该是断言类型的零值。","赋给接口","起,从编译器层面限制该目录不可被导出,而且不只是项目根目录下的","越界运行时抛出的","路径名不一致时,或者多个相同包名冲突时,使用别名代替会有更好的可读性。","转为主机字节序。","轻量的开销将被放大。","过滤指定元素。注意:不修改原切片。","运算符","运算符+","运算符和操作数之间要留空格","运算符和操作数之间要留空格。","运行上面的例子将会输出:","运行上面的基准测试。","运行上面的基准测试结果如下:","运行上面的基准测试,将得到如下结果。","运行上面的基准测试,结果如下:","运行时管理的轻量级线程。通过它我们可以轻松实现并发编程。但是当我们无限开辟协程时,将会遇到致命的问题。","运行时管理的轻量级线程,通过它我们可以轻松实现并发编程。go","运行测试结果如下:","运行的结果是程序直接崩溃了,关键的报错信息是:","运行结果如下,注意","运行结果如下:","运行结果:","运行输出如下,注意","运行输出:","返回","返回一个","返回值类型不确定(不能确定大小)","返回值超过","返回值,如果允许部分失败使用","返回前,会重新上锁。重新上锁的原因是主调在","返回地址","返回引用(引用变量的底层是指针)","返回当前状态。","返回指定用户名的完整名称。","返回指针","返回指针3.小的拷贝好过引用4.返回值使用确定的类型5.小结变量逃逸一般发生在如下几种情况:","返回时,编译器无法确定返回值的具体类型,导致返回值逃逸到堆上。当发生了堆上内存的申请与回收时,性能会差一点。","返回读锁,使用","还会忽略以“.”或“_”开头的目录或文件,因此在如何命名测试数据目录方面有更大的灵活性。","还启用了模块代理功能(默认使用","还是","还是以上面给出的同步示例,这里换作","还是提供了很多好用的工具帮助我们进行代码的规范。","还有更多,具体可参考","这个例子创建了一个","这个例子实现了","这个时候,就需要有个全局的变量来标志第一个协程数据是否接受完毕,剩下的协程,反复检查该变量的值,直到满足要求。或者创建多个","这个错误没有被导出,因为我们不想让它成为公共","这个错误没有被导出,因为我们不想让它成为我们公共","这个错误被导出,以便这个包的用户可以将它与","这么设计的目的,是减少","这些脚本帮助根目录下","这会精简main()函数,并将所有关键业务逻辑放入一个单独的、可测试的函数中。","这将保留原始错误类型和消息。","这是","这样就不会出现诸如“连接被拒绝”之类的模糊错误,","这样的标识符,不知道其是顶级标识符还是导入包中的顶级标识符。","这样的目录,因为这些名称含义太泛了,违背了单一职责原则。","这种方法最容易理解,重新使用一个","这类意义太宽泛的结构体名。","这类易混淆名称。","这行代码去掉呢?那程序很可能会因为内存不足而崩溃。这一点更好理解,每个协程至少需要消耗","这里分别对长度为","这里利用对","这里我介绍的是后台微服务开发经常遇到的一种情况。我们经常需要并发拉取多方面的信息,汇聚到一个变量上。那么此时就存在对同一个变量互斥写入的情况。比如批量并发拉取用户信息写入到一个","这里我们修改","这里放不希望被其他应用程序或者库导入的代码。注意:从","这里放希望被其他应用程序或者库导入的代码,所以在这里放东西之前要三思。","这里是服务对外接口的实现,定义接口时,我们应该遵循","这里需要注意的是,因为每次读写","这非常适合底层错误消息有足够的信息来追踪它来自哪里的错误。","进行","进行匹配。","进行处理,或使用空白标识符忽略。对于defer","进行自动化管理。","进行高性能编程的,等等。很遗憾的是,没有发现一个系统介绍","迭代的元素较小,那么","通常只包含一个简单的","通常可以简写为","通常用来保护共享的临界资源,条件变量","通用","通用包注释函数注释结构体注释变量和常量注释类型注释接口注释在编码阶段同步写好类型、变量、函数、包注释,注释可以通过godoc导出生成文档。","通用场景","通用应用目录","通用应用目录/configs/init/scripts/build/deployments/test/readme.md2.6","通用的功能包,应该放在","通用规则","通用规则项目命名包命名文件命名函数命名结构体命名接口命名量命名通用常量命名方法接收器命名错误命名避免使用内置名称命名是代码规范中很重要的一部分,统一的命名规范有利于提高代码的可读性,好的命名仅仅通过命名就可以获取到足够多的信息。","通知协程","通知所有等待的协程。","通知队列","通知(事件发生)的场景。如果是一个通知,一个等待,使用互斥锁或","通过","通过%v打印错误信息时建议加冒号。","通过其","通过隐藏基础类型为这些操作增加了类型安全性。此外,它还包括一个易用的","遇到","遍历","遍历切片或数组有两种方式,一种是下标,一种是","遍历性能几乎没有区别。","遵循","避免使用","避免使用内置名称","避免参数语义不明确。","避免重复执行","那么到底是谁适合阅读本书呢?如果你是一位有","那么多大的变量才算是小变量呢?","那么对于稍微复杂一点的","那如果我们将","部分会导致字段","部分可以做到字段","部署的应用程序),这个目录被称为","部署相关","部署相关。","都会浪费额外的内存。因此,在这种情况下,声明为空结构体最合适。","都可能调整大小以容纳其他元素)。","都实现了分片功能,每个分片一把锁,采用分片存储的方式减少加锁的次数从而提高整体性能。","配置信息","配置信息。","配置文件的命令行参数名","配置文件的命令行参数名。","配置文件的读取,和对象初始化应该分开,不要让对象自己根据配置文件初始化,保证构造函数足够简单","采用惰性换行,换行前应尽可能占满当前行不留空位。","采用有意义、简短的文件名。","采用独立的错误流进行处理。","采用驼峰命名方式,首字母根据访问控制采用大写或者小写。","释放写锁","释放读锁","释放资源","释放资源。","释放资源,诸如文件和锁。","释放锁","里装的对象可以被无通知地被回收,可能","里面的","里面的下划线)。","重新分配内存。","量名不应该以类型作为前缀/后缀。","量名应该是名词,进行时和过去式可以做形容词,成为量名的一部分。","量名遵循驼峰式,根据是否导出决定首字母大小写。","量命名","钩子","钩子。","钩子,可以帮忙我们在代码提交时完成一些检测,比如分支名称和","链表节点","错误判断独立处理,不与其他变量组合判断。","错误匹配","错误匹配。","错误命名","错误地使用接口会在编译期报错。所以可以利用这个机制让部分问题在编译期暴露。","错误消息","错误示例:urlarray,应该写成","长度为","长度或容量不定)","闭包","队列里的函数调用,这增加了跳过重要清理任务的风险。","阻塞等待的条件。","限制协程数量","限制协程数量3.协程池化4.小结1.协程数过多的问题","除了","除了包的主逻辑文件中内容允许导出,包内的辅助函数都应该是非导出的。","零值","需要做一次偏移值与指针的加法运算,才能获取要访问的值的地址。因为,访问第一个字段的机器代码更紧凑,速度更快。","需要判断当前文件是否应该归属于当前包,主要以职责进行判断。","需要描述谁,在什么场景下,如何使用接口。","需要有一个缺省处理逻辑","需要注意的时,上面运行基准测试时,使用编译选项","需要注意,运行上面基准测试时,传递了禁止内联的编译选项","需要读取环境变量,并转换为对应的配置。环境变量在程序执行前已经确定,执行过程中不会发生改变。readconfig","非导出的函数,如果比较简单,不需要注释。","非缩略语则应该使用驼峰命名。","非零值","页面,则在这里放置项目网站数据。","项目中使用的标识符","项目依赖的第三方工具,比如","项目命名","项目工具","项目工具。","项目布局","项目布局代码风格功能设计最佳性能项目布局","项目布局参考业界认可度较高的","项目文档","项目文档。","项目用到的相关资源文件,比如项目","项目确实有一个","项目网站数据","项目网站数据。","项目说明","项目说明。","项目资源文件","项目资源文件。","项目配套工具,实现这些工具可以使用从","顺序是明确的,但代码可以更改,","预先分配容量这种方式。","预先声明的标识符","首先根据互斥锁和读写锁分别实现对共享","首先看一下遍历基本类型切片时二者的性能差别,以","首次被加载时执行,若迟迟未被使用,则既浪费了内存,又延长了程序加载时间。","高性能编码","高性能编程技法吧。","高效的代码是我们每一个","魔法字面量","(1)command","(1)一个指向某些特定类型信息的指针;","(1)不明显的控制流:任何函数都可以退出程序,因此很难对控制流进行推理;","(1)不能表示为单个赋值的复杂表达式;","(1)向嵌入接口添加方法是一个破坏性的改变;","(1)如果调用者应该可以访问底层错误,请使用","(1)导出类型的部分","(1)您不应明确返回长度为零的切片。应该返回nil","(1)无论程序环境或调用如何,行为都必须是完全确定的;","(1)无锁单向链表实现时在插入时需要进行","(1)调用者是否需要匹配错误以便他们可以处理它?","(1)返回原始错误;","(2)json:encoding/json","(2)一个指向具体数据的指针。如果存储的数据是指针,则直接存储。如果存储的数据是一个值,则存储指向该值的指针。","(2)为了方便打印链表内容,实现一个string()方法遍历链表,且使用值作为接收者,避免打印对象指针时无法生效。","(2)从嵌入结构体删除方法是一个破坏性的改变;","(2)使用","(2)可插入的钩子,如","(2)导出或非导出类型实现了接口且属于某类型的一部分(匿名嵌套);","(2)要检查切片是否为空,请始终使用","(2)避免依赖其他","(2)错误消息是否为静态字符串,还是需要上下文信息的动态字符串?","(2)难以测试:退出程序的函数也将退出调用它的测试,这使得函数很难测试,并跳过了尚未被运行的其他代码;","(3)sql:database/sql","(3)任何其他情况都违反接口合理性检查,终止编译并通知用户。","(3)使用","(3)删除嵌入类型是一个破坏性的改变;","(3)对","(3)我们是否正在传递由下游函数返回的新错误?","(3)跳过清理:当函数退出程序时,会跳过已经进入","(3)避免访问或操作全局变量和环境状态,如机器信息、环境变量、工作目录、程序参数/输入等;","(3)零值切片(用var声明的切片)可立即使用,无需调用","(4)yaml:gopkg.in/yaml.v2","(4)即使使用满足相同接口的类型替换嵌入类型,也是一个破坏性的改变。","(4)避免",")。",",item",",unsafe.alignof(x)",",vet",",大部分的格式问题可以通过",",字长为",",并结合自身项目团队编码规范,力争给出全面、认可度较高的编码风格,帮助大家写出风格统一的简洁高效的代码。",",此工具在",",类似",",而不应全部零散放在一个大类型中。",",若缓存区满,则阻塞。协程任务结束,调用",";"],"pipeline":["stopWordFilter","stemmer"]},"store":{"./":{"url":"./","title":"前言","keywords":"","body":"本书由来内容简介目标读者互动勘误\n本书由来\nGo 语言自 2009 年诞生以来,因其出色的并发能力和简单易用的低门槛,已在各大厂商的后台高并发业务场景崭露头脚,甚至有取代传统后台服务开发语言 C++ 和 Java 之势。\nGo 不仅易用,也很易学,这得益于与之匹配的丰富学习资料。Go 官方网站已有系统全面的指导文档,新手可以快速通过官方资料,轻松上手。此外,第三方资料,也有百家争鸣之势。有介绍 Go 语言基础和实战的,有对 Go 源码进行剖析介绍实现原理的,有介绍高并发场景下实战指导的,也有介绍使用 Go 进行高性能编程的,等等。很遗憾的是,没有发现一个系统介绍 Go 编码建议的。至此,本书应运而生。\n本书所述内容谈不上是 Go 的最佳实践,但希望能够帮助广大 Gopher 向 Go 的最佳实践更近一步。\n内容简介\n各个公司或组织,都有各自不同的 Go 编码规范,但大同小异。规范是一种倡导,不遵守并不代表错误,但当大家都遵守规范时,你会发现,整个世界将变得整洁有序。\n本文结合官方编码建议,大厂编码规范、开源技术书籍和自身项目经验,尽可能以简短的语言给出一套行之有效 Go 编码建议,让您的代码高效易读。\n本书主要分为四个方面:\n\n项目布局\n\n项目布局参考业界认可度较高的 Standard Go Project Layout,给出布局建议。一个清晰的项目结构,能帮忙我们高效有序的管理与日俱增的业务代码。不会随着代码量的递增,项目代码变得凌乱而不堪入目。\n\n编码风格\n\n编码风格从简洁易读的角度出发,参考 Go 官方 Go Code Review Comments\n,并结合自身项目团队编码规范,力争给出全面、认可度较高的编码风格,帮助大家写出风格统一的简洁高效的代码。\n\n功能实践\n\nGo 虽然简单,但其功能特性却不单一。其丰富的语言特性,在使用时还是有很多不同的姿势。本书从功能特性出发,给出 Go 实践建议,帮助我们更好的使用 Go 写出更优质的代码。\n\n高性能编码\n\n高效的代码是我们每一个 coder 的共同追求。为书写效率更高的代码,本文将结合 Go 语言特性,从常用数据结构、内存管理和并发,三个方面给出相关建议。\n本文所述内容均为参考意见,并非标准。其中许多是 Go 的通用准则,其他扩展内容也参考了很多官方指南,包括但不限于。\n\nEffective Go\nGolang Wiki | Go Common Mistakes\nGolang Wiki | Go Code Review Comments\nThe Go Programming Language Specification\nThe Go Programming Frequently Asked Questions (FAQ)\n\n目标读者\n如果是 Go 的初学者,建议先略过本书,了解下 Go 官方的入门指南 A Tour of Go,这应该是入门必读最佳读物。\n如果是想全面了解 Go 语法知识和语言特性与,也建议先略过本书。Go 官方文档 The Go Programming Language Specification 和 Effective Go,以及第三方书籍 Go 语言圣经 也是不错的选择。\n如果是想深入了解 Go 语言实现原理,还是建议先略过本书。虽然本书略有涉及,但不够全面。Go 源码应该是你的首选,再结合精彩的第三方分析,如 Go 语言设计与实现,应该会大有收获。\n那么到底是谁适合阅读本书呢?如果你是一位有 Go 开发经验的 Gopher,想更好地管理 Go 代码,想写出更加高效易读的 Go 代码,想让自己拥有一个更好的编码风格, 想离 Go 最佳实践更近一步,建议看看本书。\n互动勘误\n如果你对文章内容有任何疑问和建议,欢迎在应相应章节下留言探讨。\n本书为开源书籍,希望得到大家的协同共建,不断迭代丰富。如果有你的建议和 PR,它将会变得更好。 \npowered by Gitbook该文章修订时间:\n2022-05-21 22:12:52\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第一篇:项目布局/项目布局.html":{"url":"第一篇:项目布局/项目布局.html","title":"项目布局","keywords":"","body":"1.前言2.项目布局2.1 整体风格2.2 Go 代码目录/cmd/internal/pkg/vendor2.3 服务应用程序目录/api2.4 Web 应用程序目录/web2.5 通用应用目录/configs/init/scripts/build/deployments/test/README.md2.6 其他目录/docs/tools/examples/third_party/githooks/assets/website2.7 不应该拥有的目录/src3.小结参考文献1.前言\n不管是什么语言,开发什么项目,一个稍大的项目,必然要面临如何管理项目结构布局的问题,因为一个简洁清晰的布局是项目可读的关键。\n有些语言自身提供了目录结构规范,但对于较为年轻的 Golang,目前官方团队并未提供权威规范。不过不用担心,我们依然有一个规范可以参考,那就是业界推崇的 Standard Go Project Layout。\n2.项目布局\n2.1 整体风格\n你的项目结构布局看起来应该像下面这个样子。\n# Go 代码目录\n|--cmd 可执行文件目录\n|--internal 私有库代码(仅本项目使用)\n|--pkg 公有库代码(外部项目可以使用)\n|--vendor 外部依赖库\n\n# 服务应用程序目录\n|--api 服务对外接口\n\n# Web 应用程序目录\n|--web Web 应用程序的组件\n\n# 通用应用目录\n|--configs 配置信息\n|--init 初始化信息\n|--scripts 执行各种构建、安装、分析等操作的脚本\n|--build 打包和持续集成\n |-- package 构建依赖包\n |-- ci 持续集成配置与脚本\n|--deployments 部署相关\n|--test 测试相关\n|--README.md 项目说明\n\n# 其他目录\n|--docs 项目文档\n|--tools 项目工具\n|--examples 应用程序和公共库的示例\n|--third_party 外部辅助工具\n|--githooks Git 钩子\n|--assets 项目资源文件\n|--website 项目网站数据\n\n# 不应该拥有的目录\n|--src 源码目录\n\n2.2 Go 代码目录\n/cmd\n可执行文件目录。\n通常只包含一个简单的 main 函数,调用 /internal 和 /pkg 中的代码,作为项目的主应用目录。目录也可以包含多个可执行文件,子目录名称一般与可执行文件相对应(如:/cmd/myapp )。\n不要在该目录下放太多的代码,如果代码可以被其他项目导入使用,请放到 /pkg 目录下, 如果代码不可复用或者你不希望其他项目使用,请放到 /internal 目录下。\n/internal\n私有库代码(仅本项目使用)。\n这里放不希望被其他应用程序或者库导入的代码。注意:从 Go1.4 起,从编译器层面限制该目录不可被导出,而且不只是项目根目录下的 internal,所有名为 internal 的子目录都不能被导出。\n你还可以在 internal 目录内部增加一些代码结构来区分共享和非共享的。虽然它并不是必须的(尤其是小的项目),但是最好能从视觉上区分包的用途。 你实际的代码可以放在 /internal/app/myapp 中,而应用的共享代码可以放在 /internal/pkg/ 目录下。\n/pkg\n公有库代码(外部项目可以使用)。\n这里放希望被其他应用程序或者库导入的代码,所以在这里放东西之前要三思。\n含有 /pkg 目录的项目结构是一种常见的布局模式,但并不是所有人都接受它,一些 Go 社区的人并不推荐它。\n/vendor\n外部依赖库。\n如果手动管理依赖包可以将依赖包放到该目录,当然推荐使用依赖包管理工具 Go Modules 进行自动化管理。\n注意,1.11 开始,官方推荐使用新的依赖管理系统 Go Modules。从 1.13 以后,Go 还启用了模块代理功能(默认使用 https://proxy.golang.org 作为他们的模块代理服务器)。使用 Go Modules,我们并不需要 vendor 目录。\n2.3 服务应用程序目录\n/api\n服务对外接口。\n这里是服务对外接口的实现,定义接口时,我们应该遵循 OpenAPI Specification。\n2.4 Web 应用程序目录\n/web\n存放 Web 应用程序特定组件,如静态 Web 资源、服务器端模板和 SPA(Single Page Application)。\n2.5 通用应用目录\n/configs\n配置信息。\n如不同环境(测试、正式)的服务配置信息。\n/init\n初始化信息。\n系统初始化(systemd, upstart, sysv)和进程管理(runit, supervisord)配置。\n/scripts\n执行各种构建、安装、分析等操作的脚本。\n这些脚本帮助根目录下 Makefile(如果有的话)变得小而简单,例如 github/hashicorp/terraform/Makefile。\n/build\n打包和持续集成。\n将你的云( AMI )、容器( Docker )、操作系统( deb、rpm、pkg )包配置和脚本放在 /build/package 目录下。\n将你的 CI (travis、circle、drone)配置和脚本放在 /build/ci 目录下。\n/deployments\n部署相关。\n如 IaaS、PaaS、系统和容器编排部署配置和模板(docker-compose、kubernetes/helm、mesos、terraform、bosh)。注意,在一些存储库中(特别是使用 kubernetes 部署的应用程序),这个目录被称为 /deploy。\n/test\n测试相关。\n如放置测试工具和测试依赖数据。对于较大的项目,有一个数据子目录是有意义的。例如,你可以使用 /test/data 或 /test/testdata。请注意,如果你需要忽略目录中的内容,Go 还会忽略以“.”或“_”开头的目录或文件,因此在如何命名测试数据目录方面有更大的灵活性。\n/README.md\n项目说明。\nMarkdown 格式的说明文档,是用户了解一个项目最直观的入口。如果有需要,添加不同语言的 README 将更加人性化,如 简体中文 README_zh-CN.md。\n2.6 其他目录\n/docs\n项目文档。\n关于项目的设计文档,用户的使用文档等(除了 godoc 生成的文档之外)均可以放在该目录。\n/tools\n项目工具。\n项目配套工具,实现这些工具可以使用从 /pkg 和 /internal 导入代码。\n/examples\n应用程序和公共库的示例。\n丰富的示例将帮助用户更加便捷快速的了解上手一个项目,再加上 README,相得益彰。\n/third_party\n外部辅助工具。\n项目依赖的第三方工具,比如 Swagger UI。\n/githooks\nGit 钩子。\n使用 Git 钩子,可以帮忙我们在代码提交时完成一些检测,比如分支名称和 commit 信息是否符合规范。\n/assets\n项目资源文件。\n项目用到的相关资源文件,比如项目 Logo,README 中引用的图片等。\n/website\n项目网站数据。\n如果你不使用 Github 页面,则在这里放置项目网站数据。\n2.7 不应该拥有的目录\n/src\n源码目录。\n有些 Go 项目确实有一个 src 目,但这通常发生在开发人员有 Java 背景。不同类型的代码应该有自己的目录,而不是全部放到 src 下面,就像不应该拥有 comm 和 util 这样的目录,因为这些名称含义太泛了,违背了单一职责原则。\n3.小结\n这是 Go 应用程序项目的基本布局,是社区 Gopher 们努力的结果。此项目布局是通用的,建议并非强制,当然我们最好遵守,因为这能让我的项目布局看起来更加规范,易于交流和维护。\n如果发现此项目布局规范并不适用自己的项目,可在其基础上适当做出改变,不要泥古拘方。\n\n参考文献\nStandard Go Project Layout\nWikipedia List of ISO 639-1 codes\nOfficial ISO 639 list \npowered by Gitbook该文章修订时间:\n2022-05-01 19:54:14\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/1.格式化.html":{"url":"第二篇:代码风格/1.格式化.html","title":"1.格式化","keywords":"","body":"主体风格占位符主体风格\n\n代码必须用 gofmt 工具格式化。\n\ngofmt 使用制表符进行缩进,使用空白符进行对齐。\nIDE 在保存代码时可设置自动执行 gofmt,如 GoLand 的 Settings > Tools > File Watchers 中可勾选 go fmt 并指定作用范围。\n\n占位符\n\n通过%v打印错误信息时建议加冒号。\n\n// Bad\nlogger.Errorf(\"num %d, err %s\", num, err.Error())\n\n// Good\nlogger.Errorf(\"num:%d, err:%v\", num, err.Error())\n\n\n字符串占位符,如果输入数据来自外部,建议使用%q进行安全转义。\n格式化字符串中多个占位符之间要有空格。\n\nfmt.Printf(\"%v这里要空格%v\", a, b)\n\npowered by Gitbook该文章修订时间:\n2022-05-21 21:18:14\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/2.代码行.html":{"url":"第二篇:代码风格/2.代码行.html","title":"2.代码行","keywords":"","body":"行长度换行方式不必要的空行括号和空格行数行长度\n一行代码不要超过120列,超过的情况,使用合理的方法换行。\n例外场景:\n\nimport 模块语句\nstruct tag\n工具生成的代码\n\n换行方式\n采用惰性换行,换行前应尽可能占满当前行不留空位。\n// Bad\nfmt.Printf(\"%v %v %v %v %v %v %v %v %v %v %v %v %v %v\\n\",\n0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,89, 144, 233)\n\n// Good\nfmt.Printf(\"%v %v %v %v %v %v %v %v %v %v %v %v %v %v\\n\", 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,\n89, 144, 233)\n\n不必要的空行\n\n函数体第一行不要换行。\n\n// Bad\nfunc foo() {\n\n // func body\n}\n\n// Good\nfunc foo() {\n // func body\n}\n\n\n函数调用和对调用结果的处理,是紧密相连的,不能加空行。\n\n// Bad\nres, err := foo()\n\nif err != nil || res.Ret != 0 {\n return\n}\n\n// Good\nres, err := foo()\nif err != nil || res.Ret != 0 {\n return\n}\n\n\nreturn 语句前不要换行。\n\n// Bad\nfunc foo() {\n // func body\n\n return\n}\n\n// Good\nfunc foo() {\n // func body\n return\n}\n\n括号和空格\n\n遵循 gofmt 的逻辑。\n运算符和操作数之间要留空格。\n作为输入参数或者数组下标时,运算符和操作数之间不需要空格,紧凑展示。\n\nvar i int = 1 + 2 // 运算符和操作数之间要留空格\nv := []float64{1.0, 2.0, 3.0}[i-i] // i-i 作为下标不留空格\nfmt.Printf(\"%f\\n\", v+1) // v+1 作为入参不要留空格\n\n\n不要添加没必要的括号。\n\n// Bad\nif foo && (int(bar) > 0) {\n // ...\n}\n\n// Good\nif foo && int(bar) > 0 {\n // ...\n}\n\n行数\n\n函数长度不能超过 80 行。\n文件长度不能超过 800 行。 \n\npowered by Gitbook该文章修订时间:\n2022-05-21 21:18:32\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/3.字符串.html":{"url":"第二篇:代码风格/3.字符串.html","title":"3.字符串","keywords":"","body":"\n字符串字面量\n\nGo 支持使用原始字符串字面值,可以使用反引号来表示原生字符串。在需要转义的场景下,我们应该尽量使用使用反引号表示字符串,避免转义。\n// Bad\nwantError := \"unknown name:\\\"test\\\"\"\n\n// Good\nwantError := `unknown error:\"test\"`\n\n\n不要使用字符串表示 list 和 map 结构。\n\n// Bad\nvar Receivers = \"tom,jerry,spike\"\n\n// Good\nvar Receivers = []string{\"tom\",\"jerry\",\"spike\"}\n\n\n字符串拼接\n\n行内字符串拼接时,出于性能的考虑,待拼接字符串数量较少(fmt.Sprintf()。\n// Bad\nstr := fmt.Sprintf(\"rsp code is %v\", code)\nstr := \"rsp code is \" + code \" and msg is\" + msg\n\n// Good\nstr := \"rsp code is \" + code\nstr := fmt.Sprintf(\"rsp code is %v and msg is %v\", code, msg)\n\npowered by Gitbook该文章修订时间:\n2022-05-21 22:19:54\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/4.依赖管理.html":{"url":"第二篇:代码风格/4.依赖管理.html","title":"4.依赖管理","keywords":"","body":"依赖规范import 规范依赖规范\n\ngo1.11 以上必须使用 go modules 模式。go mod init git.code.oa.com/group/myrepo\n\n\n使用 go modules 作为依赖管理的项目不要提交 vendor 目录。\n使用 go modules 管理依赖的项目, go.sum文件必须提交,不要添加到.gitignore规则中。\n\nimport 规范\n\n使用 goimports 工具自动格式化引入的包名,import 规范原则上以 goimports 规则为准。\n\ngoimports 会自动添加依赖的包,并移除未引用的包。把依赖包按字母序升序排列,并对包进行分组管理。通过空行隔开,默认分为标准库包和非标准库包(第三方包和内部包)。\n\n导入的包按照先后顺序应该分为三组:\n标准包\n外部包\n内部包\n\n\n\n带域名的包名都属于外部包,如 github.com/xxx/xxx。内部包是指不能被外部 import 的包。\n// Bad\nimport (\n \"fmt\"\n \"os\"\n \"go.uber.org/atomic\"\n \"golang.org/x/sync/errgroup\"\n \"myproject/models\"\n \"myproject/controller\"\n)\n\n// Good\nimport (\n \"encoding/json\"\n \"strings\"\n\n \"go.uber.org/atomic\"\n \"golang.org/x/sync/errgroup\"\n\n \"myproject/models\"\n \"myproject/controller\"\n)\n\n\n不要使用相对路径导入内部包,应该使用完整的路径引入包。\n\n// Bad\nimport (\n \"../net\"\n)\n\n// Good\nimport (\n \"xxxx.com/proj/net\"\n)\n\n\n必要时给包起个别名\n\n包名和 git 路径名不一致时,或者多个相同包名冲突时,使用别名代替会有更好的可读性。\n// Bad\nimport (\n elastic \"github.com/olivere/elastic/v7\"\n)\n\n// Good\nimport (\n elastic \"github.com/olivere/elastic/v7\"\n)\n\n\n通用的功能包,应该放在 public 目录下,而不是具体业务目录下。\n\n// Bad\nimport \"github.com/xxxxxxxx/XXXServer/pkg/formatlog\"\n\n// Good\nimport \"github.com/xxxxxxxx/utils/formatlog\"\n\n\nimport . 只能用于测试文件,且必须是为了解决循环依赖,才能使用。\n\npackage foo_test\n\nimport (\n \"bar/testutil\" // also imports \"foo\"\n . \"foo\"\n)\n\n在这种情况下,测试文件不能在包 foo 中,因为它使用 bar/testutil,后者导入 foo。所以我们使用import .形式导入包 foo,让测试文件假装是包 foo 的一部分,尽管它不是。除了这一种情况,不要使用import .,因为它使程序难以阅读,比如使用 Baz 这样的标识符,不知道其是顶级标识符还是导入包中的顶级标识符。\n\n引入第三方包要慎重。\n\n如引入 Github 上的包要确认活跃度,不知名的包可能会被下架或出现不兼容的版本升级情况,必要情况下可 fork 一份。\n// 该包已经 404 了。\ngithub.com/astaxie/beego/orm\n\npowered by Gitbook该文章修订时间:\n2022-05-22 15:40:04\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/5.初始化.html":{"url":"第二篇:代码风格/5.初始化.html","title":"5.初始化","keywords":"","body":"初始化 struct初始化 map初始化 slice申明变量避免使用 init()初始化 struct\n\n使用字段名初始化结构体。\n\n// Bad\nk := User{\"John\", \"Doe\", true}\n\n// Good\nk := User{\n FirstName: \"John\",\n LastName: \"Doe\",\n Admin: true,\n}\n\n例外:如果有 3 个或更少的字段,则可以在测试表中省略字段名称。\ntests := []struct{\n op Operation\n want string\n}{\n {Add, \"add\"},\n {Subtract, \"subtract\"},\n}\n\n\n省略结构中的零值字段。\n\n// Bad\nuser := User{\n FirstName: \"John\",\n LastName: \"Doe\",\n MiddleName: \"\",\n Admin: false,\n}\n\n// Good\nuser := User{\n FirstName: \"John\",\n LastName: \"Doe\",\n}\n\n例外:在字段名提供有意义上下文的地方可以显示指定零值。如表驱动单元测试中的测试用例,即使字段为零值,限制指定零值,通过字段名可清晰地表达用例的含义。\ntests := []struct{\n give string\n want int\n}{\n {give: \"0\", want: 0},\n // ...\n}\n\n\n声明零值结构使用关键字 var。\n\n如果在声明中省略了结构的所有字段,请使用 var 声明结构,因为这样更加简洁,其各个字段值为字段类型对应的零值。\n// Bad\nuser := User{}\n\n// Good\nvar user User\n\n\n初始化结构指针变量使用字面量\n\n初始化结构指针变量时,请使用&T{}代替new(T),可以与结构体初始化在代码风格上保持一致。\n// Bad\nsval := T{Name: \"foo\"}\n\n// inconsistent\nsptr := new(T)\nsptr.Name = \"bar\"\n\n// Good\nsval := T{Name: \"foo\"}\n\nsptr := &T{Name: \"bar\"}\n\n初始化 map\n初始化 map 优先使用 make() 函数而不是字面量,因为这样看起来更容易和申明区分开来。\n// Bad\nvar (\n // m1 读写安全\n // m2 在写入时会 panic\n m1 = map[T1]T2{}\n m2 map[T1]T2\n)\n// 声明和初始化在视觉上很相似\n\n// Good\nvar (\n // m1 读写安全\n // m2 在写入时会 panic\n m1 = make(map[T1]T2)\n m2 map[T1]T2\n)\n// 声明和初始化在视觉上是不同的\n\n尽可能地在初始化时提供 map 容量大小。\n例外:如果 map 包含固定的元素列表,则使用字面量初始化 map,这样可以在初始化时指定元素。\n// Bad\nm := make(map[T1]T2, 3)\nm[k1] = v1\nm[k2] = v2\nm[k3] = v3\n\n// Good\nm := map[T1]T2{\n k1: v1,\n k2: v2,\n k3: v3,\n}\n\n初始化 slice\n\n非零值 slice 使用make()初始化,并指定容量。\n\n// Bad\nnums := []int{}\n\n// Good\nnums := make([]int, 0, CAP)\n\n\n空切片使用 var 声明\n\n不管是全局切片还是局部切片,使用 var 申明 nil 切片,代码会更加简洁清晰。\n// Bad\nfunc foo() {\n // 长度为 0 的非 nil 切片\n nums := []int{}\n}\n\n// Good\nfunc foo() {\n // nil 切片\n var nums []int\n}\n\n\nnil 是一个有效的 slice。\n\nnil 是一个有效的长度为 0 的 slice,这意味着,\n(1)您不应明确返回长度为零的切片。应该返回nil 来代替。\n// Bad\nif x == \"\" {\n return []int{}\n}\n\n// Good\nif x == \"\" {\n return nil\n}\n\n(2)要检查切片是否为空,请始终使用 len(s) == 0 而非 nil。\n// Bad\nfunc isEmpty(s []string) bool {\n return s == nil\n}\n\n// Good\nfunc isEmpty(s []string) bool {\n return len(s) == 0\n}\n\n(3)零值切片(用var声明的切片)可立即使用,无需调用 make() 创建。\n// Bad\nnums := []int{}\n// or, nums := make([]int)\n\nif add1 {\n nums = append(nums, 1)\n}\n\nif add2 {\n nums = append(nums, 2)\n}\n\n// Good\nvar nums []int\n\nif add1 {\n nums = append(nums, 1)\n}\nif add2 {\n nums = append(nums, 2)\n}\n\n记住,虽然 nil 切片是有效的切片,但它不等于长度为 0 的切片(一个为 nil,另一个不是),并且在不同的情况下(例如序列化),这两个切片的处理方式可能不同。\n申明变量\n\n就近申明。\n\n变量申明的位置尽量靠近使用的地方。\n// Bad\nfunc foo(m map[string]interface{}) string {\n info, _ := m[\"key\"].(Info)\n ...\n return handle(info)\n}\n\n// Good\nfunc foo(m map[string]interface{}) string {\n ...\n info, _ := m[\"key\"].(Info)\n return handle(info)\n}\n\n\n相似的声明放在一组。\n\n对于变量、常量的声明,相似的声明应该放在一组。类型的定义同样适用。\n// Bad\nconst a = 1\nconst b = 2\n\nvar a = 1\nvar b = 2\n\ntype Area float64\ntype Volume float64\n\n// Good\nconst (\n a = 1\n b = 2\n)\n\nvar (\n a = 1\n b = 2\n)\n\ntype (\n Area float64\n Volume float64\n)\n\n仅将相关的声明放在一组。不要将不相关的声明放在一组。\n// Bad\ntype Operation int\n\nconst (\n Add Operation = iota + 1\n Subtract\n Multiply\n EnvVar = \"MY_ENV\"\n)\n\n// Good\ntype Operation int\n\nconst (\n Add Operation = iota + 1\n Subtract\n Multiply\n)\n\nconst EnvVar = \"MY_ENV\"\n\n另外,分组使用的位置没有限制,我们也可以在函数内部使用它们。\n// Bad\nfunc f() string {\n red := color.New(0xff0000)\n green := color.New(0x00ff00)\n blue := color.New(0x0000ff)\n ...\n}\n\n// Good\nfunc f() string {\n var (\n red = color.New(0xff0000)\n green = color.New(0x00ff00)\n blue = color.New(0x0000ff)\n )\n ...\n}\n\n\n全局变量申明使用 var 关键字并省略类型。\n\n全局变量使用 var 关键字申明,一般情况下其类型与表达式的类型一致,这种情况下可省略其类型。\n// Bad\nvar s string = F()\n\nfunc F() string { return \"A\" }\n\n// Good\n// 由于 F 已经明确了返回一个字符串类型,因此我们没有必要显式指定类型。\nvar s = F()\n\nfunc F() string { return \"A\" }\n\n如果表达式的类型与所需的类型不完全匹配,请指定类型。\ntype myError struct{}\n\nfunc (myError) Error() string { return \"error\" }\n\nfunc F() myError { return myError{} }\n\n// F 返回一个 myError 类型的实例,但是我们要 error 类型。\nvar _e error = F()\n\n\n局部变量使用短变量声明形式(:=)。\n\n// Bad\nfunc foo() {\n var s = \"foo\"\n var i int64 // 虽然默认为 0,但不够直观\n ...\n}\n\n// Good\nfunc foo() {\n s := \"foo\"\n i := in64(0) // 显示指明 0,更加直观\n ...\n}\n\n例外,如果是相似的一组变量,请使用 var 声明到一组。\n// Bad\nfunc foo() {\n s1 := \"foo\"\n s2 := \"bar\"\n ...\n}\n\n// Good\nfunc foo() {\n var (\n s1 = \"foo\"\n s2 = \"bar\"\n )\n ...\n}\n\n\n如果全局变量仅在单个函数内使用,则应该定义为局部变量。\n\n避免使用 init()\n尽可能避免使用 init(),当 init() 不可避免时,init() 应该做到:\n(1)无论程序环境或调用如何,行为都必须是完全确定的;\n(2)避免依赖其他 init() 函数的顺序或副作用。虽然 init() 顺序是明确的,但代码可以更改, 因此 init() 函数之间的关系可能会使代码变得脆弱和容易出错;\n(3)避免访问或操作全局变量和环境状态,如机器信息、环境变量、工作目录、程序参数/输入等;\n(4)避免 I/O,包括文件系统、网络和系统调用。\n不能满足这些要求的代码可能要在 main() 函数中被调用(或程序生命周期中的其他地方),或作为 main() 函数本身的一部分。特别是打算给其他程序使用的库应该特别注意代码行为的完全确定性, 而不是执行“init magic”。\n// Bad\ntype Foo struct {\n // ...\n}\nvar _defaultFoo Foo\nfunc init() {\n _defaultFoo = Foo{\n // ...\n }\n}\n\n// Good\nvar _defaultFoo = Foo{\n // ...\n}\n// 或者为了更好的可测试性\nvar _defaultFoo = defaultFoo()\nfunc defaultFoo() Foo {\n return Foo{\n // ...\n }\n}\n\n// Bad\ntype Config struct {\n // ...\n}\nvar _config Config\nfunc init() {\n // Bad: 基于当前目录\n cwd, _ := os.Getwd()\n // Bad: I/O\n raw, _ := ioutil.ReadFile(\n path.Join(cwd, \"config\", \"config.yaml\"),\n )\n yaml.Unmarshal(raw, &_config)\n}\n\n// Good\ntype Config struct {\n // ...\n}\nfunc loadConfig() Config {\n cwd, err := os.Getwd()\n // handle err\n raw, err := ioutil.ReadFile(\n path.Join(cwd, \"config\", \"config.yaml\"),\n )\n // handle err\n var config Config\n yaml.Unmarshal(raw, &config)\n return config\n}\n\n凡事无绝对,某些情况下,init() 可能更可取或是必要的:\n(1)不能表示为单个赋值的复杂表达式;\n(2)可插入的钩子,如 database/sql、编码类型注册表等;\n(3)对 Google Cloud Functions 和其他形式的确定性预计算的优化。 \npowered by Gitbook该文章修订时间:\n2022-05-22 15:43:51\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/6.错误处理.html":{"url":"第二篇:代码风格/6.错误处理.html","title":"6.错误处理","keywords":"","body":"error 处理panic 处理recover 处理类型断言error 处理\n\n显示处理 error。\n\n如果 error 作为函数的值返回,必须对 error 进行处理,或使用空白标识符忽略。对于defer xx.Close()可以不用显式处理。\n\nerror 作为函数返回值且有多个返回值的时候,error 必须是最后一个参数。\n\n// Bad\nfunc do() (error, int) {\n}\n\n// Good\nfunc do() (int, error) {\n}\n\n\n采用独立的错误流进行处理。\n```go\n// Bad\nif err != nil {\n // handle error\n} else {\n // normal code\n}\n\n// Good\nif err != nil {\n // handle error\n return // or continue, etc.\n}\n// normal code\n- Fail Fast 原则。\n\n如果出现失败应该立即返回error,如果继续处理,则属于特殊情况需要添加注释。\n\n- 如果函数返回值需用于初始化其他变量,则采用下面的方式。\n\n```go\nx, err := f()\nif err != nil {\n // error handling\n return // or continue, etc.\n}\n// use x\n\n错误判断独立处理,不与其他变量组合判断。\n\n一个可能引发的问题就是 err 如果为 nil,但是满足其他逻辑进入到 if 块内,读取 err 值将引发 panic。\n// Bad\nx, y, err := f()\nif err != nil || y == nil {\n return err // 当y与err都为空时,函数的调用者会出现错误的调用逻辑\n}\n\n// Good\nx, y, err := f()\nif err != nil {\n return err\n}\nif y == nil {\n return fmt.Errorf(\"some error\")\n}\n\n\n生成带参数的 error 使用 fmt.Errorf。\n```go\n// Bad\nerrors.New(fmt.Sprintf(\"module xxx: %v\",err))\n\n// Good\nfmt.Errorf(\"module xxx: %v\", err)\n- 不要包装系统调用错误,并给出一些没意义的附加信息。\n\n```go\n// Bad\nerr := exe.Run()\nif err != nil {\n return fmt.Errorf(\"run error %s\", err.Error())\n}\n\n// Good\nreturn exe.Run()\npanic 处理\n\n不要随便 panic。\n\n在业务逻辑处理中禁止使用 panic。因为 panic 是级联失败(cascading failures)的主要根源。如果发生错误,该函数应该返回错误,让调用方决定如何处理它。\n// Bad\nfunc run(args []string) {\n if len(args) == 0 {\n panic(\"an argument is required\")\n }\n // ...\n}\n\nfunc main() {\n run(os.Args[1:])\n}\n\n// Good\nfunc run(args []string) error {\n if len(args) == 0 {\n return errors.New(\"an argument is required\")\n }\n // ...\n return nil\n}\n\nfunc main() {\n if err := run(os.Args[1:]); err != nil {\n fmt.Fprintln(os.Stderr, err)\n os.Exit(1)\n }\n}\n\npanic/recover 不是错误处理的合适策略,仅当发生不可恢复的异常(如 nil 引用)时,才可以 panic。\n在 main 包中程序初始化是一个例外,如程序启动时,文件无法打开或数据库无法连接导致程序无法正常运行可使用 panic。\n对于其它的包,可导出的接口也不能有 panic。\n\n在 main 包中使用 log.Fatal 或 log.Fatalf 结束程序而不是 panic。\n\n如果 main 中需要使用 panic,建议使用 log.Fatal 或 log.Fatalf 来取代 panic,因为这样可以记录错误的同时结束程序,方便排查问题。\n\npanic 只能在当前 Goroutine 被捕获。\n\npanic 捕获最晚要在当前 Goroutine 最顶层将其捕获,在其他 Goroutine 中无法捕获当前 Goroutine 的 panic。每个自行启动的 Goroutine,必须在入口处捕获 panic,并打印详细堆栈信息或进行其它处理。\n下面是一个反面示例,其他 Goroutine 中无法捕获当前 Goroutine 的 panic。\npackage main\n\nimport (\n \"fmt\"\n \"time\"\n)\n\nfunc main() {\n defer func() {\n if err := recover(); err != nil {\n fmt.Println(err)\n }\n }()\n go func() {\n fmt.Println(\"======begin work======\")\n panic(\"nil pointer exception\")\n }()\n time.Sleep(1 * time.Second)\n fmt.Println(\"======after work======\")\n}\n\n程序将意外终止并输出:\n======begin work======\npanic: nil pointer exception\n\ngoroutine 6 [running]:\nmain.main.func2()\n /Users/dablelv/work/code/test/main.go:16 +0x65\ncreated by main.main\n /Users/dablelv/work/code/test/main.go:14 +0x48\nrecover 处理\n\nrecover 用于捕获 runtime 的异常,禁止滥用 recover。\nrecover 只有在 defer 中调用才会生效。\n\n必须在 defer 中使用,一般用来捕获程序运行期间发生异常抛出的 panic 或程序主动抛出的 panic。\npackage main\n\nimport (\n \"log\"\n)\n\nfunc main() {\n defer func() {\n if err := recover(); err != nil {\n // do something or record log\n log.Println(\"exec panic error: \", err)\n // log.Println(debug.Stack())\n }\n }()\n\n getOne()\n\n panic(44) //手动抛出 panic\n}\n\n// getOne 模拟 slice 越界运行时抛出的 panic。\nfunc getOne() {\n defer func() {\n if err := recover(); err != nil {\n // do something or record log\n log.Println(\"exec panic error: \", err)\n // log.Println(debug.Stack())\n }\n }()\n\n var arr = []string{\"a\", \"b\", \"c\"}\n log.Println(\"hello,\", arr[4])\n}\n\n运行结果:\n2022/03/27 10:48:42 exec panic error: runtime error: index out of range [4] with length 3\n2022/03/27 10:48:42 exec panic error: 44\n类型断言\n\n类型断言使用 comma ok 式\n\n类型断言的单个返回值形式如果断言失败将产生 panic。因此,请始终使用 comma ok 式。如果不关心是否成功,ok 可显示使用空标识符(下划线)忽略。\n// Bad\nt := i.(string)\n\n// Good\nt, ok := i.(string)\nif !ok {\n // 优雅地处理错误。\n}\n\n// 如果不关心是否成功,可显示忽略 ok。\nt, _ := i.(string)\n\npowered by Gitbook该文章修订时间:\n2022-05-22 15:47:37\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/7.注释.html":{"url":"第二篇:代码风格/7.注释.html","title":"7.注释","keywords":"","body":"通用包注释函数注释结构体注释变量和常量注释类型注释接口注释在编码阶段同步写好类型、变量、函数、包注释,注释可以通过godoc导出生成文档。\n程序中每一个被导出的(大写的)名字,都应该有一个文档注释。\n所有注释掉的代码在提交 Code Review 前都应该被删除,除非添加注释讲解为什么不删除, 并且标明后续处理建议(如删除计划)。\n通用\n\n不要用注释删除代码。\n// 后面要有空格。\n中英文之间应该有空格。\n特殊实现需要注释。\n注释结束添加点或句号,参考标准库源码注释。\n\n包注释\n\n每个包都应该有一个包注释。\n包如果有多个 go 文件,只需要出现在一个 go 文件中(一般是和包同名的文件)即可。\n格式为// Package 包名 包信息描述。\n\n// Package math provides basic constants and mathematical functions.\npackage math\n\n// 或者\n\n/*\nPackage template implements data-driven templates for generating textual\noutput such as HTML.\n....\n*/\npackage template\n\n函数注释\n\n导出的函数和方法(结构体或接口下的函数称为方法)都必须有注释。\n\n注释描述函数或方法功能、调用方等信息。格式为:\"// 函数名 函数信息描述\"。\n注意,如果方法的接收器为不可导出类型,可以不注释,但需要质疑该方法可导出的必要性。\n// NewtAttrModel 是属性数据层操作类的工厂方法\nfunc NewAttrModel(ctx *common.Context) *AttrModel {\n // TODO\n}\n\n\n避免参数语义不明确。\n\n函数调用中意义不明确的实参可能会损害代码可读性。当参数名称的含义不明显时,请为参数添加 C 样式注释 (/* ... */)\n// Bad\n// func printInfo(name string, isLocal, done bool)\nprintInfo(\"foo\", true, true)\n\n// Good \n// func printInfo(name string, isLocal, done bool)\nprintInfo(\"foo\", true /* isLocal */, true /* done */)\n\n对于上面的示例代码,还有一种更好的处理方式是将上面的 bool 类型换成自定义类型。将来,该参数可以支持不仅仅局限于两个状态(true/false)。\ntype Region int\n\nconst (\n UnknownRegion Region = iota\n Local\n)\n\ntype Status int\n\nconst (\n StatusReady Status= iota + 1\n StatusDone\n // Maybe we will have a StatusInProgress in the future.\n)\n\nfunc printInfo(name string, region Region, status Status)\n\n\n非导出的函数,如果比较简单,不需要注释。\n解析函数应该注明解析字符串的范例,并明确不能处理的异常情况。\n\n结构体注释\n\n每个需要导出的自定义结构体或者接口都必须有注释说明。\n\n注释对结构进行简要介绍,放在结构体定义的前一行。格式为:\"// 结构体名 结构体信息描述\"。\n\n必要情况下字段给出注释。\n\n结构体内的可导出成员变量名,如果是个生僻词或意义不明确的词,必须要单独给出注释,放在成员变量的前一行或同一行的末尾。\n// User 用户结构定义了用户基础信息\ntype User struct {\n Name string\n Email string\n Demographic string // 族群\n}\n\n变量和常量注释\n\n每个需要导出的变量和常量都必须有注释说明。\n\n注释对变量和常量进行简要介绍,放在常量或变量定义的前一行。独行注释格式为:\"// 变量名 描述\",斜线后面紧跟一个空格。\n// FlagConfigFile 配置文件的命令行参数名。\nconst FlagConfigFile = \"--config\"\n\n// FullName 返回指定用户名的完整名称。\nvar FullName = func(username string) string {\n return fmt.Sprintf(\"fake-%s\", username)\n}\n\n\n大块变量或常量定义时的注释方式。\n\n块注释即在代码块前给出一个总的说明,然后每行变量或常量的末尾给出详细注释,这样看起来更加简洁。\n// 命令行参数。\nconst (\n FlagConfigFile1 = \"--config\" // 配置文件的命令行参数名 1。\n FlagConfigFile2 = \"--config\" // 配置文件的命令行参数名 2。\n FlagConfigFile3 = \"--config\" // 配置文件的命令行参数名 3。\n FlagConfigFile4 = \"--config\" // 配置文件的命令行参数名 4。\n)\n\n\n命名清晰的地方,不要添加无意义的注释。类型注释\n\n每个需要导出的类型定义(type definition)和类型别名(type aliases)都必须有注释说明。\n该注释对类型进行简要介绍,放在定义的前一行。\n格式为:\"// 类型名 描述\"。\n\n// StorageClass 存储类型\ntype StorageClass string\n\n// FakeTime 标准库时间的类型别名\ntype FakeTime = time.Time\n\n接口注释\n\n导出与非导出接口均需要有注释。\n需要描述谁,在什么场景下,如何使用接口。 \n\npowered by Gitbook该文章修订时间:\n2022-05-22 15:50:17\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/8.命名.html":{"url":"第二篇:代码风格/8.命名.html","title":"8.命名","keywords":"","body":"通用规则项目命名包命名文件命名函数命名结构体命名接口命名量命名通用常量命名方法接收器命名错误命名避免使用内置名称命名是代码规范中很重要的一部分,统一的命名规范有利于提高代码的可读性,好的命名仅仅通过命名就可以获取到足够多的信息。\n通用规则\n\n不要用宽泛、无意义的名字,如:\n\nutil\nhelper\ninfo\ncommon\n\n\n缩略语要么全小写,要么全大写。\n\n\n// Bad\nMd5\nUid\n\n// Good\nMD5\nmd5\nUID\nuid\n\n\n非缩略语则应该使用驼峰命名。\n不要使用2/4来表达英文 to/for。\n如无必要,不要起和包相同的名字。\n\n项目命名\n\n小写,如果有多个单词使用连字符分隔。\n\n// Bad\nGoEcharts\ngoecharts\ngoEcharts\n\n// Good\ngo-echarts\n\n包命名\n\n保持 package 的名字和目录一致。\n尽量采取有意义、简短的包名,尽量不要和标准库冲突。\n包名应该为小写单词,不要使用下划线或者混合大小写,使用多级目录来划分层级。\n简单明了的包命名,如:time、list、http。\n不用复数。如 net/url 而不是net/urls。\n包名谨慎使用缩写。当缩写是程序员广泛熟知的词时,可以使用缩写。例如:\nstrconv (string conversion)\nsyscall (system call)\nfmt (formatted I/O)\n\n\n不要使用大而全的无意义包名。\n\n如 util、common、misc、global。package 名字应该追求清晰且越来越收敛,符合‘单一职责’原则,而不是像common一样,什么都能往里面放,越来越膨胀,让依赖关系变得复杂,不利于阅读、复用、重构。注意,xxx/utils/encryption这样的包名是允许的。\n\n只有一个源文件的包,包名应该和文件名保持一致。\n不要轻易使用别名。\n\n更多可参考 Package names - The Go Blog 和 [Style guideline for Go packages]\n(https://rakyll.org/style-packages/)。\n文件命名\n\n采用有意义、简短的文件名。\n文件名应该采用小写,并且使用下划线分割各个单词。\n\n函数命名\n\n函数名必须遵循驼峰式,首字母根据访问控制决定使用大写或小写。\n代码生成工具自动生成的代码可排除此规则(如协议生成文件 xxx.pb.go,gotests 工具自动生成文件 xxx_test.go 里面的下划线)。\n函数应该以动词开头。\n\n// Bad\nfunc panicLinesParsing(){}\nfunc (f VerifyFlow) DataETL(ctx context.Context, datas []Data){}\n\n// Good\nfunc parsePanicLines(){}\nfunc (f VerifyFlow) ETLData(ctx context.Context, datas []Data){}\n\n结构体命名\n\n采用驼峰命名方式,首字母根据访问控制采用大写或者小写。\n结构体名应该是名词或名词短语,如 Customer、WikiPage、Account、AddressParser,它不应是动词。\n避免使用 Data、Info 这类意义太宽泛的结构体名。\n结构体的定义和初始化格式采用多行。\n\n// User 多行定义。\ntype User struct {\n Name string\n Email string\n}\n\n// 多行初始化。\nu := User{\n UserName: \"john\",\n Email: \"john@example.com\",\n}\n\n接口命名\n\n命名规则基本保持和结构体命名规则一致。\n单个函数的接口名以 er 作为后缀,如 Reader,Writer。\n\n// Reader 字节数组读取接口。\ntype Reader interface {\n // Read 读取整个给定的字节数据并返回读取的长度\n Read(p []byte) (n int, err error)\n}\n\n\n两个函数的接口名综合两个函数名。\n三个以上函数的接口名,类似于结构体名。\n\n// Car 小汽车结构申明。\ntype Car interface {\n // Start ...\n Start([]byte)\n // Stop ...\n Stop() error\n // Recover ...\n Recover()\n}\n\n量命名\n通用\n\n量名不应该以类型作为前缀/后缀。\n\n// map\nfilterHandlerMap -> opToHandler\n\n// slice\nuidSlice -> uids\n\n// array\nuidArray -> uids \n\n// 二维切片或数组。\n// 比如多个班级下的学生ID。\nuidSliceSlice -> classesUIDs\n\n\n量名应该是名词,进行时和过去式可以做形容词,成为量名的一部分。\n特有名词时,需遵循以下规则:\n如果变量为私有,且特有名词为首个单词,则使用小写,如 apiClient;\n其他情况都应该使用该名词原有的写法,如 APIClient、repoID、UserID;\n错误示例:UrlArray,应该写成 urlArray 或者 URLArray;\n详细的专有名词列表可参考这里。\n\n\n尽量不要用拼音命名。\n量名遵循驼峰式,根据是否导出决定首字母大小写。\n\n// 导出全局变量。\nvar AppVersion = \"1.0.0\"\n// 未导出全局变量。\nvar appVersion = \"1.0.0\"\n\n// 导出全局常量。\nconst AppVersion = \"1.0.0\"\n// 未导出全局常量。\nconst appVersion = \"1.0.0\"\n\n\n若量类型为 bool 类型,则名称应以 Has,Is,Can 或 Allow 等单词开头。\n私有量和局部量规范一致,均以小写字母开头。\n作用域较小的名字(局部变量/函数参数),尽量使用简短的名字。\n\n如 c 比 lineCount 要好,i 比 sliceIndex 要好。\n// Bad\nlineCount := getlineCount()\n for sliceIndex := range msgs {\n}\n\n// Good\nc := getlineCount()\n for i := range msgs {\n}\n\n\n作用域较大的名字(全局变量),不要使用缩写,要有明确的意义。\n\n如 lineCount 要比 c 好,sliceIndex 要比 i 好。\n// Bad\nvar c, i int\n\n// Good\nvar lineCount, sliceIndex int\n\n\n全局量中不要包含格式化字符,否则必然违反就近原则。\n\n// Bad\nvar (\n tGitHost = \"https://git.code.oa.com\"\n mrCommitsUri = \"/api/v3/projects/%s/merge_request/%s/commits\"\n)\n\n// Good\nfunc getMRCommitsUri() string {\n return fmt.Sprintf(\"/api/v3/projects/%s/merge_request/%s/commits\", \"foo\", \"bar\")\n}\n\n常量命名\n\n如果是枚举类型的常量,需要先创建相应类型。\n\n// Scheme 传输协议。\ntype Scheme string\n\n// 传输协议。\nconst (\n HTTP Scheme = \"http\" // HTTP 明文传输协议\n HTTPS Scheme = \"https\" // HTTPS 加密传输协议\n)\n\n方法接收器命名\n\n推荐以类名第一个英文首字母的小写作为接收器的命名。\n接收器的名称在函数超过 20 行的时候不要用单字符。\n命名不能采用 me,this,self 这类易混淆名称。\n\n错误命名\n对于存储为全局变量的错误值,根据是否导出,使用前缀 Err 或 err。\nvar (\n // 导出以下两个错误,以便此包的用户可以将它们与errors.Is 进行匹配。\n ErrBrokenLink = errors.New(\"link is broken\")\n ErrCouldNotOpen = errors.New(\"could not open\")\n\n // 这个错误没有被导出,因为我们不想让它成为我们公共 API 的一部分。\n errNotFound = errors.New(\"not found\")\n)\n\n对于自定义错误类型,请改用后缀 Error。\n// 这个错误被导出,以便这个包的用户可以将它与 errors.As 匹配。\ntype NotFoundError struct {\n File string\n}\n\nfunc (e *NotFoundError) Error() string {\n return fmt.Sprintf(\"file %q not found\", e.File)\n}\n\n// 这个错误没有被导出,因为我们不想让它成为公共 API 的一部分。\n// 但我们仍然可以在的包内将其和 errors.As 一起使用。\ntype resolveError struct {\n Path string\n}\n\nfunc (e *resolveError) Error() string {\n return fmt.Sprintf(\"resolve %q\", e.Path)\n}\n\n避免使用内置名称\nGo 语言规范 language specification 概述了几个内置的,不应在 Go 项目中使用的标识符 [predeclared identifiers]\n(https://golang.org/ref/spec#Predeclared_identifiers)。\nTypes:\n bool byte complex64 complex128 error float32 float64\n int int8 int16 int32 int64 rune string\n uint uint8 uint16 uint32 uint64 uintptr\n\nConstants:\n true false iota\n\nZero value:\n nil\n\nFunctions:\n append cap close complex copy delete imag len\n make new panic print println real recover\n在使用预先分配的标识符时编译器不会报告错误,但是诸如go vet之类的工具会正确地指出这些和其他情况下的隐式问题。\n// Bad\n// 作用域内隐式覆盖 error interface\nvar error string\n\nfunc handleErrorMessage(error string) {\n // 作用域隐藏内置 error\n}\n\ntype Foo struct {\n // 虽然这些使用内置标识符的自定义字段可以编译通过,但对 error 或 string 字符串的搜索存在二义性\n error error\n string string\n}\n\nfunc (f Foo) Error() error {\n // error 和 f.error 在视觉上是相似的\n return f.error\n}\n\nfunc (f Foo) String() string {\n // string and f.string 在视觉上是相似的\n return f.string\n}\n\n// Good\nvar errorMessage string\n\nfunc handleErrorMessage(msg string) {\n}\n\ntype Foo struct {\n // error 和 string 现在是明确的\n err error\n str string\n}\n\nfunc (f Foo) Error() error {\n return f.err\n}\n\nfunc (f Foo) String() string {\n return f.str\n}\n\npowered by Gitbook该文章修订时间:\n2022-05-22 15:54:25\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/9.流程控制.html":{"url":"第二篇:代码风格/9.流程控制.html","title":"9.流程控制","keywords":"","body":"ifforrangeswitchreturngoto程序退出方式if\n\n最小化变量作用域。\n\nif 接受初始化语句,尽可能缩小变量作用域。\n// Bad\nerr := file.Chmod(0664)\nif err != nil {\n return err\n}\n\n// Good\nif err := file.Chmod(0664); err != nil {\n return err\n}\n\n如果需要在 if 之外使用函数调用的结果,则不应尝试缩小范围。\n// Bad\nif data, err := ioutil.ReadFile(name); err == nil {\n err = cfg.Decode(data)\n if err != nil {\n return err\n }\n\n fmt.Println(cfg)\n return nil\n} else {\n return err\n}\n\n// Good\ndata, err := ioutil.ReadFile(name)\nif err != nil {\n return err\n}\n\nif err := cfg.Decode(data); err != nil {\n return err\n}\n\nfmt.Println(cfg)\nreturn nil\n\n\nif 对两个值进行判断时,被比较的值放在左边。\n\n// Bad\nif nil != err {\n // error handling\n}\nif 0 == errorCode {\n // do something\n}\n\n// Good\nif err != nil {\n // error handling\n} \nif errorCode == 0 {\n // do something\n}\n\n\nif 对于 bool 类型的变量,应直接进行真假判断。\n```go\nvar allowUserLogin bool\n// Bad\nif allowUserLogin == true {\n // do something\n}\nif allowUserLogin == false {\n // do something\n}\n\n// Good\nif allowUserLogin {\n // do something\n}\nif !allowUserLogin {\n // do something\n}\n- 不必要的 else。\n\n如果在 if 的两个分支中都设置变量,则可以将其替换为单个 if。\n```go\n// Bad\nvar a int\nif b {\n a = 100\n} else {\n a = 10\n}\n\n// Good\na := 10\nif b {\n a = 100\n}\n又如 if else 通常可以简写为 if return。\n// Bad\nfunc Foo(bar int) {\n if bar == 1 {\n // ...\n } else {\n // ...\n }\n}\n\n// Good\nfunc Foo() {\n if bar == 1 {\n // ...\n return\n }\n // ...\n}\n\n\n多个相似 if 用 switch 替换。\n```go\n// Bad\nfunc foo(key string) {\n if key == pathKey { ...\n }\n if key == urlKey { ...\n }\n}\n\n// Good\nfunc foo(key string) {\n switch key {\n case pathKey:\n ...\n case urlKey:\n ...\n }\n}\n- 使用 == \"\" 判断字符串是否为空,这样更加直观。\n```go\n// Bad\nif len(str) == 0 {\n ...\n}\n\n// Good\nif str == \"\" {\n ...\n}\n\n把简单的逻辑判断放前面,复杂的逻辑判断放后面。\n不要使用双重否定。\n判断条件较为复杂时,考虑封装成函数。\n使用了 else if 则需要以 else 结束。\n\n// Bad\nif foo == \"a\" {\n ...\n} else if foo == \"b\" {\n ...\n}\n\n// Good\nif foo == \"a\" {\n ...\n} else if foo == \"b\" {\n ...\n} else {\n // 需要有一个缺省处理逻辑\n}\n\nfor\n\n最小化变量作用域。\n\nfor 接受初始化语句,尽可能缩小变量作用域。\n// Bad\nsum := 0\ni := 0\nfor ; i \n\n循环变量的地址不要存储。\n\n循环变量的地址指向的是同一个变量,我们可以通过赋值给一个同名的变量,通过变量逃逸,来达到取不同地址的目的。\n// Bad\nfunc main() {\n ints := []int{1, 2, 3, 4, 5}\n for _, v := range ints {\n fmt.Println(&v) // 打印的是相同的地址\n }\n}\n\n// Good\nfunc main() {\n ints := []int{1, 2, 3, 4, 5}\n for _, v := range ints {\n v := v\n fmt.Println(&v) // 打印的是不同的地址\n }\n}\n\nrange\n\n如果只需要第一项(key),就丢弃第二项(value)。\n\nfor key := range m {\n if key.expired() {\n delete(m, key)\n }\n}\n\n\n如果只需要第二项,则把第一项置为空标识符(下划线)。\n\nsum := 0\nfor _, v := range array {\n sum += v\n}\n\nswitch\n\n必须要有 default。\n\nswitch os := runtime.GOOS; os {\n case \"darwin\":\n fmt.Println(\"MAC OS\")\n case \"linux\":\n fmt.Println(\"Linux.\")\n default:\n // freebsd, openbsd,\n // plan9, windows...\n fmt.Printf(\"%s.\\n\", os)\n}\n\nreturn\n\n尽早 return。\n\n一旦有错误发生,马上返回。\nf, err := os.Open(name)\nif err != nil {\n return err\n}\n\ndefer f.Close()\n\nd, err := f.Stat()\nif err != nil {\n return err\n}\n\ncodeUsing(f, d)\n\ngoto\n业务代码禁止使用 goto,其他框架或底层源码推荐尽量不用。\n程序退出方式\n\n使用os.Exit或者log.Fatal*退出程序,而不是panic。\n在 main() 中退出程序且只退出一次。\n\n仅在 main() 函数中调用os.Exit或log.Fatal*且只调用一次。如果有多个错误场景停止程序执行,请将该逻辑放在单独的函数并从中返回错误。 这会精简main()函数,并将所有关键业务逻辑放入一个单独的、可测试的函数中。\n// Bad\npackage main\nfunc main() {\n args := os.Args[1:]\n if len(args) != 1 {\n log.Fatal(\"missing file\")\n }\n name := args[0]\n f, err := os.Open(name)\n if err != nil {\n log.Fatal(err)\n }\n defer f.Close()\n // 如果我们调用 log.Fatal f.Close 将不会被执行\n b, err := ioutil.ReadAll(f)\n if err != nil {\n log.Fatal(err)\n }\n // ...\n}\n\n// Good\npackage main\nfunc main() {\n if err := run(); err != nil {\n log.Fatal(err)\n }\n}\nfunc run() error {\n args := os.Args[1:]\n if len(args) != 1 {\n return errors.New(\"missing file\")\n }\n name := args[0]\n f, err := os.Open(name)\n if err != nil {\n return err\n }\n defer f.Close()\n b, err := ioutil.ReadAll(f)\n if err != nil {\n return err\n }\n // ...\n}\n\n当程序的多个函数具有退出能力时会存在一些问题:\n(1)不明显的控制流:任何函数都可以退出程序,因此很难对控制流进行推理;\n(2)难以测试:退出程序的函数也将退出调用它的测试,这使得函数很难测试,并跳过了尚未被运行的其他代码;\n(3)跳过清理:当函数退出程序时,会跳过已经进入 defer 队列里的函数调用,这增加了跳过重要清理任务的风险。 \npowered by Gitbook该文章修订时间:\n2022-05-22 16:56:50\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/10.函数.html":{"url":"第二篇:代码风格/10.函数.html","title":"10.函数","keywords":"","body":"入参&返回值成员函数局部变量defer减少嵌套(圈复杂度)魔法字面量函数分组与顺序入参&返回值\n\n入参和返回值均以小写字母开头。\n入参和返回值个数均不能超过 5 个,如果超过,请封装成新的类型。\n尽量用值传递,非指针传递。\n类型为 map,slice,chan,interface 不要传递指针。\n返回值超过 3 个,或有相同类型的返回值,或者从上下文中不清楚返回值的含义,使用命名返回,其它情况不建议使用命名返回。\n\n// Parent1 ...\nfunc (n *Node) Parent1() *Node\n\n// Parent2 ...\nfunc (n *Node) Parent2() (*Node, error)\n\n// Location ...\nfunc (f *Foo) Location() (lat, long float64, err error)\n\n\n入参和返回值顺序根据关联性排在一起。\n尽量用 error 表示执行是否成功,而不是用 bool 或者 int。\n表示执行状态的返回值应该放在最后。\n\n// Bad\nret, info := ModifyUserInfo(user)\n\n// Good\ninfo, ret := ModifyUserInfo(user)\n\n\n不要返回多个用于控制流程的状态。\n\n// Bad\nisContinue, retCode := p.processUnity()\n\n// Good\nretCode := p.processUnity()\n\n\n如果传入的参数通常是固定的,考虑通过实现多个函数实现默认参数。\n\n如下面这个函数的第二个参数是没有必要的,大部分时候都是 +1,一个 IncCounter() 和一个 IncCounterN() 即可。可参考标准库包的 Split() 和 SplitN()。\nmetrics.IncrCounter(cntCacheMissKey, 1)\n\n\n批量查询函数返回值使用 slice 还是 map。\n\n有时后我们需要根据多个 ID 查询对应的值,可能会出现部分失败的情况,如某个 ID 不存在。如果不允许部分失败,使用 slice 返回值,如果允许部分失败使用 map。\n// GetUserInfoBatch 批量获取用户信息(需全部成功)。\nfunc GetUserInfoBatch(uids ...uint64) ([]UserInfo, error) {\n ...\n}\n\n// GetUserInfoBatch 批量获取用户信息(允许部分失败)。\nfunc GetUserInfoBatch(uids ...uint64) (map[uint64]UserInfo, error) {\n ...\n}\n\n成员函数\n\n如果方法不使用类的成员,应该实现为非成员函数。\n如果非成员函数要使用类的多个属性时,应该实现为成员函数。\n\n局部变量\n\n如果局部变量仅被使用一次,且不能起到解释逻辑的作用时,应该删除局部变量,直接内联。\n\n// Bad\nids := GetIDs()\nFoo(ids)\n\n// Good\nFoo(GetIDs())\n\ndefer\n\n当存在资源管理时,应紧跟 defer 函数进行资源的释放。\n判断是否有错误发生之后,再 defer 释放资源。\n\nresp, err := http.Get(url)\nif err != nil {\n return err\n}\n// 如果操作成功,再 defer Close()\ndefer resp.Body.Close()\n\n\n禁止在循环中使用 defer。\n\n// 不要这样使用\nfunc filterSomething(values []string) {\n for _, v := range values {\n fields, err := db.Query(v) // 示例,实际不要这么查询,防止 SQL 注入\n if err != nil {\n // ...\n }\n defer fields.Close()\n // 继续使用fields\n }\n}\n\n// 应当使用如下的方式:\nfunc filterSomething(values []string) {\n for _, v := range values {\n func() {\n fields, err := db.Query(v) // 示例,实际不要这么查询,防止 SQL 注入\n if err != nil {\n // ...\n }\n defer fields.Close()\n // 继续使用 fields\n }()\n }\n}\n\n\n正常逻辑不应该在 defer 中执行。\n\n减少嵌套(圈复杂度)\n\n嵌套深度不能超过4层。\n\n从函数名开始算第一层,当函数的嵌套深度超过4层,往往会导致圈复杂度过高,函数变得复杂不可读,我们可以通过拆分函数的方式来减少嵌套深度。\n// AddArea 添加成功或出错。\nfunc (s *BookingService) AddArea(areas ...string) error {\n s.Lock()\n defer s.Unlock()\n\n for _, area := range areas {\n for _, has := range s.areas {\n if area == has {\n return srverr.ErrAreaConflict\n }\n }\n s.areas = append(s.areas, area)\n s.areaOrders[area] = new(order.AreaOrder)\n }\n return nil\n}\n\n// 建议调整为这样:\n\n// AddArea 添加成功或出错。\nfunc (s *BookingService) AddArea(areas ...string) error {\n s.Lock()\n defer s.Unlock()\n\n for _, area := range areas {\n if s.HasArea(area) {\n return srverr.ErrAreaConflict\n }\n s.areas = append(s.areas, area)\n s.areaOrders[area] = new(order.AreaOrder)\n }\n return nil\n}\n\n// HasArea ...\nfunc (s *BookingService) HasArea(area string) bool {\n for _, has := range s.areas {\n if area == has {\n return true\n }\n }\n return false\n}\n\n\n单函数圈复杂度最大值 \n条件不满足或出现错误应尽早返回。\n\n代码也可以优先处理条件不满足或错误的情况,尽早返回或继续循环来减少嵌套。\n// Bad\nfor _, v := range data {\n if v.F1 == 1 {\n v = process(v)\n if err := v.Call(); err == nil {\n v.Send()\n } else {\n return err\n }\n } else {\n log.Printf(\"Invalid v: %v\", v)\n }\n}\n\n// Good\nfor _, v := range data {\n if v.F1 != 1 {\n log.Printf(\"Invalid v: %v\", v)\n continue\n }\n\n v = process(v)\n if err := v.Call(); err != nil {\n return err\n }\n v.Send()\n}\n\n魔法字面量\n\n除了 0 和 1,不要使用魔法数字。\n\n// Bad\nfunc getArea(r float64) float64 {\n return 3.14 * r * r\n}\nfunc getLength(r float64) float64 {\n return 3.14 * 2 * r\n}\n\n// Good\n// PI 圆周率\nconst PI = 3.14\n\nfunc getArea(r float64) float64 {\n return PI * r * r\n}\n\nfunc getLength(r float64) float64 {\n return PI * 2 * r\n}\n\n\n如果字符串字面量出现 >=2 次,则禁止使用,用一个有名称的常量代替,可读性更好。\n\n// Bad\nrsp, err := http.Post(url, \"application/json\", bytes.NewBuffer([]byte(req)))\n\n// Good\nconst JsonContentType = \"application/json\"\nrsp, err := http.Post(url, \"application/json\", bytes.NewBuffer([]byte(req)))\n\n函数分组与顺序\n\n函数应该放在 struct, const, var的后面。\n构造函数应该放在其他函数之前,如newXYZ()/NewXYZ()。\n导出的函数应该放在非导出函数前面\n同一文件中的函数应按接收者分组。\n由于函数是按接收者分组的,因此普通工具函数应在文件末尾出现。\n函数应按粗略的调用顺序排序。\n\n按照上面的规则,下面给出好坏文件内容布局示例。\n// Bad\nfunc (s *something) Cost() {\n return calcCost(s.weights)\n}\n\ntype something struct{ ... }\n\nfunc calcCost(n []int) int {...}\n\nfunc (s *something) Stop() {...}\n\nfunc newSomething() *something {\n return &something{}\n}\n\n// Good\ntype something struct{ ... }\n\nfunc newSomething() *something {\n return &something{}\n}\n\nfunc (s *something) Cost() {\n return calcCost(s.weights)\n}\n\nfunc (s *something) Stop() {...}\n\nfunc calcCost(n []int) int {...}\n\npowered by Gitbook该文章修订时间:\n2022-05-22 16:00:37\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/11.单元测试.html":{"url":"第二篇:代码风格/11.单元测试.html","title":"11.单元测试","keywords":"","body":"\n单元测试文件名命名规范为 example_test.go。\n测试用例的函数名称必须以 Test 开头,例如 TestExample。\n单测文件行数限制是普通文件的 2 倍(1600 行)。单测函数行数限制也是普通函数的2倍(160行)。圈复杂度、列数限制、 import 分组等其他规范细节和普通文件保持一致。\n由于单测文件内的函数都是不对外的,所有可导出函数可以没有注释,但是结构体定义时尽量不要导出。\n每个重要的可导出函数都要首先编写测试用例,测试用例和正规代码一起提交方便进行回归测试。\n表驱动测试.\n\n使用表驱动的方式编写用例,代码看上去会更简洁。\n// Bad\n// func TestSplitHostPort(t *testing.T)\n\nhost, port, err := net.SplitHostPort(\"192.0.2.0:8000\")\nrequire.NoError(t, err)\nassert.Equal(t, \"192.0.2.0\", host)\nassert.Equal(t, \"8000\", port)\n\nhost, port, err = net.SplitHostPort(\"192.0.2.0:http\")\nrequire.NoError(t, err)\nassert.Equal(t, \"192.0.2.0\", host)\nassert.Equal(t, \"http\", port)\n\nhost, port, err = net.SplitHostPort(\":8000\")\nrequire.NoError(t, err)\nassert.Equal(t, \"\", host)\nassert.Equal(t, \"8000\", port)\n\nhost, port, err = net.SplitHostPort(\"1:8\")\nrequire.NoError(t, err)\nassert.Equal(t, \"1\", host)\nassert.Equal(t, \"8\", port)\n\n// Good\n// func TestSplitHostPort(t *testing.T)\n\ntests := []struct{\n give string\n wantHost string\n wantPort string\n}{\n {\n give: \"192.0.2.0:8000\",\n wantHost: \"192.0.2.0\",\n wantPort: \"8000\",\n },\n {\n give: \"192.0.2.0:http\",\n wantHost: \"192.0.2.0\",\n wantPort: \"http\",\n },\n {\n give: \":8000\",\n wantHost: \"\",\n wantPort: \"8000\",\n },\n {\n give: \"1:8\",\n wantHost: \"1\",\n wantPort: \"8\",\n },\n}\n\nfor _, tt := range tests {\n t.Run(tt.give, func(t *testing.T) {\n host, port, err := net.SplitHostPort(tt.give)\n require.NoError(t, err)\n assert.Equal(t, tt.wantHost, host)\n assert.Equal(t, tt.wantPort, port)\n })\n}\n\npowered by Gitbook该文章修订时间:\n2022-05-01 21:44:06\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/12.杂项.html":{"url":"第二篇:代码风格/12.杂项.html","title":"12.杂项","keywords":"","body":"1.基本类型偏执通用场景结构体2.单一职责包&文件函数3.goroutine4.应用服务5.常用工具1.基本类型偏执\n有时候你会看到某个类里有很多基本类型字段,但是你隐约地能区分出某些字段好像应该在一起,如手机号和带区号的电话号码、描述某个日期范围的开始日期和结束日期,它们应该有一个真实的载体,如联系方式类和时间范围类)\n,而不应全部零散放在一个大类型中。\n通用场景\n\n复杂的执行/错误信息,需要定义结构体保存。\n出现状态/类型等字眼时,需要使用枚举。\n时间类型尽量使用内置定义,如 time.Second,不要使用 int。\n\n结构体\n\n一个文件中出现多个结构体时,需要注意观察是否有重复的成员。\n一个结构体中,成员较多,且多个成员有明显关联关系,需要封装新的结构体。\n意义不明的成员变量,应该定义类型描述作用。\n\n2.单一职责\n包&文件\n\n需要判断当前文件是否应该归属于当前包,主要以职责进行判断。\n导出的函数/变量的职责必须与包&文件职责高度一致。\n除了包的主逻辑文件中内容允许导出,包内的辅助函数都应该是非导出的。\n\n函数\n\n一个函数只负责一个职责。\n配置文件的读取,和对象初始化应该分开,不要让对象自己根据配置文件初始化,保证构造函数足够简单\n解析、校验、计算的逻辑应该进行分离\n读、写、计算的逻辑应该进行分离\nrpc、db 相关操作需要独立封装\n\n\n一个函数内不应该混杂多个实现细节,需要将独立的逻辑封装成函数。\n一次循环尽量只做一件事,不用担心多次循环。\n同一层级的逻辑细节不要拆分。\n\n3.goroutine\n\n启动的 goroutine 最好有 recover。\n\n因为其他 goroutine 是无法捕当前 goroutine 抛出的异常。如果启动的 goroutine 没有 recover,很容易发生 panic 导致整个进程退出。\n\n遇到 goroutine一定要梳理清楚 goroutine 的退出机制,防止泄漏。\n如果要开启多个线程执行一组动作,并且要等待全部完成后继续后续逻辑,考虑使用 errgroup.Group。\n\n4.应用服务\n\n应用服务建议有 README.md 说明文档,介绍服务功能、使用方法、部署时的限制与要求、基础环境依赖等\n应用服务必须要有接口测试\n\n5.常用工具\nGo 本身在代码规范方面做了很多努力,很多限制都是语法要求,例如左大括号不换行,引用的包或者定义的变量不使用会报错。此外 Go 还是提供了很多好用的工具帮助我们进行代码的规范。\n\ngofmt ,大部分的格式问题可以通过 gofmt 解决, gofmt 自动格式化代码,保证所有的 go 代码与官方推荐的格式保持一致,于是所有格式有关问题,都以 gofmt 的结果为准。\ngoimports ,此工具在 gofmt 的基础上增加了自动删除和引入包。\ngo vet ,vet 工具可以帮我们静态分析我们的源码存在的各种问题,例如多余的代码,提前 return 的逻辑, struct 的 tag 是否符合标准等。编译前先执行代码静态分析。\ngolint ,类似 javascript 中的 jslint 的工具,主要功能就是检测代码中不规范的地方。 \n\npowered by Gitbook该文章修订时间:\n2022-05-22 17:03:00\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"url":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","title":"1.不需要指向 interface 的指针","keywords":"","body":"我们几乎不需要使用指向接口的指针,应该将接口直接赋值给接口,这样在传递过程中,实质上传递的底层数据仍然是指针,即不存在值拷贝的情况。\ntype Foo struct {\n T string\n}\n\nfunc bar(i interface{}) {\n ...\n}\n\nvar foo interface{} = Foo{...}\n\n// Bad\nbar(&foo)\n\n// Good\nbar(foo)\n\n为什么可以这样,因为接口实质上在底层用两个字段表示:\n(1)一个指向某些特定类型信息的指针;\n(2)一个指向具体数据的指针。如果存储的数据是指针,则直接存储。如果存储的数据是一个值,则存储指向该值的指针。\n具体可以看下 Go 源码 runtime 包两种接口类型的定义。\n一种是带有一组方法的接口runtime.iface:\ntype iface struct {\n tab *itab\n data unsafe.Pointer\n}\n\n一种是不含任何方法的空接口runtime.eface:\ntype eface struct {\n _type *_type\n data unsafe.Pointer\n}\n\n我们可以看下接口变量的内存宽度。\nvar foo interface{} = Foo{...}\nfmt.Println(unsafe.Sizeof(foo)) // 16\n\n当然,凡事无绝对。如果需要修改接口变量本身,那么应该使用指向接口变量的指针,当然你必须清楚自己在干什么。\n类似地,在了解 map、slice、channel 的底层结构后,我们应该知道在传递过程中一般也不需要使用指向它们的指针。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"url":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","title":"2.编译期验证 interface 合理性","keywords":"","body":"在编译时验证接口的合理性,这包括:\n(1)导出类型的部分 API 实现了接口;\n(2)导出或非导出类型实现了接口且属于某类型的一部分(匿名嵌套);\n(3)任何其他情况都违反接口合理性检查,终止编译并通知用户。\n上面这三条是编译器对接口的检查机制, 错误地使用接口会在编译期报错。所以可以利用这个机制让部分问题在编译期暴露。\n// Bad\ntype Handler struct {\n // ...\n}\n\nfunc (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\n // ...\n}\n\n// Good\ntype Handler struct {\n // ...\n}\n\nvar _ http.Handler = (*Handler)(nil)\n\nfunc (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\n // ...\n}\n\n如果*Handler与http.Handler的接口不匹配,那么语句var _ http.Handler = (*Handler)(nil)将无法编译通过。\n赋值的右边应该是断言类型的零值。 对于指针类型(如 *Handler)、切片和映射是 nil;对于结构类型是空结构。\ntype LogHandler struct {\n h http.Handler\n log *zap.Logger\n}\n\nvar _ http.Handler = LogHandler{}\n\nfunc (h LogHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\n // ...\n}\n\npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"url":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","title":"3.在边界处拷贝 slice 和 map","keywords":"","body":"slice 和 map 包含了指向底层数据的指针,因此在需要复制它们时要特别注意。\n在 Go 源码文件 src/runtime/slice.go 我们可以找到切片的底层数据结构 runtime.slice:\ntype slice struct {\n array unsafe.Pointer\n len int\n cap int\n}\n\n在 Go 源码文件 src/runtime/map.go 我们可以找到 map 底层核心数据结构 runtime.hmap:\n// A header for a Go map.\ntype hmap struct {\n // Note: the format of the hmap is also encoded in cmd/compile/internal/reflectdata/reflect.go.\n // Make sure this stays in sync with the compiler's definition.\n count int // # live cells == size of map. Must be first (used by len() builtin)\n flags uint8\n B uint8 // log_2 of # of buckets (can hold up to loadFactor * 2^B items)\n noverflow uint16 // approximate number of overflow buckets; see incrnoverflow for details\n hash0 uint32 // hash seed\n\n buckets unsafe.Pointer // array of 2^B Buckets. may be nil if count==0.\n oldbuckets unsafe.Pointer // previous bucket array of half the size, non-nil only when growing\n nevacuate uintptr // progress counter for evacuation (buckets less than this have been evacuated)\n\n extra *mapextra // optional fields\n}\n\n// mapextra holds fields that are not present on all maps.\ntype mapextra struct {\n // If both key and elem do not contain pointers and are inline, then we mark bucket\n // type as containing no pointers. This avoids scanning such maps.\n // However, bmap.overflow is a pointer. In order to keep overflow buckets\n // alive, we store pointers to all overflow buckets in hmap.extra.overflow and hmap.extra.oldoverflow.\n // overflow and oldoverflow are only used if key and elem do not contain pointers.\n // overflow contains overflow buckets for hmap.buckets.\n // oldoverflow contains overflow buckets for hmap.oldbuckets.\n // The indirection allows to store a pointer to the slice in hiter.\n overflow *[]*bmap\n oldoverflow *[]*bmap\n\n // nextOverflow holds a pointer to a free overflow bucket.\n nextOverflow *bmap\n}\n\n在接收 slice 和 map 时,请记住当 map 或 slice 作为函数参数传入时,如果您存储了对它们的引用,则用户可以对其进行修改。\n// Bas\nfunc (d *Driver) SetTrips(trips []Trip) {\n d.trips = trips\n}\n\ntrips := ...\nd.SetTrips(trips)\n\n// 你是要修改 d.trips 吗?\ntrips[0] = ...\n\n// Good\nfunc (d *Driver) SetTrips(trips []Trip) {\n d.trips = make([]Trip, len(trips))\n copy(d.trips, trips)\n}\n\ntrips := ...\nd.SetTrips(trips)\n\n// 这里我们修改 trips[0],但不会影响 d.trips\ntrips[0] = ...\n\n在返回 slice 和 map 时,同样的,请注意用户对暴露内部状态的 map 或 slice 的修改。\n// Bad\ntype Stats struct {\n mu sync.Mutex\n\n counters map[string]int\n}\n\n// Snapshot 返回当前状态。\nfunc (s *Stats) Snapshot() map[string]int {\n s.mu.Lock()\n defer s.mu.Unlock()\n\n return s.counters\n}\n\n// snapshot 不再受互斥锁保护,可能会引发并发读写的错误\nsnapshot := stats.Snapshot()\n\n// Good\ntype Stats struct {\n mu sync.Mutex\n\n counters map[string]int\n}\n\nfunc (s *Stats) Snapshot() map[string]int {\n s.mu.Lock()\n defer s.mu.Unlock()\n\n result := make(map[string]int, len(s.counters))\n for k, v := range s.counters {\n result[k] = v\n }\n return result\n}\n\n// snapshot 现在是一个拷贝\nsnapshot := stats.Snapshot()\n\npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"url":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","title":"4.枚举从 1 开始","keywords":"","body":"Go 并没有关键字 enum 来定义枚举类型,引入枚举的标准方法是声明一个自定义类型和一个使用了自增器 iota 的 const 组来表示枚举值。\n预先声明的标识符 iota 表示连续的非类型化整数常量,它的值是对应常量的下标(从零开始),它可用于构造一组相关常数:\ntype ByteSize float64\n\nconst (\n _ = iota // ignore first value by assigning to blank identifier\n KB ByteSize = 1 \n由于第一个值从 0 开始,如果需要使第一个值为有意义的值,我们应该从 1 开始。\n// Bad\ntype Operation int\n\nconst (\n Add Operation = iota\n Subtract\n Multiply\n)\n// Add=0, Subtract=1, Multiply=2\n\n// Good\ntype Operation int\n\nconst (\n Add Operation = iota + 1\n Subtract\n Multiply\n)\n// Add=1, Subtract=2, Multiply=3\n\n当然,凡事无绝对。如果第一个枚举值为零是有意义的,如当零值是理想的默认行为时。\ntype LogOutput int\n\nconst (\n LogToStdout LogOutput = iota\n LogToFile\n LogToRemote\n)\n// LogToStdout=0, LogToFile=1, LogToRemote=2\n\npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"url":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","title":"1.方法接收器为值和指针的区别","keywords":"","body":"接收器为值和指针的方法在调用方式上是有区别的。\n使用值接收器的方法既可以通过值调用,也可以通过指针调用。带指针接收器的方法只能通过指针或 addressable values 调用。\ntype S struct {\n data string\n}\n\nfunc (s S) Read() string {\n return s.data\n}\n\nfunc (s *S) Write(str string) {\n s.data = str\n}\n\nsVals := map[int]S{1: {\"A\"}}\n\n// 你只能通过值调用 Read。\nsVals[1].Read()\n\n// 编译不通过,因为无法对 sVals[1] 取址。\n// sVals[1].Write(\"test\")\n\nsPtrs := map[int]*S{1: {\"A\"}}\n\n// 指针既可以调用 Read,也可以调用 Write。\nsPtrs[1].Read()\nsPtrs[1].Write(\"test\")\n\n类似的,使用值接收器和指针接收器来实现接口,在判断与接口是否匹配时,也存在一定的区别。\ntype F interface {\n f()\n}\n\ntype S1 struct{}\n\nfunc (s S1) f() {}\n\ntype S2 struct{}\n\nfunc (s *S2) f() {}\n\ns1Val := S1{}\ns1Ptr := &S1{}\ns2Val := S2{}\ns2Ptr := &S2{}\n\nvar i F\ni = s1Val\ni = s1Ptr\ni = s2Ptr\n\n// 下面代码无法通过编译,因为 s2Val 是一个值,而 S2 的 f 方法中没有使用值接收器。\n// i = s2Val\n\n从前文可知,可取址的值可以调用接收器为指针的方法,但这里为何不能将值 s2Val 赋给接口 i 呢?\n在 Effective Go 中一节 Pointers vs. Values 做了说明,因为接收器为指针的方法会修改接受器,为了避免产生这种错误的行为,便禁止将值赋给和指针接收器方法集匹配的接口。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"url":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","title":"2.使用 defer 释放资源","keywords":"","body":"使用 defer 释放资源,诸如文件和锁。\n// Bad\n// 当有多个 return 分支时,很容易遗忘 unlock\np.Lock()\nif p.count \ndefer 的开销非常小,只有在您可以证明函数执行时间处于纳秒级的程度时,才应避免这样做。使用 defer 提升可读性是值得的,因为使用它们的成本微不足道。尤其适用于那些不仅仅是简单内存访问的较大方法,在这些方法中其他计算的资源消耗远超过 defer。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"url":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","title":"3.不要在 for 循环中使用 defer","keywords":"","body":"尽可能地避免在 for 循环中使用 defer,因为这可能会导致资源泄漏(Possible resource leak, 'defer' is called in the 'for' loop)。\ndefer 不是基于代码块的,而是基于函数的。你在循环中分配资源,那么不应该简单地使用 defer,因为释放资源不会尽可能早地发生(在每次迭代结束时),只有在 for 语句之后(所有迭代之后),即所在函数结束时,defer 函数才会被执行。这带来的后果就是,如果迭代次数过多,那么可能导致资源长时间得不到释放,造成泄漏。\n// Bad\nfor rows.Next() {\n fields, err := db.Query(.....)\n if err != nil {\n // ...\n }\n defer fields.Close()\n\n // do something with `fields`\n\n}\n\n如果有一个类似上面分配资源的代码段,我们应该将其包裹在一个函数中(匿名函数或有名函数)。在该函数中,使用 defer,资源将在不需要时被立即释放。\n// 1.将 defer 放在匿名函数中\nfor rows.Next() {\n func() {\n fields, err := db.Query(...)\n if err != nil {\n // Handle error and return\n return\n }\n defer fields.Close()\n\n // do something with `fields`\n }()\n}\n\n// 2.将 defer 放在有名函数中然后调用之\nfunc foo(r *db.Row) error {\n fields, err := db.Query(...)\n if err != nil {\n return fmt.Errorf(\"db.Query error: %w\", err)\n }\n defer fields.Close()\n\n // do something with `fields`\n return nil\n}\n\n// 调用有名函数\nfor rows.Next() {\n if err := foo(rs); err != nil {\n // Handle error and return\n return\n }\n}\n\npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"url":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","title":"1.零值 Mutex 是有效的","keywords":"","body":"零值 sync.Mutex 和 sync.RWMutex 是有效的,所以指向 mutex 的指针基本是不必要的。\n// Bad\nmu := new(sync.Mutex)\nmu.Lock()\n\n// Good\nvar mu sync.Mutex\nmu.Lock()\n\nMutex 作为其他结构体一个字段时,应该使用值而不是指针。即使该结构体不被导出,也不要直接把 Mutex 嵌入到结构体中。\n// Bad\ntype sMap struct {\n sync.Mutex\n data map[string]string\n}\n\nfunc NewSMap() *sMap {\n return &sMap{\n data: make(map[string]string),\n }\n}\n\nfunc (m *sMap) Get(k string) string {\n m.Lock()\n defer m.Unlock()\n return m.data[k]\n}\n\n// Good\ntype sMap struct {\n mutex sync.Mutex\n data map[string]string\n}\n\nfunc NewSMap() *sMap {\n return &sMap{\n data: make(map[string]string),\n }\n}\n\nfunc (m *SMap) Get(k string) string {\n m.mutex.Lock()\n defer m.mutex.Unlock()\n return m.data[k]\n}\n\nBad 部分会导致字段 Mutex、Lock 和 Unlock 方法是 sMap 导出的字段和 API,但又没有明确说明,既导致了模糊的文档,又泄露了 sMap 的实现细节。Good 部分可以做到字段 mutex 及其方法是 sMap 的实现细节,对其调用者不可见。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"url":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","title":"2.channel size 要么是 1 或 0","keywords":"","body":"channel size 应为 1 或是无缓冲的。默认情况下,channel 是无缓冲的,其 size 为零。任何其他尺寸都必须经过严格的审查,而不是拍脑袋给出一个大致的值。我们需要考虑如何确定大小,什么原因会导致 channel 在高负载下被填满并阻塞写入者,以及当这种情况发生时系统会发生哪些变化。\n// Bad\n// 应该足以满足任何情况!\nc := make(chan int, 64)\n\n// Good\n// size 为 1\nc := make(chan int, 1) \n// 或无缓冲 size 为 0\nc := make(chan int)\n\npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"url":"第三篇:功能设计/4.错误处理/1.错误处理.html","title":"1.错误处理","keywords":"","body":"1.错误类型2.错误包装1.错误类型\n声明错误可选的方式很少,在选择合适的错误申明方式之前,应考虑以下几点。\n(1)调用者是否需要匹配错误以便他们可以处理它? 如果是,我们必须通过声明顶级错误变量或自定义类型来支持 errors.Is 或 errors.As 函数。\n(2)错误消息是否为静态字符串,还是需要上下文信息的动态字符串? 如果是静态字符串,我们可以使用 errors.New,但对于后者,我们必须使用 fmt.Errorf 或自定义错误类型。\n(3)我们是否正在传递由下游函数返回的新错误? 如果是这样,请参阅错误包装部分。\n\n\n\n错误匹配\n错误消息\n指导\n\n\n\n\nNo\nstatic\nerrors.New\n\n\nNo\ndynamic\nfmt.Errorf\n\n\nYes\nstatic\ntop-level var with errors.New\n\n\nYes\ndynamic\ncustom error type\n\n\n\n例如,使用errors.New表示带有静态字符串的错误。如果调用者需要匹配并处理此错误,则将此错误导出为变量以支持将其与errors.Is匹配。\n// Bad\n\n// package foo\n\nfunc Open() error {\n return errors.New(\"could not open\")\n}\n\n// package bar\n\nif err := foo.Open(); err != nil {\n // Can't handle the error.\n panic(\"unknown error\")\n}\n\n// Good\n// package foo\n\nvar ErrCouldNotOpen = errors.New(\"could not open\")\n\nfunc Open() error {\n return ErrCouldNotOpen\n}\n\n// package bar\n\nif err := foo.Open(); err != nil {\n if errors.Is(err, foo.ErrCouldNotOpen) {\n // handle the error\n } else {\n panic(\"unknown error\")\n }\n}\n\n对于动态字符串的错误, 如果调用者不需要匹配它,则使用fmt.Errorf,如果调用者确实需要匹配它,则自定义 error。\n无错误匹配。\n// package foo\n\nfunc Open(file string) error {\n return fmt.Errorf(\"file %q not found\", file)\n}\n\n// package bar\n\nif err := foo.Open(\"testfile.txt\"); err != nil {\n // Can't handle the error.\n panic(\"unknown error\")\n}\n\n错误匹配。\n// package foo\n\ntype NotFoundError struct {\n File string\n}\n\nfunc (e *NotFoundError) Error() string {\n return fmt.Sprintf(\"file %q not found\", e.File)\n}\n\nfunc Open(file string) error {\n return &NotFoundError{File: file}\n}\n\n\n// package bar\n\nif err := foo.Open(\"testfile.txt\"); err != nil {\n var notFound *NotFoundError\n if errors.As(err, ¬Found) {\n // handle the error\n } else {\n panic(\"unknown error\")\n }\n}\n\n请注意,如果您从包中导出错误变量或类型, 它们将成为包的公共 API 的一部分。\n2.错误包装\n在调用失败时传播错误有三个主要方式:\n(1)返回原始错误;\n(2)使用 fmt.Errorf 和 %w 添加上下文生成新错误;\n(3)使用 fmt.Errorf 和 %v 添加上下文生成新错误。\n如果没有要添加的其他上下文,则按原样返回原始错误。 这将保留原始错误类型和消息。 这非常适合底层错误消息有足够的信息来追踪它来自哪里的错误。\n否则,尽可能在错误消息中添加上下文 这样就不会出现诸如“连接被拒绝”之类的模糊错误, 您会收到更多有用的错误,例如“呼叫服务 foo:连接被拒绝”。\n使用 fmt.Errorf 为你的错误添加上下文, 根据调用者是否应该能够匹配和提取根本原因,在 %w 或 %v 格式之间进行选择。\n(1)如果调用者应该可以访问底层错误,请使用 %w。 对于大多数包装错误,这是一个很好的默认值,但请注意,调用者可能会开始依赖此行为。因此,对于包装错误是已知变量或类型的情况,请将其作为函数契约的一部分进行记录和测试。\n(2)使用 %v 来混淆底层错误,调用者将无法匹配它,但如果需要,您可以在将来切换到 %w。\n在为返回的错误添加上下文时,通过避免使用\"failed to\"之类的短语来保持上下文简洁,当错误通过堆栈向上传递时,它会一层一层被堆积起来:\n// Bad\ns, err := store.New()\nif err != nil {\n return fmt.Errorf(\n \"failed to create new store: %w\", err)\n}\n\n// Good\ns, err := store.New()\nif err != nil {\n return fmt.Errorf(\n \"new store: %w\", err)\n}\n\n然而,一旦错误被发送到另一个系统,应该清楚消息是一个错误(例如 err 标签或日志中的 \"Failed\" 前缀)。\n另外请参考:Don't just check errors, handle them gracefully。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"url":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","title":"1.使用 time 包处理时间","keywords":"","body":"时间处理看似简单,实则不然。关于时间的错误假设通常包括以下几点:\n\n一分钟有 60 秒\n一小时有 60 分钟\n一天有 24 小时\n一周有 7 天\n一年 365 天\n\n还有更多,具体可参考 Falsehoods programmers believe about time。\n例如,在一个时间点上加上 24 小时并不总是产生一个新的日历日。\n为什么常识性的认知是错误的呢?因为地球自转的不均匀性和长期变慢性,会存在时间修正的情况,比如闰秒,闰年等。\n因此,在处理时间时始终使用 \"time\" 包,因为它有助于以更安全、更准确的方式处理这些不正确的假设。\n\n使用 time.Time 表达瞬时时间\n\n在处理时间的瞬间时使用 time.Time,在比较、添加或减去时间时使用 time.Time 中的方法。\n// Bad\nfunc isActive(now, start, stop int) bool {\n return start \n\n使用 time.Duration 表达时间段\n```go\n// Bad\nfunc poll(delay int) {\nfor {\n // ...\n time.Sleep(time.Duration(delay) * time.Millisecond)\n}\n}\npoll(10) // 是几秒钟还是几毫秒?\n\n// Good\nfunc poll(delay time.Duration) {\n for {\n // ...\n time.Sleep(delay)\n }\n}\npoll(10*time.Second) // 代码即注释\n回到第一个例子,在一个时间时刻加上 24 小时,我们用于添加时间的方法取决于意图。如果我们想要下一个日历日(当前天的下一天)的同一个时间点,我们应该使用 `Time.AddDate`。但是,如果我们想保证某一时刻比前一时刻晚 24 小时,我们应该使用`Time.Add`。\n```go\nnewDay := t.AddDate(0 /* years */, 0 /* months */, 1 /* days */)\nmaybeNewDay := t.Add(24 * time.Hour)\n\n对外部系统使用 time.Time 和 time.Duration\n\n尽可能在与外部系统交互中使用 time.Time 和 time.Duration 。\n(1)Command-line 标志:flag 通过 time.ParseDuration 支持 time.Duration ;\n(2)JSON:encoding/json 通过其 Time.UnmarshalJSON 方法支持将 time.Time 编码为 RFC 3339 字符串;\n(3)SQL:database/sql 支持将 DATETIME 或 TIMESTAMP 列转换为 time.Time,如果底层驱动程序支持则返回;\n(4)YAML:gopkg.in/yaml.v2 支持将 time.Time 作为 RFC 3339 字符串,并通过 time.ParseDuration 支持 time.Duration 。\n当不能在这些交互中使用 time.Duration 时,请使用 int 或 float64,并在字段名称中包含单位。\n例如,由于 encoding/json 不支持 time.Duration,因此该单位包含在字段的名称中。\n// Bad\n// {\"interval\": 2}\ntype Config struct {\n Interval int `json:\"interval\"`\n}\n\n// Good\n// {\"intervalMillis\": 2000}\ntype Config struct {\n IntervalMillis int `json:\"intervalMillis\"`\n}\n\n当在这些交互中不能使用 time.Time 时,除非达成一致,否则使用 string 和 RFC 3339 中定义的格式时间戳。默认情况下,Time.UnmarshalText 使用此格式,并可通过 time.RFC3339 在 Time.Format 和 time.Parse 中使用。\n尽管这在实践中并不成问题,但请记住,time 包不支持解析闰秒时间戳(issue 8728),也不在计算中考虑闰秒(issue 15190)。如果您比较两个时刻,则差异将不包括这两个时刻之间可能发生的闰秒。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"url":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","title":"2.使用第三方 atomic 包","keywords":"","body":"不建议使用 sync/atomic 包的原子操作对基本类型 (int32, int64 等)进行操作,因为很容易忘记使用原子操作来读取或修改变量。\ngo.uber.org/atomic 通过隐藏基础类型为这些操作增加了类型安全性。此外,它还包括一个易用的 atomic.Bool 类型。\n// Bad\ntype foo struct {\n running int32 // atomic\n}\n\nfunc (f* foo) start() {\n if atomic.SwapInt32(&f.running, 1) == 1 {\n // already running…\n return\n }\n // start the Foo\n}\n\nfunc (f *foo) isRunning() bool {\n return f.running == 1 // race!\n}\n\n// Good\ntype foo struct {\n running atomic.Bool\n}\n\nfunc (f *foo) start() {\n if f.running.Swap(true) {\n // already running…\n return\n }\n // start the Foo\n}\n\nfunc (f *foo) isRunning() bool {\n return f.running.Load()\n}\n\npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"url":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","title":"1.避免使用可变全局变量","keywords":"","body":"可变全局变量在使用时,可能会被其他地方修改,导致程序运行时出现意外情况。\n我们可以通过依赖注入的方式将依赖注入到使用方,这样便可以避免使用全局变量,进而避免了依赖的全局变量被错误修改的可能。\n比如下面将依赖的 now 函数直接注入到使用方 signer struct 中。\n// Bad\n\n// sign.go\n\nvar timeNow = time.Now\n\nfunc sign(msg string) string {\n now := timeNow()\n return signWithTime(msg, now)\n}\n\n// sign_test.go\nfunc TestSign(t *testing.T) {\n oldTimeNow := timeNow\n timeNow = func() time.Time {\n return someFixedTime\n }\n defer func() { timeNow = oldTimeNow }()\n\n assert.Equal(t, want, sign(give))\n}\n\n// Good\n\n// sign.go\n\ntype signer struct {\n now func() time.Time\n}\n\nfunc newSigner() *signer {\n return &signer{\n now: time.Now,\n }\n}\n\nfunc (s *signer) Sign(msg string) string {\n now := s.now()\n return signWithTime(msg, now)\n}\n\n// sign_test.go\n\nfunc TestSigner(t *testing.T) {\n s := newSigner()\n s.now = func() time.Time {\n return someFixedTime\n }\n\n assert.Equal(t, want, s.Sign(give))\n}\n\npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"url":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","title":"2.避免在公共结构中嵌入类型","keywords":"","body":"嵌入类型会泄漏实现细节、禁止类型演化和产生模糊的接口文档。\n假设您使用共享的 AbstractList 实现了多种列表类型,请避免在具体的列表实现中嵌入 AbstractList。相反,只需手动将方法写入具体的列表,委托给抽象列表的方法。\ntype AbstractList struct {}\n// 添加将实体添加到列表中。\nfunc (l *AbstractList) Add(e Entity) {\n // ...\n}\n// 移除从列表中移除实体。\nfunc (l *AbstractList) Remove(e Entity) {\n // ...\n}\n\n// Bad\n\n// ConcreteList 是一个实体列表。\ntype ConcreteList struct {\n *AbstractList\n}\n\n// Good\n\n// ConcreteList 是一个实体列表。\ntype ConcreteList struct {\n list *AbstractList\n}\n// 添加将实体添加到列表中。\nfunc (l *ConcreteList) Add(e Entity) {\n l.list.Add(e)\n}\n// 移除从列表中移除实体。\nfunc (l *ConcreteList) Remove(e Entity) {\n l.list.Remove(e)\n}\n\n泄漏实现细节指 AbstractList 的实现是 ConcreteList 的实现细节,被到处泄露了;\n禁止类型演化指 ConcreteList 获得了同名嵌套类型字段 AbstractList,如果嵌入的类型是 public,那么字段是 public。为了保持向后兼容性,外部类型的每个未来版本都必须保留嵌入类型;\n产生模糊的接口文档指 AbstractList 被导出的字段和方法全部成为了 ConcreteList 被导出的字段和方法,在 ConcreteList 又没有明确说明,会产生模糊的接口文档。\n很少需要嵌入类型,虽然它可以帮助您避免编写冗长的委托方法。\n即使嵌入兼容的抽象列表 interface,而不是结构体,这将为开发人员提供更大的灵活性来改变未来,但仍然泄露了具体列表使用抽象实现的细节。\n// Bad\n\n// AbstractList 是各种实体列表的通用实现。\ntype AbstractList interface {\n Add(Entity)\n Remove(Entity)\n}\n// ConcreteList 是一个实体列表。\ntype ConcreteList struct {\n AbstractList\n}\n\n// Good\n\n// ConcreteList 是一个实体列表。\ntype ConcreteList struct {\n list AbstractList\n}\n// 添加将实体添加到列表中。\nfunc (l *ConcreteList) Add(e Entity) {\n l.list.Add(e)\n}\n// 移除从列表中移除实体。\nfunc (l *ConcreteList) Remove(e Entity) {\n l.list.Remove(e)\n}\n\n无论是使用嵌入结构还是嵌入接口,都会限制类型的演化。\n(1)向嵌入接口添加方法是一个破坏性的改变;\n(2)从嵌入结构体删除方法是一个破坏性的改变;\n(3)删除嵌入类型是一个破坏性的改变;\n(4)即使使用满足相同接口的类型替换嵌入类型,也是一个破坏性的改变。\n尽管编写这些委托方法是乏味的,但是额外的工作隐藏了实现细节,留下了更多的更改机会,还消除了在未能描述出潜在接口的模糊文档。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/0.导语.html":{"url":"第四篇:最佳性能/0.导语.html","title":"0.导语","keywords":"","body":"代码的稳健、可读和高效是我们每一个位 coder 的共同追求。本篇将结合 Go 语言特性,为书写高效的代码,力争从常用数据结构、内存管理和并发编程三个方面给出相关建议。话不多说,让我们一起学习 Go 高性能编程技法吧。 \npowered by Gitbook该文章修订时间:\n2022-05-18 22:23:35\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"url":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","title":"1.反射虽好,切莫贪杯","keywords":"","body":"1.优先使用 strconv 而不是 fmt2.少量的重复不比反射差3.慎用 binary.Read 和 binary.Write标准库 reflect 为 Go 语言提供了运行时动态获取对象的类型和值以及动态创建对象的能力。反射可以帮助抽象和简化代码,提高开发效率。\nGo 语言标准库以及很多开源软件中都使用了 Go 语言的反射能力,例如用于序列化和反序列化的 json、ORM 框架 gorm、xorm 等。\n1.优先使用 strconv 而不是 fmt\n基本数据类型与字符串之间的转换,优先使用 strconv 而不是 fmt,因为前者性能更佳。\n// Bad\nfor i := 0; i \n为什么性能上会有两倍多的差距,因为 fmt 实现上利用反射来达到范型的效果,在运行时进行类型的动态判断,所以带来了一定的性能损耗。\n2.少量的重复不比反射差\n有时,我们需要一些工具函数。比如从 uint64 切片过滤掉指定的元素。\n利用反射,我们可以实现一个类型泛化支持扩展的切片过滤函数。\n// DeleteSliceElms 从切片中过滤指定元素。注意:不修改原切片。\nfunc DeleteSliceElms(i interface{}, elms ...interface{}) interface{} {\n // 构建 map set。\n m := make(map[interface{}]struct{}, len(elms))\n for _, v := range elms {\n m[v] = struct{}{}\n }\n // 创建新切片,过滤掉指定元素。\n v := reflect.ValueOf(i)\n t := reflect.MakeSlice(reflect.TypeOf(i), 0, v.Len())\n for i := 0; i \n很多时候,我们可能只需要操作一个类型的切片,利用反射实现的类型泛化扩展的能力压根没用上。退一步说,如果我们真地需要对 uint64 以外类型的切片进行过滤,拷贝一次代码又何妨呢?可以肯定的是,绝大部份场景,根本不会对所有类型的切片进行过滤,那么反射带来好处我们并没有充分享受,但却要为其带来的性能成本买单。\n// DeleteU64liceElms 从 []uint64 过滤指定元素。注意:不修改原切片。\nfunc DeleteU64liceElms(i []uint64, elms ...uint64) []uint64 {\n // 构建 map set。\n m := make(map[uint64]struct{}, len(elms))\n for _, v := range elms {\n m[v] = struct{}{}\n }\n // 创建新切片,过滤掉指定元素。\n t := make([]uint64, 0, len(i))\n for _, v := range i {\n if _, ok := m[v]; !ok {\n t = append(t, v)\n }\n }\n return t\n}\n\n下面看一下二者的性能对比。\nfunc BenchmarkDeleteSliceElms(b *testing.B) {\n slice := []uint64{1, 2, 3, 4, 5, 6, 7, 8, 9}\n elms := []interface{}{uint64(1), uint64(3), uint64(5), uint64(7), uint64(9)}\n for i := 0; i \n运行上面的基准测试。\ngo test -bench=. -benchmem main/reflect \ngoos: darwin\ngoarch: amd64\npkg: main/reflect\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkDeleteSliceElms-12 1226868 978.2 ns/op 296 B/op 16 allocs/op\nBenchmarkDeleteU64liceElms-12 8249469 145.3 ns/op 80 B/op 1 allocs/op\nPASS\nok main/reflect 3.809s\n\n可以看到,反射涉及了额外的类型判断和大量的内存分配,导致其对性能的影响非常明显。随着切片元素的递增,每一次判断元素是否在 map 中,因为 map 的 key 是不确定的类型,会发生变量逃逸,触发堆内存的分配。所以,可预见的是当元素数量增加时,性能差异会越来大。\n当使用反射时,请问一下自己,我真地需要它吗?\n3.慎用 binary.Read 和 binary.Write\nbinary.Read 和 binary.Write 使用反射并且很慢。如果有需要用到这两个函数的地方,我们应该手动实现这两个函数的相关功能,而不是直接去使用它们。\nencoding/binary 包实现了数字和字节序列之间的简单转换以及 varints 的编码和解码。varints 是一种使用可变字节表示整数的方法。其中数值本身越小,其所占用的字节数越少。Protocol Buffers 对整数采用的便是这种编码方式。\n其中数字与字节序列的转换可以用如下三个函数:\n// Read 从结构化二进制数据 r 读取到 data。data 必须是指向固定大小值的指针或固定大小值的切片。\nfunc Read(r io.Reader, order ByteOrder, data interface{}) error\n// Write 将 data 的二进制表示形式写入 w。data 必须是固定大小的值或固定大小值的切片,或指向此类数据的指针。\nfunc Write(w io.Writer, order ByteOrder, data interface{}) error\n// Size 返回 Wirte 函数将 v 写入到 w 中的字节数。\nfunc Size(v interface{}) int\n\n下面以我们熟知的 C 标准库函数 ntohl() 函数为例,看看 Go 利用 binary 包如何实现。\n// Ntohl 将网络字节序的 uint32 转为主机字节序。\nfunc Ntohl(bys []byte) uint32 {\n r := bytes.NewReader(bys)\n err = binary.Read(buf, binary.BigEndian, &num)\n}\n\n// 如将 IP 127.0.0.1 网络字节序解析到 uint32\nfmt.Println(Ntohl([]byte{0x7f, 0, 0, 0x1})) // 2130706433 \n\n如果我们针对 uint32 类型手动实现一个 ntohl() 呢?\nfunc NtohlNotUseBinary(bys []byte) uint32 {\n return uint32(bys[3]) | uint32(bys[2])\n该函数也是参考了 encoding/binary 包针对大端字节序将字节序列转为 uint32 类型时的实现。\n下面看下剥去反射前后二者的性能差异。\nfunc BenchmarkNtohl(b *testing.B) {\n for i := 0; i \n运行上面的基准测试,结果如下:\ngo test -bench=BenchmarkNtohl.* -benchmem main/reflect\ngoos: darwin\ngoarch: amd64\npkg: main/reflect\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkNtohl-12 13026195 81.96 ns/op 60 B/op 4 allocs/op\nBenchmarkNtohlNotUseBinary-12 1000000000 0.2511 ns/op 0 B/op 0 allocs/op\nPASS\nok main/reflect 1.841s\n可见使用反射实现的 encoding/binary 包的性能相较于针对具体类型实现的版本,性能差异非常大。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"url":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","title":"2.避免重复转换字符串到字节切片","keywords":"","body":"不要反复从固定字符串创建字节 slice,因为重复的切片初始化会带来性能损耗。相反,请执行一次转换并捕获结果。\nfunc BenchmarkStringToByte(b *testing.B) {\n for i := 0; i \n看一下性能差异,注意需要禁止编译器优化,不然看不出差别。\ngo test -bench=BenchmarkStringToByte -gcflags=\"-N\" main/perf\ngoos: windows\ngoarch: amd64\npkg: main/perf\ncpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz\nBenchmarkStringToByte-8 748467979 1.582 ns/op\nBenchmarkStringToByteOnce-8 878246492 1.379 ns/op\nPASS\nok main/perf 2.962s\n差距不是很大,但是随着字符串长度的增加,差距将会越来越明显。此外,如果这种重复的转换在 Hot Path 上,那么其对性能的影响将被放大。这里解释下 Hot Path,即热点路径,顾名思义,是你的程序中那些会频繁执行到的代码。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"url":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","title":"3.指定容器容量","keywords":"","body":"1.指定 map 容量提示2.指定切片容量尽可能指定容器容量,以便为容器预先分配内存。这将在后续添加元素时减少通过复制来调整容器大小。\n1.指定 map 容量提示\n在尽可能的情况下,在使用 make() 初始化的时候提供容量信息。\nmake(map[T1]T2, hint)\n\n向 make() 提供容量提示会在初始化时尝试调整 map 的大小,这将减少在将元素添加到 map 时为 map 重新分配内存。\n注意,与 slice 不同。map capacity 提示并不保证完全的抢占式分配,而是用于估计所需的 hashmap bucket 的数量。 因此,在将元素添加到 map 时,甚至在指定 map 容量时,仍可能发生分配。\n// Bad\nm := make(map[string]os.FileInfo)\n\nfiles, _ := ioutil.ReadDir(\"./files\")\nfor _, f := range files {\n m[f.Name()] = f\n}\n// m 是在没有大小提示的情况下创建的; 在运行时可能会有更多分配。\n\n// Good\nfiles, _ := ioutil.ReadDir(\"./files\")\n\nm := make(map[string]os.FileInfo, len(files))\nfor _, f := range files {\n m[f.Name()] = f\n}\n// m 是有大小提示创建的;在运行时可能会有更少的分配。\n\n2.指定切片容量\n在尽可能的情况下,在使用 make() 初始化切片时提供容量信息,特别是在追加切片时。\nmake([]T, length, capacity)\n\n与 map 不同,slice capacity 不是一个提示:编译器将为提供给 make() 的 slice 的容量分配足够的内存,这意味着后续的 append() 操作将导致零分配(直到 slice 的长度与容量匹配,在此之后,任何 append 都可能调整大小以容纳其他元素)。\nconst size = 1000000\n\n// Bad\nfor n := 0; n \n执行基准测试:\ngo test -bench=^BenchmarkJoinStr -benchmem \nBenchmarkJoinStrWithOperator-8 66930670 17.81 ns/op 0 B/op 0 allocs/op\nBenchmarkJoinStrWithSprintf-8 7032921 166.0 ns/op 64 B/op 4 allocs/op\n\npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"url":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","title":"4.字符串拼接方式","keywords":"","body":"1.行内字符串拼接2.非行内字符串拼接1.行内字符串拼接\n行内拼接字符串为了书写方便快捷,最常用的两个方法是:\n\n运算符+\nfmt.Sprintf()\n\n行内字符串的拼接,主要追求的是代码的简洁可读。fmt.Sprintf() 能够接收不同类型的入参,通过格式化输出完成字符串的拼接,使用非常方便。但因其底层实现使用了反射,性能上会有所损耗。\n运算符 + 只能简单地完成字符串之间的拼接,非字符串类型的变量需要单独做类型转换。行内拼接字符串不会产生内存分配,也不涉及类型地动态转换,所以性能上优于fmt.Sprintf()。\n从性能出发,兼顾实现的便捷与代码可读性,如果待拼接的字符串不涉及类型转换且数量较少(fmt.Sprintf()。\n下面看下二者的性能对比。\n// Good\nfunc BenchmarkJoinStrWithOperator(b *testing.B) {\n s1, s2, s3 := \"foo\", \"bar\", \"baz\"\n for i := 0; i \n执行基准测试结果如下:\ngo test -bench=^BenchmarkJoinStr -benchmem .\nBenchmarkJoinStrWithOperator-8 70638928 17.53 ns/op 0 B/op 0 allocs/op\nBenchmarkJoinStrWithSprintf-8 7520017 157.2 ns/op 64 B/op 4 allocs/op\n\n可以看到,二者的性能差距很大,快达到一个数量级了。所以在不影响代码可读性时,行内字符串尽可能地使用运算符 + 来拼接而不是fmt.Sprintf()。\n2.非行内字符串拼接\n字符串拼接还有其他的方式,比如strings.Join()、strings.Builder、bytes.Buffer和byte[],这几种不适合行内使用。当待拼接字符串数量较多时可考虑使用。\n先看下其性能测试的对比。\nfunc BenchmarkJoinStrWithStringsJoin(b *testing.B) {\n s1, s2, s3 := \"foo\", \"bar\", \"baz\"\n for i := 0; i \n基准测试结果如下:\ngo test -bench=^BenchmarkJoinStr .\ngoos: windows\ngoarch: amd64\npkg: main/perf\ncpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz\nBenchmarkJoinStrWithStringsJoin-8 31543916 36.39 ns/op\nBenchmarkJoinStrWithStringsBuilder-8 30079785 40.60 ns/op\nBenchmarkJoinStrWithBytesBuffer-8 31663521 39.58 ns/op\nBenchmarkJoinStrWithByteSlice-8 30748495 37.34 ns/op\nBenchmarkJoinStrWithByteSlicePreAlloc-8 665341896 1.813 ns/op\n\n从结果可以看出,strings.Join()、strings.Builder、bytes.Buffer和byte[] 的性能相近。如果结果字符串的长度是可预知的,使用 byte[] 且预先分配容量的拼接方式性能最佳。\n所以如果对性能要求非常严格,或待拼接的字符串数量足够多时,建议使用 byte[] 预先分配容量这种方式。\n综合易用性和性能,一般推荐使用strings.Builder来拼接字符串。\nstring.Builder也提供了预分配内存的方式 Grow:\nfunc BenchmarkJoinStrWithStringsBuilderPreAlloc(b *testing.B) {\n s1, s2, s3 := \"foo\", \"bar\", \"baz\"\n for i := 0; i \n使用了 Grow 优化后的版本的性能测试结果如下。可以看出相较于不预先分配空间的方式,性能提升了很多。\nBenchmarkJoinStrWithStringsBuilderPreAlloc-8 60079003 20.95 ns/op\n\npowered by Gitbook该文章修订时间:\n2022-05-13 15:46:40\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"url":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","title":"5.[]struct{} 的遍历方式","keywords":"","body":"1.[]int2.[]struct{}3.[]*struct4.小结Go 遍历切片或数组有两种方式,一种是下标,一种是 range。二者在功能上没有区别,但在性能上会有区别吗?\n1.[]int\n首先看一下遍历基本类型切片时二者的性能差别,以 []int 为例。\n// genRandomIntSlice 生成指定长度的随机 []int 切片\nfunc genRandomIntSlice(n int) []int {\n rand.Seed(time.Now().UnixNano())\n nums := make([]int, 0, n)\n for i := 0; i \n运行测试结果如下:\ngo test -bench=IntSlice$ .\ngoos: windows\ngoarch: amd64\npkg: main/perf\ncpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz\nBenchmarkIndexIntSlice-8 5043324 236.2 ns/op\nBenchmarkRangeIntSlice-8 5076255 239.1 ns/op\n\ngenRandomIntSlice() 函数用于生成指定长度元素类型为 int 的切片。从最终的结果可以看到,遍历 []int 类型的切片,下标与 range 遍历性能几乎没有区别。\n2.[]struct{}\n那么对于稍微复杂一点的 []struct 类型呢?\ntype Item struct {\n id int\n val [1024]byte\n}\n\nfunc BenchmarkIndexStructSlice(b *testing.B) {\n items := make([]Item, 1024)\n for i := 0; i \n运行测试结果如下:\ngo test -bench=. -gcflags=-N -benchmem main/range\ngoos: darwin\ngoarch: amd64\npkg: main/range\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkIndexStructSlice-12 556436 2165 ns/op 1 B/op 0 allocs/op\nBenchmarkRangeIndexStructSlice-12 535705 2124 ns/op 1 B/op 0 allocs/op\nBenchmarkRangeStructSlice-12 38799 30914 ns/op 27 B/op 0 allocs/op\nPASS\nok main/range 5.097s\n\n可以看出,两种通过 index 遍历 []struct 性能没有差别,但是 range 遍历 []struct 中元素时,性能非常差。\nrange 只遍历 []struct 下标时,性能比 range 遍历 []struct 值好很多。从这里我们应该能够知道二者性能差别之大的原因。\nItem 是一个结构体类型 ,Item 由两个字段构成,一个类型是 int,一个是类型是 [1024]byte,如果每次遍历 []Item,都会进行一次值拷贝,所以带来了性能损耗。\n此外,因 range 时获取的是值拷贝,对副本的修改,是不会影响到原切片。\n需要注意的时,上面运行基准测试时,使用编译选项-gcflags=-N禁用了编译器对切片遍历的优化。如果没有该选项,那么上面三种遍历方式没有性能差别。\n为什么编译器会对上面的测试代码进行优化呢?因为代码实际上只取最后一个切片元素的值,所以前面的循环操作可以跳过,这样便带来性能的提升。如果是下面的代码,那么编器将无法优化,必须遍历拷贝所有元素。\nfunc BenchmarkRange1(b *testing.B) {\n items := make([]Item, 1024)\n tmps := make([]int, 1024)\n for i := 0; i \n无需去除编译器优化,基准测试结果如下:\ngo test -bench=BenchmarkRange -benchmem main/range\ngoos: darwin\ngoarch: amd64\npkg: main/range\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkRange1-12 2290372 534.8 ns/op 0 B/op 0 allocs/op\nBenchmarkRange2-12 46161 27169 ns/op 22 B/op 0 allocs/op\nPASS\nok main/range 3.378s\n\n3.[]*struct\n如果切片中是指向结构体的指针,而不是结构体呢?\n// genItems 生成指定长度 []*Item 切片\nfunc genItems(n int) []*Item {\n items := make([]*Item, 0, n)\n for i := 0; i \n执行性能测试结果:\ngo test -bench=Pointer$ main/perf\ngoos: windows\ngoarch: amd64\npkg: main/perf\ncpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz\nBenchmarkIndexPointer-8 773634 1521 ns/op\nBenchmarkRangePointer-8 752077 1514 ns/op\n\n切片元素从结构体 Item 替换为指针 *Item 后,for 和 range 的性能几乎是一样的。而且使用指针还有另一个好处,可以直接修改指针对应的结构体的值。\n4.小结\nrange 在迭代过程中返回的是元素的拷贝,index 则不存在拷贝。\n如果 range 迭代的元素较小,那么 index 和 range 的性能几乎一样,如基本类型的切片 []int。但如果迭代的元素较大,如一个包含很多属性的 struct 结构体,那么 index 的性能将显著地高于 range,有时候甚至会有上千倍的性能差异。对于这种场景,建议使用 index。如果使用 range,建议只迭代下标,通过下标访问元素,这种使用方式和 index 就没有区别了。如果想使用 range 同时迭代下标和值,则需要将切片/数组的元素改为指针,才能不影响性能。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"url":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","title":"6.切片删除指定元素","keywords":"","body":"1.截取法(修改原切片)2.拷贝法(不改原切片)3.移位法(修改原切片)4.性能对比5.小结Go 并没有提供删除切片元素专用的语法或函数,需要使用切片本身的特性来删除元素。\n删除切片指定元素一般有如下几种方法,本文以 []int 为例给出具体实现。\n1.截取法(修改原切片)\n这里利用对 slice 的截取删除指定元素。注意删除时,后面的元素会前移,下标 i 应该后移一位。\n// DeleteSlice1 删除指定元素。\nfunc DeleteSlice1(a []int, elem int) []int {\n for i := 0; i \n2.拷贝法(不改原切片)\n这种方法最容易理解,重新使用一个 slice,将要删除的元素过滤掉。缺点是需要开辟另一个 slice 的空间,优点是容易理解,而且不会修改原 slice。\n// DeleteSlice2 删除指定元素。\nfunc DeleteSlice2(a []int, elem int) []int {\n tmp := make([]int, 0, len(a))\n for _, v := range a {\n if v != elem {\n tmp = append(tmp, v)\n }\n }\n return tmp\n}\n\n3.移位法(修改原切片)\n\n方式一\n\n利用一个下标 index,记录下一个有效元素应该在的位置。遍历所有元素,当遇到有效元素,将其移动到 index 且 index 加一。最终 index 的位置就是所有有效元素的下一个位置,最后做一个截取就行了。这种方法会修改原来的 slice。\n该方法可以看成对第一种方法截取法的改进,因为每次指需移动一个元素,性能更加。\n// DeleteSlice3 删除指定元素。\nfunc DeleteSlice3(a []int, elem int) []int {\n j := 0\n for _, v := range a {\n if v != elem {\n a[j] = v\n j++\n }\n }\n return a[:j]\n}\n\n\n方式二\n\n创建了一个 slice,但是共用原始 slice 的底层数组。这样也不需要额外分配内存空间,直接在原 slice 上进行修改。\n// DeleteSlice4 删除指定元素。\nfunc DeleteSlice4(a []int, elem int) []int {\n tgt := a[:0]\n for _, v := range a {\n if v != elem {\n tgt = append(tgt, v)\n }\n }\n return tgt\n}\n\n4.性能对比\n假设我们的切片有 0 和 1,我们要删除所有的 0。\n这里分别对长度为 10、100、1000 的切片进行测试,来上下上面四种实现的性能差异。\n生成切片函数如下:\nfunc getSlice(n int) []int {\n a := make([]int, 0, n)\n for i := 0; i \n基准测试代码如下:\nfunc BenchmarkDeleteSlice1(b *testing.B) {\n for i := 0; i \n测试结果如下:\n原切片长度为 10:\ngo test -bench=. main/slice\ngoos: windows\ngoarch: amd64\npkg: main/slice\ncpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz\nBenchmarkDeleteSlice1-8 17466486 65.07 ns/op\nBenchmarkDeleteSlice2-8 14897282 85.22 ns/op\nBenchmarkDeleteSlice3-8 21952129 50.78 ns/op\nBenchmarkDeleteSlice4-8 22176390 54.68 ns/op\nPASS\nok main/slice 5.427s\n原切片长度为 100:\nBenchmarkDeleteSlice1-8 1652146 762.1 ns/op\nBenchmarkDeleteSlice2-8 2124237 578.4 ns/op\nBenchmarkDeleteSlice3-8 3161318 359.9 ns/op\nBenchmarkDeleteSlice4-8 2714158 423.7 ns/op\n原切片长度为 1000:\nBenchmarkDeleteSlice1-8 56067 21915 ns/op\nBenchmarkDeleteSlice2-8 258662 5007 ns/op\nBenchmarkDeleteSlice3-8 432049 2724 ns/op\nBenchmarkDeleteSlice4-8 325194 3615 ns/op\n5.小结\n从基准测试结果来看,性能最佳的方法是移位法,其中又属第一种实现方式较佳。性能最差的也是最常用的方法是截取法。随着切片长度的增加,上面四种删除方式的性能差异会愈加明显。\n实际使用时,我们可以根据不用场景来选择。如不能修改原切片使用拷贝法,可以修改原切片使用移位法中的第一种实现方式。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"url":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","title":"1.使用空结构体节省内存","keywords":"","body":"1.不占内存空间2.空结构体的作用2.1 实现集合(Set)2.2 不发送数据的信道2.3 仅包含方法的结构体1.不占内存空间\n在 Go 中,我们可以使用 unsafe.Sizeof 计算出一个数据类型实例需要占用的字节数。\npackage main\n\nimport (\n \"fmt\"\n \"unsafe\"\n)\n\nfunc main() {\n fmt.Println(unsafe.Sizeof(struct{}{}))\n}\n\n运行上面的例子将会输出:\ngo run main.go\n0\n\n可以看到,Go 中空结构体 struct{} 是不占用内存空间,不像 C/C++ 中空结构体仍占用 1 字节。\n2.空结构体的作用\n因为空结构体不占据内存空间,因此被广泛作为各种场景下的占位符使用。一是节省资源,二是空结构体本身就具备很强的语义,即这里不需要任何值,仅作为占位符,达到的代码即注释的效果。\n2.1 实现集合(Set)\nGo 语言标准库没有提供 Set 的实现,通常使用 map 来代替。事实上,对于集合来说,只需要 map 的键,而不需要值。即使是将值设置为 bool 类型,也会多占据 1 个字节,那假设 map 中有一百万条数据,就会浪费 1MB 的空间。\n因此呢,将 map 作为集合(Set)使用时,可以将值类型定义为空结构体,仅作为占位符使用即可。\ntype Set map[string]struct{}\n\nfunc (s Set) Has(key string) bool {\n _, ok := s[key]\n return ok\n}\n\nfunc (s Set) Add(key string) {\n s[key] = struct{}{}\n}\n\nfunc (s Set) Delete(key string) {\n delete(s, key)\n}\n\nfunc main() {\n s := make(Set)\n s.Add(\"foo\")\n s.Add(\"bar\")\n fmt.Println(s.Has(\"foo\"))\n fmt.Println(s.Has(\"bar\"))\n}\n\n如果想使用 Set 的完整功能,如初始化(通过切片构建一个 Set)、Add、Del、Clear、Contains 等操作,可以使用开源库 golang-set。\n2.2 不发送数据的信道\nfunc worker(ch chan struct{}) {\n \n有时候使用 channel 不需要发送任何的数据,只用来通知子协程(goroutine)执行任务,或只用来控制协程的并发。这种情况下,使用空结构体作为占位符就非常合适了。\n2.3 仅包含方法的结构体\ntype Door struct{}\n\nfunc (d Door) Open() {\n fmt.Println(\"Open the door\")\n}\n\nfunc (d Door) Close() {\n fmt.Println(\"Close the door\")\n}\n\n在部分场景下,结构体只包含方法,不包含任何的字段。例如上面例子中的 Door,在这种情况下,Door 事实上可以用任何的数据结构替代。\ntype Door int\ntype Door bool\n\n无论是 int 还是 bool 都会浪费额外的内存。因此,在这种情况下,声明为空结构体最合适。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"url":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","title":"2.struct 布局考虑内存对齐","keywords":"","body":"1.为什么需要内存对齐2.Go 内存对齐规则3.合理的 struct 布局4.空结构与空数组对内存对齐的影响1.为什么需要内存对齐\nCPU 访问内存并不是逐个字节访问,而是以字长(word size)为单位访问。如 32 位的 CPU ,字长为 4 字节,那么 CPU 访存的单位是 4 字节。\n这么设计的目的,是减少 CPU 访问内存的次数,加大 CPU 访问内存的吞吐量。比如同样读取 8 个字节的数据,一次读取 4 个字节那么只需要读取 2 次。\nCPU 始终以字长访问内存,如果不进行内存对齐,可能会增加 CPU 访存次数。\n\n内存对齐前变量 a、b 各占据 3 个字节,CPU 读取 b 变量的值需要两次访存,第一次访存得到前一个字节,第二次得到后两个字节。内存对齐后 a、b 各占 4 个字节,CPU 读取 b 变量的值只需要一次访存。\n从这个例子可以看到,内存对齐对实现变量的原子性操作也是有好处的。每次内存访问是原子的,如果变量的大小不超过字长,那么内存对齐后,对该变量的访问就是原子的,这个特性在并发场景下至关重要。\n简言之:合理的内存对齐可以提高内存读写的性能,并且便于实现变量操作的原子性。\n2.Go 内存对齐规则\n编译器一般为了减少 CPU 访存指令周期,提高内存的访问效率,会对变量进行内存对齐。Go 作为一门追求高性能的后台编程语言,当然也不例外。\nGo Language Specification 中 Size and alignment guarantees 描述了内存对齐的规则。\n\n1.For a variable x of any type: unsafe.Alignof(x) is at least 1.\n2.For a variable x of struct type: unsafe.Alignof(x) is the largest of all the values unsafe.Alignof(x.f) for each field f of x, but at least 1.\n3.For a variable x of array type: unsafe.Alignof(x) is the same as the alignment of a variable of the array's element type.\n\n\n对于任意类型的变量 x ,unsafe.Alignof(x) 至少为 1。\n对于结构体类型的变量 x,计算 x 每一个字段 f 的 unsafe.Alignof(x.f),unsafe.Alignof(x) 等于其中的最大值。\n对于数组类型的变量 x,unsafe.Alignof(x) 等于构成数组的元素类型的对齐系数。\n\n其中函数 unsafe.Alignof 用于获取变量的对齐系数。 对齐系数决定了字段的偏移和变量的大小,两者必须是对齐系数的整数倍。\n3.合理的 struct 布局\n因为内存对齐的存在,合理的 struct 布局可以减少内存占用,提高程序性能。\ntype demo1 struct {\n a int8\n b int16\n c int32\n}\n\ntype demo2 struct {\n a int8\n c int32\n b int16\n}\n\nfunc main() {\n fmt.Println(unsafe.Sizeof(demo1{})) // 8\n fmt.Println(unsafe.Sizeof(demo2{})) // 12\n}\n\n可以看到,同样的字段,因排列顺序不同,会导致不一样的结构体大小。\n每个字段按照自身的对齐系数来确定在内存中的偏移量,一个字段因偏移而浪费的大小也不同。\n接下来逐个分析,首先是 demo1:\na 是第一个字段,默认是已经对齐的,从第 0 个位置开始占据 1 字节。\nb 是第二个字段,对齐系数为 2,因此,必须空出 1 个字节,偏移量才是 2 的倍数,从第 2 个位置开始占据 2 字节。\nc 是第三个字段,对齐倍数为 4,此时,内存已经是对齐的,从第 4 个位置开始占据 4 字节即可。\n因此 demo1 的内存占用为 8 字节。\n对于 demo2:\na 是第一个字段,默认是已经对齐的,从第 0 个位置开始占据 1 字节。\nc 是第二个字段,对齐倍数为 4,因此,必须空出 3 个字节,偏移量才是 4 的倍数,从第 4 个位置开始占据 4 字节。\nb 是第三个字段,对齐倍数为 2,从第 8 个位置开始占据 2 字节。\ndemo2 的对齐系数由 c 的对齐系数决定,也是 4,因此,demo2 的内存占用为 12 字节。\n\n因此,在对内存特别敏感的结构体的设计上,我们可以通过调整字段的顺序,将字段宽度从小到大由上到下排列,来减少内存的占用。\n4.空结构与空数组对内存对齐的影响\n空结构与空数组在 Go 中比较特殊。没有任何字段的空 struct{} 和没有任何元素的 array 占据的内存空间大小为 0。\n因为这一点,空 struct{} 或空 array 作为其他 struct 的字段时,一般不需要内存对齐。但是有一种情况除外:即当 struct{} 或空 array 作为结构体最后一个字段时,需要内存对齐。因为如果有指针指向该字段,返回的地址将在结构体之外,如果此指针一直存活不释放对应的内存,就会有内存泄露的问题(该内存不因结构体释放而释放)。\ntype demo3 struct {\n a struct{}\n b int32\n}\ntype demo4 struct {\n b int32\n a struct{}\n}\n\nfunc main() {\n fmt.Println(unsafe.Sizeof(demo3{})) // 4\n fmt.Println(unsafe.Sizeof(demo4{})) // 8\n}\n\n可以看到,demo3{} 的大小为 4 字节,与字段 b 占据空间一致,而 demo4{} 的大小为 8 字节,即额外填充了 4 字节的空间。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"url":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","title":"3.减少逃逸,将变量限制在栈上","keywords":"","body":"1.局部切片尽可能确定长度或容量2.返回值 VS 返回指针3.小的拷贝好过引用4.返回值使用确定的类型5.小结变量逃逸一般发生在如下几种情况:\n\n变量较大(栈空间不足)\n变量大小不确定(如 slice 长度或容量不定)\n返回地址\n返回引用(引用变量的底层是指针)\n返回值类型不确定(不能确定大小)\n闭包\n其他\n\n知道变量逃逸的原因后,我们可以有意识地避免变量发生逃逸,将其限制在栈上,减少堆变量的分配,降低 GC 成本,可提高程序性能。\n1.局部切片尽可能确定长度或容量\n如果使用局部切片时,已知切片的长度或容量,请使用常量或数值字面量来定义。\npackage main\n\nfunc main() {\n number := 10\n s1 := make([]int, 0, number)\n for i := 0; i \n我们来看一下编译器编译时对上面两个切片的优化决策。\n go build -gcflags=\"-m -m -l\" main.go\n# command-line-arguments\n./main.go:5:12: make([]int, 0, number) escapes to heap:\n./main.go:5:12: flow: {heap} = &{storage for make([]int, 0, number)}:\n./main.go:5:12: from make([]int, 0, number) (non-constant size) at ./main.go:5:12\n./main.go:5:12: make([]int, 0, number) escapes to heap\n./main.go:9:12: make([]int, 0, 10) does not escape\n\n从输出结果可以看到,使用变量(非常量)来指定切片的容量,会导致切片发生逃逸,影响性能。指定切片的长度时也是一样的,尽可能使用常量或数值字面量。\n下面看下二者的性能差异。\n// sliceEscape 发生逃逸,在堆上申请切片\nfunc sliceEscape() {\n number := 10\n s1 := make([]int, 0, number)\n for i := 0; i \n运行上面的基准测试结果如下:\ngo test -bench=BenchmarkSlice -benchmem main/copy \ngoos: darwin\ngoarch: amd64\npkg: main/copy\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkSliceEscape-12 43268738 27.40 ns/op 80 B/op 1 allocs/op\nBenchmarkSliceNoEscape-12 186127288 6.454 ns/op 0 B/op 0 allocs/op\nPASS\nok main/copy 4.402s\n\n2.返回值 VS 返回指针\n值传递会拷贝整个对象,而指针传递只会拷贝地址,指向的对象是同一个。传指针可以减少值的拷贝,但是会导致内存分配逃逸到堆中,增加垃圾回收(GC)的负担。在对象频繁创建和删除的场景下,返回指针导致的 GC 开销可能会严重影响性能。\n一般情况下,对于需要修改原对象,或占用内存比较大的对象,返回指针。对于只读或占用内存较小的对象,返回值能够获得更好的性能。\n下面以一个简单的示例来看下二者的性能差异。\ntype St struct {\n arr [1024]int\n}\n\nfunc retValue() St {\n var st St\n return st\n}\n\nfunc retPtr() *St {\n var st St\n return &st\n}\n\nfunc BenchmarkRetValue(b *testing.B) {\n for i := 0; i \n基准测试结果如下:\ngo test -gcflags=\"-l\" -bench=BenchmarkRet -benchmem main/copy\ngoos: darwin\ngoarch: amd64\npkg: main/copy\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkRetValue-12 5194722 216.2 ns/op 0 B/op 0 allocs/op\nBenchmarkRetPtr-12 1342947 893.6 ns/op 8192 B/op 1 allocs/op\nPASS\nok main/copy 3.865s\n\n3.小的拷贝好过引用\n小的拷贝好过引用,什么意思呢,就是尽量使用栈变量而不是堆变量。下面举一个反常识的例子,来证明小的拷贝比在堆上创建引用变量要好。\n我们都知道 Go 里面的 Array 以 pass-by-value 方式传递后,再加上其长度不可扩展,考虑到性能我们一般很少使用它。实际上,凡事无绝对。有时使用数组进行拷贝传递,比使用切片要好。\n// copy/copy.go\n\nconst capacity = 1024\n\nfunc arrayFibonacci() [capacity]int {\n var d [capacity]int\n for i := 0; i \n下面看一下性能对比。\nfunc BenchmarkArray(b *testing.B) {\n for i := 0; i \n运行上面的基准测试,将得到如下结果。\ngo test -bench=. -benchmem -gcflags=\"-l\" main/copy\ngoos: darwin\ngoarch: amd64\npkg: main/copy\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkArray-12 692400 1708 ns/op 0 B/op 0 allocs/op\nBenchmarkSlice-12 464974 2242 ns/op 8192 B/op 1 allocs/op\nPASS\nok main/copy 3.908s\n\n从测试结果可以看出,对数组的拷贝性能却比使用切片要好。为什么会这样呢?\nsliceFibonacci()函数中分配的局部变量切片因为要返回到函数外部,所以发生了逃逸,需要在堆上申请内存空间。从测试也过也可以看出,arrayFibonacci()函数没有内存分配,完全在栈上完成数组的创建。这里说明了对于一些短小的对象,栈上复制的成本远小于在堆上分配和回收的成本。\n需要注意,运行上面基准测试时,传递了禁止内联的编译选项 \"-l\",如果发生内联,那么将不会出现变量的逃逸,就不存在堆上分配内存与回收的操作了,二者将看不出性能差异。\n编译时可以借助选项-gcflags=-m查看编译器对上面两个函数的优化决策。\ngo build -gcflags=-m copy/copy.go\n# command-line-arguments\ncopy/copy.go:5:6: can inline arrayFibonacci\ncopy/copy.go:17:6: can inline sliceFibonacci\ncopy/copy.go:18:11: make([]int, capacity) escapes to heap\n\n可以看到,arrayFibonacci() 和 sliceFibonacci() 函数均可内联。sliceFibonacci() 函数中定义的局部变量切片逃逸到了堆。\n那么多大的变量才算是小变量呢? 对 Go 编译器而言,超过一定大小的局部变量将逃逸到堆上,不同 Go 版本的大小限制可能不一样。一般是 \n4.返回值使用确定的类型\n如果变量类型不确定,那么将会逃逸到堆上。所以,函数返回值如果能确定的类型,就不要使用 interface{}。\n我们还是以上面斐波那契数列函数为例,看下返回值为确定类型和 interface{} 的性能差别。\nconst capacity = 1024\n\nfunc arrayFibonacci() [capacity]int {\n var d [capacity]int\n for i := 0; i \nfunc BenchmarkArray(b *testing.B) {\n for i := 0; i \n运行上面的基准测试结果如下:\ngo test -bench=. -benchmem main/copy\ngoos: darwin\ngoarch: amd64\npkg: main/copy\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkArray-12 832418 1427 ns/op 0 B/op 0 allocs/op\nBenchmarkIfc-12 380626 2861 ns/op 8192 B/op 1 allocs/op\nPASS\nok main/copy 3.742s\n\n可见,函数返回值使用 interface{} 返回时,编译器无法确定返回值的具体类型,导致返回值逃逸到堆上。当发生了堆上内存的申请与回收时,性能会差一点。\n5.小结\n栈上分配内存比在堆中分配内存有更高的效率。因为栈上分配的内存不需要 GC 处理,函数返回后就会直接释放,而堆上分配的内存使用完毕会交给 GC 处理。在知道常见的变量逃逸场景后,我们在编码时可以有意识地避免变量发生逃逸,尽可能地使用栈空间,而非堆空间。\n以上仅列出了部分变量发生逃逸的情形。实际上,Go 编译器对变量的逃逸分析决策远比我们想像的要复杂。我们只能尽可能地去勾勒而无以绘其全貌。Go 官方也在 Frequently Asked Questions (FAQ) 明确地告诉我们,我们并不需要知道变量是分配在栈(stack)上还是堆(heap)上。Golang 中的变量只要被引用就一直会存活,存储在堆上还是栈上由 Go 内部实现决定而和具体的语法没有关系。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"url":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","title":"4.sync.Pool 复用对象","keywords":"","body":"1.简介2.作用3.如何使用4.性能差异5.在标准库中的应用1.简介\nsync.Pool 是 sync 包下的一个组件,可以作为保存临时取还对象的一个“池子”。个人觉得它的名字有一定的误导性,因为 Pool 里装的对象可以被无通知地被回收,可能 sync.Cache 是一个更合适的名字。\nsync.Pool 是可伸缩的,同时也是并发安全的,其容量仅受限于内存的大小。存放在池中的对象如果不活跃了会被自动清理。\n2.作用\n对于很多需要重复分配、回收内存的地方,sync.Pool 是一个很好的选择。频繁地分配、回收内存会给 GC 带来一定的负担,严重的时候会引起 CPU 的毛刺,而 sync.Pool 可以将暂时不用的对象缓存起来,待下次需要的时候直接使用,不用再次经过内存分配,复用对象的内存,减轻 GC 的压力,提升系统的性能。\n一句话总结:用来保存和复用临时对象,减少内存分配,降低 GC 压力。\n3.如何使用\nsync.Pool 的使用方式非常简单,只需要实现 New 函数即可。对象池中没有对象时,将会调用 New 函数创建。\n假设我们有一个“学生”结构体,并复用改结构体对象。\ntype Student struct {\n Name string\n Age int32\n Remark [1024]byte\n}\n\nvar studentPool = sync.Pool{\n New: func() interface{} { \n return new(Student) \n },\n}\n\n然后调用 Pool 的 Get() 和 Put() 方法来获取和放回池子中。\nstu := studentPool.Get().(*Student)\njson.Unmarshal(buf, stu)\nstudentPool.Put(stu)\n\n\nGet() 用于从对象池中获取对象,因为返回值是 interface{},因此需要类型转换。\nPut() 则是在对象使用完毕后,放回到对象池。\n\n4.性能差异\n我们以 bytes.Buffer 字节缓冲器为例,利用 sync.Pool 复用 bytes.Buffer 对象,避免重复创建与回收内存,来看看对性能的提升效果。\nvar bufferPool = sync.Pool{\n New: func() interface{} {\n return &bytes.Buffer{}\n },\n}\n\nvar data = make([]byte, 10000)\n\nfunc BenchmarkBufferWithPool(b *testing.B) {\n for n := 0; n \n测试结果如下:\ngo test -bench=. -benchmem main/pool\ngoos: darwin\ngoarch: amd64\npkg: main/pool\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkBufferWithPool-12 11987966 97.12 ns/op 0 B/op 0 allocs/op\nBenchmarkBuffer-12 1246887 1020 ns/op 10240 B/op 1 allocs/op\nPASS\nok main/pool 3.510s\n\n这个例子创建了一个 bytes.Buffer 对象池,每次只执行 Write 操作,及做一次数据拷贝,耗时几乎可以忽略。而内存分配和回收的耗时占比较多,因此对程序整体的性能影响更大。从测试结果也可以看出,使用了 Pool 复用对象,每次操作不再有内存分配。\n5.在标准库中的应用\nGo 标准库也大量使用了 sync.Pool,例如 fmt 和 encoding/json。以 fmt 包为例,我们看下其是如何使用 sync.Pool 的。\n我们可以看一下最常用的标准格式化输出函数 Printf() 函数。\n// Printf formats according to a format specifier and writes to standard output.\n// It returns the number of bytes written and any write error encountered.\nfunc Printf(format string, a ...interface{}) (n int, err error) {\n return Fprintf(os.Stdout, format, a...)\n}\n\n继续看 Fprintf() 的定义。\n// Fprintf formats according to a format specifier and writes to w.\n// It returns the number of bytes written and any write error encountered.\nfunc Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) {\n p := newPrinter()\n p.doPrintf(format, a)\n n, err = w.Write(p.buf)\n p.free()\n return\n}\n\nFprintf() 函数的参数是一个 io.Writer,Printf() 传的是 os.Stdout,相当于直接输出到标准输出。这里的 newPrinter 用的就是 sync.Pool。\n// go version go1.17 darwin/amd64\n\n// pp is used to store a printer's state and is reused with sync.Pool to avoid allocations.\ntype pp struct {\n buf buffer\n ...\n}\n\nvar ppFree = sync.Pool{\n New: func() interface{} { return new(pp) },\n}\n\n// newPrinter allocates a new pp struct or grabs a cached one.\nfunc newPrinter() *pp {\n p := ppFree.Get().(*pp)\n p.panicking = false\n p.erroring = false\n p.wrapErrs = false\n p.fmt.init(&p.buf)\n return p\n}\n\n// free saves used pp structs in ppFree; avoids an allocation per invocation.\nfunc (p *pp) free() {\n // Proper usage of a sync.Pool requires each entry to have approximately\n // the same memory cost. To obtain this property when the stored type\n // contains a variably-sized buffer, we add a hard limit on the maximum buffer\n // to place back in the pool.\n //\n // See https://golang.org/issue/23199\n if cap(p.buf) > 64\nfmt.Printf()的调用是非常频繁的,利用 sync.Pool 复用 pp 对象能够极大地提升性能,减少内存占用,同时降低 GC 压力。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"url":"第四篇:最佳性能/3.并发编程/1.关于锁.html","title":"1.关于锁","keywords":"","body":"1.无锁化1.1 无锁数据结构1.2 串行无锁2.减少锁竞争3.优先使用共享锁而非互斥锁3.1 sync.Mutex3.2 sync.RWMutex3.3 性能对比1.无锁化\n加锁是为了避免在并发环境下,同时访问共享资源产生的安全问题。那么,在并发环境下,是否必须加锁?答案是否定的。并非所有的并发都需要加锁。适当地降低锁的粒度,甚至采用无锁化的设计,更能提升并发能力。\n无锁化主要有两种实现,无锁数据结构和串行无锁。\n1.1 无锁数据结构\n利用硬件支持的原子操作可以实现无锁的数据结构,原子操作可以在 lock-free 的情况下保证并发安全,并且它的性能也能做到随 CPU 个数的增多而线性扩展。很多语言都提供 CAS 原子操作(如 Go 中的 atomic 包和 C++11 中的 atomic 库),可以用于实现无锁数据结构,如无锁链表。\n我们以一个简单的线程安全单向链表的插入操作来看下无锁编程和普通加锁的区别。\npackage list\n\nimport (\n \"fmt\"\n \"sync\"\n \"sync/atomic\"\n\n \"golang.org/x/sync/errgroup\"\n)\n\n// Node 链表节点\ntype Node struct {\n Value interface{}\n Next *Node\n}\n\n//\n// 有锁单向链表的简单实现\n//\n\n// WithLockList 有锁单向链表\ntype WithLockList struct {\n Head *Node\n mu sync.Mutex\n}\n\n// Push 将元素插入到链表的首部\nfunc (l *WithLockList) Push(v interface{}) {\n l.mu.Lock()\n defer l.mu.Unlock()\n n := &Node{\n Value: v,\n Next: l.Head,\n }\n l.Head = n\n}\n\n// String 有锁链表的字符串形式输出\nfunc (l WithLockList) String() string {\n s := \"\"\n cur := l.Head\n for {\n if cur == nil {\n break\n }\n if s != \"\" {\n s += \",\"\n }\n s += fmt.Sprintf(\"%v\", cur.Value)\n cur = cur.Next\n }\n return s\n}\n\n//\n// 无锁单向链表的简单实现\n//\n\n// LockFreeList 无锁单向链表\ntype LockFreeList struct {\n Head atomic.Value\n}\n\n// Push 有锁\nfunc (l *LockFreeList) Push(v interface{}) {\n for {\n head := l.Head.Load()\n headNode, _ := head.(*Node)\n n := &Node{\n Value: v,\n Next: headNode,\n }\n if l.Head.CompareAndSwap(head, n) {\n break\n }\n }\n}\n\n// String 有锁链表的字符串形式输出\nfunc (l LockFreeList) String() string {\n s := \"\"\n cur := l.Head.Load().(*Node)\n for {\n if cur == nil {\n break\n }\n if s != \"\" {\n s += \",\"\n }\n s += fmt.Sprintf(\"%v\", cur.Value)\n cur = cur.Next\n }\n return s\n}\n\n上面的实现有几点需要注意一下:\n(1)无锁单向链表实现时在插入时需要进行 CAS 操作,即调用CompareAndSwap()方法进行插入,如果插入失败则进行 for 循环多次尝试,直至成功。\n(2)为了方便打印链表内容,实现一个String()方法遍历链表,且使用值作为接收者,避免打印对象指针时无法生效。\n\n\nIf an operand implements method String() string, that method will be invoked to convert the object to a string, which will then be formatted as required by the verb (if any).\n\n\n我们分别对两种链表做一个并发写入的操作验证一下其功能。\npackage main\n\nimport (\n \"fmt\"\n\n \"main/list\"\n)\n\n// ConcurWriteWithLockList 并发写入有锁链表\nfunc ConcurWriteWithLockList(l *WithLockList) {\n var g errgroup.Group\n // 10 个协程并发写入链表\n for i := 0; i \n注意,多次运行上面的main()函数的结果可能会不相同,因为并发是无序的。\n8,7,6,9,5,4,3,1,2,0\n9,8,7,6,5,4,3,2,0,1\n下面再看一下链表 Push 操作的基准测试,对比一下有锁与无锁的性能差异。\nfunc BenchmarkWriteWithLockList(b *testing.B) {\n l := &WithLockList{}\n for n := 0; n \n可以看出无锁版本比有锁版本性能高一些。\n1.2 串行无锁\n串行无锁是一种思想,就是避免对共享资源的并发访问,改为每个并发操作访问自己独占的资源,达到串行访问资源的效果,来避免使用锁。不同的场景有不同的实现方式。比如网络 I/O 场景下将单 Reactor 多线程模型改为主从 Reactor 多线程模型,避免对同一个消息队列锁读取。\n这里我介绍的是后台微服务开发经常遇到的一种情况。我们经常需要并发拉取多方面的信息,汇聚到一个变量上。那么此时就存在对同一个变量互斥写入的情况。比如批量并发拉取用户信息写入到一个 map。此时我们可以将每个协程拉取的结果写入到一个临时对象,这样便将并发地协程与同一个变量解绑,然后再将其汇聚到一起,这样便可以不用使用锁。即独立处理,然后合并。\n\n为了模拟上面的情况,简单地写个示例程序,对比下性能。\nimport (\n \"sync\"\n\n \"golang.org/x/sync/errgroup\"\n)\n\n// ConcurWriteMapWithLock 有锁并发写入 map\nfunc ConcurWriteMapWithLock() map[int]int {\n m := make(map[int]int)\n var mu sync.Mutex\n var g errgroup.Group\n // 10 个协程并发写入 map\n for i := 0; i \n看下二者的性能差异:\nfunc BenchmarkConcurWriteMapWithLock(b *testing.B) {\n for n := 0; n \n2.减少锁竞争\n如果加锁无法避免,则可以采用分片的形式,减少对资源加锁的次数,这样也可以提高整体的性能。\n比如 Golang 优秀的本地缓存组件 bigcache 、go-cache、freecache 都实现了分片功能,每个分片一把锁,采用分片存储的方式减少加锁的次数从而提高整体性能。\n以一个简单的示例,通过对map[uint64]struct{}分片前后并发写入的对比,来看下减少锁竞争带来的性能提升。\nvar (\n num = 1000000\n m0 = make(map[int]struct{}, num)\n mu0 = sync.RWMutex{}\n m1 = make(map[int]struct{}, num)\n mu1 = sync.RWMutex{}\n)\n\n// ConWriteMapNoShard 不分片写入一个 map。\nfunc ConWriteMapNoShard() {\n g := errgroup.Group{}\n for i := 0; i \n看下二者的性能差异:\nfunc BenchmarkConWriteMapNoShard(b *testing.B) {\n for i := 0; i \n可以看到,通过对分共享资源的分片处理,减少了锁竞争,能明显地提高程序的并发性能。可以预见的是,随着分片粒度地变小,性能差距会越来越大。当然,分片粒度不是越小越好。因为每一个分片都要配一把锁,那么会带来很多额外的不必要的开销。可以选择一个不太大的值,在性能和花销上寻找一个平衡。\n3.优先使用共享锁而非互斥锁\n如果并发无法做到无锁化,优先使用共享锁而非互斥锁。\n所谓互斥锁,指锁只能被一个 Goroutine 获得。共享锁指可以同时被多个 Goroutine 获得的锁。\nGo 标准库 sync 提供了两种锁,互斥锁(sync.Mutex)和读写锁(sync.RWMutex),读写锁便是共享锁的一种具体实现。\n3.1 sync.Mutex\n互斥锁的作用是保证共享资源同一时刻只能被一个 Goroutine 占用,一个 Goroutine 占用了,其他的 Goroutine 则阻塞等待。\n\nsync.Mutex 提供了两个导出方法用来使用锁。\nLock() // 加锁\nUnlock() // 释放锁\n\n我们可以通过在访问共享资源前前用 Lock 方法对资源进行上锁,在访问共享资源后调用 Unlock 方法来释放锁,也可以用 defer 语句来保证互斥锁一定会被解锁。在一个 Go 协程调用 Lock 方法获得锁后,其他请求锁的协程都会阻塞在 Lock 方法,直到锁被释放。\n3.2 sync.RWMutex\n读写锁是一种共享锁,也称之为多读单写锁 (multiple readers, single writer lock)。在使用锁时,对获取锁的目的操作做了区分,一种是读操作,一种是写操作。因为同一时刻允许多个 Gorouine 获取读锁,所以是一种共享锁。但写锁是互斥的。\n一般来说,有如下几种情况:\n\n读锁之间不互斥,没有写锁的情况下,读锁是无阻塞的,多个协程可以同时获得读锁。\n写锁之间是互斥的,存在写锁,其他写锁阻塞。\n写锁与读锁是互斥的,如果存在读锁,写锁阻塞,如果存在写锁,读锁阻塞。\n\n\nsync.RWMutex 提供了五个导出方法用来使用锁。\nLock() // 加写锁\nUnlock() // 释放写锁\nRLock() // 加读锁\nRUnlock() // 释放读锁\nRLocker() Locker // 返回读锁,使用 Lock() 和 Unlock() 进行 RLock() 和 RUnlock()\n\n读写锁的存在是为了解决读多写少时的性能问题,读场景较多时,读写锁可有效地减少锁阻塞的时间。\n3.3 性能对比\n大部分业务场景是读多写少,所以使用读写锁可有效提高对共享数据的访问效率。最坏的情况,只有写请求,那么读写锁顶多退化成互斥锁。所以优先使用读写锁而非互斥锁,可以提高程序的并发性能。\n接下来,我们测试三种情景下,互斥锁和读写锁的性能差异。\n\n读多写少(读占 80%)\n读写一致(各占 50%)\n读少写多(读占 20%)\n\n首先根据互斥锁和读写锁分别实现对共享 map 的并发读写。\n// OpMapWithMutex 使用互斥锁读写 map。\n// rpct 为读操作占比。\nfunc OpMapWithMutex(rpct int) {\n m := make(map[int]struct{})\n mu := sync.Mutex{}\n var wg sync.WaitGroup\n for i := 0; i = rpct {\n m[i] = struct{}{}\n time.Sleep(time.Microsecond)\n return\n }\n // 读操作。\n _ = m[i]\n time.Sleep(time.Microsecond)\n }()\n }\n wg.Wait()\n}\n\n// OpMapWithRWMutex 使用读写锁读写 map。\n// rpct 为读操作占比。\nfunc OpMapWithRWMutex(rpct int) {\n m := make(map[int]struct{})\n mu := sync.RWMutex{}\n var wg sync.WaitGroup\n for i := 0; i = rpct {\n mu.Lock()\n defer mu.Unlock()\n m[i] = struct{}{}\n time.Sleep(time.Microsecond)\n return\n }\n // 读操作。\n mu.RLock()\n defer mu.RUnlock()\n _ = m[i]\n time.Sleep(time.Microsecond)\n }()\n }\n wg.Wait()\n}\n\n入参 rpct 用来调节读操作的占比,来模拟读写占比不同的场景。rpct 设为 80 表示读多写少(读占 80%),rpct 设为 50 表示读写一致(各占 50%),rpct 设为 20 表示读少写多(读占 20%)。\nfunc BenchmarkMutexReadMore(b *testing.B) {\n for i := 0; i \n执行当前包下的所有基准测试,结果如下:\ndablelv@DABLELV-MB0 mutex % go test -bench=.\ngoos: darwin\ngoarch: amd64\npkg: main/mutex\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkMutexReadMore-12 2462 485917 ns/op\nBenchmarkRWMutexReadMore-12 8074 145690 ns/op\nBenchmarkMutexRWEqual-12 2406 498673 ns/op\nBenchmarkRWMutexRWEqual-12 4124 303693 ns/op\nBenchmarkMutexWriteMore-12 1906 532350 ns/op\nBenchmarkRWMutexWriteMore-12 2462 432386 ns/op\nPASS\nok main/mutex 9.532s\n\n可见读多写少的场景,使用读写锁并发性能会更优。可以预见的是如果写占比更低,那么读写锁带的并发效果会更优。\n这里需要注意的是,因为每次读写 map 的操作耗时很短,所以每次睡眠一微秒(百万分之一秒)来增加耗时,不然对共享资源的访问耗时,小于锁处理的本身耗时,那么使用读写锁带来的性能优化效果将变得不那么明显,甚至会降低性能。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"url":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","title":"2.限制协程数量","keywords":"","body":"1.协程数过多的问题1.1 程序崩溃1.2 协程的代价2.2 限制协程数量3.协程池化4.小结1.协程数过多的问题\n1.1 程序崩溃\nGo 程(goroutine)是由 Go 运行时管理的轻量级线程。通过它我们可以轻松实现并发编程。但是当我们无限开辟协程时,将会遇到致命的问题。\nfunc main() {\n var wg sync.WaitGroup\n for i := 0; i \n这个例子实现了 math.MaxInt32 个协程的并发,2^31 - 1 约为 20 亿个,每个协程内部几乎没有做什么事情。正常的情况下呢,这个程序会乱序输出 0 ~ 2^31-1 个数字。\n程序会像预期的那样顺利的运行吗?\ngo run main.go\n...\n108668\n1142025\npanic: too many concurrent operations on a single file or socket (max 1048575)\n\ngoroutine 1158408 [running]:\ninternal/poll.(*fdMutex).rwlock(0xc0000ae060, 0x0)\n /usr/local/go/src/internal/poll/fd_mutex.go:147 +0x11b\ninternal/poll.(*FD).writeLock(...)\n /usr/local/go/src/internal/poll/fd_mutex.go:239\ninternal/poll.(*FD).Write(0xc0000ae060, {0xc12cadf690, 0x8, 0x8})\n /usr/local/go/src/internal/poll/fd_unix.go:262 +0x72\nos.(*File).write(...)\n /usr/local/go/src/os/file_posix.go:49\nos.(*File).Write(0xc0000ac008, {0xc12cadf690, 0x1, 0xc12ea62f50})\n /usr/local/go/src/os/file.go:176 +0x65\nfmt.Fprintln({0x10c00e0, 0xc0000ac008}, {0xc12ea62f90, 0x1, 0x1})\n /usr/local/go/src/fmt/print.go:265 +0x75\nfmt.Println(...)\n /usr/local/go/src/fmt/print.go:274\nmain.main.func1(0x0)\n /Users/dablelv/work/code/test/main.go:16 +0x8f\n...\n\n运行的结果是程序直接崩溃了,关键的报错信息是:\npanic: too many concurrent operations on a single file or socket (max 1048575)\n对单个 file/socket 的并发操作个数超过了系统上限,这个报错是 fmt.Printf 函数引起的,fmt.Printf 将格式化后的字符串打印到屏幕,即标准输出。在 Linux 系统中,标准输出也可以视为文件,内核(Kernel)利用文件描述符(File Descriptor)来访问文件,标准输出的文件描述符为 1,错误输出文件描述符为 2,标准输入的文件描述符为 0。\n简而言之,系统的资源被耗尽了。\n那如果我们将 fmt.Printf 这行代码去掉呢?那程序很可能会因为内存不足而崩溃。这一点更好理解,每个协程至少需要消耗 2KB 的空间,那么假设计算机的内存是 4GB,那么至多允许 4GB/2KB = 1M 个协程同时存在。那如果协程中还存在着其他需要分配内存的操作,那么允许并发执行的协程将会数量级地减少。\n1.2 协程的代价\n前面的例子过于极端,一般情况下程序也不会无限开辟协程,旨在说明协程数量是有限制的,不能无限开辟。\n如果我们开辟很多协程,但不会导致程序崩溃,可以吗?如果真要这么做的话,我们应该清楚地知道,协程虽然轻量,但仍有开销。\nGo 的开销主要是三个方面:创建(占用内存)、调度(增加调度器负担)和删除(增加 GC 压力)。\n\n内存开销\n\n空间上,一个 Go 程占用约 2K 的内存,在源码 src/runtime/runtime2.go里面,我们可以找到 Go 程的结构定义type g struct。\n\n调度开销\n\n时间上,协程调度也会有 CPU 开销。我们可以利用runntime.Gosched()让当前协程主动让出 CPU 去执行另外一个协程,下面看一下协程之间切换的耗时。\nconst NUM = 10000\n\nfunc cal() {\n for i := 0; i \n运行输出:\ntotal 997200ns per 99ns\n可见一次协程的切换,耗时大概在 100ns,相对于线程的微秒级耗时切换,性能表现非常优秀,但是仍有开销。\n\nGC 开销\n创建 Go 程到运行结束,占用的内存资源是需要由 GC 来回收,如果无休止地创建大量 Go 程后,势必会造成对 GC 的压力。\n```go\npackage main\n\nimport (\n \"fmt\"\n \"runtime\"\n \"runtime/debug\"\n \"sync\"\n \"time\"\n)\nfunc createLargeNumGoroutine(num int, wg *sync.WaitGroup) {\n wg.Add(num)\n for i := 0; i \nfunc main() {\n // 只设置一个 Processor 保证 Go 程串行执行\n runtime.GOMAXPROCS(1)\n // 关闭GC改为手动执行\n debug.SetGCPercent(-1)\nvar wg sync.WaitGroup\ncreateLargeNumGoroutine(1000, &wg)\nwg.Wait()\nt := time.Now()\nruntime.GC() // 手动GC\ncost := time.Since(t)\nfmt.Printf(\"GC cost %v when goroutine num is %v\\n\", cost, 1000)\n\ncreateLargeNumGoroutine(10000, &wg)\nwg.Wait()\nt = time.Now()\nruntime.GC() // 手动GC\ncost = time.Since(t)\nfmt.Printf(\"GC cost %v when goroutine num is %v\\n\", cost, 10000)\n\ncreateLargeNumGoroutine(100000, &wg)\nwg.Wait()\nt = time.Now()\nruntime.GC() // 手动GC\ncost = time.Since(t)\nfmt.Printf(\"GC cost %v when goroutine num is %v\\n\", cost, 100000)\n}\n运行输出:\n```shell\nGC cost 0s when goroutine num is 1000\nGC cost 2.0027ms when goroutine num is 10000\nGC cost 30.9523ms when goroutine num is 100000\n当创建的 Go 程数量越多,GC 耗时越大。\n上面的分析目的是为了尽可能地量化 Goroutine 的开销。虽然官方宣称用 Golang 写并发程序的时候随便起个成千上万的 Goroutine 毫无压力,但当我们起十万、百万甚至千万个 Goroutine 呢?Goroutine 轻量的开销将被放大。\n2.2 限制协程数量\n系统地资源是有限,协程是有代价的,为了保护程序,提高性能,我们应主动限制并发的协程数量。\n可以利用信道 channel 的缓冲区大小来实现。\nfunc main() {\n var wg sync.WaitGroup\n ch := make(chan struct{}, 3)\n for i := 0; i \n上例中创建了缓冲区大小为 3 的 channel,在没有被接收的情况下,至多发送 3 个消息则被阻塞。开启协程前,调用ch ,若缓存区满,则阻塞。协程任务结束,调用 \nsync.WaitGroup 并不是必须的,例如 Http 服务,每个请求天然是并发的,此时使用 channel 控制并发处理的任务数量,就不需要 sync.WaitGroup。\n运行结果如下:\n2022/03/06 20:37:02 0\n2022/03/06 20:37:02 2\n2022/03/06 20:37:02 1\n2022/03/06 20:37:03 3\n2022/03/06 20:37:03 4\n2022/03/06 20:37:03 5\n2022/03/06 20:37:04 6\n2022/03/06 20:37:04 7\n2022/03/06 20:37:04 8\n2022/03/06 20:37:05 9\n\n从日志中可以很容易看到,每秒钟只并发执行了 3 个任务,达到了协程并发控制的目的。\n3.协程池化\n上面的例子只是简单地限制了协程开辟的数量。在此基础之上,基于对象复用的思想,我们可以重复利用已开辟的协程,避免协程的重复创建销毁,达到池化的效果。\n协程池化,我们可以自己写一个协程池,但不推荐这么做。因为已经有成熟的开源库可供使用,无需再重复造轮子。目前有很多第三方库实现了协程池,可以很方便地用来控制协程的并发数量,比较受欢迎的有:\n\nJeffail/tunny\npanjf2000/ants\n\n下面以 panjf2000/ants 为例,简单介绍其使用。\nants 是一个简单易用的高性能 Goroutine 池,实现了对大规模 Goroutine 的调度管理和复用,允许使用者在开发并发程序的时候限制 Goroutine 数量,复用协程,达到更高效执行任务的效果。\npackage main\n\nimport (\n \"fmt\"\n \"time\"\n\n \"github.com/panjf2000/ants\"\n)\n\nfunc main() {\n // Use the common pool\n for i := 0; i \n使用 ants,我们简单地使用其默认的协程池,直接将任务提交并发执行。默认协程池的缺省容量 math.MaxInt32。\n如果自定义协程池容量大小,可以调用 NewPool 方法来实例化具有给定容量的池,如下所示:\n// Set 10000 the size of goroutine pool\np, _ := ants.NewPool(10000)\n\n4.小结\nGolang 为并发而生。Goroutine 是由 Go 运行时管理的轻量级线程,通过它我们可以轻松实现并发编程。Go 虽然轻量,但天下没有免费的午餐,无休止地开辟大量 Go 程势必会带来性能影响,甚至程序崩溃。所以,我们应尽可能的控制协程数量,如果有需要,请复用它。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"url":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","title":"3.使用 sync.Once 避免重复执行","keywords":"","body":"1.简介2.原理2.1 源码2.2 done 为什么是第一个字段?3.性能差异1.简介\nsync.Once 是 Go 标准库提供的使函数只执行一次的实现,常应用于单例模式,例如初始化配置、保持数据库连接等。作用与 init 函数类似,但有区别。\n\ninit 函数是当所在的 package 首次被加载时执行,若迟迟未被使用,则既浪费了内存,又延长了程序加载时间。\nsync.Once 可以在代码的任意位置初始化和调用,因此可以延迟到使用时再执行,并发场景下是线程安全的。\n\n在多数情况下,sync.Once 被用于控制变量的初始化,这个变量的读写满足如下三个条件:\n\n当且仅当第一次访问某个变量时,进行初始化(写);\n变量初始化过程中,所有读都被阻塞,直到初始化完成;\n变量仅初始化一次,初始化完成后驻留在内存里。\n\n2.原理\nsync.Once 用来保证函数只执行一次。要达到这个效果,需要做到两点:\n\n计数器,统计函数执行次数;\n线程安全,保障在多 Go 程的情况下,函数仍然只执行一次,比如锁。\n\n2.1 源码\n下面看一下 sync.Once 结构,其有两个变量。使用 done 统计函数执行次数,使用锁 m 实现线程安全。果不其然,和上面的猜想一致。\n// Once is an object that will perform exactly one action.\n//\n// A Once must not be copied after first use.\ntype Once struct {\n // done indicates whether the action has been performed.\n // It is first in the struct because it is used in the hot path.\n // The hot path is inlined at every call site.\n // Placing done first allows more compact instructions on some architectures (amd64/386),\n // and fewer instructions (to calculate offset) on other architectures.\n done uint32\n m Mutex\n}\n\nsync.Once 仅提供了一个导出方法 Do(),参数 f 是只会被执行一次的函数,一般为对象初始化函数。\n// go version go1.17 darwin/amd64\n\n// Do calls the function f if and only if Do is being called for the\n// first time for this instance of Once. In other words, given\n// var once Once\n// if once.Do(f) is called multiple times, only the first call will invoke f,\n// even if f has a different value in each invocation. A new instance of\n// Once is required for each function to execute.\n//\n// Do is intended for initialization that must be run exactly once. Since f\n// is niladic, it may be necessary to use a function literal to capture the\n// arguments to a function to be invoked by Do:\n// config.once.Do(func() { config.init(filename) })\n//\n// Because no call to Do returns until the one call to f returns, if f causes\n// Do to be called, it will deadlock.\n//\n// If f panics, Do considers it to have returned; future calls of Do return\n// without calling f.\n//\nfunc (o *Once) Do(f func()) {\n // Note: Here is an incorrect implementation of Do:\n //\n // if atomic.CompareAndSwapUint32(&o.done, 0, 1) {\n // f()\n // }\n //\n // Do guarantees that when it returns, f has finished.\n // This implementation would not implement that guarantee:\n // given two simultaneous calls, the winner of the cas would\n // call f, and the second would return immediately, without\n // waiting for the first's call to f to complete.\n // This is why the slow path falls back to a mutex, and why\n // the atomic.StoreUint32 must be delayed until after f returns.\n\n if atomic.LoadUint32(&o.done) == 0 {\n // Outlined slow-path to allow inlining of the fast-path.\n o.doSlow(f)\n }\n}\n\nfunc (o *Once) doSlow(f func()) {\n o.m.Lock()\n defer o.m.Unlock()\n if o.done == 0 {\n defer atomic.StoreUint32(&o.done, 1)\n f()\n }\n}\n\n抛去大段的注释,可以看到 sync.Once 实现非常简洁。Do() 函数中,通过对成员变量 done 的判断,来决定是否执行传入的任务函数。执行任务函数前,通过锁保证任务函数的执行和 done 的修改是一个互斥操作。在执行任务函数前,对 done 做一个二次判断,来保证任务函数只会被执行一次,done 只会被修改一次。\n2.2 done 为什么是第一个字段?\n从字段 done 前有一段注释,说明了done 为什么是第一个字段。\ndone 在热路径中,done 放在第一个字段,能够减少 CPU 指令,也就是说,这样做能够提升性能。\n热路径(hot path)是程序非常频繁执行的一系列指令,sync.Once 绝大部分场景都会访问 o.done,在热路径上是比较好理解的。如果 hot path 编译后的机器码指令更少,更直接,必然是能够提升性能的。\n为什么放在第一个字段就能够减少指令呢?因为结构体第一个字段的地址和结构体的指针是相同的,如果是第一个字段,直接对结构体的指针解引用即可。如果是其他的字段,除了结构体指针外,还需要计算与第一个值的偏移(calculate offset)。在机器码中,偏移量是随指令传递的附加值,CPU 需要做一次偏移值与指针的加法运算,才能获取要访问的值的地址。因为,访问第一个字段的机器代码更紧凑,速度更快。\n\n参考 What does “hot path” mean in the context of sync.Once? - StackOverflow\n\n3.性能差异\n我们以一个简单示例,来说明使用 sync.Once 保证函数只会被执行一次和多次执行,二者的性能差异。\n考虑一个简单的场景,函数 ReadConfig 需要读取环境变量,并转换为对应的配置。环境变量在程序执行前已经确定,执行过程中不会发生改变。ReadConfig 可能会被多个协程并发调用,为了提升性能(减少执行时间和内存占用),使用 sync.Once 是一个比较好的方式。\ntype Config struct {\n GoRoot string\n GoPath string\n}\n\nvar (\n once sync.Once\n config *Config\n)\n\nfunc ReadConfigWithOnce() *Config {\n once.Do(func() {\n config = &Config{\n GoRoot: os.Getenv(\"GOROOT\"),\n GoPath: os.Getenv(\"GOPATH\"),\n }\n })\n return config\n}\n\nfunc ReadConfig() *Config {\n return &Config{\n GoRoot: os.Getenv(\"GOROOT\"),\n GoPath: os.Getenv(\"GOPATH\"),\n }\n}\n\n我们看下二者的性能差异。\nfunc BenchmarkReadConfigWithOnce(b *testing.B) {\n for i := 0; i \n执行测试结果如下:\ngo test -bench=. main/once\ngoos: darwin\ngoarch: amd64\npkg: main/once\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkReadConfigWithOnce-12 670438965 1.732 ns/op\nBenchmarkReadConfig-12 13339154 87.46 ns/op\nPASS\nok main/once 3.006s\n\nsync.Once 中保证了 Config 初始化函数仅执行了一次,避免了多次重复初始化,在并发环境下很有用。 \npowered by Gitbook该文章修订时间:\n2022-05-08 19:22:09\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"url":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","title":"4.使用 sync.Cond 通知协程","keywords":"","body":"1.简介2.使用场景3.实现原理4.使用示例5.注意事项1.简介\nsync.Cond 是基于互斥锁/读写锁实现的条件变量,用来协调想要访问共享资源的那些 Goroutine。当共享资源的状态发生变化的时候,sync.Cond 可以用来通知等待条件发生而阻塞的 Goroutine。\nsync.Cond 基于互斥锁/读写锁,那它和互斥锁的区别是什么呢?\n互斥锁 sync.Mutex 通常用来保护共享的临界资源,条件变量 sync.Cond 用来协调想要访问共享资源的 Goroutine。当共享资源的状态发生变化时,sync.Cond 可以用来通知被阻塞的 Goroutine。\n2.使用场景\nsync.Cond 经常用在多个 Goroutine 等待,一个 Goroutine 通知(事件发生)的场景。如果是一个通知,一个等待,使用互斥锁或 channel 就能搞定了。\n我们想象一个非常简单的场景:\n有一个协程在异步地接收数据,剩下的多个协程必须等待这个协程接收完数据,才能读取到正确的数据。在这种情况下,如果单纯使用 chan 或互斥锁,那么只能有一个协程可以等待,并读取到数据,没办法通知其他的协程也读取数据。\n这个时候,就需要有个全局的变量来标志第一个协程数据是否接受完毕,剩下的协程,反复检查该变量的值,直到满足要求。或者创建多个 channel,每个协程阻塞在一个 channel 上,由接收数据的协程在数据接收完毕后,逐个通知。总之,需要额外的复杂度来完成这件事。\nGo 语言在标准库 sync 中内置一个 sync.Cond 用来解决这类问题。\n3.实现原理\nsync.Cond 内部维护了一个等待队列,队列中存放的是所有在等待这个 sync.Cond 的 Go 程,即保存了一个通知列表。sync.Cond 可以用来唤醒一个或所有因等待条件变量而阻塞的 Go 程,以此来实现多个 Go 程间的同步。\nsync.Cond 的定义如下:\n// Cond implements a condition variable, a rendezvous point\n// for goroutines waiting for or announcing the occurrence\n// of an event.\n//\n// Each Cond has an associated Locker L (often a *Mutex or *RWMutex),\n// which must be held when changing the condition and\n// when calling the Wait method.\n//\n// A Cond must not be copied after first use.\ntype Cond struct {\n noCopy noCopy\n\n // L is held while observing or changing the condition\n L Locker\n\n notify notifyList\n checker copyChecker\n}\n\n每个 Cond 实例都会关联一个锁 L(互斥锁 Mutex,或读写锁 RWMutex),当修改条件或者调用 Wait 方法时,必须加锁。\nsync.Cond 的四个成员函数定义如下:\n// NewCond returns a new Cond with Locker l.\nfunc NewCond(l Locker) *Cond {\n return &Cond{L: l}\n}\n\nNewCond 创建 Cond 实例时,需要关联一个锁。\n// Wait atomically unlocks c.L and suspends execution\n// of the calling goroutine. After later resuming execution,\n// Wait locks c.L before returning. Unlike in other systems,\n// Wait cannot return unless awoken by Broadcast or Signal.\n//\n// Because c.L is not locked when Wait first resumes, the caller\n// typically cannot assume that the condition is true when\n// Wait returns. Instead, the caller should Wait in a loop:\n//\n// c.L.Lock()\n// for !condition() {\n// c.Wait()\n// }\n// ... make use of condition ...\n// c.L.Unlock()\n//\nfunc (c *Cond) Wait() {\n c.checker.check()\n t := runtime_notifyListAdd(&c.notify)\n c.L.Unlock()\n runtime_notifyListWait(&c.notify, t)\n c.L.Lock()\n}\n\nWait 用于阻塞调用者,等待通知。\n调用 Wait 会自动释放锁 c.L,因为 Wait() 会将主调加入条件变量的通知列表,需要修改条件变量,所以主调在调用 Wait() 前需要对条件变量进行上锁,主调加入条件变量的通知列表后再解锁。\n执行runtime_notifyListWait会挂起调用者所在的 Goroutine。如果其他协程调用了 Signal 或 Broadcast 唤醒了该协程,那么 Wait 方法在结束阻塞时,会重新给 c.L 加锁,并且继续执行 Wait 后面的代码。\n主调对条件的检查,使用了 for !condition() 而非 if,是因为当前协程被唤醒时,条件不一定符合要求,需要再次 Wait 等待下次被唤醒。为了保险起,使用 for 能够确保被唤醒后条件一定符合后,再执行后续的代码。\n// Signal wakes one goroutine waiting on c, if there is any.\n//\n// It is allowed but not required for the caller to hold c.L\n// during the call.\nfunc (c *Cond) Signal() {\n c.checker.check()\n runtime_notifyListNotifyOne(&c.notify)\n}\n\n// Broadcast wakes all goroutines waiting on c.\n//\n// It is allowed but not required for the caller to hold c.L\n// during the call.\nfunc (c *Cond) Broadcast() {\n c.checker.check()\n runtime_notifyListNotifyAll(&c.notify)\n}\n\nSignal 只唤醒任意 1 个等待条件变量 c 的 goroutine,无需锁保护。Broadcast 唤醒所有等待条件变量 c 的 goroutine,无需锁保护。\n4.使用示例\n我们实现一个简单的例子,三个协程调用 Wait() 等待,另一个协程调用 Broadcast() 唤醒所有等待的协程。\nvar done = false\n\nfunc read(name string, c *sync.Cond) {\n c.L.Lock()\n for !done {\n c.Wait()\n }\n fmt.Println(name, \"starts reading\")\n c.L.Unlock()\n}\n\nfunc write(name string, c *sync.Cond) {\n fmt.Println(name, \"starts writing\")\n time.Sleep(time.Second)\n done = true\n fmt.Println(name, \"wakes all\")\n c.Broadcast()\n}\n\nfunc main() {\n cond := sync.NewCond(&sync.Mutex{})\n\n go read(\"reader1\", cond)\n go read(\"reader2\", cond)\n go read(\"reader3\", cond)\n write(\"writer\", cond)\n\n time.Sleep(time.Second * 3)\n}\n\n\ndone 即多个 Goroutine 阻塞等待的条件。\nread() 调用 Wait() 等待通知,直到 done 为 true。\nwrite() 接收数据,接收完成后,将 done 置为 true,调用 Broadcast() 通知所有等待的协程。\nwrite() 中的暂停了 1s,一方面是模拟耗时,另一方面是确保前面的 3 个 read 协程都执行到 Wait(),处于等待状态。main 函数最后暂停了 3s,确保所有操作执行完毕。\n\n运行结果如下,注意 reader 的打印顺序是随机的。\n$ go run main.go\nwriter starts writing\nwriter wakes all\nreader3 starts reading\nreader1 starts reading\nreader2 starts reading\n\n更多关于 sync.Cond 的讨论可参考 How to correctly use sync.Cond? - StackOverflow。\n5.注意事项\n\nsync.Cond 不能被复制\n\nsync.Cond 不能被复制的原因,并不是因为其内部嵌套了 Locker。因为 NewCond 时传入的 Mutex/RWMutex 指针,对于 Mutex 指针复制是没有问题的。\n主要原因是 sync.Cond 内部是维护着一个 Goroutine 通知队列 notifyList。如果这个队列被复制的话,那么就在并发场景下导致不同 Goroutine 之间操作的 notifyList.wait、notifyList.notify 并不是同一个,这会导致出现有些 Goroutine 会一直阻塞。\n\n唤醒顺序\n\n从等待队列中按照顺序唤醒,先进入等待队列,先被唤醒。\n\n调用 Wait() 前要加锁\n\n调用 Wait() 函数前,需要先获得条件变量的成员锁,原因是需要互斥地变更条件变量的等待队列。在 Wait() 返回前,会重新上锁。重新上锁的原因是主调在 Wait 后会进行解锁操作,避免重复解锁引发 panic。\n\nsync.Cond 和 channel 的区别?\n\n实际上,我们可以使用无缓冲 channel 充当条件变量实现 Go 程同步。通过 close(ch) 表示广播通知,其他的 Goroutine 使用 for select 结构来接收通知就行了。\n还是以上面给出的同步示例,这里换作 channel 来实现。\nvar done = false\nvar ch = make(chan struct{})\n\nfunc read(name string) {\n for !done {\n select {\n case \n运行输出如下,注意 reader 的打印顺序是随机的。\n$ go run main.go\nwriter starts writing\nwriter wakes all\nreader1 starts reading\nreader3 starts reading\nreader2 starts reading\n\n既然 channel 可以实现,看起来代码更加简洁,那么 sync.Cond 的存在还有必要吗?\n实际上 sync.Cond 与 Channel 是有区别的,channel 定位于通信,用于一发一收的场景,sync.Cond 定位于同步,用于一发多收的场景。虽然 channel 可以通过 close 操作来达到一发多收的效果,但是 closed 的 channel 已无法继续使用,而 sync.Cond 依旧可以继续使用。这可能就是“全能”与“专精”的区别。 \npowered by Gitbook该文章修订时间:\n2022-05-08 22:45:54\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"参考文献.html":{"url":"参考文献.html","title":"参考文献","keywords":"","body":"项目布局代码风格功能设计最佳性能项目布局\ngithub.com/golang-standards/project-layout\n代码风格\nGo Code Review Comments\nGolang Readability 考点汇总\n功能设计\ngithub.com/uber-go/guide\nGo语言最佳实践Go-advice\n最佳性能\ngo-proverbs\ngithub/dgryski/go-perfbook\nHigh Performance Go Workshop - Dave Cheney\natomic 的原理与使用场景\n极客兔兔 | Go 语言高性能编程\n深度解密Go 语言之sync.Pool - Stefno - 博客园\nGolang内存分配逃逸分析 - Gopherzhang\nGo语言的内存逃逸分析 - Golang梦工厂 \npowered by Gitbook该文章修订时间:\n2022-05-09 22:37:19\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"}}} \ No newline at end of file +{"index":{"version":"0.5.12","fields":[{"name":"title","boost":10},{"name":"keywords","boost":15},{"name":"body","boost":1}],"ref":"url","documentStore":{"store":{"./":["\"img\"","&&","(faq)","05","09:59:32","2009","2022","23","=","===","ask","c++","code","coder","comment","common","console.log(\"plugin","e.target.tagnam","effect","frequent","function(e){","gitbook该文章修订时间:","go","golang","gopher","gopher,想更好地管理","go,以及第三方书籍","go,这应该是入门必读最佳读物。","java","languag","layout,给出布局建议。一个清晰的项目结构,能帮忙我们高效有序的管理与日俱增的业务代码。不会随着代码量的递增,项目代码变得凌乱而不堪入目。","mistak","popup....\");document.onclick","power","program","project","pr,它将会变得更好。","question","review","specif","standard","tour","wiki","window.open(e.target.src,e.target.src)}img{cursor:pointer}","|","不仅易用,也很易学,这得益于与之匹配的丰富学习资料。go","之势。","也是不错的选择。","互动勘误","代码,想写出更加高效易读的","代码,想让自己拥有一个更好的编码风格,","内容简介","写出更优质的代码。","前言","功能实践","各个公司或组织,都有各自不同的","向","和","如果你对文章内容有任何疑问和建议,欢迎在应相应章节下留言探讨。","如果是","如果是想全面了解","如果是想深入了解","官方","官方文档","官方的入门指南","官方网站已有系统全面的指导文档,新手可以快速通过官方资料,轻松上手。此外,第三方资料,也有百家争鸣之势。有介绍","实践建议,帮助我们更好的使用","年诞生以来,因其出色的并发能力和简单易用的低门槛,已在各大厂商的后台高并发业务场景崭露头脚,甚至有取代传统后台服务开发语言","开发经验的","想离","最佳实践更近一步,建议看看本书。","本书为开源书籍,希望得到大家的协同共建,不断迭代丰富。如果有你的建议和","本书主要分为四个方面:","本书所述内容谈不上是","本书由来","本书由来内容简介目标读者互动勘误","本文所述内容均为参考意见,并非标准。其中许多是","本文结合官方编码建议,大厂编码规范、开源技术书籍和自身项目经验,尽可能以简短的语言给出一套行之有效","源码应该是你的首选,再结合精彩的第三方分析,如","源码进行剖析介绍实现原理的,有介绍高并发场景下实战指导的,也有介绍使用","的共同追求。为书写效率更高的代码,本文将结合","的初学者,建议先略过本书,了解下","的最佳实践更近一步。","的最佳实践,但希望能够帮助广大","的通用准则,其他扩展内容也参考了很多官方指南,包括但不限于。","目标读者","编码建议的。至此,本书应运而生。","编码建议,让您的代码高效易读。","编码规范,但大同小异。规范是一种倡导,不遵守并不代表错误,但当大家都遵守规范时,你会发现,整个世界将变得整洁有序。","编码风格","编码风格从简洁易读的角度出发,参考","虽然简单,但其功能特性却不单一。其丰富的语言特性,在使用时还是有很多不同的姿势。本书从功能特性出发,给出","语法知识和语言特性与,也建议先略过本书。go","语言圣经","语言基础和实战的,有对","语言实现原理,还是建议先略过本书。虽然本书略有涉及,但不够全面。go","语言特性,从常用数据结构、内存管理和并发,三个方面给出相关建议。","语言自","语言设计与实现,应该会大有收获。","进行高性能编程的,等等。很遗憾的是,没有发现一个系统介绍","那么到底是谁适合阅读本书呢?如果你是一位有","项目布局","项目布局参考业界认可度较高的","高性能编码","高效的代码是我们每一个",",并结合自身项目团队编码规范,力争给出全面、认可度较高的编码风格,帮助大家写出风格统一的简洁高效的代码。"],"第一篇:项目布局/项目布局.html":["\"img\"","#","&&","(travis、circle、drone)配置和脚本放在",")、容器(",")、操作系统(",")包配置和脚本放在","/api","/asset","/build","/build/ci","/build/packag","/cmd","/config","/deploy","/deploy。","/doc","/exampl","/githook","/init","/intern","/internal/app/myapp","/internal/pkg/","/pkg","/readme.md","/script","/src","/test","/test/data","/test/testdata。请注意,如果你需要忽略目录中的内容,go","/third_parti","/tool","/vendor","/web","/websit","05","1","1.13","1.前言2.项目布局2.1","14:53:51","18","2.1","2.2","2.3","2.4","2.5","2.6","2.7","2.项目布局","2022","3.小结","639","=","===","ami","api","application)。","asset","build","ci","cmd","cn.md。","code","comm","commit","compose、kubernetes/helm、mesos、terraform、bosh)。注意,在一些存储库中(特别是使用","config","console.log(\"plugin","deb、rpm、pkg","deploy","doc","docker","e.target.tagnam","exampl","function(e){","git","gitbook该文章修订时间:","githook","github","github/hashicorp/terraform/makefile。","go","go1.4","godoc","golang,目前官方团队并未提供权威规范。不过不用担心,我们依然有一个规范可以参考,那就是业界推崇的","gopher","https://proxy.golang.org","iaas、paas、系统和容器编排部署配置和模板(dock","init","intern","internal,所有名为","iso","java","kubernet","layout","layout。","list","logo,readm","main","makefile(如果有的话)变得小而简单,例如","markdown","modul","modules。从","modules,我们并不需要","offici","openapi","packag","page","pkg","popup....\");document.onclick","power","project","readm","readme.md","readme_zh","readme,相得益彰。","script","spa(singl","specification。","src","standard","supervisord)配置。","swagger","sysv)和进程管理(runit,","test","third_parti","tool","ui。","upstart,","util","vendor","web","websit","wikipedia","window.open(e.target.src,e.target.src)}img{cursor:pointer}","|","下面,就像不应该拥有","不应该拥有的目录","不应该拥有的目录/src3.小结参考文献1.前言","不管是什么语言,开发什么项目,一个稍大的项目,必然要面临如何管理项目结构布局的问题,因为一个简洁清晰的布局是项目可读的关键。","不要在该目录下放太多的代码,如果代码可以被其他项目导入使用,请放到","中引用的图片等。","中的代码,作为项目的主应用目录。目录也可以包含多个可执行文件,子目录名称一般与可执行文件相对应(如:/cmd/myapp","中,而应用的共享代码可以放在","丰富的示例将帮助用户更加便捷快速的了解上手一个项目,再加上","代码目录","代码目录/cmd/internal/pkg/vendor2.3","以后,go","们努力的结果。此项目布局是通用的,建议并非强制,当然我们最好遵守,因为这能让我的项目布局看起来更加规范,易于交流和维护。","作为他们的模块代理服务器)。使用","你实际的代码可以放在","你的项目结构布局看起来应该像下面这个样子。","你还可以在","使用","信息是否符合规范。","公有库代码(外部项目可以使用)","公有库代码(外部项目可以使用)。","关于项目的设计文档,用户的使用文档等(除了","其他目录","其他目录/docs/tools/examples/third_party/githooks/assets/website2.7","函数,调用","初始化信息","初始化信息。","参考文献","可执行文件目录","可执行文件目录。","含有","和","外部依赖库","外部依赖库。","外部辅助工具","外部辅助工具。","如","如不同环境(测试、正式)的服务配置信息。","如放置测试工具和测试依赖数据。对于较大的项目,有一个数据子目录是有意义的。例如,你可以使用","如果代码不可复用或者你不希望其他项目使用,请放到","如果你不使用","如果发现此项目布局规范并不适用自己的项目,可在其基础上适当做出改变,不要泥古拘方。","如果手动管理依赖包可以将依赖包放到该目录,当然推荐使用依赖包管理工具","存放","导入代码。","将你的","将你的云(","将更加人性化,如","应用程序和公共库的示例","应用程序和公共库的示例。","应用程序特定组件,如静态","应用程序的组件","应用程序目录","应用程序目录/web2.5","应用程序项目的基本布局,是社区","开始,官方推荐使用新的依赖管理系统","或","打包和持续集成","打包和持续集成。","执行各种构建、安装、分析等操作的脚本","执行各种构建、安装、分析等操作的脚本。","持续集成配置与脚本","整体风格","整体风格2.2","有些","有些语言自身提供了目录结构规范,但对于较为年轻的","服务对外接口","服务对外接口。","服务应用程序目录","服务应用程序目录/api2.4","构建依赖包","格式的说明文档,是用户了解一个项目最直观的入口。如果有需要,添加不同语言的","注意,1.11","测试相关","测试相关。","源码目录","源码目录。","生成的文档之外)均可以放在该目录。","的子目录都不能被导出。","目录。","目录下。","目录下,","目录内部增加一些代码结构来区分共享和非共享的。虽然它并不是必须的(尤其是小的项目),但是最好能从视觉上区分包的用途。","目录的项目结构是一种常见的布局模式,但并不是所有人都接受它,一些","目,但这通常发生在开发人员有","社区的人并不推荐它。","私有库代码(仅本项目使用)","私有库代码(仅本项目使用)。","简体中文","系统初始化(systemd,","背景。不同类型的代码应该有自己的目录,而不是全部放到","资源、服务器端模板和","起,从编译器层面限制该目录不可被导出,而且不只是项目根目录下的","还会忽略以“.”或“_”开头的目录或文件,因此在如何命名测试数据目录方面有更大的灵活性。","还启用了模块代理功能(默认使用","这些脚本帮助根目录下","这是","这样的目录,因为这些名称含义太泛了,违背了单一职责原则。","这里放不希望被其他应用程序或者库导入的代码。注意:从","这里放希望被其他应用程序或者库导入的代码,所以在这里放东西之前要三思。","这里是服务对外接口的实现,定义接口时,我们应该遵循","进行自动化管理。","通常只包含一个简单的","通用应用目录","通用应用目录/configs/init/scripts/build/deployments/test/readme.md2.6","部署的应用程序),这个目录被称为","部署相关","部署相关。","配置信息","配置信息。","钩子","钩子。","钩子,可以帮忙我们在代码提交时完成一些检测,比如分支名称和","页面,则在这里放置项目网站数据。","项目依赖的第三方工具,比如","项目工具","项目工具。","项目布局","项目文档","项目文档。","项目用到的相关资源文件,比如项目","项目确实有一个","项目网站数据","项目网站数据。","项目说明","项目说明。","项目资源文件","项目资源文件。","项目配套工具,实现这些工具可以使用从",")。"],"第二篇:代码风格/1.格式化.html":["\"img\"","%d,","%s\",","&&","//","05","09:59:33","1.格式化","2022","23","=","===",">","a,","b)","bad","console.log(\"plugin","e.target.tagnam","err","err.error())","err:%v\",","file","fmt","fmt.printf(\"%v这里要空格%v\",","function(e){","gitbook该文章修订时间:","go","gofmt","gofmt,如","goland","good","id","logger.errorf(\"num","logger.errorf(\"num:%d,","num,","popup....\");document.onclick","power","set","tool","watcher","window.open(e.target.src,e.target.src)}img{cursor:pointer}","中可勾选","主体风格占位符主体风格","代码必须用","使用制表符进行缩进,使用空白符进行对齐。","占位符","在保存代码时可设置自动执行","字符串占位符,如果输入数据来自外部,建议使用%q进行安全转义。","工具格式化。","并指定作用范围。","格式化字符串中多个占位符之间要有空格。","的","通过%v打印错误信息时建议加冒号。"],"第二篇:代码风格/2.代码行.html":["!=","\"img\"","%v","%v\\n\",","&&","(int(bar)","+","...","//","0","0)","0,","05","09:59:33","1","1,","13,","144,","2","2,","2.0,","2.代码行","2022","21,","23","233)","3,","3.0}[i","34,","5,","55,","55,89,","8,","80","800","89,",":=","=","===",">","[]float64{1.0,","bad","bodi","console.log(\"plugin","e.target.tagnam","err","fmt.printf(\"%f\\n\",","fmt.printf(\"%v","foo","foo()","func","function(e){","gitbook该文章修订时间:","gofmt","good","i]","import","int","int(bar)","nil","popup....\");document.onclick","power","res,","res.ret","return","struct","tag","v","v+1","v+1)","var","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","||","}","一行代码不要超过120列,超过的情况,使用合理的方法换行。","不必要的空行","不要添加没必要的括号。","作为下标不留空格","作为入参不要留空格","作为输入参数或者数组下标时,运算符和操作数之间不需要空格,紧凑展示。","例外场景:","函数体第一行不要换行。","函数调用和对调用结果的处理,是紧密相连的,不能加空行。","函数长度不能超过","工具生成的代码","括号和空格","换行方式","文件长度不能超过","模块语句","的逻辑。","行。","行数","行长度换行方式不必要的空行括号和空格行数行长度","语句前不要换行。","运算符和操作数之间要留空格","运算符和操作数之间要留空格。","遵循","采用惰性换行,换行前应尽可能占满当前行不留空位。"],"第二篇:代码风格/3.字符串.html":["\"","\"img\"","\"rsp","\"tom,jerry,spike\"","\"unknown","%v","%v\",","&&","+","//","05","09:59:33","2022","23","3.字符串",":=","=","===","[]string{\"tom\",\"jerry\",\"spike\"}","`unknown","bad","code","code)","code,","console.log(\"plugin","e.target.tagnam","error:\"test\"`","fmt.sprintf(\"rsp","function(e){","gitbook该文章修订时间:","go","good","is\"","list","map","msg","msg)","name:\\\"test\\\"\"","popup....\");document.onclick","power","receiv","str","var","wanterror","window.open(e.target.src,e.target.src)}img{cursor:pointer}","不要使用字符串表示","和","字符串字面量","字符串拼接","支持使用原始字符串字面值,可以使用反引号来表示原生字符串。在需要转义的场景下,我们应该尽量使用使用反引号表示字符串,避免转义。","结构。","行内字符串拼接时,出于性能的考虑,待拼接字符串数量较少(fmt.sprintf()。"],"第二篇:代码风格/4.依赖管理.html":["\"../net\"","\"bar/testutil\"","\"encoding/json\"","\"fmt\"","\"foo\"","\"github.com/olivere/elastic/v7\"","\"github.com/xxxxxxxx/utils/formatlog\"","\"github.com/xxxxxxxx/xxxserver/pkg/formatlog\"","\"go.uber.org/atomic\"","\"golang.org/x/sync/errgroup\"","\"img\"","\"myproject/controller\"","\"myproject/models\"","\"os\"","\"strings\"","\"xxxx.com/proj/net\"","&&","(",")",".",".形式导入包",".,因为它使程序难以阅读,比如使用","//","05","09:59:33","2022","23","4.依赖管理","404","=","===","bad","bar/testutil,后者导入","baz","console.log(\"plugin","e.target.tagnam","elast","foo","foo_test","foo。所以我们使用import","foo,让测试文件假装是包","fork","function(e){","git","git.code.oa.com/group/myrepo","gitbook该文章修订时间:","github","github.com/astaxie/beego/orm","github.com/xxx/xxx。内部包是指不能被外部","go","go.sum文件必须提交,不要添加到.gitignore规则中。","go1.11","goimport","good","import","init","mod","modul","packag","popup....\");document.onclick","power","public","vendor","window.open(e.target.src,e.target.src)}img{cursor:pointer}","一份。","上的包要确认活跃度,不知名的包可能会被下架或出现不兼容的版本升级情况,必要情况下可","不要使用相对路径导入内部包,应该使用完整的路径引入包。","中,因为它使用","了。","以上必须使用","会自动添加依赖的包,并移除未引用的包。把依赖包按字母序升序排列,并对包进行分组管理。通过空行隔开,默认分为标准库包和非标准库包(第三方包和内部包)。","作为依赖管理的项目不要提交","使用","依赖规范import","内部包","包名和","只能用于测试文件,且必须是为了解决循环依赖,才能使用。","在这种情况下,测试文件不能在包","外部包","如引入","导入的包按照先后顺序应该分为三组:","工具自动格式化引入的包名,import","带域名的包名都属于外部包,如","引入第三方包要慎重。","必要时给包起个别名","标准包","模式。go","的一部分,尽管它不是。除了这一种情况,不要使用import","的包。","目录。","目录下,而不是具体业务目录下。","管理依赖的项目,","规则为准。","规范","规范依赖规范","规范原则上以","该包已经","路径名不一致时,或者多个相同包名冲突时,使用别名代替会有更好的可读性。","这样的标识符,不知道其是顶级标识符还是导入包中的顶级标识符。","通用的功能包,应该放在"],"第二篇:代码风格/5.初始化.html":["\"\"","\"\",","\"0\",","\"a\"","\"add\"},","\"bar\"","\"bar\"}","\"config\",","\"config.yaml\"),","\"doe\",","\"error\"","\"foo\"","\"foo\"}","\"img\"","\"john\",","\"my_env\"","\"subtract\"},","&&","&_config)","&config)","&t{name:","(","(myerror)",")","+","...","//","0","0,","05","09:59:33","0},","0,但不够直观","0,更加直观","1","1)","2","2)","2022","23","3","3)","5.初始化",":=","=","==","===","[]int","[]int{}","[]string)","[]struct{","_","_config","_defaultfoo","_e","add","add1","add2","admin:","append(nums,","area","b","bad","bad:","blue","bool","cap)","cloud","color.new(0x0000ff)","color.new(0x00ff00)","color.new(0xff0000)","config","console.log(\"plugin","const","cwd,","database/sql、编码类型注册表等;","defaultfoo()","e.target.tagnam","envvar","err","error","error()","f","f()","false,","firstname:","float64","foo","foo()","foo(m","foo{","func","function","function(e){","gitbook该文章修订时间:","give","good","googl","green","handl","handle(info)","i/o","i/o,包括文件系统、网络和系统调用。","in64(0)","inconsist","info,","init()","init()初始化","init(),当","int","int64","iota","ioutil.readfile(","isempty(","k","k1:","k2:","k3:","lastname:","len(s)","loadconfig()","m","m1","m2","m[\"key\"].(info)","m[k1]","m[k2]","m[k3]","magic”。","main()","make()","make([]int)","make([]int,","make(map[t1]t2)","make(map[t1]t2,","map","map[string]interface{})","map[t1]t2","map[t1]t2{","map[t1]t2{}","map初始化","map,这样可以在初始化时指定元素。","middlename:","multipli","myerror","myerror{}","new(t)","nil","nil。","nil,另一个不是),并且在不同的情况下(例如序列化),这两个切片的处理方式可能不同。","num","op","oper","or,","os.getwd()","panic","path.join(cwd,","popup....\");document.onclick","power","raw,","red","return","s","s1","s2","slice","slice。","slice申明变量避免使用","slice,这意味着,","sptr","sptr.name","string","struct","struct{}","struct初始化","subtract","sval","test","true,","true}","type","t{name:","user","user{","user{\"john\",","user{}","v1","v1,","v2","v2,","v3","v3,","var","var。","volum","want","want:","window.open(e.target.src,e.target.src)}img{cursor:pointer}","x","yaml.unmarshal(raw,","{","{add,","{give:","{subtract,","}","}{","不可避免时,init()","不管是全局切片还是局部切片,使用","不能满足这些要求的代码可能要在","个或更少的字段,则可以在测试表中省略字段名称。","仅将相关的声明放在一组。不要将不相关的声明放在一组。","优先使用","使用make()初始化,并指定容量。","使用字段名初始化结构体。","例外,如果是相似的一组变量,请使用","例外:在字段名提供有意义上下文的地方可以显示指定零值。如表驱动单元测试中的测试用例,即使字段为零值,限制指定零值,通过字段名可清晰地表达用例的含义。","例外:如果","例外:如果有","全局变量使用","全局变量申明使用","关键字并省略类型。","关键字申明,一般情况下其类型与表达式的类型一致,这种情况下可省略其类型。","凡事无绝对,某些情况下,init()","函数中被调用(或程序生命周期中的其他地方),或作为","函数之间的关系可能会使代码变得脆弱和容易出错;","函数本身的一部分。特别是打算给其他程序使用的库应该特别注意代码行为的完全确定性,","函数的顺序或副作用。虽然","函数而不是字面量,因为这样看起来更容易和申明区分开来。","切片","切片是有效的切片,但它不等于长度为","切片,代码会更加简洁清晰。","创建。","初始化","初始化结构指针变量使用字面量","初始化结构指针变量时,请使用&t{}代替new(t),可以与结构体初始化在代码风格上保持一致。","包含固定的元素列表,则使用字面量初始化","变量申明的位置尽量靠近使用的地方。","另外,分组使用的位置没有限制,我们也可以在函数内部使用它们。","可能更可取或是必要的:","和其他形式的确定性预计算的优化。","因此","在写入时会","基于当前目录","声明","声明到一组。","声明和初始化在视觉上很相似","声明和初始化在视觉上是不同的","声明结构,因为这样更加简洁,其各个字段值为字段类型对应的零值。","声明零值结构使用关键字","如果全局变量仅在单个函数内使用,则应该定义为局部变量。","如果在声明中省略了结构的所有字段,请使用","如果表达式的类型与所需的类型不完全匹配,请指定类型。","容量大小。","对于变量、常量的声明,相似的声明应该放在一组。类型的定义同样适用。","就近申明。","尽可能地在初始化时提供","尽可能避免使用","局部变量使用短变量声明形式(:=)。","已经明确了返回一个字符串类型,因此我们没有必要显式指定类型。","应该做到:","或者为了更好的可测试性","是一个有效的","是一个有效的长度为","显示指明","来代替。","由于","申明","申明变量","的","的切片(一个为","的非","相似的声明放在一组。","省略结构中的零值字段。","空切片使用","类型。","类型的实例,但是我们要","而不是执行“init","而非","虽然默认为","记住,虽然","读写安全","返回一个","避免使用","长度为","非零值","顺序是明确的,但代码可以更改,","(1)不能表示为单个赋值的复杂表达式;","(1)您不应明确返回长度为零的切片。应该返回nil","(1)无论程序环境或调用如何,行为都必须是完全确定的;","(2)可插入的钩子,如","(2)要检查切片是否为空,请始终使用","(2)避免依赖其他","(3)对","(3)避免访问或操作全局变量和环境状态,如机器信息、环境变量、工作目录、程序参数/输入等;","(3)零值切片(用var声明的切片)可立即使用,无需调用","(4)避免"],"第二篇:代码风格/6.错误处理.html":["!=","!ok","\",","\"b\",","\"c\"}","\"fmt\"","\"img\"","\"log\"","\"time\"","%s\",","%v\",","%v\",err))","&&","(","(error,","(int,",")","*","+0x48","+0x65","...","//","//手动抛出","/users/dablelv/work/code/test/main.go:14","/users/dablelv/work/code/test/main.go:16","0","05","09:59:33","10:48:42","2022","2022/03/27","23","3","44","6","6.错误处理",":=","=","==","===","======begin","[4]","[]string)","[]string{\"a\",","[running]:","_","```go","argument","arr","arr[4])","bad","code","comma","console.log(\"plugin","continue,","creat","defer","do()","e.target.tagnam","err","err)","err.error())","error","error\")","error)","error:","errors.new(\"an","errors.new(fmt.sprintf(\"modul","error。","etc.","except","exception\")","exe.run()","exec","f()","fail","failures)的主要根源。如果发生错误,该函数应该返回错误,让调用方决定如何处理它。","fast","fmt.errorf(\"modul","fmt.errorf(\"run","fmt.errorf(\"som","fmt.errorf。","fmt.fprintln(os.stderr,","fmt.println(\"======aft","fmt.println(\"======begin","fmt.println(err)","func","func()","function(e){","geton","getone()","gitbook该文章修订时间:","go","good","goroutin","goroutine,必须在入口处捕获","handl","i.(string)","import","index","int)","len(args)","length","log","log.fat","log.fatalf","log.println(\"exec","log.println(\"hello,\",","log.println(debug.stack())","main","main()","main.main","main.main.func2()","nil","nil,但是满足其他逻辑进入到","normal","ok","ok。","os.exit(1)","out","packag","panic","panic(\"an","panic(\"nil","panic(44)","panic/recov","panic:","panic。","panic。因为","panic。因此,请始终使用","panic。每个自行启动的","panic,因为这样可以记录错误的同时结束程序,方便排查问题。","panic,并打印详细堆栈信息或进行其它处理。","panic,建议使用","pointer","popup....\");document.onclick","power","rang","record","recov","recover();","recover。","required\")","return","run(arg","run(os.args[1:])","run(os.args[1:]);","runtim","slice","someth","t","t,","time.second)","time.sleep(1","us","var","window.open(e.target.src,e.target.src)}img{cursor:pointer}","work======","work======\")","x","x,","xx.close()可以不用显式处理。","xxx:","y","y,","{","||","}","}()","一个可能引发的问题就是","下面是一个反面示例,其他","不是错误处理的合适策略,仅当发生不可恢复的异常(如","不要包装系统调用错误,并给出一些没意义的附加信息。","不要随便","中使用,一般用来捕获程序运行期间发生异常抛出的","中无法捕获当前","中调用才会生效。","中需要使用","优雅地处理错误。","作为函数的值返回,必须对","作为函数返回值且有多个返回值的时候,error","使用","值将引发","包中使用","包中程序初始化是一个例外,如程序启动时,文件无法打开或数据库无法连接导致程序无法正常运行可使用","原则。","只有在","只能在当前","可显示使用空标识符(下划线)忽略。","在","在业务逻辑处理中禁止使用","块内,读取","处理","处理panic","处理recov","处理类型断言error","如果","如果不关心是否成功,可显示忽略","如果为","如果出现失败应该立即返回error,如果继续处理,则属于特殊情况需要添加注释。","如果函数返回值需用于初始化其他变量,则采用下面的方式。","对于其它的包,可导出的接口也不能有","式","式。如果不关心是否成功,ok","引用)时,才可以","当y与err都为空时,函数的调用者会出现错误的调用逻辑","必须在","必须是最后一个参数。","或","或程序主动抛出的","捕获最晚要在当前","是级联失败(cascad","显示处理","最顶层将其捕获,在其他","来取代","模拟","生成带参数的","用于捕获","的","的异常,禁止滥用","程序将意外终止并输出:","类型断言","类型断言使用","类型断言的单个返回值形式如果断言失败将产生","结束程序而不是","被捕获。","越界运行时抛出的","运行结果:","进行处理,或使用空白标识符忽略。对于defer","采用独立的错误流进行处理。","错误判断独立处理,不与其他变量组合判断。"],"第二篇:代码风格/7.注释.html":["\"","\"img\"","%s\",","&&","(","(/*",")","*/","*/)","*/,","*attrmodel","*common.context)","+","...","....","/*","//","05","09:59:33","1","1。","2022","23","2。","3。","4。","7.注释","=","===","aliases)都必须有注释说明。","bad","basic","bool","bool)","c","code","config\"","console.log(\"plugin","const","constant","data","definition)和类型别名(typ","demograph","done","driven","e.target.tagnam","email","faketim","flagconfigfil","flagconfigfile1","flagconfigfile2","flagconfigfile3","flagconfigfile4","fmt.sprintf(\"fak","fullnam","func","func(usernam","function(e){","functions.","future.","gener","gitbook该文章修订时间:","go","good","html.","implement","int","iota","isloc","islocal,","local","math","mathemat","mayb","name","newattrmodel(ctx","newtattrmodel","output","packag","popup....\");document.onclick","power","printinfo(\"foo\",","printinfo(nam","provid","region","region,","return","review","statu","status)","status=","statusdon","statusinprogress","statusreadi","storageclass","string","string)","string,","struct","such","templat","textual","time.tim","todo","true","true)","true,","type","unknownregion","user","username)","var","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","不要用注释删除代码。","中英文之间应该有空格。","函数信息描述\"。","函数名","函数注释","函数调用中意义不明确的实参可能会损害代码可读性。当参数名称的含义不明显时,请为参数添加","前都应该被删除,除非添加注释讲解为什么不删除,","包信息描述。","包名","包如果有多个","包注释","变量名","变量和常量注释","后面要有空格。","命令行参数。","命名清晰的地方,不要添加无意义的注释。类型注释","块注释即在代码块前给出一个总的说明,然后每行变量或常量的末尾给出详细注释,这样看起来更加简洁。","大块变量或常量定义时的注释方式。","存储类型","对于上面的示例代码,还有一种更好的处理方式是将上面的","导出与非导出接口均需要有注释。","导出的函数和方法(结构体或接口下的函数称为方法)都必须有注释。","并且标明后续处理建议(如删除计划)。","必要情况下字段给出注释。","或者","所有注释掉的代码在提交","接口注释","描述\"。","描述\",斜线后面紧跟一个空格。","文件中(一般是和包同名的文件)即可。","文件,只需要出现在一个","族群","是属性数据层操作类的工厂方法","标准库时间的类型别名","样式注释","格式为//","格式为:\"//","每个包都应该有一个包注释。","每个需要导出的变量和常量都必须有注释说明。","每个需要导出的类型定义(type","每个需要导出的自定义结构体或者接口都必须有注释说明。","注意,如果方法的接收器为不可导出类型,可以不注释,但需要质疑该方法可导出的必要性。","注释对变量和常量进行简要介绍,放在常量或变量定义的前一行。独行注释格式为:\"//","注释对结构进行简要介绍,放在结构体定义的前一行。格式为:\"//","注释描述函数或方法功能、调用方等信息。格式为:\"//","注释结束添加点或句号,参考标准库源码注释。","特殊实现需要注释。","用户结构定义了用户基础信息","程序中每一个被导出的(大写的)名字,都应该有一个文档注释。","类型名","类型换成自定义类型。将来,该参数可以支持不仅仅局限于两个状态(true/false)。","结构体信息描述\"。","结构体内的可导出成员变量名,如果是个生僻词或意义不明确的词,必须要单独给出注释,放在成员变量的前一行或同一行的末尾。","结构体名","结构体注释","解析函数应该注明解析字符串的范例,并明确不能处理的异常情况。","该注释对类型进行简要介绍,放在定义的前一行。","返回指定用户名的完整名称。","通用","通用包注释函数注释结构体注释变量和常量注释类型注释接口注释在编码阶段同步写好类型、变量、函数、包注释,注释可以通过godoc导出生成文档。","避免参数语义不明确。","配置文件的命令行参数名","配置文件的命令行参数名。","需要描述谁,在什么场景下,如何使用接口。","非导出的函数,如果比较简单,不需要注释。"],"第二篇:代码风格/8.命名.html":["\"/api/v3/projects/%s/merge_request/%s/commits\"","\"1.0.0\"","\"bar\")","\"foo\",","\"http\"","\"https\"","\"https://git.code.oa.com\"","\"img\"","\"john\",","\"john@example.com\",","%q","%q\",","&&","(","(e","(f","(format","(https://golang.org/ref/spec#predeclared_identifiers)。","(https://rakyll.org/styl","(n","(string","(system",")","*notfounderror)","*resolveerror)","...","//","05","09:59:33","20","2022","23","8.命名",":=","=","===",">","[]byte)","[]data){}","[predeclar","[style","allow","api","apiclient、repoid、userid;","apiclient;","append","appvers","array","bad","blog","bool","broken\")","byte","c","c,","call)","cap","car","classesuid","close","common","complex","complex128","complex64","console.log(\"plugin","const","constants:","context.context,","conversion)","copi","customer、wikipage、account、addressparser,它不应是动词。","data","dataetl(ctx","data、info","delet","e.file)","e.path)","e.target.tagnam","echart","email","email:","er","err","errbrokenlink","errcouldnotopen","errnotfound","error","error()","error)","errormessag","errors.a","errors.new(\"could","errors.new(\"link","errors.new(\"not","error。","err。","etldata(ctx","f.err","f.error","f.str","f.string","fals","file","filterhandlermap","float32","float64","fmt","fmt.sprintf(\"/api/v3/projects/%s/merge_request/%s/commits\",","fmt.sprintf(\"fil","fmt.sprintf(\"resolv","foo","foo)","found\")","found\",","func","function(e){","functions:","getlinecount()","getmrcommitsuri()","gitbook该文章修订时间:","go","goechart","good","guidelin","handleerrormessage(error","handleerrormessage(msg","has,is,can","helper","http","i/o)","identifiers]","imag","info","int","int,","int16","int32","int64","int8","interfac","iota","languag","len","linecount","linecount,","make","map","md5","me,this,self","mrcommitsuri","msg","name","net/url","new","nil","notfounderror","open\")","optohandl","packag","packages/)。","packages]","panic","paniclinesparsing(){}","parsepaniclines(){}","path","popup....\");document.onclick","power","print","println","rang","read","read(p","reader","reader,writer。","real","recov","recover()","resolveerror","return","rune","scheme","slice","sliceindex","specif","start","start([]byte)","stop","stop()","str","strconv","string","string()","string)","struct","syscal","tgithost","to/for。","true","type","types:","u","uid","uidarray","uidslic","uidsliceslic","uint","uint16","uint32","uint64","uint8","uintptr","urlarray","urlarray;","user","username:","user{","util","util、common、misc、global。packag","value:","var","verifyflow)","vet之类的工具会正确地指出这些和其他情况下的隐式问题。","window.open(e.target.src,e.target.src)}img{cursor:pointer}","xxx.pb.go,gotest","xxx_test.go","zero","{","}","一起使用。","三个以上函数的接口名,类似于结构体名。","不用复数。如","不要使用2/4来表达英文","不要使用大而全的无意义包名。","不要用宽泛、无意义的名字,如:","不要轻易使用别名。","两个函数的接口名综合两个函数名。","二维切片或数组。","代码生成工具自动生成的代码可排除此规则(如协议生成文件","传输协议。","但我们仍然可以在的包内将其和","作为后缀,如","作用域内隐式覆盖","作用域较大的名字(全局变量),不要使用缩写,要有明确的意义。","作用域较小的名字(局部变量/函数参数),尽量使用简短的名字。","作用域隐藏内置","保持","全局量中不要包含格式化字符,否则必然违反就近原则。","其他情况都应该使用该名词原有的写法,如","函数名必须遵循驼峰式,首字母根据访问控制决定使用大写或小写。","函数命名","函数应该以动词开头。","加密传输协议","包名应该为小写单词,不要使用下划线或者混合大小写,使用多级目录来划分层级。","包名谨慎使用缩写。当缩写是程序员广泛熟知的词时,可以使用缩写。例如:","包命名","匹配。","单个函数的接口名以","只有一个源文件的包,包名应该和文件名保持一致。","名字应该追求清晰且越来越收敛,符合‘单一职责’原则,而不是像common一样,什么都能往里面放,越来越膨胀,让依赖关系变得复杂,不利于阅读、复用、重构。注意,xxx/utils/encryption这样的包名是允许的。","命名不能采用","命名规则基本保持和结构体命名规则一致。","和","在使用预先分配的标识符时编译器不会报告错误,但是诸如go","在视觉上是相似的","多行初始化。","多行定义。","好。","好,sliceindex","如","如无必要,不要起和包相同的名字。","如果变量为私有,且特有名词为首个单词,则使用小写,如","如果是枚举类型的常量,需要先创建相应类型。","字符串的搜索存在二义性","字节数组读取接口。","对于存储为全局变量的错误值,根据是否导出,使用前缀","对于自定义错误类型,请改用后缀","导出以下两个错误,以便此包的用户可以将它们与errors.i","导出全局变量。","导出全局常量。","小写,如果有多个单词使用连字符分隔。","小汽车结构申明。","尽量不要用拼音命名。","尽量采取有意义、简短的包名,尽量不要和标准库冲突。","工具自动生成文件","常量命名","或","或者","接口命名","接收器的名称在函数超过","推荐以类名第一个英文首字母的小写作为接收器的命名。","文件名应该采用小写,并且使用下划线分割各个单词。","文件命名","方法接收器命名","明文传输协议","更多可参考","未导出全局变量。","未导出全局常量。","概述了几个内置的,不应在","比","比如多个班级下的学生id。","特有名词时,需遵循以下规则:","现在是明确的","的一部分。","的名字和目录一致。","私有量和局部量规范一致,均以小写字母开头。","等单词开头。","简单明了的包命名,如:time、list、http。","类型,则名称应以","结构体名应该是名词或名词短语,如","结构体命名","结构体的定义和初始化格式采用多行。","缩略语要么全小写,要么全大写。","而不是net/urls。","若量类型为","虽然这些使用内置标识符的自定义字段可以编译通过,但对","行的时候不要用单字符。","要好。","要好,i","要比","详细的专有名词列表可参考这里。","语言规范","读取整个给定的字节数据并返回读取的长度","这个错误没有被导出,因为我们不想让它成为公共","这个错误没有被导出,因为我们不想让它成为我们公共","这个错误被导出,以便这个包的用户可以将它与","这类意义太宽泛的结构体名。","这类易混淆名称。","进行匹配。","通用","通用规则","通用规则项目命名包命名文件命名函数命名结构体命名接口命名量命名通用常量命名方法接收器命名错误命名避免使用内置名称命名是代码规范中很重要的一部分,统一的命名规范有利于提高代码的可读性,好的命名仅仅通过命名就可以获取到足够多的信息。","避免使用","避免使用内置名称","采用有意义、简短的文件名。","采用驼峰命名方式,首字母根据访问控制采用大写或者小写。","里面的下划线)。","量名不应该以类型作为前缀/后缀。","量名应该是名词,进行时和过去式可以做形容词,成为量名的一部分。","量名遵循驼峰式,根据是否导出决定首字母大小写。","量命名","错误命名","错误示例:urlarray,应该写成","非缩略语则应该使用驼峰命名。","项目中使用的标识符","项目命名"],"第二篇:代码风格/9.流程控制.html":["!=","!allowuserlogin","\"\"","\"a\"","\"b\"","\"darwin\":","\"img\"","\"linux\":","&&","+=","...","//","0","05","09:59:33","1","10","100","2,","2022","23","3,","4,","5}","9.流程控制",":=",";","=","==","===","[]int{1,","_,","```go","allowuserlogin","arg","args[0]","array","b","b,","bad","bar","bool","case","cfg.decode(data)","cfg.decode(data);","codeusing(f,","console.log(\"plugin","d)","d,","data,","default:","default。","defer","delete(m,","e.target.tagnam","else。","err","error","errorcod","errors.new(\"miss","f,","f.close","f.close()","f.stat()","fals","file\")","file.chmod(0664)","file.chmod(0664);","fmt.printf(\"%s.\\n\",","fmt.println(\"linux.\")","fmt.println(\"mac","fmt.println(&v)","fmt.println(cfg)","foo","foo()","foo(bar","foo(key","freebsd,","func","function(e){","gitbook该文章修订时间:","good","goto","goto,其他框架或底层源码推荐尽量不用。","handl","ifforrangeswitchreturngoto程序退出方式if","if。","int","int)","ioutil.readall(f)","ioutil.readfile(name)","ioutil.readfile(name);","key","key)","key.expired()","len(args)","len(str)","log.fat","log.fatal(\"miss","log.fatal(err)","m","main","main()","name","nil","openbsd,","os","os\")","os)","os.args[1:]","os.open(name)","packag","pathkey","pathkey:","plan9,","popup....\");document.onclick","power","rang","return","return。","run()","run();","runtime.goos;","someth","str","string)","sum","switch","true","urlkey","urlkey:","v","var","window.open(e.target.src,e.target.src)}img{cursor:pointer}","windows...","{","}","一旦有错误发生,马上返回。","不必要的","不要使用双重否定。","业务代码禁止使用","中退出程序且只退出一次。","之外使用函数调用的结果,则不应尝试缩小范围。","仅在","使用","使用os.exit或者log.fatal*退出程序,而不是panic。","使用了","函数中调用os.exit或log.fatal*且只调用一次。如果有多个错误场景停止程序执行,请将该逻辑放在单独的函数并从中返回错误。","则需要以","判断字符串是否为空,这样更加直观。","判断条件较为复杂时,考虑封装成函数。","又如","在","多个相似","如果只需要第一项(key),就丢弃第二项(value)。","如果只需要第二项,则把第一项置为空标识符(下划线)。","如果在","如果我们调用","如果需要在","对两个值进行判断时,被比较的值放在左边。","对于","将不会被执行","尽早","当程序的多个函数具有退出能力时会存在一些问题:","循环变量的地址不要存储。","循环变量的地址指向的是同一个变量,我们可以通过赋值给一个同名的变量,通过变量逃逸,来达到取不同地址的目的。","必须要有","打印的是不同的地址","打印的是相同的地址","把简单的逻辑判断放前面,复杂的逻辑判断放后面。","接受初始化语句,尽可能缩小变量作用域。","替换。","最小化变量作用域。","用","的两个分支中都设置变量,则可以将其替换为单个","程序退出方式","类型的变量,应直接进行真假判断。","结束。","这会精简main()函数,并将所有关键业务逻辑放入一个单独的、可测试的函数中。","通常可以简写为","队列里的函数调用,这增加了跳过重要清理任务的风险。","需要有一个缺省处理逻辑","(1)不明显的控制流:任何函数都可以退出程序,因此很难对控制流进行推理;","(2)难以测试:退出程序的函数也将退出调用它的测试,这使得函数很难测试,并跳过了尚未被运行的其他代码;","(3)跳过清理:当函数退出程序时,会跳过已经进入"],"第二篇:代码风格/10.函数.html":["!=","\"application/json\"","\"application/json\",","\"img\"","%v\",","&&","&something{}","(*node,","([]userinfo,","(f","(lat,","(map[uint64]userinfo,","(n","(s","*","*bookingservice)","*foo)","*node","*node)","*someth","*something)","+1,一个","...","...string)","...uint64)","//","0","05","09:59:33","1","1)","10.函数","1,不要使用魔法数字。","2","2022","23","3","3.14","5",":=","=","==","===",">=2","[]int)","[]string)","_,","addarea","addarea(area","append(s.areas,","area","area)","bad","bool","bytes.newbuffer([]byte(req)))","calccost(n","calccost(s.weights)","close()","console.log(\"plugin","const","const,","continu","cost()","data","db.query(v)","defer","defer。","e.target.tagnam","err","error","error)","fals","field","fields,","fields.close()","filtersomething(valu","float64","float64)","float64,","foo(getids())","foo(ids)","func","func()","function(e){","getarea(r","getids()","getlength(r","getuserinfobatch","getuserinfobatch(uid","gitbook该文章修订时间:","good","hasarea","hasarea(area","http.get(url)","http.post(url,","id","inccounter()","inccountern()","info","info,","int","int。","iscontinue,","jsoncontenttyp","locat","location()","log.printf(\"invalid","long","map。","map,slice,chan,interfac","metrics.incrcounter(cntcachemisskey,","modifyuserinfo(user)","new(order.areaorder)","newsomething()","nil","p.processunity()","parent1","parent1()","parent2","parent2()","pi","popup....\");document.onclick","power","process(v)","r","rang","resp,","resp.body.close()","ret","ret,","retcod","return","rsp,","s.area","s.areaorders[area]","s.hasarea(area)","s.lock()","s.unlock()","slice","someth","split()","splitn()。","sql","srverr.errareaconflict","stop()","string)","struct,","struct{","true","type","v","v)","v.call();","v.f1","v.send()","v:","valu","var的后面。","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","{...}","}","}()","不存在。如果不允许部分失败,使用","不要传递指针。","不要返回多个用于控制流程的状态。","不要这样使用","个,如果超过,请封装成新的类型。","个,或有相同类型的返回值,或者从上下文中不清楚返回值的含义,使用命名返回,其它情况不建议使用命名返回。","中执行。","从函数名开始算第一层,当函数的嵌套深度超过4层,往往会导致圈复杂度过高,函数变得复杂不可读,我们可以通过拆分函数的方式来减少嵌套深度。","代码也可以优先处理条件不满足或错误的情况,尽早返回或继续循环来减少嵌套。","入参&返回值成员函数局部变量defer减少嵌套(圈复杂度)魔法字面量函数分组与顺序入参&返回值","入参和返回值个数均不能超过","入参和返回值均以小写字母开头。","入参和返回值顺序根据关联性排在一起。","减少嵌套(圈复杂度)","函数分组与顺序","函数应按粗略的调用顺序排序。","函数应该放在","函数进行资源的释放。","判断是否有错误发生之后,再","单函数圈复杂度最大值","即可。可参考标准库包的","同一文件中的函数应按接收者分组。","和","和一个","圆周率","如下面这个函数的第二个参数是没有必要的,大部分时候都是","如果传入的参数通常是固定的,考虑通过实现多个函数实现默认参数。","如果字符串字面量出现","如果局部变量仅被使用一次,且不能起到解释逻辑的作用时,应该删除局部变量,直接内联。","如果操作成功,再","如果方法不使用类的成员,应该实现为非成员函数。","如果非成员函数要使用类的多个属性时,应该实现为成员函数。","导出的函数应该放在非导出函数前面","尽量用","尽量用值传递,非指针传递。","局部变量","嵌套深度不能超过4层。","应当使用如下的方式:","建议调整为这样:","当存在资源管理时,应紧跟","成员函数","或者","批量查询函数返回值使用","批量获取用户信息(允许部分失败)。","批量获取用户信息(需全部成功)。","按照上面的规则,下面给出好坏文件内容布局示例。","有时后我们需要根据多个","条件不满足或出现错误应尽早返回。","构造函数应该放在其他函数之前,如newxyz()/newxyz()。","查询对应的值,可能会出现部分失败的情况,如某个","次,则禁止使用,用一个有名称的常量代替,可读性更好。","正常逻辑不应该在","注入","添加成功或出错。","由于函数是按接收者分组的,因此普通工具函数应在文件末尾出现。","示例,实际不要这么查询,防止","禁止在循环中使用","类型为","继续使用","继续使用field","表示执行是否成功,而不是用","表示执行状态的返回值应该放在最后。","返回值超过","返回值,如果允许部分失败使用","还是","释放资源。","除了","魔法字面量"],"第二篇:代码风格/11.单元测试.html":["\"\",","\"1\",","\"192.0.2.0\",","\"192.0.2.0:8000\",","\"192.0.2.0:http\",","\"1:8\",","\"8\",","\"8000\",","\":8000\",","\"http\",","\"img\"","&&","*testing.t)","//","05","07","11.单元测试","19:01:50","2","2022",":=","=","===","[]struct{","_,","assert.equal(t,","bad","console.log(\"plugin","e.target.tagnam","err","err)","example_test.go。","func","func(t","function(e){","gitbook该文章修订时间:","give","give:","good","host)","host,","import","net.splithostport(\"192.0.2.0:8000\")","net.splithostport(\"192.0.2.0:http\")","net.splithostport(\"1:8\")","net.splithostport(\":8000\")","net.splithostport(tt.give)","popup....\");document.onclick","port)","port,","power","rang","require.noerror(t,","string","t.run(tt.give,","test","testexample。","testsplithostport(t","tt","tt.wanthost,","tt.wantport,","wanthost","wanthost:","wantport","wantport:","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","})","},","}{","使用表驱动的方式编写用例,代码看上去会更简洁。","倍(1600","分组等其他规范细节和普通文件保持一致。","单元测试文件名命名规范为","单测文件行数限制是普通文件的","开头,例如","每个重要的可导出函数都要首先编写测试用例,测试用例和正规代码一起提交方便进行回归测试。","测试用例的函数名称必须以","由于单测文件内的函数都是不对外的,所有可导出函数可以没有注释,但是结构体定义时尽量不要导出。","行)。单测函数行数限制也是普通函数的2倍(160行)。圈复杂度、列数限制、","表驱动测试."],"第二篇:代码风格/12.杂项.html":["\"img\"","&&","05","09:59:33","1.基本类型偏执通用场景结构体2.单一职责包&文件函数3.goroutine4.应用服务5.常用工具1.基本类型偏执","12.杂项","2.单一职责","2022","23","3.goroutin","4.应用服务","5.常用工具","=","===","console.log(\"plugin","e.target.tagnam","errgroup.group。","function(e){","gitbook该文章修订时间:","go","gofmt","goimport","golint","goroutin","goroutine一定要梳理清楚","int。","javascript","jslint","panic","popup....\");document.onclick","power","readme.md","recover。","recover,很容易发生","return","rpc、db","struct","tag","time.second,不要使用","vet","window.open(e.target.src,e.target.src)}img{cursor:pointer}","一个函数内不应该混杂多个实现细节,需要将独立的逻辑封装成函数。","一个函数只负责一个职责。","一个文件中出现多个结构体时,需要注意观察是否有重复的成员。","一个结构体中,成员较多,且多个成员有明显关联关系,需要封装新的结构体。","一次循环尽量只做一件事,不用担心多次循环。","中的","代码与官方推荐的格式保持一致,于是所有格式有关问题,都以","出现状态/类型等字眼时,需要使用枚举。","函数","包&文件","同一层级的逻辑细节不要拆分。","启动的","因为其他","复杂的执行/错误信息,需要定义结构体保存。","如果要开启多个线程执行一组动作,并且要等待全部完成后继续后续逻辑,考虑使用","导出的函数/变量的职责必须与包&文件职责高度一致。","导致整个进程退出。","工具可以帮我们静态分析我们的源码存在的各种问题,例如多余的代码,提前","应用服务建议有","应用服务必须要有接口测试","意义不明的成员变量,应该定义类型描述作用。","抛出的异常。如果启动的","时间类型尽量使用内置定义,如","是否符合标准等。编译前先执行代码静态分析。","是无法捕当前","最好有","有时候你会看到某个类里有很多基本类型字段,但是你隐约地能区分出某些字段好像应该在一起,如手机号和带区号的电话号码、描述某个日期范围的开始日期和结束日期,它们应该有一个真实的载体,如联系方式类和时间范围类)","本身在代码规范方面做了很多努力,很多限制都是语法要求,例如左大括号不换行,引用的包或者定义的变量不使用会报错。此外","没有","的","的基础上增加了自动删除和引入包。","的工具,主要功能就是检测代码中不规范的地方。","的结果为准。","的退出机制,防止泄漏。","的逻辑,","相关操作需要独立封装","结构体","自动格式化代码,保证所有的","解决,","解析、校验、计算的逻辑应该进行分离","说明文档,介绍服务功能、使用方法、部署时的限制与要求、基础环境依赖等","读、写、计算的逻辑应该进行分离","还是提供了很多好用的工具帮助我们进行代码的规范。","通用场景","遇到","配置文件的读取,和对象初始化应该分开,不要让对象自己根据配置文件初始化,保证构造函数足够简单","除了包的主逻辑文件中内容允许导出,包内的辅助函数都应该是非导出的。","需要判断当前文件是否应该归属于当前包,主要以职责进行判断。",",vet",",大部分的格式问题可以通过",",此工具在",",类似",",而不应全部零散放在一个大类型中。"],"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":["\"img\"","&&","*_type","*itab","...","//","05","07","1.不需要指向","16","19:01:50","2022","=","===","_type","bad","bar(&foo)","bar(foo)","bar(i","console.log(\"plugin","data","e.target.tagnam","efac","fmt.println(unsafe.sizeof(foo))","foo","foo{...}","func","function(e){","gitbook该文章修订时间:","go","good","ifac","interfac","interface{}","interface{})","map、slice、channel","popup....\");document.onclick","power","runtim","string","struct","t","tab","type","unsafe.point","var","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","一种是不含任何方法的空接口runtime.eface:","一种是带有一组方法的接口runtime.iface:","为什么可以这样,因为接口实质上在底层用两个字段表示:","具体可以看下","包两种接口类型的定义。","当然,凡事无绝对。如果需要修改接口变量本身,那么应该使用指向接口变量的指针,当然你必须清楚自己在干什么。","我们几乎不需要使用指向接口的指针,应该将接口直接赋值给接口,这样在传递过程中,实质上传递的底层数据仍然是指针,即不存在值拷贝的情况。","我们可以看下接口变量的内存宽度。","源码","的底层结构后,我们应该知道在传递过程中一般也不需要使用指向它们的指针。","的指针","类似地,在了解","(1)一个指向某些特定类型信息的指针;","(2)一个指向具体数据的指针。如果存储的数据是指针,则直接存储。如果存储的数据是一个值,则存储指向该值的指针。"],"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":["\"img\"","&&","(*handler)(nil)","(*handler)(nil)将无法编译通过。","(h","*handler)","*handler)、切片和映射是","*http.request)","*zap.logg","...","//","05","07","19:01:50","2.编译期验证","2022","=","===","_","api","bad","console.log(\"plugin","e.target.tagnam","func","function(e){","gitbook该文章修订时间:","good","h","handler","http.handler","http.responsewriter,","interfac","log","loghandl","loghandler)","loghandler{}","nil;对于结构类型是空结构。","popup....\");document.onclick","power","r","servehttp(w","struct","type","var","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","上面这三条是编译器对接口的检查机制,","合理性","在编译时验证接口的合理性,这包括:","如果*handler与http.handler的接口不匹配,那么语句var","实现了接口;","对于指针类型(如","赋值的右边应该是断言类型的零值。","错误地使用接口会在编译期报错。所以可以利用这个机制让部分问题在编译期暴露。","(1)导出类型的部分","(2)导出或非导出类型实现了接口且属于某类型的一部分(匿名嵌套);","(3)任何其他情况都违反接口合理性检查,终止编译并通知用户。"],"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":["\"img\"","#","&&","(bucket","(can","(d","(s","(use","*","*[]*bmap","*bmap","*driver)","*mapextra","*stats)","...","//","05","07","19:01:50","2022","2^b","3.在边界处拷贝",":=","=","==","===","[]trip)","alive,","allow","approxim","array","avoid","b","ba","bad","bmap.overflow","both","bucket","bucket.","buckets.","buckets;","builtin)","cap","cell","cmd/compile/internal/reflectdata/reflect.go.","compiler'","console.log(\"plugin","contain","copy(d.trips,","count","count==0.","counter","d.settrips(trips)","d.trip","defer","definition.","detail","e.target.tagnam","elem","encod","evacu","evacuated)","extra","field","first","flag","format","free","func","function(e){","gitbook该文章修订时间:","go","good","grow","half","hash","hash0","header","hiter.","hmap","hmap.buckets.","hmap.extra.oldoverflow.","hmap.extra.overflow","hmap.oldbuckets.","hold","however,","incrnoverflow","indirect","inline,","int","items)","k,","keep","key","len","len()","len(s.counters))","len(trips))","less","live","loadfactor","log_2","make","make([]trip,","make(map[string]int,","map","map.","map[string]int","mapextra","maps.","mark","mu","nevacu","nextoverflow","nil","non","note:","noverflow","number","oldbucket","oldoverflow","option","order","overflow","pointer","pointer.","pointers.","popup....\");document.onclick","power","present","previou","progress","rang","result","result[k]","return","runtime.hmap:","runtime.slice:","s.counter","s.mu.lock()","s.mu.unlock()","scan","see","seed","settrips(trip","size","size,","slice","snapshot","snapshot()","src/runtime/map.go","src/runtime/slice.go","stat","stats.snapshot()","stay","store","struct","such","sure","sync","sync.mutex","trip","trips)","trips[0]","trips[0],但不会影响","type","uint16","uint32","uint8","uintptr","unsafe.point","up","us","v","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","不再受互斥锁保护,可能会引发并发读写的错误","作为函数参数传入时,如果您存储了对它们的引用,则用户可以对其进行修改。","你是要修改","包含了指向底层数据的指针,因此在需要复制它们时要特别注意。","吗?","和","在","在接收","在返回","底层核心数据结构","我们可以找到","我们可以找到切片的底层数据结构","或","时,同样的,请注意用户对暴露内部状态的","时,请记住当","源码文件","现在是一个拷贝","的修改。","返回当前状态。","这里我们修改"],"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":["\"img\"","&&","(",")","+","//","0","05","07","1","19:01:50","2022","4.枚举从","=","===","_","add","add=0,","add=1,","assign","bad","blank","bytes","console.log(\"plugin","const","e.target.tagnam","enum","first","float64","function(e){","gitbook该文章修订时间:","go","good","identifi","ignor","int","iota","kb","logoutput","logtofil","logtofile=1,","logtoremot","logtoremote=2","logtostdout","logtostdout=0,","multipli","multiply=2","multiply=3","oper","popup....\");document.onclick","power","subtract","subtract=1,","subtract=2,","type","valu","window.open(e.target.src,e.target.src)}img{cursor:pointer}","并没有关键字","开始","开始。","开始,如果需要使第一个值为有意义的值,我们应该从","当然,凡事无绝对。如果第一个枚举值为零是有意义的,如当零值是理想的默认行为时。","来定义枚举类型,引入枚举的标准方法是声明一个自定义类型和一个使用了自增器","由于第一个值从","的","组来表示枚举值。","表示连续的非类型化整数常量,它的值是对应常量的下标(从零开始),它可用于构造一组相关常数:","预先声明的标识符"],"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":["\"img\"","&&","&s1{}","&s2{}","(s","*s)","*s2)","//","05","07","1.方法接收器为值和指针的区别","19:01:50","2022",":=","=","===","address","console.log(\"plugin","data","e.target.tagnam","effect","f","f()","func","function(e){","gitbook该文章修订时间:","go","interfac","map[int]*s{1:","map[int]s{1:","pointer","popup....\");document.onclick","power","read()","read。","read,也可以调用","return","s","s)","s.data","s1","s1)","s1ptr","s1val","s1{}","s2","s2ptr","s2val","s2{}","sptr","sptrs[1].read()","sptrs[1].write(\"test\")","str","string","string)","struct","struct{}","sval","svals[1]","svals[1].read()","svals[1].write(\"test\")","type","valu","var","vs.","window.open(e.target.src,e.target.src)}img{cursor:pointer}","write(str","write。","{","{\"a\"}}","{}","}","下面代码无法通过编译,因为","中一节","从前文可知,可取址的值可以调用接收器为指针的方法,但这里为何不能将值","你只能通过值调用","使用值接收器的方法既可以通过值调用,也可以通过指针调用。带指针接收器的方法只能通过指针或","做了说明,因为接收器为指针的方法会修改接受器,为了避免产生这种错误的行为,便禁止将值赋给和指针接收器方法集匹配的接口。","取址。","呢?","在","指针既可以调用","接收器为值和指针的方法在调用方式上是有区别的。","方法中没有使用值接收器。","是一个值,而","的","类似的,使用值接收器和指针接收器来实现接口,在判断与接口是否匹配时,也存在一定的区别。","编译不通过,因为无法对","调用。","赋给接口"],"第三篇:功能设计/2.函数/2.使用defer释放资源.html":["\"img\"","&&","//","05","07","19:01:50","2.使用","2022","=","===","bad","console.log(\"plugin","defer","defer。","e.target.tagnam","function(e){","gitbook该文章修订时间:","p.count","p.lock()","popup....\");document.onclick","power","return","unlock","window.open(e.target.src,e.target.src)}img{cursor:pointer}","使用","分支时,很容易遗忘","当有多个","提升可读性是值得的,因为使用它们的成本微不足道。尤其适用于那些不仅仅是简单内存访问的较大方法,在这些方法中其他计算的资源消耗远超过","的开销非常小,只有在您可以证明函数执行时间处于纳秒级的程度时,才应避免这样做。使用","释放资源","释放资源,诸如文件和锁。"],"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":["!=","\"img\"","%w\",","&&","'defer'","'for'","*db.row)","...","//","05","07","1.将","19:01:50","2.将","2022","3.不要在",":=","=","===","`fields`","bad","call","console.log(\"plugin","db.query(...)","db.query(.....)","defer","defer,因为这可能会导致资源泄漏(poss","defer,因为释放资源不会尽可能早地发生(在每次迭代结束时),只有在","defer,资源将在不需要时被立即释放。","e.target.tagnam","err","err)","error","error:","fields,","fields.close()","fmt.errorf(\"db.queri","foo(r","foo(rs);","func","func()","function(e){","gitbook该文章修订时间:","handl","leak,","loop)。","nil","popup....\");document.onclick","power","resourc","return","rows.next()","someth","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","}()","不是基于代码块的,而是基于函数的。你在循环中分配资源,那么不应该简单地使用","函数才会被执行。这带来的后果就是,如果迭代次数过多,那么可能导致资源长时间得不到释放,造成泄漏。","如果有一个类似上面分配资源的代码段,我们应该将其包裹在一个函数中(匿名函数或有名函数)。在该函数中,使用","尽可能地避免在","循环中使用","放在匿名函数中","放在有名函数中然后调用之","语句之后(所有迭代之后),即所在函数结束时,defer","调用有名函数"],"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":["\"img\"","&&","&smap{","(m","*smap","*smap)","//","05","07","1.零值","19:01:50","2022",":=","=","===","api,但又没有明确说明,既导致了模糊的文档,又泄露了","bad","console.log(\"plugin","data","data:","defer","e.target.tagnam","func","function(e){","get(k","gitbook该文章修订时间:","good","m.data[k]","m.lock()","m.mutex.lock()","m.mutex.unlock()","m.unlock()","make(map[string]string),","map[string]str","mu","mu.lock()","mutex","mutex、lock","new(sync.mutex)","newsmap()","popup....\");document.onclick","power","return","smap","string","string)","struct","sync.mutex","sync.rwmutex","type","unlock","var","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","作为其他结构体一个字段时,应该使用值而不是指针。即使该结构体不被导出,也不要直接把","及其方法是","和","导出的字段和","嵌入到结构体中。","方法是","是有效的","是有效的,所以指向","的实现细节。good","的实现细节,对其调用者不可见。","的指针基本是不必要的。","部分会导致字段","部分可以做到字段","零值"],"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":["\"img\"","&&","//","0","05","07","1","1)","19:01:50","2.channel","2022","64)",":=","=","===","bad","c","channel","console.log(\"plugin","e.target.tagnam","function(e){","gitbook该文章修订时间:","good","int)","int,","make(chan","popup....\");document.onclick","power","size","window.open(e.target.src,e.target.src)}img{cursor:pointer}","为","为零。任何其他尺寸都必须经过严格的审查,而不是拍脑袋给出一个大致的值。我们需要考虑如何确定大小,什么原因会导致","在高负载下被填满并阻塞写入者,以及当这种情况发生时系统会发生哪些变化。","应为","应该足以满足任何情况!","或","或无缓冲","或是无缓冲的。默认情况下,channel","是无缓冲的,其","要么是"],"第三篇:功能设计/4.错误处理/1.错误处理.html":["!=","\"fail","\"failed\"","\"img\"","\"new","%q","%v","%w","%w\",","%w。","&&","¬found)","¬founderror{file:","(e","*notfounderror","*notfounderror)","//","05","07","1.错误处理","1.错误类型2.错误包装1.错误类型","19:01:50","2.错误包装","2022",":=","=","===","api","bad","bar","can't","check","console.log(\"plugin","creat","custom","dynam","e.file)","e.target.tagnam","err","err)","errcouldnotopen","error","error\")","error()","error.","errors,","errors.a","errors.as(err,","errors.i","errors.is(err,","errors.new","errors.new(\"could","errors.new,但对于后者,我们必须使用","error。","file","file)","file}","fmt.errorf","fmt.errorf(","fmt.errorf(\"fil","fmt.sprintf(\"fil","foo","foo.errcouldnotopen)","foo.open(\"testfile.txt\");","foo.open();","foo:连接被拒绝”。","found\",","func","function(e){","gitbook该文章修订时间:","good","gracefully。","handl","level","new","nil","notfound","notfounderror","open\")","open()","open(fil","packag","panic(\"unknown","popup....\");document.onclick","power","return","s,","static","store.new()","store:","string","string)","struct","to\"之类的短语来保持上下文简洁,当错误通过堆栈向上传递时,它会一层一层被堆积起来:","top","type","var","window.open(e.target.src,e.target.src)}img{cursor:pointer}","ye","{","}","为你的错误添加上下文,","使用","例如,使用errors.new表示带有静态字符串的错误。如果调用者需要匹配并处理此错误,则将此错误导出为变量以支持将其与errors.is匹配。","函数。","前缀)。","另外请参考:don't","否则,尽可能在错误消息中添加上下文","和","在为返回的错误添加上下文时,通过避免使用\"fail","在调用失败时传播错误有三个主要方式:","声明错误可选的方式很少,在选择合适的错误申明方式之前,应考虑以下几点。","如果是这样,请参阅错误包装部分。","如果是静态字符串,我们可以使用","如果是,我们必须通过声明顶级错误变量或自定义类型来支持","如果没有要添加的其他上下文,则按原样返回原始错误。","如果调用者不需要匹配它,则使用fmt.errorf,如果调用者确实需要匹配它,则自定义","它们将成为包的公共","对于动态字符串的错误,","对于大多数包装错误,这是一个很好的默认值,但请注意,调用者可能会开始依赖此行为。因此,对于包装错误是已知变量或类型的情况,请将其作为函数契约的一部分进行记录和测试。","您会收到更多有用的错误,例如“呼叫服务","或","或自定义错误类型。","指导","无错误匹配。","来混淆底层错误,调用者将无法匹配它,但如果需要,您可以在将来切换到","标签或日志中的","根据调用者是否应该能够匹配和提取根本原因,在","格式之间进行选择。","添加上下文生成新错误。","添加上下文生成新错误;","然而,一旦错误被发送到另一个系统,应该清楚消息是一个错误(例如","的一部分。","请注意,如果您从包中导出错误变量或类型,","这将保留原始错误类型和消息。","这样就不会出现诸如“连接被拒绝”之类的模糊错误,","这非常适合底层错误消息有足够的信息来追踪它来自哪里的错误。","错误匹配","错误匹配。","错误消息","(1)如果调用者应该可以访问底层错误,请使用","(1)调用者是否需要匹配错误以便他们可以处理它?","(1)返回原始错误;","(2)使用","(2)错误消息是否为静态字符串,还是需要上下文信息的动态字符串?","(3)使用","(3)我们是否正在传递由下游函数返回的新错误?"],"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":["\"img\"","\"time\"","&&","*","*/)","*/,","...","/*","//","0","05","07","1","1.使用","15190)。如果您比较两个时刻,则差异将不包括这两个时刻之间可能发生的闰秒。","19:01:50","2000}","2022","24","2}","3339","365","60","7","8728),也不在计算中考虑闰秒(issu",":=","=","===","```go","`json:\"interval\"`","`json:\"intervalmillis\"`","`time.adddate`。但是,如果我们想保证某一时刻比前一时刻晚","bad","believ","bool","config","console.log(\"plugin","datetim","day","e.target.tagnam","encoding/json","falsehood","float64,并在字段名称中包含单位。","func","function(e){","gitbook该文章修订时间:","good","int","int)","interv","intervalmilli","isactive(now,","line","maybenewday","month","newday","poll(10)","poll(10*time.second)","poll(delay","popup....\");document.onclick","power","programm","return","rfc","start","start,","stop","string","struct","t.add(24","t.adddate(0","time","time.dur","time.duration)","time.duration,因此该单位包含在字段的名称中。","time.format","time.hour)","time.millisecond)","time.pars","time.parsedur","time.rfc3339","time.sleep(delay)","time.sleep(time.duration(delay)","time.tim","time.time,在比较、添加或减去时间时使用","time.time,如果底层驱动程序支持则返回;","time.unmarshaljson","timestamp","time。","type","window.open(e.target.src,e.target.src)}img{cursor:pointer}","year","{","{\"interval\":","{\"intervalmillis\":","}","。","一分钟有","一周有","一天有","一小时有","一年","不支持","中使用。","中定义的格式时间戳。默认情况下,time.unmarshaltext","中的方法。","为什么常识性的认知是错误的呢?因为地球自转的不均匀性和长期变慢性,会存在时间修正的情况,比如闰秒,闰年等。","代码即注释","作为","使用","使用此格式,并可通过","例如,在一个时间点上加上","例如,由于","分钟","列转换为","包不支持解析闰秒时间戳(issu","包处理时间","包,因为它有助于以更安全、更准确的方式处理这些不正确的假设。","和","回到第一个例子,在一个时间时刻加上","因此,在处理时间时始终使用","在","在处理时间的瞬间时使用","天","字符串,并通过","字符串;","对外部系统使用","小时","小时并不总是产生一个新的日历日。","小时,我们应该使用`time.add`。","小时,我们用于添加时间的方法取决于意图。如果我们想要下一个日历日(当前天的下一天)的同一个时间点,我们应该使用","尽可能在与外部系统交互中使用","尽管这在实践中并不成问题,但请记住,time","当不能在这些交互中使用","当在这些交互中不能使用","或","支持","支持将","方法支持将","时间处理看似简单,实则不然。关于时间的错误假设通常包括以下几点:","时,请使用","时,除非达成一致,否则使用","是几秒钟还是几毫秒?","标志:flag","秒","编码为","表达时间段","表达瞬时时间","还有更多,具体可参考","通过","通过其","(1)command","(2)json:encoding/json","(3)sql:database/sql","(4)yaml:gopkg.in/yaml.v2",";"],"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":["\"img\"","&&","(f","(f*","(int32,","*foo)","//","05","07","1","1)","19:01:50","2.使用第三方","2022","=","==","===","alreadi","atom","atomic.bool","atomic.swapint32(&f.running,","bad","bool","console.log(\"plugin","e.target.tagnam","f.run","f.running.load()","f.running.swap(true)","foo","foo)","func","function(e){","gitbook该文章修订时间:","go.uber.org/atom","good","int32","int64","isrunning()","popup....\");document.onclick","power","race!","return","run","running…","start","start()","struct","sync/atom","type","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","不建议使用","包","包的原子操作对基本类型","等)进行操作,因为很容易忘记使用原子操作来读取或修改变量。","类型。","通过隐藏基础类型为这些操作增加了类型安全性。此外,它还包括一个易用的"],"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":["\"img\"","&&","&signer{","(s","*signer","*signer)","*testing.t)","//","05","07","1.避免使用可变全局变量","19:01:50","2022",":=","=","===","assert.equal(t,","bad","console.log(\"plugin","defer","e.target.tagnam","func","func()","function(e){","gitbook该文章修订时间:","good","newsigner()","now","now)","now:","oldtimenow","popup....\");document.onclick","power","return","s","s.now","s.now()","s.sign(give))","sign(give))","sign(msg","sign.go","sign_test.go","signer","signwithtime(msg,","somefixedtim","string","string)","struct","testsign(t","testsigner(t","time.now","time.now,","time.tim","timenow","timenow()","type","var","want,","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","}()","中。","函数直接注入到使用方","可变全局变量在使用时,可能会被其他地方修改,导致程序运行时出现意外情况。","我们可以通过依赖注入的方式将依赖注入到使用方,这样便可以避免使用全局变量,进而避免了依赖的全局变量被错误修改的可能。","比如下面将依赖的"],"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":["\"img\"","&&","(l","*abstractlist","*abstractlist)","*concretelist)","...","//","05","07","19:01:50","2.避免在公共结构中嵌入类型","2022","=","===","abstractlist","abstractlist。相反,只需手动将方法写入具体的列表,委托给抽象列表的方法。","abstractlist,如果嵌入的类型是","add(","add(entity)","bad","concretelist","console.log(\"plugin","e.target.tagnam","entity)","func","function(e){","gitbook该文章修订时间:","good","interfac","interface,而不是结构体,这将为开发人员提供更大的灵活性来改变未来,但仍然泄露了具体列表使用抽象实现的细节。","l.list.add(e)","l.list.remove(e)","list","popup....\");document.onclick","power","public。为了保持向后兼容性,外部类型的每个未来版本都必须保留嵌入类型;","public,那么字段是","remove(","remove(entity)","struct","type","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","{}","}","产生模糊的接口文档指","假设您使用共享的","即使嵌入兼容的抽象列表","又没有明确说明,会产生模糊的接口文档。","实现了多种列表类型,请避免在具体的列表实现中嵌入","尽管编写这些委托方法是乏味的,但是额外的工作隐藏了实现细节,留下了更多的更改机会,还消除了在未能描述出潜在接口的模糊文档。","嵌入类型会泄漏实现细节、禁止类型演化和产生模糊的接口文档。","很少需要嵌入类型,虽然它可以帮助您避免编写冗长的委托方法。","无论是使用嵌入结构还是嵌入接口,都会限制类型的演化。","是一个实体列表。","是各种实体列表的通用实现。","泄漏实现细节指","添加将实体添加到列表中。","的实现是","的实现细节,被到处泄露了;","禁止类型演化指","移除从列表中移除实体。","获得了同名嵌套类型字段","被导出的字段和方法全部成为了","被导出的字段和方法,在","(1)向嵌入接口添加方法是一个破坏性的改变;","(2)从嵌入结构体删除方法是一个破坏性的改变;","(3)删除嵌入类型是一个破坏性的改变;","(4)即使使用满足相同接口的类型替换嵌入类型,也是一个破坏性的改变。"],"第四篇:最佳性能/0.导语.html":["\"img\"","&&","0.导语","05","16","19:20:12","2022","=","===","coder","console.log(\"plugin","e.target.tagnam","function(e){","gitbook该文章修订时间:","go","popup....\");document.onclick","power","window.open(e.target.src,e.target.src)}img{cursor:pointer}","代码的稳健、可读和高效是我们每一个位","的共同追求。本篇将结合","语言特性,为书写高效的代码,力争从常用数据结构、内存管理和并发编程三个方面给出相关建议。话不多说,让我们一起学习","高性能编程技法吧。"],"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":["!ok","\"img\"","&&","&num)","*testing.b)","...interface{})","...uint64)","//","0","0,","0.2511","05","07","0;","0x1}))","1","1.841","1.优先使用","1.反射虽好,切莫贪杯","1000000000","12","1226868","127.0.0.1","13026195","145.3","16","19:15:30","2,","2.60ghz","2.少量的重复不比反射差","2022","2130706433","296","3,","3.809","3.慎用","4","4,","5,","6,","60","7,","8,","80","81.96","8249469","9750h","978.2","9}",":=","=","===","@","[]byte)","[]interface{}{uint64(1),","[]uint64","[]uint64,","[]uint64{1,","_,","allocs/op","amd64","append(t,","b/op","bad","bench=.","bench=benchmarkntohl.*","benchmarkdeletesliceelm","benchmarkdeletesliceelms(b","benchmarkdeleteu64liceelm","benchmarkntohl","benchmarkntohl(b","benchmarkntohlnotusebinari","benchmem","binari","binary.bigendian,","binary.read","binary.read(buf,","binary.writ","binary.write标准库","buffer","byteorder,","bytes.newreader(bys)","c","console.log(\"plugin","core(tm)","cpu","cpu:","darwin","data","data。data","deletesliceelm","deletesliceelms(i","deleteu64liceelm","deleteu64liceelms(i","e.target.tagnam","elm","encoding/binari","err","error","fmt","fmt.println(ntohl([]byte{0x7f,","fmt2.少量的重复不比反射差3.慎用","fmt,因为前者性能更佳。","func","function(e){","gitbook该文章修订时间:","go","goarch:","goos:","gorm、xorm","i7","int","intel(r)","interface{}","interface{})","interface{},","io.reader,","io.writer,","ip","json、orm","key","len(elms))","len(i))","m","m[v]","m[v];","main/reflect","make([]uint64,","make(map[interface{}]struct{},","make(map[uint64]struct{},","map","ns/op","ntohl","ntohl()","ntohl(bi","ntohlnotusebinary(bi","ok","order","pass","pkg:","popup....\");document.onclick","power","r","rang","read","read(r","reflect","reflect.makeslice(reflect.typeof(i),","reflect.valueof(i)","return","set。","size","size(v","slice","strconv","struct{}{}","t","test","uint32","uint32(bys[2])","uint32(bys[3])","uint64","uint64(3),","uint64(5),","uint64(7),","uint64(9)}","v","v)","v.len())","varint","w","window.open(e.target.src,e.target.src)}img{cursor:pointer}","wirt","write","write(w","w。data","{","|","}","下面以我们熟知的","下面看一下二者的性能对比。","下面看下剥去反射前后二者的性能差异。","中的字节数。","中,因为","为","为什么性能上会有两倍多的差距,因为","从","从切片中过滤指定元素。注意:不修改原切片。","从结构化二进制数据","以外类型的切片进行过滤,拷贝一次代码又何妨呢?可以肯定的是,绝大部份场景,根本不会对所有类型的切片进行过滤,那么反射带来好处我们并没有充分享受,但却要为其带来的性能成本买单。","使用反射并且很慢。如果有需要用到这两个函数的地方,我们应该手动实现这两个函数的相关功能,而不是直接去使用它们。","其中数字与字节序列的转换可以用如下三个函数:","写入到","函数为例,看看","函数将","切片过滤掉指定的元素。","创建新切片,过滤掉指定元素。","利用","利用反射,我们可以实现一个类型泛化支持扩展的切片过滤函数。","包如何实现。","包实现了数字和字节序列之间的简单转换以及","包的性能相较于针对具体类型实现的版本,性能差异非常大。","包针对大端字节序将字节序列转为","可以看到,反射涉及了额外的类型判断和大量的内存分配,导致其对性能的影响非常明显。随着切片元素的递增,每一次判断元素是否在","可见使用反射实现的","呢?","和","基本数据类型与字符串之间的转换,优先使用","如将","如果我们针对","实现上利用反射来达到范型的效果,在运行时进行类型的动态判断,所以带来了一定的性能损耗。","对整数采用的便是这种编码方式。","将","将网络字节序的","当使用反射时,请问一下自己,我真地需要它吗?","很多时候,我们可能只需要操作一个类型的切片,利用反射实现的类型泛化扩展的能力压根没用上。退一步说,如果我们真地需要对","必须是固定大小的值或固定大小值的切片,或指向此类数据的指针。","必须是指向固定大小值的指针或固定大小值的切片。","是一种使用可变字节表示整数的方法。其中数值本身越小,其所占用的字节数越少。protocol","是不确定的类型,会发生变量逃逸,触发堆内存的分配。所以,可预见的是当元素数量增加时,性能差异会越来大。","有时,我们需要一些工具函数。比如从","构建","标准库函数","框架","的","的二进制表示形式写入","的编码和解码。varint","等。","类型手动实现一个","类型时的实现。","网络字节序解析到","而不是","该函数也是参考了","语言提供了运行时动态获取对象的类型和值以及动态创建对象的能力。反射可以帮助抽象和简化代码,提高开发效率。","语言标准库以及很多开源软件中都使用了","语言的反射能力,例如用于序列化和反序列化的","读取到","转为主机字节序。","过滤指定元素。注意:不修改原切片。","运行上面的基准测试。","运行上面的基准测试,结果如下:","返回"],"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":["\"img\"","&&","*testing.b)","05","07","0;","1.379","1.582","19:29:10","2.962","2.避免重复转换字符串到字节切片","2022","3.00ghz","748467979","8","878246492","9700",":=","=","===","@","amd64","bench=benchmarkstringtobyt","benchmarkstringtobyt","benchmarkstringtobyte(b","benchmarkstringtobyteonc","console.log(\"plugin","core(tm)","cpu","cpu:","e.target.tagnam","func","function(e){","gcflags=\"","gitbook该文章修订时间:","go","goarch:","goos:","hot","i7","intel(r)","main/perf","n\"","ns/op","ok","pass","path","path,即热点路径,顾名思义,是你的程序中那些会频繁执行到的代码。","pkg:","popup....\");document.onclick","power","slice,因为重复的切片初始化会带来性能损耗。相反,请执行一次转换并捕获结果。","test","window","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","上,那么其对性能的影响将被放大。这里解释下","不要反复从固定字符串创建字节","差距不是很大,但是随着字符串长度的增加,差距将会越来越明显。此外,如果这种重复的转换在","看一下性能差异,注意需要禁止编译器优化,不然看不出差别。"],"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":["\"img\"","&&","//","0","05","07","0;","1.指定","1000000","166.0","17.81","19:31:00","2.指定切片容量","2022","3.指定容器容量","4","64","66930670","7032921","8",":=","=","===","_","_,","allocs/op","append","append()","b/op","bad","bench=^benchmarkjoinstr","benchmarkjoinstrwithoper","benchmarkjoinstrwithsprintf","benchmem","bucket","capac","capacity)","console.log(\"plugin","const","e.target.tagnam","f","file","files,","function(e){","gitbook该文章修订时间:","go","good","hashmap","hint)","ioutil.readdir(\"./files\")","len(files))","length,","m","m[f.name()]","make()","make([]t,","make(map[string]os.fileinfo)","make(map[string]os.fileinfo,","make(map[t1]t2,","map","n","ns/op","popup....\");document.onclick","power","rang","size","slice","test","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","不同。map","不同,slice","不是一个提示:编译器将为提供给","与","初始化切片时提供容量信息,特别是在追加切片时。","初始化的时候提供容量信息。","向","因此,在将元素添加到","在尽可能的情况下,在使用","在运行时可能会有更多分配。","容量提示","容量提示2.指定切片容量尽可能指定容器容量,以便为容器预先分配内存。这将在后续添加元素时减少通过复制来调整容器大小。","容量时,仍可能发生分配。","执行基准测试:","提供容量提示会在初始化时尝试调整","提示并不保证完全的抢占式分配,而是用于估计所需的","操作将导致零分配(直到","时为","时,甚至在指定","是在没有大小提示的情况下创建的;","是有大小提示创建的;在运行时可能会有更少的分配。","注意,与","的","的大小,这将减少在将元素添加到","的容量分配足够的内存,这意味着后续的","的数量。","的长度与容量匹配,在此之后,任何","都可能调整大小以容纳其他元素)。","重新分配内存。"],"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":["\"bar\",","\"baz\"","\"foo\",","\"img\"","&&","*testing.b)","+",".","//","0","05","0;","1.813","1.行内字符串拼接2.非行内字符串拼接1.行内字符串拼接","12","157.2","17.53","19:56:05","2.非行内字符串拼接","20.95","2022","3.00ghz","30079785","30748495","31543916","31663521","36.39","37.34","39.58","4","4.字符串拼接方式","40.60","60079003","64","665341896","70638928","7520017","8","9700",":=","=","===","@","allocs/op","amd64","b/op","bench=^benchmarkjoinstr","benchmarkjoinstrwithbytesbuff","benchmarkjoinstrwithbyteslic","benchmarkjoinstrwithbytesliceprealloc","benchmarkjoinstrwithoper","benchmarkjoinstrwithoperator(b","benchmarkjoinstrwithsprintf","benchmarkjoinstrwithstringsbuild","benchmarkjoinstrwithstringsbuilderprealloc","benchmarkjoinstrwithstringsbuilderprealloc(b","benchmarkjoinstrwithstringsjoin","benchmarkjoinstrwithstringsjoin(b","benchmem","byte[]","console.log(\"plugin","core(tm)","cpu","cpu:","e.target.tagnam","fmt.sprintf()","func","function(e){","gitbook该文章修订时间:","go","goarch:","good","goos:","grow","grow:","i7","intel(r)","main/perf","ns/op","pkg:","popup....\");document.onclick","power","s1,","s2,","s3","string.builder也提供了预分配内存的方式","test","window","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","下面看下二者的性能对比。","且预先分配容量的拼接方式性能最佳。","从性能出发,兼顾实现的便捷与代码可读性,如果待拼接的字符串不涉及类型转换且数量较少(fmt.sprintf()。","从结果可以看出,strings.join()、strings.builder、bytes.buffer和byte[]","优化后的版本的性能测试结果如下。可以看出相较于不预先分配空间的方式,性能提升了很多。","使用了","先看下其性能测试的对比。","只能简单地完成字符串之间的拼接,非字符串类型的变量需要单独做类型转换。行内拼接字符串不会产生内存分配,也不涉及类型地动态转换,所以性能上优于fmt.sprintf()。","可以看到,二者的性能差距很大,快达到一个数量级了。所以在不影响代码可读性时,行内字符串尽可能地使用运算符","基准测试结果如下:","字符串拼接还有其他的方式,比如strings.join()、strings.builder、bytes.buffer和byte[],这几种不适合行内使用。当待拼接字符串数量较多时可考虑使用。","所以如果对性能要求非常严格,或待拼接的字符串数量足够多时,建议使用","执行基准测试结果如下:","来拼接而不是fmt.sprintf()。","的性能相近。如果结果字符串的长度是可预知的,使用","综合易用性和性能,一般推荐使用strings.builder来拼接字符串。","能够接收不同类型的入参,通过格式化输出完成字符串的拼接,使用非常方便。但因其底层实现使用了反射,性能上会有所损耗。","行内字符串的拼接,主要追求的是代码的简洁可读。fmt.sprintf()","行内拼接字符串为了书写方便快捷,最常用的两个方法是:","运算符","运算符+","预先分配容量这种方式。"],"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":["\"img\"","&&","*item","*testing.b)",".","//","0","0,","05","07","0;","1","1.[]int","1.[]int2.[]struct{}3.[]*struct4.小结go","1024)","12","1514","1521","19:40:30","2.60ghz","2.[]struct{}","2022","2124","2165","22","2290372","236.2","239.1","27","27169","3.00ghz","3.378","3.[]*struct","30914","38799","4.小结","46161","5.097","5.[]struct{}","5043324","5076255","534.8","535705","556436","752077","773634","8","9700","9750h",":=","=","===","@","[1024]byte","[1024]byte,如果每次遍历","[]*item","[]int","[]int。但如果迭代的元素较大,如一个包含很多属性的","[]item,都会进行一次值拷贝,所以带来了性能损耗。","[]struct","allocs/op","amd64","b/op","bench=.","bench=benchmarkrang","bench=intslice$","bench=pointer$","benchmarkindexintslic","benchmarkindexpoint","benchmarkindexstructslic","benchmarkindexstructslice(b","benchmarkrange1","benchmarkrange1(b","benchmarkrange2","benchmarkrangeindexstructslic","benchmarkrangeintslic","benchmarkrangepoint","benchmarkrangestructslic","benchmem","console.log(\"plugin","core(tm)","cpu","cpu:","darwin","e.target.tagnam","func","function(e){","gcflags=","genitem","genitems(n","genrandomintslic","genrandomintslice()","genrandomintslice(n","gitbook该文章修订时间:","go","goarch:","goos:","i7","id","index","index。如果使用","int","int)","intel(r)","int,一个是类型是","item","main/perf","main/rang","make([]*item,","make([]int,","make([]item,","n","n)","ns/op","num","n禁用了编译器对切片遍历的优化。如果没有该选项,那么上面三种遍历方式没有性能差别。","ok","pass","pkg:","popup....\");document.onclick","power","rand.seed(time.now().unixnano())","rang","range。二者在功能上没有区别,但在性能上会有区别吗?","range,建议只迭代下标,通过下标访问元素,这种使用方式和","range,有时候甚至会有上千倍的性能差异。对于这种场景,建议使用","struct","test","tmp","type","val","window","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","下标时,性能比","中元素时,性能非常差。","为什么编译器会对上面的测试代码进行优化呢?因为代码实际上只取最后一个切片元素的值,所以前面的循环操作可以跳过,这样便带来性能的提升。如果是下面的代码,那么编器将无法优化,必须遍历拷贝所有元素。","为例。","值好很多。从这里我们应该能够知道二者性能差别之大的原因。","函数用于生成指定长度元素类型为","切片","切片元素从结构体","则不存在拷贝。","只遍历","可以看出,两种通过","同时迭代下标和值,则需要将切片/数组的元素改为指针,才能不影响性能。","后,for","和","在迭代过程中返回的是元素的拷贝,index","如果","如果切片中是指向结构体的指针,而不是结构体呢?","就没有区别了。如果想使用","性能没有差别,但是","执行性能测试结果:","无需去除编译器优化,基准测试结果如下:","时获取的是值拷贝,对副本的修改,是不会影响到原切片。","是一个结构体类型","替换为指针","此外,因","生成指定长度","生成指定长度的随机","由两个字段构成,一个类型是","的切片。从最终的结果可以看到,遍历","的性能几乎一样,如基本类型的切片","的性能几乎是一样的。而且使用指针还有另一个好处,可以直接修改指针对应的结构体的值。","的性能将显著地高于","的遍历方式","类型呢?","类型的切片,下标与","结构体,那么","运行测试结果如下:","迭代的元素较小,那么","遍历","遍历切片或数组有两种方式,一种是下标,一种是","遍历性能几乎没有区别。","那么对于稍微复杂一点的","需要注意的时,上面运行基准测试时,使用编译选项","首先看一下遍历基本类型切片时二者的性能差别,以",",item"],"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":["!=","\"img\"","&&","*testing.b)","//","0","0,","05","07","0;","0。","1.截取法(修改原切片)","1.截取法(修改原切片)2.拷贝法(不改原切片)3.移位法(修改原切片)4.性能对比5.小结go","1000:","100:","10、100、1000","10:","14897282","1652146","17466486","19:41:43","1,我们要删除所有的","2.拷贝法(不改原切片)","2022","2124237","21915","21952129","22176390","258662","2714158","2724","3.00ghz","3.移位法(修改原切片)","3161318","325194","359.9","3615","4.性能对比","423.7","432049","5.427","5.小结","50.78","5007","54.68","56067","578.4","6.切片删除指定元素","65.07","762.1","8","85.22","9700",":=","=","===","@","[]int","[]int,","_,","a[:0]","a[:j]","a[j]","amd64","append(tgt,","append(tmp,","bench=.","benchmarkdeleteslice1","benchmarkdeleteslice1(b","benchmarkdeleteslice2","benchmarkdeleteslice3","benchmarkdeleteslice4","console.log(\"plugin","core(tm)","cpu","cpu:","deleteslice1","deleteslice1(a","deleteslice2","deleteslice2(a","deleteslice3","deleteslice3(a","deleteslice4","deleteslice4(a","e.target.tagnam","elem","func","function(e){","getslice(n","gitbook该文章修订时间:","go","goarch:","goos:","i7","index","index,记录下一个有效元素应该在的位置。遍历所有元素,当遇到有效元素,将其移动到","int)","intel(r)","j","j++","len(a))","main/slic","make([]int,","n)","ns/op","ok","pass","pkg:","popup....\");document.onclick","power","rang","return","slice","slice。","slice,但是共用原始","slice,将要删除的元素过滤掉。缺点是需要开辟另一个","test","tgt","tmp","v","v)","window","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","}","上进行修改。","且","为例给出具体实现。","从基准测试结果来看,性能最佳的方法是移位法,其中又属第一种实现方式较佳。性能最差的也是最常用的方法是截取法。随着切片长度的增加,上面四种删除方式的性能差异会愈加明显。","假设我们的切片有","创建了一个","删除切片指定元素一般有如下几种方法,本文以","删除指定元素。","利用一个下标","加一。最终","原切片长度为","和","基准测试代码如下:","实际使用时,我们可以根据不用场景来选择。如不能修改原切片使用拷贝法,可以修改原切片使用移位法中的第一种实现方式。","并没有提供删除切片元素专用的语法或函数,需要使用切片本身的特性来删除元素。","应该后移一位。","方式一","方式二","测试结果如下:","生成切片函数如下:","的位置就是所有有效元素的下一个位置,最后做一个截取就行了。这种方法会修改原来的","的切片进行测试,来上下上面四种实现的性能差异。","的底层数组。这样也不需要额外分配内存空间,直接在原","的截取删除指定元素。注意删除时,后面的元素会前移,下标","的空间,优点是容易理解,而且不会修改原","该方法可以看成对第一种方法截取法的改进,因为每次指需移动一个元素,性能更加。","这种方法最容易理解,重新使用一个","这里分别对长度为","这里利用对"],"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":["\"fmt\"","\"img\"","\"unsafe\"","&&","(","(d","(s",")","0","05","07","1","1.不占内存空间2.空结构体的作用2.1","1.使用空结构体节省内存","19:53:07","1mb","2.1","2.2","2.3","2.空结构体的作用","2022",":=","=","===","_,","add(key","bool","c/c++","chan","channel","close()","console.log(\"plugin","delete(key","delete(s,","door","door\")","door)","door,在这种情况下,door","e.target.tagnam","fmt.println(\"clos","fmt.println(\"open","fmt.println(s.has(\"bar\"))","fmt.println(s.has(\"foo\"))","fmt.println(unsafe.sizeof(struct{}{}))","func","function(e){","gitbook该文章修订时间:","go","golang","has(key","import","int","key)","main","main()","main.go","make(set)","map","map[string]struct{}","ok","open()","packag","popup....\");document.onclick","power","return","run","s","s.add(\"bar\")","s.add(\"foo\")","s[key]","set","set)","set。","set)、add、del、clear、contain","string)","struct{}","struct{})","struct{}{}","type","unsafe.sizeof","window.open(e.target.src,e.target.src)}img{cursor:pointer}","worker(ch","{","}","不发送数据的信道","不发送数据的信道2.3","不需要发送任何的数据,只用来通知子协程(goroutine)执行任务,或只用来控制协程的并发。这种情况下,使用空结构体作为占位符就非常合适了。","个字节,那假设","中有一百万条数据,就会浪费","中空结构体","中空结构体仍占用","中,我们可以使用","事实上可以用任何的数据结构替代。","仅包含方法的结构体","仅包含方法的结构体1.不占内存空间","作为集合(set)使用时,可以将值类型定义为空结构体,仅作为占位符使用即可。","可以看到,go","因为空结构体不占据内存空间,因此被广泛作为各种场景下的占位符使用。一是节省资源,二是空结构体本身就具备很强的语义,即这里不需要任何值,仅作为占位符,达到的代码即注释的效果。","因此呢,将","在","在部分场景下,结构体只包含方法,不包含任何的字段。例如上面例子中的","如果想使用","字节。","实现集合(set)","实现集合(set)2.2","无论是","是不占用内存空间,不像","有时候使用","来代替。事实上,对于集合来说,只需要","的完整功能,如初始化(通过切片构建一个","的实现,通常使用","的空间。","的键,而不需要值。即使是将值设置为","等操作,可以使用开源库","类型,也会多占据","计算出一个数据类型实例需要占用的字节数。","语言标准库没有提供","运行上面的例子将会输出:","还是","都会浪费额外的内存。因此,在这种情况下,声明为空结构体最合适。"],"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":["\"img\"","&&","//","0","05","07","0。","1","1.","1.for","1.为什么需要内存对齐2.go","12","19:55:55","1。","2","2.for","2.go","2.struct","2022","2,从第","2,因此,必须空出","3","3.for","3.合理的","32","4","4.空结构与空数组对内存对齐的影响","4,因此,demo2","4,因此,必须空出","4,此时,内存已经是对齐的,从第","8","=","===","align","array","array'","a、b","b","c","console.log(\"plugin","cpu","demo1","demo1:","demo2","demo2:","demo3","demo4","demo4{}","e.target.tagnam","each","element","f","field","fmt.println(unsafe.sizeof(demo1{}))","fmt.println(unsafe.sizeof(demo2{}))","fmt.println(unsafe.sizeof(demo3{}))","fmt.println(unsafe.sizeof(demo4{}))","func","function(e){","gitbook该文章修订时间:","go","guarante","int16","int32","int8","languag","largest","main()","popup....\");document.onclick","power","same","size","size)为单位访问。如","specif","struct","struct{}","type","type.","type:","unsafe.alignof","unsafe.alignof(x)","unsafe.alignof(x.f)","unsafe.alignof(x.f),unsafe.alignof(x)","valu","variabl","window.open(e.target.src,e.target.src)}img{cursor:pointer}","x","x,","x,unsafe.alignof(x)","x,计算","{","}","个位置开始占据","个字节的数据,一次读取","个字节那么只需要读取","个字节,cpu","个字节,偏移量才是","中","中比较特殊。没有任何字段的空","从这个例子可以看到,内存对齐对实现变量的原子性操作也是有好处的。每次内存访问是原子的,如果变量的大小不超过字长,那么内存对齐后,对该变量的访问就是原子的,这个特性在并发场景下至关重要。","位的","作为一门追求高性能的后台编程语言,当然也不例外。","作为其他","作为结构体最后一个字段时,需要内存对齐。因为如果有指针指向该字段,返回的地址将在结构体之外,如果此指针一直存活不释放对应的内存,就会有内存泄露的问题(该内存不因结构体释放而释放)。","其中函数","内存对齐前变量","内存对齐规则","内存对齐规则3.合理的","占据的内存空间大小为","占据空间一致,而","变量的值只需要一次访存。","变量的值需要两次访存,第一次访存得到前一个字节,第二次得到后两个字节。内存对齐后","可以看到,demo3{}","可以看到,同样的字段,因排列顺序不同,会导致不一样的结构体大小。","各占","各占据","和没有任何元素的","因为内存对齐的存在,合理的","因为这一点,空","因此","因此,在对内存特别敏感的结构体的设计上,我们可以通过调整字段的顺序,将字段宽度从小到大由上到下排列,来减少内存的占用。","始终以字长访问内存,如果不进行内存对齐,可能会增加","字节。","字节即可。","字节的空间。","字节,与字段","字节,即额外填充了","字节,那么","对于","对于任意类型的变量","对于数组类型的变量","对于结构体类型的变量","对齐系数决定了字段的偏移和变量的大小,两者必须是对齐系数的整数倍。","布局","布局4.空结构与空数组对内存对齐的影响1.为什么需要内存对齐","布局可以减少内存占用,提高程序性能。","布局考虑内存对齐","或空","接下来逐个分析,首先是","描述了内存对齐的规则。","是第一个字段,默认是已经对齐的,从第","是第三个字段,对齐倍数为","是第二个字段,对齐倍数为","是第二个字段,对齐系数为","次。","每一个字段","每个字段按照自身的对齐系数来确定在内存中的偏移量,一个字段因偏移而浪费的大小也不同。","用于获取变量的对齐系数。","的","的倍数,从第","的内存占用为","的大小为","的字段时,一般不需要内存对齐。但是有一种情况除外:即当","的对齐系数决定,也是","的对齐系数由","空结构与空数组在","等于其中的最大值。","等于构成数组的元素类型的对齐系数。","简言之:合理的内存对齐可以提高内存读写的性能,并且便于实现变量操作的原子性。","编译器一般为了减少","至少为","访存指令周期,提高内存的访问效率,会对变量进行内存对齐。go","访存次数。","访存的单位是","访问内存并不是逐个字节访问,而是以字长(word","访问内存的吞吐量。比如同样读取","访问内存的次数,加大","读取","这么设计的目的,是减少",",unsafe.alignof(x)",",字长为"],"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":["\"","\"img\"","#","&&","&st","&{storag","(faq)","(non","*st","*testing.b)","./main.go:5:12","./main.go:5:12:","./main.go:9:12:","//","0","0,","05","07","0;","1","1.局部切片尽可能确定长度或容量","1.局部切片尽可能确定长度或容量2.返回值","10","10)","1024","12","1342947","1427","1708","186127288","2.60ghz","2.返回值","2022","20:47:33","216.2","2242","27.40","2861","3.742","3.865","3.908","3.减少逃逸,将变量限制在栈上","3.小的拷贝好过引用","380626","4.402","4.返回值使用确定的类型","43268738","464974","5.小结","5194722","6.454","692400","80","8192","832418","893.6","9750h",":=","=","===","@","[1024]int","[capacity]int","allocs/op","amd64","argument","arr","array","arrayfibonacci","arrayfibonacci()","ask","b/op","bench=.","bench=benchmarkret","bench=benchmarkslic","benchmarkarray","benchmarkarray(b","benchmarkifc","benchmarkretptr","benchmarkretvalu","benchmarkretvalue(b","benchmarkslic","benchmarksliceescap","benchmarkslicenoescap","benchmem","build","capac","capacity)","command","console.log(\"plugin","const","constant","copy/copy.go","copy/copy.go:17:6:","copy/copy.go:18:11:","copy/copy.go:5:6:","core(tm)","cpu","cpu:","d","darwin","e.target.tagnam","escap","flow:","frequent","func","function(e){","gc","gcflags=","gcflags=\"","gitbook该文章修订时间:","go","goarch:","goos:","heap","heap:","i7","inlin","intel(r)","interface{}","interface{}。","l\"","l\",如果发生内联,那么将不会出现变量的逃逸,就不存在堆上分配内存与回收的操作了,二者将看不出性能差异。","line","m","main","main()","main.go","main/copi","make([]int,","m查看编译器对上面两个函数的优化决策。","ns/op","number","number)","number)}:","ok","packag","pass","pkg:","popup....\");document.onclick","power","question","retptr()","return","retvalue()","s1","size)","slice","sliceescap","sliceescape()","slicefibonacci","slicefibonacci()","slicefibonacci()函数中分配的局部变量切片因为要返回到函数外部,所以发生了逃逸,需要在堆上申请内存空间。从测试也过也可以看出,arrayfibonacci()函数没有内存分配,完全在栈上完成数组的创建。这里说明了对于一些短小的对象,栈上复制的成本远小于在堆上分配和回收的成本。","st","struct","test","type","valu","var","vs","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","{heap}","}","一般情况下,对于需要修改原对象,或占用内存比较大的对象,返回指针。对于只读或占用内存较小的对象,返回值能够获得更好的性能。","下面以一个简单的示例来看下二者的性能差异。","下面看一下性能对比。","下面看下二者的性能差异。","中的变量只要被引用就一直会存活,存储在堆上还是栈上由","从测试结果可以看出,对数组的拷贝性能却比使用切片要好。为什么会这样呢?","从输出结果可以看到,使用变量(非常量)来指定切片的容量,会导致切片发生逃逸,影响性能。指定切片的长度时也是一样的,尽可能使用常量或数值字面量。","以","以上仅列出了部分变量发生逃逸的情形。实际上,go","值传递会拷贝整个对象,而指针传递只会拷贝地址,指向的对象是同一个。传指针可以减少值的拷贝,但是会导致内存分配逃逸到堆中,增加垃圾回收(gc)的负担。在对象频繁创建和删除的场景下,返回指针导致的","其他","内部实现决定而和具体的语法没有关系。","函数中定义的局部变量切片逃逸到了堆。","函数均可内联。slicefibonacci()","发生逃逸,在堆上申请切片","变量大小不确定(如","变量较大(栈空间不足)","可以看到,arrayfibonacci()","可见,函数返回值使用","和","基准测试结果如下:","处理。在知道常见的变量逃逸场景后,我们在编码时可以有意识地避免变量发生逃逸,尽可能地使用栈空间,而非堆空间。","处理,函数返回后就会直接释放,而堆上分配的内存使用完毕会交给","如果使用局部切片时,已知切片的长度或容量,请使用常量或数值字面量来定义。","如果变量类型不确定,那么将会逃逸到堆上。所以,函数返回值如果能确定的类型,就不要使用","官方也在","对","小的拷贝好过引用,什么意思呢,就是尽量使用栈变量而不是堆变量。下面举一个反常识的例子,来证明小的拷贝比在堆上创建引用变量要好。","开销可能会严重影响性能。","成本,可提高程序性能。","我们来看一下编译器编译时对上面两个切片的优化决策。","我们还是以上面斐波那契数列函数为例,看下返回值为确定类型和","我们都知道","方式传递后,再加上其长度不可扩展,考虑到性能我们一般很少使用它。实际上,凡事无绝对。有时使用数组进行拷贝传递,比使用切片要好。","明确地告诉我们,我们并不需要知道变量是分配在栈(stack)上还是堆(heap)上。golang","栈上分配内存比在堆中分配内存有更高的效率。因为栈上分配的内存不需要","版本的大小限制可能不一样。一般是","的性能差别。","知道变量逃逸的原因后,我们可以有意识地避免变量发生逃逸,将其限制在栈上,减少堆变量的分配,降低","编译器对变量的逃逸分析决策远比我们想像的要复杂。我们只能尽可能地去勾勒而无以绘其全貌。go","编译器而言,超过一定大小的局部变量将逃逸到堆上,不同","编译时可以借助选项","运行上面的基准测试结果如下:","运行上面的基准测试,将得到如下结果。","返回值类型不确定(不能确定大小)","返回地址","返回引用(引用变量的底层是指针)","返回指针","返回指针3.小的拷贝好过引用4.返回值使用确定的类型5.小结变量逃逸一般发生在如下几种情况:","返回时,编译器无法确定返回值的具体类型,导致返回值逃逸到堆上。当发生了堆上内存的申请与回收时,性能会差一点。","那么多大的变量才算是小变量呢?","里面的","长度或容量不定)","闭包","需要注意,运行上面基准测试时,传递了禁止内联的编译选项"],"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":["\"img\"","&&","&bytes.buffer{}","(n","(p","*pp","*pp)","*testing.b)","...","...interface{})","//","0","05","07","0;","1","1.简介2.作用3.如何使用4.性能差异5.在标准库中的应用1.简介","10000)","1020","10240","11987966","12","1246887","2.60ghz","2.作用","2022","20:50:26","3.510","3.如何使用","4.sync.pool","4.性能差异","5.在标准库中的应用","64","97.12","9750h",":=","=","===",">","@","[1024]byte","a)","a...)","accord","add","ag","alloc","allocations.","allocs/op","amd64","approxim","avoid","b/op","back","bench=.","benchmarkbuff","benchmarkbufferwithpool","benchmarkbufferwithpool(b","benchmem","buf","buffer","buffer,","bufferpool","byte","bytes.buff","cach","cap(p.buf)","console.log(\"plugin","contain","core(tm)","cost.","cpu","cpu:","darwin","darwin/amd64","data","e.target.tagnam","each","encoding/json。以","encountered.","entri","err","error","error)","fals","fmt","fmt.printf()的调用是非常频繁的,利用","format","format,","fprintf","fprintf()","fprintf(os.stdout,","fprintf(w","free","free()","func","func()","function(e){","gc","get()","gitbook该文章修订时间:","go","go1.17","goarch:","goos:","grab","hard","https://golang.org/issue/23199","i7","int,","int32","intel(r)","interface{}","interface{},因此需要类型转换。","invocation.","io.writer,","io.writer,printf()","json.unmarshal(buf,","limit","main/pool","make([]byte,","maximum","memori","n","n,","name","new","new(pp)","new(student)","new:","newprint","newprinter()","ns/op","number","obtain","ok","one.","os.stdout,相当于直接输出到标准输出。这里的","output.","p","p.doprintf(format,","p.error","p.fmt.init(&p.buf)","p.free()","p.panick","p.wraperr","pass","per","pkg:","place","pool","pool.","popup....\");document.onclick","power","pp","ppfree","ppfree.get().(*pp)","ppfree;","printer'","printf","printf()","printf(format","proper","properti","put()","remark","requir","return","reus","same","save","see","size","specifi","standard","state","store","string","string,","struct","stu","stu)","student","studentpool","studentpool.get().(*student)","studentpool.put(stu)","sync","sync.cach","sync.pool","sync.pool{","sync.pool。","sync.pool,例如","test","type","us","usag","var","variabl","version","w.","w.write(p.buf)","window.open(e.target.src,e.target.src)}img{cursor:pointer}","write","written","{","}","},","一句话总结:用来保存和复用临时对象,减少内存分配,降低","传的是","假设我们有一个“学生”结构体,并复用改结构体对象。","函数。","函数创建。","函数即可。对象池中没有对象时,将会调用","函数的参数是一个","则是在对象使用完毕后,放回到对象池。","包下的一个组件,可以作为保存临时取还对象的一个“池子”。个人觉得它的名字有一定的误导性,因为","包为例,我们看下其是如何使用","压力。","可以将暂时不用的对象缓存起来,待下次需要的时候直接使用,不用再次经过内存分配,复用对象的内存,减轻","和","复用","复用对象","复用对象,每次操作不再有内存分配。","字节缓冲器为例,利用","对于很多需要重复分配、回收内存的地方,sync.pool","对象池,每次只执行","对象能够极大地提升性能,减少内存占用,同时降低","对象,避免重复创建与回收内存,来看看对性能的提升效果。","带来一定的负担,严重的时候会引起","我们以","我们可以看一下最常用的标准格式化输出函数","操作,及做一次数据拷贝,耗时几乎可以忽略。而内存分配和回收的耗时占比较多,因此对程序整体的性能影响更大。从测试结果也可以看出,使用了","方法来获取和放回池子中。","是","是一个很好的选择。频繁地分配、回收内存会给","是一个更合适的名字。","是可伸缩的,同时也是并发安全的,其容量仅受限于内存的大小。存放在池中的对象如果不活跃了会被自动清理。","标准库也大量使用了","测试结果如下:","然后调用","用于从对象池中获取对象,因为返回值是","用的就是","的","的。","的使用方式非常简单,只需要实现","的压力,提升系统的性能。","的定义。","的毛刺,而","继续看","这个例子创建了一个","里装的对象可以被无通知地被回收,可能"],"第四篇:最佳性能/3.并发编程/1.关于锁.html":["!=","\"\"","\",\"","\"fmt\"","\"golang.org/x/sync/errgroup\"","\"img\"","\"main/list\"","\"sync\"","\"sync/atomic\"","%","&&","&node{","&withlocklist{}","(","(if","(l","(multipl",")","*lockfreelist)","*node","*testing.b)","*withlocklist)","+=","//","05","07","0;","1.1","1.2","1.关于锁","1.无锁化1.1","10","1000000","12","145690","1906","2.60ghz","2.减少锁竞争","20","20%)","20%)。","2022","20:57:39","2406","2462","3.1","3.2","3.3","3.优先使用共享锁而非互斥锁","303693","4124","432386","485917","498673","50","50%)","50%),rpct","532350","8,7,6,9,5,4,3,1,2,0","80","80%)","80%),rpct","8074","9,8,7,6,5,4,3,2,0,1","9.532","9750h",":=","=","==","===","@","_","amd64","any).","atom","atomic.valu","bench=.","benchmarkconcurwritemapwithlock(b","benchmarkconwritemapnoshard(b","benchmarkmutexreadmor","benchmarkmutexreadmore(b","benchmarkmutexrwequ","benchmarkmutexwritemor","benchmarkrwmutexreadmor","benchmarkrwmutexrwequ","benchmarkrwmutexwritemor","benchmarkwritewithlocklist(b","bigcach","break","c++11","ca","cache、freecach","concurwritemapwithlock","concurwritemapwithlock()","concurwritewithlocklist","concurwritewithlocklist(l","console.log(\"plugin","convert","conwritemapnoshard","conwritemapnoshard()","core(tm)","cpu","cpu:","cur","cur.next","cur.value)","dablelv@dablelv","darwin","defer","e.target.tagnam","errgroup.group","errgroup.group{}","fmt.sprintf(\"%v\",","format","free","func","function(e){","g","gitbook该文章修订时间:","go","goarch:","golang","goos:","gorouin","goroutin","head","head.(*node)","headnode,","i/o","i7","implement","import","int)","intel(r)","interface{}","interface{})","invok","l","l.head","l.head,","l.head.compareandswap(head,","l.head.load()","l.head.load().(*node)","l.mu.lock()","l.mu.unlock()","list","lock","lock()","lock)。在使用锁时,对获取锁的目的操作做了区分,一种是读操作,一种是写操作。因为同一时刻允许多个","locker","lockfreelist","lockfreelist)","m","m0","m1","m[i]","main","main/mutex","make(map[int]int)","make(map[int]struct{})","make(map[int]struct{},","map","map[int]int","map。","map。此时我们可以将每个协程拉取的结果写入到一个临时对象,这样便将并发地协程与同一个变量解绑,然后再将其汇聚到一起,这样便可以不用使用锁。即独立处理,然后合并。","mb0","method","mu","mu.lock()","mu.rlock()","mu.runlock()","mu.unlock()","mu0","mu1","mutex","n","n)","next","next:","nil","node","ns/op","num","num)","object","ok","operand","opmapwithmutex","opmapwithmutex(rpct","opmapwithrwmutex","opmapwithrwmutex(rpct","packag","pass","pkg:","popup....\");document.onclick","power","push","push(v","reactor","readers,","requir","return","rlock()","rlocker()","rpct","runlock()","s","singl","string","string()","string,","struct","struct{}{}","sync","sync.mutex","sync.mutex3.2","sync.mutex{}","sync.rwmutex","sync.rwmutex3.3","sync.rwmutex{}","sync.waitgroup","test","time.sleep(time.microsecond)","type","unlock","unlock()","v,","valu","value:","var","verb","wg","wg.wait()","window.open(e.target.src,e.target.src)}img{cursor:pointer}","withlocklist","withlocklist)","writer","{","}","}()","、go","一般来说,有如下几种情况:","上面的实现有几点需要注意一下:","下面再看一下链表","不分片写入一个","个协程并发写入","个协程并发写入链表","个数的增多而线性扩展。很多语言都提供","中的","串行无锁","串行无锁2.减少锁竞争3.优先使用共享锁而非互斥锁3.1","串行无锁是一种思想,就是避免对共享资源的并发访问,改为每个并发操作访问自己独占的资源,达到串行访问资源的效果,来避免使用锁。不同的场景有不同的实现方式。比如网络","为了模拟上面的情况,简单地写个示例程序,对比下性能。","为读操作占比。","互斥锁的作用是保证共享资源同一时刻只能被一个","以一个简单的示例,通过对map[uint64]struct{}分片前后并发写入的对比,来看下减少锁竞争带来的性能提升。","优秀的本地缓存组件","使用互斥锁读写","使用读写锁读写","入参","写锁与读锁是互斥的,如果存在读锁,写锁阻塞,如果存在写锁,读锁阻塞。","写锁之间是互斥的,存在写锁,其他写锁阻塞。","则阻塞等待。","利用硬件支持的原子操作可以实现无锁的数据结构,原子操作可以在","加写锁","加读锁","加锁","加锁是为了避免在并发环境下,同时访问共享资源产生的安全问题。那么,在并发环境下,是否必须加锁?答案是否定的。并非所有的并发都需要加锁。适当地降低锁的粒度,甚至采用无锁化的设计,更能提升并发能力。","包和","协程调用","占用了,其他的","占用,一个","原子操作(如","可以看出无锁版本比有锁版本性能高一些。","可以看到,通过对分共享资源的分片处理,减少了锁竞争,能明显地提高程序的并发性能。可以预见的是,随着分片粒度地变小,性能差距会越来越大。当然,分片粒度不是越小越好。因为每一个分片都要配一把锁,那么会带来很多额外的不必要的开销。可以选择一个不太大的值,在性能和花销上寻找一个平衡。","可见读多写少的场景,使用读写锁并发性能会更优。可以预见的是如果写占比更低,那么读写锁带的并发效果会更优。","和","场景下将单","多线程模型改为主从","多线程模型,避免对同一个消息队列锁读取。","大部分业务场景是读多写少,所以使用读写锁可有效提高对共享数据的访问效率。最坏的情况,只有写请求,那么读写锁顶多退化成互斥锁。所以优先使用读写锁而非互斥锁,可以提高程序的并发性能。","如果加锁无法避免,则可以采用分片的形式,减少对资源加锁的次数,这样也可以提高整体的性能。","如果并发无法做到无锁化,优先使用共享锁而非互斥锁。","将元素插入到链表的首部","并发写入有锁链表","库),可以用于实现无锁数据结构,如无锁链表。","循环多次尝试,直至成功。","性能对比","性能对比1.无锁化","我们以一个简单的线程安全单向链表的插入操作来看下无锁编程和普通加锁的区别。","我们分别对两种链表做一个并发写入的操作验证一下其功能。","我们可以通过在访问共享资源前前用","所谓互斥锁,指锁只能被一个","执行当前包下的所有基准测试,结果如下:","接下来,我们测试三种情景下,互斥锁和读写锁的性能差异。","提供了两个导出方法用来使用锁。","提供了两种锁,互斥锁(sync.mutex)和读写锁(sync.rwmutex),读写锁便是共享锁的一种具体实现。","提供了五个导出方法用来使用锁。","操作的基准测试,对比一下有锁与无锁的性能差异。","操作,即调用compareandswap()方法进行插入,如果插入失败则进行","方法对资源进行上锁,在访问共享资源后调用","方法来释放锁,也可以用","方法获得锁后,其他请求锁的协程都会阻塞在","方法,直到锁被释放。","无锁化主要有两种实现,无锁数据结构和串行无锁。","无锁单向链表","无锁单向链表的简单实现","无锁数据结构","无锁数据结构1.2","有锁","有锁单向链表","有锁单向链表的简单实现","有锁并发写入","有锁链表的字符串形式输出","标准库","比如","注意,多次运行上面的main()函数的结果可能会不相同,因为并发是无序的。","用来调节读操作的占比,来模拟读写占比不同的场景。rpct","的并发读写。","的情况下保证并发安全,并且它的性能也能做到随","的操作耗时很短,所以每次睡眠一微秒(百万分之一秒)来增加耗时,不然对共享资源的访问耗时,小于锁处理的本身耗时,那么使用读写锁带来的性能优化效果将变得不那么明显,甚至会降低性能。","看下二者的性能差异:","获取读锁,所以是一种共享锁。但写锁是互斥的。","获得。共享锁指可以同时被多个","获得的锁。","表示读写一致(各占","表示读多写少(读占","表示读少写多(读占","设为","语句来保证互斥锁一定会被解锁。在一个","读写一致(各占","读写锁是一种共享锁,也称之为多读单写锁","读写锁的存在是为了解决读多写少时的性能问题,读场景较多时,读写锁可有效地减少锁阻塞的时间。","读多写少(读占","读少写多(读占","读操作。","读锁之间不互斥,没有写锁的情况下,读锁是无阻塞的,多个协程可以同时获得读锁。","返回读锁,使用","这里我介绍的是后台微服务开发经常遇到的一种情况。我们经常需要并发拉取多方面的信息,汇聚到一个变量上。那么此时就存在对同一个变量互斥写入的情况。比如批量并发拉取用户信息写入到一个","这里需要注意的是,因为每次读写","进行","都实现了分片功能,每个分片一把锁,采用分片存储的方式减少加锁的次数从而提高整体性能。","释放写锁","释放读锁","释放锁","链表节点","首先根据互斥锁和读写锁分别实现对共享","(1)无锁单向链表实现时在插入时需要进行","(2)为了方便打印链表内容,实现一个string()方法遍历链表,且使用值作为接收者,避免打印对象指针时无法生效。"],"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":["\"fmt\"","\"github.com/panjf2000/ants\"","\"img\"","\"runtime\"","\"runtime/debug\"","\"sync\"","\"time\"","%v","%v\\n\",","&&","&wg)","(","(max",")","*sync.waitgroup)","+0x11b","+0x65","+0x72","+0x75","+0x8f","...","//","/users/dablelv/work/code/test/main.go:16","/usr/local/go/src/fmt/print.go:265","/usr/local/go/src/fmt/print.go:274","/usr/local/go/src/internal/poll/fd_mutex.go:147","/usr/local/go/src/internal/poll/fd_mutex.go:239","/usr/local/go/src/internal/poll/fd_unix.go:262","/usr/local/go/src/os/file.go:176","/usr/local/go/src/os/file_posix.go:49","0","05","07","0;","0s","0x0)","0x1,","0x1})","0x8,","0x8})","0xc0000ac008},","0xc12ea62f50})","0。","1","1)","1.1","1.2","1.协程数过多的问题1.1","1000","1000)","10000","10000)","100000","100000)","100ns,相对于线程的微秒级耗时切换,性能表现非常优秀,但是仍有开销。","1048575)","108668","1142025","1158408","1m","1,错误输出文件描述符为","2","2.0027m","2.2","2.限制协程数量","20","2022","2022/03/06","20:37:02","20:37:03","20:37:04","20:37:05","20:59:41","2^31","2k","2kb","2,标准输入的文件描述符为","3","3)","3.协程池化","30.9523m","4","4.小结","4gb/2kb","4gb,那么至多允许","5","6","7","8","9","997200n","99n",":=","=","===","[running]:","_","```go","```shell","ant","ants.newpool(10000)","ants,我们简单地使用其默认的协程池,直接将任务提交并发执行。默认协程池的缺省容量","cal()","ch","channel","channel,在没有被接收的情况下,至多发送","common","concurr","console.log(\"plugin","const","cost","cost,","cpu","createlargenumgoroutine(1000,","createlargenumgoroutine(10000,","createlargenumgoroutine(100000,","createlargenumgoroutine(num","debug.setgcpercent(","descriptor)来访问文件,标准输出的文件描述符为","e.target.tagnam","file","file/socket","fmt.fprintln({0x10c00e0,","fmt.printf","fmt.printf(\"gc","fmt.println(...)","func","function(e){","g","gc","gitbook该文章修订时间:","go","golang","goroutin","http","import","int,","internal/poll.(*fd).write(0xc0000ae060,","internal/poll.(*fd).writelock(...)","internal/poll.(*fdmutex).rwlock(0xc0000ae060,","jeffail/tunni","linux","main","main()","main.go","main.main.func1(0x0)","make(chan","mani","math.maxint32","math.maxint32。","newpool","num","oper","os.(*file).write(...)","os.(*file).write(0xc0000ac008,","p,","packag","panic:","panjf2000/ant","per","pool","popup....\");document.onclick","power","processor","run","runtime.gc()","runtime.gomaxprocs(1)","set","singl","size","socket","src/runtime/runtime2.go里面,我们可以找到","struct{},","struct。","sync.waitgroup","sync.waitgroup。","t","time.now()","time.since(t)","total","us","var","wg","wg.add(num)","wg.wait()","window.open(e.target.src,e.target.src)}img{cursor:pointer}","{","{0xc12cadf690,","{0xc12ea62f90,","}","~","上例中创建了缓冲区大小为","上面的例子只是简单地限制了协程开辟的数量。在此基础之上,基于对象复用的思想,我们可以重复利用已开辟的协程,避免协程的重复创建销毁,达到池化的效果。","上面的分析目的是为了尽可能地量化","下面以","个任务,达到了协程并发控制的目的。","个协程同时存在。那如果协程中还存在着其他需要分配内存的操作,那么允许并发执行的协程将会数量级地减少。","个协程的并发,2^31","个数字。","个消息则被阻塞。开启协程前,调用ch","为例,简单介绍其使用。","为并发而生。goroutin","亿个,每个协程内部几乎没有做什么事情。正常的情况下呢,这个程序会乱序输出","从日志中可以很容易看到,每秒钟只并发执行了","使用","保证","关闭gc改为手动执行","内存开销","写并发程序的时候随便起个成千上万的","函数引起的,fmt.printf","创建","前面的例子过于极端,一般情况下程序也不会无限开辟协程,旨在说明协程数量是有限制的,不能无限开辟。","协程池化,我们可以自己写一个协程池,但不推荐这么做。因为已经有成熟的开源库可供使用,无需再重复造轮子。目前有很多第三方库实现了协程池,可以很方便地用来控制协程的并发数量,比较受欢迎的有:","协程的代价","协程的代价2.2","压力)。","去执行另外一个协程,下面看一下协程之间切换的耗时。","只设置一个","可以利用信道","可见一次协程的切换,耗时大概在","呢?goroutin","如果我们开辟很多协程,但不会导致程序崩溃,可以吗?如果真要这么做的话,我们应该清楚地知道,协程虽然轻量,但仍有开销。","如果自定义协程池容量大小,可以调用","对单个","将格式化后的字符串打印到屏幕,即标准输出。在","并不是必须的,例如","开销","开销。我们可以利用runntime.gosched()让当前协程主动让出","当创建的","手动gc","控制并发处理的任务数量,就不需要","数量,复用协程,达到更高效执行任务的效果。","方法来实例化具有给定容量的池,如下所示:","时间上,协程调度也会有","是一个简单易用的高性能","是由","服务,每个请求天然是并发的,此时使用","来回收,如果无休止地创建大量","毫无压力,但当我们起十万、百万甚至千万个","池,实现了对大规模","的","的内存,在源码","的压力。","的并发操作个数超过了系统上限,这个报错是","的开销。虽然官方宣称用","的开销主要是三个方面:创建(占用内存)、调度(增加调度器负担)和删除(增加","的空间,那么假设计算机的内存是","的缓冲区大小来实现。","的调度管理和复用,允许使用者在开发并发程序的时候限制","程串行执行","程到运行结束,占用的内存资源是需要由","程势必会带来性能影响,甚至程序崩溃。所以,我们应尽可能的控制协程数量,如果有需要,请复用它。","程占用约","程后,势必会造成对","程序会像预期的那样顺利的运行吗?","程序崩溃","程序崩溃1.2","程数量越多,gc","程的结构定义type","程(goroutine)是由","空间上,一个","简而言之,系统的资源被耗尽了。","系统中,标准输出也可以视为文件,内核(kernel)利用文件描述符(fil","系统地资源是有限,协程是有代价的,为了保护程序,提高性能,我们应主动限制并发的协程数量。","约为","耗时越大。","虽然轻量,但天下没有免费的午餐,无休止地开辟大量","调度开销","轻量的开销将被放大。","运行时管理的轻量级线程。通过它我们可以轻松实现并发编程。但是当我们无限开辟协程时,将会遇到致命的问题。","运行时管理的轻量级线程,通过它我们可以轻松实现并发编程。go","运行的结果是程序直接崩溃了,关键的报错信息是:","运行结果如下:","运行输出:","这个例子实现了","这行代码去掉呢?那程序很可能会因为内存不足而崩溃。这一点更好理解,每个协程至少需要消耗","那如果我们将","限制协程数量","限制协程数量3.协程池化4.小结1.协程数过多的问题",",若缓存区满,则阻塞。协程任务结束,调用"],"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":["\"img\"","&&","&config{","(","(amd64/386),","(o","(to",")","*config","*once)","*testing.b)","//","0","0,","05","07","0;","1)","1.732","1.简介2.原理2.1","12","13339154","2.1","2.2","2.60ghz","2.原理","2022","21:02:49","3.006","3.使用","3.性能差异","670438965","87.46","9750h",":=","=","==","===","@","action","action.","allow","amd64","architectur","architectures.","argument","atomic.compareandswapuint32(&o.done,","atomic.loaduint32(&o.done)","atomic.storeuint32","atomic.storeuint32(&o.done,","back","be","bench=.","benchmarkreadconfig","benchmarkreadconfigwithonc","benchmarkreadconfigwithonce(b","ca","calcul","call","called,","calls,","captur","caus","compact","complete.","config","config.init(filename)","config.once.do(func()","consid","console.log(\"plugin","context","copi","core(tm)","cpu","cpu:","darwin","darwin/amd64","deadlock.","defer","delay","differ","do(),参数","do(f","do:","done","doslow(f","e.target.tagnam","each","even","exactli","execute.","f","f()","f,","f.","fall","fast","fewer","finished.","first","first'","func","func())","function","function(e){","futur","gitbook该文章修订时间:","given","go","go1.17","goarch:","goos:","gopath","gopath:","goroot","goroot:","guarante","guarantee:","here","hot","i7","immediately,","implement","incorrect","indic","init","initi","inlin","instanc","instruct","intel(r)","intend","invocation.","invok","liter","m","main/onc","mean","more","multipl","mutex","mutex,","necessari","new","niladic,","note:","ns/op","o.don","o.done,在热路径上是比较好理解的。如果","o.doslow(f)","o.m.lock()","o.m.unlock()","object","offset)","offset)。在机器码中,偏移量是随指令传递的附加值,cpu","ok","on","onc","once.","once.do(f)","once.do(func()","os.getenv(\"gopath\"),","os.getenv(\"goroot\"),","outlin","packag","panics,","pass","path","path.","path”","path)是程序非常频繁执行的一系列指令,sync.onc","perform","performed.","pkg:","place","popup....\");document.onclick","power","readconfig","readconfig()","readconfigwithonce()","requir","return","returned;","returns,","returns.","run","second","simultan","site.","slow","stackoverflow","string","struct","sync.onc","sync.once?","test","time","times,","two","type","uint32","until","us","use.","valu","var","version","wait","whether","window.open(e.target.src,e.target.src)}img{cursor:pointer}","winner","without","words,","{","}","})","“hot","下面看一下","中保证了","为什么放在第一个字段就能够减少指令呢?因为结构体第一个字段的地址和结构体的指针是相同的,如果是第一个字段,直接对结构体的指针解引用即可。如果是其他的字段,除了结构体指针外,还需要计算与第一个值的偏移(calcul","为什么是第一个字段。","为什么是第一个字段?","为什么是第一个字段?3.性能差异1.简介","仅提供了一个导出方法","从字段","保证函数只会被执行一次和多次执行,二者的性能差异。","做一个二次判断,来保证任务函数只会被执行一次,done","函数中,通过对成员变量","函数是当所在的","函数类似,但有区别。","初始化函数仅执行了一次,避免了多次重复初始化,在并发环境下很有用。","前有一段注释,说明了done","参考","变量仅初始化一次,初始化完成后驻留在内存里。","变量初始化过程中,所有读都被阻塞,直到初始化完成;","只会被修改一次。","可以在代码的任意位置初始化和调用,因此可以延迟到使用时再执行,并发场景下是线程安全的。","可能会被多个协程并发调用,为了提升性能(减少执行时间和内存占用),使用","在多数情况下,sync.onc","在热路径中,done","实现线程安全。果不其然,和上面的猜想一致。","实现非常简洁。do()","当且仅当第一次访问某个变量时,进行初始化(写);","我们以一个简单示例,来说明使用","我们看下二者的性能差异。","执行测试结果如下:","抛去大段的注释,可以看到","指令,也就是说,这样做能够提升性能。","放在第一个字段,能够减少","是","是一个比较好的方式。","是只会被执行一次的函数,一般为对象初始化函数。","标准库提供的使函数只执行一次的实现,常应用于单例模式,例如初始化配置、保持数据库连接等。作用与","源码","源码2.2","热路径(hot","用来保证函数只执行一次。要达到这个效果,需要做到两点:","的修改是一个互斥操作。在执行任务函数前,对","的判断,来决定是否执行传入的任务函数。执行任务函数前,通过锁保证任务函数的执行和","程的情况下,函数仍然只执行一次,比如锁。","线程安全,保障在多","结构,其有两个变量。使用","绝大部分场景都会访问","统计函数执行次数,使用锁","编译后的机器码指令更少,更直接,必然是能够提升性能的。","考虑一个简单的场景,函数","被用于控制变量的初始化,这个变量的读写满足如下三个条件:","计数器,统计函数执行次数;","避免重复执行","需要做一次偏移值与指针的加法运算,才能获取要访问的值的地址。因为,访问第一个字段的机器代码更紧凑,速度更快。","需要读取环境变量,并转换为对应的配置。环境变量在程序执行前已经确定,执行过程中不会发生改变。readconfig","首次被加载时执行,若迟迟未被使用,则既浪费了内存,又延长了程序加载时间。"],"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":["!condition()","!done","\"img\"","\"start","\"wake","$","&&","&cond{l:","(c","(often","*","*cond","*cond)","*mutex","*rwmutex),","*sync.cond)","...","//","05","09","1","1.简介2.使用场景3.实现原理4.使用示例5.注意事项1.简介","1s,一方面是模拟耗时,另一方面是确保前面的","2.使用场景","2022","20:35:37","3","3)","3.实现原理","3s,确保所有操作执行完毕。","4.使用","4.使用示例","5.注意事项",":=","=","===","all\")","allow","announc","any.","associ","assum","atom","awoken","befor","broadcast","broadcast()","c","c,","c.","c.broadcast()","c.checker.check()","c.l","c.l.lock()","c.l.unlock()","c.l,因为","c.wait()","call","call.","caller","case","ch","chan","chang","channel","channel,每个协程阻塞在一个","checker","close","close(ch)","cond","cond)","condit","console.log(\"plugin","copi","copycheck","correctli","done","dure","e.target.tagnam","each","event.","execut","execution,","fals","first","fmt.println(name,","func","function(e){","gitbook该文章修订时间:","go","goroutin","goroutine.","goroutine。","goroutine。如果其他协程调用了","goroutine。当共享资源的状态发生变化时,sync.cond","goroutine。当共享资源的状态发生变化的时候,sync.cond","goroutine,无需锁保护。","goroutine,无需锁保护。broadcast","held","hold","if,是因为当前协程被唤醒时,条件不一定符合要求,需要再次","implement","instead,","l","l.","later","lock","locker","locker)","locker。因为","loop:","l}","l(互斥锁","main()","main.go","make","make(chan","method.","mutex","mutex/rwmutex","mutex,或读写锁","new","newcond","newcond(l","nocopi","notifi","notifylist","notifylist.wait、notifylist.notifi","notifylist。如果这个队列被复制的话,那么就在并发场景下导致不同","observ","occurr","on","panic。","point","popup....\");document.onclick","power","read","read(\"reader1\",","read(\"reader2\",","read(\"reader3\",","read()","read(nam","reader","reader1","reader2","reader3","reading\")","rendezv","requir","resum","resumes,","return","returning.","returns.","run","runtime_notifylistadd(&c.notify)","runtime_notifylistnotifyall(&c.notify)","runtime_notifylistnotifyone(&c.notify)","runtime_notifylistwait(&c.notify,","rwmutex),当修改条件或者调用","select","signal","signal()","signal.","stackoverflow。","start","string)","string,","struct","struct{})","suspend","sync","sync.cond","sync.cond?","sync.mutex","sync.newcond(&sync.mutex{})","systems,","t","t)","time.sleep(time.second","time.sleep(time.second)","true","true。","true,调用","type","typic","unless","unlik","unlock","us","use.","var","variable,","wait","wait()","wait(),处于等待状态。main","wake","window.open(e.target.src,e.target.src)}img{cursor:pointer}","write","write(\"writer\",","write()","write(nam","writer","writing\")","{","}","上,由接收数据的协程在数据接收完毕后,逐个通知。总之,需要额外的复杂度来完成这件事。","不能被复制","不能被复制的原因,并不是因为其内部嵌套了","与","个","个等待条件变量","中内置一个","中的暂停了","为","主要原因是","主调对条件的检查,使用了","之间操作的","互斥锁","从等待队列中按照顺序唤醒,先进入等待队列,先被唤醒。","会一直阻塞。","会将主调加入条件变量的通知列表,需要修改条件变量,所以主调在调用","会自动释放锁","使用","依旧可以继续使用。这可能就是“全能”与“专精”的区别。","充当条件变量实现","内部是维护着一个","内部维护了一个等待队列,队列中存放的是所有在等待这个","函数前,需要先获得条件变量的成员锁,原因是需要互斥地变更条件变量的等待队列。在","函数最后暂停了","创建","前要加锁","前需要对条件变量进行上锁,主调加入条件变量的通知列表后再解锁。","加锁,并且继续执行","协程都执行到","即多个","只唤醒任意","可以实现,看起来代码更加简洁,那么","可以用来唤醒一个或所有因等待条件变量而阻塞的","可以用来通知等待条件发生而阻塞的","可以用来通知被阻塞的","可以通过","后会进行解锁操作,避免重复解锁引发","后面的代码。","和","唤醒了该协程,那么","唤醒所有等待条件变量","唤醒所有等待的协程。","唤醒顺序","基于互斥锁/读写锁,那它和互斥锁的区别是什么呢?","定位于同步,用于一发多收的场景。虽然","定位于通信,用于一发一收的场景,sync.cond","实例时,需要关联一个锁。","实例都会关联一个锁","实际上","实际上,我们可以使用无缓冲","就能搞定了。","已无法继续使用,而","并不是同一个,这会导致出现有些","我们实现一个简单的例子,三个协程调用","我们想象一个非常简单的场景:","或","或互斥锁,那么只能有一个协程可以等待,并读取到数据,没办法通知其他的协程也读取数据。","执行runtime_notifylistwait会挂起调用者所在的","指针复制是没有问题的。","指针,对于","接收数据,接收完成后,将","操作来达到一发多收的效果,但是","方法在结束阻塞时,会重新给","方法时,必须加锁。","既然","时传入的","是基于互斥锁/读写锁实现的条件变量,用来协调想要访问共享资源的那些","是有区别的,channel","更多关于","有一个协程在异步地接收数据,剩下的多个协程必须等待这个协程接收完数据,才能读取到正确的数据。在这种情况下,如果单纯使用","来实现。","每个","用于阻塞调用者,等待通知。","用来协调想要访问共享资源的","用来解决这类问题。","的","的区别?","的四个成员函数定义如下:","的存在还有必要吗?","的定义如下:","的打印顺序是随机的。","的讨论可参考","程同步。通过","程间的同步。","程,以此来实现多个","程,即保存了一个通知列表。sync.cond","等待下次被唤醒。为了保险起,使用","等待通知,直到","等待,一个","等待,另一个协程调用","经常用在多个","结构来接收通知就行了。","置为","而非","能够确保被唤醒后条件一定符合后,再执行后续的代码。","表示广播通知,其他的","语言在标准库","调用","运行结果如下,注意","运行输出如下,注意","返回前,会重新上锁。重新上锁的原因是主调在","还是以上面给出的同步示例,这里换作","这个时候,就需要有个全局的变量来标志第一个协程数据是否接受完毕,剩下的协程,反复检查该变量的值,直到满足要求。或者创建多个","通常用来保护共享的临界资源,条件变量","通知协程","通知所有等待的协程。","通知队列","通知(事件发生)的场景。如果是一个通知,一个等待,使用互斥锁或","阻塞等待的条件。"],"参考文献.html":["\"img\"","&&","05","09:47:59","10","2022","=","===","advic","atom","cheney","code","comment","console.log(\"plugin","dave","e.target.tagnam","function(e){","gitbook该文章修订时间:","github.com/golang","github.com/ub","github/dgryski/go","go","go/guid","golang","golang内存分配逃逸分析","golang梦工厂","gopherzhang","go语言最佳实践go","go语言的内存逃逸分析","high","layout","perfbook","perform","popup....\");document.onclick","power","proverb","readabl","review","standards/project","stefno","window.open(e.target.src,e.target.src)}img{cursor:pointer}","workshop","|","代码风格","功能设计","博客园","参考文献","最佳性能","极客兔兔","深度解密go","的原理与使用场景","考点汇总","语言之sync.pool","语言高性能编程","项目布局代码风格功能设计最佳性能项目布局"]},"length":44},"tokenStore":{"root":{"0":{"5":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}},"7":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"9":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},":":{"4":{"7":{"docs":{},":":{"5":{"9":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}},"docs":{}},"docs":{}}},"docs":{}},"5":{"9":{"docs":{},":":{"3":{"2":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}},"3":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.013888888888888888},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.006016847172081829},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.009884678747940691},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":1.6851851851851851},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.018808777429467086},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.007220216606498195},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.018223234624145785},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},")":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.007220216606498195},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.015945330296127564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"}":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},",":{"docs":{},"但":{"docs":{},"不":{"docs":{},"够":{"docs":{},"直":{"docs":{},"观":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"更":{"docs":{},"加":{"docs":{},"直":{"docs":{},"观":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},".":{"2":{"5":{"1":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{}},"docs":{}},"docs":{},"导":{"docs":{},"语":{"docs":{"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":10}}}}},";":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.015945330296127564},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.013740458015267175},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.011389521640091117},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"x":{"0":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"1":{"docs":{},"}":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}},"8":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"}":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"docs":{},"c":{"0":{"0":{"0":{"0":{"docs":{},"a":{"docs":{},"c":{"0":{"0":{"8":{"docs":{},"}":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"docs":{}},"docs":{}},"docs":{}}}},"docs":{}},"docs":{}},"docs":{}},"1":{"2":{"docs":{},"e":{"docs":{},"a":{"6":{"2":{"docs":{},"f":{"5":{"0":{"docs":{},"}":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}},"docs":{}},"docs":{}}},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"s":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"1":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{}},"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"n":{"docs":{},"s":{"docs":{},",":{"docs":{},"相":{"docs":{},"对":{"docs":{},"于":{"docs":{},"线":{"docs":{},"程":{"docs":{},"的":{"docs":{},"微":{"docs":{},"秒":{"docs":{},"级":{"docs":{},"耗":{"docs":{},"时":{"docs":{},"切":{"docs":{},"换":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"表":{"docs":{},"现":{"docs":{},"非":{"docs":{},"常":{"docs":{},"优":{"docs":{},"秀":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"仍":{"docs":{},"有":{"docs":{},"开":{"docs":{},"销":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"2":{"0":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"4":{"0":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.009404388714733543}}}},"docs":{}},"4":{"8":{"5":{"7":{"5":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"8":{"6":{"6":{"8":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},":":{"4":{"8":{"docs":{},":":{"4":{"2":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},".":{"docs":{},"函":{"docs":{},"数":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":10}}}}},"、":{"1":{"0":{"0":{"docs":{},"、":{"1":{"0":{"0":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"docs":{}},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"1":{"4":{"2":{"0":{"2":{"5":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"5":{"8":{"4":{"0":{"8":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"9":{"8":{"7":{"9":{"6":{"6":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{},".":{"docs":{},"单":{"docs":{},"元":{"docs":{},"测":{"docs":{},"试":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":10}}}}}}}},"2":{"2":{"6":{"8":{"6":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"4":{"6":{"8":{"8":{"7":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"7":{"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},".":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.01567398119122257},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.018223234624145785},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.00916030534351145},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},".":{"docs":{},"杂":{"docs":{},"项":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":10}}}}}},"3":{"0":{"2":{"6":{"1":{"9":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"3":{"3":{"9":{"1":{"5":{"4":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"4":{"2":{"9":{"4":{"7":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}}}},"4":{"2":{"7":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"4":{"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}}}},"5":{"6":{"9":{"0":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{}},"docs":{},".":{"3":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}}},"8":{"9":{"7":{"2":{"8":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{},":":{"5":{"3":{"docs":{},":":{"5":{"1":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"5":{"1":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"9":{"0":{"docs":{},")":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"您":{"docs":{},"比":{"docs":{},"较":{"docs":{},"两":{"docs":{},"个":{"docs":{},"时":{"docs":{},"刻":{"docs":{},",":{"docs":{},"则":{"docs":{},"差":{"docs":{},"异":{"docs":{},"将":{"docs":{},"不":{"docs":{},"包":{"docs":{},"括":{"docs":{},"这":{"docs":{},"两":{"docs":{},"个":{"docs":{},"时":{"docs":{},"刻":{"docs":{},"之":{"docs":{},"间":{"docs":{},"可":{"docs":{},"能":{"docs":{},"发":{"docs":{},"生":{"docs":{},"的":{"docs":{},"闰":{"docs":{},"秒":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"2":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"7":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}}},"docs":{}},"6":{"5":{"2":{"1":{"4":{"6":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"6":{"docs":{},".":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},"docs":{}}},"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"7":{"0":{"8":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"4":{"6":{"6":{"4":{"8":{"6":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{},".":{"5":{"3":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"8":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},"docs":{}},"docs":{}}},"8":{"6":{"1":{"2":{"7":{"2":{"8":{"8":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"9":{"0":{"6":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{},":":{"0":{"1":{"docs":{},":":{"5":{"0":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}},"docs":{}},"docs":{}}},"docs":{}},"1":{"5":{"docs":{},":":{"3":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{}}},"docs":{}},"2":{"0":{"docs":{},":":{"1":{"2":{"docs":{"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456}}},"docs":{}},"docs":{}}},"9":{"docs":{},":":{"1":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}},"docs":{}},"docs":{}}},"docs":{}},"3":{"1":{"docs":{},":":{"0":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},"docs":{}},"docs":{}}},"docs":{}},"4":{"0":{"docs":{},":":{"3":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}}},"1":{"docs":{},":":{"4":{"3":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}}},"docs":{}},"5":{"3":{"docs":{},":":{"0":{"7":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},"docs":{}},"docs":{}}},"5":{"docs":{},":":{"5":{"5":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}},"docs":{}},"docs":{}}},"6":{"docs":{},":":{"0":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.007220216606498195},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.006589785831960461},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":3.3619047619047615},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":1.7037037037037035},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.010344827586206896},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},".":{"1":{"3":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"2":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"3":{"7":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}},"docs":{}},"docs":{}},"5":{"8":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}},"docs":{}},"docs":{}},"7":{"3":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}},"docs":{}},"8":{"1":{"3":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"4":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{}},"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}},"前":{"docs":{},"言":{"2":{"docs":{},".":{"docs":{},"项":{"docs":{},"目":{"docs":{},"布":{"docs":{},"局":{"2":{"docs":{},".":{"1":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}}},"docs":{}}}}}}},"docs":{}}},"格":{"docs":{},"式":{"docs":{},"化":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":10}}}}},"基":{"docs":{},"本":{"docs":{},"类":{"docs":{},"型":{"docs":{},"偏":{"docs":{},"执":{"docs":{},"通":{"docs":{},"用":{"docs":{},"场":{"docs":{},"景":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"2":{"docs":{},".":{"docs":{},"单":{"docs":{},"一":{"docs":{},"职":{"docs":{},"责":{"docs":{},"包":{"docs":{},"&":{"docs":{},"文":{"docs":{},"件":{"docs":{},"函":{"docs":{},"数":{"3":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"4":{"docs":{},".":{"docs":{},"应":{"docs":{},"用":{"docs":{},"服":{"docs":{},"务":{"5":{"docs":{},".":{"docs":{},"常":{"docs":{},"用":{"docs":{},"工":{"docs":{},"具":{"1":{"docs":{},".":{"docs":{},"基":{"docs":{},"本":{"docs":{},"类":{"docs":{},"型":{"docs":{},"偏":{"docs":{},"执":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}},"docs":{}}}}}}},"docs":{}}}}}}},"docs":{}}}}}}}}}}}},"docs":{}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"指":{"docs":{},"向":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":3.333333333333333}}}}}},"占":{"docs":{},"内":{"docs":{},"存":{"docs":{},"空":{"docs":{},"间":{"2":{"docs":{},".":{"docs":{},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"的":{"docs":{},"作":{"docs":{},"用":{"2":{"docs":{},".":{"1":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},"docs":{}}},"docs":{}}}}}}}}}},"docs":{}}}}}}},"方":{"docs":{},"法":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"为":{"docs":{},"值":{"docs":{},"和":{"docs":{},"指":{"docs":{},"针":{"docs":{},"的":{"docs":{},"区":{"docs":{},"别":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":10}}}}}}}}}}}}}}},"将":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}},"零":{"docs":{},"值":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":3.333333333333333}}}},"错":{"docs":{},"误":{"docs":{},"处":{"docs":{},"理":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":10}}}},"类":{"docs":{},"型":{"2":{"docs":{},".":{"docs":{},"错":{"docs":{},"误":{"docs":{},"包":{"docs":{},"装":{"1":{"docs":{},".":{"docs":{},"错":{"docs":{},"误":{"docs":{},"类":{"docs":{},"型":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}},"docs":{}}}}}}},"docs":{}}}}},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":3.333333333333333}},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"节":{"docs":{},"省":{"docs":{},"内":{"docs":{},"存":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":10}}}}}}}}}}}},"避":{"docs":{},"免":{"docs":{},"使":{"docs":{},"用":{"docs":{},"可":{"docs":{},"变":{"docs":{},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":10}}}}}}}}}}}},"优":{"docs":{},"先":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}}}}}},"反":{"docs":{},"射":{"docs":{},"虽":{"docs":{},"好":{"docs":{},",":{"docs":{},"切":{"docs":{},"莫":{"docs":{},"贪":{"docs":{},"杯":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":10}}}}}}}}}}},"指":{"docs":{},"定":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308}}}},"行":{"docs":{},"内":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"拼":{"docs":{},"接":{"2":{"docs":{},".":{"docs":{},"非":{"docs":{},"行":{"docs":{},"内":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"拼":{"docs":{},"接":{"1":{"docs":{},".":{"docs":{},"行":{"docs":{},"内":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"拼":{"docs":{},"接":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}},"docs":{}}}}}}}}}}},"docs":{}}}}}}}},"[":{"docs":{},"]":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"2":{"docs":{},".":{"docs":{},"[":{"docs":{},"]":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"3":{"docs":{},".":{"docs":{},"[":{"docs":{},"]":{"docs":{},"*":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"4":{"docs":{},".":{"docs":{},"小":{"docs":{},"结":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}},"docs":{}}}}}}}}}}}},"docs":{}}}}}}}}}}}}},"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}},"截":{"docs":{},"取":{"docs":{},"法":{"docs":{},"(":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},")":{"2":{"docs":{},".":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"法":{"docs":{},"(":{"docs":{},"不":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},")":{"3":{"docs":{},".":{"docs":{},"移":{"docs":{},"位":{"docs":{},"法":{"docs":{},"(":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},")":{"4":{"docs":{},".":{"docs":{},"性":{"docs":{},"能":{"docs":{},"对":{"docs":{},"比":{"5":{"docs":{},".":{"docs":{},"小":{"docs":{},"结":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}},"docs":{}}}}}}},"docs":{}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}},"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"为":{"docs":{},"什":{"docs":{},"么":{"docs":{},"需":{"docs":{},"要":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"2":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}},"docs":{}}}}}}}}}},"局":{"docs":{},"部":{"docs":{},"切":{"docs":{},"片":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"确":{"docs":{},"定":{"docs":{},"长":{"docs":{},"度":{"docs":{},"或":{"docs":{},"容":{"docs":{},"量":{"2":{"docs":{},".":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}},"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}},"简":{"docs":{},"介":{"2":{"docs":{},".":{"docs":{},"作":{"docs":{},"用":{"3":{"docs":{},".":{"docs":{},"如":{"docs":{},"何":{"docs":{},"使":{"docs":{},"用":{"4":{"docs":{},".":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"5":{"docs":{},".":{"docs":{},"在":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{},"中":{"docs":{},"的":{"docs":{},"应":{"docs":{},"用":{"1":{"docs":{},".":{"docs":{},"简":{"docs":{},"介":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"docs":{}}}}}}}}}}},"docs":{}}}}}}},"docs":{}}}}}}},"docs":{}}},"原":{"docs":{},"理":{"2":{"docs":{},".":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}}},"docs":{}}},"使":{"docs":{},"用":{"docs":{},"场":{"docs":{},"景":{"3":{"docs":{},".":{"docs":{},"实":{"docs":{},"现":{"docs":{},"原":{"docs":{},"理":{"4":{"docs":{},".":{"docs":{},"使":{"docs":{},"用":{"docs":{},"示":{"docs":{},"例":{"5":{"docs":{},".":{"docs":{},"注":{"docs":{},"意":{"docs":{},"事":{"docs":{},"项":{"1":{"docs":{},".":{"docs":{},"简":{"docs":{},"介":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"docs":{}}}}}}},"docs":{}}}}}}},"docs":{}}}}}}},"docs":{}}}}}}},"docs":{}}},"关":{"docs":{},"于":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":10}}}}},"无":{"docs":{},"锁":{"docs":{},"化":{"1":{"docs":{},".":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}}},"docs":{}}}},"协":{"docs":{},"程":{"docs":{},"数":{"docs":{},"过":{"docs":{},"多":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"1":{"docs":{},".":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}}},"docs":{}}}}}}}}}},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.018518518518518517}}},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"魔":{"docs":{},"法":{"docs":{},"数":{"docs":{},"字":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"我":{"docs":{},"们":{"docs":{},"要":{"docs":{},"删":{"docs":{},"除":{"docs":{},"所":{"docs":{},"有":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}},"错":{"docs":{},"误":{"docs":{},"输":{"docs":{},"出":{"docs":{},"文":{"docs":{},"件":{"docs":{},"描":{"docs":{},"述":{"docs":{},"符":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}},"m":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"b":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}},"s":{"docs":{},",":{"docs":{},"一":{"docs":{},"方":{"docs":{},"面":{"docs":{},"是":{"docs":{},"模":{"docs":{},"拟":{"docs":{},"耗":{"docs":{},"时":{"docs":{},",":{"docs":{},"另":{"docs":{},"一":{"docs":{},"方":{"docs":{},"面":{"docs":{},"是":{"docs":{},"确":{"docs":{},"保":{"docs":{},"前":{"docs":{},"面":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}},"2":{"0":{"0":{"0":{"docs":{},"}":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}},"9":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}},"docs":{}},"2":{"2":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},"/":{"0":{"3":{"docs":{},"/":{"0":{"6":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.022779043280182234}}},"docs":{}},"2":{"7":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},".":{"9":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},":":{"3":{"5":{"docs":{},":":{"3":{"7":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"docs":{}},"docs":{}}},"7":{"docs":{},":":{"0":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}},"3":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}},"4":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}},"5":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}}},"docs":{}},"4":{"7":{"docs":{},":":{"3":{"3":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}}},"docs":{}},"5":{"0":{"docs":{},":":{"2":{"6":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"docs":{}},"docs":{}}},"7":{"docs":{},":":{"3":{"9":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{}}},"9":{"docs":{},":":{"4":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}},"%":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},"1":{"2":{"4":{"2":{"3":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"3":{"0":{"7":{"0":{"6":{"4":{"3":{"3":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"6":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}}},"9":{"1":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"5":{"2":{"1":{"2":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}}},":":{"0":{"2":{"docs":{},":":{"4":{"9":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"2":{"1":{"7":{"6":{"3":{"9":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"4":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"9":{"0":{"3":{"7":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"3":{"3":{"docs":{},")":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}}}},"6":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}}},"9":{"docs":{},".":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}}},"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}},"4":{"0":{"6":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"6":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}},"docs":{}},"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.018018018018018018}}},"5":{"8":{"6":{"6":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"7":{"1":{"4":{"1":{"5":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"6":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"2":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},".":{"4":{"0":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}}},"8":{"6":{"1":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"9":{"6":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.017241379310344827},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},".":{"0":{"0":{"2":{"7":{"docs":{},"m":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}},"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}},"1":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"2":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"3":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},"4":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"5":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"6":{"0":{"docs":{},"g":{"docs":{},"h":{"docs":{},"z":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"7":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"9":{"6":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}},"docs":{}},"docs":{}},"docs":{},"项":{"docs":{},"目":{"docs":{},"布":{"docs":{},"局":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"代":{"docs":{},"码":{"docs":{},"行":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":10}}}}},"单":{"docs":{},"一":{"docs":{},"职":{"docs":{},"责":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}},"编":{"docs":{},"译":{"docs":{},"期":{"docs":{},"验":{"docs":{},"证":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":3.333333333333333}}}}}}},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":3.333333333333333}},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":3.333333333333333}}}}},"场":{"docs":{},"景":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"将":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":1.6666666666666665}}}}}}}}},"错":{"docs":{},"误":{"docs":{},"包":{"docs":{},"装":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}},"避":{"docs":{},"免":{"docs":{},"在":{"docs":{},"公":{"docs":{},"共":{"docs":{},"结":{"docs":{},"构":{"docs":{},"中":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"类":{"docs":{},"型":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":10}}}}}}}}}}}},"重":{"docs":{},"复":{"docs":{},"转":{"docs":{},"换":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"到":{"docs":{},"字":{"docs":{},"节":{"docs":{},"切":{"docs":{},"片":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":10}}}}}}}}}}}}}}}},"少":{"docs":{},"量":{"docs":{},"的":{"docs":{},"重":{"docs":{},"复":{"docs":{},"不":{"docs":{},"比":{"docs":{},"反":{"docs":{},"射":{"docs":{},"差":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}},"指":{"docs":{},"定":{"docs":{},"切":{"docs":{},"片":{"docs":{},"容":{"docs":{},"量":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}},"非":{"docs":{},"行":{"docs":{},"内":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"拼":{"docs":{},"接":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}},"[":{"docs":{},"]":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}},"拷":{"docs":{},"贝":{"docs":{},"法":{"docs":{},"(":{"docs":{},"不":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"的":{"docs":{},"作":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":5}}}}}}}},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"作":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}},"减":{"docs":{},"少":{"docs":{},"锁":{"docs":{},"竞":{"docs":{},"争":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"限":{"docs":{},"制":{"docs":{},"协":{"docs":{},"程":{"docs":{},"数":{"docs":{},"量":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":10}}}}}}}},"原":{"docs":{},"理":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"^":{"3":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{},"b":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}},"}":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},",":{"docs":{},"从":{"docs":{},"第":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}},"因":{"docs":{},"此":{"docs":{},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"空":{"docs":{},"出":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}},"标":{"docs":{},"准":{"docs":{},"输":{"docs":{},"入":{"docs":{},"的":{"docs":{},"文":{"docs":{},"件":{"docs":{},"描":{"docs":{},"述":{"docs":{},"符":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}},"k":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"b":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"3":{"0":{"0":{"7":{"9":{"7":{"8":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"3":{"6":{"9":{"3":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{}},"docs":{}},"7":{"4":{"8":{"4":{"9":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"9":{"1":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{},".":{"9":{"5":{"2":{"3":{"docs":{},"m":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"1":{"5":{"4":{"3":{"9":{"1":{"6":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"6":{"1":{"3":{"1":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"6":{"3":{"5":{"2":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"2":{"5":{"1":{"9":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}},"3":{"3":{"9":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.013513513513513514}}},"docs":{}},"docs":{}},"4":{"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}}}},"5":{"9":{"docs":{},".":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}}},"docs":{}},"6":{"1":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"5":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"docs":{},".":{"3":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}}},"7":{"docs":{},".":{"3":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}}},"8":{"0":{"6":{"2":{"6":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"7":{"9":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{}},"9":{"docs":{},".":{"5":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}}},"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.009111617312072893},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},".":{"0":{"0":{"6":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{},"g":{"docs":{},"h":{"docs":{},"z":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}},"docs":{},"}":{"docs":{},"[":{"docs":{},"i":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}},"1":{"4":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.00510204081632653}}},"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"2":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"3":{"7":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"5":{"1":{"0":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"docs":{}},"docs":{}},"7":{"4":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"8":{"0":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"6":{"5":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"9":{"0":{"8":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{},"小":{"docs":{},"结":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"的":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"好":{"docs":{},"过":{"docs":{},"引":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":10}}}}},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}},"在":{"docs":{},"边":{"docs":{},"界":{"docs":{},"处":{"docs":{},"拷":{"docs":{},"贝":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":2.5}}}}}}}},"不":{"docs":{},"要":{"docs":{},"在":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":3.333333333333333}}}}},"慎":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"指":{"docs":{},"定":{"docs":{},"容":{"docs":{},"器":{"docs":{},"容":{"docs":{},"量":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":10}}}}}}}},"[":{"docs":{},"]":{"docs":{},"*":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}},"移":{"docs":{},"位":{"docs":{},"法":{"docs":{},"(":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"合":{"docs":{},"理":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"减":{"docs":{},"少":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"将":{"docs":{},"变":{"docs":{},"量":{"docs":{},"限":{"docs":{},"制":{"docs":{},"在":{"docs":{},"栈":{"docs":{},"上":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":10}}}}}}}}}}}}}}},"如":{"docs":{},"何":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"优":{"docs":{},"先":{"docs":{},"使":{"docs":{},"用":{"docs":{},"共":{"docs":{},"享":{"docs":{},"锁":{"docs":{},"而":{"docs":{},"非":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}},"协":{"docs":{},"程":{"docs":{},"池":{"docs":{},"化":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":3.333333333333333}}}},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"实":{"docs":{},"现":{"docs":{},"原":{"docs":{},"理":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"s":{"docs":{},",":{"docs":{},"确":{"docs":{},"保":{"docs":{},"所":{"docs":{},"有":{"docs":{},"操":{"docs":{},"作":{"docs":{},"执":{"docs":{},"行":{"docs":{},"完":{"docs":{},"毕":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}},"4":{"0":{"4":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}},"docs":{},".":{"6":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}}},"1":{"2":{"4":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{}},"2":{"3":{"docs":{},".":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}}},"docs":{}},"3":{"2":{"0":{"4":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"3":{"8":{"6":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{}},"6":{"8":{"7":{"3":{"8":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"4":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"6":{"1":{"6":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"4":{"9":{"7":{"4":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"8":{"5":{"9":{"1":{"7":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"9":{"8":{"6":{"7":{"3":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.041379310344827586},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},".":{"4":{"0":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{},"依":{"docs":{},"赖":{"docs":{},"管":{"docs":{},"理":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":10}}}}}},"应":{"docs":{},"用":{"docs":{},"服":{"docs":{},"务":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}},"枚":{"docs":{},"举":{"docs":{},"从":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":3.333333333333333}}}}},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"方":{"docs":{},"式":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":10}}}}}}}}},"小":{"docs":{},"结":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"性":{"docs":{},"能":{"docs":{},"对":{"docs":{},"比":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}},"差":{"docs":{},"异":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"与":{"docs":{},"空":{"docs":{},"数":{"docs":{},"组":{"docs":{},"对":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"的":{"docs":{},"影":{"docs":{},"响":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"使":{"docs":{},"用":{"docs":{},"确":{"docs":{},"定":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":5}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":3.333333333333333}},"示":{"docs":{},"例":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},",":{"docs":{},"d":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}},"docs":{}}}}},"必":{"docs":{},"须":{"docs":{},"空":{"docs":{},"出":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}},"此":{"docs":{},"时":{"docs":{},",":{"docs":{},"内":{"docs":{},"存":{"docs":{},"已":{"docs":{},"经":{"docs":{},"是":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"的":{"docs":{},",":{"docs":{},"从":{"docs":{},"第":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}},"g":{"docs":{},"b":{"docs":{},"/":{"2":{"docs":{},"k":{"docs":{},"b":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"docs":{}},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"至":{"docs":{},"多":{"docs":{},"允":{"docs":{},"许":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"5":{"0":{"0":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"4":{"3":{"3":{"2":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"7":{"6":{"2":{"5":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},".":{"7":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"%":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},",":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}},"1":{"9":{"4":{"7":{"2":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"3":{"2":{"3":{"5":{"0":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{}},"docs":{}},"4":{"docs":{},".":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}}},"5":{"7":{"0":{"5":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"4":{"docs":{},".":{"6":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}}},"5":{"6":{"4":{"3":{"6":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{}},"docs":{},",":{"8":{"9":{"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}},"docs":{}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}},"6":{"0":{"6":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{}},"7":{"8":{"docs":{},".":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}}},"docs":{}},"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},".":{"0":{"9":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"4":{"2":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}},"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":10}}}}},"常":{"docs":{},"用":{"docs":{},"工":{"docs":{},"具":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}},"[":{"docs":{},"]":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":5}}}}}}}}}}}},"小":{"docs":{},"结":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"在":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{},"中":{"docs":{},"的":{"docs":{},"应":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}},"注":{"docs":{},"意":{"docs":{},"事":{"docs":{},"项":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"}":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}},"6":{"0":{"0":{"7":{"9":{"0":{"0":{"3":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"3":{"9":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}}},"docs":{}},"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},")":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517}}}},"5":{"docs":{},".":{"0":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}}},"6":{"5":{"3":{"4":{"1":{"8":{"9":{"6":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"9":{"3":{"0":{"6":{"7":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"7":{"0":{"4":{"3":{"8":{"9":{"6":{"5":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"9":{"2":{"4":{"0":{"0":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},".":{"4":{"5":{"4":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{},"错":{"docs":{},"误":{"docs":{},"处":{"docs":{},"理":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":10}}}}}},"切":{"docs":{},"片":{"docs":{},"删":{"docs":{},"除":{"docs":{},"指":{"docs":{},"定":{"docs":{},"元":{"docs":{},"素":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":10}}}}}}}}}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"7":{"0":{"3":{"2":{"9":{"2":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"6":{"3":{"8":{"9":{"2":{"8":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"4":{"8":{"4":{"6":{"7":{"9":{"7":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"5":{"2":{"0":{"0":{"1":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"docs":{}},"docs":{}},"7":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"6":{"2":{"docs":{},".":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}}},"docs":{}},"7":{"3":{"6":{"3":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},".":{"docs":{},"注":{"docs":{},"释":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":10}}}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"8":{"0":{"0":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}},"7":{"4":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"%":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},",":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}},"1":{"9":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.00683371298405467}}},"docs":{}},"docs":{},".":{"9":{"6":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{}}},"2":{"4":{"9":{"4":{"6":{"9":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"3":{"2":{"4":{"1":{"8":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"5":{"docs":{},".":{"2":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"docs":{}}},"7":{"2":{"8":{"docs":{},")":{"docs":{},",":{"docs":{},"也":{"docs":{},"不":{"docs":{},"在":{"docs":{},"计":{"docs":{},"算":{"docs":{},"中":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"闰":{"docs":{},"秒":{"docs":{},"(":{"docs":{},"i":{"docs":{},"s":{"docs":{},"s":{"docs":{},"u":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}},"docs":{}},"8":{"2":{"4":{"6":{"4":{"9":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{},".":{"4":{"6":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}},"docs":{}}},"9":{"3":{"docs":{},".":{"6":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"docs":{}}},"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}},"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.03125},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.050314465408805034},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.04332129963898917},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.020689655172413793},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},",":{"7":{"docs":{},",":{"6":{"docs":{},",":{"9":{"docs":{},",":{"5":{"docs":{},",":{"4":{"docs":{},",":{"3":{"docs":{},",":{"1":{"docs":{},",":{"2":{"docs":{},",":{"0":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},".":{"docs":{},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":10}}}}}},"9":{"7":{"0":{"0":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"docs":{}},"5":{"0":{"docs":{},"h":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"docs":{}},"8":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"docs":{}}},"docs":{},".":{"1":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"docs":{}},"docs":{}}},"9":{"7":{"2":{"0":{"0":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},".":{"5":{"3":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{}},"docs":{},"流":{"docs":{},"程":{"docs":{},"控":{"docs":{},"制":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":10}}}}}}},"}":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},",":{"8":{"docs":{},",":{"7":{"docs":{},",":{"6":{"docs":{},",":{"5":{"docs":{},",":{"4":{"docs":{},",":{"3":{"docs":{},",":{"2":{"docs":{},",":{"0":{"docs":{},",":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{},"\"":{"0":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},"1":{"9":{"2":{"docs":{},".":{"0":{"docs":{},".":{"2":{"docs":{},".":{"0":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498}}}},":":{"8":{"0":{"0":{"0":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{},".":{"0":{"docs":{},".":{"0":{"docs":{},"\"":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.006578947368421052}}}},"docs":{}}},"docs":{}},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.012269938650306749}}}},":":{"8":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}},"docs":{}}},"8":{"0":{"0":{"0":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498}}}}},"docs":{}},"docs":{}},"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.012269938650306749}}}}},"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.034482758620689655},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01845018450184502},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"i":{"docs":{},"m":{"docs":{},"g":{"docs":{},"\"":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"r":{"docs":{},"s":{"docs":{},"p":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.022988505747126436}}}},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"\"":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"/":{"docs":{},"d":{"docs":{},"e":{"docs":{},"b":{"docs":{},"u":{"docs":{},"g":{"docs":{},"\"":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},",":{"docs":{},"j":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"y":{"docs":{},",":{"docs":{},"s":{"docs":{},"p":{"docs":{},"i":{"docs":{},"k":{"docs":{},"e":{"docs":{},"\"":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"\"":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}}}}},"u":{"docs":{},"n":{"docs":{},"k":{"docs":{},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}},"s":{"docs":{},"a":{"docs":{},"f":{"docs":{},"e":{"docs":{},"\"":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},".":{"docs":{},".":{"docs":{},"/":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"/":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}},"\"":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976}},"}":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886}}}}},"z":{"docs":{},"\"":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886}}}}},"\"":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"/":{"docs":{},"j":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"\"":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}}},"o":{"docs":{},"o":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635}},"}":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886}}}}}},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"e":{"docs":{},"d":{"docs":{},"\"":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"u":{"docs":{},"b":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"o":{"docs":{},"l":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"/":{"docs":{},"e":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"i":{"docs":{},"c":{"docs":{},"/":{"docs":{},"v":{"7":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613}}}},"docs":{}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"/":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{},"s":{"docs":{},"/":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"/":{"docs":{},"p":{"docs":{},"k":{"docs":{},"g":{"docs":{},"/":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"n":{"docs":{},"j":{"docs":{},"f":{"2":{"0":{"0":{"0":{"docs":{},"/":{"docs":{},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{},"s":{"docs":{},"\"":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}}}},"o":{"docs":{},".":{"docs":{},"u":{"docs":{},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},"i":{"docs":{},"c":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"x":{"docs":{},"/":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},"/":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"y":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"r":{"docs":{},"o":{"docs":{},"l":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613}}}}}}}}}}}}},"m":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"s":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613}}}}}}}}}}}}}}}}},"_":{"docs":{},"e":{"docs":{},"n":{"docs":{},"v":{"docs":{},"\"":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"\"":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}},"o":{"docs":{},"s":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}},"u":{"docs":{},"b":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"\"":{"docs":{},"}":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},"\"":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"/":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},"i":{"docs":{},"c":{"docs":{},"\"":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"j":{"docs":{},"/":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"\"":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}},"\"":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335}},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.012269938650306749}}}},"a":{"docs":{},"\"":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}},"d":{"docs":{},"d":{"docs":{},"\"":{"docs":{},"}":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"p":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"/":{"docs":{},"j":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{},"\"":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}},".":{"docs":{},"y":{"docs":{},"a":{"docs":{},"m":{"docs":{},"l":{"docs":{},"\"":{"docs":{},")":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}}}}}}}}},"\"":{"docs":{},"}":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"d":{"docs":{},"o":{"docs":{},"e":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635}}}}}},"a":{"docs":{},"r":{"docs":{},"w":{"docs":{},"i":{"docs":{},"n":{"docs":{},"\"":{"docs":{},":":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}},"j":{"docs":{},"o":{"docs":{},"h":{"docs":{},"n":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"@":{"docs":{},"e":{"docs":{},"x":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}},"\"":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"\"":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"i":{"docs":{},"n":{"docs":{},"u":{"docs":{},"x":{"docs":{},"\"":{"docs":{},":":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}},"/":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{},"/":{"docs":{},"v":{"3":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"s":{"docs":{},"/":{"docs":{},"%":{"docs":{},"s":{"docs":{},"/":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"_":{"docs":{},"r":{"docs":{},"e":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"/":{"docs":{},"%":{"docs":{},"s":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"s":{"docs":{},"\"":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"\"":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.012269938650306749}}}},"s":{"docs":{},"\"":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},".":{"docs":{},"o":{"docs":{},"a":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"\"":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}},":":{"8":{"0":{"0":{"0":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}},"w":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"&":{"docs":{},"&":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.013888888888888888},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}},"_":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"{":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}},"d":{"docs":{},"{":{"docs":{},"l":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"t":{"docs":{},"{":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}},"s":{"1":{"docs":{},"{":{"docs":{},"}":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}},"2":{"docs":{},"{":{"docs":{},"}":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}},"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"{":{"docs":{},"}":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"{":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}}}}}},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"{":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}},"t":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{},")":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"{":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},":":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"{":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}},"u":{"docs":{},"m":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}},"{":{"docs":{},"s":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"a":{"docs":{},"g":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}},"g":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}}},"(":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.04516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.010830324909747292},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.0380952380952381},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"f":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.009868421052631578},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.029411764705882353}},"a":{"docs":{},"q":{"docs":{},")":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"*":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"v":{"docs":{},"i":{"docs":{},"s":{"docs":{},"、":{"docs":{},"c":{"docs":{},"i":{"docs":{},"r":{"docs":{},"c":{"docs":{},"l":{"docs":{},"e":{"docs":{},"、":{"docs":{},"d":{"docs":{},"r":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},")":{"docs":{},"配":{"docs":{},"置":{"docs":{},"和":{"docs":{},"脚":{"docs":{},"本":{"docs":{},"放":{"docs":{},"在":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"i":{"docs":{},"n":{"docs":{},"t":{"3":{"2":{"docs":{},",":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}},"docs":{}},"docs":{},"(":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"f":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"m":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}},"y":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}},"a":{"docs":{},"p":{"docs":{},"[":{"docs":{},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"6":{"4":{"docs":{},"]":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}},"x":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"i":{"docs":{},"p":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}},"e":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}},"/":{"docs":{},"*":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"h":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353}},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"s":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"g":{"docs":{},"o":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"/":{"docs":{},"s":{"docs":{},"p":{"docs":{},"e":{"docs":{},"c":{"docs":{},"#":{"docs":{},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"_":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"k":{"docs":{},"y":{"docs":{},"l":{"docs":{},"l":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"s":{"docs":{},"t":{"docs":{},"y":{"docs":{},"l":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},"o":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"s":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.011904761904761904},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.029411764705882353},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.017543859649122806}},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"*":{"docs":{},"n":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{},"(":{"docs":{},"n":{"docs":{},"i":{"docs":{},"l":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}},"将":{"docs":{},"无":{"docs":{},"法":{"docs":{},"编":{"docs":{},"译":{"docs":{},"通":{"docs":{},"过":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}}}}}}}},"[":{"docs":{},"]":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}},"l":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.03550295857988166},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335}},"a":{"docs":{},"t":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}},"b":{"docs":{},"u":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}},"c":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}},"a":{"docs":{},"n":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},"d":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537}}},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},"p":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"a":{"docs":{},"m":{"docs":{},"d":{"6":{"4":{"docs":{},"/":{"3":{"8":{"6":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"docs":{}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}},"o":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},"f":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"=":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.034482758620689655},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0421179302045728},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.033210332103321034},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.019736842105263157},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.008237232289950576},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.015306122448979591},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.037037037037037035},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.0392156862745098},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.016304347826086956},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.05714285714285714},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.04411764705882353},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0390625},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.012531328320802004},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.026845637583892617},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.01444043321299639},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.023076923076923078},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.022900763358778626},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.015945330296127564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.008880994671403197},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},"=":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.006016847172081829},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.007782101167315175},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.026359143327841845},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.006802721088435374},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},"=":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{},"b":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}},"a":{"docs":{},"s":{"docs":{},"k":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"r":{"docs":{},"t":{"docs":{},".":{"docs":{},"e":{"docs":{},"q":{"docs":{},"u":{"docs":{},"a":{"docs":{},"l":{"docs":{},"(":{"docs":{},"t":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.06134969325153374},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}}}}}}}}}}},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}},"o":{"docs":{},"c":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"u":{"docs":{},"m":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"m":{"docs":{},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"d":{"6":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}},"docs":{}}},"p":{"docs":{},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"、":{"docs":{},"r":{"docs":{},"e":{"docs":{},"p":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{},"、":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"d":{"docs":{},";":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}},";":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},",":{"docs":{},"但":{"docs":{},"又":{"docs":{},"没":{"docs":{},"有":{"docs":{},"明":{"docs":{},"确":{"docs":{},"说":{"docs":{},"明":{"docs":{},",":{"docs":{},"既":{"docs":{},"导":{"docs":{},"致":{"docs":{},"了":{"docs":{},"模":{"docs":{},"糊":{"docs":{},"的":{"docs":{},"文":{"docs":{},"档":{"docs":{},",":{"docs":{},"又":{"docs":{},"泄":{"docs":{},"露":{"docs":{},"了":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}},"(":{"docs":{},"n":{"docs":{},"u":{"docs":{},"m":{"docs":{},"s":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635}}}}}}},"s":{"docs":{},".":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"s":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}},"t":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"g":{"docs":{},"t":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"m":{"docs":{},"p":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.006578947368421052}}}}}},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"i":{"docs":{},"m":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}},",":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}},"d":{"docs":{},"d":{"1":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}},"2":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}},"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.01904761904761905},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}},"(":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}},"=":{"0":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"1":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"docs":{}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}},"(":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.01775147928994083}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.01020408163265306}},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}},"g":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"s":{"docs":{},"[":{"0":{"docs":{},"]":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}},"docs":{}}}},"r":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"[":{"4":{"docs":{},"]":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"docs":{}},"a":{"docs":{},"y":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.008152173913043478},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.013793103448275862},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"'":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}},"f":{"docs":{},"i":{"docs":{},"b":{"docs":{},"o":{"docs":{},"n":{"docs":{},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"i":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}}}}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},"s":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"s":{"docs":{},")":{"docs":{},"都":{"docs":{},"必":{"docs":{},"须":{"docs":{},"有":{"docs":{},"注":{"docs":{},"释":{"docs":{},"说":{"docs":{},"明":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},"g":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}}},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.006589785831960461}}}}}}}}}}}},"c":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},"s":{"docs":{},"/":{"docs":{},"o":{"docs":{},"p":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.01567398119122257},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.018223234624145785},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},".":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}},"\"":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"i":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549}}}}}}}},"v":{"docs":{},"o":{"docs":{},"i":{"docs":{},"d":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}}},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":3.3431372549019605},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},"i":{"docs":{},"c":{"docs":{},".":{"docs":{},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549}}}}}},"s":{"docs":{},"w":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"3":{"2":{"docs":{},"(":{"docs":{},"&":{"docs":{},"f":{"docs":{},".":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"n":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},",":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"3":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"(":{"docs":{},"&":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"s":{"docs":{},"w":{"docs":{},"a":{"docs":{},"p":{"docs":{},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"3":{"2":{"docs":{},"(":{"docs":{},"&":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"3":{"2":{"docs":{},"(":{"docs":{},"&":{"docs":{},"o":{"docs":{},".":{"docs":{},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}}}}}}}}}},"b":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.047337278106508875}},"。":{"docs":{},"相":{"docs":{},"反":{"docs":{},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"手":{"docs":{},"动":{"docs":{},"将":{"docs":{},"方":{"docs":{},"法":{"docs":{},"写":{"docs":{},"入":{"docs":{},"具":{"docs":{},"体":{"docs":{},"的":{"docs":{},"列":{"docs":{},"表":{"docs":{},",":{"docs":{},"委":{"docs":{},"托":{"docs":{},"给":{"docs":{},"抽":{"docs":{},"象":{"docs":{},"列":{"docs":{},"表":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"是":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}},"[":{"docs":{},":":{"0":{"docs":{},"]":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}},"docs":{},"j":{"docs":{},"]":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"j":{"docs":{},"]":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"、":{"docs":{},"b":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},".":{"docs":{},".":{"docs":{},".":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"c":{"docs":{},"c":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}}},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}},"g":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"n":{"docs":{},"y":{"docs":{},")":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"t":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"s":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},"(":{"1":{"0":{"0":{"0":{"0":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"简":{"docs":{},"单":{"docs":{},"地":{"docs":{},"使":{"docs":{},"用":{"docs":{},"其":{"docs":{},"默":{"docs":{},"认":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},"池":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"将":{"docs":{},"任":{"docs":{},"务":{"docs":{},"提":{"docs":{},"交":{"docs":{},"并":{"docs":{},"发":{"docs":{},"执":{"docs":{},"行":{"docs":{},"。":{"docs":{},"默":{"docs":{},"认":{"docs":{},"协":{"docs":{},"程":{"docs":{},"池":{"docs":{},"的":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"容":{"docs":{},"量":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"w":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"c":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.05555555555555555},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.017241379310344827},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.007104795737122558}},"+":{"docs":{},"+":{"1":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}},"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.06896551724137931},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},"r":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456}}},")":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}},",":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}},"u":{"docs":{},"s":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"(":{"docs":{},"f":{"docs":{},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}},"m":{"docs":{},"m":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}},"o":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"i":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},"a":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}}}}}},"p":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"、":{"docs":{},"k":{"docs":{},"u":{"docs":{},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"/":{"docs":{},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"、":{"docs":{},"m":{"docs":{},"e":{"docs":{},"s":{"docs":{},"o":{"docs":{},"s":{"docs":{},"、":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"、":{"docs":{},"b":{"docs":{},"o":{"docs":{},"s":{"docs":{},"h":{"docs":{},")":{"docs":{},"。":{"docs":{},"注":{"docs":{},"意":{"docs":{},",":{"docs":{},"在":{"docs":{},"一":{"docs":{},"些":{"docs":{},"存":{"docs":{},"储":{"docs":{},"库":{"docs":{},"中":{"docs":{},"(":{"docs":{},"特":{"docs":{},"别":{"docs":{},"是":{"docs":{},"使":{"docs":{},"用":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"x":{"1":{"2":{"8":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"docs":{}},"docs":{}},"6":{"4":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"docs":{}},"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"t":{"docs":{},"e":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"'":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"n":{"docs":{},"s":{"docs":{},"o":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"p":{"docs":{},"l":{"docs":{},"u":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}},"t":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.007220216606498195},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.014760147601476014},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.047619047619047616},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"s":{"docs":{},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}},"i":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.00842358604091456},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.011086474501108648}},"\"":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01845018450184502}}},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},".":{"docs":{},"d":{"docs":{},"o":{"docs":{},"(":{"docs":{},"f":{"docs":{},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"u":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"e":{"docs":{},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}}}}}}}}}}}}},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.01358695652173913},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},"c":{"docs":{},"r":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.07100591715976332}}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"(":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"n":{"docs":{},"o":{"docs":{},"s":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.014209591474245116}},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.007104795737122558}}},"i":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.008880994671403197}}}}}},"l":{"docs":{},"o":{"docs":{},"r":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"(":{"0":{"docs":{},"x":{"0":{"0":{"0":{"0":{"docs":{},"f":{"docs":{},"f":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}},"docs":{}},"docs":{},"f":{"docs":{},"f":{"0":{"0":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}},"docs":{}},"docs":{}}}},"docs":{}},"docs":{},"f":{"docs":{},"f":{"0":{"0":{"0":{"0":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}},"docs":{}}}}}}}}},"p":{"docs":{},"i":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"y":{"docs":{},"(":{"docs":{},"d":{"docs":{},".":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"p":{"docs":{},"y":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},":":{"1":{"7":{"docs":{},":":{"6":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"docs":{}}},"8":{"docs":{},":":{"1":{"1":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}}},"docs":{}},"5":{"docs":{},":":{"6":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"docs":{}}},"docs":{}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"s":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.02050113895216401}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}},".":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"=":{"docs":{},"=":{"0":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"docs":{}}},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.008152173913043478}}}}}}},"r":{"docs":{},"e":{"docs":{},"(":{"docs":{},"t":{"docs":{},"m":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"l":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}}},"m":{"docs":{},"d":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"/":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"a":{"docs":{},"l":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},".":{"docs":{},"m":{"docs":{},"d":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"a":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"p":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"a":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}},"(":{"docs":{},"p":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"l":{"docs":{},"l":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.024390243902439025},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"e":{"docs":{},"d":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"r":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.007104795737122558}}}},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}},"c":{"docs":{},"c":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},"(":{"docs":{},"n":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}},"s":{"docs":{},".":{"docs":{},"w":{"docs":{},"e":{"docs":{},"i":{"docs":{},"g":{"docs":{},"h":{"docs":{},"t":{"docs":{},"s":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}},"u":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}},"s":{"docs":{},"e":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.006589785831960461},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"n":{"docs":{},"'":{"docs":{},"t":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}},"c":{"docs":{},"h":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"e":{"docs":{},"、":{"docs":{},"f":{"docs":{},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}},"u":{"docs":{},"s":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"l":{"docs":{},"o":{"docs":{},"u":{"docs":{},"d":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"s":{"docs":{},"e":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},"c":{"docs":{},"h":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"e":{"docs":{},"s":{"docs":{},"u":{"docs":{},"i":{"docs":{},"d":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}},"w":{"docs":{},"d":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"t":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"e":{"docs":{},"l":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"n":{"docs":{},"u":{"docs":{},"m":{"docs":{},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"(":{"1":{"0":{"0":{"0":{"0":{"0":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{},"n":{"docs":{},"u":{"docs":{},"m":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"u":{"docs":{},"s":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"e":{"docs":{},"r":{"docs":{},"、":{"docs":{},"w":{"docs":{},"i":{"docs":{},"k":{"docs":{},"i":{"docs":{},"p":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"、":{"docs":{},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"、":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{},"它":{"docs":{},"不":{"docs":{},"应":{"docs":{},"是":{"docs":{},"动":{"docs":{},"词":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.00916030534351145}},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{},"e":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}}}}},"f":{"docs":{},"g":{"docs":{},".":{"docs":{},"d":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"(":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},";":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},"h":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"a":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.037037037037037035},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.015985790408525755}},",":{"docs":{},"在":{"docs":{},"没":{"docs":{},"有":{"docs":{},"被":{"docs":{},"接":{"docs":{},"收":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"至":{"docs":{},"多":{"docs":{},"发":{"docs":{},"送":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}},"每":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"在":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}},"g":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"n":{"docs":{},"e":{"docs":{},"y":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}},"p":{"docs":{},"u":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.027586206896551724},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"/":{"docs":{},"c":{"docs":{},"+":{"docs":{},"+":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"b":{"docs":{},"r":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}}}}}}}}}}}}}}}}},"l":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.010657193605683837}},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}}}}}}}}}}},",":{"docs":{},"因":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"w":{"docs":{},"a":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}}}}}},"e":{"docs":{},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"g":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}},"a":{"docs":{},"c":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}},"x":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"e":{"docs":{},"_":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},"。":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}}},"c":{"docs":{},"t":{"docs":{},"l":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}}},"c":{"docs":{},"e":{"docs":{},"p":{"docs":{},"t":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}},"e":{"docs":{},".":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}}}}},"c":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}},"u":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"e":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"r":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.018518518518518517},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.042801556420233464},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.06260296540362438},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.027210884353741496},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.03067484662576687},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.06153846153846154},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.04377104377104377},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693}},".":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{},")":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.03508771929824561},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}},":":{"docs":{},"%":{"docs":{},"v":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.019455252918287938},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.02138157894736842},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.004942339373970346},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.00510204081632653},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.023076923076923078},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.02356902356902357},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},":":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.009727626459143969},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}},"\"":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"\"":{"docs":{},"`":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}}}}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.006578947368421052},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.013468013468013467}}}},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.006802721088435374},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}},"s":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}},"(":{"docs":{},"\"":{"docs":{},"a":{"docs":{},"n":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"l":{"docs":{},"d":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}}}},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"k":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"m":{"docs":{},"i":{"docs":{},"s":{"docs":{},"s":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"m":{"docs":{},"o":{"docs":{},"d":{"docs":{},"u":{"docs":{},"l":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"但":{"docs":{},"对":{"docs":{},"于":{"docs":{},"后":{"docs":{},"者":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"必":{"docs":{},"须":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}},"a":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"s":{"docs":{},"(":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},",":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}},"i":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"s":{"docs":{},"(":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},",":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}},",":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}},"m":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"g":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}},".":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.007782101167315175},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.03067484662576687},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}},"b":{"docs":{},"r":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"k":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"l":{"docs":{},"d":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}}}}}}}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{},".":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613}}}}},"s":{"docs":{},"e":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"e":{"docs":{},"m":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.02527075812274368}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.012531328320802004}}}},"n":{"docs":{},"v":{"docs":{},"v":{"docs":{},"a":{"docs":{},"r":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"/":{"docs":{},"j":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}},"。":{"docs":{},"以":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203}}}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}}}}}}}}},"u":{"docs":{},"m":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"t":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.03550295857988166}}}}}},"r":{"docs":{},"i":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"t":{"docs":{},"c":{"docs":{},".":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}},"l":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"(":{"docs":{},"c":{"docs":{},"t":{"docs":{},"x":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"v":{"docs":{},"a":{"docs":{},"c":{"docs":{},"u":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"d":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}},"e":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"t":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"s":{"docs":{},"c":{"docs":{},"a":{"docs":{},"p":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893}}}}}}},"f":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.022058823529411766},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.026845637583892617},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.022172949002217297}},"r":{"docs":{},"e":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"b":{"docs":{},"s":{"docs":{},"d":{"docs":{},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.037037037037037035},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.017509727626459144},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.014760147601476014},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.02138157894736842},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.014827018121911038},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.03741496598639456},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.012269938650306749},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.010869565217391304},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.029411764705882353},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.03305785123966942},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.016835016835016835},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.013513513513513514},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0392156862745098},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0390625},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.03550295857988166},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.022556390977443608},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.021660649819494584},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.04678362573099415},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.02050113895216401},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.01282051282051282},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.01984732824427481},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.01366742596810934},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.011086474501108648},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.014209591474245116}},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.008869179600886918}},"(":{"docs":{},"e":{"docs":{},")":{"docs":{},"{":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"s":{"docs":{},".":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.007782101167315175},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.03125},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693}},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}},"t":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}},"l":{"docs":{},"l":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}}}}}}},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},".":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}},".":{"docs":{},"c":{"docs":{},"h":{"docs":{},"m":{"docs":{},"o":{"docs":{},"d":{"docs":{},"(":{"0":{"6":{"6":{"4":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},";":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}},")":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}},"}":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308}}}},"/":{"docs":{},"s":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}},"s":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"(":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"s":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.011086474501108648},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976}}}}}}},"'":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"e":{"docs":{},"l":{"docs":{},"d":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"s":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.023076923076923078}}},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.023076923076923078}}}}}}}}}}}}}},"n":{"docs":{},"i":{"docs":{},"s":{"docs":{},"h":{"docs":{},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}},"m":{"docs":{},"t":{"2":{"docs":{},".":{"docs":{},"少":{"docs":{},"量":{"docs":{},"的":{"docs":{},"重":{"docs":{},"复":{"docs":{},"不":{"docs":{},"比":{"docs":{},"反":{"docs":{},"射":{"docs":{},"差":{"3":{"docs":{},".":{"docs":{},"慎":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}},"docs":{}}}}}}}}}}}}},"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}},"(":{"docs":{},"\"":{"docs":{},"%":{"docs":{},"v":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}},"这":{"docs":{},"里":{"docs":{},"要":{"docs":{},"空":{"docs":{},"格":{"docs":{},"%":{"docs":{},"v":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}}}}},"f":{"docs":{},"\\":{"docs":{},"n":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}},"s":{"docs":{},".":{"docs":{},"\\":{"docs":{},"n":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}},"g":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}},")":{"docs":{},"的":{"docs":{},"调":{"docs":{},"用":{"docs":{},"是":{"docs":{},"非":{"docs":{},"常":{"docs":{},"频":{"docs":{},"繁":{"docs":{},"的":{"docs":{},",":{"docs":{},"利":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}},"l":{"docs":{},"n":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{},"a":{"docs":{},"f":{"docs":{},"t":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"b":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"u":{"docs":{},"x":{"docs":{},".":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"c":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"s":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}},"&":{"docs":{},"v":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}},"c":{"docs":{},"f":{"docs":{},"g":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}}},"u":{"docs":{},"n":{"docs":{},"s":{"docs":{},"a":{"docs":{},"f":{"docs":{},"e":{"docs":{},".":{"docs":{},"s":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"o":{"docs":{},"f":{"docs":{},"(":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},")":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"1":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"2":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"3":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"4":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"docs":{}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"t":{"docs":{},"o":{"docs":{},"h":{"docs":{},"l":{"docs":{},"(":{"docs":{},"[":{"docs":{},"]":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"{":{"0":{"docs":{},"x":{"7":{"docs":{},"f":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"docs":{}}},"docs":{}}}}}}}}}}}}},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}}}}}}},"s":{"docs":{},".":{"docs":{},"h":{"docs":{},"a":{"docs":{},"s":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"\"":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},"\"":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}},".":{"docs":{},".":{"docs":{},".":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"r":{"docs":{},"s":{"docs":{},"p":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.022988505747126436}}}},"e":{"docs":{},"s":{"docs":{},"o":{"docs":{},"l":{"docs":{},"v":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"f":{"docs":{},"a":{"docs":{},"k":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"i":{"docs":{},"l":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}},"/":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{},"/":{"docs":{},"v":{"3":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},"s":{"docs":{},"/":{"docs":{},"%":{"docs":{},"s":{"docs":{},"/":{"docs":{},"m":{"docs":{},"e":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"_":{"docs":{},"r":{"docs":{},"e":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"/":{"docs":{},"%":{"docs":{},"s":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"s":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}},"%":{"docs":{},"v":{"docs":{},"\"":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"f":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.016835016835016835}},"(":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}},"\"":{"docs":{},"m":{"docs":{},"o":{"docs":{},"d":{"docs":{},"u":{"docs":{},"l":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"s":{"docs":{},"o":{"docs":{},"m":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"d":{"docs":{},"b":{"docs":{},".":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}},"f":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"l":{"docs":{},"n":{"docs":{},"(":{"docs":{},"o":{"docs":{},"s":{"docs":{},".":{"docs":{},"s":{"docs":{},"t":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}},"{":{"0":{"docs":{},"x":{"1":{"0":{"docs":{},"c":{"0":{"0":{"docs":{},"e":{"0":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}},"docs":{}}}}}}}}}}}},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"前":{"docs":{},"者":{"docs":{},"性":{"docs":{},"能":{"docs":{},"更":{"docs":{},"佳":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}},"o":{"docs":{},"o":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.006589785831960461},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.037037037037037035},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.013468013468013467},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0392156862745098}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.027777777777777776},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.007220216606498195},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"m":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"i":{"docs":{},"d":{"docs":{},"s":{"docs":{},"(":{"docs":{},")":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"i":{"docs":{},"d":{"docs":{},"s":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}},"r":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}},"s":{"docs":{},")":{"docs":{},";":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}},"_":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{},"我":{"docs":{},"们":{"docs":{},"使":{"docs":{},"用":{"docs":{},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}},",":{"docs":{},"让":{"docs":{},"测":{"docs":{},"试":{"docs":{},"文":{"docs":{},"件":{"docs":{},"假":{"docs":{},"装":{"docs":{},"是":{"docs":{},"包":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}},"{":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976}},".":{"docs":{},".":{"docs":{},".":{"docs":{},"}":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.024691358024691357}}}}}}},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.006578947368421052},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}},".":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"l":{"docs":{},"d":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},")":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{},"t":{"docs":{},"x":{"docs":{},"t":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}}}}}}}}}}}}}}},")":{"docs":{},";":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}}}}}}},":":{"docs":{},"连":{"docs":{},"接":{"docs":{},"被":{"docs":{},"拒":{"docs":{},"绝":{"docs":{},"”":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}},"r":{"docs":{},"k":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.01282051282051282},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},",":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}}}}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.009626955475330927},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.005836575875486381},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.022058823529411766},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"e":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"h":{"docs":{},"o":{"docs":{},"o":{"docs":{},"d":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}},"l":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"i":{"docs":{},"l":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},"u":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},")":{"docs":{},"的":{"docs":{},"主":{"docs":{},"要":{"docs":{},"根":{"docs":{},"源":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"发":{"docs":{},"生":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"该":{"docs":{},"函":{"docs":{},"数":{"docs":{},"应":{"docs":{},"该":{"docs":{},"返":{"docs":{},"回":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"让":{"docs":{},"调":{"docs":{},"用":{"docs":{},"方":{"docs":{},"决":{"docs":{},"定":{"docs":{},"如":{"docs":{},"何":{"docs":{},"处":{"docs":{},"理":{"docs":{},"它":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"t":{"3":{"2":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"docs":{}},"6":{"4":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.006802721088435374},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.006802721088435374}}},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}},",":{"docs":{},"并":{"docs":{},"在":{"docs":{},"字":{"docs":{},"段":{"docs":{},"名":{"docs":{},"称":{"docs":{},"中":{"docs":{},"包":{"docs":{},"含":{"docs":{},"单":{"docs":{},"位":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}},"docs":{}},"docs":{}}},"w":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"a":{"docs":{},"g":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}},"e":{"1":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"2":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"3":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"4":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"docs":{}}}}}}}}}}}}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}}}}},"a":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.004942339373970346}}}}}}}}},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}},"n":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}}}},"s":{"docs":{},"w":{"docs":{},"a":{"docs":{},"p":{"docs":{},"(":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"e":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}}}}},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.004942339373970346},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}},"o":{"docs":{},"s":{"docs":{},".":{"docs":{},"s":{"docs":{},"t":{"docs":{},"d":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},",":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}},"w":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}},"e":{"docs":{},"w":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"g":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"i":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.008875739644970414},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"该":{"docs":{},"文":{"docs":{},"章":{"docs":{},"修":{"docs":{},"订":{"docs":{},"时":{"docs":{},"间":{"docs":{},":":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}}}},"h":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"u":{"docs":{},"b":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}},"/":{"docs":{},"h":{"docs":{},"a":{"docs":{},"s":{"docs":{},"h":{"docs":{},"i":{"docs":{},"c":{"docs":{},"o":{"docs":{},"r":{"docs":{},"p":{"docs":{},"/":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"/":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"g":{"docs":{},"r":{"docs":{},"y":{"docs":{},"s":{"docs":{},"k":{"docs":{},"i":{"docs":{},"/":{"docs":{},"g":{"docs":{},"o":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}}},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"x":{"docs":{},"i":{"docs":{},"e":{"docs":{},"/":{"docs":{},"b":{"docs":{},"e":{"docs":{},"e":{"docs":{},"g":{"docs":{},"o":{"docs":{},"/":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"/":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"。":{"docs":{},"内":{"docs":{},"部":{"docs":{},"包":{"docs":{},"是":{"docs":{},"指":{"docs":{},"不":{"docs":{},"能":{"docs":{},"被":{"docs":{},"外":{"docs":{},"部":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}},"g":{"docs":{},"o":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}},"u":{"docs":{},"b":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},".":{"docs":{},"o":{"docs":{},"a":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"/":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{},"/":{"docs":{},"m":{"docs":{},"y":{"docs":{},"r":{"docs":{},"e":{"docs":{},"p":{"docs":{},"o":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}},":":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498}}},"n":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}},"o":{"1":{"docs":{},".":{"1":{"1":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}},"7":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}},"4":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}}},"docs":{"./":{"ref":"./","tf":0.22666666666666666},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.03254437869822485},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.01935483870967742},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.008223684210526315},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.038461538461538464},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.008152173913043478},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.09090909090909091},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.015037593984962405},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.017543859649122806},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.022779043280182234},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.02733485193621868},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.008869179600886918},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.017761989342806393},"参考文献.html":{"ref":"参考文献.html","tf":0.07017543859649122}},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},",":{"docs":{},"目":{"docs":{},"前":{"docs":{},"官":{"docs":{},"方":{"docs":{},"团":{"docs":{},"队":{"docs":{},"并":{"docs":{},"未":{"docs":{},"提":{"docs":{},"供":{"docs":{},"权":{"docs":{},"威":{"docs":{},"规":{"docs":{},"范":{"docs":{},"。":{"docs":{},"不":{"docs":{},"过":{"docs":{},"不":{"docs":{},"用":{"docs":{},"担":{"docs":{},"心":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"依":{"docs":{},"然":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"规":{"docs":{},"范":{"docs":{},"可":{"docs":{},"以":{"docs":{},"参":{"docs":{},"考":{"docs":{},",":{"docs":{},"那":{"docs":{},"就":{"docs":{},"是":{"docs":{},"业":{"docs":{},"界":{"docs":{},"推":{"docs":{},"崇":{"docs":{},"的":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"分":{"docs":{},"析":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}},"梦":{"docs":{},"工":{"docs":{},"厂":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"d":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}},"p":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},",":{"docs":{},"想":{"docs":{},"更":{"docs":{},"好":{"docs":{},"地":{"docs":{},"管":{"docs":{},"理":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}},"z":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},":":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}}},",":{"docs":{},"以":{"docs":{},"及":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"书":{"docs":{},"籍":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}},"这":{"docs":{},"应":{"docs":{},"该":{"docs":{},"是":{"docs":{},"入":{"docs":{},"门":{"docs":{},"必":{"docs":{},"读":{"docs":{},"最":{"docs":{},"佳":{"docs":{},"读":{"docs":{},"物":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.03508771929824561},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.04807692307692308}},",":{"docs":{},"如":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}},"o":{"docs":{},"d":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.023148148148148147},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.034482758620689655},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.025806451612903226},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.013618677042801557},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.011513157894736841},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.018121911037891267},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.011904761904761904},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.011834319526627219},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"g":{"docs":{},"l":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"s":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},".":{"docs":{},"s":{"docs":{},"u":{"docs":{},"m":{"docs":{},"文":{"docs":{},"件":{"docs":{},"必":{"docs":{},"须":{"docs":{},"提":{"docs":{},"交":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"添":{"docs":{},"加":{"docs":{},"到":{"docs":{},".":{"docs":{},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"o":{"docs":{},"r":{"docs":{},"e":{"docs":{},"规":{"docs":{},"则":{"docs":{},"中":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}}}}}}}}}}}},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.01935483870967742},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.013618677042801557},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.04807692307692308},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.007633587786259542},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.03189066059225513},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.017761989342806393}},"e":{"docs":{},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"在":{"docs":{},"入":{"docs":{},"口":{"docs":{},"处":{"docs":{},"捕":{"docs":{},"获":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}},"无":{"docs":{},"需":{"docs":{},"锁":{"docs":{},"保":{"docs":{},"护":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"b":{"docs":{},"r":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}},"一":{"docs":{},"定":{"docs":{},"要":{"docs":{},"梳":{"docs":{},"理":{"docs":{},"清":{"docs":{},"楚":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"如":{"docs":{},"果":{"docs":{},"其":{"docs":{},"他":{"docs":{},"协":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{},"了":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"当":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"状":{"docs":{},"态":{"docs":{},"发":{"docs":{},"生":{"docs":{},"变":{"docs":{},"化":{"docs":{},"时":{"docs":{},",":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}},"o":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},":":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}},"m":{"docs":{},"、":{"docs":{},"x":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}},"e":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789}}}}}}}},"t":{"docs":{},"o":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},",":{"docs":{},"其":{"docs":{},"他":{"docs":{},"框":{"docs":{},"架":{"docs":{},"或":{"docs":{},"底":{"docs":{},"层":{"docs":{},"源":{"docs":{},"码":{"docs":{},"推":{"docs":{},"荐":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"不":{"docs":{},"用":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"c":{"docs":{},"h":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"/":{"docs":{},"g":{"docs":{},"u":{"docs":{},"i":{"docs":{},"d":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}},"语":{"docs":{},"言":{"docs":{},"最":{"docs":{},"佳":{"docs":{},"实":{"docs":{},"践":{"docs":{},"g":{"docs":{},"o":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"分":{"docs":{},"析":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"n":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"f":{"docs":{},"u":{"docs":{},"l":{"docs":{},"l":{"docs":{},"y":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}},"b":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"e":{"docs":{},"t":{"docs":{},"o":{"docs":{},"n":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}}}},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}}}}}}}}}}},"e":{"docs":{},"n":{"docs":{},"g":{"docs":{},"t":{"docs":{},"h":{"docs":{},"(":{"docs":{},"r":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}},"m":{"docs":{},"r":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"s":{"docs":{},"u":{"docs":{},"r":{"docs":{},"i":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"(":{"docs":{},"r":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}},"i":{"docs":{},"d":{"docs":{},"s":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{},"b":{"docs":{},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}},"(":{"docs":{},"u":{"docs":{},"i":{"docs":{},"d":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}}}},"(":{"docs":{},"k":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}}},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"(":{"docs":{},"n":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},"s":{"docs":{},"(":{"docs":{},"n":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"m":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"n":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"i":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"a":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}},"c":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.010256410256410256},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.015945330296127564}},"f":{"docs":{},"l":{"docs":{},"a":{"docs":{},"g":{"docs":{},"s":{"docs":{},"=":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},"\"":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.00683371298405467}}}}}}}}}}},"j":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}},"a":{"docs":{},"v":{"docs":{},"a":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}},"、":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}},".":{"docs":{},"u":{"docs":{},"n":{"docs":{},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"h":{"docs":{},"a":{"docs":{},"l":{"docs":{},"(":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},",":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}},"+":{"docs":{},"+":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}},"e":{"docs":{},"f":{"docs":{},"f":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{},"/":{"docs":{},"t":{"docs":{},"u":{"docs":{},"n":{"docs":{},"n":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}},"l":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"u":{"docs":{},"a":{"docs":{},"g":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"y":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},",":{"docs":{},"给":{"docs":{},"出":{"docs":{},"布":{"docs":{},"局":{"docs":{},"建":{"docs":{},"议":{"docs":{},"。":{"docs":{},"一":{"docs":{},"个":{"docs":{},"清":{"docs":{},"晰":{"docs":{},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},"结":{"docs":{},"构":{"docs":{},",":{"docs":{},"能":{"docs":{},"帮":{"docs":{},"忙":{"docs":{},"我":{"docs":{},"们":{"docs":{},"高":{"docs":{},"效":{"docs":{},"有":{"docs":{},"序":{"docs":{},"的":{"docs":{},"管":{"docs":{},"理":{"docs":{},"与":{"docs":{},"日":{"docs":{},"俱":{"docs":{},"增":{"docs":{},"的":{"docs":{},"业":{"docs":{},"务":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{},"不":{"docs":{},"会":{"docs":{},"随":{"docs":{},"着":{"docs":{},"代":{"docs":{},"码":{"docs":{},"量":{"docs":{},"的":{"docs":{},"递":{"docs":{},"增":{"docs":{},",":{"docs":{},"项":{"docs":{},"目":{"docs":{},"代":{"docs":{},"码":{"docs":{},"变":{"docs":{},"得":{"docs":{},"凌":{"docs":{},"乱":{"docs":{},"而":{"docs":{},"不":{"docs":{},"堪":{"docs":{},"入":{"docs":{},"目":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"s":{"docs":{},"t":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976}}}}}}}}},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.011834319526627219},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"n":{"docs":{},"e":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789}},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"u":{"docs":{},"x":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"v":{"docs":{},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"o":{"docs":{},"g":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}},"o":{"docs":{},",":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"u":{"docs":{},"t":{"docs":{},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.01904761904761905}}}}}}}},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"f":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"n":{"docs":{},"u":{"docs":{},"m":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}},":":{"docs":{},"%":{"docs":{},"d":{"docs":{},",":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}}}}}},".":{"docs":{},"f":{"docs":{},"a":{"docs":{},"t":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},"a":{"docs":{},"l":{"docs":{},"f":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}},"(":{"docs":{},"\"":{"docs":{},"m":{"docs":{},"i":{"docs":{},"s":{"docs":{},"s":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.004942339373970346}}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"l":{"docs":{},"n":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"e":{"docs":{},"x":{"docs":{},"e":{"docs":{},"c":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}}},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},",":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{},"b":{"docs":{},"u":{"docs":{},"g":{"docs":{},".":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"i":{"docs":{},"n":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"d":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}},"{":{"docs":{},"}":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}},"_":{"2":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"docs":{}},"t":{"docs":{},"o":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}},"e":{"docs":{},"=":{"1":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"docs":{}}}}}},"r":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}},"e":{"docs":{},"=":{"2":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}},"docs":{}}}}}}}},"s":{"docs":{},"t":{"docs":{},"d":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}},"=":{"0":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"docs":{}}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"t":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}},"k":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}}}},")":{"docs":{},"。":{"docs":{},"在":{"docs":{},"使":{"docs":{},"用":{"docs":{},"锁":{"docs":{},"时":{"docs":{},",":{"docs":{},"对":{"docs":{},"获":{"docs":{},"取":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"目":{"docs":{},"的":{"docs":{},"操":{"docs":{},"作":{"docs":{},"做":{"docs":{},"了":{"docs":{},"区":{"docs":{},"分":{"docs":{},",":{"docs":{},"一":{"docs":{},"种":{"docs":{},"是":{"docs":{},"读":{"docs":{},"操":{"docs":{},"作":{"docs":{},",":{"docs":{},"一":{"docs":{},"种":{"docs":{},"是":{"docs":{},"写":{"docs":{},"操":{"docs":{},"作":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},"同":{"docs":{},"一":{"docs":{},"时":{"docs":{},"刻":{"docs":{},"允":{"docs":{},"许":{"docs":{},"多":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"f":{"docs":{},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}},"n":{"docs":{},"g":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}},"o":{"docs":{},"p":{"docs":{},")":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}},":":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"e":{"docs":{},"n":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"(":{"docs":{},"s":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}},"t":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},")":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"s":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}}},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{},")":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{},"s":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}}}}}}}},"i":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"s":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}},"g":{"docs":{},"t":{"docs":{},"h":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}},"s":{"docs":{},"s":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"a":{"docs":{},"k":{"docs":{},",":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}},"v":{"docs":{},"e":{"docs":{},"l":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"(":{"docs":{},"e":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.011834319526627219}}}}}}}},"r":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"(":{"docs":{},"e":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.011834319526627219}}}}}}}}}}}}}}}},"h":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},",":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"s":{"docs":{},"w":{"docs":{},"a":{"docs":{},"p":{"docs":{},"(":{"docs":{},"h":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},".":{"docs":{},"(":{"docs":{},"*":{"docs":{},"n":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"u":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}},"\"":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.00683371298405467}},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"发":{"docs":{},"生":{"docs":{},"内":{"docs":{},"联":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"将":{"docs":{},"不":{"docs":{},"会":{"docs":{},"出":{"docs":{},"现":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"就":{"docs":{},"不":{"docs":{},"存":{"docs":{},"在":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"与":{"docs":{},"回":{"docs":{},"收":{"docs":{},"的":{"docs":{},"操":{"docs":{},"作":{"docs":{},"了":{"docs":{},",":{"docs":{},"二":{"docs":{},"者":{"docs":{},"将":{"docs":{},"看":{"docs":{},"不":{"docs":{},"出":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"}":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"(":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"m":{"0":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"1":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"2":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635}}},"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.026845637583892617},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.00683371298405467},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"k":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}},"d":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.009727626459143969},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.007782101167315175},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.009884678747940691},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.009111617312072893},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},".":{"docs":{},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},".":{"docs":{},"f":{"docs":{},"u":{"docs":{},"n":{"docs":{},"c":{"1":{"docs":{},"(":{"0":{"docs":{},"x":{"0":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}}},"docs":{}}},"2":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"docs":{}}}}}}}}}},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.015037593984962405}}}}}}}},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.018808777429467086}}}}}},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.046875},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.009404388714733543}}}}},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693}}}}}},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}}}}}},"c":{"docs":{},"o":{"docs":{},"p":{"docs":{},"i":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.02733485193621868}}}}}},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0066518847006651885}}}}}}}},"k":{"docs":{},"e":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"的":{"docs":{},"话":{"docs":{},")":{"docs":{},"变":{"docs":{},"得":{"docs":{},"小":{"docs":{},"而":{"docs":{},"简":{"docs":{},"单":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.026845637583892617}}},"[":{"docs":{},"]":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.007220216606498195},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.018223234624145785}}}}},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028}}}}}}},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"6":{"4":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"docs":{}},"docs":{}}}}},"*":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},",":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"[":{"docs":{},"t":{"1":{"docs":{},"]":{"docs":{},"t":{"2":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}},"docs":{}}}},"docs":{}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"]":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},")":{"docs":{},",":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}}}}}}}}}},"o":{"docs":{},"s":{"docs":{},".":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"{":{"docs":{},"}":{"docs":{},"]":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}},"]":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}},",":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}}}}}}}}},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"6":{"4":{"docs":{},"]":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}}}},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.05555555555555555},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},"r":{"docs":{},"k":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"d":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"p":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":2.516304347826087},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.053691275167785234},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.023391812865497075},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335}},"[":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"]":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.010869565217391304}},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}},"t":{"1":{"docs":{},"]":{"docs":{},"t":{"2":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}},"{":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},"}":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},"docs":{}}}},"docs":{}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"]":{"docs":{},"*":{"docs":{},"s":{"docs":{},"{":{"1":{"docs":{},":":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}},"docs":{}}}},"s":{"docs":{},"{":{"1":{"docs":{},":":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}},"docs":{}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"时":{"docs":{},"指":{"docs":{},"定":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},",":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},",":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}},"此":{"docs":{},"时":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"将":{"docs":{},"每":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"拉":{"docs":{},"取":{"docs":{},"的":{"docs":{},"结":{"docs":{},"果":{"docs":{},"写":{"docs":{},"入":{"docs":{},"到":{"docs":{},"一":{"docs":{},"个":{"docs":{},"临":{"docs":{},"时":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"便":{"docs":{},"将":{"docs":{},"并":{"docs":{},"发":{"docs":{},"地":{"docs":{},"协":{"docs":{},"程":{"docs":{},"与":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"变":{"docs":{},"量":{"docs":{},"解":{"docs":{},"绑":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"再":{"docs":{},"将":{"docs":{},"其":{"docs":{},"汇":{"docs":{},"聚":{"docs":{},"到":{"docs":{},"一":{"docs":{},"起":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"便":{"docs":{},"可":{"docs":{},"以":{"docs":{},"不":{"docs":{},"用":{"docs":{},"使":{"docs":{},"用":{"docs":{},"锁":{"docs":{},"。":{"docs":{},"即":{"docs":{},"独":{"docs":{},"立":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"合":{"docs":{},"并":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"、":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"、":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}},"s":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}},"g":{"docs":{},"i":{"docs":{},"c":{"docs":{},"”":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"t":{"docs":{},"h":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}},"e":{"docs":{},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}},".":{"docs":{},"m":{"docs":{},"a":{"docs":{},"x":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"3":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}}}}}}}}}},"y":{"docs":{},"b":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}},"e":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"d":{"docs":{},"a":{"docs":{},"y":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}},"x":{"docs":{},"i":{"docs":{},"m":{"docs":{},"u":{"docs":{},"m":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}},"n":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}}},"o":{"docs":{},"d":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}},"u":{"docs":{},"l":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.01935483870967742}},"e":{"docs":{},"s":{"docs":{},"。":{"docs":{},"从":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"并":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{},"(":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}}}}},"n":{"docs":{},"t":{"docs":{},"h":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"r":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"s":{"docs":{},"g":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.034482758620689655},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}},")":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}},"[":{"docs":{},"\"":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{},"\"":{"docs":{},"]":{"docs":{},".":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}}}}}}}}},"k":{"1":{"docs":{},"]":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"2":{"docs":{},"]":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"3":{"docs":{},"]":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"docs":{}},"v":{"docs":{},"]":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}},";":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"f":{"docs":{},".":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},"]":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308}}}}}}}}}}},"i":{"docs":{},"]":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335}}}}},"u":{"0":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"1":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335}},"l":{"docs":{},"t":{"docs":{},"i":{"docs":{},"p":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"i":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.01904761904761905}}},"y":{"docs":{},"=":{"2":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}},"3":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}},"docs":{}}}}}}}},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"r":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":3.37465564738292},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"、":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"/":{"docs":{},"r":{"docs":{},"w":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},",":{"docs":{},"或":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"y":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976}},"{":{"docs":{},"}":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}},"d":{"5":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789}}},"docs":{}},"e":{"docs":{},",":{"docs":{},"t":{"docs":{},"h":{"docs":{},"i":{"docs":{},"s":{"docs":{},",":{"docs":{},"s":{"docs":{},"e":{"docs":{},"l":{"docs":{},"f":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"c":{"docs":{},"s":{"docs":{},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"c":{"docs":{},"r":{"docs":{},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"c":{"docs":{},"n":{"docs":{},"t":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"m":{"docs":{},"i":{"docs":{},"s":{"docs":{},"s":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"o":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{},"i":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"a":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"r":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"i":{"docs":{},"t":{"docs":{},"s":{"docs":{},"u":{"docs":{},"r":{"docs":{},"i":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}},".":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"[":{"docs":{},"k":{"docs":{},"]":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}}}},"查":{"docs":{},"看":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"对":{"docs":{},"上":{"docs":{},"面":{"docs":{},"两":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"优":{"docs":{},"化":{"docs":{},"决":{"docs":{},"策":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}},"b":{"0":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}}},"p":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693}},"o":{"docs":{},"p":{"docs":{},"u":{"docs":{},"p":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},"\"":{"docs":{},")":{"docs":{},";":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"u":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},".":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"e":{"docs":{},"r":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"e":{"docs":{},"r":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.010869565217391304},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"s":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}},"r":{"docs":{},"t":{"docs":{},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.03067484662576687}}},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.03067484662576687}}}}},"l":{"docs":{},"l":{"docs":{},"(":{"1":{"0":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"*":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}},"docs":{}},"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009}}}}}}}}}},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}},".":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"r":{"docs":{},"o":{"docs":{},"g":{"docs":{},"r":{"docs":{},"a":{"docs":{},"m":{"docs":{"./":{"ref":"./","tf":0.02}},"m":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}}}}}},"v":{"docs":{},"i":{"docs":{},"d":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"e":{"docs":{},"r":{"docs":{},"b":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"(":{"docs":{},"v":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"t":{"docs":{},"i":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}},",":{"docs":{},"它":{"docs":{},"将":{"docs":{},"会":{"docs":{},"变":{"docs":{},"得":{"docs":{},"更":{"docs":{},"好":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}}}}}}}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701}}}}}}}}}},"l":{"docs":{},"n":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"e":{"docs":{},"r":{"docs":{},"'":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"f":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}},"e":{"docs":{},"s":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"v":{"docs":{},"i":{"docs":{},"o":{"docs":{},"u":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"a":{"docs":{},"g":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01845018450184502},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.026936026936026935},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},"s":{"docs":{},"/":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"]":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"g":{"docs":{},"e":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},"n":{"docs":{},"i":{"docs":{},"c":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.019455252918287938},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}},"(":{"4":{"4":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"docs":{}},"docs":{},"\"":{"docs":{},"a":{"docs":{},"n":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"n":{"docs":{},"i":{"docs":{},"l":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"u":{"docs":{},"n":{"docs":{},"k":{"docs":{},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.013468013468013467}}}}}}}}}}},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"v":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}},":":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.017509727626459144},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"因":{"docs":{},"为":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"此":{"docs":{},",":{"docs":{},"请":{"docs":{},"始":{"docs":{},"终":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}},"每":{"docs":{},"个":{"docs":{},"自":{"docs":{},"行":{"docs":{},"启":{"docs":{},"动":{"docs":{},"的":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"这":{"docs":{},"样":{"docs":{},"可":{"docs":{},"以":{"docs":{},"记":{"docs":{},"录":{"docs":{},"错":{"docs":{},"误":{"docs":{},"的":{"docs":{},"同":{"docs":{},"时":{"docs":{},"结":{"docs":{},"束":{"docs":{},"程":{"docs":{},"序":{"docs":{},",":{"docs":{},"方":{"docs":{},"便":{"docs":{},"排":{"docs":{},"查":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}}}}}},"并":{"docs":{},"打":{"docs":{},"印":{"docs":{},"详":{"docs":{},"细":{"docs":{},"堆":{"docs":{},"栈":{"docs":{},"信":{"docs":{},"息":{"docs":{},"或":{"docs":{},"进":{"docs":{},"行":{"docs":{},"其":{"docs":{},"它":{"docs":{},"处":{"docs":{},"理":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}},"建":{"docs":{},"议":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"s":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"(":{"docs":{},")":{"docs":{},"{":{"docs":{},"}":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"j":{"docs":{},"f":{"2":{"0":{"0":{"0":{"docs":{},"/":{"docs":{},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}},"t":{"docs":{},"h":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.008869179600886918}},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},"j":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"(":{"docs":{},"c":{"docs":{},"w":{"docs":{},"d":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}}}}}},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},":":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}},",":{"docs":{},"即":{"docs":{},"热":{"docs":{},"点":{"docs":{},"路":{"docs":{},"径":{"docs":{},",":{"docs":{},"顾":{"docs":{},"名":{"docs":{},"思":{"docs":{},"义":{"docs":{},",":{"docs":{},"是":{"docs":{},"你":{"docs":{},"的":{"docs":{},"程":{"docs":{},"序":{"docs":{},"中":{"docs":{},"那":{"docs":{},"些":{"docs":{},"会":{"docs":{},"频":{"docs":{},"繁":{"docs":{},"执":{"docs":{},"行":{"docs":{},"到":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"”":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},")":{"docs":{},"是":{"docs":{},"程":{"docs":{},"序":{"docs":{},"非":{"docs":{},"常":{"docs":{},"频":{"docs":{},"繁":{"docs":{},"执":{"docs":{},"行":{"docs":{},"的":{"docs":{},"一":{"docs":{},"系":{"docs":{},"列":{"docs":{},"指":{"docs":{},"令":{"docs":{},",":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"s":{"docs":{},"e":{"docs":{},"p":{"docs":{},"a":{"docs":{},"n":{"docs":{},"i":{"docs":{},"c":{"docs":{},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},"s":{"docs":{},"(":{"docs":{},")":{"docs":{},"{":{"docs":{},"}":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}},"e":{"docs":{},"n":{"docs":{},"t":{"1":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}},"2":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}},"docs":{}}}}},"s":{"docs":{},"s":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.011389521640091117},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"k":{"docs":{},"g":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"u":{"docs":{},"b":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}},"。":{"docs":{},"为":{"docs":{},"了":{"docs":{},"保":{"docs":{},"持":{"docs":{},"向":{"docs":{},"后":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"性":{"docs":{},",":{"docs":{},"外":{"docs":{},"部":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"每":{"docs":{},"个":{"docs":{},"未":{"docs":{},"来":{"docs":{},"版":{"docs":{},"本":{"docs":{},"都":{"docs":{},"必":{"docs":{},"须":{"docs":{},"保":{"docs":{},"留":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"类":{"docs":{},"型":{"docs":{},";":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"字":{"docs":{},"段":{"docs":{},"是":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}},"s":{"docs":{},"h":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}},"(":{"docs":{},"v":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}},"l":{"docs":{},"a":{"docs":{},"n":{"9":{"docs":{},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}},"docs":{}},"c":{"docs":{},"e":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}},"a":{"docs":{},"n":{"docs":{},"i":{"docs":{},"c":{"docs":{},"k":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125}}}}}}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125}}}}}}}},"d":{"docs":{},"o":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{},",":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},"&":{"docs":{},"p":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}},"w":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}},"i":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.006802721088435374}}},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},"e":{"docs":{},"d":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}},"p":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.01282051282051282}},"f":{"docs":{},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"(":{"docs":{},"*":{"docs":{},"p":{"docs":{},"p":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}},";":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}},"r":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.01020408163265306},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}},"e":{"docs":{},"v":{"docs":{},"i":{"docs":{},"e":{"docs":{},"w":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"a":{"docs":{},"d":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.012433392539964476}},"m":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"e":{"docs":{},".":{"docs":{},"m":{"docs":{},"d":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"_":{"docs":{},"z":{"docs":{},"h":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},",":{"docs":{},"相":{"docs":{},"得":{"docs":{},"益":{"docs":{},"彰":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}},"(":{"docs":{},"p":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"r":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"\"":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"1":{"docs":{},"\"":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"2":{"docs":{},"\"":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"3":{"docs":{},"\"":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"docs":{}}}}}}}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}},"e":{"docs":{},"r":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}},"2":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}},"3":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}},"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},",":{"docs":{},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},"。":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"调":{"docs":{},"用":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"\"":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"l":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"c":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}},"s":{"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}}},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"t":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}}}}}},"o":{"docs":{},"l":{"docs":{},"v":{"docs":{},"e":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"u":{"docs":{},"r":{"docs":{},"c":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}},"p":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}},".":{"docs":{},"b":{"docs":{},"o":{"docs":{},"d":{"docs":{},"y":{"docs":{},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}},"[":{"docs":{},"k":{"docs":{},"]":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}},"m":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"e":{"docs":{},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"t":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"u":{"docs":{},"r":{"docs":{},"n":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.023148148148148147},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.01444043321299639},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.017509727626459144},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.011513157894736841},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.02471169686985173},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.02891156462585034},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.046153846153846156},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.03305785123966942},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.02356902356902357},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0392156862745098},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0390625},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.020512820512820513},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.011086474501108648},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}},"e":{"docs":{},"d":{"docs":{},";":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}},"p":{"docs":{},"t":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}},"c":{"docs":{},"e":{"docs":{},"i":{"docs":{},"v":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.022988505747126436}}}}},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}},"v":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.005836575875486381},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},";":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.005836575875486381}}}}},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}},",":{"docs":{},"很":{"docs":{},"容":{"docs":{},"易":{"docs":{},"发":{"docs":{},"生":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}},"d":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}},"q":{"docs":{},"u":{"docs":{},"i":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"e":{"docs":{},"d":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}},".":{"docs":{},"n":{"docs":{},"o":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},"t":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.03067484662576687}}}}}}}}}}}}}}}}}},"g":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701}},",":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}},"m":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"(":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.01775147928994083}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"k":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"f":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},".":{"docs":{},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"(":{"docs":{},"r":{"docs":{},"e":{"docs":{},"f":{"docs":{},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{},".":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{},"o":{"docs":{},"f":{"docs":{},"(":{"docs":{},"i":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{},"e":{"docs":{},"o":{"docs":{},"f":{"docs":{},"(":{"docs":{},"i":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}},"u":{"docs":{},"s":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"z":{"docs":{},"v":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"a":{"docs":{},"w":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}},"n":{"docs":{},"g":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.008237232289950576},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.013605442176870748},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.03134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}},"e":{"docs":{},"。":{"docs":{},"二":{"docs":{},"者":{"docs":{},"在":{"docs":{},"功":{"docs":{},"能":{"docs":{},"上":{"docs":{},"没":{"docs":{},"有":{"docs":{},"区":{"docs":{},"别":{"docs":{},",":{"docs":{},"但":{"docs":{},"在":{"docs":{},"性":{"docs":{},"能":{"docs":{},"上":{"docs":{},"会":{"docs":{},"有":{"docs":{},"区":{"docs":{},"别":{"docs":{},"吗":{"docs":{},"?":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"只":{"docs":{},"迭":{"docs":{},"代":{"docs":{},"下":{"docs":{},"标":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"下":{"docs":{},"标":{"docs":{},"访":{"docs":{},"问":{"docs":{},"元":{"docs":{},"素":{"docs":{},",":{"docs":{},"这":{"docs":{},"种":{"docs":{},"使":{"docs":{},"用":{"docs":{},"方":{"docs":{},"式":{"docs":{},"和":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"时":{"docs":{},"候":{"docs":{},"甚":{"docs":{},"至":{"docs":{},"会":{"docs":{},"有":{"docs":{},"上":{"docs":{},"千":{"docs":{},"倍":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{},"对":{"docs":{},"于":{"docs":{},"这":{"docs":{},"种":{"docs":{},"场":{"docs":{},"景":{"docs":{},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"x":{"docs":{},"n":{"docs":{},"a":{"docs":{},"n":{"docs":{},"o":{"docs":{},"(":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"e":{"docs":{},"!":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}},"u":{"docs":{},"n":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"(":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}},"o":{"docs":{},"s":{"docs":{},".":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"s":{"docs":{},"[":{"1":{"docs":{},":":{"docs":{},"]":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},";":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}},"docs":{}}}}}}}}},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},";":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}},"e":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},"o":{"docs":{},"s":{"docs":{},";":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"m":{"docs":{},"a":{"docs":{},"x":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"c":{"docs":{},"s":{"docs":{},"(":{"1":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}}}}}}}}}}},"c":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}}},"h":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},":":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},":":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}},"_":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"(":{"docs":{},"&":{"docs":{},"c":{"docs":{},".":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"(":{"docs":{},"&":{"docs":{},"c":{"docs":{},".":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{},"(":{"docs":{},"&":{"docs":{},"c":{"docs":{},".":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"a":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},"&":{"docs":{},"c":{"docs":{},".":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"n":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"…":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549}}}}}}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}}}},"s":{"docs":{},"p":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}},"p":{"docs":{},"c":{"docs":{},"、":{"docs":{},"d":{"docs":{},"b":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.007633587786259542}}}}},"o":{"docs":{},"w":{"docs":{},"s":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.023076923076923078}}}}}}}}}}}},"f":{"docs":{},"c":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.013513513513513514}}}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}},"w":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},")":{"docs":{},",":{"docs":{},"当":{"docs":{},"修":{"docs":{},"改":{"docs":{},"条":{"docs":{},"件":{"docs":{},"或":{"docs":{},"者":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}},"s":{"1":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}},"p":{"docs":{},"t":{"docs":{},"r":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176}}}}},"{":{"docs":{},"}":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886}}}},"2":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176}},"p":{"docs":{},"t":{"docs":{},"r":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.029411764705882353}}}}},"{":{"docs":{},"}":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886}}}},"3":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886}}},"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.006016847172081829},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.015267175572519083}},"p":{"docs":{},"e":{"docs":{},"c":{"docs":{},"i":{"docs":{},"f":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"i":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}},"a":{"docs":{},"(":{"docs":{},"s":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"l":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"t":{"docs":{},"r":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}},".":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"s":{"docs":{},"[":{"1":{"docs":{},"]":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"\"":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}}}}}}}},"docs":{}}}}},"l":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}},"t":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.015945330296127564}},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"a":{"docs":{},"r":{"docs":{},"d":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"s":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}}}}}},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}},"u":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}},"s":{"docs":{},")":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"=":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}},"i":{"docs":{},"n":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"g":{"docs":{},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"i":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}},"s":{"docs":{},".":{"docs":{},"s":{"docs":{},"n":{"docs":{},"a":{"docs":{},"p":{"docs":{},"s":{"docs":{},"h":{"docs":{},"o":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}}}}}}},"i":{"docs":{},"c":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}},"e":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.014209591474245116}},"(":{"docs":{},"[":{"docs":{},"]":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},")":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549}}}},",":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"y":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"c":{"docs":{},"k":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}},"r":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.04597701149425287},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.008223684210526315},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.037037037037037035},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.01358695652173913},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.029585798816568046},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.03103448275862069},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.010256410256410256},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0066518847006651885},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"{":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}},"}":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.017241379310344827}},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.012033694344163659},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01845018450184502},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.03125},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.018404907975460124},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},")":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.017543859649122806},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},",":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}}}},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"也":{"docs":{},"提":{"docs":{},"供":{"docs":{},"了":{"docs":{},"预":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"v":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203}}}}}}},"o":{"docs":{},"r":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}}}}}}}}}},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}}}}},":":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}},"p":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}},"u":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"d":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{},".":{"docs":{},"(":{"docs":{},"*":{"docs":{},"s":{"docs":{},"t":{"docs":{},"u":{"docs":{},"d":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{},"(":{"docs":{},"s":{"docs":{},"t":{"docs":{},"u":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"f":{"docs":{},"n":{"docs":{},"o":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"h":{"docs":{},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.006578947368421052}}}}}},"a":{"docs":{},"n":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},"r":{"docs":{},"c":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.008875739644970414}},"/":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"/":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"2":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},"里":{"docs":{},"面":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"找":{"docs":{},"到":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},".":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"t":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"s":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},")":{"docs":{},"配":{"docs":{},"置":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}},"b":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.01904761904761905}},"=":{"1":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"2":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"docs":{}}}}}}}},"c":{"docs":{},"h":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"m":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.004942339373970346}}},"r":{"docs":{},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"s":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"w":{"docs":{},"a":{"docs":{},"g":{"docs":{},"g":{"docs":{},"e":{"docs":{},"r":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"i":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.006589785831960461}}}}}}},"y":{"docs":{},"s":{"docs":{},"v":{"docs":{},")":{"docs":{},"和":{"docs":{},"进":{"docs":{},"程":{"docs":{},"管":{"docs":{},"理":{"docs":{},"(":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},",":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"n":{"docs":{},"c":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},".":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"3":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}}},"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.03305785123966942},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}},"r":{"docs":{},"w":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"3":{"docs":{},".":{"3":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}}},"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}}}}}}}}}}},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":3.3635287152161037}},"?":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.023076923076923078}},"{":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693}}},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},",":{"docs":{},"例":{"docs":{},"如":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}},"w":{"docs":{},"a":{"docs":{},"i":{"docs":{},"t":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.009111617312072893}},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":3.35550628233555}},"e":{"docs":{},"?":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},"(":{"docs":{},"&":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}},"/":{"docs":{},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}}}}}},"e":{"docs":{},"t":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.017543859649122806},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{},"(":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}}}}},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.017543859649122806}}},")":{"docs":{},"、":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"、":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"、":{"docs":{},"c":{"docs":{},"l":{"docs":{},"e":{"docs":{},"a":{"docs":{},"r":{"docs":{},"、":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"v":{"docs":{},"e":{"docs":{},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"(":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353}}}}}}}}}}},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"d":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"l":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}}},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":2.5190217391304346},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.020134228187919462},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.01444043321299639},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.007220216606498195}}},"申":{"docs":{},"明":{"docs":{},"变":{"docs":{},"量":{"docs":{},"避":{"docs":{},"免":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}},",":{"docs":{},"这":{"docs":{},"意":{"docs":{},"味":{"docs":{},"着":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"因":{"docs":{},"为":{"docs":{},"重":{"docs":{},"复":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"会":{"docs":{},"带":{"docs":{},"来":{"docs":{},"性":{"docs":{},"能":{"docs":{},"损":{"docs":{},"耗":{"docs":{},"。":{"docs":{},"相":{"docs":{},"反":{"docs":{},",":{"docs":{},"请":{"docs":{},"执":{"docs":{},"行":{"docs":{},"一":{"docs":{},"次":{"docs":{},"转":{"docs":{},"换":{"docs":{},"并":{"docs":{},"捕":{"docs":{},"获":{"docs":{},"结":{"docs":{},"果":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"但":{"docs":{},"是":{"docs":{},"共":{"docs":{},"用":{"docs":{},"原":{"docs":{},"始":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}},"将":{"docs":{},"要":{"docs":{},"删":{"docs":{},"除":{"docs":{},"的":{"docs":{},"元":{"docs":{},"素":{"docs":{},"过":{"docs":{},"滤":{"docs":{},"掉":{"docs":{},"。":{"docs":{},"缺":{"docs":{},"点":{"docs":{},"是":{"docs":{},"需":{"docs":{},"要":{"docs":{},"开":{"docs":{},"辟":{"docs":{},"另":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"x":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789}}}}}}},"e":{"docs":{},"s":{"docs":{},"c":{"docs":{},"a":{"docs":{},"p":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"e":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"b":{"docs":{},"o":{"docs":{},"n":{"docs":{},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"i":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"函":{"docs":{},"数":{"docs":{},"中":{"docs":{},"分":{"docs":{},"配":{"docs":{},"的":{"docs":{},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{},"切":{"docs":{},"片":{"docs":{},"因":{"docs":{},"为":{"docs":{},"要":{"docs":{},"返":{"docs":{},"回":{"docs":{},"到":{"docs":{},"函":{"docs":{},"数":{"docs":{},"外":{"docs":{},"部":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"发":{"docs":{},"生":{"docs":{},"了":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"在":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"申":{"docs":{},"请":{"docs":{},"内":{"docs":{},"存":{"docs":{},"空":{"docs":{},"间":{"docs":{},"。":{"docs":{},"从":{"docs":{},"测":{"docs":{},"试":{"docs":{},"也":{"docs":{},"过":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"出":{"docs":{},",":{"docs":{},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"y":{"docs":{},"f":{"docs":{},"i":{"docs":{},"b":{"docs":{},"o":{"docs":{},"n":{"docs":{},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"i":{"docs":{},"(":{"docs":{},")":{"docs":{},"函":{"docs":{},"数":{"docs":{},"没":{"docs":{},"有":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},",":{"docs":{},"完":{"docs":{},"全":{"docs":{},"在":{"docs":{},"栈":{"docs":{},"上":{"docs":{},"完":{"docs":{},"成":{"docs":{},"数":{"docs":{},"组":{"docs":{},"的":{"docs":{},"创":{"docs":{},"建":{"docs":{},"。":{"docs":{},"这":{"docs":{},"里":{"docs":{},"说":{"docs":{},"明":{"docs":{},"了":{"docs":{},"对":{"docs":{},"于":{"docs":{},"一":{"docs":{},"些":{"docs":{},"短":{"docs":{},"小":{"docs":{},"的":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"栈":{"docs":{},"上":{"docs":{},"复":{"docs":{},"制":{"docs":{},"的":{"docs":{},"成":{"docs":{},"本":{"docs":{},"远":{"docs":{},"小":{"docs":{},"于":{"docs":{},"在":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"分":{"docs":{},"配":{"docs":{},"和":{"docs":{},"回":{"docs":{},"收":{"docs":{},"的":{"docs":{},"成":{"docs":{},"本":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"w":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}},"s":{"docs":{},"[":{"1":{"docs":{},"]":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"\"":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}}}}}}}},"docs":{}}}}}},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.009884678747940691},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.023076923076923078}}}},"f":{"docs":{},"i":{"docs":{},"x":{"docs":{},"e":{"docs":{},"d":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}}}}}}}}},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}}}}},".":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.006802721088435374}},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"[":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"]":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}},"d":{"docs":{},"d":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},"\"":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},"\"":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}},"h":{"docs":{},"a":{"docs":{},"s":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"(":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}},"m":{"docs":{},"u":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}}}}}},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176}}}}}},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}},"s":{"docs":{},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"(":{"docs":{},"g":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},")":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}}}}}}}},"q":{"docs":{},"l":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":1.7407407407407405},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},",":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"(":{"docs":{},"v":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},")":{"docs":{},"为":{"docs":{},"单":{"docs":{},"位":{"docs":{},"访":{"docs":{},"问":{"docs":{},"。":{"docs":{},"如":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"g":{"docs":{},"n":{"docs":{},"(":{"docs":{},"g":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},")":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}},"m":{"docs":{},"s":{"docs":{},"g":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}}},".":{"docs":{},"g":{"docs":{},"o":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}},"_":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}}}}}}},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"(":{"docs":{},"m":{"docs":{},"s":{"docs":{},"g":{"docs":{},",":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}}}}}}}}}}}},"a":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"n":{"docs":{},"g":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}}},"m":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"a":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}},"t":{"docs":{},"e":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"n":{"docs":{},"a":{"docs":{},"p":{"docs":{},"s":{"docs":{},"h":{"docs":{},"o":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.01358695652173913}},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}}}},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.04132231404958678}}}}},",":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}},"[":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{},"]":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537}}}}}}},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}},"v":{"docs":{},"e":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"t":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}},"o":{"docs":{},"l":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}},"d":{"docs":{},"o":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"/":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"\"":{"docs":{},"之":{"docs":{},"类":{"docs":{},"的":{"docs":{},"短":{"docs":{},"语":{"docs":{},"来":{"docs":{},"保":{"docs":{},"持":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"简":{"docs":{},"洁":{"docs":{},",":{"docs":{},"当":{"docs":{},"错":{"docs":{},"误":{"docs":{},"通":{"docs":{},"过":{"docs":{},"堆":{"docs":{},"栈":{"docs":{},"向":{"docs":{},"上":{"docs":{},"传":{"docs":{},"递":{"docs":{},"时":{"docs":{},",":{"docs":{},"它":{"docs":{},"会":{"docs":{},"一":{"docs":{},"层":{"docs":{},"一":{"docs":{},"层":{"docs":{},"被":{"docs":{},"堆":{"docs":{},"积":{"docs":{},"起":{"docs":{},"来":{"docs":{},":":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.018404907975460124},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},"x":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"e":{"docs":{},"。":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}},"s":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},"t":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.012269938650306749}}}}}}}}}}}}}}}},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"(":{"docs":{},"t":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"t":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}}}}}},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"a":{"docs":{},"t":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701}}}}}}},"x":{"docs":{},"t":{"docs":{},"u":{"docs":{},"a":{"docs":{},"l":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}},"h":{"docs":{},"i":{"docs":{},"r":{"docs":{},"d":{"docs":{},"_":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}},"a":{"docs":{},"g":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}},"b":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}},"r":{"docs":{},"u":{"docs":{},"e":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"}":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},")":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},",":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"i":{"docs":{},"p":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.008152173913043478}},"s":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"[":{"0":{"docs":{},"]":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}},",":{"docs":{},"但":{"docs":{},"不":{"docs":{},"会":{"docs":{},"影":{"docs":{},"响":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}},"docs":{}}}}}},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.010830324909747292},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01845018450184502},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.013157894736842105},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.037037037037037035},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.016304347826086956},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.0380952380952381},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.029411764705882353},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.03550295857988166},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.023391812865497075},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.013793103448275862},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"s":{"docs":{},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},".":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}},":":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.010344827586206896}}}},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"{":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":3.333333333333333},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"e":{"docs":{},"p":{"docs":{},"(":{"1":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"d":{"docs":{},"u":{"docs":{},"r":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"a":{"docs":{},"y":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}},"m":{"docs":{},"i":{"docs":{},"c":{"docs":{},"r":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335}}}}}}}}}}}}}},"s":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},"(":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.03153153153153153},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0234375}},"e":{"docs":{},",":{"docs":{},"在":{"docs":{},"比":{"docs":{},"较":{"docs":{},"、":{"docs":{},"添":{"docs":{},"加":{"docs":{},"或":{"docs":{},"减":{"docs":{},"去":{"docs":{},"时":{"docs":{},"间":{"docs":{},"时":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}},"如":{"docs":{},"果":{"docs":{},"底":{"docs":{},"层":{"docs":{},"驱":{"docs":{},"动":{"docs":{},"程":{"docs":{},"序":{"docs":{},"支":{"docs":{},"持":{"docs":{},"则":{"docs":{},"返":{"docs":{},"回":{"docs":{},";":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"u":{"docs":{},"r":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.02702702702702703}},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"该":{"docs":{},"单":{"docs":{},"位":{"docs":{},"包":{"docs":{},"含":{"docs":{},"在":{"docs":{},"字":{"docs":{},"段":{"docs":{},"的":{"docs":{},"名":{"docs":{},"称":{"docs":{},"中":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"t":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}},"h":{"docs":{},"o":{"docs":{},"u":{"docs":{},"r":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}},"m":{"docs":{},"i":{"docs":{},"l":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}},"e":{"docs":{},"d":{"docs":{},"u":{"docs":{},"r":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009}}}}}}}}}},"r":{"docs":{},"f":{"docs":{},"c":{"3":{"3":{"3":{"9":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}},"u":{"docs":{},"n":{"docs":{},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"h":{"docs":{},"a":{"docs":{},"l":{"docs":{},"j":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}},",":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.03125}},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}}}},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}}}},".":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"(":{"docs":{},"t":{"docs":{},"t":{"docs":{},".":{"docs":{},"g":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"(":{"2":{"4":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"docs":{}},"docs":{}},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"0":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"docs":{}}}}}}}}}},"t":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}},".":{"docs":{},"w":{"docs":{},"a":{"docs":{},"n":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}},"m":{"docs":{},"p":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}}}},"w":{"docs":{},"o":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"w":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"i":{"docs":{},"k":{"docs":{},"i":{"docs":{"./":{"ref":"./","tf":0.013333333333333334}},"p":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{},"a":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"w":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}},".":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"(":{"docs":{},"e":{"docs":{},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"r":{"docs":{},"c":{"docs":{},",":{"docs":{},"e":{"docs":{},".":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"r":{"docs":{},"c":{"docs":{},")":{"docs":{},"}":{"docs":{},"i":{"docs":{},"m":{"docs":{},"g":{"docs":{},"{":{"docs":{},"c":{"docs":{},"u":{"docs":{},"r":{"docs":{},"s":{"docs":{},"o":{"docs":{},"r":{"docs":{},":":{"docs":{},"p":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"}":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609},"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"r":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"t":{"docs":{},"h":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}}}},"e":{"docs":{},"b":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.020710059171597635}},"s":{"docs":{},"i":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"a":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.022988505747126436}}}}}}},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}},":":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498}}}}}}},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}},":":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498}}}}}}},",":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}},"i":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.03019538188277087}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.014209591474245116}},",":{"docs":{},"处":{"docs":{},"于":{"docs":{},"等":{"docs":{},"待":{"docs":{},"状":{"docs":{},"态":{"docs":{},"。":{"docs":{},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}},"k":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.007104795737122558}}}}},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{},"=":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}}}}}}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"c":{"docs":{},"h":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}},"s":{"docs":{},"h":{"docs":{},"o":{"docs":{},"p":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}},"d":{"docs":{},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.01282051282051282},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"(":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}},"w":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"\"":{"docs":{},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"\"":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"。":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}},"r":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.007104795737122558}}}},"t":{"docs":{},"e":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"\"":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"。":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}},".":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"p":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}},"g":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.009111617312072893}},".":{"docs":{},"w":{"docs":{},"a":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}}}}},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"(":{"docs":{},"n":{"docs":{},"u":{"docs":{},"m":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"h":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}},"|":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.06804733727810651},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}},"|":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"不":{"docs":{},"仅":{"docs":{},"易":{"docs":{},"用":{"docs":{},",":{"docs":{},"也":{"docs":{},"很":{"docs":{},"易":{"docs":{},"学":{"docs":{},",":{"docs":{},"这":{"docs":{},"得":{"docs":{},"益":{"docs":{},"于":{"docs":{},"与":{"docs":{},"之":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"的":{"docs":{},"丰":{"docs":{},"富":{"docs":{},"学":{"docs":{},"习":{"docs":{},"资":{"docs":{},"料":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"应":{"docs":{},"该":{"docs":{},"拥":{"docs":{},"有":{"docs":{},"的":{"docs":{},"目":{"docs":{},"录":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}},"/":{"docs":{},"s":{"docs":{},"r":{"docs":{},"c":{"3":{"docs":{},".":{"docs":{},"小":{"docs":{},"结":{"docs":{},"参":{"docs":{},"考":{"docs":{},"文":{"docs":{},"献":{"1":{"docs":{},".":{"docs":{},"前":{"docs":{},"言":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"docs":{}}}}}}}}},"docs":{}}}}}}}}}}}},"管":{"docs":{},"是":{"docs":{},"什":{"docs":{},"么":{"docs":{},"语":{"docs":{},"言":{"docs":{},",":{"docs":{},"开":{"docs":{},"发":{"docs":{},"什":{"docs":{},"么":{"docs":{},"项":{"docs":{},"目":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"稍":{"docs":{},"大":{"docs":{},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},",":{"docs":{},"必":{"docs":{},"然":{"docs":{},"要":{"docs":{},"面":{"docs":{},"临":{"docs":{},"如":{"docs":{},"何":{"docs":{},"管":{"docs":{},"理":{"docs":{},"项":{"docs":{},"目":{"docs":{},"结":{"docs":{},"构":{"docs":{},"布":{"docs":{},"局":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"一":{"docs":{},"个":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"清":{"docs":{},"晰":{"docs":{},"的":{"docs":{},"布":{"docs":{},"局":{"docs":{},"是":{"docs":{},"项":{"docs":{},"目":{"docs":{},"可":{"docs":{},"读":{"docs":{},"的":{"docs":{},"关":{"docs":{},"键":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"全":{"docs":{},"局":{"docs":{},"切":{"docs":{},"片":{"docs":{},"还":{"docs":{},"是":{"docs":{},"局":{"docs":{},"部":{"docs":{},"切":{"docs":{},"片":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}},"要":{"docs":{},"在":{"docs":{},"该":{"docs":{},"目":{"docs":{},"录":{"docs":{},"下":{"docs":{},"放":{"docs":{},"太":{"docs":{},"多":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"以":{"docs":{},"被":{"docs":{},"其":{"docs":{},"他":{"docs":{},"项":{"docs":{},"目":{"docs":{},"导":{"docs":{},"入":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"请":{"docs":{},"放":{"docs":{},"到":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"添":{"docs":{},"加":{"docs":{},"没":{"docs":{},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{},"括":{"docs":{},"号":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}}}},"使":{"docs":{},"用":{"2":{"docs":{},"/":{"4":{"docs":{},"来":{"docs":{},"表":{"docs":{},"达":{"docs":{},"英":{"docs":{},"文":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"docs":{}}},"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"表":{"docs":{},"示":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}},"相":{"docs":{},"对":{"docs":{},"路":{"docs":{},"径":{"docs":{},"导":{"docs":{},"入":{"docs":{},"内":{"docs":{},"部":{"docs":{},"包":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"使":{"docs":{},"用":{"docs":{},"完":{"docs":{},"整":{"docs":{},"的":{"docs":{},"路":{"docs":{},"径":{"docs":{},"引":{"docs":{},"入":{"docs":{},"包":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}},"大":{"docs":{},"而":{"docs":{},"全":{"docs":{},"的":{"docs":{},"无":{"docs":{},"意":{"docs":{},"义":{"docs":{},"包":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}},"双":{"docs":{},"重":{"docs":{},"否":{"docs":{},"定":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}},"包":{"docs":{},"装":{"docs":{},"系":{"docs":{},"统":{"docs":{},"调":{"docs":{},"用":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"并":{"docs":{},"给":{"docs":{},"出":{"docs":{},"一":{"docs":{},"些":{"docs":{},"没":{"docs":{},"意":{"docs":{},"义":{"docs":{},"的":{"docs":{},"附":{"docs":{},"加":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}}}},"随":{"docs":{},"便":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"用":{"docs":{},"注":{"docs":{},"释":{"docs":{},"删":{"docs":{},"除":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}},"宽":{"docs":{},"泛":{"docs":{},"、":{"docs":{},"无":{"docs":{},"意":{"docs":{},"义":{"docs":{},"的":{"docs":{},"名":{"docs":{},"字":{"docs":{},",":{"docs":{},"如":{"docs":{},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}},"轻":{"docs":{},"易":{"docs":{},"使":{"docs":{},"用":{"docs":{},"别":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"传":{"docs":{},"递":{"docs":{},"指":{"docs":{},"针":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}},"返":{"docs":{},"回":{"docs":{},"多":{"docs":{},"个":{"docs":{},"用":{"docs":{},"于":{"docs":{},"控":{"docs":{},"制":{"docs":{},"流":{"docs":{},"程":{"docs":{},"的":{"docs":{},"状":{"docs":{},"态":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}},"这":{"docs":{},"样":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}},"反":{"docs":{},"复":{"docs":{},"从":{"docs":{},"固":{"docs":{},"定":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"创":{"docs":{},"建":{"docs":{},"字":{"docs":{},"节":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}}}}}}}}}}}}},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},"空":{"docs":{},"行":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}},"可":{"docs":{},"避":{"docs":{},"免":{"docs":{},"时":{"docs":{},",":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}},"能":{"docs":{},"满":{"docs":{},"足":{"docs":{},"这":{"docs":{},"些":{"docs":{},"要":{"docs":{},"求":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"能":{"docs":{},"要":{"docs":{},"在":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}},"被":{"docs":{},"复":{"docs":{},"制":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"的":{"docs":{},"原":{"docs":{},"因":{"docs":{},",":{"docs":{},"并":{"docs":{},"不":{"docs":{},"是":{"docs":{},"因":{"docs":{},"为":{"docs":{},"其":{"docs":{},"内":{"docs":{},"部":{"docs":{},"嵌":{"docs":{},"套":{"docs":{},"了":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}},"是":{"docs":{},"错":{"docs":{},"误":{"docs":{},"处":{"docs":{},"理":{"docs":{},"的":{"docs":{},"合":{"docs":{},"适":{"docs":{},"策":{"docs":{},"略":{"docs":{},",":{"docs":{},"仅":{"docs":{},"当":{"docs":{},"发":{"docs":{},"生":{"docs":{},"不":{"docs":{},"可":{"docs":{},"恢":{"docs":{},"复":{"docs":{},"的":{"docs":{},"异":{"docs":{},"常":{"docs":{},"(":{"docs":{},"如":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}}}},"基":{"docs":{},"于":{"docs":{},"代":{"docs":{},"码":{"docs":{},"块":{"docs":{},"的":{"docs":{},",":{"docs":{},"而":{"docs":{},"是":{"docs":{},"基":{"docs":{},"于":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"。":{"docs":{},"你":{"docs":{},"在":{"docs":{},"循":{"docs":{},"环":{"docs":{},"中":{"docs":{},"分":{"docs":{},"配":{"docs":{},"资":{"docs":{},"源":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"不":{"docs":{},"应":{"docs":{},"该":{"docs":{},"简":{"docs":{},"单":{"docs":{},"地":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"提":{"docs":{},"示":{"docs":{},":":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"将":{"docs":{},"为":{"docs":{},"提":{"docs":{},"供":{"docs":{},"给":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}},"用":{"docs":{},"复":{"docs":{},"数":{"docs":{},"。":{"docs":{},"如":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"存":{"docs":{},"在":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"不":{"docs":{},"允":{"docs":{},"许":{"docs":{},"部":{"docs":{},"分":{"docs":{},"失":{"docs":{},"败":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}},"再":{"docs":{},"受":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"保":{"docs":{},"护":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"引":{"docs":{},"发":{"docs":{},"并":{"docs":{},"发":{"docs":{},"读":{"docs":{},"写":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}}}}}}}}}},"支":{"docs":{},"持":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}},"建":{"docs":{},"议":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}},"同":{"docs":{},"。":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}},",":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}},"发":{"docs":{},"送":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},"信":{"docs":{},"道":{"2":{"docs":{},".":{"3":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},"docs":{}}},"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"发":{"docs":{},"送":{"docs":{},"任":{"docs":{},"何":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"只":{"docs":{},"用":{"docs":{},"来":{"docs":{},"通":{"docs":{},"知":{"docs":{},"子":{"docs":{},"协":{"docs":{},"程":{"docs":{},"(":{"docs":{},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},")":{"docs":{},"执":{"docs":{},"行":{"docs":{},"任":{"docs":{},"务":{"docs":{},",":{"docs":{},"或":{"docs":{},"只":{"docs":{},"用":{"docs":{},"来":{"docs":{},"控":{"docs":{},"制":{"docs":{},"协":{"docs":{},"程":{"docs":{},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},"。":{"docs":{},"这":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"作":{"docs":{},"为":{"docs":{},"占":{"docs":{},"位":{"docs":{},"符":{"docs":{},"就":{"docs":{},"非":{"docs":{},"常":{"docs":{},"合":{"docs":{},"适":{"docs":{},"了":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"分":{"docs":{},"片":{"docs":{},"写":{"docs":{},"入":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}},"之":{"docs":{},"势":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}},"外":{"docs":{},"使":{"docs":{},"用":{"docs":{},"函":{"docs":{},"数":{"docs":{},"调":{"docs":{},"用":{"docs":{},"的":{"docs":{},"结":{"docs":{},"果":{"docs":{},",":{"docs":{},"则":{"docs":{},"不":{"docs":{},"应":{"docs":{},"尝":{"docs":{},"试":{"docs":{},"缩":{"docs":{},"小":{"docs":{},"范":{"docs":{},"围":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}},"间":{"docs":{},"操":{"docs":{},"作":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"也":{"docs":{},"是":{"docs":{},"不":{"docs":{},"错":{"docs":{},"的":{"docs":{},"选":{"docs":{},"择":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}},"互":{"docs":{},"动":{"docs":{},"勘":{"docs":{},"误":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}},"斥":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"的":{"docs":{},"作":{"docs":{},"用":{"docs":{},"是":{"docs":{},"保":{"docs":{},"证":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"同":{"docs":{},"一":{"docs":{},"时":{"docs":{},"刻":{"docs":{},"只":{"docs":{},"能":{"docs":{},"被":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"想":{"docs":{},"写":{"docs":{},"出":{"docs":{},"更":{"docs":{},"加":{"docs":{},"高":{"docs":{},"效":{"docs":{},"易":{"docs":{},"读":{"docs":{},"的":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}},"让":{"docs":{},"自":{"docs":{},"己":{"docs":{},"拥":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"更":{"docs":{},"好":{"docs":{},"的":{"docs":{},"编":{"docs":{},"码":{"docs":{},"风":{"docs":{},"格":{"docs":{},",":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}},"目":{"docs":{},"录":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}},"/":{"docs":{},"c":{"docs":{},"m":{"docs":{},"d":{"docs":{},"/":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"a":{"docs":{},"l":{"docs":{},"/":{"docs":{},"p":{"docs":{},"k":{"docs":{},"g":{"docs":{},"/":{"docs":{},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"r":{"2":{"docs":{},".":{"3":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}},"必":{"docs":{},"须":{"docs":{},"用":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}},"生":{"docs":{},"成":{"docs":{},"工":{"docs":{},"具":{"docs":{},"自":{"docs":{},"动":{"docs":{},"生":{"docs":{},"成":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"排":{"docs":{},"除":{"docs":{},"此":{"docs":{},"规":{"docs":{},"则":{"docs":{},"(":{"docs":{},"如":{"docs":{},"协":{"docs":{},"议":{"docs":{},"生":{"docs":{},"成":{"docs":{},"文":{"docs":{},"件":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"优":{"docs":{},"先":{"docs":{},"处":{"docs":{},"理":{"docs":{},"条":{"docs":{},"件":{"docs":{},"不":{"docs":{},"满":{"docs":{},"足":{"docs":{},"或":{"docs":{},"错":{"docs":{},"误":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"尽":{"docs":{},"早":{"docs":{},"返":{"docs":{},"回":{"docs":{},"或":{"docs":{},"继":{"docs":{},"续":{"docs":{},"循":{"docs":{},"环":{"docs":{},"来":{"docs":{},"减":{"docs":{},"少":{"docs":{},"嵌":{"docs":{},"套":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"与":{"docs":{},"官":{"docs":{},"方":{"docs":{},"推":{"docs":{},"荐":{"docs":{},"的":{"docs":{},"格":{"docs":{},"式":{"docs":{},"保":{"docs":{},"持":{"docs":{},"一":{"docs":{},"致":{"docs":{},",":{"docs":{},"于":{"docs":{},"是":{"docs":{},"所":{"docs":{},"有":{"docs":{},"格":{"docs":{},"式":{"docs":{},"有":{"docs":{},"关":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"都":{"docs":{},"以":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}},"即":{"docs":{},"注":{"docs":{},"释":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"的":{"docs":{},"稳":{"docs":{},"健":{"docs":{},"、":{"docs":{},"可":{"docs":{},"读":{"docs":{},"和":{"docs":{},"高":{"docs":{},"效":{"docs":{},"是":{"docs":{},"我":{"docs":{},"们":{"docs":{},"每":{"docs":{},"一":{"docs":{},"个":{"docs":{},"位":{"docs":{"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456}}}}}}}}}}}}}}}}}},"风":{"docs":{},"格":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"内":{"docs":{},"容":{"docs":{},"简":{"docs":{},"介":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}},"部":{"docs":{},"包":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}},"实":{"docs":{},"现":{"docs":{},"决":{"docs":{},"定":{"docs":{},"而":{"docs":{},"和":{"docs":{},"具":{"docs":{},"体":{"docs":{},"的":{"docs":{},"语":{"docs":{},"法":{"docs":{},"没":{"docs":{},"有":{"docs":{},"关":{"docs":{},"系":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}},"是":{"docs":{},"维":{"docs":{},"护":{"docs":{},"着":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"维":{"docs":{},"护":{"docs":{},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{},"等":{"docs":{},"待":{"docs":{},"队":{"docs":{},"列":{"docs":{},",":{"docs":{},"队":{"docs":{},"列":{"docs":{},"中":{"docs":{},"存":{"docs":{},"放":{"docs":{},"的":{"docs":{},"是":{"docs":{},"所":{"docs":{},"有":{"docs":{},"在":{"docs":{},"等":{"docs":{},"待":{"docs":{},"这":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"前":{"docs":{},"变":{"docs":{},"量":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"规":{"docs":{},"则":{"3":{"docs":{},".":{"docs":{},"合":{"docs":{},"理":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}},"开":{"docs":{},"销":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"写":{"docs":{},"出":{"docs":{},"更":{"docs":{},"优":{"docs":{},"质":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}},"入":{"docs":{},"到":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"锁":{"docs":{},"与":{"docs":{},"读":{"docs":{},"锁":{"docs":{},"是":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"的":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"存":{"docs":{},"在":{"docs":{},"读":{"docs":{},"锁":{"docs":{},",":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"存":{"docs":{},"在":{"docs":{},"写":{"docs":{},"锁":{"docs":{},",":{"docs":{},"读":{"docs":{},"锁":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"之":{"docs":{},"间":{"docs":{},"是":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"的":{"docs":{},",":{"docs":{},"存":{"docs":{},"在":{"docs":{},"写":{"docs":{},"锁":{"docs":{},",":{"docs":{},"其":{"docs":{},"他":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}},"并":{"docs":{},"发":{"docs":{},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"随":{"docs":{},"便":{"docs":{},"起":{"docs":{},"个":{"docs":{},"成":{"docs":{},"千":{"docs":{},"上":{"docs":{},"万":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}},"前":{"docs":{},"言":{"docs":{"./":{"ref":"./","tf":10}}},"都":{"docs":{},"应":{"docs":{},"该":{"docs":{},"被":{"docs":{},"删":{"docs":{},"除":{"docs":{},",":{"docs":{},"除":{"docs":{},"非":{"docs":{},"添":{"docs":{},"加":{"docs":{},"注":{"docs":{},"释":{"docs":{},"讲":{"docs":{},"解":{"docs":{},"为":{"docs":{},"什":{"docs":{},"么":{"docs":{},"不":{"docs":{},"删":{"docs":{},"除":{"docs":{},",":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}},"缀":{"docs":{},")":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}},"面":{"docs":{},"的":{"docs":{},"例":{"docs":{},"子":{"docs":{},"过":{"docs":{},"于":{"docs":{},"极":{"docs":{},"端":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"程":{"docs":{},"序":{"docs":{},"也":{"docs":{},"不":{"docs":{},"会":{"docs":{},"无":{"docs":{},"限":{"docs":{},"开":{"docs":{},"辟":{"docs":{},"协":{"docs":{},"程":{"docs":{},",":{"docs":{},"旨":{"docs":{},"在":{"docs":{},"说":{"docs":{},"明":{"docs":{},"协":{"docs":{},"程":{"docs":{},"数":{"docs":{},"量":{"docs":{},"是":{"docs":{},"有":{"docs":{},"限":{"docs":{},"制":{"docs":{},"的":{"docs":{},",":{"docs":{},"不":{"docs":{},"能":{"docs":{},"无":{"docs":{},"限":{"docs":{},"开":{"docs":{},"辟":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"一":{"docs":{},"段":{"docs":{},"注":{"docs":{},"释":{"docs":{},",":{"docs":{},"说":{"docs":{},"明":{"docs":{},"了":{"docs":{},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}},"要":{"docs":{},"加":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"需":{"docs":{},"要":{"docs":{},"对":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},"进":{"docs":{},"行":{"docs":{},"上":{"docs":{},"锁":{"docs":{},",":{"docs":{},"主":{"docs":{},"调":{"docs":{},"加":{"docs":{},"入":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"通":{"docs":{},"知":{"docs":{},"列":{"docs":{},"表":{"docs":{},"后":{"docs":{},"再":{"docs":{},"解":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"功":{"docs":{},"能":{"docs":{},"实":{"docs":{},"践":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}},"设":{"docs":{},"计":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"各":{"docs":{},"个":{"docs":{},"公":{"docs":{},"司":{"docs":{},"或":{"docs":{},"组":{"docs":{},"织":{"docs":{},",":{"docs":{},"都":{"docs":{},"有":{"docs":{},"各":{"docs":{},"自":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}},"占":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"据":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"向":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},"和":{"docs":{"./":{"ref":"./","tf":0.013333333333333334},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.008875739644970414},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":2.5081521739130435},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.018018018018018018},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"其":{"docs":{},"他":{"docs":{},"形":{"docs":{},"式":{"docs":{},"的":{"docs":{},"确":{"docs":{},"定":{"docs":{},"性":{"docs":{},"预":{"docs":{},"计":{"docs":{},"算":{"docs":{},"的":{"docs":{},"优":{"docs":{},"化":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}},"没":{"docs":{},"有":{"docs":{},"任":{"docs":{},"何":{"docs":{},"元":{"docs":{},"素":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}},"如":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789}},"果":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},"你":{"docs":{},"对":{"docs":{},"文":{"docs":{},"章":{"docs":{},"内":{"docs":{},"容":{"docs":{},"有":{"docs":{},"任":{"docs":{},"何":{"docs":{},"疑":{"docs":{},"问":{"docs":{},"和":{"docs":{},"建":{"docs":{},"议":{"docs":{},",":{"docs":{},"欢":{"docs":{},"迎":{"docs":{},"在":{"docs":{},"应":{"docs":{},"相":{"docs":{},"应":{"docs":{},"章":{"docs":{},"节":{"docs":{},"下":{"docs":{},"留":{"docs":{},"言":{"docs":{},"探":{"docs":{},"讨":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"不":{"docs":{},"使":{"docs":{},"用":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"是":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}},"想":{"docs":{},"全":{"docs":{},"面":{"docs":{},"了":{"docs":{},"解":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}},"深":{"docs":{},"入":{"docs":{},"了":{"docs":{},"解":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}},"枚":{"docs":{},"举":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"常":{"docs":{},"量":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"先":{"docs":{},"创":{"docs":{},"建":{"docs":{},"相":{"docs":{},"应":{"docs":{},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}},"这":{"docs":{},"样":{"docs":{},",":{"docs":{},"请":{"docs":{},"参":{"docs":{},"阅":{"docs":{},"错":{"docs":{},"误":{"docs":{},"包":{"docs":{},"装":{"docs":{},"部":{"docs":{},"分":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}},"静":{"docs":{},"态":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"必":{"docs":{},"须":{"docs":{},"通":{"docs":{},"过":{"docs":{},"声":{"docs":{},"明":{"docs":{},"顶":{"docs":{},"级":{"docs":{},"错":{"docs":{},"误":{"docs":{},"变":{"docs":{},"量":{"docs":{},"或":{"docs":{},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"类":{"docs":{},"型":{"docs":{},"来":{"docs":{},"支":{"docs":{},"持":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}},"代":{"docs":{},"码":{"docs":{},"不":{"docs":{},"可":{"docs":{},"复":{"docs":{},"用":{"docs":{},"或":{"docs":{},"者":{"docs":{},"你":{"docs":{},"不":{"docs":{},"希":{"docs":{},"望":{"docs":{},"其":{"docs":{},"他":{"docs":{},"项":{"docs":{},"目":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"请":{"docs":{},"放":{"docs":{},"到":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}},"发":{"docs":{},"现":{"docs":{},"此":{"docs":{},"项":{"docs":{},"目":{"docs":{},"布":{"docs":{},"局":{"docs":{},"规":{"docs":{},"范":{"docs":{},"并":{"docs":{},"不":{"docs":{},"适":{"docs":{},"用":{"docs":{},"自":{"docs":{},"己":{"docs":{},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},",":{"docs":{},"可":{"docs":{},"在":{"docs":{},"其":{"docs":{},"基":{"docs":{},"础":{"docs":{},"上":{"docs":{},"适":{"docs":{},"当":{"docs":{},"做":{"docs":{},"出":{"docs":{},"改":{"docs":{},"变":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"泥":{"docs":{},"古":{"docs":{},"拘":{"docs":{},"方":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"手":{"docs":{},"动":{"docs":{},"管":{"docs":{},"理":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"包":{"docs":{},"可":{"docs":{},"以":{"docs":{},"将":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"包":{"docs":{},"放":{"docs":{},"到":{"docs":{},"该":{"docs":{},"目":{"docs":{},"录":{"docs":{},",":{"docs":{},"当":{"docs":{},"然":{"docs":{},"推":{"docs":{},"荐":{"docs":{},"使":{"docs":{},"用":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"包":{"docs":{},"管":{"docs":{},"理":{"docs":{},"工":{"docs":{},"具":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},"仅":{"docs":{},"在":{"docs":{},"单":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"内":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"则":{"docs":{},"应":{"docs":{},"该":{"docs":{},"定":{"docs":{},"义":{"docs":{},"为":{"docs":{},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},"声":{"docs":{},"明":{"docs":{},"中":{"docs":{},"省":{"docs":{},"略":{"docs":{},"了":{"docs":{},"结":{"docs":{},"构":{"docs":{},"的":{"docs":{},"所":{"docs":{},"有":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"请":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}},"表":{"docs":{},"达":{"docs":{},"式":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"与":{"docs":{},"所":{"docs":{},"需":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"不":{"docs":{},"完":{"docs":{},"全":{"docs":{},"匹":{"docs":{},"配":{"docs":{},",":{"docs":{},"请":{"docs":{},"指":{"docs":{},"定":{"docs":{},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}},"不":{"docs":{},"关":{"docs":{},"心":{"docs":{},"是":{"docs":{},"否":{"docs":{},"成":{"docs":{},"功":{"docs":{},",":{"docs":{},"可":{"docs":{},"显":{"docs":{},"示":{"docs":{},"忽":{"docs":{},"略":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}},"为":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"出":{"docs":{},"现":{"docs":{},"失":{"docs":{},"败":{"docs":{},"应":{"docs":{},"该":{"docs":{},"立":{"docs":{},"即":{"docs":{},"返":{"docs":{},"回":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"继":{"docs":{},"续":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"则":{"docs":{},"属":{"docs":{},"于":{"docs":{},"特":{"docs":{},"殊":{"docs":{},"情":{"docs":{},"况":{"docs":{},"需":{"docs":{},"要":{"docs":{},"添":{"docs":{},"加":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"函":{"docs":{},"数":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"需":{"docs":{},"用":{"docs":{},"于":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"其":{"docs":{},"他":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"则":{"docs":{},"采":{"docs":{},"用":{"docs":{},"下":{"docs":{},"面":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}}}}}},"变":{"docs":{},"量":{"docs":{},"为":{"docs":{},"私":{"docs":{},"有":{"docs":{},",":{"docs":{},"且":{"docs":{},"特":{"docs":{},"有":{"docs":{},"名":{"docs":{},"词":{"docs":{},"为":{"docs":{},"首":{"docs":{},"个":{"docs":{},"单":{"docs":{},"词":{"docs":{},",":{"docs":{},"则":{"docs":{},"使":{"docs":{},"用":{"docs":{},"小":{"docs":{},"写":{"docs":{},",":{"docs":{},"如":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}},"类":{"docs":{},"型":{"docs":{},"不":{"docs":{},"确":{"docs":{},"定":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"将":{"docs":{},"会":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"到":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{},",":{"docs":{},"函":{"docs":{},"数":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"如":{"docs":{},"果":{"docs":{},"能":{"docs":{},"确":{"docs":{},"定":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"就":{"docs":{},"不":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"第":{"docs":{},"一":{"docs":{},"项":{"docs":{},"(":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{},")":{"docs":{},",":{"docs":{},"就":{"docs":{},"丢":{"docs":{},"弃":{"docs":{},"第":{"docs":{},"二":{"docs":{},"项":{"docs":{},"(":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{},"e":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}},"二":{"docs":{},"项":{"docs":{},",":{"docs":{},"则":{"docs":{},"把":{"docs":{},"第":{"docs":{},"一":{"docs":{},"项":{"docs":{},"置":{"docs":{},"为":{"docs":{},"空":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{},"(":{"docs":{},"下":{"docs":{},"划":{"docs":{},"线":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}},"我":{"docs":{},"们":{"docs":{},"调":{"docs":{},"用":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}},"针":{"docs":{},"对":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"开":{"docs":{},"辟":{"docs":{},"很":{"docs":{},"多":{"docs":{},"协":{"docs":{},"程":{"docs":{},",":{"docs":{},"但":{"docs":{},"不":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"程":{"docs":{},"序":{"docs":{},"崩":{"docs":{},"溃":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"吗":{"docs":{},"?":{"docs":{},"如":{"docs":{},"果":{"docs":{},"真":{"docs":{},"要":{"docs":{},"这":{"docs":{},"么":{"docs":{},"做":{"docs":{},"的":{"docs":{},"话":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"清":{"docs":{},"楚":{"docs":{},"地":{"docs":{},"知":{"docs":{},"道":{"docs":{},",":{"docs":{},"协":{"docs":{},"程":{"docs":{},"虽":{"docs":{},"然":{"docs":{},"轻":{"docs":{},"量":{"docs":{},",":{"docs":{},"但":{"docs":{},"仍":{"docs":{},"有":{"docs":{},"开":{"docs":{},"销":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"在":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"传":{"docs":{},"入":{"docs":{},"的":{"docs":{},"参":{"docs":{},"数":{"docs":{},"通":{"docs":{},"常":{"docs":{},"是":{"docs":{},"固":{"docs":{},"定":{"docs":{},"的":{"docs":{},",":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"通":{"docs":{},"过":{"docs":{},"实":{"docs":{},"现":{"docs":{},"多":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"实":{"docs":{},"现":{"docs":{},"默":{"docs":{},"认":{"docs":{},"参":{"docs":{},"数":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{},"出":{"docs":{},"现":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{},"仅":{"docs":{},"被":{"docs":{},"使":{"docs":{},"用":{"docs":{},"一":{"docs":{},"次":{"docs":{},",":{"docs":{},"且":{"docs":{},"不":{"docs":{},"能":{"docs":{},"起":{"docs":{},"到":{"docs":{},"解":{"docs":{},"释":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"的":{"docs":{},"作":{"docs":{},"用":{"docs":{},"时":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"删":{"docs":{},"除":{"docs":{},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"内":{"docs":{},"联":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"操":{"docs":{},"作":{"docs":{},"成":{"docs":{},"功":{"docs":{},",":{"docs":{},"再":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}},"方":{"docs":{},"法":{"docs":{},"不":{"docs":{},"使":{"docs":{},"用":{"docs":{},"类":{"docs":{},"的":{"docs":{},"成":{"docs":{},"员":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"实":{"docs":{},"现":{"docs":{},"为":{"docs":{},"非":{"docs":{},"成":{"docs":{},"员":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}},"非":{"docs":{},"成":{"docs":{},"员":{"docs":{},"函":{"docs":{},"数":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"类":{"docs":{},"的":{"docs":{},"多":{"docs":{},"个":{"docs":{},"属":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"实":{"docs":{},"现":{"docs":{},"为":{"docs":{},"成":{"docs":{},"员":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}},"要":{"docs":{},"开":{"docs":{},"启":{"docs":{},"多":{"docs":{},"个":{"docs":{},"线":{"docs":{},"程":{"docs":{},"执":{"docs":{},"行":{"docs":{},"一":{"docs":{},"组":{"docs":{},"动":{"docs":{},"作":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"要":{"docs":{},"等":{"docs":{},"待":{"docs":{},"全":{"docs":{},"部":{"docs":{},"完":{"docs":{},"成":{"docs":{},"后":{"docs":{},"继":{"docs":{},"续":{"docs":{},"后":{"docs":{},"续":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},",":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"*":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"与":{"docs":{},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},".":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"不":{"docs":{},"匹":{"docs":{},"配":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"语":{"docs":{},"句":{"docs":{},"v":{"docs":{},"a":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"类":{"docs":{},"似":{"docs":{},"上":{"docs":{},"面":{"docs":{},"分":{"docs":{},"配":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"段":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"将":{"docs":{},"其":{"docs":{},"包":{"docs":{},"裹":{"docs":{},"在":{"docs":{},"一":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"中":{"docs":{},"(":{"docs":{},"匿":{"docs":{},"名":{"docs":{},"函":{"docs":{},"数":{"docs":{},"或":{"docs":{},"有":{"docs":{},"名":{"docs":{},"函":{"docs":{},"数":{"docs":{},")":{"docs":{},"。":{"docs":{},"在":{"docs":{},"该":{"docs":{},"函":{"docs":{},"数":{"docs":{},"中":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"没":{"docs":{},"有":{"docs":{},"要":{"docs":{},"添":{"docs":{},"加":{"docs":{},"的":{"docs":{},"其":{"docs":{},"他":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},",":{"docs":{},"则":{"docs":{},"按":{"docs":{},"原":{"docs":{},"样":{"docs":{},"返":{"docs":{},"回":{"docs":{},"原":{"docs":{},"始":{"docs":{},"错":{"docs":{},"误":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"它":{"docs":{},",":{"docs":{},"则":{"docs":{},"使":{"docs":{},"用":{"docs":{},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"f":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"确":{"docs":{},"实":{"docs":{},"需":{"docs":{},"要":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"它":{"docs":{},",":{"docs":{},"则":{"docs":{},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"切":{"docs":{},"片":{"docs":{},"中":{"docs":{},"是":{"docs":{},"指":{"docs":{},"向":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"呢":{"docs":{},"?":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}},"想":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}},"使":{"docs":{},"用":{"docs":{},"局":{"docs":{},"部":{"docs":{},"切":{"docs":{},"片":{"docs":{},"时":{"docs":{},",":{"docs":{},"已":{"docs":{},"知":{"docs":{},"切":{"docs":{},"片":{"docs":{},"的":{"docs":{},"长":{"docs":{},"度":{"docs":{},"或":{"docs":{},"容":{"docs":{},"量":{"docs":{},",":{"docs":{},"请":{"docs":{},"使":{"docs":{},"用":{"docs":{},"常":{"docs":{},"量":{"docs":{},"或":{"docs":{},"数":{"docs":{},"值":{"docs":{},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{},"来":{"docs":{},"定":{"docs":{},"义":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"加":{"docs":{},"锁":{"docs":{},"无":{"docs":{},"法":{"docs":{},"避":{"docs":{},"免":{"docs":{},",":{"docs":{},"则":{"docs":{},"可":{"docs":{},"以":{"docs":{},"采":{"docs":{},"用":{"docs":{},"分":{"docs":{},"片":{"docs":{},"的":{"docs":{},"形":{"docs":{},"式":{"docs":{},",":{"docs":{},"减":{"docs":{},"少":{"docs":{},"对":{"docs":{},"资":{"docs":{},"源":{"docs":{},"加":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"次":{"docs":{},"数":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"提":{"docs":{},"高":{"docs":{},"整":{"docs":{},"体":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"并":{"docs":{},"发":{"docs":{},"无":{"docs":{},"法":{"docs":{},"做":{"docs":{},"到":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"化":{"docs":{},",":{"docs":{},"优":{"docs":{},"先":{"docs":{},"使":{"docs":{},"用":{"docs":{},"共":{"docs":{},"享":{"docs":{},"锁":{"docs":{},"而":{"docs":{},"非":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"协":{"docs":{},"程":{"docs":{},"池":{"docs":{},"容":{"docs":{},"量":{"docs":{},"大":{"docs":{},"小":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}},"不":{"docs":{},"同":{"docs":{},"环":{"docs":{},"境":{"docs":{},"(":{"docs":{},"测":{"docs":{},"试":{"docs":{},"、":{"docs":{},"正":{"docs":{},"式":{"docs":{},")":{"docs":{},"的":{"docs":{},"服":{"docs":{},"务":{"docs":{},"配":{"docs":{},"置":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}},"放":{"docs":{},"置":{"docs":{},"测":{"docs":{},"试":{"docs":{},"工":{"docs":{},"具":{"docs":{},"和":{"docs":{},"测":{"docs":{},"试":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{},"对":{"docs":{},"于":{"docs":{},"较":{"docs":{},"大":{"docs":{},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},",":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"数":{"docs":{},"据":{"docs":{},"子":{"docs":{},"目":{"docs":{},"录":{"docs":{},"是":{"docs":{},"有":{"docs":{},"意":{"docs":{},"义":{"docs":{},"的":{"docs":{},"。":{"docs":{},"例":{"docs":{},"如":{"docs":{},",":{"docs":{},"你":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"引":{"docs":{},"入":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}},"无":{"docs":{},"必":{"docs":{},"要":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"起":{"docs":{},"和":{"docs":{},"包":{"docs":{},"相":{"docs":{},"同":{"docs":{},"的":{"docs":{},"名":{"docs":{},"字":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}},"下":{"docs":{},"面":{"docs":{},"这":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"第":{"docs":{},"二":{"docs":{},"个":{"docs":{},"参":{"docs":{},"数":{"docs":{},"是":{"docs":{},"没":{"docs":{},"有":{"docs":{},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{},",":{"docs":{},"大":{"docs":{},"部":{"docs":{},"分":{"docs":{},"时":{"docs":{},"候":{"docs":{},"都":{"docs":{},"是":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}},"将":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"官":{"docs":{},"方":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}},"文":{"docs":{},"档":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}},"的":{"docs":{},"入":{"docs":{},"门":{"docs":{},"指":{"docs":{},"南":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}},"网":{"docs":{},"站":{"docs":{},"已":{"docs":{},"有":{"docs":{},"系":{"docs":{},"统":{"docs":{},"全":{"docs":{},"面":{"docs":{},"的":{"docs":{},"指":{"docs":{},"导":{"docs":{},"文":{"docs":{},"档":{"docs":{},",":{"docs":{},"新":{"docs":{},"手":{"docs":{},"可":{"docs":{},"以":{"docs":{},"快":{"docs":{},"速":{"docs":{},"通":{"docs":{},"过":{"docs":{},"官":{"docs":{},"方":{"docs":{},"资":{"docs":{},"料":{"docs":{},",":{"docs":{},"轻":{"docs":{},"松":{"docs":{},"上":{"docs":{},"手":{"docs":{},"。":{"docs":{},"此":{"docs":{},"外":{"docs":{},",":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"资":{"docs":{},"料":{"docs":{},",":{"docs":{},"也":{"docs":{},"有":{"docs":{},"百":{"docs":{},"家":{"docs":{},"争":{"docs":{},"鸣":{"docs":{},"之":{"docs":{},"势":{"docs":{},"。":{"docs":{},"有":{"docs":{},"介":{"docs":{},"绍":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"也":{"docs":{},"在":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}},"实":{"docs":{},"践":{"docs":{},"建":{"docs":{},"议":{"docs":{},",":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"我":{"docs":{},"们":{"docs":{},"更":{"docs":{},"好":{"docs":{},"的":{"docs":{},"使":{"docs":{},"用":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}},"现":{"docs":{},"了":{"docs":{},"接":{"docs":{},"口":{"docs":{},";":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}},"多":{"docs":{},"种":{"docs":{},"列":{"docs":{},"表":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"请":{"docs":{},"避":{"docs":{},"免":{"docs":{},"在":{"docs":{},"具":{"docs":{},"体":{"docs":{},"的":{"docs":{},"列":{"docs":{},"表":{"docs":{},"实":{"docs":{},"现":{"docs":{},"中":{"docs":{},"嵌":{"docs":{},"入":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}},"上":{"docs":{},"利":{"docs":{},"用":{"docs":{},"反":{"docs":{},"射":{"docs":{},"来":{"docs":{},"达":{"docs":{},"到":{"docs":{},"范":{"docs":{},"型":{"docs":{},"的":{"docs":{},"效":{"docs":{},"果":{"docs":{},",":{"docs":{},"在":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"进":{"docs":{},"行":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"动":{"docs":{},"态":{"docs":{},"判":{"docs":{},"断":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"带":{"docs":{},"来":{"docs":{},"了":{"docs":{},"一":{"docs":{},"定":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"损":{"docs":{},"耗":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"集":{"docs":{},"合":{"docs":{},"(":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},")":{"2":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},"docs":{}}},"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},"线":{"docs":{},"程":{"docs":{},"安":{"docs":{},"全":{"docs":{},"。":{"docs":{},"果":{"docs":{},"不":{"docs":{},"其":{"docs":{},"然":{"docs":{},",":{"docs":{},"和":{"docs":{},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"猜":{"docs":{},"想":{"docs":{},"一":{"docs":{},"致":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}},"非":{"docs":{},"常":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"。":{"docs":{},"d":{"docs":{},"o":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"际":{"docs":{},"使":{"docs":{},"用":{"docs":{},"时":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"根":{"docs":{},"据":{"docs":{},"不":{"docs":{},"用":{"docs":{},"场":{"docs":{},"景":{"docs":{},"来":{"docs":{},"选":{"docs":{},"择":{"docs":{},"。":{"docs":{},"如":{"docs":{},"不":{"docs":{},"能":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},"使":{"docs":{},"用":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"法":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},"使":{"docs":{},"用":{"docs":{},"移":{"docs":{},"位":{"docs":{},"法":{"docs":{},"中":{"docs":{},"的":{"docs":{},"第":{"docs":{},"一":{"docs":{},"种":{"docs":{},"实":{"docs":{},"现":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"上":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{},"无":{"docs":{},"缓":{"docs":{},"冲":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}},"例":{"docs":{},"时":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"关":{"docs":{},"联":{"docs":{},"一":{"docs":{},"个":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}},"都":{"docs":{},"会":{"docs":{},"关":{"docs":{},"联":{"docs":{},"一":{"docs":{},"个":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"年":{"docs":{},"诞":{"docs":{},"生":{"docs":{},"以":{"docs":{},"来":{"docs":{},",":{"docs":{},"因":{"docs":{},"其":{"docs":{},"出":{"docs":{},"色":{"docs":{},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},"能":{"docs":{},"力":{"docs":{},"和":{"docs":{},"简":{"docs":{},"单":{"docs":{},"易":{"docs":{},"用":{"docs":{},"的":{"docs":{},"低":{"docs":{},"门":{"docs":{},"槛":{"docs":{},",":{"docs":{},"已":{"docs":{},"在":{"docs":{},"各":{"docs":{},"大":{"docs":{},"厂":{"docs":{},"商":{"docs":{},"的":{"docs":{},"后":{"docs":{},"台":{"docs":{},"高":{"docs":{},"并":{"docs":{},"发":{"docs":{},"业":{"docs":{},"务":{"docs":{},"场":{"docs":{},"景":{"docs":{},"崭":{"docs":{},"露":{"docs":{},"头":{"docs":{},"脚":{"docs":{},",":{"docs":{},"甚":{"docs":{},"至":{"docs":{},"有":{"docs":{},"取":{"docs":{},"代":{"docs":{},"传":{"docs":{},"统":{"docs":{},"后":{"docs":{},"台":{"docs":{},"服":{"docs":{},"务":{"docs":{},"开":{"docs":{},"发":{"docs":{},"语":{"docs":{},"言":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"开":{"docs":{},"发":{"docs":{},"经":{"docs":{},"验":{"docs":{},"的":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}},"始":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":3.333333333333333}},",":{"docs":{},"官":{"docs":{},"方":{"docs":{},"推":{"docs":{},"荐":{"docs":{},"使":{"docs":{},"用":{"docs":{},"新":{"docs":{},"的":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"管":{"docs":{},"理":{"docs":{},"系":{"docs":{},"统":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}},"如":{"docs":{},"果":{"docs":{},"需":{"docs":{},"要":{"docs":{},"使":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"值":{"docs":{},"为":{"docs":{},"有":{"docs":{},"意":{"docs":{},"义":{"docs":{},"的":{"docs":{},"值":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"从":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"头":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}},"销":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"严":{"docs":{},"重":{"docs":{},"影":{"docs":{},"响":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}},"。":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"利":{"docs":{},"用":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},"s":{"docs":{},"c":{"docs":{},"h":{"docs":{},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{},"让":{"docs":{},"当":{"docs":{},"前":{"docs":{},"协":{"docs":{},"程":{"docs":{},"主":{"docs":{},"动":{"docs":{},"让":{"docs":{},"出":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"想":{"docs":{},"离":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}},"最":{"docs":{},"佳":{"docs":{},"实":{"docs":{},"践":{"docs":{},"更":{"docs":{},"近":{"docs":{},"一":{"docs":{},"步":{"docs":{},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"看":{"docs":{},"看":{"docs":{},"本":{"docs":{},"书":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}},"性":{"docs":{},"能":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}},"顶":{"docs":{},"层":{"docs":{},"将":{"docs":{},"其":{"docs":{},"捕":{"docs":{},"获":{"docs":{},",":{"docs":{},"在":{"docs":{},"其":{"docs":{},"他":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}},"小":{"docs":{},"化":{"docs":{},"变":{"docs":{},"量":{"docs":{},"作":{"docs":{},"用":{"docs":{},"域":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}}}}}}},"好":{"docs":{},"有":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"本":{"docs":{},"书":{"docs":{},"为":{"docs":{},"开":{"docs":{},"源":{"docs":{},"书":{"docs":{},"籍":{"docs":{},",":{"docs":{},"希":{"docs":{},"望":{"docs":{},"得":{"docs":{},"到":{"docs":{},"大":{"docs":{},"家":{"docs":{},"的":{"docs":{},"协":{"docs":{},"同":{"docs":{},"共":{"docs":{},"建":{"docs":{},",":{"docs":{},"不":{"docs":{},"断":{"docs":{},"迭":{"docs":{},"代":{"docs":{},"丰":{"docs":{},"富":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"你":{"docs":{},"的":{"docs":{},"建":{"docs":{},"议":{"docs":{},"和":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"主":{"docs":{},"要":{"docs":{},"分":{"docs":{},"为":{"docs":{},"四":{"docs":{},"个":{"docs":{},"方":{"docs":{},"面":{"docs":{},":":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}},"所":{"docs":{},"述":{"docs":{},"内":{"docs":{},"容":{"docs":{},"谈":{"docs":{},"不":{"docs":{},"上":{"docs":{},"是":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}},"由":{"docs":{},"来":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}},"内":{"docs":{},"容":{"docs":{},"简":{"docs":{},"介":{"docs":{},"目":{"docs":{},"标":{"docs":{},"读":{"docs":{},"者":{"docs":{},"互":{"docs":{},"动":{"docs":{},"勘":{"docs":{},"误":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}},"文":{"docs":{},"所":{"docs":{},"述":{"docs":{},"内":{"docs":{},"容":{"docs":{},"均":{"docs":{},"为":{"docs":{},"参":{"docs":{},"考":{"docs":{},"意":{"docs":{},"见":{"docs":{},",":{"docs":{},"并":{"docs":{},"非":{"docs":{},"标":{"docs":{},"准":{"docs":{},"。":{"docs":{},"其":{"docs":{},"中":{"docs":{},"许":{"docs":{},"多":{"docs":{},"是":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}},"结":{"docs":{},"合":{"docs":{},"官":{"docs":{},"方":{"docs":{},"编":{"docs":{},"码":{"docs":{},"建":{"docs":{},"议":{"docs":{},",":{"docs":{},"大":{"docs":{},"厂":{"docs":{},"编":{"docs":{},"码":{"docs":{},"规":{"docs":{},"范":{"docs":{},"、":{"docs":{},"开":{"docs":{},"源":{"docs":{},"技":{"docs":{},"术":{"docs":{},"书":{"docs":{},"籍":{"docs":{},"和":{"docs":{},"自":{"docs":{},"身":{"docs":{},"项":{"docs":{},"目":{"docs":{},"经":{"docs":{},"验":{"docs":{},",":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"以":{"docs":{},"简":{"docs":{},"短":{"docs":{},"的":{"docs":{},"语":{"docs":{},"言":{"docs":{},"给":{"docs":{},"出":{"docs":{},"一":{"docs":{},"套":{"docs":{},"行":{"docs":{},"之":{"docs":{},"有":{"docs":{},"效":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"身":{"docs":{},"在":{"docs":{},"代":{"docs":{},"码":{"docs":{},"规":{"docs":{},"范":{"docs":{},"方":{"docs":{},"面":{"docs":{},"做":{"docs":{},"了":{"docs":{},"很":{"docs":{},"多":{"docs":{},"努":{"docs":{},"力":{"docs":{},",":{"docs":{},"很":{"docs":{},"多":{"docs":{},"限":{"docs":{},"制":{"docs":{},"都":{"docs":{},"是":{"docs":{},"语":{"docs":{},"法":{"docs":{},"要":{"docs":{},"求":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{},"左":{"docs":{},"大":{"docs":{},"括":{"docs":{},"号":{"docs":{},"不":{"docs":{},"换":{"docs":{},"行":{"docs":{},",":{"docs":{},"引":{"docs":{},"用":{"docs":{},"的":{"docs":{},"包":{"docs":{},"或":{"docs":{},"者":{"docs":{},"定":{"docs":{},"义":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{},"不":{"docs":{},"使":{"docs":{},"用":{"docs":{},"会":{"docs":{},"报":{"docs":{},"错":{"docs":{},"。":{"docs":{},"此":{"docs":{},"外":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"源":{"docs":{},"码":{"2":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}}},"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"应":{"docs":{},"该":{"docs":{},"是":{"docs":{},"你":{"docs":{},"的":{"docs":{},"首":{"docs":{},"选":{"docs":{},",":{"docs":{},"再":{"docs":{},"结":{"docs":{},"合":{"docs":{},"精":{"docs":{},"彩":{"docs":{},"的":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"分":{"docs":{},"析":{"docs":{},",":{"docs":{},"如":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}},"进":{"docs":{},"行":{"docs":{},"剖":{"docs":{},"析":{"docs":{},"介":{"docs":{},"绍":{"docs":{},"实":{"docs":{},"现":{"docs":{},"原":{"docs":{},"理":{"docs":{},"的":{"docs":{},",":{"docs":{},"有":{"docs":{},"介":{"docs":{},"绍":{"docs":{},"高":{"docs":{},"并":{"docs":{},"发":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},"实":{"docs":{},"战":{"docs":{},"指":{"docs":{},"导":{"docs":{},"的":{"docs":{},",":{"docs":{},"也":{"docs":{},"有":{"docs":{},"介":{"docs":{},"绍":{"docs":{},"使":{"docs":{},"用":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"目":{"docs":{},"录":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"文":{"docs":{},"件":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}},"的":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.007104795737122558}},"共":{"docs":{},"同":{"docs":{},"追":{"docs":{},"求":{"docs":{},"。":{"docs":{},"为":{"docs":{},"书":{"docs":{},"写":{"docs":{},"效":{"docs":{},"率":{"docs":{},"更":{"docs":{},"高":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"本":{"docs":{},"文":{"docs":{},"将":{"docs":{},"结":{"docs":{},"合":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}},"本":{"docs":{},"篇":{"docs":{},"将":{"docs":{},"结":{"docs":{},"合":{"docs":{"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456}}}}}}}}}}}},"初":{"docs":{},"学":{"docs":{},"者":{"docs":{},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"先":{"docs":{},"略":{"docs":{},"过":{"docs":{},"本":{"docs":{},"书":{"docs":{},",":{"docs":{},"了":{"docs":{},"解":{"docs":{},"下":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}},"最":{"docs":{},"佳":{"docs":{},"实":{"docs":{},"践":{"docs":{},"更":{"docs":{},"近":{"docs":{},"一":{"docs":{},"步":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}},",":{"docs":{},"但":{"docs":{},"希":{"docs":{},"望":{"docs":{},"能":{"docs":{},"够":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"广":{"docs":{},"大":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}},"通":{"docs":{},"用":{"docs":{},"准":{"docs":{},"则":{"docs":{},",":{"docs":{},"其":{"docs":{},"他":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"内":{"docs":{},"容":{"docs":{},"也":{"docs":{},"参":{"docs":{},"考":{"docs":{},"了":{"docs":{},"很":{"docs":{},"多":{"docs":{},"官":{"docs":{},"方":{"docs":{},"指":{"docs":{},"南":{"docs":{},",":{"docs":{},"包":{"docs":{},"括":{"docs":{},"但":{"docs":{},"不":{"docs":{},"限":{"docs":{},"于":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"子":{"docs":{},"目":{"docs":{},"录":{"docs":{},"都":{"docs":{},"不":{"docs":{},"能":{"docs":{},"被":{"docs":{},"导":{"docs":{},"出":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}},"逻":{"docs":{},"辑":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}},",":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},",":{"docs":{},"尽":{"docs":{},"管":{"docs":{},"它":{"docs":{},"不":{"docs":{},"是":{"docs":{},"。":{"docs":{},"除":{"docs":{},"了":{"docs":{},"这":{"docs":{},"一":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}},"包":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}},"切":{"docs":{},"片":{"docs":{},"(":{"docs":{},"一":{"docs":{},"个":{"docs":{},"为":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"。":{"docs":{},"从":{"docs":{},"最":{"docs":{},"终":{"docs":{},"的":{"docs":{},"结":{"docs":{},"果":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"到":{"docs":{},",":{"docs":{},"遍":{"docs":{},"历":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}},"进":{"docs":{},"行":{"docs":{},"测":{"docs":{},"试":{"docs":{},",":{"docs":{},"来":{"docs":{},"上":{"docs":{},"下":{"docs":{},"上":{"docs":{},"面":{"docs":{},"四":{"docs":{},"种":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}},"非":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"异":{"docs":{},"常":{"docs":{},",":{"docs":{},"禁":{"docs":{},"止":{"docs":{},"滥":{"docs":{},"用":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}},"名":{"docs":{},"字":{"docs":{},"和":{"docs":{},"目":{"docs":{},"录":{"docs":{},"一":{"docs":{},"致":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"两":{"docs":{},"个":{"docs":{},"分":{"docs":{},"支":{"docs":{},"中":{"docs":{},"都":{"docs":{},"设":{"docs":{},"置":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"则":{"docs":{},"可":{"docs":{},"以":{"docs":{},"将":{"docs":{},"其":{"docs":{},"替":{"docs":{},"换":{"docs":{},"为":{"docs":{},"单":{"docs":{},"个":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}},"基":{"docs":{},"础":{"docs":{},"上":{"docs":{},"增":{"docs":{},"加":{"docs":{},"了":{"docs":{},"自":{"docs":{},"动":{"docs":{},"删":{"docs":{},"除":{"docs":{},"和":{"docs":{},"引":{"docs":{},"入":{"docs":{},"包":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}},"工":{"docs":{},"具":{"docs":{},",":{"docs":{},"主":{"docs":{},"要":{"docs":{},"功":{"docs":{},"能":{"docs":{},"就":{"docs":{},"是":{"docs":{},"检":{"docs":{},"测":{"docs":{},"代":{"docs":{},"码":{"docs":{},"中":{"docs":{},"不":{"docs":{},"规":{"docs":{},"范":{"docs":{},"的":{"docs":{},"地":{"docs":{},"方":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}},"结":{"docs":{},"果":{"docs":{},"为":{"docs":{},"准":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}},"退":{"docs":{},"出":{"docs":{},"机":{"docs":{},"制":{"docs":{},",":{"docs":{},"防":{"docs":{},"止":{"docs":{},"泄":{"docs":{},"漏":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}},"底":{"docs":{},"层":{"docs":{},"结":{"docs":{},"构":{"docs":{},"后":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"知":{"docs":{},"道":{"docs":{},"在":{"docs":{},"传":{"docs":{},"递":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},"一":{"docs":{},"般":{"docs":{},"也":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"指":{"docs":{},"向":{"docs":{},"它":{"docs":{},"们":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"数":{"docs":{},"组":{"docs":{},"。":{"docs":{},"这":{"docs":{},"样":{"docs":{},"也":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"额":{"docs":{},"外":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"空":{"docs":{},"间":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"在":{"docs":{},"原":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}}}},"指":{"docs":{},"针":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":3.333333333333333}},"基":{"docs":{},"本":{"docs":{},"是":{"docs":{},"不":{"docs":{},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{},"。":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}}}}},"修":{"docs":{},"改":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"操":{"docs":{},"作":{"docs":{},"。":{"docs":{},"在":{"docs":{},"执":{"docs":{},"行":{"docs":{},"任":{"docs":{},"务":{"docs":{},"函":{"docs":{},"数":{"docs":{},"前":{"docs":{},",":{"docs":{},"对":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}},"开":{"docs":{},"销":{"docs":{},"非":{"docs":{},"常":{"docs":{},"小":{"docs":{},",":{"docs":{},"只":{"docs":{},"有":{"docs":{},"在":{"docs":{},"您":{"docs":{},"可":{"docs":{},"以":{"docs":{},"证":{"docs":{},"明":{"docs":{},"函":{"docs":{},"数":{"docs":{},"执":{"docs":{},"行":{"docs":{},"时":{"docs":{},"间":{"docs":{},"处":{"docs":{},"于":{"docs":{},"纳":{"docs":{},"秒":{"docs":{},"级":{"docs":{},"的":{"docs":{},"程":{"docs":{},"度":{"docs":{},"时":{"docs":{},",":{"docs":{},"才":{"docs":{},"应":{"docs":{},"避":{"docs":{},"免":{"docs":{},"这":{"docs":{},"样":{"docs":{},"做":{"docs":{},"。":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{},"虽":{"docs":{},"然":{"docs":{},"官":{"docs":{},"方":{"docs":{},"宣":{"docs":{},"称":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}},"主":{"docs":{},"要":{"docs":{},"是":{"docs":{},"三":{"docs":{},"个":{"docs":{},"方":{"docs":{},"面":{"docs":{},":":{"docs":{},"创":{"docs":{},"建":{"docs":{},"(":{"docs":{},"占":{"docs":{},"用":{"docs":{},"内":{"docs":{},"存":{"docs":{},")":{"docs":{},"、":{"docs":{},"调":{"docs":{},"度":{"docs":{},"(":{"docs":{},"增":{"docs":{},"加":{"docs":{},"调":{"docs":{},"度":{"docs":{},"器":{"docs":{},"负":{"docs":{},"担":{"docs":{},")":{"docs":{},"和":{"docs":{},"删":{"docs":{},"除":{"docs":{},"(":{"docs":{},"增":{"docs":{},"加":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},"细":{"docs":{},"节":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{},"o":{"docs":{},"d":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}},",":{"docs":{},"对":{"docs":{},"其":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"不":{"docs":{},"可":{"docs":{},"见":{"docs":{},"。":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}}}},"被":{"docs":{},"到":{"docs":{},"处":{"docs":{},"泄":{"docs":{},"露":{"docs":{},"了":{"docs":{},";":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}},"是":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}},",":{"docs":{},"通":{"docs":{},"常":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},"二":{"docs":{},"进":{"docs":{},"制":{"docs":{},"表":{"docs":{},"示":{"docs":{},"形":{"docs":{},"式":{"docs":{},"写":{"docs":{},"入":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}},"编":{"docs":{},"码":{"docs":{},"和":{"docs":{},"解":{"docs":{},"码":{"docs":{},"。":{"docs":{},"v":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}},"大":{"docs":{},"小":{"docs":{},",":{"docs":{},"这":{"docs":{},"将":{"docs":{},"减":{"docs":{},"少":{"docs":{},"在":{"docs":{},"将":{"docs":{},"元":{"docs":{},"素":{"docs":{},"添":{"docs":{},"加":{"docs":{},"到":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}},"为":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}}},"容":{"docs":{},"量":{"docs":{},"分":{"docs":{},"配":{"docs":{},"足":{"docs":{},"够":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},",":{"docs":{},"这":{"docs":{},"意":{"docs":{},"味":{"docs":{},"着":{"docs":{},"后":{"docs":{},"续":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}}}},"数":{"docs":{},"量":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}},"长":{"docs":{},"度":{"docs":{},"与":{"docs":{},"容":{"docs":{},"量":{"docs":{},"匹":{"docs":{},"配":{"docs":{},",":{"docs":{},"在":{"docs":{},"此":{"docs":{},"之":{"docs":{},"后":{"docs":{},",":{"docs":{},"任":{"docs":{},"何":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}},"性":{"docs":{},"能":{"docs":{},"相":{"docs":{},"近":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"结":{"docs":{},"果":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"的":{"docs":{},"长":{"docs":{},"度":{"docs":{},"是":{"docs":{},"可":{"docs":{},"预":{"docs":{},"知":{"docs":{},"的":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}},"几":{"docs":{},"乎":{"docs":{},"一":{"docs":{},"样":{"docs":{},",":{"docs":{},"如":{"docs":{},"基":{"docs":{},"本":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}},"是":{"docs":{},"一":{"docs":{},"样":{"docs":{},"的":{"docs":{},"。":{"docs":{},"而":{"docs":{},"且":{"docs":{},"使":{"docs":{},"用":{"docs":{},"指":{"docs":{},"针":{"docs":{},"还":{"docs":{},"有":{"docs":{},"另":{"docs":{},"一":{"docs":{},"个":{"docs":{},"好":{"docs":{},"处":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"直":{"docs":{},"接":{"docs":{},"修":{"docs":{},"改":{"docs":{},"指":{"docs":{},"针":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"的":{"docs":{},"值":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"将":{"docs":{},"显":{"docs":{},"著":{"docs":{},"地":{"docs":{},"高":{"docs":{},"于":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}},"差":{"docs":{},"别":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}},"遍":{"docs":{},"历":{"docs":{},"方":{"docs":{},"式":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":5}}}}}},"位":{"docs":{},"置":{"docs":{},"就":{"docs":{},"是":{"docs":{},"所":{"docs":{},"有":{"docs":{},"有":{"docs":{},"效":{"docs":{},"元":{"docs":{},"素":{"docs":{},"的":{"docs":{},"下":{"docs":{},"一":{"docs":{},"个":{"docs":{},"位":{"docs":{},"置":{"docs":{},",":{"docs":{},"最":{"docs":{},"后":{"docs":{},"做":{"docs":{},"一":{"docs":{},"个":{"docs":{},"截":{"docs":{},"取":{"docs":{},"就":{"docs":{},"行":{"docs":{},"了":{"docs":{},"。":{"docs":{},"这":{"docs":{},"种":{"docs":{},"方":{"docs":{},"法":{"docs":{},"会":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"来":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"截":{"docs":{},"取":{"docs":{},"删":{"docs":{},"除":{"docs":{},"指":{"docs":{},"定":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{},"注":{"docs":{},"意":{"docs":{},"删":{"docs":{},"除":{"docs":{},"时":{"docs":{},",":{"docs":{},"后":{"docs":{},"面":{"docs":{},"的":{"docs":{},"元":{"docs":{},"素":{"docs":{},"会":{"docs":{},"前":{"docs":{},"移":{"docs":{},",":{"docs":{},"下":{"docs":{},"标":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}}}}}},"空":{"docs":{},"间":{"docs":{},",":{"docs":{},"优":{"docs":{},"点":{"docs":{},"是":{"docs":{},"容":{"docs":{},"易":{"docs":{},"理":{"docs":{},"解":{"docs":{},",":{"docs":{},"而":{"docs":{},"且":{"docs":{},"不":{"docs":{},"会":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}},"那":{"docs":{},"么":{"docs":{},"假":{"docs":{},"设":{"docs":{},"计":{"docs":{},"算":{"docs":{},"机":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"是":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}},"。":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}},"完":{"docs":{},"整":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"如":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"(":{"docs":{},"通":{"docs":{},"过":{"docs":{},"切":{"docs":{},"片":{"docs":{},"构":{"docs":{},"建":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}}},"键":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"值":{"docs":{},"。":{"docs":{},"即":{"docs":{},"使":{"docs":{},"是":{"docs":{},"将":{"docs":{},"值":{"docs":{},"设":{"docs":{},"置":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}},"倍":{"docs":{},"数":{"docs":{},",":{"docs":{},"从":{"docs":{},"第":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}}}}},"内":{"docs":{},"存":{"docs":{},"占":{"docs":{},"用":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}}},",":{"docs":{},"在":{"docs":{},"源":{"docs":{},"码":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}},"字":{"docs":{},"段":{"docs":{},"时":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"。":{"docs":{},"但":{"docs":{},"是":{"docs":{},"有":{"docs":{},"一":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"除":{"docs":{},"外":{"docs":{},":":{"docs":{},"即":{"docs":{},"当":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}},"对":{"docs":{},"齐":{"docs":{},"系":{"docs":{},"数":{"docs":{},"决":{"docs":{},"定":{"docs":{},",":{"docs":{},"也":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"由":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"使":{"docs":{},"用":{"docs":{},"方":{"docs":{},"式":{"docs":{},"非":{"docs":{},"常":{"docs":{},"简":{"docs":{},"单":{"docs":{},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"实":{"docs":{},"现":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}},"压":{"docs":{},"力":{"docs":{},",":{"docs":{},"提":{"docs":{},"升":{"docs":{},"系":{"docs":{},"统":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"定":{"docs":{},"义":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"毛":{"docs":{},"刺":{"docs":{},",":{"docs":{},"而":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"并":{"docs":{},"发":{"docs":{},"读":{"docs":{},"写":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}},"操":{"docs":{},"作":{"docs":{},"个":{"docs":{},"数":{"docs":{},"超":{"docs":{},"过":{"docs":{},"了":{"docs":{},"系":{"docs":{},"统":{"docs":{},"上":{"docs":{},"限":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"报":{"docs":{},"错":{"docs":{},"是":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"保":{"docs":{},"证":{"docs":{},"并":{"docs":{},"发":{"docs":{},"安":{"docs":{},"全":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"它":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"也":{"docs":{},"能":{"docs":{},"做":{"docs":{},"到":{"docs":{},"随":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}},"操":{"docs":{},"作":{"docs":{},"耗":{"docs":{},"时":{"docs":{},"很":{"docs":{},"短":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"每":{"docs":{},"次":{"docs":{},"睡":{"docs":{},"眠":{"docs":{},"一":{"docs":{},"微":{"docs":{},"秒":{"docs":{},"(":{"docs":{},"百":{"docs":{},"万":{"docs":{},"分":{"docs":{},"之":{"docs":{},"一":{"docs":{},"秒":{"docs":{},")":{"docs":{},"来":{"docs":{},"增":{"docs":{},"加":{"docs":{},"耗":{"docs":{},"时":{"docs":{},",":{"docs":{},"不":{"docs":{},"然":{"docs":{},"对":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"访":{"docs":{},"问":{"docs":{},"耗":{"docs":{},"时":{"docs":{},",":{"docs":{},"小":{"docs":{},"于":{"docs":{},"锁":{"docs":{},"处":{"docs":{},"理":{"docs":{},"的":{"docs":{},"本":{"docs":{},"身":{"docs":{},"耗":{"docs":{},"时":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"使":{"docs":{},"用":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"带":{"docs":{},"来":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"优":{"docs":{},"化":{"docs":{},"效":{"docs":{},"果":{"docs":{},"将":{"docs":{},"变":{"docs":{},"得":{"docs":{},"不":{"docs":{},"那":{"docs":{},"么":{"docs":{},"明":{"docs":{},"显":{"docs":{},",":{"docs":{},"甚":{"docs":{},"至":{"docs":{},"会":{"docs":{},"降":{"docs":{},"低":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"缓":{"docs":{},"冲":{"docs":{},"区":{"docs":{},"大":{"docs":{},"小":{"docs":{},"来":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}},"调":{"docs":{},"度":{"docs":{},"管":{"docs":{},"理":{"docs":{},"和":{"docs":{},"复":{"docs":{},"用":{"docs":{},",":{"docs":{},"允":{"docs":{},"许":{"docs":{},"使":{"docs":{},"用":{"docs":{},"者":{"docs":{},"在":{"docs":{},"开":{"docs":{},"发":{"docs":{},"并":{"docs":{},"发":{"docs":{},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"限":{"docs":{},"制":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}},"判":{"docs":{},"断":{"docs":{},",":{"docs":{},"来":{"docs":{},"决":{"docs":{},"定":{"docs":{},"是":{"docs":{},"否":{"docs":{},"执":{"docs":{},"行":{"docs":{},"传":{"docs":{},"入":{"docs":{},"的":{"docs":{},"任":{"docs":{},"务":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{},"执":{"docs":{},"行":{"docs":{},"任":{"docs":{},"务":{"docs":{},"函":{"docs":{},"数":{"docs":{},"前":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"锁":{"docs":{},"保":{"docs":{},"证":{"docs":{},"任":{"docs":{},"务":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"执":{"docs":{},"行":{"docs":{},"和":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"区":{"docs":{},"别":{"docs":{},"?":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"四":{"docs":{},"个":{"docs":{},"成":{"docs":{},"员":{"docs":{},"函":{"docs":{},"数":{"docs":{},"定":{"docs":{},"义":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}},"存":{"docs":{},"在":{"docs":{},"还":{"docs":{},"有":{"docs":{},"必":{"docs":{},"要":{"docs":{},"吗":{"docs":{},"?":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"打":{"docs":{},"印":{"docs":{},"顺":{"docs":{},"序":{"docs":{},"是":{"docs":{},"随":{"docs":{},"机":{"docs":{},"的":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}}}}}}},"讨":{"docs":{},"论":{"docs":{},"可":{"docs":{},"参":{"docs":{},"考":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"原":{"docs":{},"理":{"docs":{},"与":{"docs":{},"使":{"docs":{},"用":{"docs":{},"场":{"docs":{},"景":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}},"目":{"docs":{},"标":{"docs":{},"读":{"docs":{},"者":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}},"录":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}},"下":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.011834319526627219}}},",":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"具":{"docs":{},"体":{"docs":{},"业":{"docs":{},"务":{"docs":{},"目":{"docs":{},"录":{"docs":{},"下":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}},"内":{"docs":{},"部":{"docs":{},"增":{"docs":{},"加":{"docs":{},"一":{"docs":{},"些":{"docs":{},"代":{"docs":{},"码":{"docs":{},"结":{"docs":{},"构":{"docs":{},"来":{"docs":{},"区":{"docs":{},"分":{"docs":{},"共":{"docs":{},"享":{"docs":{},"和":{"docs":{},"非":{"docs":{},"共":{"docs":{},"享":{"docs":{},"的":{"docs":{},"。":{"docs":{},"虽":{"docs":{},"然":{"docs":{},"它":{"docs":{},"并":{"docs":{},"不":{"docs":{},"是":{"docs":{},"必":{"docs":{},"须":{"docs":{},"的":{"docs":{},"(":{"docs":{},"尤":{"docs":{},"其":{"docs":{},"是":{"docs":{},"小":{"docs":{},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},")":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"最":{"docs":{},"好":{"docs":{},"能":{"docs":{},"从":{"docs":{},"视":{"docs":{},"觉":{"docs":{},"上":{"docs":{},"区":{"docs":{},"分":{"docs":{},"包":{"docs":{},"的":{"docs":{},"用":{"docs":{},"途":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},"结":{"docs":{},"构":{"docs":{},"是":{"docs":{},"一":{"docs":{},"种":{"docs":{},"常":{"docs":{},"见":{"docs":{},"的":{"docs":{},"布":{"docs":{},"局":{"docs":{},"模":{"docs":{},"式":{"docs":{},",":{"docs":{},"但":{"docs":{},"并":{"docs":{},"不":{"docs":{},"是":{"docs":{},"所":{"docs":{},"有":{"docs":{},"人":{"docs":{},"都":{"docs":{},"接":{"docs":{},"受":{"docs":{},"它":{"docs":{},",":{"docs":{},"一":{"docs":{},"些":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"但":{"docs":{},"这":{"docs":{},"通":{"docs":{},"常":{"docs":{},"发":{"docs":{},"生":{"docs":{},"在":{"docs":{},"开":{"docs":{},"发":{"docs":{},"人":{"docs":{},"员":{"docs":{},"有":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}},"编":{"docs":{},"码":{"docs":{},"建":{"docs":{},"议":{"docs":{},"的":{"docs":{},"。":{"docs":{},"至":{"docs":{},"此":{"docs":{},",":{"docs":{},"本":{"docs":{},"书":{"docs":{},"应":{"docs":{},"运":{"docs":{},"而":{"docs":{},"生":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}},",":{"docs":{},"让":{"docs":{},"您":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"高":{"docs":{},"效":{"docs":{},"易":{"docs":{},"读":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}},"规":{"docs":{},"范":{"docs":{},",":{"docs":{},"但":{"docs":{},"大":{"docs":{},"同":{"docs":{},"小":{"docs":{},"异":{"docs":{},"。":{"docs":{},"规":{"docs":{},"范":{"docs":{},"是":{"docs":{},"一":{"docs":{},"种":{"docs":{},"倡":{"docs":{},"导":{"docs":{},",":{"docs":{},"不":{"docs":{},"遵":{"docs":{},"守":{"docs":{},"并":{"docs":{},"不":{"docs":{},"代":{"docs":{},"表":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"但":{"docs":{},"当":{"docs":{},"大":{"docs":{},"家":{"docs":{},"都":{"docs":{},"遵":{"docs":{},"守":{"docs":{},"规":{"docs":{},"范":{"docs":{},"时":{"docs":{},",":{"docs":{},"你":{"docs":{},"会":{"docs":{},"发":{"docs":{},"现":{"docs":{},",":{"docs":{},"整":{"docs":{},"个":{"docs":{},"世":{"docs":{},"界":{"docs":{},"将":{"docs":{},"变":{"docs":{},"得":{"docs":{},"整":{"docs":{},"洁":{"docs":{},"有":{"docs":{},"序":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"风":{"docs":{},"格":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}},"从":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"易":{"docs":{},"读":{"docs":{},"的":{"docs":{},"角":{"docs":{},"度":{"docs":{},"出":{"docs":{},"发":{"docs":{},",":{"docs":{},"参":{"docs":{},"考":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}},"为":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}},"译":{"docs":{},"不":{"docs":{},"通":{"docs":{},"过":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"无":{"docs":{},"法":{"docs":{},"对":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}},"器":{"docs":{},"一":{"docs":{},"般":{"docs":{},"为":{"docs":{},"了":{"docs":{},"减":{"docs":{},"少":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}},"对":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"分":{"docs":{},"析":{"docs":{},"决":{"docs":{},"策":{"docs":{},"远":{"docs":{},"比":{"docs":{},"我":{"docs":{},"们":{"docs":{},"想":{"docs":{},"像":{"docs":{},"的":{"docs":{},"要":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"。":{"docs":{},"我":{"docs":{},"们":{"docs":{},"只":{"docs":{},"能":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"地":{"docs":{},"去":{"docs":{},"勾":{"docs":{},"勒":{"docs":{},"而":{"docs":{},"无":{"docs":{},"以":{"docs":{},"绘":{"docs":{},"其":{"docs":{},"全":{"docs":{},"貌":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"而":{"docs":{},"言":{"docs":{},",":{"docs":{},"超":{"docs":{},"过":{"docs":{},"一":{"docs":{},"定":{"docs":{},"大":{"docs":{},"小":{"docs":{},"的":{"docs":{},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{},"将":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"到":{"docs":{},"堆":{"docs":{},"上":{"docs":{},",":{"docs":{},"不":{"docs":{},"同":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}},"时":{"docs":{},"可":{"docs":{},"以":{"docs":{},"借":{"docs":{},"助":{"docs":{},"选":{"docs":{},"项":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}},"后":{"docs":{},"的":{"docs":{},"机":{"docs":{},"器":{"docs":{},"码":{"docs":{},"指":{"docs":{},"令":{"docs":{},"更":{"docs":{},"少":{"docs":{},",":{"docs":{},"更":{"docs":{},"直":{"docs":{},"接":{"docs":{},",":{"docs":{},"必":{"docs":{},"然":{"docs":{},"是":{"docs":{},"能":{"docs":{},"够":{"docs":{},"提":{"docs":{},"升":{"docs":{},"性":{"docs":{},"能":{"docs":{},"的":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"虽":{"docs":{},"然":{"docs":{},"简":{"docs":{},"单":{"docs":{},",":{"docs":{},"但":{"docs":{},"其":{"docs":{},"功":{"docs":{},"能":{"docs":{},"特":{"docs":{},"性":{"docs":{},"却":{"docs":{},"不":{"docs":{},"单":{"docs":{},"一":{"docs":{},"。":{"docs":{},"其":{"docs":{},"丰":{"docs":{},"富":{"docs":{},"的":{"docs":{},"语":{"docs":{},"言":{"docs":{},"特":{"docs":{},"性":{"docs":{},",":{"docs":{},"在":{"docs":{},"使":{"docs":{},"用":{"docs":{},"时":{"docs":{},"还":{"docs":{},"是":{"docs":{},"有":{"docs":{},"很":{"docs":{},"多":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"姿":{"docs":{},"势":{"docs":{},"。":{"docs":{},"本":{"docs":{},"书":{"docs":{},"从":{"docs":{},"功":{"docs":{},"能":{"docs":{},"特":{"docs":{},"性":{"docs":{},"出":{"docs":{},"发":{"docs":{},",":{"docs":{},"给":{"docs":{},"出":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"默":{"docs":{},"认":{"docs":{},"为":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},"这":{"docs":{},"些":{"docs":{},"使":{"docs":{},"用":{"docs":{},"内":{"docs":{},"置":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{},"的":{"docs":{},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"字":{"docs":{},"段":{"docs":{},"可":{"docs":{},"以":{"docs":{},"编":{"docs":{},"译":{"docs":{},"通":{"docs":{},"过":{"docs":{},",":{"docs":{},"但":{"docs":{},"对":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}},"轻":{"docs":{},"量":{"docs":{},",":{"docs":{},"但":{"docs":{},"天":{"docs":{},"下":{"docs":{},"没":{"docs":{},"有":{"docs":{},"免":{"docs":{},"费":{"docs":{},"的":{"docs":{},"午":{"docs":{},"餐":{"docs":{},",":{"docs":{},"无":{"docs":{},"休":{"docs":{},"止":{"docs":{},"地":{"docs":{},"开":{"docs":{},"辟":{"docs":{},"大":{"docs":{},"量":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}},"语":{"docs":{},"法":{"docs":{},"知":{"docs":{},"识":{"docs":{},"和":{"docs":{},"语":{"docs":{},"言":{"docs":{},"特":{"docs":{},"性":{"docs":{},"与":{"docs":{},",":{"docs":{},"也":{"docs":{},"建":{"docs":{},"议":{"docs":{},"先":{"docs":{},"略":{"docs":{},"过":{"docs":{},"本":{"docs":{},"书":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}},"言":{"docs":{},"圣":{"docs":{},"经":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}},"基":{"docs":{},"础":{"docs":{},"和":{"docs":{},"实":{"docs":{},"战":{"docs":{},"的":{"docs":{},",":{"docs":{},"有":{"docs":{},"对":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},"原":{"docs":{},"理":{"docs":{},",":{"docs":{},"还":{"docs":{},"是":{"docs":{},"建":{"docs":{},"议":{"docs":{},"先":{"docs":{},"略":{"docs":{},"过":{"docs":{},"本":{"docs":{},"书":{"docs":{},"。":{"docs":{},"虽":{"docs":{},"然":{"docs":{},"本":{"docs":{},"书":{"docs":{},"略":{"docs":{},"有":{"docs":{},"涉":{"docs":{},"及":{"docs":{},",":{"docs":{},"但":{"docs":{},"不":{"docs":{},"够":{"docs":{},"全":{"docs":{},"面":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"特":{"docs":{},"性":{"docs":{},",":{"docs":{},"从":{"docs":{},"常":{"docs":{},"用":{"docs":{},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"docs":{},"、":{"docs":{},"内":{"docs":{},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{},"和":{"docs":{},"并":{"docs":{},"发":{"docs":{},",":{"docs":{},"三":{"docs":{},"个":{"docs":{},"方":{"docs":{},"面":{"docs":{},"给":{"docs":{},"出":{"docs":{},"相":{"docs":{},"关":{"docs":{},"建":{"docs":{},"议":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"为":{"docs":{},"书":{"docs":{},"写":{"docs":{},"高":{"docs":{},"效":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"力":{"docs":{},"争":{"docs":{},"从":{"docs":{},"常":{"docs":{},"用":{"docs":{},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"docs":{},"、":{"docs":{},"内":{"docs":{},"存":{"docs":{},"管":{"docs":{},"理":{"docs":{},"和":{"docs":{},"并":{"docs":{},"发":{"docs":{},"编":{"docs":{},"程":{"docs":{},"三":{"docs":{},"个":{"docs":{},"方":{"docs":{},"面":{"docs":{},"给":{"docs":{},"出":{"docs":{},"相":{"docs":{},"关":{"docs":{},"建":{"docs":{},"议":{"docs":{},"。":{"docs":{},"话":{"docs":{},"不":{"docs":{},"多":{"docs":{},"说":{"docs":{},",":{"docs":{},"让":{"docs":{},"我":{"docs":{},"们":{"docs":{},"一":{"docs":{},"起":{"docs":{},"学":{"docs":{},"习":{"docs":{"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"自":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}},"设":{"docs":{},"计":{"docs":{},"与":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"会":{"docs":{},"大":{"docs":{},"有":{"docs":{},"收":{"docs":{},"获":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}},"规":{"docs":{},"范":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"提":{"docs":{},"供":{"docs":{},"了":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"动":{"docs":{},"态":{"docs":{},"获":{"docs":{},"取":{"docs":{},"对":{"docs":{},"象":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"和":{"docs":{},"值":{"docs":{},"以":{"docs":{},"及":{"docs":{},"动":{"docs":{},"态":{"docs":{},"创":{"docs":{},"建":{"docs":{},"对":{"docs":{},"象":{"docs":{},"的":{"docs":{},"能":{"docs":{},"力":{"docs":{},"。":{"docs":{},"反":{"docs":{},"射":{"docs":{},"可":{"docs":{},"以":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"抽":{"docs":{},"象":{"docs":{},"和":{"docs":{},"简":{"docs":{},"化":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"提":{"docs":{},"高":{"docs":{},"开":{"docs":{},"发":{"docs":{},"效":{"docs":{},"率":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{},"以":{"docs":{},"及":{"docs":{},"很":{"docs":{},"多":{"docs":{},"开":{"docs":{},"源":{"docs":{},"软":{"docs":{},"件":{"docs":{},"中":{"docs":{},"都":{"docs":{},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}},"没":{"docs":{},"有":{"docs":{},"提":{"docs":{},"供":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},"的":{"docs":{},"反":{"docs":{},"射":{"docs":{},"能":{"docs":{},"力":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{},"用":{"docs":{},"于":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},"和":{"docs":{},"反":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"之":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}},"高":{"docs":{},"性":{"docs":{},"能":{"docs":{},"编":{"docs":{},"程":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}},"句":{"docs":{},"前":{"docs":{},"不":{"docs":{},"要":{"docs":{},"换":{"docs":{},"行":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}},"之":{"docs":{},"后":{"docs":{},"(":{"docs":{},"所":{"docs":{},"有":{"docs":{},"迭":{"docs":{},"代":{"docs":{},"之":{"docs":{},"后":{"docs":{},")":{"docs":{},",":{"docs":{},"即":{"docs":{},"所":{"docs":{},"在":{"docs":{},"函":{"docs":{},"数":{"docs":{},"结":{"docs":{},"束":{"docs":{},"时":{"docs":{},",":{"docs":{},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}}}}}}}}}}}}}}}}},"来":{"docs":{},"保":{"docs":{},"证":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"一":{"docs":{},"定":{"docs":{},"会":{"docs":{},"被":{"docs":{},"解":{"docs":{},"锁":{"docs":{},"。":{"docs":{},"在":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}},"进":{"docs":{},"行":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"高":{"docs":{},"性":{"docs":{},"能":{"docs":{},"编":{"docs":{},"程":{"docs":{},"的":{"docs":{},",":{"docs":{},"等":{"docs":{},"等":{"docs":{},"。":{"docs":{},"很":{"docs":{},"遗":{"docs":{},"憾":{"docs":{},"的":{"docs":{},"是":{"docs":{},",":{"docs":{},"没":{"docs":{},"有":{"docs":{},"发":{"docs":{},"现":{"docs":{},"一":{"docs":{},"个":{"docs":{},"系":{"docs":{},"统":{"docs":{},"介":{"docs":{},"绍":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}},"自":{"docs":{},"动":{"docs":{},"化":{"docs":{},"管":{"docs":{},"理":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"或":{"docs":{},"使":{"docs":{},"用":{"docs":{},"空":{"docs":{},"白":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{},"忽":{"docs":{},"略":{"docs":{},"。":{"docs":{},"对":{"docs":{},"于":{"docs":{},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}},"匹":{"docs":{},"配":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"那":{"docs":{},"么":{"docs":{},"到":{"docs":{},"底":{"docs":{},"是":{"docs":{},"谁":{"docs":{},"适":{"docs":{},"合":{"docs":{},"阅":{"docs":{},"读":{"docs":{},"本":{"docs":{},"书":{"docs":{},"呢":{"docs":{},"?":{"docs":{},"如":{"docs":{},"果":{"docs":{},"你":{"docs":{},"是":{"docs":{},"一":{"docs":{},"位":{"docs":{},"有":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}},"对":{"docs":{},"于":{"docs":{},"稍":{"docs":{},"微":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"一":{"docs":{},"点":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}},"多":{"docs":{},"大":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{},"才":{"docs":{},"算":{"docs":{},"是":{"docs":{},"小":{"docs":{},"变":{"docs":{},"量":{"docs":{},"呢":{"docs":{},"?":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}},"如":{"docs":{},"果":{"docs":{},"我":{"docs":{},"们":{"docs":{},"将":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}},"项":{"docs":{},"目":{"docs":{},"布":{"docs":{},"局":{"docs":{"./":{"ref":"./","tf":0.006666666666666667},"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":10}},"参":{"docs":{},"考":{"docs":{},"业":{"docs":{},"界":{"docs":{},"认":{"docs":{},"可":{"docs":{},"度":{"docs":{},"较":{"docs":{},"高":{"docs":{},"的":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}},"代":{"docs":{},"码":{"docs":{},"风":{"docs":{},"格":{"docs":{},"功":{"docs":{},"能":{"docs":{},"设":{"docs":{},"计":{"docs":{},"最":{"docs":{},"佳":{"docs":{},"性":{"docs":{},"能":{"docs":{},"项":{"docs":{},"目":{"docs":{},"布":{"docs":{},"局":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}}}}},"依":{"docs":{},"赖":{"docs":{},"的":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"工":{"docs":{},"具":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}},"工":{"docs":{},"具":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"文":{"docs":{},"档":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"用":{"docs":{},"到":{"docs":{},"的":{"docs":{},"相":{"docs":{},"关":{"docs":{},"资":{"docs":{},"源":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"项":{"docs":{},"目":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}},"确":{"docs":{},"实":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"网":{"docs":{},"站":{"docs":{},"数":{"docs":{},"据":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"说":{"docs":{},"明":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"资":{"docs":{},"源":{"docs":{},"文":{"docs":{},"件":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"配":{"docs":{},"套":{"docs":{},"工":{"docs":{},"具":{"docs":{},",":{"docs":{},"实":{"docs":{},"现":{"docs":{},"这":{"docs":{},"些":{"docs":{},"工":{"docs":{},"具":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{},"从":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}},"中":{"docs":{},"使":{"docs":{},"用":{"docs":{},"的":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"高":{"docs":{},"性":{"docs":{},"能":{"docs":{},"编":{"docs":{},"码":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}},"程":{"docs":{},"技":{"docs":{},"法":{"docs":{},"吧":{"docs":{},"。":{"docs":{"第四篇:最佳性能/0.导语.html":{"ref":"第四篇:最佳性能/0.导语.html","tf":0.045454545454545456}}}}}}}}}},"效":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"是":{"docs":{},"我":{"docs":{},"们":{"docs":{},"每":{"docs":{},"一":{"docs":{},"个":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}},",":{"docs":{},"并":{"docs":{},"结":{"docs":{},"合":{"docs":{},"自":{"docs":{},"身":{"docs":{},"项":{"docs":{},"目":{"docs":{},"团":{"docs":{},"队":{"docs":{},"编":{"docs":{},"码":{"docs":{},"规":{"docs":{},"范":{"docs":{},",":{"docs":{},"力":{"docs":{},"争":{"docs":{},"给":{"docs":{},"出":{"docs":{},"全":{"docs":{},"面":{"docs":{},"、":{"docs":{},"认":{"docs":{},"可":{"docs":{},"度":{"docs":{},"较":{"docs":{},"高":{"docs":{},"的":{"docs":{},"编":{"docs":{},"码":{"docs":{},"风":{"docs":{},"格":{"docs":{},",":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"大":{"docs":{},"家":{"docs":{},"写":{"docs":{},"出":{"docs":{},"风":{"docs":{},"格":{"docs":{},"统":{"docs":{},"一":{"docs":{},"的":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"高":{"docs":{},"效":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{"./":{"ref":"./","tf":0.006666666666666667}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"t":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"大":{"docs":{},"部":{"docs":{},"分":{"docs":{},"的":{"docs":{},"格":{"docs":{},"式":{"docs":{},"问":{"docs":{},"题":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}},"此":{"docs":{},"工":{"docs":{},"具":{"docs":{},"在":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}},"类":{"docs":{},"似":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}},"而":{"docs":{},"不":{"docs":{},"应":{"docs":{},"全":{"docs":{},"部":{"docs":{},"零":{"docs":{},"散":{"docs":{},"放":{"docs":{},"在":{"docs":{},"一":{"docs":{},"个":{"docs":{},"大":{"docs":{},"类":{"docs":{},"型":{"docs":{},"中":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}},"u":{"docs":{},"n":{"docs":{},"s":{"docs":{},"a":{"docs":{},"f":{"docs":{},"e":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"o":{"docs":{},"f":{"docs":{},"(":{"docs":{},"x":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}},"字":{"docs":{},"长":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"若":{"docs":{},"缓":{"docs":{},"存":{"docs":{},"区":{"docs":{},"满":{"docs":{},",":{"docs":{},"则":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"。":{"docs":{},"协":{"docs":{},"程":{"docs":{},"任":{"docs":{},"务":{"docs":{},"结":{"docs":{},"束":{"docs":{},",":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}},"#":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.01775147928994083},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}}},")":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.04516129032258064},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.013237063778580024},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.02857142857142857},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"、":{"docs":{},"容":{"docs":{},"器":{"docs":{},"(":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"操":{"docs":{},"作":{"docs":{},"系":{"docs":{},"统":{"docs":{},"(":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"包":{"docs":{},"配":{"docs":{},"置":{"docs":{},"和":{"docs":{},"脚":{"docs":{},"本":{"docs":{},"放":{"docs":{},"在":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}},"/":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},"s":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"b":{"docs":{},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"/":{"docs":{},"c":{"docs":{},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"a":{"docs":{},"g":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}},"c":{"docs":{},"m":{"docs":{},"d":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"d":{"docs":{},"e":{"docs":{},"p":{"docs":{},"l":{"docs":{},"o":{"docs":{},"y":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"o":{"docs":{},"c":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"e":{"docs":{},"x":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.011834319526627219}},"a":{"docs":{},"l":{"docs":{},"/":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{},"/":{"docs":{},"m":{"docs":{},"y":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}},"p":{"docs":{},"k":{"docs":{},"g":{"docs":{},"/":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}},"p":{"docs":{},"k":{"docs":{},"g":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.014792899408284023}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"m":{"docs":{},"d":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"r":{"docs":{},"c":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"/":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"。":{"docs":{},"请":{"docs":{},"注":{"docs":{},"意":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"你":{"docs":{},"需":{"docs":{},"要":{"docs":{},"忽":{"docs":{},"略":{"docs":{},"目":{"docs":{},"录":{"docs":{},"中":{"docs":{},"的":{"docs":{},"内":{"docs":{},"容":{"docs":{},",":{"docs":{},"g":{"docs":{},"o":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"h":{"docs":{},"i":{"docs":{},"r":{"docs":{},"d":{"docs":{},"_":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"r":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"w":{"docs":{},"e":{"docs":{},"b":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"s":{"docs":{},"i":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}},"/":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.03508771929824561},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.08796296296296297},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.06896551724137931},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.06451612903225806},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.07942238267148015},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0622568093385214},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.07749077490774908},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.0756578947368421},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.07084019769357495},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.05612244897959184},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.037037037037037035},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.06862745098039216},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.08152173913043478},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.05714285714285714},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.04411764705882353},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.0625},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.07692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.03305785123966942},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.09259259259259259},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.05387205387205387},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.04954954954954955},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0784313725490196},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.046875},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.10059171597633136},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.03258145363408521},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.03355704697986577},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.01444043321299639},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.013793103448275862},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.035897435897435895},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.04732824427480916},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.015945330296127564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.09090909090909091},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.06216696269982238}},"手":{"docs":{},"动":{"docs":{},"抛":{"docs":{},"出":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"/":{"docs":{},"d":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"l":{"docs":{},"v":{"docs":{},"/":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"k":{"docs":{},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"/":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"/":{"docs":{},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},":":{"1":{"4":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"6":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"/":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"/":{"docs":{},"g":{"docs":{},"o":{"docs":{},"/":{"docs":{},"s":{"docs":{},"r":{"docs":{},"c":{"docs":{},"/":{"docs":{},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},":":{"2":{"6":{"5":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"7":{"4":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"a":{"docs":{},"l":{"docs":{},"/":{"docs":{},"p":{"docs":{},"o":{"docs":{},"l":{"docs":{},"l":{"docs":{},"/":{"docs":{},"f":{"docs":{},"d":{"docs":{},"_":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},":":{"1":{"4":{"7":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"2":{"3":{"9":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}},"u":{"docs":{},"n":{"docs":{},"i":{"docs":{},"x":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},":":{"2":{"6":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}},"o":{"docs":{},"s":{"docs":{},"/":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},":":{"1":{"7":{"6":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}},"docs":{}}}}},"_":{"docs":{},"p":{"docs":{},"o":{"docs":{},"s":{"docs":{},"i":{"docs":{},"x":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},":":{"4":{"9":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"*":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.013513513513513514}}}},"b":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.03103448275862069}},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}}},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.021739130434782608},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"s":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},";":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}},"f":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},",":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}},")":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}},"a":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"d":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.023148148148148147},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.034482758620689655},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.025806451612903226},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.013618677042801557},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.011513157894736841},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.019769357495881382},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.011904761904761904},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.024793388429752067},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.013513513513513514},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.011834319526627219},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308}},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}},"r":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.013468013468013467}},"/":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{},",":{"docs":{},"后":{"docs":{},"者":{"docs":{},"导":{"docs":{},"入":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}},"(":{"docs":{},"&":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}},"i":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}},"z":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}},"s":{"docs":{},"i":{"docs":{},"c":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}},"c":{"docs":{},"k":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"o":{"docs":{},"d":{"docs":{},"i":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.018518518518518517}}}},"o":{"docs":{},"l":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.023391812865497075}},")":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}}}}},"t":{"docs":{},"h":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},"l":{"docs":{},"u":{"docs":{},"e":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}},"o":{"docs":{},"g":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"a":{"docs":{},"n":{"docs":{},"k":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}},"r":{"docs":{},"o":{"docs":{},"k":{"docs":{},"e":{"docs":{},"n":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"a":{"docs":{},"d":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}}}}}}}}}}},"e":{"docs":{},"a":{"docs":{},"k":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}}}}}},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},"s":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.01904761904761905}},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"[":{"docs":{},"]":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"docs":{},"r":{"docs":{},"e":{"docs":{},"q":{"docs":{},")":{"docs":{},")":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},"b":{"docs":{},"y":{"docs":{},"s":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},"f":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693}}}}}}}},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}}}}}}}},"[":{"docs":{},"]":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259}}}}}}},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},".":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}},"e":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"l":{"docs":{},"i":{"docs":{},"e":{"docs":{},"v":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}},"n":{"docs":{},"c":{"docs":{},"h":{"docs":{},"=":{"docs":{},".":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"b":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"h":{"docs":{},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"k":{"docs":{},"n":{"docs":{},"t":{"docs":{},"o":{"docs":{},"h":{"docs":{},"l":{"docs":{},".":{"docs":{},"*":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"t":{"docs":{},"o":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}},"e":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}},"^":{"docs":{},"b":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"h":{"docs":{},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"k":{"docs":{},"j":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"$":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}},"p":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"$":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"k":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}}},"3":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}}},"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}}},"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"s":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}},"u":{"6":{"4":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}},"docs":{}},"docs":{}}}}}}}},"n":{"docs":{},"t":{"docs":{},"o":{"docs":{},"h":{"docs":{},"l":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"t":{"docs":{},"o":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}},"e":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}}}}}}}}}}}}}},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"e":{"docs":{},"e":{"docs":{},"s":{"docs":{},"c":{"docs":{},"a":{"docs":{},"p":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}},"n":{"docs":{},"o":{"docs":{},"e":{"docs":{},"s":{"docs":{},"c":{"docs":{},"a":{"docs":{},"p":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}},"j":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}},"a":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},"b":{"docs":{},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}},"e":{"docs":{},"r":{"docs":{},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}},"j":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},"f":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}},"e":{"docs":{},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"x":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}},"p":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},"e":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"c":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}},"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"docs":{},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"x":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}},"t":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}},"p":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}},"e":{"docs":{},"t":{"docs":{},"p":{"docs":{},"t":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"u":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"e":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"w":{"docs":{},"e":{"docs":{},"q":{"docs":{},"u":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"y":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}}}}}}}}},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},"f":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"e":{"docs":{},"r":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{},"u":{"docs":{},"r":{"docs":{},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"n":{"docs":{},"o":{"docs":{},"s":{"docs":{},"h":{"docs":{},"a":{"docs":{},"r":{"docs":{},"d":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"e":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}},"w":{"docs":{},"e":{"docs":{},"q":{"docs":{},"u":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"(":{"docs":{},"b":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"/":{"docs":{},"o":{"docs":{},"p":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.01567398119122257},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.018223234624145785},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}},"i":{"docs":{},"n":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"y":{"docs":{},".":{"docs":{},"b":{"docs":{},"i":{"docs":{},"g":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"i":{"docs":{},"a":{"docs":{},"n":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203}},"(":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}},"e":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}},"g":{"docs":{},"c":{"docs":{},"a":{"docs":{},"c":{"docs":{},"h":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}},"d":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},"e":{"docs":{},"b":{"docs":{},"、":{"docs":{},"r":{"docs":{},"p":{"docs":{},"m":{"docs":{},"、":{"docs":{},"p":{"docs":{},"k":{"docs":{},"g":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}},"u":{"docs":{},"g":{"docs":{},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"g":{"docs":{},"c":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{},"c":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"(":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}},"p":{"docs":{},"l":{"docs":{},"o":{"docs":{},"y":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"f":{"docs":{},"a":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}},":":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}},"e":{"docs":{},"r":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.009727626459143969},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.006589785831960461},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.017006802721088437},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":3.427083333333333},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":3.379487179487179},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125}}},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"这":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"资":{"docs":{},"源":{"docs":{},"泄":{"docs":{},"漏":{"docs":{},"(":{"docs":{},"p":{"docs":{},"o":{"docs":{},"s":{"docs":{},"s":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}}}}}}},"释":{"docs":{},"放":{"docs":{},"资":{"docs":{},"源":{"docs":{},"不":{"docs":{},"会":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"早":{"docs":{},"地":{"docs":{},"发":{"docs":{},"生":{"docs":{},"(":{"docs":{},"在":{"docs":{},"每":{"docs":{},"次":{"docs":{},"迭":{"docs":{},"代":{"docs":{},"结":{"docs":{},"束":{"docs":{},"时":{"docs":{},")":{"docs":{},",":{"docs":{},"只":{"docs":{},"有":{"docs":{},"在":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"资":{"docs":{},"源":{"docs":{},"将":{"docs":{},"在":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"时":{"docs":{},"被":{"docs":{},"立":{"docs":{},"即":{"docs":{},"释":{"docs":{},"放":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},")":{"docs":{},"和":{"docs":{},"类":{"docs":{},"型":{"docs":{},"别":{"docs":{},"名":{"docs":{},"(":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}},"m":{"docs":{},"o":{"1":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}},":":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}},"2":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}},":":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}},"3":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}},"4":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"docs":{},"g":{"docs":{},"r":{"docs":{},"a":{"docs":{},"p":{"docs":{},"h":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}},"l":{"docs":{},"e":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"e":{"docs":{},"(":{"docs":{},"m":{"docs":{},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}},"s":{"docs":{},",":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"1":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}},"(":{"docs":{},"a":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"2":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}},"(":{"docs":{},"a":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"3":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}},"(":{"docs":{},"a":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}},"(":{"docs":{},"a":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"s":{"docs":{},"(":{"docs":{},"i":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}},"u":{"6":{"4":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"s":{"docs":{},"(":{"docs":{},"i":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}},"docs":{}},"docs":{}}}}},"a":{"docs":{},"y":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},"o":{"docs":{},"r":{"docs":{},")":{"docs":{},"来":{"docs":{},"访":{"docs":{},"问":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"标":{"docs":{},"准":{"docs":{},"输":{"docs":{},"出":{"docs":{},"的":{"docs":{},"文":{"docs":{},"件":{"docs":{},"描":{"docs":{},"述":{"docs":{},"符":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}},"o":{"docs":{},"c":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}},",":{"docs":{},"参":{"docs":{},"数":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"f":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"n":{"docs":{},"e":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.024390243902439025},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.010657193605683837}}}},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.017543859649122806}},"\"":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537}}}},")":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537}}},",":{"docs":{},"在":{"docs":{},"这":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"d":{"docs":{},"o":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}},":":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}},"s":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},"(":{"docs":{},"f":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.024691358024691357},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"b":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"/":{"docs":{},"s":{"docs":{},"q":{"docs":{},"l":{"docs":{},"、":{"docs":{},"编":{"docs":{},"码":{"docs":{},"类":{"docs":{},"型":{"docs":{},"注":{"docs":{},"册":{"docs":{},"表":{"docs":{},"等":{"docs":{},";":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"t":{"docs":{},"l":{"docs":{},"(":{"docs":{},"c":{"docs":{},"t":{"docs":{},"x":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"、":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}},":":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}}},"。":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}},"e":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}},"y":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"r":{"docs":{},"w":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"/":{"docs":{},"a":{"docs":{},"m":{"docs":{},"d":{"6":{"4":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{}},"docs":{}}}}}}}}},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"l":{"docs":{},"v":{"docs":{},"@":{"docs":{},"d":{"docs":{},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{},"e":{"docs":{},"l":{"docs":{},"v":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}},"r":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"n":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"b":{"docs":{},".":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"r":{"docs":{},"y":{"docs":{},"(":{"docs":{},"v":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}},".":{"docs":{},".":{"docs":{},".":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.015384615384615385}}},".":{"docs":{},".":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}}}}}},".":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{},"(":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"s":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.010869565217391304}}}}}}},"y":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}}},"i":{"docs":{},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"u":{"docs":{},"r":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}},"h":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.006578947368421052},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"s":{"docs":{},":":{"docs":{},"/":{"docs":{},"/":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"x":{"docs":{},"y":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}},"g":{"docs":{},"o":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"o":{"docs":{},"r":{"docs":{},"g":{"docs":{},"/":{"docs":{},"i":{"docs":{},"s":{"docs":{},"s":{"docs":{},"u":{"docs":{},"e":{"docs":{},"/":{"2":{"3":{"1":{"9":{"9":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}}},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}},"p":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},"(":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.0392156862745098}}}}}}}}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"p":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"e":{"docs":{},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"l":{"docs":{},".":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.005836575875486381},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.015384615384615385},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.016835016835016835}},"e":{"docs":{},"(":{"docs":{},"i":{"docs":{},"n":{"docs":{},"f":{"docs":{},"o":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"g":{"docs":{},"e":{"docs":{},"(":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"m":{"docs":{},"s":{"docs":{},"g":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.0196078431372549}}}}}}},"s":{"docs":{},",":{"docs":{},"i":{"docs":{},"s":{"docs":{},",":{"docs":{},"c":{"docs":{},"a":{"docs":{},"n":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"(":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"h":{"0":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}},"(":{"docs":{},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}},"l":{"docs":{},"f":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"r":{"docs":{},"d":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"e":{"docs":{},"l":{"docs":{},"p":{"docs":{},"e":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}},"a":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},".":{"docs":{},"(":{"docs":{},"*":{"docs":{},"n":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}},"n":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}},"p":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"r":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.03067484662576687}}},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.03067484662576687}}}}},"l":{"docs":{},"d":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.008152173913043478},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}},"w":{"docs":{},"e":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.03125},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0066518847006651885}}}},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"n":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}},"g":{"docs":{},"h":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{},"s":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},".":{"docs":{},"o":{"docs":{},"l":{"docs":{},"d":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}}}},"o":{"docs":{},"l":{"docs":{},"d":{"docs":{},"b":{"docs":{},"u":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{},"s":{"docs":{},".":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}}}}}},"i":{"7":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"docs":{},"a":{"docs":{},"a":{"docs":{},"s":{"docs":{},"、":{"docs":{},"p":{"docs":{},"a":{"docs":{},"a":{"docs":{},"s":{"docs":{},"、":{"docs":{},"系":{"docs":{},"统":{"docs":{},"和":{"docs":{},"容":{"docs":{},"器":{"docs":{},"编":{"docs":{},"排":{"docs":{},"部":{"docs":{},"署":{"docs":{},"配":{"docs":{},"置":{"docs":{},"和":{"docs":{},"模":{"docs":{},"板":{"docs":{},"(":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"6":{"4":{"docs":{},"(":{"0":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"docs":{}}},"docs":{}},"docs":{},"i":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.00842358604091456}},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},",":{"docs":{},"当":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"i":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"t":{"1":{"6":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}},"docs":{}},"3":{"2":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.013793103448275862},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"docs":{}},"6":{"4":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}},"docs":{}},"8":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.008237232289950576},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.008152173913043478},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.02857142857142857},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.013513513513513514},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537}},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.008875739644970414}},"a":{"docs":{},"l":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"名":{"docs":{},"为":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"/":{"docs":{},"p":{"docs":{},"o":{"docs":{},"l":{"docs":{},"l":{"docs":{},".":{"docs":{},"(":{"docs":{},"*":{"docs":{},"f":{"docs":{},"d":{"docs":{},")":{"docs":{},".":{"docs":{},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"0":{"docs":{},"x":{"docs":{},"c":{"0":{"0":{"0":{"0":{"docs":{},"a":{"docs":{},"e":{"0":{"6":{"0":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}},"docs":{}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}},"docs":{}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},")":{"docs":{},".":{"docs":{},"r":{"docs":{},"w":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"0":{"docs":{},"x":{"docs":{},"c":{"0":{"0":{"0":{"0":{"docs":{},"a":{"docs":{},"e":{"0":{"6":{"0":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}},"docs":{}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":3.333333333333333},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":3.333333333333333},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}},"e":{"docs":{},"{":{"docs":{},"}":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.024691358024691357},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},")":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"需":{"docs":{},"要":{"docs":{},"类":{"docs":{},"型":{"docs":{},"转":{"docs":{},"换":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},",":{"docs":{},"这":{"docs":{},"将":{"docs":{},"为":{"docs":{},"开":{"docs":{},"发":{"docs":{},"人":{"docs":{},"员":{"docs":{},"提":{"docs":{},"供":{"docs":{},"更":{"docs":{},"大":{"docs":{},"的":{"docs":{},"灵":{"docs":{},"活":{"docs":{},"性":{"docs":{},"来":{"docs":{},"改":{"docs":{},"变":{"docs":{},"未":{"docs":{},"来":{"docs":{},",":{"docs":{},"但":{"docs":{},"仍":{"docs":{},"然":{"docs":{},"泄":{"docs":{},"露":{"docs":{},"了":{"docs":{},"具":{"docs":{},"体":{"docs":{},"列":{"docs":{},"表":{"docs":{},"使":{"docs":{},"用":{"docs":{},"抽":{"docs":{},"象":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"细":{"docs":{},"节":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}},"a":{"docs":{},"l":{"docs":{},"m":{"docs":{},"i":{"docs":{},"l":{"docs":{},"l":{"docs":{},"i":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}},"l":{"docs":{},"(":{"docs":{},"r":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"(":{"docs":{},"b":{"docs":{},"a":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.018050541516245487},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.037037037037037035},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"是":{"docs":{},"类":{"docs":{},"型":{"docs":{},"是":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"s":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"r":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}},"c":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}},"n":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}},"r":{"docs":{},"n":{"docs":{},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}},"f":{"docs":{},"o":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}},"d":{"docs":{},"e":{"docs":{},"x":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}},",":{"docs":{},"记":{"docs":{},"录":{"docs":{},"下":{"docs":{},"一":{"docs":{},"个":{"docs":{},"有":{"docs":{},"效":{"docs":{},"元":{"docs":{},"素":{"docs":{},"应":{"docs":{},"该":{"docs":{},"在":{"docs":{},"的":{"docs":{},"位":{"docs":{},"置":{"docs":{},"。":{"docs":{},"遍":{"docs":{},"历":{"docs":{},"所":{"docs":{},"有":{"docs":{},"元":{"docs":{},"素":{"docs":{},",":{"docs":{},"当":{"docs":{},"遇":{"docs":{},"到":{"docs":{},"有":{"docs":{},"效":{"docs":{},"元":{"docs":{},"素":{"docs":{},",":{"docs":{},"将":{"docs":{},"其":{"docs":{},"移":{"docs":{},"动":{"docs":{},"到":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"c":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},"e":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}},"v":{"docs":{},"o":{"docs":{},"c":{"docs":{},"a":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}},"k":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"n":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"s":{"docs":{},"o":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}}},"\"":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}},"e":{"docs":{},"m":{"docs":{},"p":{"docs":{},"t":{"docs":{},"y":{"docs":{},"(":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}},"a":{"docs":{},"l":{"docs":{},",":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"u":{"docs":{},"e":{"docs":{},",":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"(":{"docs":{},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{},",":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"n":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0196078431372549}}}}}}}}}}}},"d":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.00510204081632653},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}},"e":{"docs":{},"r":{"docs":{},"s":{"docs":{},"]":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}},"]":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}},"m":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.08387096774193549},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}}},"l":{"docs":{},"e":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0066518847006651885},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"a":{"docs":{},"g":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"m":{"docs":{},"e":{"docs":{},"d":{"docs":{},"i":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"y":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}},"/":{"docs":{},"o":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},",":{"docs":{},"包":{"docs":{},"括":{"docs":{},"文":{"docs":{},"件":{"docs":{},"系":{"docs":{},"统":{"docs":{},"、":{"docs":{},"网":{"docs":{},"络":{"docs":{},"和":{"docs":{},"系":{"docs":{},"统":{"docs":{},"调":{"docs":{},"用":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"o":{"docs":{},"t":{"docs":{},"a":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.05714285714285714}}}},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"(":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},";":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"(":{"docs":{},"f":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}}}}},"d":{"docs":{},"i":{"docs":{},"r":{"docs":{},"(":{"docs":{},"\"":{"docs":{},".":{"docs":{},"/":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},"s":{"docs":{},"\"":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308}}}}}}}}}}}}}}}}}}}}}}}}},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},",":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}},".":{"docs":{},"(":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.005836575875486381}}}}}}}}}}},"f":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{},"e":{"docs":{},"s":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"c":{"docs":{},"h":{"docs":{},"r":{"docs":{},"e":{"docs":{},"t":{"docs":{},"u":{"docs":{},"r":{"docs":{},"n":{"docs":{},"g":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"程":{"docs":{},"序":{"docs":{},"退":{"docs":{},"出":{"docs":{},"方":{"docs":{},"式":{"docs":{},"i":{"docs":{},"f":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"a":{"docs":{},"c":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}},",":{"docs":{},"是":{"docs":{},"因":{"docs":{},"为":{"docs":{},"当":{"docs":{},"前":{"docs":{},"协":{"docs":{},"程":{"docs":{},"被":{"docs":{},"唤":{"docs":{},"醒":{"docs":{},"时":{"docs":{},",":{"docs":{},"条":{"docs":{},"件":{"docs":{},"不":{"docs":{},"一":{"docs":{},"定":{"docs":{},"符":{"docs":{},"合":{"docs":{},"要":{"docs":{},"求":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"再":{"docs":{},"次":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.018808777429467086}},"s":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}},"g":{"docs":{},"n":{"docs":{},"o":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}},"p":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"k":{"1":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"2":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"3":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}},"u":{"docs":{},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"e":{"docs":{},"y":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.006589785831960461},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"p":{"docs":{},"i":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}},"e":{"docs":{},"p":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},",":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"b":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}},"o":{"docs":{},"f":{"docs":{},"f":{"docs":{},"i":{"docs":{},"c":{"docs":{},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},")":{"docs":{},"。":{"docs":{},"在":{"docs":{},"机":{"docs":{},"器":{"docs":{},"码":{"docs":{},"中":{"docs":{},",":{"docs":{},"偏":{"docs":{},"移":{"docs":{},"量":{"docs":{},"是":{"docs":{},"随":{"docs":{},"指":{"docs":{},"令":{"docs":{},"传":{"docs":{},"递":{"docs":{},"的":{"docs":{},"附":{"docs":{},"加":{"docs":{},"值":{"docs":{},",":{"docs":{},"c":{"docs":{},"p":{"docs":{},"u":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"p":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},"e":{"docs":{},"n":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}},"b":{"docs":{},"s":{"docs":{},"d":{"docs":{},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}}}},"r":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.006016847172081829},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.0380952380952381},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"t":{"docs":{},"o":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"(":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}},"r":{"docs":{},"w":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"(":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}},"r":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}}}}}},"s":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}},".":{"docs":{},"g":{"docs":{},"e":{"docs":{},"t":{"docs":{},"w":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}},"e":{"docs":{},"n":{"docs":{},"v":{"docs":{},"(":{"docs":{},"\"":{"docs":{},"g":{"docs":{},"o":{"docs":{},"p":{"docs":{},"a":{"docs":{},"t":{"docs":{},"h":{"docs":{},"\"":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}}}}},"r":{"docs":{},"o":{"docs":{},"o":{"docs":{},"t":{"docs":{},"\"":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"x":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"1":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"docs":{}}}}}},"a":{"docs":{},"r":{"docs":{},"g":{"docs":{},"s":{"docs":{},"[":{"1":{"docs":{},":":{"docs":{},"]":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}},"docs":{}}}}}},"o":{"docs":{},"p":{"docs":{},"e":{"docs":{},"n":{"docs":{},"(":{"docs":{},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.004942339373970346}}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"d":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},",":{"docs":{},"相":{"docs":{},"当":{"docs":{},"于":{"docs":{},"直":{"docs":{},"接":{"docs":{},"输":{"docs":{},"出":{"docs":{},"到":{"docs":{},"标":{"docs":{},"准":{"docs":{},"输":{"docs":{},"出":{"docs":{},"。":{"docs":{},"这":{"docs":{},"里":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}},"(":{"docs":{},"*":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{},"e":{"docs":{},")":{"docs":{},".":{"docs":{},"w":{"docs":{},"r":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"(":{"0":{"docs":{},"x":{"docs":{},"c":{"0":{"0":{"0":{"0":{"docs":{},"a":{"docs":{},"c":{"0":{"0":{"8":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}},"docs":{}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}}},"docs":{},".":{"docs":{},".":{"docs":{},".":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}},")":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}},"k":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.005836575875486381},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"u":{"docs":{},"t":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},"p":{"docs":{},"u":{"docs":{},"t":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}},".":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"l":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"l":{"docs":{},"d":{"docs":{},"b":{"docs":{},"u":{"docs":{},"c":{"docs":{},"k":{"docs":{},"e":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.008152173913043478}}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}}}}}}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.024456521739130436}}}}}}}}},"b":{"docs":{},"t":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"j":{"docs":{},"e":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"n":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"e":{"docs":{},".":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}},"c":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.015521064301552107}},"e":{"docs":{},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}},"d":{"docs":{},"o":{"docs":{},"(":{"docs":{},"f":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"u":{"docs":{},"n":{"docs":{},"c":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}},".":{"docs":{},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},",":{"docs":{},"在":{"docs":{},"热":{"docs":{},"路":{"docs":{},"径":{"docs":{},"上":{"docs":{},"是":{"docs":{},"比":{"docs":{},"较":{"docs":{},"好":{"docs":{},"理":{"docs":{},"解":{"docs":{},"的":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},"(":{"docs":{},"f":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}},"m":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}},"u":{"docs":{},"n":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}},"c":{"docs":{},"c":{"docs":{},"u":{"docs":{},"r":{"docs":{},"r":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"u":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"i":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"d":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.008223684210526315}},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"y":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"e":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}},"n":{"docs":{},"t":{"1":{"6":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"docs":{}},"3":{"2":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.015037593984962405},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"(":{"docs":{},"b":{"docs":{},"y":{"docs":{},"s":{"docs":{},"[":{"2":{"docs":{},"]":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"3":{"docs":{},"]":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"docs":{}}}}}}},"docs":{}},"6":{"4":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}},"(":{"3":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"5":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"7":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"9":{"docs":{},")":{"docs":{},"}":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"docs":{}}},"docs":{}},"8":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}},"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"p":{"docs":{},"t":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}},"p":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},",":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"、":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"、":{"docs":{},"m":{"docs":{},"i":{"docs":{},"s":{"docs":{},"c":{"docs":{},"、":{"docs":{},"g":{"docs":{},"l":{"docs":{},"o":{"docs":{},"b":{"docs":{},"a":{"docs":{},"l":{"docs":{},"。":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},"a":{"docs":{},"g":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},"e":{"docs":{},"r":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.006016847172081829},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}},"{":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0036101083032490976},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"\"":{"docs":{},"j":{"docs":{},"o":{"docs":{},"h":{"docs":{},"n":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}},"}":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"n":{"docs":{},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{},")":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},".":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"a":{"docs":{},"g":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"n":{"docs":{},"k":{"docs":{},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{},"r":{"docs":{},"e":{"docs":{},"g":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}},"s":{"docs":{},"a":{"docs":{},"f":{"docs":{},"e":{"docs":{},".":{"docs":{},"p":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.024691358024691357},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.008152173913043478}}}}}}},"s":{"docs":{},"i":{"docs":{},"z":{"docs":{},"e":{"docs":{},"o":{"docs":{},"f":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"o":{"docs":{},"f":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"(":{"docs":{},"x":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.010344827586206896}}},".":{"docs":{},"f":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},",":{"docs":{},"u":{"docs":{},"n":{"docs":{},"s":{"docs":{},"a":{"docs":{},"f":{"docs":{},"e":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"o":{"docs":{},"f":{"docs":{},"(":{"docs":{},"x":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}}}}}}},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"i":{"docs":{},"k":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}},"r":{"docs":{},"l":{"docs":{},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"y":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},";":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"k":{"docs":{},"e":{"docs":{},"y":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},":":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}},"v":{"1":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"2":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"3":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.009884678747940691},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.01020408163265306},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.012531328320802004},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.02527075812274368}},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"o":{"docs":{},"r":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}},"r":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}}}}}}}}},"s":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"b":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"t":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}},"之":{"docs":{},"类":{"docs":{},"的":{"docs":{},"工":{"docs":{},"具":{"docs":{},"会":{"docs":{},"正":{"docs":{},"确":{"docs":{},"地":{"docs":{},"指":{"docs":{},"出":{"docs":{},"这":{"docs":{},"些":{"docs":{},"和":{"docs":{},"其":{"docs":{},"他":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"的":{"docs":{},"隐":{"docs":{},"式":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"+":{"1":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}},")":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}},"docs":{}},"a":{"docs":{},"r":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.022988505747126436},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.031287605294825514},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.013157894736842105},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.024691358024691357},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.0196078431372549},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.010101010101010102},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.010256410256410256},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.00916030534351145},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"的":{"docs":{},"后":{"docs":{},"面":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"a":{"docs":{},"b":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.013793103448275862},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"e":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"l":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},"u":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"e":{"docs":{},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}},"o":{"docs":{},"l":{"docs":{},"u":{"docs":{},"m":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.007220216606498195}}},".":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"(":{"docs":{},")":{"docs":{},";":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}},"f":{"1":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}},"docs":{}},"s":{"docs":{},"e":{"docs":{},"n":{"docs":{},"d":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}},"l":{"docs":{},"e":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}},":":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}},"s":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}},".":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}},",":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}},"下":{"docs":{},"面":{"docs":{},",":{"docs":{},"就":{"docs":{},"像":{"docs":{},"不":{"docs":{},"应":{"docs":{},"该":{"docs":{},"拥":{"docs":{},"有":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"反":{"docs":{},"面":{"docs":{},"示":{"docs":{},"例":{"docs":{},",":{"docs":{},"其":{"docs":{},"他":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}},"代":{"docs":{},"码":{"docs":{},"无":{"docs":{},"法":{"docs":{},"通":{"docs":{},"过":{"docs":{},"编":{"docs":{},"译":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}}},"以":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"我":{"docs":{},"们":{"docs":{},"熟":{"docs":{},"知":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}},"一":{"docs":{},"个":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{},"示":{"docs":{},"例":{"docs":{},"来":{"docs":{},"看":{"docs":{},"下":{"docs":{},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}},"看":{"docs":{},"一":{"docs":{},"下":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"对":{"docs":{},"比":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}},"性":{"docs":{},"能":{"docs":{},"对":{"docs":{},"比":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}},"下":{"docs":{},"剥":{"docs":{},"去":{"docs":{},"反":{"docs":{},"射":{"docs":{},"前":{"docs":{},"后":{"docs":{},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"对":{"docs":{},"比":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}},"再":{"docs":{},"看":{"docs":{},"一":{"docs":{},"下":{"docs":{},"链":{"docs":{},"表":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}},"标":{"docs":{},"时":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"比":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}},"中":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"引":{"docs":{},"用":{"docs":{},"的":{"docs":{},"图":{"docs":{},"片":{"docs":{},"等":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"的":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"作":{"docs":{},"为":{"docs":{},"项":{"docs":{},"目":{"docs":{},"的":{"docs":{},"主":{"docs":{},"应":{"docs":{},"用":{"docs":{},"目":{"docs":{},"录":{"docs":{},"。":{"docs":{},"目":{"docs":{},"录":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"包":{"docs":{},"含":{"docs":{},"多":{"docs":{},"个":{"docs":{},"可":{"docs":{},"执":{"docs":{},"行":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"子":{"docs":{},"目":{"docs":{},"录":{"docs":{},"名":{"docs":{},"称":{"docs":{},"一":{"docs":{},"般":{"docs":{},"与":{"docs":{},"可":{"docs":{},"执":{"docs":{},"行":{"docs":{},"文":{"docs":{},"件":{"docs":{},"相":{"docs":{},"对":{"docs":{},"应":{"docs":{},"(":{"docs":{},"如":{"docs":{},":":{"docs":{},"/":{"docs":{},"c":{"docs":{},"m":{"docs":{},"d":{"docs":{},"/":{"docs":{},"m":{"docs":{},"y":{"docs":{},"a":{"docs":{},"p":{"docs":{},"p":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"方":{"docs":{},"法":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"字":{"docs":{},"节":{"docs":{},"数":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}},"变":{"docs":{},"量":{"docs":{},"只":{"docs":{},"要":{"docs":{},"被":{"docs":{},"引":{"docs":{},"用":{"docs":{},"就":{"docs":{},"一":{"docs":{},"直":{"docs":{},"会":{"docs":{},"存":{"docs":{},"活":{"docs":{},",":{"docs":{},"存":{"docs":{},"储":{"docs":{},"在":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"还":{"docs":{},"是":{"docs":{},"栈":{"docs":{},"上":{"docs":{},"由":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}},"暂":{"docs":{},"停":{"docs":{},"了":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},",":{"docs":{},"而":{"docs":{},"应":{"docs":{},"用":{"docs":{},"的":{"docs":{},"共":{"docs":{},"享":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"以":{"docs":{},"放":{"docs":{},"在":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}},"因":{"docs":{},"为":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"它":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},"可":{"docs":{},"勾":{"docs":{},"选":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"用":{"docs":{},"来":{"docs":{},"捕":{"docs":{},"获":{"docs":{},"程":{"docs":{},"序":{"docs":{},"运":{"docs":{},"行":{"docs":{},"期":{"docs":{},"间":{"docs":{},"发":{"docs":{},"生":{"docs":{},"异":{"docs":{},"常":{"docs":{},"抛":{"docs":{},"出":{"docs":{},"的":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"无":{"docs":{},"法":{"docs":{},"捕":{"docs":{},"获":{"docs":{},"当":{"docs":{},"前":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}}}}},"调":{"docs":{},"用":{"docs":{},"才":{"docs":{},"会":{"docs":{},"生":{"docs":{},"效":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}},"英":{"docs":{},"文":{"docs":{},"之":{"docs":{},"间":{"docs":{},"应":{"docs":{},"该":{"docs":{},"有":{"docs":{},"空":{"docs":{},"格":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}},"退":{"docs":{},"出":{"docs":{},"程":{"docs":{},"序":{"docs":{},"且":{"docs":{},"只":{"docs":{},"退":{"docs":{},"出":{"docs":{},"一":{"docs":{},"次":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}},"执":{"docs":{},"行":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}},"一":{"docs":{},"节":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}},"定":{"docs":{},"义":{"docs":{},"的":{"docs":{},"格":{"docs":{},"式":{"docs":{},"时":{"docs":{},"间":{"docs":{},"戳":{"docs":{},"。":{"docs":{},"默":{"docs":{},"认":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"u":{"docs":{},"n":{"docs":{},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"h":{"docs":{},"a":{"docs":{},"l":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}},"元":{"docs":{},"素":{"docs":{},"时":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"非":{"docs":{},"常":{"docs":{},"差":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}},"有":{"docs":{},"一":{"docs":{},"百":{"docs":{},"万":{"docs":{},"条":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"就":{"docs":{},"会":{"docs":{},"浪":{"docs":{},"费":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}},"仍":{"docs":{},"占":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}},"比":{"docs":{},"较":{"docs":{},"特":{"docs":{},"殊":{"docs":{},"。":{"docs":{},"没":{"docs":{},"有":{"docs":{},"任":{"docs":{},"何":{"docs":{},"字":{"docs":{},"段":{"docs":{},"的":{"docs":{},"空":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}},"保":{"docs":{},"证":{"docs":{},"了":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}},"内":{"docs":{},"置":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"丰":{"docs":{},"富":{"docs":{},"的":{"docs":{},"示":{"docs":{},"例":{"docs":{},"将":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"用":{"docs":{},"户":{"docs":{},"更":{"docs":{},"加":{"docs":{},"便":{"docs":{},"捷":{"docs":{},"快":{"docs":{},"速":{"docs":{},"的":{"docs":{},"了":{"docs":{},"解":{"docs":{},"上":{"docs":{},"手":{"docs":{},"一":{"docs":{},"个":{"docs":{},"项":{"docs":{},"目":{"docs":{},",":{"docs":{},"再":{"docs":{},"加":{"docs":{},"上":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"以":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"后":{"docs":{},",":{"docs":{},"g":{"docs":{},"o":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"上":{"docs":{},"必":{"docs":{},"须":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}},"仅":{"docs":{},"列":{"docs":{},"出":{"docs":{},"了":{"docs":{},"部":{"docs":{},"分":{"docs":{},"变":{"docs":{},"量":{"docs":{},"发":{"docs":{},"生":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"的":{"docs":{},"情":{"docs":{},"形":{"docs":{},"。":{"docs":{},"实":{"docs":{},"际":{"docs":{},"上":{"docs":{},",":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}},"外":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},"进":{"docs":{},"行":{"docs":{},"过":{"docs":{},"滤":{"docs":{},",":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"一":{"docs":{},"次":{"docs":{},"代":{"docs":{},"码":{"docs":{},"又":{"docs":{},"何":{"docs":{},"妨":{"docs":{},"呢":{"docs":{},"?":{"docs":{},"可":{"docs":{},"以":{"docs":{},"肯":{"docs":{},"定":{"docs":{},"的":{"docs":{},"是":{"docs":{},",":{"docs":{},"绝":{"docs":{},"大":{"docs":{},"部":{"docs":{},"份":{"docs":{},"场":{"docs":{},"景":{"docs":{},",":{"docs":{},"根":{"docs":{},"本":{"docs":{},"不":{"docs":{},"会":{"docs":{},"对":{"docs":{},"所":{"docs":{},"有":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},"进":{"docs":{},"行":{"docs":{},"过":{"docs":{},"滤":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"反":{"docs":{},"射":{"docs":{},"带":{"docs":{},"来":{"docs":{},"好":{"docs":{},"处":{"docs":{},"我":{"docs":{},"们":{"docs":{},"并":{"docs":{},"没":{"docs":{},"有":{"docs":{},"充":{"docs":{},"分":{"docs":{},"享":{"docs":{},"受":{"docs":{},",":{"docs":{},"但":{"docs":{},"却":{"docs":{},"要":{"docs":{},"为":{"docs":{},"其":{"docs":{},"带":{"docs":{},"来":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"成":{"docs":{},"本":{"docs":{},"买":{"docs":{},"单":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{},"示":{"docs":{},"例":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"对":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"[":{"docs":{},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"6":{"4":{"docs":{},"]":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{},"分":{"docs":{},"片":{"docs":{},"前":{"docs":{},"后":{"docs":{},"并":{"docs":{},"发":{"docs":{},"写":{"docs":{},"入":{"docs":{},"的":{"docs":{},"对":{"docs":{},"比":{"docs":{},",":{"docs":{},"来":{"docs":{},"看":{"docs":{},"下":{"docs":{},"减":{"docs":{},"少":{"docs":{},"锁":{"docs":{},"竞":{"docs":{},"争":{"docs":{},"带":{"docs":{},"来":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"提":{"docs":{},"升":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}}}}}}}}}}}}}}}}}}}}},"们":{"docs":{},"努":{"docs":{},"力":{"docs":{},"的":{"docs":{},"结":{"docs":{},"果":{"docs":{},"。":{"docs":{},"此":{"docs":{},"项":{"docs":{},"目":{"docs":{},"布":{"docs":{},"局":{"docs":{},"是":{"docs":{},"通":{"docs":{},"用":{"docs":{},"的":{"docs":{},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"并":{"docs":{},"非":{"docs":{},"强":{"docs":{},"制":{"docs":{},",":{"docs":{},"当":{"docs":{},"然":{"docs":{},"我":{"docs":{},"们":{"docs":{},"最":{"docs":{},"好":{"docs":{},"遵":{"docs":{},"守":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"这":{"docs":{},"能":{"docs":{},"让":{"docs":{},"我":{"docs":{},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},"布":{"docs":{},"局":{"docs":{},"看":{"docs":{},"起":{"docs":{},"来":{"docs":{},"更":{"docs":{},"加":{"docs":{},"规":{"docs":{},"范":{"docs":{},",":{"docs":{},"易":{"docs":{},"于":{"docs":{},"交":{"docs":{},"流":{"docs":{},"和":{"docs":{},"维":{"docs":{},"护":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"作":{"docs":{},"为":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}},"他":{"docs":{},"们":{"docs":{},"的":{"docs":{},"模":{"docs":{},"块":{"docs":{},"代":{"docs":{},"理":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},")":{"docs":{},"。":{"docs":{},"使":{"docs":{},"用":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}},"下":{"docs":{},"标":{"docs":{},"不":{"docs":{},"留":{"docs":{},"空":{"docs":{},"格":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}},"入":{"docs":{},"参":{"docs":{},"不":{"docs":{},"要":{"docs":{},"留":{"docs":{},"空":{"docs":{},"格":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}},"输":{"docs":{},"入":{"docs":{},"参":{"docs":{},"数":{"docs":{},"或":{"docs":{},"者":{"docs":{},"数":{"docs":{},"组":{"docs":{},"下":{"docs":{},"标":{"docs":{},"时":{"docs":{},",":{"docs":{},"运":{"docs":{},"算":{"docs":{},"符":{"docs":{},"和":{"docs":{},"操":{"docs":{},"作":{"docs":{},"数":{"docs":{},"之":{"docs":{},"间":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"空":{"docs":{},"格":{"docs":{},",":{"docs":{},"紧":{"docs":{},"凑":{"docs":{},"展":{"docs":{},"示":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"依":{"docs":{},"赖":{"docs":{},"管":{"docs":{},"理":{"docs":{},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},"不":{"docs":{},"要":{"docs":{},"提":{"docs":{},"交":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"值":{"docs":{},"返":{"docs":{},"回":{"docs":{},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"对":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"且":{"docs":{},"有":{"docs":{},"多":{"docs":{},"个":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}},"参":{"docs":{},"数":{"docs":{},"传":{"docs":{},"入":{"docs":{},"时":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"您":{"docs":{},"存":{"docs":{},"储":{"docs":{},"了":{"docs":{},"对":{"docs":{},"它":{"docs":{},"们":{"docs":{},"的":{"docs":{},"引":{"docs":{},"用":{"docs":{},",":{"docs":{},"则":{"docs":{},"用":{"docs":{},"户":{"docs":{},"可":{"docs":{},"以":{"docs":{},"对":{"docs":{},"其":{"docs":{},"进":{"docs":{},"行":{"docs":{},"修":{"docs":{},"改":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"后":{"docs":{},"缀":{"docs":{},",":{"docs":{},"如":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"其":{"docs":{},"他":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"时":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"使":{"docs":{},"用":{"docs":{},"值":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"指":{"docs":{},"针":{"docs":{},"。":{"docs":{},"即":{"docs":{},"使":{"docs":{},"该":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"不":{"docs":{},"被":{"docs":{},"导":{"docs":{},"出":{"docs":{},",":{"docs":{},"也":{"docs":{},"不":{"docs":{},"要":{"docs":{},"直":{"docs":{},"接":{"docs":{},"把":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"集":{"docs":{},"合":{"docs":{},"(":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},")":{"docs":{},"使":{"docs":{},"用":{"docs":{},"时":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"将":{"docs":{},"值":{"docs":{},"类":{"docs":{},"型":{"docs":{},"定":{"docs":{},"义":{"docs":{},"为":{"docs":{},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},",":{"docs":{},"仅":{"docs":{},"作":{"docs":{},"为":{"docs":{},"占":{"docs":{},"位":{"docs":{},"符":{"docs":{},"使":{"docs":{},"用":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"门":{"docs":{},"追":{"docs":{},"求":{"docs":{},"高":{"docs":{},"性":{"docs":{},"能":{"docs":{},"的":{"docs":{},"后":{"docs":{},"台":{"docs":{},"编":{"docs":{},"程":{"docs":{},"语":{"docs":{},"言":{"docs":{},",":{"docs":{},"当":{"docs":{},"然":{"docs":{},"也":{"docs":{},"不":{"docs":{},"例":{"docs":{},"外":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"最":{"docs":{},"后":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"时":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"指":{"docs":{},"针":{"docs":{},"指":{"docs":{},"向":{"docs":{},"该":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"返":{"docs":{},"回":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"将":{"docs":{},"在":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"之":{"docs":{},"外":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"此":{"docs":{},"指":{"docs":{},"针":{"docs":{},"一":{"docs":{},"直":{"docs":{},"存":{"docs":{},"活":{"docs":{},"不":{"docs":{},"释":{"docs":{},"放":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},",":{"docs":{},"就":{"docs":{},"会":{"docs":{},"有":{"docs":{},"内":{"docs":{},"存":{"docs":{},"泄":{"docs":{},"露":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},"(":{"docs":{},"该":{"docs":{},"内":{"docs":{},"存":{"docs":{},"不":{"docs":{},"因":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"释":{"docs":{},"放":{"docs":{},"而":{"docs":{},"释":{"docs":{},"放":{"docs":{},")":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"用":{"docs":{},"域":{"docs":{},"内":{"docs":{},"隐":{"docs":{},"式":{"docs":{},"覆":{"docs":{},"盖":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"较":{"docs":{},"大":{"docs":{},"的":{"docs":{},"名":{"docs":{},"字":{"docs":{},"(":{"docs":{},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},")":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"缩":{"docs":{},"写":{"docs":{},",":{"docs":{},"要":{"docs":{},"有":{"docs":{},"明":{"docs":{},"确":{"docs":{},"的":{"docs":{},"意":{"docs":{},"义":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}},"小":{"docs":{},"的":{"docs":{},"名":{"docs":{},"字":{"docs":{},"(":{"docs":{},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{},"/":{"docs":{},"函":{"docs":{},"数":{"docs":{},"参":{"docs":{},"数":{"docs":{},")":{"docs":{},",":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"使":{"docs":{},"用":{"docs":{},"简":{"docs":{},"短":{"docs":{},"的":{"docs":{},"名":{"docs":{},"字":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"隐":{"docs":{},"藏":{"docs":{},"内":{"docs":{},"置":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"你":{"docs":{},"实":{"docs":{},"际":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"以":{"docs":{},"放":{"docs":{},"在":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},"结":{"docs":{},"构":{"docs":{},"布":{"docs":{},"局":{"docs":{},"看":{"docs":{},"起":{"docs":{},"来":{"docs":{},"应":{"docs":{},"该":{"docs":{},"像":{"docs":{},"下":{"docs":{},"面":{"docs":{},"这":{"docs":{},"个":{"docs":{},"样":{"docs":{},"子":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}},"还":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"是":{"docs":{},"要":{"docs":{},"修":{"docs":{},"改":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"只":{"docs":{},"能":{"docs":{},"通":{"docs":{},"过":{"docs":{},"值":{"docs":{},"调":{"docs":{},"用":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}},"使":{"docs":{},"用":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.01935483870967742},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"制":{"docs":{},"表":{"docs":{},"符":{"docs":{},"进":{"docs":{},"行":{"docs":{},"缩":{"docs":{},"进":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"空":{"docs":{},"白":{"docs":{},"符":{"docs":{},"进":{"docs":{},"行":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"。":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"k":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},",":{"docs":{},"并":{"docs":{},"指":{"docs":{},"定":{"docs":{},"容":{"docs":{},"量":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}},"字":{"docs":{},"段":{"docs":{},"名":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}},"o":{"docs":{},"s":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"i":{"docs":{},"t":{"docs":{},"或":{"docs":{},"者":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},".":{"docs":{},"f":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{},"*":{"docs":{},"退":{"docs":{},"出":{"docs":{},"程":{"docs":{},"序":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"p":{"docs":{},"a":{"docs":{},"n":{"docs":{},"i":{"docs":{},"c":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"了":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}},"表":{"docs":{},"驱":{"docs":{},"动":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"编":{"docs":{},"写":{"docs":{},"用":{"docs":{},"例":{"docs":{},",":{"docs":{},"代":{"docs":{},"码":{"docs":{},"看":{"docs":{},"上":{"docs":{},"去":{"docs":{},"会":{"docs":{},"更":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"。":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}}}}}}}}}}},"值":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"既":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"值":{"docs":{},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"指":{"docs":{},"针":{"docs":{},"调":{"docs":{},"用":{"docs":{},"。":{"docs":{},"带":{"docs":{},"指":{"docs":{},"针":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"只":{"docs":{},"能":{"docs":{},"通":{"docs":{},"过":{"docs":{},"指":{"docs":{},"针":{"docs":{},"或":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"此":{"docs":{},"格":{"docs":{},"式":{"docs":{},",":{"docs":{},"并":{"docs":{},"可":{"docs":{},"通":{"docs":{},"过":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}},"反":{"docs":{},"射":{"docs":{},"并":{"docs":{},"且":{"docs":{},"很":{"docs":{},"慢":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"需":{"docs":{},"要":{"docs":{},"用":{"docs":{},"到":{"docs":{},"这":{"docs":{},"两":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"地":{"docs":{},"方":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"手":{"docs":{},"动":{"docs":{},"实":{"docs":{},"现":{"docs":{},"这":{"docs":{},"两":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"相":{"docs":{},"关":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"直":{"docs":{},"接":{"docs":{},"去":{"docs":{},"使":{"docs":{},"用":{"docs":{},"它":{"docs":{},"们":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"读":{"docs":{},"写":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"读":{"docs":{},"写":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}},"信":{"docs":{},"息":{"docs":{},"是":{"docs":{},"否":{"docs":{},"符":{"docs":{},"合":{"docs":{},"规":{"docs":{},"范":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}},"公":{"docs":{},"有":{"docs":{},"库":{"docs":{},"代":{"docs":{},"码":{"docs":{},"(":{"docs":{},"外":{"docs":{},"部":{"docs":{},"项":{"docs":{},"目":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{},")":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}},"关":{"docs":{},"于":{"docs":{},"项":{"docs":{},"目":{"docs":{},"的":{"docs":{},"设":{"docs":{},"计":{"docs":{},"文":{"docs":{},"档":{"docs":{},",":{"docs":{},"用":{"docs":{},"户":{"docs":{},"的":{"docs":{},"使":{"docs":{},"用":{"docs":{},"文":{"docs":{},"档":{"docs":{},"等":{"docs":{},"(":{"docs":{},"除":{"docs":{},"了":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}},"键":{"docs":{},"字":{"docs":{},"并":{"docs":{},"省":{"docs":{},"略":{"docs":{},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}},"申":{"docs":{},"明":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"其":{"docs":{},"类":{"docs":{},"型":{"docs":{},"与":{"docs":{},"表":{"docs":{},"达":{"docs":{},"式":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"一":{"docs":{},"致":{"docs":{},",":{"docs":{},"这":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"可":{"docs":{},"省":{"docs":{},"略":{"docs":{},"其":{"docs":{},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"闭":{"docs":{},"g":{"docs":{},"c":{"docs":{},"改":{"docs":{},"为":{"docs":{},"手":{"docs":{},"动":{"docs":{},"执":{"docs":{},"行":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"其":{"docs":{},"他":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"目":{"docs":{},"录":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}},"/":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"s":{"docs":{},"/":{"docs":{},"t":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{},"s":{"docs":{},"/":{"docs":{},"e":{"docs":{},"x":{"docs":{},"a":{"docs":{},"m":{"docs":{},"p":{"docs":{},"l":{"docs":{},"e":{"docs":{},"s":{"docs":{},"/":{"docs":{},"t":{"docs":{},"h":{"docs":{},"i":{"docs":{},"r":{"docs":{},"d":{"docs":{},"_":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"t":{"docs":{},"y":{"docs":{},"/":{"docs":{},"g":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"s":{"docs":{},"/":{"docs":{},"a":{"docs":{},"s":{"docs":{},"s":{"docs":{},"e":{"docs":{},"t":{"docs":{},"s":{"docs":{},"/":{"docs":{},"w":{"docs":{},"e":{"docs":{},"b":{"docs":{},"s":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"2":{"docs":{},".":{"7":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"情":{"docs":{},"况":{"docs":{},"都":{"docs":{},"应":{"docs":{},"该":{"docs":{},"使":{"docs":{},"用":{"docs":{},"该":{"docs":{},"名":{"docs":{},"词":{"docs":{},"原":{"docs":{},"有":{"docs":{},"的":{"docs":{},"写":{"docs":{},"法":{"docs":{},",":{"docs":{},"如":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}},"中":{"docs":{},"数":{"docs":{},"字":{"docs":{},"与":{"docs":{},"字":{"docs":{},"节":{"docs":{},"序":{"docs":{},"列":{"docs":{},"的":{"docs":{},"转":{"docs":{},"换":{"docs":{},"可":{"docs":{},"以":{"docs":{},"用":{"docs":{},"如":{"docs":{},"下":{"docs":{},"三":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}},"函":{"docs":{},"数":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}},"函":{"docs":{},"数":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}},",":{"docs":{},"调":{"docs":{},"用":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"体":{"docs":{},"第":{"docs":{},"一":{"docs":{},"行":{"docs":{},"不":{"docs":{},"要":{"docs":{},"换":{"docs":{},"行":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}}}},"调":{"docs":{},"用":{"docs":{},"和":{"docs":{},"对":{"docs":{},"调":{"docs":{},"用":{"docs":{},"结":{"docs":{},"果":{"docs":{},"的":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"是":{"docs":{},"紧":{"docs":{},"密":{"docs":{},"相":{"docs":{},"连":{"docs":{},"的":{"docs":{},",":{"docs":{},"不":{"docs":{},"能":{"docs":{},"加":{"docs":{},"空":{"docs":{},"行":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}}}}}}}}}}}}}}}}}},"中":{"docs":{},"意":{"docs":{},"义":{"docs":{},"不":{"docs":{},"明":{"docs":{},"确":{"docs":{},"的":{"docs":{},"实":{"docs":{},"参":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"损":{"docs":{},"害":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"读":{"docs":{},"性":{"docs":{},"。":{"docs":{},"当":{"docs":{},"参":{"docs":{},"数":{"docs":{},"名":{"docs":{},"称":{"docs":{},"的":{"docs":{},"含":{"docs":{},"义":{"docs":{},"不":{"docs":{},"明":{"docs":{},"显":{"docs":{},"时":{"docs":{},",":{"docs":{},"请":{"docs":{},"为":{"docs":{},"参":{"docs":{},"数":{"docs":{},"添":{"docs":{},"加":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"长":{"docs":{},"度":{"docs":{},"不":{"docs":{},"能":{"docs":{},"超":{"docs":{},"过":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}},"中":{"docs":{},"被":{"docs":{},"调":{"docs":{},"用":{"docs":{},"(":{"docs":{},"或":{"docs":{},"程":{"docs":{},"序":{"docs":{},"生":{"docs":{},"命":{"docs":{},"周":{"docs":{},"期":{"docs":{},"中":{"docs":{},"的":{"docs":{},"其":{"docs":{},"他":{"docs":{},"地":{"docs":{},"方":{"docs":{},")":{"docs":{},",":{"docs":{},"或":{"docs":{},"作":{"docs":{},"为":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}},"调":{"docs":{},"用":{"docs":{},"o":{"docs":{},"s":{"docs":{},".":{"docs":{},"e":{"docs":{},"x":{"docs":{},"i":{"docs":{},"t":{"docs":{},"或":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},".":{"docs":{},"f":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"l":{"docs":{},"*":{"docs":{},"且":{"docs":{},"只":{"docs":{},"调":{"docs":{},"用":{"docs":{},"一":{"docs":{},"次":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"多":{"docs":{},"个":{"docs":{},"错":{"docs":{},"误":{"docs":{},"场":{"docs":{},"景":{"docs":{},"停":{"docs":{},"止":{"docs":{},"程":{"docs":{},"序":{"docs":{},"执":{"docs":{},"行":{"docs":{},",":{"docs":{},"请":{"docs":{},"将":{"docs":{},"该":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"放":{"docs":{},"在":{"docs":{},"单":{"docs":{},"独":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"并":{"docs":{},"从":{"docs":{},"中":{"docs":{},"返":{"docs":{},"回":{"docs":{},"错":{"docs":{},"误":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"定":{"docs":{},"义":{"docs":{},"的":{"docs":{},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{},"切":{"docs":{},"片":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"到":{"docs":{},"了":{"docs":{},"堆":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"对":{"docs":{},"成":{"docs":{},"员":{"docs":{},"变":{"docs":{},"量":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}},"之":{"docs":{},"间":{"docs":{},"的":{"docs":{},"关":{"docs":{},"系":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"使":{"docs":{},"代":{"docs":{},"码":{"docs":{},"变":{"docs":{},"得":{"docs":{},"脆":{"docs":{},"弱":{"docs":{},"和":{"docs":{},"容":{"docs":{},"易":{"docs":{},"出":{"docs":{},"错":{"docs":{},";":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}},"本":{"docs":{},"身":{"docs":{},"的":{"docs":{},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},"。":{"docs":{},"特":{"docs":{},"别":{"docs":{},"是":{"docs":{},"打":{"docs":{},"算":{"docs":{},"给":{"docs":{},"其":{"docs":{},"他":{"docs":{},"程":{"docs":{},"序":{"docs":{},"使":{"docs":{},"用":{"docs":{},"的":{"docs":{},"库":{"docs":{},"应":{"docs":{},"该":{"docs":{},"特":{"docs":{},"别":{"docs":{},"注":{"docs":{},"意":{"docs":{},"代":{"docs":{},"码":{"docs":{},"行":{"docs":{},"为":{"docs":{},"的":{"docs":{},"完":{"docs":{},"全":{"docs":{},"确":{"docs":{},"定":{"docs":{},"性":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"顺":{"docs":{},"序":{"docs":{},"或":{"docs":{},"副":{"docs":{},"作":{"docs":{},"用":{"docs":{},"。":{"docs":{},"虽":{"docs":{},"然":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}},"参":{"docs":{},"数":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"这":{"docs":{},"样":{"docs":{},"看":{"docs":{},"起":{"docs":{},"来":{"docs":{},"更":{"docs":{},"容":{"docs":{},"易":{"docs":{},"和":{"docs":{},"申":{"docs":{},"明":{"docs":{},"区":{"docs":{},"分":{"docs":{},"开":{"docs":{},"来":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}},"信":{"docs":{},"息":{"docs":{},"描":{"docs":{},"述":{"docs":{},"\"":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}},"名":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}},"必":{"docs":{},"须":{"docs":{},"遵":{"docs":{},"循":{"docs":{},"驼":{"docs":{},"峰":{"docs":{},"式":{"docs":{},",":{"docs":{},"首":{"docs":{},"字":{"docs":{},"母":{"docs":{},"根":{"docs":{},"据":{"docs":{},"访":{"docs":{},"问":{"docs":{},"控":{"docs":{},"制":{"docs":{},"决":{"docs":{},"定":{"docs":{},"使":{"docs":{},"用":{"docs":{},"大":{"docs":{},"写":{"docs":{},"或":{"docs":{},"小":{"docs":{},"写":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"注":{"docs":{},"释":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"应":{"docs":{},"该":{"docs":{},"以":{"docs":{},"动":{"docs":{},"词":{"docs":{},"开":{"docs":{},"头":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"放":{"docs":{},"在":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}},"按":{"docs":{},"粗":{"docs":{},"略":{"docs":{},"的":{"docs":{},"调":{"docs":{},"用":{"docs":{},"顺":{"docs":{},"序":{"docs":{},"排":{"docs":{},"序":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}},"分":{"docs":{},"组":{"docs":{},"与":{"docs":{},"顺":{"docs":{},"序":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}},"进":{"docs":{},"行":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"释":{"docs":{},"放":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}},"才":{"docs":{},"会":{"docs":{},"被":{"docs":{},"执":{"docs":{},"行":{"docs":{},"。":{"docs":{},"这":{"docs":{},"带":{"docs":{},"来":{"docs":{},"的":{"docs":{},"后":{"docs":{},"果":{"docs":{},"就":{"docs":{},"是":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"迭":{"docs":{},"代":{"docs":{},"次":{"docs":{},"数":{"docs":{},"过":{"docs":{},"多":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"可":{"docs":{},"能":{"docs":{},"导":{"docs":{},"致":{"docs":{},"资":{"docs":{},"源":{"docs":{},"长":{"docs":{},"时":{"docs":{},"间":{"docs":{},"得":{"docs":{},"不":{"docs":{},"到":{"docs":{},"释":{"docs":{},"放":{"docs":{},",":{"docs":{},"造":{"docs":{},"成":{"docs":{},"泄":{"docs":{},"漏":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}},"直":{"docs":{},"接":{"docs":{},"注":{"docs":{},"入":{"docs":{},"到":{"docs":{},"使":{"docs":{},"用":{"docs":{},"方":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}}}},"为":{"docs":{},"例":{"docs":{},",":{"docs":{},"看":{"docs":{},"看":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}},"将":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"用":{"docs":{},"于":{"docs":{},"生":{"docs":{},"成":{"docs":{},"指":{"docs":{},"定":{"docs":{},"长":{"docs":{},"度":{"docs":{},"元":{"docs":{},"素":{"docs":{},"类":{"docs":{},"型":{"docs":{},"为":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}},"均":{"docs":{},"可":{"docs":{},"内":{"docs":{},"联":{"docs":{},"。":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"f":{"docs":{},"i":{"docs":{},"b":{"docs":{},"o":{"docs":{},"n":{"docs":{},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"i":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}},"创":{"docs":{},"建":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{},"对":{"docs":{},"象":{"docs":{},"池":{"docs":{},"中":{"docs":{},"没":{"docs":{},"有":{"docs":{},"对":{"docs":{},"象":{"docs":{},"时":{"docs":{},",":{"docs":{},"将":{"docs":{},"会":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}},"引":{"docs":{},"起":{"docs":{},"的":{"docs":{},",":{"docs":{},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}},"是":{"docs":{},"当":{"docs":{},"所":{"docs":{},"在":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}},"类":{"docs":{},"似":{"docs":{},",":{"docs":{},"但":{"docs":{},"有":{"docs":{},"区":{"docs":{},"别":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}},"前":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"先":{"docs":{},"获":{"docs":{},"得":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"成":{"docs":{},"员":{"docs":{},"锁":{"docs":{},",":{"docs":{},"原":{"docs":{},"因":{"docs":{},"是":{"docs":{},"需":{"docs":{},"要":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"地":{"docs":{},"变":{"docs":{},"更":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"等":{"docs":{},"待":{"docs":{},"队":{"docs":{},"列":{"docs":{},"。":{"docs":{},"在":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"最":{"docs":{},"后":{"docs":{},"暂":{"docs":{},"停":{"docs":{},"了":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635}},"信":{"docs":{},"息":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"结":{"docs":{},"构":{"docs":{},"指":{"docs":{},"针":{"docs":{},"变":{"docs":{},"量":{"docs":{},"使":{"docs":{},"用":{"docs":{},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"时":{"docs":{},",":{"docs":{},"请":{"docs":{},"使":{"docs":{},"用":{"docs":{},"&":{"docs":{},"t":{"docs":{},"{":{"docs":{},"}":{"docs":{},"代":{"docs":{},"替":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"(":{"docs":{},"t":{"docs":{},")":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"与":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"在":{"docs":{},"代":{"docs":{},"码":{"docs":{},"风":{"docs":{},"格":{"docs":{},"上":{"docs":{},"保":{"docs":{},"持":{"docs":{},"一":{"docs":{},"致":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"切":{"docs":{},"片":{"docs":{},"时":{"docs":{},"提":{"docs":{},"供":{"docs":{},"容":{"docs":{},"量":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"特":{"docs":{},"别":{"docs":{},"是":{"docs":{},"在":{"docs":{},"追":{"docs":{},"加":{"docs":{},"切":{"docs":{},"片":{"docs":{},"时":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"提":{"docs":{},"供":{"docs":{},"容":{"docs":{},"量":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}},"函":{"docs":{},"数":{"docs":{},"仅":{"docs":{},"执":{"docs":{},"行":{"docs":{},"了":{"docs":{},"一":{"docs":{},"次":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"了":{"docs":{},"多":{"docs":{},"次":{"docs":{},"重":{"docs":{},"复":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},",":{"docs":{},"在":{"docs":{},"并":{"docs":{},"发":{"docs":{},"环":{"docs":{},"境":{"docs":{},"下":{"docs":{},"很":{"docs":{},"有":{"docs":{},"用":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"参":{"docs":{},"考":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"文":{"docs":{},"献":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"参考文献.html":{"ref":"参考文献.html","tf":10}}}}}},"可":{"docs":{},"执":{"docs":{},"行":{"docs":{},"文":{"docs":{},"件":{"docs":{},"目":{"docs":{},"录":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"能":{"docs":{},"更":{"docs":{},"可":{"docs":{},"取":{"docs":{},"或":{"docs":{},"是":{"docs":{},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}},"会":{"docs":{},"被":{"docs":{},"多":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"并":{"docs":{},"发":{"docs":{},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"为":{"docs":{},"了":{"docs":{},"提":{"docs":{},"升":{"docs":{},"性":{"docs":{},"能":{"docs":{},"(":{"docs":{},"减":{"docs":{},"少":{"docs":{},"执":{"docs":{},"行":{"docs":{},"时":{"docs":{},"间":{"docs":{},"和":{"docs":{},"内":{"docs":{},"存":{"docs":{},"占":{"docs":{},"用":{"docs":{},")":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"显":{"docs":{},"示":{"docs":{},"使":{"docs":{},"用":{"docs":{},"空":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{},"(":{"docs":{},"下":{"docs":{},"划":{"docs":{},"线":{"docs":{},")":{"docs":{},"忽":{"docs":{},"略":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}},"变":{"docs":{},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},"在":{"docs":{},"使":{"docs":{},"用":{"docs":{},"时":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"被":{"docs":{},"其":{"docs":{},"他":{"docs":{},"地":{"docs":{},"方":{"docs":{},"修":{"docs":{},"改":{"docs":{},",":{"docs":{},"导":{"docs":{},"致":{"docs":{},"程":{"docs":{},"序":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"出":{"docs":{},"现":{"docs":{},"意":{"docs":{},"外":{"docs":{},"情":{"docs":{},"况":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"以":{"docs":{},"看":{"docs":{},"到":{"docs":{},",":{"docs":{},"反":{"docs":{},"射":{"docs":{},"涉":{"docs":{},"及":{"docs":{},"了":{"docs":{},"额":{"docs":{},"外":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"判":{"docs":{},"断":{"docs":{},"和":{"docs":{},"大":{"docs":{},"量":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},",":{"docs":{},"导":{"docs":{},"致":{"docs":{},"其":{"docs":{},"对":{"docs":{},"性":{"docs":{},"能":{"docs":{},"的":{"docs":{},"影":{"docs":{},"响":{"docs":{},"非":{"docs":{},"常":{"docs":{},"明":{"docs":{},"显":{"docs":{},"。":{"docs":{},"随":{"docs":{},"着":{"docs":{},"切":{"docs":{},"片":{"docs":{},"元":{"docs":{},"素":{"docs":{},"的":{"docs":{},"递":{"docs":{},"增":{"docs":{},",":{"docs":{},"每":{"docs":{},"一":{"docs":{},"次":{"docs":{},"判":{"docs":{},"断":{"docs":{},"元":{"docs":{},"素":{"docs":{},"是":{"docs":{},"否":{"docs":{},"在":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"距":{"docs":{},"很":{"docs":{},"大":{"docs":{},",":{"docs":{},"快":{"docs":{},"达":{"docs":{},"到":{"docs":{},"一":{"docs":{},"个":{"docs":{},"数":{"docs":{},"量":{"docs":{},"级":{"docs":{},"了":{"docs":{},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{},"在":{"docs":{},"不":{"docs":{},"影":{"docs":{},"响":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"读":{"docs":{},"性":{"docs":{},"时":{"docs":{},",":{"docs":{},"行":{"docs":{},"内":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"地":{"docs":{},"使":{"docs":{},"用":{"docs":{},"运":{"docs":{},"算":{"docs":{},"符":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}},"d":{"docs":{},"e":{"docs":{},"m":{"docs":{},"o":{"3":{"docs":{},"{":{"docs":{},"}":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"docs":{}}}}},"同":{"docs":{},"样":{"docs":{},"的":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"因":{"docs":{},"排":{"docs":{},"列":{"docs":{},"顺":{"docs":{},"序":{"docs":{},"不":{"docs":{},"同":{"docs":{},",":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"不":{"docs":{},"一":{"docs":{},"样":{"docs":{},"的":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"大":{"docs":{},"小":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"y":{"docs":{},"f":{"docs":{},"i":{"docs":{},"b":{"docs":{},"o":{"docs":{},"n":{"docs":{},"a":{"docs":{},"c":{"docs":{},"c":{"docs":{},"i":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}},"通":{"docs":{},"过":{"docs":{},"对":{"docs":{},"分":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"分":{"docs":{},"片":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"减":{"docs":{},"少":{"docs":{},"了":{"docs":{},"锁":{"docs":{},"竞":{"docs":{},"争":{"docs":{},",":{"docs":{},"能":{"docs":{},"明":{"docs":{},"显":{"docs":{},"地":{"docs":{},"提":{"docs":{},"高":{"docs":{},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{},"可":{"docs":{},"以":{"docs":{},"预":{"docs":{},"见":{"docs":{},"的":{"docs":{},"是":{"docs":{},",":{"docs":{},"随":{"docs":{},"着":{"docs":{},"分":{"docs":{},"片":{"docs":{},"粒":{"docs":{},"度":{"docs":{},"地":{"docs":{},"变":{"docs":{},"小":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"距":{"docs":{},"会":{"docs":{},"越":{"docs":{},"来":{"docs":{},"越":{"docs":{},"大":{"docs":{},"。":{"docs":{},"当":{"docs":{},"然":{"docs":{},",":{"docs":{},"分":{"docs":{},"片":{"docs":{},"粒":{"docs":{},"度":{"docs":{},"不":{"docs":{},"是":{"docs":{},"越":{"docs":{},"小":{"docs":{},"越":{"docs":{},"好":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},"每":{"docs":{},"一":{"docs":{},"个":{"docs":{},"分":{"docs":{},"片":{"docs":{},"都":{"docs":{},"要":{"docs":{},"配":{"docs":{},"一":{"docs":{},"把":{"docs":{},"锁":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"会":{"docs":{},"带":{"docs":{},"来":{"docs":{},"很":{"docs":{},"多":{"docs":{},"额":{"docs":{},"外":{"docs":{},"的":{"docs":{},"不":{"docs":{},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{},"开":{"docs":{},"销":{"docs":{},"。":{"docs":{},"可":{"docs":{},"以":{"docs":{},"选":{"docs":{},"择":{"docs":{},"一":{"docs":{},"个":{"docs":{},"不":{"docs":{},"太":{"docs":{},"大":{"docs":{},"的":{"docs":{},"值":{"docs":{},",":{"docs":{},"在":{"docs":{},"性":{"docs":{},"能":{"docs":{},"和":{"docs":{},"花":{"docs":{},"销":{"docs":{},"上":{"docs":{},"寻":{"docs":{},"找":{"docs":{},"一":{"docs":{},"个":{"docs":{},"平":{"docs":{},"衡":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"出":{"docs":{},",":{"docs":{},"两":{"docs":{},"种":{"docs":{},"通":{"docs":{},"过":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}},"无":{"docs":{},"锁":{"docs":{},"版":{"docs":{},"本":{"docs":{},"比":{"docs":{},"有":{"docs":{},"锁":{"docs":{},"版":{"docs":{},"本":{"docs":{},"性":{"docs":{},"能":{"docs":{},"高":{"docs":{},"一":{"docs":{},"些":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}},"将":{"docs":{},"暂":{"docs":{},"时":{"docs":{},"不":{"docs":{},"用":{"docs":{},"的":{"docs":{},"对":{"docs":{},"象":{"docs":{},"缓":{"docs":{},"存":{"docs":{},"起":{"docs":{},"来":{"docs":{},",":{"docs":{},"待":{"docs":{},"下":{"docs":{},"次":{"docs":{},"需":{"docs":{},"要":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"直":{"docs":{},"接":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"不":{"docs":{},"用":{"docs":{},"再":{"docs":{},"次":{"docs":{},"经":{"docs":{},"过":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},",":{"docs":{},"复":{"docs":{},"用":{"docs":{},"对":{"docs":{},"象":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},",":{"docs":{},"减":{"docs":{},"轻":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"利":{"docs":{},"用":{"docs":{},"信":{"docs":{},"道":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"在":{"docs":{},"代":{"docs":{},"码":{"docs":{},"的":{"docs":{},"任":{"docs":{},"意":{"docs":{},"位":{"docs":{},"置":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"和":{"docs":{},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"可":{"docs":{},"以":{"docs":{},"延":{"docs":{},"迟":{"docs":{},"到":{"docs":{},"使":{"docs":{},"用":{"docs":{},"时":{"docs":{},"再":{"docs":{},"执":{"docs":{},"行":{"docs":{},",":{"docs":{},"并":{"docs":{},"发":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},"是":{"docs":{},"线":{"docs":{},"程":{"docs":{},"安":{"docs":{},"全":{"docs":{},"的":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"看":{"docs":{},"起":{"docs":{},"来":{"docs":{},"代":{"docs":{},"码":{"docs":{},"更":{"docs":{},"加":{"docs":{},"简":{"docs":{},"洁":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}},"用":{"docs":{},"来":{"docs":{},"唤":{"docs":{},"醒":{"docs":{},"一":{"docs":{},"个":{"docs":{},"或":{"docs":{},"所":{"docs":{},"有":{"docs":{},"因":{"docs":{},"等":{"docs":{},"待":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},"而":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}},"通":{"docs":{},"知":{"docs":{},"等":{"docs":{},"待":{"docs":{},"条":{"docs":{},"件":{"docs":{},"发":{"docs":{},"生":{"docs":{},"而":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}},"被":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"通":{"docs":{},"过":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"见":{"docs":{},"使":{"docs":{},"用":{"docs":{},"反":{"docs":{},"射":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}},",":{"docs":{},"函":{"docs":{},"数":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}},"读":{"docs":{},"多":{"docs":{},"写":{"docs":{},"少":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"并":{"docs":{},"发":{"docs":{},"性":{"docs":{},"能":{"docs":{},"会":{"docs":{},"更":{"docs":{},"优":{"docs":{},"。":{"docs":{},"可":{"docs":{},"以":{"docs":{},"预":{"docs":{},"见":{"docs":{},"的":{"docs":{},"是":{"docs":{},"如":{"docs":{},"果":{"docs":{},"写":{"docs":{},"占":{"docs":{},"比":{"docs":{},"更":{"docs":{},"低":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"带":{"docs":{},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},"效":{"docs":{},"果":{"docs":{},"会":{"docs":{},"更":{"docs":{},"优":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"次":{"docs":{},"协":{"docs":{},"程":{"docs":{},"的":{"docs":{},"切":{"docs":{},"换":{"docs":{},",":{"docs":{},"耗":{"docs":{},"时":{"docs":{},"大":{"docs":{},"概":{"docs":{},"在":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}},"含":{"docs":{},"有":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},"外":{"docs":{},"部":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"库":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"辅":{"docs":{},"助":{"docs":{},"工":{"docs":{},"具":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"包":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}},"存":{"docs":{},"放":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"储":{"docs":{},"类":{"docs":{},"型":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}},"导":{"docs":{},"入":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"的":{"docs":{},"包":{"docs":{},"按":{"docs":{},"照":{"docs":{},"先":{"docs":{},"后":{"docs":{},"顺":{"docs":{},"序":{"docs":{},"应":{"docs":{},"该":{"docs":{},"分":{"docs":{},"为":{"docs":{},"三":{"docs":{},"组":{"docs":{},":":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}},"出":{"docs":{},"与":{"docs":{},"非":{"docs":{},"导":{"docs":{},"出":{"docs":{},"接":{"docs":{},"口":{"docs":{},"均":{"docs":{},"需":{"docs":{},"要":{"docs":{},"有":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"和":{"docs":{},"方":{"docs":{},"法":{"docs":{},"(":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"或":{"docs":{},"接":{"docs":{},"口":{"docs":{},"下":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"称":{"docs":{},"为":{"docs":{},"方":{"docs":{},"法":{"docs":{},")":{"docs":{},"都":{"docs":{},"必":{"docs":{},"须":{"docs":{},"有":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}},"应":{"docs":{},"该":{"docs":{},"放":{"docs":{},"在":{"docs":{},"非":{"docs":{},"导":{"docs":{},"出":{"docs":{},"函":{"docs":{},"数":{"docs":{},"前":{"docs":{},"面":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}},"/":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"职":{"docs":{},"责":{"docs":{},"必":{"docs":{},"须":{"docs":{},"与":{"docs":{},"包":{"docs":{},"&":{"docs":{},"文":{"docs":{},"件":{"docs":{},"职":{"docs":{},"责":{"docs":{},"高":{"docs":{},"度":{"docs":{},"一":{"docs":{},"致":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}},"字":{"docs":{},"段":{"docs":{},"和":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}},"以":{"docs":{},"下":{"docs":{},"两":{"docs":{},"个":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"以":{"docs":{},"便":{"docs":{},"此":{"docs":{},"包":{"docs":{},"的":{"docs":{},"用":{"docs":{},"户":{"docs":{},"可":{"docs":{},"以":{"docs":{},"将":{"docs":{},"它":{"docs":{},"们":{"docs":{},"与":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"s":{"docs":{},".":{"docs":{},"i":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"常":{"docs":{},"量":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"致":{"docs":{},"整":{"docs":{},"个":{"docs":{},"进":{"docs":{},"程":{"docs":{},"退":{"docs":{},"出":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}},"将":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"你":{"docs":{},"的":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"云":{"docs":{},"(":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"更":{"docs":{},"加":{"docs":{},"人":{"docs":{},"性":{"docs":{},"化":{"docs":{},",":{"docs":{},"如":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"不":{"docs":{},"会":{"docs":{},"被":{"docs":{},"执":{"docs":{},"行":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}},"网":{"docs":{},"络":{"docs":{},"字":{"docs":{},"节":{"docs":{},"序":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}},"元":{"docs":{},"素":{"docs":{},"插":{"docs":{},"入":{"docs":{},"到":{"docs":{},"链":{"docs":{},"表":{"docs":{},"的":{"docs":{},"首":{"docs":{},"部":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}},"格":{"docs":{},"式":{"docs":{},"化":{"docs":{},"后":{"docs":{},"的":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"打":{"docs":{},"印":{"docs":{},"到":{"docs":{},"屏":{"docs":{},"幕":{"docs":{},",":{"docs":{},"即":{"docs":{},"标":{"docs":{},"准":{"docs":{},"输":{"docs":{},"出":{"docs":{},"。":{"docs":{},"在":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}},"应":{"docs":{},"用":{"docs":{},"程":{"docs":{},"序":{"docs":{},"和":{"docs":{},"公":{"docs":{},"共":{"docs":{},"库":{"docs":{},"的":{"docs":{},"示":{"docs":{},"例":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}},"特":{"docs":{},"定":{"docs":{},"组":{"docs":{},"件":{"docs":{},",":{"docs":{},"如":{"docs":{},"静":{"docs":{},"态":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}},"的":{"docs":{},"组":{"docs":{},"件":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"目":{"docs":{},"录":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}},"/":{"docs":{},"w":{"docs":{},"e":{"docs":{},"b":{"2":{"docs":{},".":{"5":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}}},"docs":{}}}}}}},"项":{"docs":{},"目":{"docs":{},"的":{"docs":{},"基":{"docs":{},"本":{"docs":{},"布":{"docs":{},"局":{"docs":{},",":{"docs":{},"是":{"docs":{},"社":{"docs":{},"区":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}},"服":{"docs":{},"务":{"docs":{},"建":{"docs":{},"议":{"docs":{},"有":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"必":{"docs":{},"须":{"docs":{},"要":{"docs":{},"有":{"docs":{},"接":{"docs":{},"口":{"docs":{},"测":{"docs":{},"试":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}},"该":{"docs":{},"做":{"docs":{},"到":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},"足":{"docs":{},"以":{"docs":{},"满":{"docs":{},"足":{"docs":{},"任":{"docs":{},"何":{"docs":{},"情":{"docs":{},"况":{"docs":{},"!":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517}}}}}}}}}}},"后":{"docs":{},"移":{"docs":{},"一":{"docs":{},"位":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}},"当":{"docs":{},"使":{"docs":{},"用":{"docs":{},"如":{"docs":{},"下":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},":":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"为":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517}}}},"或":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":1.6666666666666665},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"者":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"为":{"docs":{},"了":{"docs":{},"更":{"docs":{},"好":{"docs":{},"的":{"docs":{},"可":{"docs":{},"测":{"docs":{},"试":{"docs":{},"性":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}},"程":{"docs":{},"序":{"docs":{},"主":{"docs":{},"动":{"docs":{},"抛":{"docs":{},"出":{"docs":{},"的":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}},"无":{"docs":{},"缓":{"docs":{},"冲":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517}}}}},"是":{"docs":{},"无":{"docs":{},"缓":{"docs":{},"冲":{"docs":{},"的":{"docs":{},"。":{"docs":{},"默":{"docs":{},"认":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517}}}}}}}}}}}}}}}}}}}}},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"错":{"docs":{},"误":{"docs":{},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}},"空":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"只":{"docs":{},"能":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"可":{"docs":{},"以":{"docs":{},"等":{"docs":{},"待":{"docs":{},",":{"docs":{},"并":{"docs":{},"读":{"docs":{},"取":{"docs":{},"到":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"没":{"docs":{},"办":{"docs":{},"法":{"docs":{},"通":{"docs":{},"知":{"docs":{},"其":{"docs":{},"他":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},"也":{"docs":{},"读":{"docs":{},"取":{"docs":{},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"打":{"docs":{},"包":{"docs":{},"和":{"docs":{},"持":{"docs":{},"续":{"docs":{},"集":{"docs":{},"成":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}},"印":{"docs":{},"的":{"docs":{},"是":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}},"相":{"docs":{},"同":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}},"执":{"docs":{},"行":{"docs":{},"各":{"docs":{},"种":{"docs":{},"构":{"docs":{},"建":{"docs":{},"、":{"docs":{},"安":{"docs":{},"装":{"docs":{},"、":{"docs":{},"分":{"docs":{},"析":{"docs":{},"等":{"docs":{},"操":{"docs":{},"作":{"docs":{},"的":{"docs":{},"脚":{"docs":{},"本":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}},"基":{"docs":{},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}},"性":{"docs":{},"能":{"docs":{},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}},"当":{"docs":{},"前":{"docs":{},"包":{"docs":{},"下":{"docs":{},"的":{"docs":{},"所":{"docs":{},"有":{"docs":{},"基":{"docs":{},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},",":{"docs":{},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"_":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"w":{"docs":{},"a":{"docs":{},"i":{"docs":{},"t":{"docs":{},"会":{"docs":{},"挂":{"docs":{},"起":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"所":{"docs":{},"在":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"持":{"docs":{},"续":{"docs":{},"集":{"docs":{},"成":{"docs":{},"配":{"docs":{},"置":{"docs":{},"与":{"docs":{},"脚":{"docs":{},"本":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}},"整":{"docs":{},"体":{"docs":{},"风":{"docs":{},"格":{"2":{"docs":{},".":{"2":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}}},"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"有":{"docs":{},"些":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"语":{"docs":{},"言":{"docs":{},"自":{"docs":{},"身":{"docs":{},"提":{"docs":{},"供":{"docs":{},"了":{"docs":{},"目":{"docs":{},"录":{"docs":{},"结":{"docs":{},"构":{"docs":{},"规":{"docs":{},"范":{"docs":{},",":{"docs":{},"但":{"docs":{},"对":{"docs":{},"于":{"docs":{},"较":{"docs":{},"为":{"docs":{},"年":{"docs":{},"轻":{"docs":{},"的":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}},"时":{"docs":{},"后":{"docs":{},"我":{"docs":{},"们":{"docs":{},"需":{"docs":{},"要":{"docs":{},"根":{"docs":{},"据":{"docs":{},"多":{"docs":{},"个":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"候":{"docs":{},"你":{"docs":{},"会":{"docs":{},"看":{"docs":{},"到":{"docs":{},"某":{"docs":{},"个":{"docs":{},"类":{"docs":{},"里":{"docs":{},"有":{"docs":{},"很":{"docs":{},"多":{"docs":{},"基":{"docs":{},"本":{"docs":{},"类":{"docs":{},"型":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"你":{"docs":{},"隐":{"docs":{},"约":{"docs":{},"地":{"docs":{},"能":{"docs":{},"区":{"docs":{},"分":{"docs":{},"出":{"docs":{},"某":{"docs":{},"些":{"docs":{},"字":{"docs":{},"段":{"docs":{},"好":{"docs":{},"像":{"docs":{},"应":{"docs":{},"该":{"docs":{},"在":{"docs":{},"一":{"docs":{},"起":{"docs":{},",":{"docs":{},"如":{"docs":{},"手":{"docs":{},"机":{"docs":{},"号":{"docs":{},"和":{"docs":{},"带":{"docs":{},"区":{"docs":{},"号":{"docs":{},"的":{"docs":{},"电":{"docs":{},"话":{"docs":{},"号":{"docs":{},"码":{"docs":{},"、":{"docs":{},"描":{"docs":{},"述":{"docs":{},"某":{"docs":{},"个":{"docs":{},"日":{"docs":{},"期":{"docs":{},"范":{"docs":{},"围":{"docs":{},"的":{"docs":{},"开":{"docs":{},"始":{"docs":{},"日":{"docs":{},"期":{"docs":{},"和":{"docs":{},"结":{"docs":{},"束":{"docs":{},"日":{"docs":{},"期":{"docs":{},",":{"docs":{},"它":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"真":{"docs":{},"实":{"docs":{},"的":{"docs":{},"载":{"docs":{},"体":{"docs":{},",":{"docs":{},"如":{"docs":{},"联":{"docs":{},"系":{"docs":{},"方":{"docs":{},"式":{"docs":{},"类":{"docs":{},"和":{"docs":{},"时":{"docs":{},"间":{"docs":{},"范":{"docs":{},"围":{"docs":{},"类":{"docs":{},")":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"需":{"docs":{},"要":{"docs":{},"一":{"docs":{},"些":{"docs":{},"工":{"docs":{},"具":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},"从":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"单":{"docs":{},"向":{"docs":{},"链":{"docs":{},"表":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"的":{"docs":{},"简":{"docs":{},"单":{"docs":{},"实":{"docs":{},"现":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}},"并":{"docs":{},"发":{"docs":{},"写":{"docs":{},"入":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},"链":{"docs":{},"表":{"docs":{},"的":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"形":{"docs":{},"式":{"docs":{},"输":{"docs":{},"出":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"在":{"docs":{},"异":{"docs":{},"步":{"docs":{},"地":{"docs":{},"接":{"docs":{},"收":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"剩":{"docs":{},"下":{"docs":{},"的":{"docs":{},"多":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"必":{"docs":{},"须":{"docs":{},"等":{"docs":{},"待":{"docs":{},"这":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"接":{"docs":{},"收":{"docs":{},"完":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"才":{"docs":{},"能":{"docs":{},"读":{"docs":{},"取":{"docs":{},"到":{"docs":{},"正":{"docs":{},"确":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{},"在":{"docs":{},"这":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"单":{"docs":{},"纯":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"服":{"docs":{},"务":{"docs":{},"对":{"docs":{},"外":{"docs":{},"接":{"docs":{},"口":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}},"应":{"docs":{},"用":{"docs":{},"程":{"docs":{},"序":{"docs":{},"目":{"docs":{},"录":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}},"/":{"docs":{},"a":{"docs":{},"p":{"docs":{},"i":{"2":{"docs":{},".":{"4":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}}},"docs":{}}}}}}}}}}},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"请":{"docs":{},"求":{"docs":{},"天":{"docs":{},"然":{"docs":{},"是":{"docs":{},"并":{"docs":{},"发":{"docs":{},"的":{"docs":{},",":{"docs":{},"此":{"docs":{},"时":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}},"构":{"docs":{},"建":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}},"依":{"docs":{},"赖":{"docs":{},"包":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"造":{"docs":{},"函":{"docs":{},"数":{"docs":{},"应":{"docs":{},"该":{"docs":{},"放":{"docs":{},"在":{"docs":{},"其":{"docs":{},"他":{"docs":{},"函":{"docs":{},"数":{"docs":{},"之":{"docs":{},"前":{"docs":{},",":{"docs":{},"如":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"x":{"docs":{},"y":{"docs":{},"z":{"docs":{},"(":{"docs":{},")":{"docs":{},"/":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"x":{"docs":{},"y":{"docs":{},"z":{"docs":{},"(":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"格":{"docs":{},"式":{"docs":{},"的":{"docs":{},"说":{"docs":{},"明":{"docs":{},"文":{"docs":{},"档":{"docs":{},",":{"docs":{},"是":{"docs":{},"用":{"docs":{},"户":{"docs":{},"了":{"docs":{},"解":{"docs":{},"一":{"docs":{},"个":{"docs":{},"项":{"docs":{},"目":{"docs":{},"最":{"docs":{},"直":{"docs":{},"观":{"docs":{},"的":{"docs":{},"入":{"docs":{},"口":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"需":{"docs":{},"要":{"docs":{},",":{"docs":{},"添":{"docs":{},"加":{"docs":{},"不":{"docs":{},"同":{"docs":{},"语":{"docs":{},"言":{"docs":{},"的":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"化":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"中":{"docs":{},"多":{"docs":{},"个":{"docs":{},"占":{"docs":{},"位":{"docs":{},"符":{"docs":{},"之":{"docs":{},"间":{"docs":{},"要":{"docs":{},"有":{"docs":{},"空":{"docs":{},"格":{"docs":{},"。":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}}}},"为":{"docs":{},"/":{"docs":{},"/":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},":":{"docs":{},"\"":{"docs":{},"/":{"docs":{},"/":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}},"之":{"docs":{},"间":{"docs":{},"进":{"docs":{},"行":{"docs":{},"选":{"docs":{},"择":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}},"注":{"docs":{},"意":{"docs":{},",":{"1":{"docs":{},".":{"1":{"1":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}},"docs":{}}},"docs":{},"如":{"docs":{},"果":{"docs":{},"方":{"docs":{},"法":{"docs":{},"的":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"为":{"docs":{},"不":{"docs":{},"可":{"docs":{},"导":{"docs":{},"出":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"不":{"docs":{},"注":{"docs":{},"释":{"docs":{},",":{"docs":{},"但":{"docs":{},"需":{"docs":{},"要":{"docs":{},"质":{"docs":{},"疑":{"docs":{},"该":{"docs":{},"方":{"docs":{},"法":{"docs":{},"可":{"docs":{},"导":{"docs":{},"出":{"docs":{},"的":{"docs":{},"必":{"docs":{},"要":{"docs":{},"性":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"与":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},"多":{"docs":{},"次":{"docs":{},"运":{"docs":{},"行":{"docs":{},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"结":{"docs":{},"果":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"不":{"docs":{},"相":{"docs":{},"同":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"并":{"docs":{},"发":{"docs":{},"是":{"docs":{},"无":{"docs":{},"序":{"docs":{},"的":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"释":{"docs":{},"对":{"docs":{},"变":{"docs":{},"量":{"docs":{},"和":{"docs":{},"常":{"docs":{},"量":{"docs":{},"进":{"docs":{},"行":{"docs":{},"简":{"docs":{},"要":{"docs":{},"介":{"docs":{},"绍":{"docs":{},",":{"docs":{},"放":{"docs":{},"在":{"docs":{},"常":{"docs":{},"量":{"docs":{},"或":{"docs":{},"变":{"docs":{},"量":{"docs":{},"定":{"docs":{},"义":{"docs":{},"的":{"docs":{},"前":{"docs":{},"一":{"docs":{},"行":{"docs":{},"。":{"docs":{},"独":{"docs":{},"行":{"docs":{},"注":{"docs":{},"释":{"docs":{},"格":{"docs":{},"式":{"docs":{},"为":{"docs":{},":":{"docs":{},"\"":{"docs":{},"/":{"docs":{},"/":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"结":{"docs":{},"构":{"docs":{},"进":{"docs":{},"行":{"docs":{},"简":{"docs":{},"要":{"docs":{},"介":{"docs":{},"绍":{"docs":{},",":{"docs":{},"放":{"docs":{},"在":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"定":{"docs":{},"义":{"docs":{},"的":{"docs":{},"前":{"docs":{},"一":{"docs":{},"行":{"docs":{},"。":{"docs":{},"格":{"docs":{},"式":{"docs":{},"为":{"docs":{},":":{"docs":{},"\"":{"docs":{},"/":{"docs":{},"/":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"描":{"docs":{},"述":{"docs":{},"函":{"docs":{},"数":{"docs":{},"或":{"docs":{},"方":{"docs":{},"法":{"docs":{},"功":{"docs":{},"能":{"docs":{},"、":{"docs":{},"调":{"docs":{},"用":{"docs":{},"方":{"docs":{},"等":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{},"格":{"docs":{},"式":{"docs":{},"为":{"docs":{},":":{"docs":{},"\"":{"docs":{},"/":{"docs":{},"/":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}},"结":{"docs":{},"束":{"docs":{},"添":{"docs":{},"加":{"docs":{},"点":{"docs":{},"或":{"docs":{},"句":{"docs":{},"号":{"docs":{},",":{"docs":{},"参":{"docs":{},"考":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{},"源":{"docs":{},"码":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}},"入":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}},"测":{"docs":{},"试":{"docs":{},"相":{"docs":{},"关":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"用":{"docs":{},"例":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"名":{"docs":{},"称":{"docs":{},"必":{"docs":{},"须":{"docs":{},"以":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}},"生":{"docs":{},"成":{"docs":{},"的":{"docs":{},"文":{"docs":{},"档":{"docs":{},"之":{"docs":{},"外":{"docs":{},")":{"docs":{},"均":{"docs":{},"可":{"docs":{},"以":{"docs":{},"放":{"docs":{},"在":{"docs":{},"该":{"docs":{},"目":{"docs":{},"录":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}},"带":{"docs":{},"参":{"docs":{},"数":{"docs":{},"的":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}},"指":{"docs":{},"定":{"docs":{},"长":{"docs":{},"度":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},"的":{"docs":{},"随":{"docs":{},"机":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}},"切":{"docs":{},"片":{"docs":{},"函":{"docs":{},"数":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}},"社":{"docs":{},"区":{"docs":{},"的":{"docs":{},"人":{"docs":{},"并":{"docs":{},"不":{"docs":{},"推":{"docs":{},"荐":{"docs":{},"它":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}},"私":{"docs":{},"有":{"docs":{},"库":{"docs":{},"代":{"docs":{},"码":{"docs":{},"(":{"docs":{},"仅":{"docs":{},"本":{"docs":{},"项":{"docs":{},"目":{"docs":{},"使":{"docs":{},"用":{"docs":{},")":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}},"量":{"docs":{},"和":{"docs":{},"局":{"docs":{},"部":{"docs":{},"量":{"docs":{},"规":{"docs":{},"范":{"docs":{},"一":{"docs":{},"致":{"docs":{},",":{"docs":{},"均":{"docs":{},"以":{"docs":{},"小":{"docs":{},"写":{"docs":{},"字":{"docs":{},"母":{"docs":{},"开":{"docs":{},"头":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}},"简":{"docs":{},"体":{"docs":{},"中":{"docs":{},"文":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"单":{"docs":{},"明":{"docs":{},"了":{"docs":{},"的":{"docs":{},"包":{"docs":{},"命":{"docs":{},"名":{"docs":{},",":{"docs":{},"如":{"docs":{},":":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},"、":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},"、":{"docs":{},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}},"言":{"docs":{},"之":{"docs":{},":":{"docs":{},"合":{"docs":{},"理":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"可":{"docs":{},"以":{"docs":{},"提":{"docs":{},"高":{"docs":{},"内":{"docs":{},"存":{"docs":{},"读":{"docs":{},"写":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"便":{"docs":{},"于":{"docs":{},"实":{"docs":{},"现":{"docs":{},"变":{"docs":{},"量":{"docs":{},"操":{"docs":{},"作":{"docs":{},"的":{"docs":{},"原":{"docs":{},"子":{"docs":{},"性":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"而":{"docs":{},"言":{"docs":{},"之":{"docs":{},",":{"docs":{},"系":{"docs":{},"统":{"docs":{},"的":{"docs":{},"资":{"docs":{},"源":{"docs":{},"被":{"docs":{},"耗":{"docs":{},"尽":{"docs":{},"了":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}},"系":{"docs":{},"统":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"(":{"docs":{},"s":{"docs":{},"y":{"docs":{},"s":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},"d":{"docs":{},",":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}},"中":{"docs":{},",":{"docs":{},"标":{"docs":{},"准":{"docs":{},"输":{"docs":{},"出":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"视":{"docs":{},"为":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"内":{"docs":{},"核":{"docs":{},"(":{"docs":{},"k":{"docs":{},"e":{"docs":{},"r":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{},")":{"docs":{},"利":{"docs":{},"用":{"docs":{},"文":{"docs":{},"件":{"docs":{},"描":{"docs":{},"述":{"docs":{},"符":{"docs":{},"(":{"docs":{},"f":{"docs":{},"i":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"地":{"docs":{},"资":{"docs":{},"源":{"docs":{},"是":{"docs":{},"有":{"docs":{},"限":{"docs":{},",":{"docs":{},"协":{"docs":{},"程":{"docs":{},"是":{"docs":{},"有":{"docs":{},"代":{"docs":{},"价":{"docs":{},"的":{"docs":{},",":{"docs":{},"为":{"docs":{},"了":{"docs":{},"保":{"docs":{},"护":{"docs":{},"程":{"docs":{},"序":{"docs":{},",":{"docs":{},"提":{"docs":{},"高":{"docs":{},"性":{"docs":{},"能":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"主":{"docs":{},"动":{"docs":{},"限":{"docs":{},"制":{"docs":{},"并":{"docs":{},"发":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},"数":{"docs":{},"量":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"背":{"docs":{},"景":{"docs":{},"。":{"docs":{},"不":{"docs":{},"同":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"应":{"docs":{},"该":{"docs":{},"有":{"docs":{},"自":{"docs":{},"己":{"docs":{},"的":{"docs":{},"目":{"docs":{},"录":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"全":{"docs":{},"部":{"docs":{},"放":{"docs":{},"到":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}},"资":{"docs":{},"源":{"docs":{},"、":{"docs":{},"服":{"docs":{},"务":{"docs":{},"器":{"docs":{},"端":{"docs":{},"模":{"docs":{},"板":{"docs":{},"和":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}},"起":{"docs":{},",":{"docs":{},"从":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"层":{"docs":{},"面":{"docs":{},"限":{"docs":{},"制":{"docs":{},"该":{"docs":{},"目":{"docs":{},"录":{"docs":{},"不":{"docs":{},"可":{"docs":{},"被":{"docs":{},"导":{"docs":{},"出":{"docs":{},",":{"docs":{},"而":{"docs":{},"且":{"docs":{},"不":{"docs":{},"只":{"docs":{},"是":{"docs":{},"项":{"docs":{},"目":{"docs":{},"根":{"docs":{},"目":{"docs":{},"录":{"docs":{},"下":{"docs":{},"的":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"还":{"docs":{},"会":{"docs":{},"忽":{"docs":{},"略":{"docs":{},"以":{"docs":{},"“":{"docs":{},".":{"docs":{},"”":{"docs":{},"或":{"docs":{},"“":{"docs":{},"_":{"docs":{},"”":{"docs":{},"开":{"docs":{},"头":{"docs":{},"的":{"docs":{},"目":{"docs":{},"录":{"docs":{},"或":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"在":{"docs":{},"如":{"docs":{},"何":{"docs":{},"命":{"docs":{},"名":{"docs":{},"测":{"docs":{},"试":{"docs":{},"数":{"docs":{},"据":{"docs":{},"目":{"docs":{},"录":{"docs":{},"方":{"docs":{},"面":{"docs":{},"有":{"docs":{},"更":{"docs":{},"大":{"docs":{},"的":{"docs":{},"灵":{"docs":{},"活":{"docs":{},"性":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"启":{"docs":{},"用":{"docs":{},"了":{"docs":{},"模":{"docs":{},"块":{"docs":{},"代":{"docs":{},"理":{"docs":{},"功":{"docs":{},"能":{"docs":{},"(":{"docs":{},"默":{"docs":{},"认":{"docs":{},"使":{"docs":{},"用":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}},"是":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}},"提":{"docs":{},"供":{"docs":{},"了":{"docs":{},"很":{"docs":{},"多":{"docs":{},"好":{"docs":{},"用":{"docs":{},"的":{"docs":{},"工":{"docs":{},"具":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"我":{"docs":{},"们":{"docs":{},"进":{"docs":{},"行":{"docs":{},"代":{"docs":{},"码":{"docs":{},"的":{"docs":{},"规":{"docs":{},"范":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}},"以":{"docs":{},"上":{"docs":{},"面":{"docs":{},"给":{"docs":{},"出":{"docs":{},"的":{"docs":{},"同":{"docs":{},"步":{"docs":{},"示":{"docs":{},"例":{"docs":{},",":{"docs":{},"这":{"docs":{},"里":{"docs":{},"换":{"docs":{},"作":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}},"有":{"docs":{},"更":{"docs":{},"多":{"docs":{},",":{"docs":{},"具":{"docs":{},"体":{"docs":{},"可":{"docs":{},"参":{"docs":{},"考":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}},"这":{"docs":{},"些":{"docs":{},"脚":{"docs":{},"本":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"根":{"docs":{},"目":{"docs":{},"录":{"docs":{},"下":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}},"是":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"样":{"docs":{},"的":{"docs":{},"目":{"docs":{},"录":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"这":{"docs":{},"些":{"docs":{},"名":{"docs":{},"称":{"docs":{},"含":{"docs":{},"义":{"docs":{},"太":{"docs":{},"泛":{"docs":{},"了":{"docs":{},",":{"docs":{},"违":{"docs":{},"背":{"docs":{},"了":{"docs":{},"单":{"docs":{},"一":{"docs":{},"职":{"docs":{},"责":{"docs":{},"原":{"docs":{},"则":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{},",":{"docs":{},"不":{"docs":{},"知":{"docs":{},"道":{"docs":{},"其":{"docs":{},"是":{"docs":{},"顶":{"docs":{},"级":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{},"还":{"docs":{},"是":{"docs":{},"导":{"docs":{},"入":{"docs":{},"包":{"docs":{},"中":{"docs":{},"的":{"docs":{},"顶":{"docs":{},"级":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"就":{"docs":{},"不":{"docs":{},"会":{"docs":{},"出":{"docs":{},"现":{"docs":{},"诸":{"docs":{},"如":{"docs":{},"“":{"docs":{},"连":{"docs":{},"接":{"docs":{},"被":{"docs":{},"拒":{"docs":{},"绝":{"docs":{},"”":{"docs":{},"之":{"docs":{},"类":{"docs":{},"的":{"docs":{},"模":{"docs":{},"糊":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}},"里":{"docs":{},"放":{"docs":{},"不":{"docs":{},"希":{"docs":{},"望":{"docs":{},"被":{"docs":{},"其":{"docs":{},"他":{"docs":{},"应":{"docs":{},"用":{"docs":{},"程":{"docs":{},"序":{"docs":{},"或":{"docs":{},"者":{"docs":{},"库":{"docs":{},"导":{"docs":{},"入":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{},"注":{"docs":{},"意":{"docs":{},":":{"docs":{},"从":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}},"希":{"docs":{},"望":{"docs":{},"被":{"docs":{},"其":{"docs":{},"他":{"docs":{},"应":{"docs":{},"用":{"docs":{},"程":{"docs":{},"序":{"docs":{},"或":{"docs":{},"者":{"docs":{},"库":{"docs":{},"导":{"docs":{},"入":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"在":{"docs":{},"这":{"docs":{},"里":{"docs":{},"放":{"docs":{},"东":{"docs":{},"西":{"docs":{},"之":{"docs":{},"前":{"docs":{},"要":{"docs":{},"三":{"docs":{},"思":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"是":{"docs":{},"服":{"docs":{},"务":{"docs":{},"对":{"docs":{},"外":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"定":{"docs":{},"义":{"docs":{},"接":{"docs":{},"口":{"docs":{},"时":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"遵":{"docs":{},"循":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}},"我":{"docs":{},"们":{"docs":{},"修":{"docs":{},"改":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},"介":{"docs":{},"绍":{"docs":{},"的":{"docs":{},"是":{"docs":{},"后":{"docs":{},"台":{"docs":{},"微":{"docs":{},"服":{"docs":{},"务":{"docs":{},"开":{"docs":{},"发":{"docs":{},"经":{"docs":{},"常":{"docs":{},"遇":{"docs":{},"到":{"docs":{},"的":{"docs":{},"一":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"。":{"docs":{},"我":{"docs":{},"们":{"docs":{},"经":{"docs":{},"常":{"docs":{},"需":{"docs":{},"要":{"docs":{},"并":{"docs":{},"发":{"docs":{},"拉":{"docs":{},"取":{"docs":{},"多":{"docs":{},"方":{"docs":{},"面":{"docs":{},"的":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"汇":{"docs":{},"聚":{"docs":{},"到":{"docs":{},"一":{"docs":{},"个":{"docs":{},"变":{"docs":{},"量":{"docs":{},"上":{"docs":{},"。":{"docs":{},"那":{"docs":{},"么":{"docs":{},"此":{"docs":{},"时":{"docs":{},"就":{"docs":{},"存":{"docs":{},"在":{"docs":{},"对":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"变":{"docs":{},"量":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"写":{"docs":{},"入":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},"批":{"docs":{},"量":{"docs":{},"并":{"docs":{},"发":{"docs":{},"拉":{"docs":{},"取":{"docs":{},"用":{"docs":{},"户":{"docs":{},"信":{"docs":{},"息":{"docs":{},"写":{"docs":{},"入":{"docs":{},"到":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"分":{"docs":{},"别":{"docs":{},"对":{"docs":{},"长":{"docs":{},"度":{"docs":{},"为":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}},"利":{"docs":{},"用":{"docs":{},"对":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}},"需":{"docs":{},"要":{"docs":{},"注":{"docs":{},"意":{"docs":{},"的":{"docs":{},"是":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"每":{"docs":{},"次":{"docs":{},"读":{"docs":{},"写":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}},"个":{"docs":{},"错":{"docs":{},"误":{"docs":{},"没":{"docs":{},"有":{"docs":{},"被":{"docs":{},"导":{"docs":{},"出":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"我":{"docs":{},"们":{"docs":{},"不":{"docs":{},"想":{"docs":{},"让":{"docs":{},"它":{"docs":{},"成":{"docs":{},"为":{"docs":{},"公":{"docs":{},"共":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"我":{"docs":{},"们":{"docs":{},"公":{"docs":{},"共":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}},"被":{"docs":{},"导":{"docs":{},"出":{"docs":{},",":{"docs":{},"以":{"docs":{},"便":{"docs":{},"这":{"docs":{},"个":{"docs":{},"包":{"docs":{},"的":{"docs":{},"用":{"docs":{},"户":{"docs":{},"可":{"docs":{},"以":{"docs":{},"将":{"docs":{},"它":{"docs":{},"与":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}},"例":{"docs":{},"子":{"docs":{},"创":{"docs":{},"建":{"docs":{},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}},"实":{"docs":{},"现":{"docs":{},"了":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"就":{"docs":{},"需":{"docs":{},"要":{"docs":{},"有":{"docs":{},"个":{"docs":{},"全":{"docs":{},"局":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{},"来":{"docs":{},"标":{"docs":{},"志":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"数":{"docs":{},"据":{"docs":{},"是":{"docs":{},"否":{"docs":{},"接":{"docs":{},"受":{"docs":{},"完":{"docs":{},"毕":{"docs":{},",":{"docs":{},"剩":{"docs":{},"下":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},",":{"docs":{},"反":{"docs":{},"复":{"docs":{},"检":{"docs":{},"查":{"docs":{},"该":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"值":{"docs":{},",":{"docs":{},"直":{"docs":{},"到":{"docs":{},"满":{"docs":{},"足":{"docs":{},"要":{"docs":{},"求":{"docs":{},"。":{"docs":{},"或":{"docs":{},"者":{"docs":{},"创":{"docs":{},"建":{"docs":{},"多":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"类":{"docs":{},"意":{"docs":{},"义":{"docs":{},"太":{"docs":{},"宽":{"docs":{},"泛":{"docs":{},"的":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}},"易":{"docs":{},"混":{"docs":{},"淆":{"docs":{},"名":{"docs":{},"称":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"会":{"docs":{},"精":{"docs":{},"简":{"docs":{},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},"函":{"docs":{},"数":{"docs":{},",":{"docs":{},"并":{"docs":{},"将":{"docs":{},"所":{"docs":{},"有":{"docs":{},"关":{"docs":{},"键":{"docs":{},"业":{"docs":{},"务":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"放":{"docs":{},"入":{"docs":{},"一":{"docs":{},"个":{"docs":{},"单":{"docs":{},"独":{"docs":{},"的":{"docs":{},"、":{"docs":{},"可":{"docs":{},"测":{"docs":{},"试":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"中":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"将":{"docs":{},"保":{"docs":{},"留":{"docs":{},"原":{"docs":{},"始":{"docs":{},"错":{"docs":{},"误":{"docs":{},"类":{"docs":{},"型":{"docs":{},"和":{"docs":{},"消":{"docs":{},"息":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}},"非":{"docs":{},"常":{"docs":{},"适":{"docs":{},"合":{"docs":{},"底":{"docs":{},"层":{"docs":{},"错":{"docs":{},"误":{"docs":{},"消":{"docs":{},"息":{"docs":{},"有":{"docs":{},"足":{"docs":{},"够":{"docs":{},"的":{"docs":{},"信":{"docs":{},"息":{"docs":{},"来":{"docs":{},"追":{"docs":{},"踪":{"docs":{},"它":{"docs":{},"来":{"docs":{},"自":{"docs":{},"哪":{"docs":{},"里":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"种":{"docs":{},"方":{"docs":{},"法":{"docs":{},"最":{"docs":{},"容":{"docs":{},"易":{"docs":{},"理":{"docs":{},"解":{"docs":{},",":{"docs":{},"重":{"docs":{},"新":{"docs":{},"使":{"docs":{},"用":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}},"么":{"docs":{},"设":{"docs":{},"计":{"docs":{},"的":{"docs":{},"目":{"docs":{},"的":{"docs":{},",":{"docs":{},"是":{"docs":{},"减":{"docs":{},"少":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}},"行":{"docs":{},"代":{"docs":{},"码":{"docs":{},"去":{"docs":{},"掉":{"docs":{},"呢":{"docs":{},"?":{"docs":{},"那":{"docs":{},"程":{"docs":{},"序":{"docs":{},"很":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"因":{"docs":{},"为":{"docs":{},"内":{"docs":{},"存":{"docs":{},"不":{"docs":{},"足":{"docs":{},"而":{"docs":{},"崩":{"docs":{},"溃":{"docs":{},"。":{"docs":{},"这":{"docs":{},"一":{"docs":{},"点":{"docs":{},"更":{"docs":{},"好":{"docs":{},"理":{"docs":{},"解":{"docs":{},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"至":{"docs":{},"少":{"docs":{},"需":{"docs":{},"要":{"docs":{},"消":{"docs":{},"耗":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"通":{"docs":{},"常":{"docs":{},"只":{"docs":{},"包":{"docs":{},"含":{"docs":{},"一":{"docs":{},"个":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}},"可":{"docs":{},"以":{"docs":{},"简":{"docs":{},"写":{"docs":{},"为":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}},"用":{"docs":{},"来":{"docs":{},"保":{"docs":{},"护":{"docs":{},"共":{"docs":{},"享":{"docs":{},"的":{"docs":{},"临":{"docs":{},"界":{"docs":{},"资":{"docs":{},"源":{"docs":{},",":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}},"用":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"应":{"docs":{},"用":{"docs":{},"目":{"docs":{},"录":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.005917159763313609}},"/":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{},"s":{"docs":{},"/":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"/":{"docs":{},"s":{"docs":{},"c":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},"t":{"docs":{},"s":{"docs":{},"/":{"docs":{},"b":{"docs":{},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{},"/":{"docs":{},"d":{"docs":{},"e":{"docs":{},"p":{"docs":{},"l":{"docs":{},"o":{"docs":{},"y":{"docs":{},"m":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},"s":{"docs":{},"/":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"/":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"m":{"docs":{},"d":{"2":{"docs":{},".":{"6":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"功":{"docs":{},"能":{"docs":{},"包":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"放":{"docs":{},"在":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}},"包":{"docs":{},"注":{"docs":{},"释":{"docs":{},"函":{"docs":{},"数":{"docs":{},"注":{"docs":{},"释":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"注":{"docs":{},"释":{"docs":{},"变":{"docs":{},"量":{"docs":{},"和":{"docs":{},"常":{"docs":{},"量":{"docs":{},"注":{"docs":{},"释":{"docs":{},"类":{"docs":{},"型":{"docs":{},"注":{"docs":{},"释":{"docs":{},"接":{"docs":{},"口":{"docs":{},"注":{"docs":{},"释":{"docs":{},"在":{"docs":{},"编":{"docs":{},"码":{"docs":{},"阶":{"docs":{},"段":{"docs":{},"同":{"docs":{},"步":{"docs":{},"写":{"docs":{},"好":{"docs":{},"类":{"docs":{},"型":{"docs":{},"、":{"docs":{},"变":{"docs":{},"量":{"docs":{},"、":{"docs":{},"函":{"docs":{},"数":{"docs":{},"、":{"docs":{},"包":{"docs":{},"注":{"docs":{},"释":{"docs":{},",":{"docs":{},"注":{"docs":{},"释":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"g":{"docs":{},"o":{"docs":{},"d":{"docs":{},"o":{"docs":{},"c":{"docs":{},"导":{"docs":{},"出":{"docs":{},"生":{"docs":{},"成":{"docs":{},"文":{"docs":{},"档":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"规":{"docs":{},"则":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"项":{"docs":{},"目":{"docs":{},"命":{"docs":{},"名":{"docs":{},"包":{"docs":{},"命":{"docs":{},"名":{"docs":{},"文":{"docs":{},"件":{"docs":{},"命":{"docs":{},"名":{"docs":{},"函":{"docs":{},"数":{"docs":{},"命":{"docs":{},"名":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"命":{"docs":{},"名":{"docs":{},"接":{"docs":{},"口":{"docs":{},"命":{"docs":{},"名":{"docs":{},"量":{"docs":{},"命":{"docs":{},"名":{"docs":{},"通":{"docs":{},"用":{"docs":{},"常":{"docs":{},"量":{"docs":{},"命":{"docs":{},"名":{"docs":{},"方":{"docs":{},"法":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"命":{"docs":{},"名":{"docs":{},"错":{"docs":{},"误":{"docs":{},"命":{"docs":{},"名":{"docs":{},"避":{"docs":{},"免":{"docs":{},"使":{"docs":{},"用":{"docs":{},"内":{"docs":{},"置":{"docs":{},"名":{"docs":{},"称":{"docs":{},"命":{"docs":{},"名":{"docs":{},"是":{"docs":{},"代":{"docs":{},"码":{"docs":{},"规":{"docs":{},"范":{"docs":{},"中":{"docs":{},"很":{"docs":{},"重":{"docs":{},"要":{"docs":{},"的":{"docs":{},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},",":{"docs":{},"统":{"docs":{},"一":{"docs":{},"的":{"docs":{},"命":{"docs":{},"名":{"docs":{},"规":{"docs":{},"范":{"docs":{},"有":{"docs":{},"利":{"docs":{},"于":{"docs":{},"提":{"docs":{},"高":{"docs":{},"代":{"docs":{},"码":{"docs":{},"的":{"docs":{},"可":{"docs":{},"读":{"docs":{},"性":{"docs":{},",":{"docs":{},"好":{"docs":{},"的":{"docs":{},"命":{"docs":{},"名":{"docs":{},"仅":{"docs":{},"仅":{"docs":{},"通":{"docs":{},"过":{"docs":{},"命":{"docs":{},"名":{"docs":{},"就":{"docs":{},"可":{"docs":{},"以":{"docs":{},"获":{"docs":{},"取":{"docs":{},"到":{"docs":{},"足":{"docs":{},"够":{"docs":{},"多":{"docs":{},"的":{"docs":{},"信":{"docs":{},"息":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"场":{"docs":{},"景":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"过":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}},"%":{"docs":{},"v":{"docs":{},"打":{"docs":{},"印":{"docs":{},"错":{"docs":{},"误":{"docs":{},"信":{"docs":{},"息":{"docs":{},"时":{"docs":{},"建":{"docs":{},"议":{"docs":{},"加":{"docs":{},"冒":{"docs":{},"号":{"docs":{},"。":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}},"其":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"隐":{"docs":{},"藏":{"docs":{},"基":{"docs":{},"础":{"docs":{},"类":{"docs":{},"型":{"docs":{},"为":{"docs":{},"这":{"docs":{},"些":{"docs":{},"操":{"docs":{},"作":{"docs":{},"增":{"docs":{},"加":{"docs":{},"了":{"docs":{},"类":{"docs":{},"型":{"docs":{},"安":{"docs":{},"全":{"docs":{},"性":{"docs":{},"。":{"docs":{},"此":{"docs":{},"外":{"docs":{},",":{"docs":{},"它":{"docs":{},"还":{"docs":{},"包":{"docs":{},"括":{"docs":{},"一":{"docs":{},"个":{"docs":{},"易":{"docs":{},"用":{"docs":{},"的":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"知":{"docs":{},"协":{"docs":{},"程":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":3.333333333333333}}}},"所":{"docs":{},"有":{"docs":{},"等":{"docs":{},"待":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"队":{"docs":{},"列":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"(":{"docs":{},"事":{"docs":{},"件":{"docs":{},"发":{"docs":{},"生":{"docs":{},")":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"通":{"docs":{},"知":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"等":{"docs":{},"待":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"或":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"部":{"docs":{},"署":{"docs":{},"的":{"docs":{},"应":{"docs":{},"用":{"docs":{},"程":{"docs":{},"序":{"docs":{},")":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"目":{"docs":{},"录":{"docs":{},"被":{"docs":{},"称":{"docs":{},"为":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}},"相":{"docs":{},"关":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}},"分":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"字":{"docs":{},"段":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}},"可":{"docs":{},"以":{"docs":{},"做":{"docs":{},"到":{"docs":{},"字":{"docs":{},"段":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}}},"配":{"docs":{},"置":{"docs":{},"信":{"docs":{},"息":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}},"文":{"docs":{},"件":{"docs":{},"的":{"docs":{},"命":{"docs":{},"令":{"docs":{},"行":{"docs":{},"参":{"docs":{},"数":{"docs":{},"名":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.014760147601476014}},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}},"读":{"docs":{},"取":{"docs":{},",":{"docs":{},"和":{"docs":{},"对":{"docs":{},"象":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"应":{"docs":{},"该":{"docs":{},"分":{"docs":{},"开":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"让":{"docs":{},"对":{"docs":{},"象":{"docs":{},"自":{"docs":{},"己":{"docs":{},"根":{"docs":{},"据":{"docs":{},"配":{"docs":{},"置":{"docs":{},"文":{"docs":{},"件":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},",":{"docs":{},"保":{"docs":{},"证":{"docs":{},"构":{"docs":{},"造":{"docs":{},"函":{"docs":{},"数":{"docs":{},"足":{"docs":{},"够":{"docs":{},"简":{"docs":{},"单":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"钩":{"docs":{},"子":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"帮":{"docs":{},"忙":{"docs":{},"我":{"docs":{},"们":{"docs":{},"在":{"docs":{},"代":{"docs":{},"码":{"docs":{},"提":{"docs":{},"交":{"docs":{},"时":{"docs":{},"完":{"docs":{},"成":{"docs":{},"一":{"docs":{},"些":{"docs":{},"检":{"docs":{},"测":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"分":{"docs":{},"支":{"docs":{},"名":{"docs":{},"称":{"docs":{},"和":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"页":{"docs":{},"面":{"docs":{},",":{"docs":{},"则":{"docs":{},"在":{"docs":{},"这":{"docs":{},"里":{"docs":{},"放":{"docs":{},"置":{"docs":{},"项":{"docs":{},"目":{"docs":{},"网":{"docs":{},"站":{"docs":{},"数":{"docs":{},"据":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}}}}}}}}}}}}}}}},")":{"docs":{},"。":{"docs":{"第一篇:项目布局/项目布局.html":{"ref":"第一篇:项目布局/项目布局.html","tf":0.0029585798816568047}}}},"%":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"d":{"docs":{},",":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}},"s":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}},"v":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.1111111111111111},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.010101010101010102},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}},"\\":{"docs":{},"n":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}}},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.022988505747126436},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},")":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}},"q":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"w":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}},"\"":{"docs":{},",":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}}},">":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.03508771929824561},"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.006578947368421052},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"=":{"2":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}},"docs":{}}},"n":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.010687022900763359}},"u":{"docs":{},"m":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.013237063778580024},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.015945330296127564}},",":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.03508771929824561}}},"b":{"docs":{},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.011389521640091117}},"}":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}},"i":{"docs":{},"l":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.009626955475330927},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.029182879377431907},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.02800658978583196},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.011904761904761904},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.038461538461538464},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.020202020202020204},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},",":{"docs":{},"另":{"docs":{},"一":{"docs":{},"个":{"docs":{},"不":{"docs":{},"是":{"docs":{},")":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"在":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"(":{"docs":{},"例":{"docs":{},"如":{"docs":{},"序":{"docs":{},"列":{"docs":{},"化":{"docs":{},")":{"docs":{},",":{"docs":{},"这":{"docs":{},"两":{"docs":{},"个":{"docs":{},"切":{"docs":{},"片":{"docs":{},"的":{"docs":{},"处":{"docs":{},"理":{"docs":{},"方":{"docs":{},"式":{"docs":{},"可":{"docs":{},"能":{"docs":{},"不":{"docs":{},"同":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"但":{"docs":{},"是":{"docs":{},"满":{"docs":{},"足":{"docs":{},"其":{"docs":{},"他":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"进":{"docs":{},"入":{"docs":{},"到":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}},";":{"docs":{},"对":{"docs":{},"于":{"docs":{},"结":{"docs":{},"构":{"docs":{},"类":{"docs":{},"型":{"docs":{},"是":{"docs":{},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}},"a":{"docs":{},"d":{"docs":{},"i":{"docs":{},"c":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}},"a":{"docs":{},"m":{"docs":{},"e":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},":":{"docs":{},"\\":{"docs":{},"\"":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"\\":{"docs":{},"\"":{"docs":{},"\"":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}}}}}}}}}},"e":{"docs":{},"w":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"(":{"docs":{},"t":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},".":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}}}},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},")":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}}}}},"t":{"docs":{},"u":{"docs":{},"d":{"docs":{},"e":{"docs":{},"n":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}},"p":{"docs":{},"p":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"a":{"docs":{},"t":{"docs":{},"t":{"docs":{},"r":{"docs":{},"m":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{},"(":{"docs":{},"c":{"docs":{},"t":{"docs":{},"x":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}},"t":{"docs":{},"a":{"docs":{},"t":{"docs":{},"t":{"docs":{},"r":{"docs":{},"m":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}},"s":{"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}}}}}}},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}}}}}}}},"d":{"docs":{},"a":{"docs":{},"y":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},":":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693}}},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},"e":{"docs":{},"r":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}}}}}}},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}},"(":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"t":{"docs":{},"/":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"l":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"o":{"docs":{},"s":{"docs":{},"t":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{},"(":{"docs":{},"\"":{"1":{"9":{"2":{"docs":{},".":{"0":{"docs":{},".":{"2":{"docs":{},".":{"0":{"docs":{},":":{"8":{"0":{"0":{"0":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{},"h":{"docs":{},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}},"docs":{}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{},":":{"8":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}},"docs":{}}},"docs":{},":":{"8":{"0":{"0":{"0":{"docs":{},"\"":{"docs":{},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"t":{"docs":{},"t":{"docs":{},".":{"docs":{},"g":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}}}}}}}}}}}}}},"v":{"docs":{},"a":{"docs":{},"c":{"docs":{},"u":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"x":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"o":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}}},":":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}},"c":{"docs":{},"e":{"docs":{},"s":{"docs":{},"s":{"docs":{},"a":{"docs":{},"r":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}},"o":{"docs":{},"r":{"docs":{},"m":{"docs":{},"a":{"docs":{},"l":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}}}}},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}},"e":{"docs":{},":":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"y":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},".":{"docs":{},"w":{"docs":{},"a":{"docs":{},"i":{"docs":{},"t":{"docs":{},"、":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"y":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"i":{"docs":{},"f":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"这":{"docs":{},"个":{"docs":{},"队":{"docs":{},"列":{"docs":{},"被":{"docs":{},"复":{"docs":{},"制":{"docs":{},"的":{"docs":{},"话":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"就":{"docs":{},"在":{"docs":{},"并":{"docs":{},"发":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},"导":{"docs":{},"致":{"docs":{},"不":{"docs":{},"同":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"n":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}},"w":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.03125}},")":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}},":":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}},"d":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}},"c":{"docs":{},"o":{"docs":{},"p":{"docs":{},"i":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}}},"s":{"docs":{},"/":{"docs":{},"o":{"docs":{},"p":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.03125},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.050314465408805034},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.02821316614420063},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.04332129963898917},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.018223234624145785},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.00916030534351145},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}},"t":{"docs":{},"o":{"docs":{},"h":{"docs":{},"l":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}}},"b":{"docs":{},"i":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"b":{"docs":{},"i":{"docs":{},"n":{"docs":{},"a":{"docs":{},"r":{"docs":{},"y":{"docs":{},"(":{"docs":{},"b":{"docs":{},"i":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}},"\"":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"禁":{"docs":{},"用":{"docs":{},"了":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"对":{"docs":{},"切":{"docs":{},"片":{"docs":{},"遍":{"docs":{},"历":{"docs":{},"的":{"docs":{},"优":{"docs":{},"化":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"没":{"docs":{},"有":{"docs":{},"该":{"docs":{},"选":{"docs":{},"项":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"上":{"docs":{},"面":{"docs":{},"三":{"docs":{},"种":{"docs":{},"遍":{"docs":{},"历":{"docs":{},"方":{"docs":{},"式":{"docs":{},"没":{"docs":{},"有":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"别":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}},"主":{"docs":{},"体":{"docs":{},"风":{"docs":{},"格":{"docs":{},"占":{"docs":{},"位":{"docs":{},"符":{"docs":{},"主":{"docs":{},"体":{"docs":{},"风":{"docs":{},"格":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}}}}},"要":{"docs":{},"原":{"docs":{},"因":{"docs":{},"是":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"调":{"docs":{},"对":{"docs":{},"条":{"docs":{},"件":{"docs":{},"的":{"docs":{},"检":{"docs":{},"查":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}},"占":{"docs":{},"位":{"docs":{},"符":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}},"据":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"空":{"docs":{},"间":{"docs":{},"大":{"docs":{},"小":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}},"空":{"docs":{},"间":{"docs":{},"一":{"docs":{},"致":{"docs":{},",":{"docs":{},"而":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}},"用":{"docs":{},"了":{"docs":{},",":{"docs":{},"其":{"docs":{},"他":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},",":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"在":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}},"保":{"docs":{},"存":{"docs":{},"代":{"docs":{},"码":{"docs":{},"时":{"docs":{},"可":{"docs":{},"设":{"docs":{},"置":{"docs":{},"自":{"docs":{},"动":{"docs":{},"执":{"docs":{},"行":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}}}}}}},"这":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"测":{"docs":{},"试":{"docs":{},"文":{"docs":{},"件":{"docs":{},"不":{"docs":{},"能":{"docs":{},"在":{"docs":{},"包":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}},"写":{"docs":{},"入":{"docs":{},"时":{"docs":{},"会":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}},"业":{"docs":{},"务":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"处":{"docs":{},"理":{"docs":{},"中":{"docs":{},"禁":{"docs":{},"止":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{},"预":{"docs":{},"先":{"docs":{},"分":{"docs":{},"配":{"docs":{},"的":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{},"时":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"不":{"docs":{},"会":{"docs":{},"报":{"docs":{},"告":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"诸":{"docs":{},"如":{"docs":{},"g":{"docs":{},"o":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"视":{"docs":{},"觉":{"docs":{},"上":{"docs":{},"是":{"docs":{},"相":{"docs":{},"似":{"docs":{},"的":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}}}}}}}},"编":{"docs":{},"译":{"docs":{},"时":{"docs":{},"验":{"docs":{},"证":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"合":{"docs":{},"理":{"docs":{},"性":{"docs":{},",":{"docs":{},"这":{"docs":{},"包":{"docs":{},"括":{"docs":{},":":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}},"接":{"docs":{},"收":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"返":{"docs":{},"回":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"高":{"docs":{},"负":{"docs":{},"载":{"docs":{},"下":{"docs":{},"被":{"docs":{},"填":{"docs":{},"满":{"docs":{},"并":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"写":{"docs":{},"入":{"docs":{},"者":{"docs":{},",":{"docs":{},"以":{"docs":{},"及":{"docs":{},"当":{"docs":{},"这":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"发":{"docs":{},"生":{"docs":{},"时":{"docs":{},"系":{"docs":{},"统":{"docs":{},"会":{"docs":{},"发":{"docs":{},"生":{"docs":{},"哪":{"docs":{},"些":{"docs":{},"变":{"docs":{},"化":{"docs":{},"。":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"为":{"docs":{},"返":{"docs":{},"回":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},"添":{"docs":{},"加":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"时":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"避":{"docs":{},"免":{"docs":{},"使":{"docs":{},"用":{"docs":{},"\"":{"docs":{},"f":{"docs":{},"a":{"docs":{},"i":{"docs":{},"l":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}},"调":{"docs":{},"用":{"docs":{},"失":{"docs":{},"败":{"docs":{},"时":{"docs":{},"传":{"docs":{},"播":{"docs":{},"错":{"docs":{},"误":{"docs":{},"有":{"docs":{},"三":{"docs":{},"个":{"docs":{},"主":{"docs":{},"要":{"docs":{},"方":{"docs":{},"式":{"docs":{},":":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}},"处":{"docs":{},"理":{"docs":{},"时":{"docs":{},"间":{"docs":{},"的":{"docs":{},"瞬":{"docs":{},"间":{"docs":{},"时":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"在":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308}}}}}}}}}}}}},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"有":{"docs":{},"更":{"docs":{},"多":{"docs":{},"分":{"docs":{},"配":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}},"迭":{"docs":{},"代":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},"返":{"docs":{},"回":{"docs":{},"的":{"docs":{},"是":{"docs":{},"元":{"docs":{},"素":{"docs":{},"的":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},",":{"docs":{},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"x":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}},"部":{"docs":{},"分":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},",":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"只":{"docs":{},"包":{"docs":{},"含":{"docs":{},"方":{"docs":{},"法":{"docs":{},",":{"docs":{},"不":{"docs":{},"包":{"docs":{},"含":{"docs":{},"任":{"docs":{},"何":{"docs":{},"的":{"docs":{},"字":{"docs":{},"段":{"docs":{},"。":{"docs":{},"例":{"docs":{},"如":{"docs":{},"上":{"docs":{},"面":{"docs":{},"例":{"docs":{},"子":{"docs":{},"中":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"多":{"docs":{},"数":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}},"热":{"docs":{},"路":{"docs":{},"径":{"docs":{},"中":{"docs":{},",":{"docs":{},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"占":{"docs":{},"位":{"docs":{},"符":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"输":{"docs":{},"入":{"docs":{},"数":{"docs":{},"据":{"docs":{},"来":{"docs":{},"自":{"docs":{},"外":{"docs":{},"部":{"docs":{},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"使":{"docs":{},"用":{"docs":{},"%":{"docs":{},"q":{"docs":{},"进":{"docs":{},"行":{"docs":{},"安":{"docs":{},"全":{"docs":{},"转":{"docs":{},"义":{"docs":{},"。":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}},"拼":{"docs":{},"接":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}},"还":{"docs":{},"有":{"docs":{},"其":{"docs":{},"他":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},".":{"docs":{},"j":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},"、":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"、":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"和":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"[":{"docs":{},"]":{"docs":{},",":{"docs":{},"这":{"docs":{},"几":{"docs":{},"种":{"docs":{},"不":{"docs":{},"适":{"docs":{},"合":{"docs":{},"行":{"docs":{},"内":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{},"当":{"docs":{},"待":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"数":{"docs":{},"量":{"docs":{},"较":{"docs":{},"多":{"docs":{},"时":{"docs":{},"可":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"搜":{"docs":{},"索":{"docs":{},"存":{"docs":{},"在":{"docs":{},"二":{"docs":{},"义":{"docs":{},"性":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},",":{"docs":{},"并":{"docs":{},"通":{"docs":{},"过":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}},";":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"节":{"docs":{},"数":{"docs":{},"组":{"docs":{},"读":{"docs":{},"取":{"docs":{},"接":{"docs":{},"口":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"。":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.027586206896551724}}},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"的":{"docs":{},"空":{"docs":{},"间":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}},",":{"docs":{},"与":{"docs":{},"字":{"docs":{},"段":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"即":{"docs":{},"额":{"docs":{},"外":{"docs":{},"填":{"docs":{},"充":{"docs":{},"了":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}},"那":{"docs":{},"么":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"缓":{"docs":{},"冲":{"docs":{},"器":{"docs":{},"为":{"docs":{},"例":{"docs":{},",":{"docs":{},"利":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}},"工":{"docs":{},"具":{"docs":{},"格":{"docs":{},"式":{"docs":{},"化":{"docs":{},"。":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}},"生":{"docs":{},"成":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}},"自":{"docs":{},"动":{"docs":{},"格":{"docs":{},"式":{"docs":{},"化":{"docs":{},"引":{"docs":{},"入":{"docs":{},"的":{"docs":{},"包":{"docs":{},"名":{"docs":{},",":{"docs":{},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}},"生":{"docs":{},"成":{"docs":{},"文":{"docs":{},"件":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"可":{"docs":{},"以":{"docs":{},"帮":{"docs":{},"我":{"docs":{},"们":{"docs":{},"静":{"docs":{},"态":{"docs":{},"分":{"docs":{},"析":{"docs":{},"我":{"docs":{},"们":{"docs":{},"的":{"docs":{},"源":{"docs":{},"码":{"docs":{},"存":{"docs":{},"在":{"docs":{},"的":{"docs":{},"各":{"docs":{},"种":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{},"多":{"docs":{},"余":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"提":{"docs":{},"前":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"并":{"docs":{},"指":{"docs":{},"定":{"docs":{},"作":{"docs":{},"用":{"docs":{},"范":{"docs":{},"围":{"docs":{},"。":{"docs":{"第二篇:代码风格/1.格式化.html":{"ref":"第二篇:代码风格/1.格式化.html","tf":0.017543859649122806}}}}}}}}},"且":{"docs":{},"标":{"docs":{},"明":{"docs":{},"后":{"docs":{},"续":{"docs":{},"处":{"docs":{},"理":{"docs":{},"建":{"docs":{},"议":{"docs":{},"(":{"docs":{},"如":{"docs":{},"删":{"docs":{},"除":{"docs":{},"计":{"docs":{},"划":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}},"没":{"docs":{},"有":{"docs":{},"关":{"docs":{},"键":{"docs":{},"字":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}},"提":{"docs":{},"供":{"docs":{},"删":{"docs":{},"除":{"docs":{},"切":{"docs":{},"片":{"docs":{},"元":{"docs":{},"素":{"docs":{},"专":{"docs":{},"用":{"docs":{},"的":{"docs":{},"语":{"docs":{},"法":{"docs":{},"或":{"docs":{},"函":{"docs":{},"数":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"切":{"docs":{},"片":{"docs":{},"本":{"docs":{},"身":{"docs":{},"的":{"docs":{},"特":{"docs":{},"性":{"docs":{},"来":{"docs":{},"删":{"docs":{},"除":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"发":{"docs":{},"写":{"docs":{},"入":{"docs":{},"有":{"docs":{},"锁":{"docs":{},"链":{"docs":{},"表":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}},"不":{"docs":{},"是":{"docs":{},"必":{"docs":{},"须":{"docs":{},"的":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},",":{"docs":{},"这":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"出":{"docs":{},"现":{"docs":{},"有":{"docs":{},"些":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}},"!":{"docs":{},"=":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.018518518518518517},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.019455252918287938},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.026359143327841845},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.008503401360544218},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.03076923076923077},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.020202020202020204},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}},"o":{"docs":{},"k":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"a":{"docs":{},"l":{"docs":{},"l":{"docs":{},"o":{"docs":{},"w":{"docs":{},"u":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"i":{"docs":{},"n":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},"i":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}}}}}}}}},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}}},"+":{"0":{"docs":{},"x":{"1":{"1":{"docs":{},"b":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"4":{"8":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"docs":{}},"6":{"5":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"7":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"5":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"8":{"docs":{},"f":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}}},"1":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.034482758620689655},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259}},"=":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335}}}},".":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.012903225806451613},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.012578616352201259},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}},".":{"docs":{},".":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.018050541516245487},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.004934210526315789},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.026359143327841845},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.017006802721088437},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.049019607843137254},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.010869565217391304},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.011834319526627219},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}},".":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"6":{"4":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"docs":{}},"docs":{}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"{":{"docs":{},"}":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}}}}}}}}}}}}}}},"形":{"docs":{},"式":{"docs":{},"导":{"docs":{},"入":{"docs":{},"包":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"它":{"docs":{},"使":{"docs":{},"程":{"docs":{},"序":{"docs":{},"难":{"docs":{},"以":{"docs":{},"阅":{"docs":{},"读":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}},"/":{"docs":{},"m":{"docs":{},"a":{"docs":{},"i":{"docs":{},"n":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},":":{"5":{"docs":{},":":{"1":{"2":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893}}}},"docs":{}},"docs":{}}},"9":{"docs":{},":":{"1":{"2":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}}},"docs":{}}}}}}}}}}},":":{"docs":{},"=":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.013888888888888888},"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.06896551724137931},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.03730445246690734},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.021400778210116732},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.008223684210526315},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.04612850082372323},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.034013605442176874},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.016304347826086956},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.04411764705882353},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.03076923076923077},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.05555555555555555},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.020202020202020204},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.03125},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.040100250626566414},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.04697986577181208},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.03773584905660377},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.02821316614420063},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.036101083032490974},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.011695906432748537},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.025056947608200455},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.010256410256410256},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0366412213740458},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.02050113895216401},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}},"[":{"1":{"0":{"2":{"4":{"docs":{},"]":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"每":{"docs":{},"次":{"docs":{},"遍":{"docs":{},"历":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}},"docs":{}},"docs":{}},"docs":{}},"4":{"docs":{},"]":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"docs":{},"]":{"docs":{},"f":{"docs":{},"l":{"docs":{},"o":{"docs":{},"a":{"docs":{},"t":{"6":{"4":{"docs":{},"{":{"1":{"docs":{},".":{"0":{"docs":{},",":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}},"docs":{}}},"docs":{}}},"docs":{}},"docs":{}}}}}},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"{":{"docs":{},"\"":{"docs":{},"t":{"docs":{},"o":{"docs":{},"m":{"docs":{},"\"":{"docs":{},",":{"docs":{},"\"":{"docs":{},"j":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"y":{"docs":{},"\"":{"docs":{},",":{"docs":{},"\"":{"docs":{},"s":{"docs":{},"p":{"docs":{},"i":{"docs":{},"k":{"docs":{},"e":{"docs":{},"\"":{"docs":{},"}":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}},"a":{"docs":{},"\"":{"docs":{},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}},"u":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.01567398119122257}},"{":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.021660649819494584}},"{":{"1":{"docs":{},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}},"docs":{},"}":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635}}}},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}},"e":{"docs":{},"r":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},"{":{"docs":{},"}":{"docs":{},"{":{"docs":{},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"6":{"4":{"docs":{},"(":{"1":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}},"docs":{}}},"docs":{}},"docs":{}}}}}}}}}}}}}},"。":{"docs":{},"但":{"docs":{},"如":{"docs":{},"果":{"docs":{},"迭":{"docs":{},"代":{"docs":{},"的":{"docs":{},"元":{"docs":{},"素":{"docs":{},"较":{"docs":{},"大":{"docs":{},",":{"docs":{},"如":{"docs":{},"一":{"docs":{},"个":{"docs":{},"包":{"docs":{},"含":{"docs":{},"很":{"docs":{},"多":{"docs":{},"属":{"docs":{},"性":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.01444043321299639}}}}},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{},",":{"docs":{},"都":{"docs":{},"会":{"docs":{},"进":{"docs":{},"行":{"docs":{},"一":{"docs":{},"次":{"docs":{},"值":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"带":{"docs":{},"来":{"docs":{},"了":{"docs":{},"性":{"docs":{},"能":{"docs":{},"损":{"docs":{},"耗":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}}}}}}},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},")":{"docs":{},"{":{"docs":{},"}":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}}}}}}}},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"p":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}},"u":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"6":{"4":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"{":{"1":{"docs":{},",":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"docs":{}}},"docs":{}},"docs":{}}}}},"*":{"docs":{},"i":{"docs":{},"t":{"docs":{},"e":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028}}}}}}}},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"n":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"]":{"docs":{},":":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}},"p":{"docs":{},"r":{"docs":{},"e":{"docs":{},"d":{"docs":{},"e":{"docs":{},"c":{"docs":{},"l":{"docs":{},"a":{"docs":{},"r":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}},"s":{"docs":{},"t":{"docs":{},"y":{"docs":{},"l":{"docs":{},"e":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"c":{"docs":{},"a":{"docs":{},"p":{"docs":{},"a":{"docs":{},"c":{"docs":{},"i":{"docs":{},"t":{"docs":{},"y":{"docs":{},"]":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893}}}}}}}}}}}}}}},"{":{"0":{"docs":{},"x":{"docs":{},"c":{"1":{"2":{"docs":{},"c":{"docs":{},"a":{"docs":{},"d":{"docs":{},"f":{"6":{"9":{"0":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}}},"docs":{}},"docs":{}},"docs":{}}}}},"e":{"docs":{},"a":{"6":{"2":{"docs":{},"f":{"9":{"0":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"docs":{}},"docs":{}}},"docs":{}},"docs":{}}}},"docs":{}},"docs":{}}}},"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.037037037037037035},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.03489771359807461},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.054474708171206226},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.029605263157894735},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.09060955518945635},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.061224489795918366},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.03680981595092025},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.04938271604938271},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.058823529411764705},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.02717391304347826},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.029411764705882353},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.06923076923076923},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.049586776859504134},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.05387205387205387},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.03153153153153153},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0784313725490196},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0703125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.0650887573964497},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.02506265664160401},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.01567398119122257},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.04332129963898917},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.04678362573099415},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.020689655172413793},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.022779043280182234},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.02564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.03969465648854962},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.01366742596810934},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.026607538802660754},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.023090586145648313}},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"g":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},":":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"s":{"docs":{},"u":{"docs":{},"b":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}},".":{"docs":{},".":{"docs":{},".":{"docs":{},"}":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.006802721088435374}}}}}},"\"":{"docs":{},"a":{"docs":{},"\"":{"docs":{},"}":{"docs":{},"}":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176}}}}}},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"\"":{"docs":{},":":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}},"m":{"docs":{},"i":{"docs":{},"l":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"\"":{"docs":{},":":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}},"}":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.014705882352941176},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}},"h":{"docs":{},"e":{"docs":{},"a":{"docs":{},"p":{"docs":{},"}":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}},"}":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.037037037037037035},"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0457280385078219},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.04669260700389105},"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.01107011070110701},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.03125},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.09060955518945635},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.06292517006802721},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.012269938650306749},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.04938271604938271},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.058823529411764705},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.02717391304347826},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.029411764705882353},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.06153846153846154},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.06611570247933884},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.05387205387205387},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.02702702702702703},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.0784313725490196},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0703125},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.0650887573964497},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.015037593984962405},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.032490974729241874},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.04093567251461988},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.020689655172413793},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.00683371298405467},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.020512820512820513},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.035114503816793895},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.024390243902439025},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.017761989342806393}},"{":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.007782101167315175},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}},",":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.024539877300613498},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.007692307692307693}}}},"一":{"docs":{},"行":{"docs":{},"代":{"docs":{},"码":{"docs":{},"不":{"docs":{},"要":{"docs":{},"超":{"docs":{},"过":{"1":{"2":{"0":{"docs":{},"列":{"docs":{},",":{"docs":{},"超":{"docs":{},"过":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"合":{"docs":{},"理":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"换":{"docs":{},"行":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}}}}}}}},"份":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}},"个":{"docs":{},"可":{"docs":{},"能":{"docs":{},"引":{"docs":{},"发":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},"就":{"docs":{},"是":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}},"函":{"docs":{},"数":{"docs":{},"内":{"docs":{},"不":{"docs":{},"应":{"docs":{},"该":{"docs":{},"混":{"docs":{},"杂":{"docs":{},"多":{"docs":{},"个":{"docs":{},"实":{"docs":{},"现":{"docs":{},"细":{"docs":{},"节":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"将":{"docs":{},"独":{"docs":{},"立":{"docs":{},"的":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"封":{"docs":{},"装":{"docs":{},"成":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"只":{"docs":{},"负":{"docs":{},"责":{"docs":{},"一":{"docs":{},"个":{"docs":{},"职":{"docs":{},"责":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}},"文":{"docs":{},"件":{"docs":{},"中":{"docs":{},"出":{"docs":{},"现":{"docs":{},"多":{"docs":{},"个":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"时":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"注":{"docs":{},"意":{"docs":{},"观":{"docs":{},"察":{"docs":{},"是":{"docs":{},"否":{"docs":{},"有":{"docs":{},"重":{"docs":{},"复":{"docs":{},"的":{"docs":{},"成":{"docs":{},"员":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"中":{"docs":{},",":{"docs":{},"成":{"docs":{},"员":{"docs":{},"较":{"docs":{},"多":{"docs":{},",":{"docs":{},"且":{"docs":{},"多":{"docs":{},"个":{"docs":{},"成":{"docs":{},"员":{"docs":{},"有":{"docs":{},"明":{"docs":{},"显":{"docs":{},"关":{"docs":{},"联":{"docs":{},"关":{"docs":{},"系":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"封":{"docs":{},"装":{"docs":{},"新":{"docs":{},"的":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"起":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"旦":{"docs":{},"有":{"docs":{},"错":{"docs":{},"误":{"docs":{},"发":{"docs":{},"生":{"docs":{},",":{"docs":{},"马":{"docs":{},"上":{"docs":{},"返":{"docs":{},"回":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}},"次":{"docs":{},"循":{"docs":{},"环":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"只":{"docs":{},"做":{"docs":{},"一":{"docs":{},"件":{"docs":{},"事":{"docs":{},",":{"docs":{},"不":{"docs":{},"用":{"docs":{},"担":{"docs":{},"心":{"docs":{},"多":{"docs":{},"次":{"docs":{},"循":{"docs":{},"环":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}},"种":{"docs":{},"是":{"docs":{},"不":{"docs":{},"含":{"docs":{},"任":{"docs":{},"何":{"docs":{},"方":{"docs":{},"法":{"docs":{},"的":{"docs":{},"空":{"docs":{},"接":{"docs":{},"口":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},":":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}}}}}}}},"带":{"docs":{},"有":{"docs":{},"一":{"docs":{},"组":{"docs":{},"方":{"docs":{},"法":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"r":{"docs":{},"u":{"docs":{},"n":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"i":{"docs":{},"f":{"docs":{},"a":{"docs":{},"c":{"docs":{},"e":{"docs":{},":":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}}}}}}}}},"分":{"docs":{},"钟":{"docs":{},"有":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"周":{"docs":{},"有":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}},"天":{"docs":{},"有":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}},"小":{"docs":{},"时":{"docs":{},"有":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"年":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"般":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"对":{"docs":{},"于":{"docs":{},"需":{"docs":{},"要":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"或":{"docs":{},"占":{"docs":{},"用":{"docs":{},"内":{"docs":{},"存":{"docs":{},"比":{"docs":{},"较":{"docs":{},"大":{"docs":{},"的":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"返":{"docs":{},"回":{"docs":{},"指":{"docs":{},"针":{"docs":{},"。":{"docs":{},"对":{"docs":{},"于":{"docs":{},"只":{"docs":{},"读":{"docs":{},"或":{"docs":{},"占":{"docs":{},"用":{"docs":{},"内":{"docs":{},"存":{"docs":{},"较":{"docs":{},"小":{"docs":{},"的":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"能":{"docs":{},"够":{"docs":{},"获":{"docs":{},"得":{"docs":{},"更":{"docs":{},"好":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"来":{"docs":{},"说":{"docs":{},",":{"docs":{},"有":{"docs":{},"如":{"docs":{},"下":{"docs":{},"几":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}},"句":{"docs":{},"话":{"docs":{},"总":{"docs":{},"结":{"docs":{},":":{"docs":{},"用":{"docs":{},"来":{"docs":{},"保":{"docs":{},"存":{"docs":{},"和":{"docs":{},"复":{"docs":{},"用":{"docs":{},"临":{"docs":{},"时":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"减":{"docs":{},"少":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},",":{"docs":{},"降":{"docs":{},"低":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"例":{"docs":{},"外":{"docs":{},"场":{"docs":{},"景":{"docs":{},":":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"是":{"docs":{},"相":{"docs":{},"似":{"docs":{},"的":{"docs":{},"一":{"docs":{},"组":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"请":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}},":":{"docs":{},"在":{"docs":{},"字":{"docs":{},"段":{"docs":{},"名":{"docs":{},"提":{"docs":{},"供":{"docs":{},"有":{"docs":{},"意":{"docs":{},"义":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"的":{"docs":{},"地":{"docs":{},"方":{"docs":{},"可":{"docs":{},"以":{"docs":{},"显":{"docs":{},"示":{"docs":{},"指":{"docs":{},"定":{"docs":{},"零":{"docs":{},"值":{"docs":{},"。":{"docs":{},"如":{"docs":{},"表":{"docs":{},"驱":{"docs":{},"动":{"docs":{},"单":{"docs":{},"元":{"docs":{},"测":{"docs":{},"试":{"docs":{},"中":{"docs":{},"的":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{},"例":{"docs":{},",":{"docs":{},"即":{"docs":{},"使":{"docs":{},"字":{"docs":{},"段":{"docs":{},"为":{"docs":{},"零":{"docs":{},"值":{"docs":{},",":{"docs":{},"限":{"docs":{},"制":{"docs":{},"指":{"docs":{},"定":{"docs":{},"零":{"docs":{},"值":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"字":{"docs":{},"段":{"docs":{},"名":{"docs":{},"可":{"docs":{},"清":{"docs":{},"晰":{"docs":{},"地":{"docs":{},"表":{"docs":{},"达":{"docs":{},"用":{"docs":{},"例":{"docs":{},"的":{"docs":{},"含":{"docs":{},"义":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"如":{"docs":{},"果":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},"有":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"如":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"s":{"docs":{},".":{"docs":{},"n":{"docs":{},"e":{"docs":{},"w":{"docs":{},"表":{"docs":{},"示":{"docs":{},"带":{"docs":{},"有":{"docs":{},"静":{"docs":{},"态":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"需":{"docs":{},"要":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"并":{"docs":{},"处":{"docs":{},"理":{"docs":{},"此":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"则":{"docs":{},"将":{"docs":{},"此":{"docs":{},"错":{"docs":{},"误":{"docs":{},"导":{"docs":{},"出":{"docs":{},"为":{"docs":{},"变":{"docs":{},"量":{"docs":{},"以":{"docs":{},"支":{"docs":{},"持":{"docs":{},"将":{"docs":{},"其":{"docs":{},"与":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},"s":{"docs":{},".":{"docs":{},"i":{"docs":{},"s":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{},"一":{"docs":{},"个":{"docs":{},"时":{"docs":{},"间":{"docs":{},"点":{"docs":{},"上":{"docs":{},"加":{"docs":{},"上":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}},"由":{"docs":{},"于":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}},"括":{"docs":{},"号":{"docs":{},"和":{"docs":{},"空":{"docs":{},"格":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}},"换":{"docs":{},"行":{"docs":{},"方":{"docs":{},"式":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}},"文":{"docs":{},"件":{"docs":{},"长":{"docs":{},"度":{"docs":{},"不":{"docs":{},"能":{"docs":{},"超":{"docs":{},"过":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}},"中":{"docs":{},"(":{"docs":{},"一":{"docs":{},"般":{"docs":{},"是":{"docs":{},"和":{"docs":{},"包":{"docs":{},"同":{"docs":{},"名":{"docs":{},"的":{"docs":{},"文":{"docs":{},"件":{"docs":{},")":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"出":{"docs":{},"现":{"docs":{},"在":{"docs":{},"一":{"docs":{},"个":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}},"名":{"docs":{},"应":{"docs":{},"该":{"docs":{},"采":{"docs":{},"用":{"docs":{},"小":{"docs":{},"写":{"docs":{},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"使":{"docs":{},"用":{"docs":{},"下":{"docs":{},"划":{"docs":{},"线":{"docs":{},"分":{"docs":{},"割":{"docs":{},"各":{"docs":{},"个":{"docs":{},"单":{"docs":{},"词":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"模":{"docs":{},"块":{"docs":{},"语":{"docs":{},"句":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}},"式":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}},"拟":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"行":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.009259259259259259}}},"数":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}},"长":{"docs":{},"度":{"docs":{},"换":{"docs":{},"行":{"docs":{},"方":{"docs":{},"式":{"docs":{},"不":{"docs":{},"必":{"docs":{},"要":{"docs":{},"的":{"docs":{},"空":{"docs":{},"行":{"docs":{},"括":{"docs":{},"号":{"docs":{},"和":{"docs":{},"空":{"docs":{},"格":{"docs":{},"行":{"docs":{},"数":{"docs":{},"行":{"docs":{},"长":{"docs":{},"度":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}}}}}}}}}}}}}}}}},"内":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"时":{"docs":{},",":{"docs":{},"出":{"docs":{},"于":{"docs":{},"性":{"docs":{},"能":{"docs":{},"的":{"docs":{},"考":{"docs":{},"虑":{"docs":{},",":{"docs":{},"待":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"数":{"docs":{},"量":{"docs":{},"较":{"docs":{},"少":{"docs":{},"(":{"docs":{},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"拼":{"docs":{},"接":{"docs":{},",":{"docs":{},"主":{"docs":{},"要":{"docs":{},"追":{"docs":{},"求":{"docs":{},"的":{"docs":{},"是":{"docs":{},"代":{"docs":{},"码":{"docs":{},"的":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"可":{"docs":{},"读":{"docs":{},"。":{"docs":{},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"拼":{"docs":{},"接":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"为":{"docs":{},"了":{"docs":{},"书":{"docs":{},"写":{"docs":{},"方":{"docs":{},"便":{"docs":{},"快":{"docs":{},"捷":{"docs":{},",":{"docs":{},"最":{"docs":{},"常":{"docs":{},"用":{"docs":{},"的":{"docs":{},"两":{"docs":{},"个":{"docs":{},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"不":{"docs":{},"要":{"docs":{},"用":{"docs":{},"单":{"docs":{},"字":{"docs":{},"符":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}},")":{"docs":{},"。":{"docs":{},"单":{"docs":{},"测":{"docs":{},"函":{"docs":{},"数":{"docs":{},"行":{"docs":{},"数":{"docs":{},"限":{"docs":{},"制":{"docs":{},"也":{"docs":{},"是":{"docs":{},"普":{"docs":{},"通":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"2":{"docs":{},"倍":{"docs":{},"(":{"1":{"6":{"0":{"docs":{},"行":{"docs":{},")":{"docs":{},"。":{"docs":{},"圈":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"度":{"docs":{},"、":{"docs":{},"列":{"docs":{},"数":{"docs":{},"限":{"docs":{},"制":{"docs":{},"、":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}}}},"docs":{}},"docs":{}},"docs":{}}}},"docs":{}}}}}}}}}}}}}}}}}}},"运":{"docs":{},"算":{"docs":{},"符":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}},"和":{"docs":{},"操":{"docs":{},"作":{"docs":{},"数":{"docs":{},"之":{"docs":{},"间":{"docs":{},"要":{"docs":{},"留":{"docs":{},"空":{"docs":{},"格":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}}}}}},"+":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}},"行":{"docs":{},"结":{"docs":{},"果":{"docs":{},":":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},",":{"docs":{},"注":{"docs":{},"意":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"基":{"docs":{},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},",":{"docs":{},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}},"将":{"docs":{},"得":{"docs":{},"到":{"docs":{},"如":{"docs":{},"下":{"docs":{},"结":{"docs":{},"果":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.004555808656036446}}}}}}}}}}},"例":{"docs":{},"子":{"docs":{},"将":{"docs":{},"会":{"docs":{},"输":{"docs":{},"出":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028}}}}}}}}},"时":{"docs":{},"管":{"docs":{},"理":{"docs":{},"的":{"docs":{},"轻":{"docs":{},"量":{"docs":{},"级":{"docs":{},"线":{"docs":{},"程":{"docs":{},"。":{"docs":{},"通":{"docs":{},"过":{"docs":{},"它":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"轻":{"docs":{},"松":{"docs":{},"实":{"docs":{},"现":{"docs":{},"并":{"docs":{},"发":{"docs":{},"编":{"docs":{},"程":{"docs":{},"。":{"docs":{},"但":{"docs":{},"是":{"docs":{},"当":{"docs":{},"我":{"docs":{},"们":{"docs":{},"无":{"docs":{},"限":{"docs":{},"开":{"docs":{},"辟":{"docs":{},"协":{"docs":{},"程":{"docs":{},"时":{"docs":{},",":{"docs":{},"将":{"docs":{},"会":{"docs":{},"遇":{"docs":{},"到":{"docs":{},"致":{"docs":{},"命":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"它":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"轻":{"docs":{},"松":{"docs":{},"实":{"docs":{},"现":{"docs":{},"并":{"docs":{},"发":{"docs":{},"编":{"docs":{},"程":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"结":{"docs":{},"果":{"docs":{},"是":{"docs":{},"程":{"docs":{},"序":{"docs":{},"直":{"docs":{},"接":{"docs":{},"崩":{"docs":{},"溃":{"docs":{},"了":{"docs":{},",":{"docs":{},"关":{"docs":{},"键":{"docs":{},"的":{"docs":{},"报":{"docs":{},"错":{"docs":{},"信":{"docs":{},"息":{"docs":{},"是":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}},"输":{"docs":{},"出":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.004555808656036446}}},"如":{"docs":{},"下":{"docs":{},",":{"docs":{},"注":{"docs":{},"意":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"遵":{"docs":{},"循":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}},"采":{"docs":{},"用":{"docs":{},"惰":{"docs":{},"性":{"docs":{},"换":{"docs":{},"行":{"docs":{},",":{"docs":{},"换":{"docs":{},"行":{"docs":{},"前":{"docs":{},"应":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"占":{"docs":{},"满":{"docs":{},"当":{"docs":{},"前":{"docs":{},"行":{"docs":{},"不":{"docs":{},"留":{"docs":{},"空":{"docs":{},"位":{"docs":{},"。":{"docs":{"第二篇:代码风格/2.代码行.html":{"ref":"第二篇:代码风格/2.代码行.html","tf":0.004629629629629629}}}}}}}}}}}}}}}}}}}}}}}},"独":{"docs":{},"立":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},"流":{"docs":{},"进":{"docs":{},"行":{"docs":{},"处":{"docs":{},"理":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}},"有":{"docs":{},"意":{"docs":{},"义":{"docs":{},"、":{"docs":{},"简":{"docs":{},"短":{"docs":{},"的":{"docs":{},"文":{"docs":{},"件":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}},"驼":{"docs":{},"峰":{"docs":{},"命":{"docs":{},"名":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"首":{"docs":{},"字":{"docs":{},"母":{"docs":{},"根":{"docs":{},"据":{"docs":{},"访":{"docs":{},"问":{"docs":{},"控":{"docs":{},"制":{"docs":{},"采":{"docs":{},"用":{"docs":{},"大":{"docs":{},"写":{"docs":{},"或":{"docs":{},"者":{"docs":{},"小":{"docs":{},"写":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"`":{"docs":{},"u":{"docs":{},"n":{"docs":{},"k":{"docs":{},"n":{"docs":{},"o":{"docs":{},"w":{"docs":{},"n":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}}}},"`":{"docs":{},"`":{"docs":{},"g":{"docs":{},"o":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.007782101167315175},"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.006589785831960461},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"s":{"docs":{},"h":{"docs":{},"e":{"docs":{},"l":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"e":{"docs":{},"l":{"docs":{},"d":{"docs":{},"s":{"docs":{},"`":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.023076923076923078}}}}}}}}},"j":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{},":":{"docs":{},"\"":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"a":{"docs":{},"l":{"docs":{},"\"":{"docs":{},"`":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}},"m":{"docs":{},"i":{"docs":{},"l":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"\"":{"docs":{},"`":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"e":{"docs":{},"`":{"docs":{},"。":{"docs":{},"但":{"docs":{},"是":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"我":{"docs":{},"们":{"docs":{},"想":{"docs":{},"保":{"docs":{},"证":{"docs":{},"某":{"docs":{},"一":{"docs":{},"时":{"docs":{},"刻":{"docs":{},"比":{"docs":{},"前":{"docs":{},"一":{"docs":{},"时":{"docs":{},"刻":{"docs":{},"晚":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"支":{"docs":{},"持":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009}},"使":{"docs":{},"用":{"docs":{},"原":{"docs":{},"始":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"字":{"docs":{},"面":{"docs":{},"值":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{},"反":{"docs":{},"引":{"docs":{},"号":{"docs":{},"来":{"docs":{},"表":{"docs":{},"示":{"docs":{},"原":{"docs":{},"生":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"。":{"docs":{},"在":{"docs":{},"需":{"docs":{},"要":{"docs":{},"转":{"docs":{},"义":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"使":{"docs":{},"用":{"docs":{},"使":{"docs":{},"用":{"docs":{},"反":{"docs":{},"引":{"docs":{},"号":{"docs":{},"表":{"docs":{},"示":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"转":{"docs":{},"义":{"docs":{},"。":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"将":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009}}}}},"结":{"docs":{},"构":{"docs":{},"。":{"docs":{"第二篇:代码风格/3.字符串.html":{"ref":"第二篇:代码风格/3.字符串.html","tf":0.011494252873563218}}},"体":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}},"信":{"docs":{},"息":{"docs":{},"描":{"docs":{},"述":{"docs":{},"\"":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}},"内":{"docs":{},"的":{"docs":{},"可":{"docs":{},"导":{"docs":{},"出":{"docs":{},"成":{"docs":{},"员":{"docs":{},"变":{"docs":{},"量":{"docs":{},"名":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"是":{"docs":{},"个":{"docs":{},"生":{"docs":{},"僻":{"docs":{},"词":{"docs":{},"或":{"docs":{},"意":{"docs":{},"义":{"docs":{},"不":{"docs":{},"明":{"docs":{},"确":{"docs":{},"的":{"docs":{},"词":{"docs":{},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"要":{"docs":{},"单":{"docs":{},"独":{"docs":{},"给":{"docs":{},"出":{"docs":{},"注":{"docs":{},"释":{"docs":{},",":{"docs":{},"放":{"docs":{},"在":{"docs":{},"成":{"docs":{},"员":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"前":{"docs":{},"一":{"docs":{},"行":{"docs":{},"或":{"docs":{},"同":{"docs":{},"一":{"docs":{},"行":{"docs":{},"的":{"docs":{},"末":{"docs":{},"尾":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"名":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}},"应":{"docs":{},"该":{"docs":{},"是":{"docs":{},"名":{"docs":{},"词":{"docs":{},"或":{"docs":{},"名":{"docs":{},"词":{"docs":{},"短":{"docs":{},"语":{"docs":{},",":{"docs":{},"如":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}},"注":{"docs":{},"释":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"的":{"docs":{},"定":{"docs":{},"义":{"docs":{},"和":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"格":{"docs":{},"式":{"docs":{},"采":{"docs":{},"用":{"docs":{},"多":{"docs":{},"行":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}},",":{"docs":{},"那":{"docs":{},"么":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}},",":{"docs":{},"其":{"docs":{},"有":{"docs":{},"两":{"docs":{},"个":{"docs":{},"变":{"docs":{},"量":{"docs":{},"。":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"来":{"docs":{},"接":{"docs":{},"收":{"docs":{},"通":{"docs":{},"知":{"docs":{},"就":{"docs":{},"行":{"docs":{},"了":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}},"束":{"docs":{},"程":{"docs":{},"序":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"上":{"docs":{},"的":{"docs":{},"包":{"docs":{},"要":{"docs":{},"确":{"docs":{},"认":{"docs":{},"活":{"docs":{},"跃":{"docs":{},"度":{"docs":{},",":{"docs":{},"不":{"docs":{},"知":{"docs":{},"名":{"docs":{},"的":{"docs":{},"包":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"被":{"docs":{},"下":{"docs":{},"架":{"docs":{},"或":{"docs":{},"出":{"docs":{},"现":{"docs":{},"不":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"的":{"docs":{},"版":{"docs":{},"本":{"docs":{},"升":{"docs":{},"级":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"必":{"docs":{},"要":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"可":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"面":{"docs":{},"这":{"docs":{},"三":{"docs":{},"条":{"docs":{},"是":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"对":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"检":{"docs":{},"查":{"docs":{},"机":{"docs":{},"制":{"docs":{},",":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"有":{"docs":{},"几":{"docs":{},"点":{"docs":{},"需":{"docs":{},"要":{"docs":{},"注":{"docs":{},"意":{"docs":{},"一":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}},"例":{"docs":{},"子":{"docs":{},"只":{"docs":{},"是":{"docs":{},"简":{"docs":{},"单":{"docs":{},"地":{"docs":{},"限":{"docs":{},"制":{"docs":{},"了":{"docs":{},"协":{"docs":{},"程":{"docs":{},"开":{"docs":{},"辟":{"docs":{},"的":{"docs":{},"数":{"docs":{},"量":{"docs":{},"。":{"docs":{},"在":{"docs":{},"此":{"docs":{},"基":{"docs":{},"础":{"docs":{},"之":{"docs":{},"上":{"docs":{},",":{"docs":{},"基":{"docs":{},"于":{"docs":{},"对":{"docs":{},"象":{"docs":{},"复":{"docs":{},"用":{"docs":{},"的":{"docs":{},"思":{"docs":{},"想":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"重":{"docs":{},"复":{"docs":{},"利":{"docs":{},"用":{"docs":{},"已":{"docs":{},"开":{"docs":{},"辟":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"协":{"docs":{},"程":{"docs":{},"的":{"docs":{},"重":{"docs":{},"复":{"docs":{},"创":{"docs":{},"建":{"docs":{},"销":{"docs":{},"毁":{"docs":{},",":{"docs":{},"达":{"docs":{},"到":{"docs":{},"池":{"docs":{},"化":{"docs":{},"的":{"docs":{},"效":{"docs":{},"果":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"分":{"docs":{},"析":{"docs":{},"目":{"docs":{},"的":{"docs":{},"是":{"docs":{},"为":{"docs":{},"了":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"地":{"docs":{},"量":{"docs":{},"化":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"其":{"docs":{},"对":{"docs":{},"性":{"docs":{},"能":{"docs":{},"的":{"docs":{},"影":{"docs":{},"响":{"docs":{},"将":{"docs":{},"被":{"docs":{},"放":{"docs":{},"大":{"docs":{},"。":{"docs":{},"这":{"docs":{},"里":{"docs":{},"解":{"docs":{},"释":{"docs":{},"下":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}},"由":{"docs":{},"接":{"docs":{},"收":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},"在":{"docs":{},"数":{"docs":{},"据":{"docs":{},"接":{"docs":{},"收":{"docs":{},"完":{"docs":{},"毕":{"docs":{},"后":{"docs":{},",":{"docs":{},"逐":{"docs":{},"个":{"docs":{},"通":{"docs":{},"知":{"docs":{},"。":{"docs":{},"总":{"docs":{},"之":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"额":{"docs":{},"外":{"docs":{},"的":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"度":{"docs":{},"来":{"docs":{},"完":{"docs":{},"成":{"docs":{},"这":{"docs":{},"件":{"docs":{},"事":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"进":{"docs":{},"行":{"docs":{},"修":{"docs":{},"改":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}},"例":{"docs":{},"中":{"docs":{},"创":{"docs":{},"建":{"docs":{},"了":{"docs":{},"缓":{"docs":{},"冲":{"docs":{},"区":{"docs":{},"大":{"docs":{},"小":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}},"了":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}},"会":{"docs":{},"自":{"docs":{},"动":{"docs":{},"添":{"docs":{},"加":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"的":{"docs":{},"包":{"docs":{},",":{"docs":{},"并":{"docs":{},"移":{"docs":{},"除":{"docs":{},"未":{"docs":{},"引":{"docs":{},"用":{"docs":{},"的":{"docs":{},"包":{"docs":{},"。":{"docs":{},"把":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"包":{"docs":{},"按":{"docs":{},"字":{"docs":{},"母":{"docs":{},"序":{"docs":{},"升":{"docs":{},"序":{"docs":{},"排":{"docs":{},"列":{"docs":{},",":{"docs":{},"并":{"docs":{},"对":{"docs":{},"包":{"docs":{},"进":{"docs":{},"行":{"docs":{},"分":{"docs":{},"组":{"docs":{},"管":{"docs":{},"理":{"docs":{},"。":{"docs":{},"通":{"docs":{},"过":{"docs":{},"空":{"docs":{},"行":{"docs":{},"隔":{"docs":{},"开":{"docs":{},",":{"docs":{},"默":{"docs":{},"认":{"docs":{},"分":{"docs":{},"为":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{},"包":{"docs":{},"和":{"docs":{},"非":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{},"包":{"docs":{},"(":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"包":{"docs":{},"和":{"docs":{},"内":{"docs":{},"部":{"docs":{},"包":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"释":{"docs":{},"放":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"一":{"docs":{},"直":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"将":{"docs":{},"主":{"docs":{},"调":{"docs":{},"加":{"docs":{},"入":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"通":{"docs":{},"知":{"docs":{},"列":{"docs":{},"表":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"修":{"docs":{},"改":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"主":{"docs":{},"调":{"docs":{},"在":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"依":{"docs":{},"赖":{"docs":{},"规":{"docs":{},"范":{"docs":{},"i":{"docs":{},"m":{"docs":{},"p":{"docs":{},"o":{"docs":{},"r":{"docs":{},"t":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}},"旧":{"docs":{},"可":{"docs":{},"以":{"docs":{},"继":{"docs":{},"续":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{},"这":{"docs":{},"可":{"docs":{},"能":{"docs":{},"就":{"docs":{},"是":{"docs":{},"“":{"docs":{},"全":{"docs":{},"能":{"docs":{},"”":{"docs":{},"与":{"docs":{},"“":{"docs":{},"专":{"docs":{},"精":{"docs":{},"”":{"docs":{},"的":{"docs":{},"区":{"docs":{},"别":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"包":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":3.333333333333333}},"名":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}},"和":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}},"应":{"docs":{},"该":{"docs":{},"为":{"docs":{},"小":{"docs":{},"写":{"docs":{},"单":{"docs":{},"词":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"下":{"docs":{},"划":{"docs":{},"线":{"docs":{},"或":{"docs":{},"者":{"docs":{},"混":{"docs":{},"合":{"docs":{},"大":{"docs":{},"小":{"docs":{},"写":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"多":{"docs":{},"级":{"docs":{},"目":{"docs":{},"录":{"docs":{},"来":{"docs":{},"划":{"docs":{},"分":{"docs":{},"层":{"docs":{},"级":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"谨":{"docs":{},"慎":{"docs":{},"使":{"docs":{},"用":{"docs":{},"缩":{"docs":{},"写":{"docs":{},"。":{"docs":{},"当":{"docs":{},"缩":{"docs":{},"写":{"docs":{},"是":{"docs":{},"程":{"docs":{},"序":{"docs":{},"员":{"docs":{},"广":{"docs":{},"泛":{"docs":{},"熟":{"docs":{},"知":{"docs":{},"的":{"docs":{},"词":{"docs":{},"时":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{},"缩":{"docs":{},"写":{"docs":{},"。":{"docs":{},"例":{"docs":{},"如":{"docs":{},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"含":{"docs":{},"固":{"docs":{},"定":{"docs":{},"的":{"docs":{},"元":{"docs":{},"素":{"docs":{},"列":{"docs":{},"表":{"docs":{},",":{"docs":{},"则":{"docs":{},"使":{"docs":{},"用":{"docs":{},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}},"了":{"docs":{},"指":{"docs":{},"向":{"docs":{},"底":{"docs":{},"层":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"在":{"docs":{},"需":{"docs":{},"要":{"docs":{},"复":{"docs":{},"制":{"docs":{},"它":{"docs":{},"们":{"docs":{},"时":{"docs":{},"要":{"docs":{},"特":{"docs":{},"别":{"docs":{},"注":{"docs":{},"意":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"中":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"程":{"docs":{},"序":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"例":{"docs":{},"外":{"docs":{},",":{"docs":{},"如":{"docs":{},"程":{"docs":{},"序":{"docs":{},"启":{"docs":{},"动":{"docs":{},"时":{"docs":{},",":{"docs":{},"文":{"docs":{},"件":{"docs":{},"无":{"docs":{},"法":{"docs":{},"打":{"docs":{},"开":{"docs":{},"或":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"无":{"docs":{},"法":{"docs":{},"连":{"docs":{},"接":{"docs":{},"导":{"docs":{},"致":{"docs":{},"程":{"docs":{},"序":{"docs":{},"无":{"docs":{},"法":{"docs":{},"正":{"docs":{},"常":{"docs":{},"运":{"docs":{},"行":{"docs":{},"可":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"信":{"docs":{},"息":{"docs":{},"描":{"docs":{},"述":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"多":{"docs":{},"个":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}},"何":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}},"注":{"docs":{},"释":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"&":{"docs":{},"文":{"docs":{},"件":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"两":{"docs":{},"种":{"docs":{},"接":{"docs":{},"口":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"定":{"docs":{},"义":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}},"不":{"docs":{},"支":{"docs":{},"持":{"docs":{},"解":{"docs":{},"析":{"docs":{},"闰":{"docs":{},"秒":{"docs":{},"时":{"docs":{},"间":{"docs":{},"戳":{"docs":{},"(":{"docs":{},"i":{"docs":{},"s":{"docs":{},"s":{"docs":{},"u":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}},"处":{"docs":{},"理":{"docs":{},"时":{"docs":{},"间":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":3.333333333333333}}}}}},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"它":{"docs":{},"有":{"docs":{},"助":{"docs":{},"于":{"docs":{},"以":{"docs":{},"更":{"docs":{},"安":{"docs":{},"全":{"docs":{},"、":{"docs":{},"更":{"docs":{},"准":{"docs":{},"确":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"处":{"docs":{},"理":{"docs":{},"这":{"docs":{},"些":{"docs":{},"不":{"docs":{},"正":{"docs":{},"确":{"docs":{},"的":{"docs":{},"假":{"docs":{},"设":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"原":{"docs":{},"子":{"docs":{},"操":{"docs":{},"作":{"docs":{},"对":{"docs":{},"基":{"docs":{},"本":{"docs":{},"类":{"docs":{},"型":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}}}}}}},"性":{"docs":{},"能":{"docs":{},"相":{"docs":{},"较":{"docs":{},"于":{"docs":{},"针":{"docs":{},"对":{"docs":{},"具":{"docs":{},"体":{"docs":{},"类":{"docs":{},"型":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"版":{"docs":{},"本":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"非":{"docs":{},"常":{"docs":{},"大":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},"了":{"docs":{},"数":{"docs":{},"字":{"docs":{},"和":{"docs":{},"字":{"docs":{},"节":{"docs":{},"序":{"docs":{},"列":{"docs":{},"之":{"docs":{},"间":{"docs":{},"的":{"docs":{},"简":{"docs":{},"单":{"docs":{},"转":{"docs":{},"换":{"docs":{},"以":{"docs":{},"及":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}},"针":{"docs":{},"对":{"docs":{},"大":{"docs":{},"端":{"docs":{},"字":{"docs":{},"节":{"docs":{},"序":{"docs":{},"将":{"docs":{},"字":{"docs":{},"节":{"docs":{},"序":{"docs":{},"列":{"docs":{},"转":{"docs":{},"为":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}},"下":{"docs":{},"的":{"docs":{},"一":{"docs":{},"个":{"docs":{},"组":{"docs":{},"件":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"作":{"docs":{},"为":{"docs":{},"保":{"docs":{},"存":{"docs":{},"临":{"docs":{},"时":{"docs":{},"取":{"docs":{},"还":{"docs":{},"对":{"docs":{},"象":{"docs":{},"的":{"docs":{},"一":{"docs":{},"个":{"docs":{},"“":{"docs":{},"池":{"docs":{},"子":{"docs":{},"”":{"docs":{},"。":{"docs":{},"个":{"docs":{},"人":{"docs":{},"觉":{"docs":{},"得":{"docs":{},"它":{"docs":{},"的":{"docs":{},"名":{"docs":{},"字":{"docs":{},"有":{"docs":{},"一":{"docs":{},"定":{"docs":{},"的":{"docs":{},"误":{"docs":{},"导":{"docs":{},"性":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"为":{"docs":{},"例":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"看":{"docs":{},"下":{"docs":{},"其":{"docs":{},"是":{"docs":{},"如":{"docs":{},"何":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}},"和":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"只":{"docs":{},"能":{"docs":{},"用":{"docs":{},"于":{"docs":{},"测":{"docs":{},"试":{"docs":{},"文":{"docs":{},"件":{"docs":{},",":{"docs":{},"且":{"docs":{},"必":{"docs":{},"须":{"docs":{},"是":{"docs":{},"为":{"docs":{},"了":{"docs":{},"解":{"docs":{},"决":{"docs":{},"循":{"docs":{},"环":{"docs":{},"依":{"docs":{},"赖":{"docs":{},",":{"docs":{},"才":{"docs":{},"能":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{},"当":{"docs":{},"前":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"简":{"docs":{},"单":{"docs":{},"地":{"docs":{},"完":{"docs":{},"成":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"之":{"docs":{},"间":{"docs":{},"的":{"docs":{},"拼":{"docs":{},"接":{"docs":{},",":{"docs":{},"非":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{},"需":{"docs":{},"要":{"docs":{},"单":{"docs":{},"独":{"docs":{},"做":{"docs":{},"类":{"docs":{},"型":{"docs":{},"转":{"docs":{},"换":{"docs":{},"。":{"docs":{},"行":{"docs":{},"内":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"不":{"docs":{},"会":{"docs":{},"产":{"docs":{},"生":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},",":{"docs":{},"也":{"docs":{},"不":{"docs":{},"涉":{"docs":{},"及":{"docs":{},"类":{"docs":{},"型":{"docs":{},"地":{"docs":{},"动":{"docs":{},"态":{"docs":{},"转":{"docs":{},"换":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"性":{"docs":{},"能":{"docs":{},"上":{"docs":{},"优":{"docs":{},"于":{"docs":{},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},")":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"在":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"一":{"docs":{},"个":{"docs":{},"源":{"docs":{},"文":{"docs":{},"件":{"docs":{},"的":{"docs":{},"包":{"docs":{},",":{"docs":{},"包":{"docs":{},"名":{"docs":{},"应":{"docs":{},"该":{"docs":{},"和":{"docs":{},"文":{"docs":{},"件":{"docs":{},"名":{"docs":{},"保":{"docs":{},"持":{"docs":{},"一":{"docs":{},"致":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}},"遍":{"docs":{},"历":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}},"设":{"docs":{},"置":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"会":{"docs":{},"被":{"docs":{},"修":{"docs":{},"改":{"docs":{},"一":{"docs":{},"次":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}},"唤":{"docs":{},"醒":{"docs":{},"任":{"docs":{},"意":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"带":{"docs":{},"域":{"docs":{},"名":{"docs":{},"的":{"docs":{},"包":{"docs":{},"名":{"docs":{},"都":{"docs":{},"属":{"docs":{},"于":{"docs":{},"外":{"docs":{},"部":{"docs":{},"包":{"docs":{},",":{"docs":{},"如":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}},"来":{"docs":{},"一":{"docs":{},"定":{"docs":{},"的":{"docs":{},"负":{"docs":{},"担":{"docs":{},",":{"docs":{},"严":{"docs":{},"重":{"docs":{},"的":{"docs":{},"时":{"docs":{},"候":{"docs":{},"会":{"docs":{},"引":{"docs":{},"起":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}},"引":{"docs":{},"入":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"包":{"docs":{},"要":{"docs":{},"慎":{"docs":{},"重":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}},"用":{"docs":{},")":{"docs":{},"时":{"docs":{},",":{"docs":{},"才":{"docs":{},"可":{"docs":{},"以":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}},"必":{"docs":{},"要":{"docs":{},"时":{"docs":{},"给":{"docs":{},"包":{"docs":{},"起":{"docs":{},"个":{"docs":{},"别":{"docs":{},"名":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"字":{"docs":{},"段":{"docs":{},"给":{"docs":{},"出":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}},"须":{"docs":{},"在":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}},"是":{"docs":{},"最":{"docs":{},"后":{"docs":{},"一":{"docs":{},"个":{"docs":{},"参":{"docs":{},"数":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}},"固":{"docs":{},"定":{"docs":{},"大":{"docs":{},"小":{"docs":{},"的":{"docs":{},"值":{"docs":{},"或":{"docs":{},"固":{"docs":{},"定":{"docs":{},"大":{"docs":{},"小":{"docs":{},"值":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},",":{"docs":{},"或":{"docs":{},"指":{"docs":{},"向":{"docs":{},"此":{"docs":{},"类":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"指":{"docs":{},"向":{"docs":{},"固":{"docs":{},"定":{"docs":{},"大":{"docs":{},"小":{"docs":{},"值":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},"或":{"docs":{},"固":{"docs":{},"定":{"docs":{},"大":{"docs":{},"小":{"docs":{},"值":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}},"要":{"docs":{},"有":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}},"标":{"docs":{},"准":{"docs":{},"包":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}},"库":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"时":{"docs":{},"间":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"别":{"docs":{},"名":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}},"函":{"docs":{},"数":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"也":{"docs":{},"大":{"docs":{},"量":{"docs":{},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}},"提":{"docs":{},"供":{"docs":{},"的":{"docs":{},"使":{"docs":{},"函":{"docs":{},"数":{"docs":{},"只":{"docs":{},"执":{"docs":{},"行":{"docs":{},"一":{"docs":{},"次":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"常":{"docs":{},"应":{"docs":{},"用":{"docs":{},"于":{"docs":{},"单":{"docs":{},"例":{"docs":{},"模":{"docs":{},"式":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"配":{"docs":{},"置":{"docs":{},"、":{"docs":{},"保":{"docs":{},"持":{"docs":{},"数":{"docs":{},"据":{"docs":{},"库":{"docs":{},"连":{"docs":{},"接":{"docs":{},"等":{"docs":{},"。":{"docs":{},"作":{"docs":{},"用":{"docs":{},"与":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"签":{"docs":{},"或":{"docs":{},"日":{"docs":{},"志":{"docs":{},"中":{"docs":{},"的":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}},"志":{"docs":{},":":{"docs":{},"f":{"docs":{},"l":{"docs":{},"a":{"docs":{},"g":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}},"管":{"docs":{},"理":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"的":{"docs":{},"项":{"docs":{},"目":{"docs":{},",":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}},"规":{"docs":{},"则":{"docs":{},"为":{"docs":{},"准":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}},"范":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}},"依":{"docs":{},"赖":{"docs":{},"规":{"docs":{},"范":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}},"原":{"docs":{},"则":{"docs":{},"上":{"docs":{},"以":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}},"该":{"docs":{},"包":{"docs":{},"已":{"docs":{},"经":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}},"注":{"docs":{},"释":{"docs":{},"对":{"docs":{},"类":{"docs":{},"型":{"docs":{},"进":{"docs":{},"行":{"docs":{},"简":{"docs":{},"要":{"docs":{},"介":{"docs":{},"绍":{"docs":{},",":{"docs":{},"放":{"docs":{},"在":{"docs":{},"定":{"docs":{},"义":{"docs":{},"的":{"docs":{},"前":{"docs":{},"一":{"docs":{},"行":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}},"函":{"docs":{},"数":{"docs":{},"也":{"docs":{},"是":{"docs":{},"参":{"docs":{},"考":{"docs":{},"了":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}},"方":{"docs":{},"法":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"成":{"docs":{},"对":{"docs":{},"第":{"docs":{},"一":{"docs":{},"种":{"docs":{},"方":{"docs":{},"法":{"docs":{},"截":{"docs":{},"取":{"docs":{},"法":{"docs":{},"的":{"docs":{},"改":{"docs":{},"进":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"每":{"docs":{},"次":{"docs":{},"指":{"docs":{},"需":{"docs":{},"移":{"docs":{},"动":{"docs":{},"一":{"docs":{},"个":{"docs":{},"元":{"docs":{},"素":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"更":{"docs":{},"加":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"路":{"docs":{},"径":{"docs":{},"名":{"docs":{},"不":{"docs":{},"一":{"docs":{},"致":{"docs":{},"时":{"docs":{},",":{"docs":{},"或":{"docs":{},"者":{"docs":{},"多":{"docs":{},"个":{"docs":{},"相":{"docs":{},"同":{"docs":{},"包":{"docs":{},"名":{"docs":{},"冲":{"docs":{},"突":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"别":{"docs":{},"名":{"docs":{},"代":{"docs":{},"替":{"docs":{},"会":{"docs":{},"有":{"docs":{},"更":{"docs":{},"好":{"docs":{},"的":{"docs":{},"可":{"docs":{},"读":{"docs":{},"性":{"docs":{},"。":{"docs":{"第二篇:代码风格/4.依赖管理.html":{"ref":"第二篇:代码风格/4.依赖管理.html","tf":0.0064516129032258064}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"_":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{},"a":{"docs":{},"u":{"docs":{},"l":{"docs":{},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0048134777376654635}}}}}}}}}}}},"e":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},",":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.004942339373970346},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.013605442176870748},"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.010025062656641603},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.013422818791946308},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}},"x":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.017241379310344827}},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.005836575875486381},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}},"x":{"docs":{},".":{"docs":{},"c":{"docs":{},"l":{"docs":{},"o":{"docs":{},"s":{"docs":{},"e":{"docs":{},"(":{"docs":{},")":{"docs":{},"可":{"docs":{},"以":{"docs":{},"不":{"docs":{},"用":{"docs":{},"显":{"docs":{},"式":{"docs":{},"处":{"docs":{},"理":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}},"x":{"docs":{},":":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}},".":{"docs":{},"p":{"docs":{},"b":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{},",":{"docs":{},"g":{"docs":{},"o":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}},"_":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},".":{"docs":{},"g":{"docs":{},"o":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}},",":{"docs":{},"u":{"docs":{},"n":{"docs":{},"s":{"docs":{},"a":{"docs":{},"f":{"docs":{},"e":{"docs":{},".":{"docs":{},"a":{"docs":{},"l":{"docs":{},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"o":{"docs":{},"f":{"docs":{},"(":{"docs":{},"x":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}},"计":{"docs":{},"算":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}},"y":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}},"a":{"docs":{},"m":{"docs":{},"l":{"docs":{},".":{"docs":{},"u":{"docs":{},"n":{"docs":{},"m":{"docs":{},"a":{"docs":{},"r":{"docs":{},"s":{"docs":{},"h":{"docs":{},"a":{"docs":{},"l":{"docs":{},"(":{"docs":{},"r":{"docs":{},"a":{"docs":{},"w":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}}}}}}}}}}}}}}}}}},",":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0038910505836575876}}},"e":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}},"a":{"docs":{},"r":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"或":{"docs":{},"更":{"docs":{},"少":{"docs":{},"的":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"则":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"测":{"docs":{},"试":{"docs":{},"表":{"docs":{},"中":{"docs":{},"省":{"docs":{},"略":{"docs":{},"字":{"docs":{},"段":{"docs":{},"名":{"docs":{},"称":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"超":{"docs":{},"过":{"docs":{},",":{"docs":{},"请":{"docs":{},"封":{"docs":{},"装":{"docs":{},"成":{"docs":{},"新":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}},"或":{"docs":{},"有":{"docs":{},"相":{"docs":{},"同":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},",":{"docs":{},"或":{"docs":{},"者":{"docs":{},"从":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"中":{"docs":{},"不":{"docs":{},"清":{"docs":{},"楚":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"的":{"docs":{},"含":{"docs":{},"义":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"命":{"docs":{},"名":{"docs":{},"返":{"docs":{},"回":{"docs":{},",":{"docs":{},"其":{"docs":{},"它":{"docs":{},"情":{"docs":{},"况":{"docs":{},"不":{"docs":{},"建":{"docs":{},"议":{"docs":{},"使":{"docs":{},"用":{"docs":{},"命":{"docs":{},"名":{"docs":{},"返":{"docs":{},"回":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"字":{"docs":{},"节":{"docs":{},",":{"docs":{},"那":{"docs":{},"假":{"docs":{},"设":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}},"c":{"docs":{},"p":{"docs":{},"u":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}}},"偏":{"docs":{},"移":{"docs":{},"量":{"docs":{},"才":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}}}}}},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"一":{"docs":{},"次":{"docs":{},"读":{"docs":{},"取":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}},"那":{"docs":{},"么":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"读":{"docs":{},"取":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}},"位":{"docs":{},"置":{"docs":{},"开":{"docs":{},"始":{"docs":{},"占":{"docs":{},"据":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.020689655172413793}}}}}}}},"协":{"docs":{},"程":{"docs":{},"并":{"docs":{},"发":{"docs":{},"写":{"docs":{},"入":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"链":{"docs":{},"表":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"同":{"docs":{},"时":{"docs":{},"存":{"docs":{},"在":{"docs":{},"。":{"docs":{},"那":{"docs":{},"如":{"docs":{},"果":{"docs":{},"协":{"docs":{},"程":{"docs":{},"中":{"docs":{},"还":{"docs":{},"存":{"docs":{},"在":{"docs":{},"着":{"docs":{},"其":{"docs":{},"他":{"docs":{},"需":{"docs":{},"要":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"操":{"docs":{},"作":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"允":{"docs":{},"许":{"docs":{},"并":{"docs":{},"发":{"docs":{},"执":{"docs":{},"行":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},"将":{"docs":{},"会":{"docs":{},"数":{"docs":{},"量":{"docs":{},"级":{"docs":{},"地":{"docs":{},"减":{"docs":{},"少":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},",":{"2":{"docs":{},"^":{"3":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}},"docs":{}}},"docs":{}}}}}}},"数":{"docs":{},"的":{"docs":{},"增":{"docs":{},"多":{"docs":{},"而":{"docs":{},"线":{"docs":{},"性":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"。":{"docs":{},"很":{"docs":{},"多":{"docs":{},"语":{"docs":{},"言":{"docs":{},"都":{"docs":{},"提":{"docs":{},"供":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}},"字":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"任":{"docs":{},"务":{"docs":{},",":{"docs":{},"达":{"docs":{},"到":{"docs":{},"了":{"docs":{},"协":{"docs":{},"程":{"docs":{},"并":{"docs":{},"发":{"docs":{},"控":{"docs":{},"制":{"docs":{},"的":{"docs":{},"目":{"docs":{},"的":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}},"消":{"docs":{},"息":{"docs":{},"则":{"docs":{},"被":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"。":{"docs":{},"开":{"docs":{},"启":{"docs":{},"协":{"docs":{},"程":{"docs":{},"前":{"docs":{},",":{"docs":{},"调":{"docs":{},"用":{"docs":{},"c":{"docs":{},"h":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}},"等":{"docs":{},"待":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"仅":{"docs":{},"将":{"docs":{},"相":{"docs":{},"关":{"docs":{},"的":{"docs":{},"声":{"docs":{},"明":{"docs":{},"放":{"docs":{},"在":{"docs":{},"一":{"docs":{},"组":{"docs":{},"。":{"docs":{},"不":{"docs":{},"要":{"docs":{},"将":{"docs":{},"不":{"docs":{},"相":{"docs":{},"关":{"docs":{},"的":{"docs":{},"声":{"docs":{},"明":{"docs":{},"放":{"docs":{},"在":{"docs":{},"一":{"docs":{},"组":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"包":{"docs":{},"含":{"docs":{},"方":{"docs":{},"法":{"docs":{},"的":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"1":{"docs":{},".":{"docs":{},"不":{"docs":{},"占":{"docs":{},"内":{"docs":{},"存":{"docs":{},"空":{"docs":{},"间":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}},"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}},"提":{"docs":{},"供":{"docs":{},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{},"导":{"docs":{},"出":{"docs":{},"方":{"docs":{},"法":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"优":{"docs":{},"先":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},"雅":{"docs":{},"地":{"docs":{},"处":{"docs":{},"理":{"docs":{},"错":{"docs":{},"误":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}},"化":{"docs":{},"后":{"docs":{},"的":{"docs":{},"版":{"docs":{},"本":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},"。":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"出":{"docs":{},"相":{"docs":{},"较":{"docs":{},"于":{"docs":{},"不":{"docs":{},"预":{"docs":{},"先":{"docs":{},"分":{"docs":{},"配":{"docs":{},"空":{"docs":{},"间":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"提":{"docs":{},"升":{"docs":{},"了":{"docs":{},"很":{"docs":{},"多":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"秀":{"docs":{},"的":{"docs":{},"本":{"docs":{},"地":{"docs":{},"缓":{"docs":{},"存":{"docs":{},"组":{"docs":{},"件":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"申":{"docs":{},"明":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}},"量":{"docs":{},"中":{"docs":{},"不":{"docs":{},"要":{"docs":{},"包":{"docs":{},"含":{"docs":{},"格":{"docs":{},"式":{"docs":{},"化":{"docs":{},"字":{"docs":{},"符":{"docs":{},",":{"docs":{},"否":{"docs":{},"则":{"docs":{},"必":{"docs":{},"然":{"docs":{},"违":{"docs":{},"反":{"docs":{},"就":{"docs":{},"近":{"docs":{},"原":{"docs":{},"则":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}},"凡":{"docs":{},"事":{"docs":{},"无":{"docs":{},"绝":{"docs":{},"对":{"docs":{},",":{"docs":{},"某":{"docs":{},"些":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{},"(":{"docs":{},")":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}},"切":{"docs":{},"片":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028}},"是":{"docs":{},"有":{"docs":{},"效":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},",":{"docs":{},"但":{"docs":{},"它":{"docs":{},"不":{"docs":{},"等":{"docs":{},"于":{"docs":{},"长":{"docs":{},"度":{"docs":{},"为":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}},",":{"docs":{},"代":{"docs":{},"码":{"docs":{},"会":{"docs":{},"更":{"docs":{},"加":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"清":{"docs":{},"晰":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}},"过":{"docs":{},"滤":{"docs":{},"掉":{"docs":{},"指":{"docs":{},"定":{"docs":{},"的":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}},"元":{"docs":{},"素":{"docs":{},"从":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}},"创":{"docs":{},"建":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"新":{"docs":{},"切":{"docs":{},"片":{"docs":{},",":{"docs":{},"过":{"docs":{},"滤":{"docs":{},"掉":{"docs":{},"指":{"docs":{},"定":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802}}}}}}}}}}}}}},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}},"变":{"docs":{},"量":{"docs":{},"申":{"docs":{},"明":{"docs":{},"的":{"docs":{},"位":{"docs":{},"置":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"靠":{"docs":{},"近":{"docs":{},"使":{"docs":{},"用":{"docs":{},"的":{"docs":{},"地":{"docs":{},"方":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}},"名":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"和":{"docs":{},"常":{"docs":{},"量":{"docs":{},"注":{"docs":{},"释":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}},"的":{"docs":{},"值":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"一":{"docs":{},"次":{"docs":{},"访":{"docs":{},"存":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"两":{"docs":{},"次":{"docs":{},"访":{"docs":{},"存":{"docs":{},",":{"docs":{},"第":{"docs":{},"一":{"docs":{},"次":{"docs":{},"访":{"docs":{},"存":{"docs":{},"得":{"docs":{},"到":{"docs":{},"前":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"节":{"docs":{},",":{"docs":{},"第":{"docs":{},"二":{"docs":{},"次":{"docs":{},"得":{"docs":{},"到":{"docs":{},"后":{"docs":{},"两":{"docs":{},"个":{"docs":{},"字":{"docs":{},"节":{"docs":{},"。":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"后":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"大":{"docs":{},"小":{"docs":{},"不":{"docs":{},"确":{"docs":{},"定":{"docs":{},"(":{"docs":{},"如":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}},"较":{"docs":{},"大":{"docs":{},"(":{"docs":{},"栈":{"docs":{},"空":{"docs":{},"间":{"docs":{},"不":{"docs":{},"足":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}},"仅":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"一":{"docs":{},"次":{"docs":{},",":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"完":{"docs":{},"成":{"docs":{},"后":{"docs":{},"驻":{"docs":{},"留":{"docs":{},"在":{"docs":{},"内":{"docs":{},"存":{"docs":{},"里":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"读":{"docs":{},"都":{"docs":{},"被":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},",":{"docs":{},"直":{"docs":{},"到":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"完":{"docs":{},"成":{"docs":{},";":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}},"另":{"docs":{},"外":{"docs":{},",":{"docs":{},"分":{"docs":{},"组":{"docs":{},"使":{"docs":{},"用":{"docs":{},"的":{"docs":{},"位":{"docs":{},"置":{"docs":{},"没":{"docs":{},"有":{"docs":{},"限":{"docs":{},"制":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"函":{"docs":{},"数":{"docs":{},"内":{"docs":{},"部":{"docs":{},"使":{"docs":{},"用":{"docs":{},"它":{"docs":{},"们":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"请":{"docs":{},"参":{"docs":{},"考":{"docs":{},":":{"docs":{},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{},"'":{"docs":{},"t":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}},"因":{"docs":{},"此":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},",":{"docs":{},"在":{"docs":{},"处":{"docs":{},"理":{"docs":{},"时":{"docs":{},"间":{"docs":{},"时":{"docs":{},"始":{"docs":{},"终":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}},"将":{"docs":{},"元":{"docs":{},"素":{"docs":{},"添":{"docs":{},"加":{"docs":{},"到":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}},"对":{"docs":{},"内":{"docs":{},"存":{"docs":{},"特":{"docs":{},"别":{"docs":{},"敏":{"docs":{},"感":{"docs":{},"的":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"的":{"docs":{},"设":{"docs":{},"计":{"docs":{},"上":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"调":{"docs":{},"整":{"docs":{},"字":{"docs":{},"段":{"docs":{},"的":{"docs":{},"顺":{"docs":{},"序":{"docs":{},",":{"docs":{},"将":{"docs":{},"字":{"docs":{},"段":{"docs":{},"宽":{"docs":{},"度":{"docs":{},"从":{"docs":{},"小":{"docs":{},"到":{"docs":{},"大":{"docs":{},"由":{"docs":{},"上":{"docs":{},"到":{"docs":{},"下":{"docs":{},"排":{"docs":{},"列":{"docs":{},",":{"docs":{},"来":{"docs":{},"减":{"docs":{},"少":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"占":{"docs":{},"用":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"呢":{"docs":{},",":{"docs":{},"将":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}},"为":{"docs":{},"其":{"docs":{},"他":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"不":{"docs":{},"占":{"docs":{},"据":{"docs":{},"内":{"docs":{},"存":{"docs":{},"空":{"docs":{},"间":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"被":{"docs":{},"广":{"docs":{},"泛":{"docs":{},"作":{"docs":{},"为":{"docs":{},"各":{"docs":{},"种":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},"的":{"docs":{},"占":{"docs":{},"位":{"docs":{},"符":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{},"一":{"docs":{},"是":{"docs":{},"节":{"docs":{},"省":{"docs":{},"资":{"docs":{},"源":{"docs":{},",":{"docs":{},"二":{"docs":{},"是":{"docs":{},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"本":{"docs":{},"身":{"docs":{},"就":{"docs":{},"具":{"docs":{},"备":{"docs":{},"很":{"docs":{},"强":{"docs":{},"的":{"docs":{},"语":{"docs":{},"义":{"docs":{},",":{"docs":{},"即":{"docs":{},"这":{"docs":{},"里":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"任":{"docs":{},"何":{"docs":{},"值":{"docs":{},",":{"docs":{},"仅":{"docs":{},"作":{"docs":{},"为":{"docs":{},"占":{"docs":{},"位":{"docs":{},"符":{"docs":{},",":{"docs":{},"达":{"docs":{},"到":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"即":{"docs":{},"注":{"docs":{},"释":{"docs":{},"的":{"docs":{},"效":{"docs":{},"果":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"的":{"docs":{},"存":{"docs":{},"在":{"docs":{},",":{"docs":{},"合":{"docs":{},"理":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}},"这":{"docs":{},"一":{"docs":{},"点":{"docs":{},",":{"docs":{},"空":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}},"基":{"docs":{},"于":{"docs":{},"当":{"docs":{},"前":{"docs":{},"目":{"docs":{},"录":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"/":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},",":{"docs":{},"那":{"docs":{},"它":{"docs":{},"和":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"区":{"docs":{},"别":{"docs":{},"是":{"docs":{},"什":{"docs":{},"么":{"docs":{},"呢":{"docs":{},"?":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}},"本":{"docs":{},"数":{"docs":{},"据":{"docs":{},"类":{"docs":{},"型":{"docs":{},"与":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"之":{"docs":{},"间":{"docs":{},"的":{"docs":{},"转":{"docs":{},"换":{"docs":{},",":{"docs":{},"优":{"docs":{},"先":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}},"代":{"docs":{},"码":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}},"声":{"docs":{},"明":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},"到":{"docs":{},"一":{"docs":{},"组":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"和":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"在":{"docs":{},"视":{"docs":{},"觉":{"docs":{},"上":{"docs":{},"很":{"docs":{},"相":{"docs":{},"似":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},"是":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}},"结":{"docs":{},"构":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"这":{"docs":{},"样":{"docs":{},"更":{"docs":{},"加":{"docs":{},"简":{"docs":{},"洁":{"docs":{},",":{"docs":{},"其":{"docs":{},"各":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"值":{"docs":{},"为":{"docs":{},"字":{"docs":{},"段":{"docs":{},"类":{"docs":{},"型":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"零":{"docs":{},"值":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"零":{"docs":{},"值":{"docs":{},"结":{"docs":{},"构":{"docs":{},"使":{"docs":{},"用":{"docs":{},"关":{"docs":{},"键":{"docs":{},"字":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}},"错":{"docs":{},"误":{"docs":{},"可":{"docs":{},"选":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"很":{"docs":{},"少":{"docs":{},",":{"docs":{},"在":{"docs":{},"选":{"docs":{},"择":{"docs":{},"合":{"docs":{},"适":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},"申":{"docs":{},"明":{"docs":{},"方":{"docs":{},"式":{"docs":{},"之":{"docs":{},"前":{"docs":{},",":{"docs":{},"应":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"以":{"docs":{},"下":{"docs":{},"几":{"docs":{},"点":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"容":{"docs":{},"量":{"docs":{},"大":{"docs":{},"小":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}},"提":{"docs":{},"示":{"2":{"docs":{},".":{"docs":{},"指":{"docs":{},"定":{"docs":{},"切":{"docs":{},"片":{"docs":{},"容":{"docs":{},"量":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"指":{"docs":{},"定":{"docs":{},"容":{"docs":{},"器":{"docs":{},"容":{"docs":{},"量":{"docs":{},",":{"docs":{},"以":{"docs":{},"便":{"docs":{},"为":{"docs":{},"容":{"docs":{},"器":{"docs":{},"预":{"docs":{},"先":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"。":{"docs":{},"这":{"docs":{},"将":{"docs":{},"在":{"docs":{},"后":{"docs":{},"续":{"docs":{},"添":{"docs":{},"加":{"docs":{},"元":{"docs":{},"素":{"docs":{},"时":{"docs":{},"减":{"docs":{},"少":{"docs":{},"通":{"docs":{},"过":{"docs":{},"复":{"docs":{},"制":{"docs":{},"来":{"docs":{},"调":{"docs":{},"整":{"docs":{},"容":{"docs":{},"器":{"docs":{},"大":{"docs":{},"小":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}},"时":{"docs":{},",":{"docs":{},"仍":{"docs":{},"可":{"docs":{},"能":{"docs":{},"发":{"docs":{},"生":{"docs":{},"分":{"docs":{},"配":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}},"对":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"于":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"变":{"docs":{},"量":{"docs":{},"、":{"docs":{},"常":{"docs":{},"量":{"docs":{},"的":{"docs":{},"声":{"docs":{},"明":{"docs":{},",":{"docs":{},"相":{"docs":{},"似":{"docs":{},"的":{"docs":{},"声":{"docs":{},"明":{"docs":{},"应":{"docs":{},"该":{"docs":{},"放":{"docs":{},"在":{"docs":{},"一":{"docs":{},"组":{"docs":{},"。":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"定":{"docs":{},"义":{"docs":{},"同":{"docs":{},"样":{"docs":{},"适":{"docs":{},"用":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"其":{"docs":{},"它":{"docs":{},"的":{"docs":{},"包":{"docs":{},",":{"docs":{},"可":{"docs":{},"导":{"docs":{},"出":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"也":{"docs":{},"不":{"docs":{},"能":{"docs":{},"有":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"示":{"docs":{},"例":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"还":{"docs":{},"有":{"docs":{},"一":{"docs":{},"种":{"docs":{},"更":{"docs":{},"好":{"docs":{},"的":{"docs":{},"处":{"docs":{},"理":{"docs":{},"方":{"docs":{},"式":{"docs":{},"是":{"docs":{},"将":{"docs":{},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}},"存":{"docs":{},"储":{"docs":{},"为":{"docs":{},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},"值":{"docs":{},",":{"docs":{},"根":{"docs":{},"据":{"docs":{},"是":{"docs":{},"否":{"docs":{},"导":{"docs":{},"出":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"前":{"docs":{},"缀":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"错":{"docs":{},"误":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"请":{"docs":{},"改":{"docs":{},"用":{"docs":{},"后":{"docs":{},"缀":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}},"指":{"docs":{},"针":{"docs":{},"类":{"docs":{},"型":{"docs":{},"(":{"docs":{},"如":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}},"动":{"docs":{},"态":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}},"大":{"docs":{},"多":{"docs":{},"数":{"docs":{},"包":{"docs":{},"装":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"这":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"很":{"docs":{},"好":{"docs":{},"的":{"docs":{},"默":{"docs":{},"认":{"docs":{},"值":{"docs":{},",":{"docs":{},"但":{"docs":{},"请":{"docs":{},"注":{"docs":{},"意":{"docs":{},",":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"开":{"docs":{},"始":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"此":{"docs":{},"行":{"docs":{},"为":{"docs":{},"。":{"docs":{},"因":{"docs":{},"此":{"docs":{},",":{"docs":{},"对":{"docs":{},"于":{"docs":{},"包":{"docs":{},"装":{"docs":{},"错":{"docs":{},"误":{"docs":{},"是":{"docs":{},"已":{"docs":{},"知":{"docs":{},"变":{"docs":{},"量":{"docs":{},"或":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"请":{"docs":{},"将":{"docs":{},"其":{"docs":{},"作":{"docs":{},"为":{"docs":{},"函":{"docs":{},"数":{"docs":{},"契":{"docs":{},"约":{"docs":{},"的":{"docs":{},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},"进":{"docs":{},"行":{"docs":{},"记":{"docs":{},"录":{"docs":{},"和":{"docs":{},"测":{"docs":{},"试":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"任":{"docs":{},"意":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}},"数":{"docs":{},"组":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}},"很":{"docs":{},"多":{"docs":{},"需":{"docs":{},"要":{"docs":{},"重":{"docs":{},"复":{"docs":{},"分":{"docs":{},"配":{"docs":{},"、":{"docs":{},"回":{"docs":{},"收":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"地":{"docs":{},"方":{"docs":{},",":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"p":{"docs":{},"o":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"两":{"docs":{},"个":{"docs":{},"值":{"docs":{},"进":{"docs":{},"行":{"docs":{},"判":{"docs":{},"断":{"docs":{},"时":{"docs":{},",":{"docs":{},"被":{"docs":{},"比":{"docs":{},"较":{"docs":{},"的":{"docs":{},"值":{"docs":{},"放":{"docs":{},"在":{"docs":{},"左":{"docs":{},"边":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}},"外":{"docs":{},"部":{"docs":{},"系":{"docs":{},"统":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}},"整":{"docs":{},"数":{"docs":{},"采":{"docs":{},"用":{"docs":{},"的":{"docs":{},"便":{"docs":{},"是":{"docs":{},"这":{"docs":{},"种":{"docs":{},"编":{"docs":{},"码":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}},"齐":{"docs":{},"系":{"docs":{},"数":{"docs":{},"决":{"docs":{},"定":{"docs":{},"了":{"docs":{},"字":{"docs":{},"段":{"docs":{},"的":{"docs":{},"偏":{"docs":{},"移":{"docs":{},"和":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"大":{"docs":{},"小":{"docs":{},",":{"docs":{},"两":{"docs":{},"者":{"docs":{},"必":{"docs":{},"须":{"docs":{},"是":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"系":{"docs":{},"数":{"docs":{},"的":{"docs":{},"整":{"docs":{},"数":{"docs":{},"倍":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"象":{"docs":{},"池":{"docs":{},",":{"docs":{},"每":{"docs":{},"次":{"docs":{},"只":{"docs":{},"执":{"docs":{},"行":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}},"能":{"docs":{},"够":{"docs":{},"极":{"docs":{},"大":{"docs":{},"地":{"docs":{},"提":{"docs":{},"升":{"docs":{},"性":{"docs":{},"能":{"docs":{},",":{"docs":{},"减":{"docs":{},"少":{"docs":{},"内":{"docs":{},"存":{"docs":{},"占":{"docs":{},"用":{"docs":{},",":{"docs":{},"同":{"docs":{},"时":{"docs":{},"降":{"docs":{},"低":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"重":{"docs":{},"复":{"docs":{},"创":{"docs":{},"建":{"docs":{},"与":{"docs":{},"回":{"docs":{},"收":{"docs":{},"内":{"docs":{},"存":{"docs":{},",":{"docs":{},"来":{"docs":{},"看":{"docs":{},"看":{"docs":{},"对":{"docs":{},"性":{"docs":{},"能":{"docs":{},"的":{"docs":{},"提":{"docs":{},"升":{"docs":{},"效":{"docs":{},"果":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}}}}},"单":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"就":{"docs":{},"近":{"docs":{},"申":{"docs":{},"明":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"没":{"docs":{},"有":{"docs":{},"区":{"docs":{},"别":{"docs":{},"了":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"想":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}},"能":{"docs":{},"搞":{"docs":{},"定":{"docs":{},"了":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"地":{"docs":{},"在":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"时":{"docs":{},"提":{"docs":{},"供":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}},"避":{"docs":{},"免":{"docs":{},"在":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}},"避":{"docs":{},"免":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"在":{"docs":{},"与":{"docs":{},"外":{"docs":{},"部":{"docs":{},"系":{"docs":{},"统":{"docs":{},"交":{"docs":{},"互":{"docs":{},"中":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}},"量":{"docs":{},"不":{"docs":{},"要":{"docs":{},"用":{"docs":{},"拼":{"docs":{},"音":{"docs":{},"命":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"采":{"docs":{},"取":{"docs":{},"有":{"docs":{},"意":{"docs":{},"义":{"docs":{},"、":{"docs":{},"简":{"docs":{},"短":{"docs":{},"的":{"docs":{},"包":{"docs":{},"名":{"docs":{},",":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"不":{"docs":{},"要":{"docs":{},"和":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{},"冲":{"docs":{},"突":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}},"用":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"值":{"docs":{},"传":{"docs":{},"递":{"docs":{},",":{"docs":{},"非":{"docs":{},"指":{"docs":{},"针":{"docs":{},"传":{"docs":{},"递":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}},"早":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"管":{"docs":{},"这":{"docs":{},"在":{"docs":{},"实":{"docs":{},"践":{"docs":{},"中":{"docs":{},"并":{"docs":{},"不":{"docs":{},"成":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"但":{"docs":{},"请":{"docs":{},"记":{"docs":{},"住":{"docs":{},",":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}},"编":{"docs":{},"写":{"docs":{},"这":{"docs":{},"些":{"docs":{},"委":{"docs":{},"托":{"docs":{},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{},"乏":{"docs":{},"味":{"docs":{},"的":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"额":{"docs":{},"外":{"docs":{},"的":{"docs":{},"工":{"docs":{},"作":{"docs":{},"隐":{"docs":{},"藏":{"docs":{},"了":{"docs":{},"实":{"docs":{},"现":{"docs":{},"细":{"docs":{},"节":{"docs":{},",":{"docs":{},"留":{"docs":{},"下":{"docs":{},"了":{"docs":{},"更":{"docs":{},"多":{"docs":{},"的":{"docs":{},"更":{"docs":{},"改":{"docs":{},"机":{"docs":{},"会":{"docs":{},",":{"docs":{},"还":{"docs":{},"消":{"docs":{},"除":{"docs":{},"了":{"docs":{},"在":{"docs":{},"未":{"docs":{},"能":{"docs":{},"描":{"docs":{},"述":{"docs":{},"出":{"docs":{},"潜":{"docs":{},"在":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"模":{"docs":{},"糊":{"docs":{},"文":{"docs":{},"档":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"使":{"docs":{},"用":{"docs":{},"短":{"docs":{},"变":{"docs":{},"量":{"docs":{},"声":{"docs":{},"明":{"docs":{},"形":{"docs":{},"式":{"docs":{},"(":{"docs":{},":":{"docs":{},"=":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}},"已":{"docs":{},"经":{"docs":{},"明":{"docs":{},"确":{"docs":{},"了":{"docs":{},"返":{"docs":{},"回":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"我":{"docs":{},"们":{"docs":{},"没":{"docs":{},"有":{"docs":{},"必":{"docs":{},"要":{"docs":{},"显":{"docs":{},"式":{"docs":{},"指":{"docs":{},"定":{"docs":{},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"无":{"docs":{},"法":{"docs":{},"继":{"docs":{},"续":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"而":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"是":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}},"一":{"docs":{},"个":{"docs":{},"有":{"docs":{},"效":{"docs":{},"的":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},"长":{"docs":{},"度":{"docs":{},"为":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}},"值":{"docs":{},",":{"docs":{},"而":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}},"实":{"docs":{},"体":{"docs":{},"列":{"docs":{},"表":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.023668639053254437}}}}}}},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"类":{"docs":{},"型":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}},"很":{"docs":{},"好":{"docs":{},"的":{"docs":{},"选":{"docs":{},"择":{"docs":{},"。":{"docs":{},"频":{"docs":{},"繁":{"docs":{},"地":{"docs":{},"分":{"docs":{},"配":{"docs":{},"、":{"docs":{},"回":{"docs":{},"收":{"docs":{},"内":{"docs":{},"存":{"docs":{},"会":{"docs":{},"给":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}},"更":{"docs":{},"合":{"docs":{},"适":{"docs":{},"的":{"docs":{},"名":{"docs":{},"字":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}},"简":{"docs":{},"单":{"docs":{},"易":{"docs":{},"用":{"docs":{},"的":{"docs":{},"高":{"docs":{},"性":{"docs":{},"能":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}},"比":{"docs":{},"较":{"docs":{},"好":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}},"种":{"docs":{},"使":{"docs":{},"用":{"docs":{},"可":{"docs":{},"变":{"docs":{},"字":{"docs":{},"节":{"docs":{},"表":{"docs":{},"示":{"docs":{},"整":{"docs":{},"数":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"。":{"docs":{},"其":{"docs":{},"中":{"docs":{},"数":{"docs":{},"值":{"docs":{},"本":{"docs":{},"身":{"docs":{},"越":{"docs":{},"小":{"docs":{},",":{"docs":{},"其":{"docs":{},"所":{"docs":{},"占":{"docs":{},"用":{"docs":{},"的":{"docs":{},"字":{"docs":{},"节":{"docs":{},"数":{"docs":{},"越":{"docs":{},"少":{"docs":{},"。":{"docs":{},"p":{"docs":{},"r":{"docs":{},"o":{"docs":{},"t":{"docs":{},"o":{"docs":{},"c":{"docs":{},"o":{"docs":{},"l":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"级":{"docs":{},"联":{"docs":{},"失":{"docs":{},"败":{"docs":{},"(":{"docs":{},"c":{"docs":{},"a":{"docs":{},"s":{"docs":{},"c":{"docs":{},"a":{"docs":{},"d":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}},"属":{"docs":{},"性":{"docs":{},"数":{"docs":{},"据":{"docs":{},"层":{"docs":{},"操":{"docs":{},"作":{"docs":{},"类":{"docs":{},"的":{"docs":{},"工":{"docs":{},"厂":{"docs":{},"方":{"docs":{},"法":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}},"否":{"docs":{},"符":{"docs":{},"合":{"docs":{},"标":{"docs":{},"准":{"docs":{},"等":{"docs":{},"。":{"docs":{},"编":{"docs":{},"译":{"docs":{},"前":{"docs":{},"先":{"docs":{},"执":{"docs":{},"行":{"docs":{},"代":{"docs":{},"码":{"docs":{},"静":{"docs":{},"态":{"docs":{},"分":{"docs":{},"析":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}},"无":{"docs":{},"法":{"docs":{},"捕":{"docs":{},"当":{"docs":{},"前":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}},"缓":{"docs":{},"冲":{"docs":{},"的":{"docs":{},",":{"docs":{},"其":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517}}}}}}}},"有":{"docs":{},"效":{"docs":{},"的":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":3.333333333333333}},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"指":{"docs":{},"向":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}}},"大":{"docs":{},"小":{"docs":{},"提":{"docs":{},"示":{"docs":{},"创":{"docs":{},"建":{"docs":{},"的":{"docs":{},";":{"docs":{},"在":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"有":{"docs":{},"更":{"docs":{},"少":{"docs":{},"的":{"docs":{},"分":{"docs":{},"配":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}}}}}}}}},"区":{"docs":{},"别":{"docs":{},"的":{"docs":{},",":{"docs":{},"c":{"docs":{},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"n":{"docs":{},"e":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}},"几":{"docs":{},"秒":{"docs":{},"钟":{"docs":{},"还":{"docs":{},"是":{"docs":{},"几":{"docs":{},"毫":{"docs":{},"秒":{"docs":{},"?":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}},"各":{"docs":{},"种":{"docs":{},"实":{"docs":{},"体":{"docs":{},"列":{"docs":{},"表":{"docs":{},"的":{"docs":{},"通":{"docs":{},"用":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}},"不":{"docs":{},"确":{"docs":{},"定":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"会":{"docs":{},"发":{"docs":{},"生":{"docs":{},"变":{"docs":{},"量":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"触":{"docs":{},"发":{"docs":{},"堆":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"分":{"docs":{},"配":{"docs":{},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{},",":{"docs":{},"可":{"docs":{},"预":{"docs":{},"见":{"docs":{},"的":{"docs":{},"是":{"docs":{},"当":{"docs":{},"元":{"docs":{},"素":{"docs":{},"数":{"docs":{},"量":{"docs":{},"增":{"docs":{},"加":{"docs":{},"时":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"会":{"docs":{},"越":{"docs":{},"来":{"docs":{},"大":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"占":{"docs":{},"用":{"docs":{},"内":{"docs":{},"存":{"docs":{},"空":{"docs":{},"间":{"docs":{},",":{"docs":{},"不":{"docs":{},"像":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}},"在":{"docs":{},"没":{"docs":{},"有":{"docs":{},"大":{"docs":{},"小":{"docs":{},"提":{"docs":{},"示":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"创":{"docs":{},"建":{"docs":{},"的":{"docs":{},";":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"默":{"docs":{},"认":{"docs":{},"是":{"docs":{},"已":{"docs":{},"经":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"的":{"docs":{},",":{"docs":{},"从":{"docs":{},"第":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}}}}}}}}}}}}}}}},"三":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"倍":{"docs":{},"数":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}}}}}}}}}}}},"二":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"倍":{"docs":{},"数":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"系":{"docs":{},"数":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}},"可":{"docs":{},"伸":{"docs":{},"缩":{"docs":{},"的":{"docs":{},",":{"docs":{},"同":{"docs":{},"时":{"docs":{},"也":{"docs":{},"是":{"docs":{},"并":{"docs":{},"发":{"docs":{},"安":{"docs":{},"全":{"docs":{},"的":{"docs":{},",":{"docs":{},"其":{"docs":{},"容":{"docs":{},"量":{"docs":{},"仅":{"docs":{},"受":{"docs":{},"限":{"docs":{},"于":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"大":{"docs":{},"小":{"docs":{},"。":{"docs":{},"存":{"docs":{},"放":{"docs":{},"在":{"docs":{},"池":{"docs":{},"中":{"docs":{},"的":{"docs":{},"对":{"docs":{},"象":{"docs":{},"如":{"docs":{},"果":{"docs":{},"不":{"docs":{},"活":{"docs":{},"跃":{"docs":{},"了":{"docs":{},"会":{"docs":{},"被":{"docs":{},"自":{"docs":{},"动":{"docs":{},"清":{"docs":{},"理":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"由":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"只":{"docs":{},"会":{"docs":{},"被":{"docs":{},"执":{"docs":{},"行":{"docs":{},"一":{"docs":{},"次":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"为":{"docs":{},"对":{"docs":{},"象":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}},"基":{"docs":{},"于":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"/":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"用":{"docs":{},"来":{"docs":{},"协":{"docs":{},"调":{"docs":{},"想":{"docs":{},"要":{"docs":{},"访":{"docs":{},"问":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"那":{"docs":{},"些":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"显":{"docs":{},"示":{"docs":{},"指":{"docs":{},"明":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"处":{"docs":{},"理":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}},"来":{"docs":{},"代":{"docs":{},"替":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},"事":{"docs":{},"实":{"docs":{},"上":{"docs":{},",":{"docs":{},"对":{"docs":{},"于":{"docs":{},"集":{"docs":{},"合":{"docs":{},"来":{"docs":{},"说":{"docs":{},",":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}},"取":{"docs":{},"代":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"定":{"docs":{},"义":{"docs":{},"枚":{"docs":{},"举":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"引":{"docs":{},"入":{"docs":{},"枚":{"docs":{},"举":{"docs":{},"的":{"docs":{},"标":{"docs":{},"准":{"docs":{},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{},"声":{"docs":{},"明":{"docs":{},"一":{"docs":{},"个":{"docs":{},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"类":{"docs":{},"型":{"docs":{},"和":{"docs":{},"一":{"docs":{},"个":{"docs":{},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{},"自":{"docs":{},"增":{"docs":{},"器":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"混":{"docs":{},"淆":{"docs":{},"底":{"docs":{},"层":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"将":{"docs":{},"无":{"docs":{},"法":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"它":{"docs":{},",":{"docs":{},"但":{"docs":{},"如":{"docs":{},"果":{"docs":{},"需":{"docs":{},"要":{"docs":{},",":{"docs":{},"您":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"将":{"docs":{},"来":{"docs":{},"切":{"docs":{},"换":{"docs":{},"到":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"拼":{"docs":{},"接":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},")":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}},"回":{"docs":{},"收":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"无":{"docs":{},"休":{"docs":{},"止":{"docs":{},"地":{"docs":{},"创":{"docs":{},"建":{"docs":{},"大":{"docs":{},"量":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"由":{"docs":{},"于":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},"函":{"docs":{},"数":{"docs":{},"是":{"docs":{},"按":{"docs":{},"接":{"docs":{},"收":{"docs":{},"者":{"docs":{},"分":{"docs":{},"组":{"docs":{},"的":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"普":{"docs":{},"通":{"docs":{},"工":{"docs":{},"具":{"docs":{},"函":{"docs":{},"数":{"docs":{},"应":{"docs":{},"在":{"docs":{},"文":{"docs":{},"件":{"docs":{},"末":{"docs":{},"尾":{"docs":{},"出":{"docs":{},"现":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"单":{"docs":{},"测":{"docs":{},"文":{"docs":{},"件":{"docs":{},"内":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"都":{"docs":{},"是":{"docs":{},"不":{"docs":{},"对":{"docs":{},"外":{"docs":{},"的":{"docs":{},",":{"docs":{},"所":{"docs":{},"有":{"docs":{},"可":{"docs":{},"导":{"docs":{},"出":{"docs":{},"函":{"docs":{},"数":{"docs":{},"可":{"docs":{},"以":{"docs":{},"没":{"docs":{},"有":{"docs":{},"注":{"docs":{},"释":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"定":{"docs":{},"义":{"docs":{},"时":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"不":{"docs":{},"要":{"docs":{},"导":{"docs":{},"出":{"docs":{},"。":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"值":{"docs":{},"从":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}}}},"两":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"构":{"docs":{},"成":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"类":{"docs":{},"型":{"docs":{},"是":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}},"申":{"docs":{},"明":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}},"变":{"docs":{},"量":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"相":{"docs":{},"似":{"docs":{},"的":{"docs":{},"声":{"docs":{},"明":{"docs":{},"放":{"docs":{},"在":{"docs":{},"一":{"docs":{},"组":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}},"关":{"docs":{},"操":{"docs":{},"作":{"docs":{},"需":{"docs":{},"要":{"docs":{},"独":{"docs":{},"立":{"docs":{},"封":{"docs":{},"装":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}},"省":{"docs":{},"略":{"docs":{},"结":{"docs":{},"构":{"docs":{},"中":{"docs":{},"的":{"docs":{},"零":{"docs":{},"值":{"docs":{},"字":{"docs":{},"段":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}},"空":{"docs":{},"切":{"docs":{},"片":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}},"结":{"docs":{},"构":{"docs":{},"与":{"docs":{},"空":{"docs":{},"数":{"docs":{},"组":{"docs":{},"在":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}},"间":{"docs":{},"上":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}},"的":{"docs":{},"实":{"docs":{},"例":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"我":{"docs":{},"们":{"docs":{},"要":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"应":{"docs":{},"直":{"docs":{},"接":{"docs":{},"进":{"docs":{},"行":{"docs":{},"真":{"docs":{},"假":{"docs":{},"判":{"docs":{},"断":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}},"切":{"docs":{},"片":{"docs":{},",":{"docs":{},"下":{"docs":{},"标":{"docs":{},"与":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}},"断":{"docs":{},"言":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"的":{"docs":{},"单":{"docs":{},"个":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"形":{"docs":{},"式":{"docs":{},"如":{"docs":{},"果":{"docs":{},"断":{"docs":{},"言":{"docs":{},"失":{"docs":{},"败":{"docs":{},"将":{"docs":{},"产":{"docs":{},"生":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}},"名":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},"换":{"docs":{},"成":{"docs":{},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"类":{"docs":{},"型":{"docs":{},"。":{"docs":{},"将":{"docs":{},"来":{"docs":{},",":{"docs":{},"该":{"docs":{},"参":{"docs":{},"数":{"docs":{},"可":{"docs":{},"以":{"docs":{},"支":{"docs":{},"持":{"docs":{},"不":{"docs":{},"仅":{"docs":{},"仅":{"docs":{},"局":{"docs":{},"限":{"docs":{},"于":{"docs":{},"两":{"docs":{},"个":{"docs":{},"状":{"docs":{},"态":{"docs":{},"(":{"docs":{},"t":{"docs":{},"r":{"docs":{},"u":{"docs":{},"e":{"docs":{},"/":{"docs":{},"f":{"docs":{},"a":{"docs":{},"l":{"docs":{},"s":{"docs":{},"e":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"则":{"docs":{},"名":{"docs":{},"称":{"docs":{},"应":{"docs":{},"以":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"也":{"docs":{},"会":{"docs":{},"多":{"docs":{},"占":{"docs":{},"据":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}},"为":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}},"手":{"docs":{},"动":{"docs":{},"实":{"docs":{},"现":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}},"时":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}},"呢":{"docs":{},"?":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}},"似":{"docs":{},"地":{"docs":{},",":{"docs":{},"在":{"docs":{},"了":{"docs":{},"解":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}},"的":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"值":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"和":{"docs":{},"指":{"docs":{},"针":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"来":{"docs":{},"实":{"docs":{},"现":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"在":{"docs":{},"判":{"docs":{},"断":{"docs":{},"与":{"docs":{},"接":{"docs":{},"口":{"docs":{},"是":{"docs":{},"否":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"时":{"docs":{},",":{"docs":{},"也":{"docs":{},"存":{"docs":{},"在":{"docs":{},"一":{"docs":{},"定":{"docs":{},"的":{"docs":{},"区":{"docs":{},"别":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.007518796992481203}},"执":{"docs":{},"行":{"docs":{},"“":{"docs":{},"i":{"docs":{},"n":{"docs":{},"i":{"docs":{},"t":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}},"n":{"docs":{},"e":{"docs":{},"t":{"docs":{},"/":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"s":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}},"非":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"记":{"docs":{},"住":{"docs":{},",":{"docs":{},"虽":{"docs":{},"然":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}},"读":{"docs":{},"写":{"docs":{},"安":{"docs":{},"全":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0024067388688327317}}}},"一":{"docs":{},"致":{"docs":{},"(":{"docs":{},"各":{"docs":{},"占":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"锁":{"docs":{},"是":{"docs":{},"一":{"docs":{},"种":{"docs":{},"共":{"docs":{},"享":{"docs":{},"锁":{"docs":{},",":{"docs":{},"也":{"docs":{},"称":{"docs":{},"之":{"docs":{},"为":{"docs":{},"多":{"docs":{},"读":{"docs":{},"单":{"docs":{},"写":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}},"的":{"docs":{},"存":{"docs":{},"在":{"docs":{},"是":{"docs":{},"为":{"docs":{},"了":{"docs":{},"解":{"docs":{},"决":{"docs":{},"读":{"docs":{},"多":{"docs":{},"写":{"docs":{},"少":{"docs":{},"时":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"问":{"docs":{},"题":{"docs":{},",":{"docs":{},"读":{"docs":{},"场":{"docs":{},"景":{"docs":{},"较":{"docs":{},"多":{"docs":{},"时":{"docs":{},",":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"可":{"docs":{},"有":{"docs":{},"效":{"docs":{},"地":{"docs":{},"减":{"docs":{},"少":{"docs":{},"锁":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"的":{"docs":{},"时":{"docs":{},"间":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"取":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.006896551724137931}},"整":{"docs":{},"个":{"docs":{},"给":{"docs":{},"定":{"docs":{},"的":{"docs":{},"字":{"docs":{},"节":{"docs":{},"数":{"docs":{},"据":{"docs":{},"并":{"docs":{},"返":{"docs":{},"回":{"docs":{},"读":{"docs":{},"取":{"docs":{},"的":{"docs":{},"长":{"docs":{},"度":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}},"到":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"、":{"docs":{},"写":{"docs":{},"、":{"docs":{},"计":{"docs":{},"算":{"docs":{},"的":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"应":{"docs":{},"该":{"docs":{},"进":{"docs":{},"行":{"docs":{},"分":{"docs":{},"离":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}},"多":{"docs":{},"写":{"docs":{},"少":{"docs":{},"(":{"docs":{},"读":{"docs":{},"占":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"少":{"docs":{},"写":{"docs":{},"多":{"docs":{},"(":{"docs":{},"读":{"docs":{},"占":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"操":{"docs":{},"作":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}},"锁":{"docs":{},"之":{"docs":{},"间":{"docs":{},"不":{"docs":{},"互":{"docs":{},"斥":{"docs":{},",":{"docs":{},"没":{"docs":{},"有":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"读":{"docs":{},"锁":{"docs":{},"是":{"docs":{},"无":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"的":{"docs":{},",":{"docs":{},"多":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"可":{"docs":{},"以":{"docs":{},"同":{"docs":{},"时":{"docs":{},"获":{"docs":{},"得":{"docs":{},"读":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"返":{"docs":{},"回":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"一":{"docs":{},"个":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"指":{"docs":{},"定":{"docs":{},"用":{"docs":{},"户":{"docs":{},"名":{"docs":{},"的":{"docs":{},"完":{"docs":{},"整":{"docs":{},"名":{"docs":{},"称":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}},"针":{"3":{"docs":{},".":{"docs":{},"小":{"docs":{},"的":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"好":{"docs":{},"过":{"docs":{},"引":{"docs":{},"用":{"4":{"docs":{},".":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"使":{"docs":{},"用":{"docs":{},"确":{"docs":{},"定":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"5":{"docs":{},".":{"docs":{},"小":{"docs":{},"结":{"docs":{},"变":{"docs":{},"量":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"一":{"docs":{},"般":{"docs":{},"发":{"docs":{},"生":{"docs":{},"在":{"docs":{},"如":{"docs":{},"下":{"docs":{},"几":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},":":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}},"docs":{}}}}}}}}}}},"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"值":{"docs":{},"超":{"docs":{},"过":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"允":{"docs":{},"许":{"docs":{},"部":{"docs":{},"分":{"docs":{},"失":{"docs":{},"败":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}},"类":{"docs":{},"型":{"docs":{},"不":{"docs":{},"确":{"docs":{},"定":{"docs":{},"(":{"docs":{},"不":{"docs":{},"能":{"docs":{},"确":{"docs":{},"定":{"docs":{},"大":{"docs":{},"小":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}},"当":{"docs":{},"前":{"docs":{},"状":{"docs":{},"态":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}},"地":{"docs":{},"址":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"引":{"docs":{},"用":{"docs":{},"(":{"docs":{},"引":{"docs":{},"用":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"底":{"docs":{},"层":{"docs":{},"是":{"docs":{},"指":{"docs":{},"针":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}},"时":{"docs":{},",":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"无":{"docs":{},"法":{"docs":{},"确":{"docs":{},"定":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"的":{"docs":{},"具":{"docs":{},"体":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"导":{"docs":{},"致":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"到":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"。":{"docs":{},"当":{"docs":{},"发":{"docs":{},"生":{"docs":{},"了":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"申":{"docs":{},"请":{"docs":{},"与":{"docs":{},"回":{"docs":{},"收":{"docs":{},"时":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"会":{"docs":{},"差":{"docs":{},"一":{"docs":{},"点":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"读":{"docs":{},"锁":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"前":{"docs":{},",":{"docs":{},"会":{"docs":{},"重":{"docs":{},"新":{"docs":{},"上":{"docs":{},"锁":{"docs":{},"。":{"docs":{},"重":{"docs":{},"新":{"docs":{},"上":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"原":{"docs":{},"因":{"docs":{},"是":{"docs":{},"主":{"docs":{},"调":{"docs":{},"在":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}},"避":{"docs":{},"免":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659},"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}},"内":{"docs":{},"置":{"docs":{},"名":{"docs":{},"称":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}},"参":{"docs":{},"数":{"docs":{},"语":{"docs":{},"义":{"docs":{},"不":{"docs":{},"明":{"docs":{},"确":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}},"重":{"docs":{},"复":{"docs":{},"执":{"docs":{},"行":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":3.333333333333333}}}}}}}},"长":{"docs":{},"度":{"docs":{},"为":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"或":{"docs":{},"容":{"docs":{},"量":{"docs":{},"不":{"docs":{},"定":{"docs":{},")":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}},"非":{"docs":{},"零":{"docs":{},"值":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"导":{"docs":{},"出":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"比":{"docs":{},"较":{"docs":{},"简":{"docs":{},"单":{"docs":{},",":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}},"缩":{"docs":{},"略":{"docs":{},"语":{"docs":{},"则":{"docs":{},"应":{"docs":{},"该":{"docs":{},"使":{"docs":{},"用":{"docs":{},"驼":{"docs":{},"峰":{"docs":{},"命":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}},"顺":{"docs":{},"序":{"docs":{},"是":{"docs":{},"明":{"docs":{},"确":{"docs":{},"的":{"docs":{},",":{"docs":{},"但":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"以":{"docs":{},"更":{"docs":{},"改":{"docs":{},",":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}},"(":{"1":{"docs":{},")":{"docs":{},"不":{"docs":{},"能":{"docs":{},"表":{"docs":{},"示":{"docs":{},"为":{"docs":{},"单":{"docs":{},"个":{"docs":{},"赋":{"docs":{},"值":{"docs":{},"的":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"表":{"docs":{},"达":{"docs":{},"式":{"docs":{},";":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}},"明":{"docs":{},"显":{"docs":{},"的":{"docs":{},"控":{"docs":{},"制":{"docs":{},"流":{"docs":{},":":{"docs":{},"任":{"docs":{},"何":{"docs":{},"函":{"docs":{},"数":{"docs":{},"都":{"docs":{},"可":{"docs":{},"以":{"docs":{},"退":{"docs":{},"出":{"docs":{},"程":{"docs":{},"序":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"很":{"docs":{},"难":{"docs":{},"对":{"docs":{},"控":{"docs":{},"制":{"docs":{},"流":{"docs":{},"进":{"docs":{},"行":{"docs":{},"推":{"docs":{},"理":{"docs":{},";":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"您":{"docs":{},"不":{"docs":{},"应":{"docs":{},"明":{"docs":{},"确":{"docs":{},"返":{"docs":{},"回":{"docs":{},"长":{"docs":{},"度":{"docs":{},"为":{"docs":{},"零":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},"。":{"docs":{},"应":{"docs":{},"该":{"docs":{},"返":{"docs":{},"回":{"docs":{},"n":{"docs":{},"i":{"docs":{},"l":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}},"无":{"docs":{},"论":{"docs":{},"程":{"docs":{},"序":{"docs":{},"环":{"docs":{},"境":{"docs":{},"或":{"docs":{},"调":{"docs":{},"用":{"docs":{},"如":{"docs":{},"何":{"docs":{},",":{"docs":{},"行":{"docs":{},"为":{"docs":{},"都":{"docs":{},"必":{"docs":{},"须":{"docs":{},"是":{"docs":{},"完":{"docs":{},"全":{"docs":{},"确":{"docs":{},"定":{"docs":{},"的":{"docs":{},";":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}},"锁":{"docs":{},"单":{"docs":{},"向":{"docs":{},"链":{"docs":{},"表":{"docs":{},"实":{"docs":{},"现":{"docs":{},"时":{"docs":{},"在":{"docs":{},"插":{"docs":{},"入":{"docs":{},"时":{"docs":{},"需":{"docs":{},"要":{"docs":{},"进":{"docs":{},"行":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"指":{"docs":{},"向":{"docs":{},"某":{"docs":{},"些":{"docs":{},"特":{"docs":{},"定":{"docs":{},"类":{"docs":{},"型":{"docs":{},"信":{"docs":{},"息":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},";":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}},"导":{"docs":{},"出":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"部":{"docs":{},"分":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}},"如":{"docs":{},"果":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"应":{"docs":{},"该":{"docs":{},"可":{"docs":{},"以":{"docs":{},"访":{"docs":{},"问":{"docs":{},"底":{"docs":{},"层":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"请":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"是":{"docs":{},"否":{"docs":{},"需":{"docs":{},"要":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"错":{"docs":{},"误":{"docs":{},"以":{"docs":{},"便":{"docs":{},"他":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"处":{"docs":{},"理":{"docs":{},"它":{"docs":{},"?":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}},"返":{"docs":{},"回":{"docs":{},"原":{"docs":{},"始":{"docs":{},"错":{"docs":{},"误":{"docs":{},";":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}},"向":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"接":{"docs":{},"口":{"docs":{},"添":{"docs":{},"加":{"docs":{},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"破":{"docs":{},"坏":{"docs":{},"性":{"docs":{},"的":{"docs":{},"改":{"docs":{},"变":{"docs":{},";":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}},"2":{"docs":{},")":{"docs":{},"可":{"docs":{},"插":{"docs":{},"入":{"docs":{},"的":{"docs":{},"钩":{"docs":{},"子":{"docs":{},",":{"docs":{},"如":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}},"要":{"docs":{},"检":{"docs":{},"查":{"docs":{},"切":{"docs":{},"片":{"docs":{},"是":{"docs":{},"否":{"docs":{},"为":{"docs":{},"空":{"docs":{},",":{"docs":{},"请":{"docs":{},"始":{"docs":{},"终":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}},"避":{"docs":{},"免":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"其":{"docs":{},"他":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}},"难":{"docs":{},"以":{"docs":{},"测":{"docs":{},"试":{"docs":{},":":{"docs":{},"退":{"docs":{},"出":{"docs":{},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"也":{"docs":{},"将":{"docs":{},"退":{"docs":{},"出":{"docs":{},"调":{"docs":{},"用":{"docs":{},"它":{"docs":{},"的":{"docs":{},"测":{"docs":{},"试":{"docs":{},",":{"docs":{},"这":{"docs":{},"使":{"docs":{},"得":{"docs":{},"函":{"docs":{},"数":{"docs":{},"很":{"docs":{},"难":{"docs":{},"测":{"docs":{},"试":{"docs":{},",":{"docs":{},"并":{"docs":{},"跳":{"docs":{},"过":{"docs":{},"了":{"docs":{},"尚":{"docs":{},"未":{"docs":{},"被":{"docs":{},"运":{"docs":{},"行":{"docs":{},"的":{"docs":{},"其":{"docs":{},"他":{"docs":{},"代":{"docs":{},"码":{"docs":{},";":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"指":{"docs":{},"向":{"docs":{},"具":{"docs":{},"体":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"存":{"docs":{},"储":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"是":{"docs":{},"指":{"docs":{},"针":{"docs":{},",":{"docs":{},"则":{"docs":{},"直":{"docs":{},"接":{"docs":{},"存":{"docs":{},"储":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"存":{"docs":{},"储":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"值":{"docs":{},",":{"docs":{},"则":{"docs":{},"存":{"docs":{},"储":{"docs":{},"指":{"docs":{},"向":{"docs":{},"该":{"docs":{},"值":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"导":{"docs":{},"出":{"docs":{},"或":{"docs":{},"非":{"docs":{},"导":{"docs":{},"出":{"docs":{},"类":{"docs":{},"型":{"docs":{},"实":{"docs":{},"现":{"docs":{},"了":{"docs":{},"接":{"docs":{},"口":{"docs":{},"且":{"docs":{},"属":{"docs":{},"于":{"docs":{},"某":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},"(":{"docs":{},"匿":{"docs":{},"名":{"docs":{},"嵌":{"docs":{},"套":{"docs":{},")":{"docs":{},";":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.006734006734006734}}}},"错":{"docs":{},"误":{"docs":{},"消":{"docs":{},"息":{"docs":{},"是":{"docs":{},"否":{"docs":{},"为":{"docs":{},"静":{"docs":{},"态":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},",":{"docs":{},"还":{"docs":{},"是":{"docs":{},"需":{"docs":{},"要":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"信":{"docs":{},"息":{"docs":{},"的":{"docs":{},"动":{"docs":{},"态":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"?":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"j":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{},":":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"o":{"docs":{},"d":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"/":{"docs":{},"j":{"docs":{},"s":{"docs":{},"o":{"docs":{},"n":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}},"从":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"删":{"docs":{},"除":{"docs":{},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"破":{"docs":{},"坏":{"docs":{},"性":{"docs":{},"的":{"docs":{},"改":{"docs":{},"变":{"docs":{},";":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}},"为":{"docs":{},"了":{"docs":{},"方":{"docs":{},"便":{"docs":{},"打":{"docs":{},"印":{"docs":{},"链":{"docs":{},"表":{"docs":{},"内":{"docs":{},"容":{"docs":{},",":{"docs":{},"实":{"docs":{},"现":{"docs":{},"一":{"docs":{},"个":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"(":{"docs":{},")":{"docs":{},"方":{"docs":{},"法":{"docs":{},"遍":{"docs":{},"历":{"docs":{},"链":{"docs":{},"表":{"docs":{},",":{"docs":{},"且":{"docs":{},"使":{"docs":{},"用":{"docs":{},"值":{"docs":{},"作":{"docs":{},"为":{"docs":{},"接":{"docs":{},"收":{"docs":{},"者":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"打":{"docs":{},"印":{"docs":{},"对":{"docs":{},"象":{"docs":{},"指":{"docs":{},"针":{"docs":{},"时":{"docs":{},"无":{"docs":{},"法":{"docs":{},"生":{"docs":{},"效":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"3":{"docs":{},")":{"docs":{},"对":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}},"避":{"docs":{},"免":{"docs":{},"访":{"docs":{},"问":{"docs":{},"或":{"docs":{},"操":{"docs":{},"作":{"docs":{},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},"和":{"docs":{},"环":{"docs":{},"境":{"docs":{},"状":{"docs":{},"态":{"docs":{},",":{"docs":{},"如":{"docs":{},"机":{"docs":{},"器":{"docs":{},"信":{"docs":{},"息":{"docs":{},"、":{"docs":{},"环":{"docs":{},"境":{"docs":{},"变":{"docs":{},"量":{"docs":{},"、":{"docs":{},"工":{"docs":{},"作":{"docs":{},"目":{"docs":{},"录":{"docs":{},"、":{"docs":{},"程":{"docs":{},"序":{"docs":{},"参":{"docs":{},"数":{"docs":{},"/":{"docs":{},"输":{"docs":{},"入":{"docs":{},"等":{"docs":{},";":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"零":{"docs":{},"值":{"docs":{},"切":{"docs":{},"片":{"docs":{},"(":{"docs":{},"用":{"docs":{},"v":{"docs":{},"a":{"docs":{},"r":{"docs":{},"声":{"docs":{},"明":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},")":{"docs":{},"可":{"docs":{},"立":{"docs":{},"即":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"无":{"docs":{},"需":{"docs":{},"调":{"docs":{},"用":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}}}}}}}}}}}}}}}}}}}}}}}}},"跳":{"docs":{},"过":{"docs":{},"清":{"docs":{},"理":{"docs":{},":":{"docs":{},"当":{"docs":{},"函":{"docs":{},"数":{"docs":{},"退":{"docs":{},"出":{"docs":{},"程":{"docs":{},"序":{"docs":{},"时":{"docs":{},",":{"docs":{},"会":{"docs":{},"跳":{"docs":{},"过":{"docs":{},"已":{"docs":{},"经":{"docs":{},"进":{"docs":{},"入":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}},"任":{"docs":{},"何":{"docs":{},"其":{"docs":{},"他":{"docs":{},"情":{"docs":{},"况":{"docs":{},"都":{"docs":{},"违":{"docs":{},"反":{"docs":{},"接":{"docs":{},"口":{"docs":{},"合":{"docs":{},"理":{"docs":{},"性":{"docs":{},"检":{"docs":{},"查":{"docs":{},",":{"docs":{},"终":{"docs":{},"止":{"docs":{},"编":{"docs":{},"译":{"docs":{},"并":{"docs":{},"通":{"docs":{},"知":{"docs":{},"用":{"docs":{},"户":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}},"我":{"docs":{},"们":{"docs":{},"是":{"docs":{},"否":{"docs":{},"正":{"docs":{},"在":{"docs":{},"传":{"docs":{},"递":{"docs":{},"由":{"docs":{},"下":{"docs":{},"游":{"docs":{},"函":{"docs":{},"数":{"docs":{},"返":{"docs":{},"回":{"docs":{},"的":{"docs":{},"新":{"docs":{},"错":{"docs":{},"误":{"docs":{},"?":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}},"s":{"docs":{},"q":{"docs":{},"l":{"docs":{},":":{"docs":{},"d":{"docs":{},"a":{"docs":{},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{},"a":{"docs":{},"s":{"docs":{},"e":{"docs":{},"/":{"docs":{},"s":{"docs":{},"q":{"docs":{},"l":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}},"删":{"docs":{},"除":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"类":{"docs":{},"型":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"破":{"docs":{},"坏":{"docs":{},"性":{"docs":{},"的":{"docs":{},"改":{"docs":{},"变":{"docs":{},";":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}},"4":{"docs":{},")":{"docs":{},"避":{"docs":{},"免":{"docs":{"第二篇:代码风格/5.初始化.html":{"ref":"第二篇:代码风格/5.初始化.html","tf":0.0012033694344163659}}}},"y":{"docs":{},"a":{"docs":{},"m":{"docs":{},"l":{"docs":{},":":{"docs":{},"g":{"docs":{},"o":{"docs":{},"p":{"docs":{},"k":{"docs":{},"g":{"docs":{},".":{"docs":{},"i":{"docs":{},"n":{"docs":{},"/":{"docs":{},"y":{"docs":{},"a":{"docs":{},"m":{"docs":{},"l":{"docs":{},".":{"docs":{},"v":{"2":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"docs":{}}}}}}}}}}}}}}}}}}}}},"即":{"docs":{},"使":{"docs":{},"使":{"docs":{},"用":{"docs":{},"满":{"docs":{},"足":{"docs":{},"相":{"docs":{},"同":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"替":{"docs":{},"换":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"也":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"破":{"docs":{},"坏":{"docs":{},"性":{"docs":{},"的":{"docs":{},"改":{"docs":{},"变":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}},"*":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938},"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.013605442176870748},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"/":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}},")":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.007380073800738007},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},",":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009}}}},"a":{"docs":{},"t":{"docs":{},"t":{"docs":{},"r":{"docs":{},"m":{"docs":{},"o":{"docs":{},"d":{"docs":{},"e":{"docs":{},"l":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}},"b":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{},"c":{"docs":{},"t":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.011834319526627219}},")":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.011834319526627219}}}}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},")":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}},"n":{"docs":{},"c":{"docs":{},"r":{"docs":{},"e":{"docs":{},"t":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.023668639053254437}}}}}}}}}}}},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0066518847006651885}}}}},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0053285968028419185}}}}}}},"n":{"docs":{},"o":{"docs":{},"t":{"docs":{},"f":{"docs":{},"o":{"docs":{},"u":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}},"d":{"docs":{},"e":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}},"r":{"docs":{},"e":{"docs":{},"s":{"docs":{},"o":{"docs":{},"l":{"docs":{},"v":{"docs":{},"e":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{},")":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}},"w":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},")":{"docs":{},",":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"b":{"docs":{},"o":{"docs":{},"o":{"docs":{},"k":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},"e":{"docs":{},"r":{"docs":{},"v":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.00510204081632653}}}}}}}}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}},"f":{"docs":{},"o":{"docs":{},"o":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.029411764705882353}}}}}},"s":{"2":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}},"docs":{},"o":{"docs":{},"m":{"docs":{},"e":{"docs":{},"t":{"docs":{},"h":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.006802721088435374}}}}}}}}}}},"t":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"a":{"docs":{},"t":{"docs":{},"s":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}},")":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}},")":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.01652892561983471}}}}}},"i":{"docs":{},"g":{"docs":{},"n":{"docs":{},"e":{"docs":{},"r":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}},")":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"w":{"docs":{},"a":{"docs":{},"i":{"docs":{},"t":{"docs":{},"g":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"p":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}}}}}}}}}}},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},".":{"docs":{},"t":{"docs":{},")":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.018404907975460124},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.015625}}}},"b":{"docs":{},")":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.018867924528301886},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.006269592476489028},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.00683371298405467},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0061068702290076335},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"_":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}},"i":{"docs":{},"t":{"docs":{},"a":{"docs":{},"b":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}},"e":{"docs":{},"m":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}},"h":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"l":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.0196078431372549}}},")":{"docs":{},"、":{"docs":{},"切":{"docs":{},"片":{"docs":{},"和":{"docs":{},"映":{"docs":{},"射":{"docs":{},"是":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}},"t":{"docs":{},"t":{"docs":{},"p":{"docs":{},".":{"docs":{},"r":{"docs":{},"e":{"docs":{},"q":{"docs":{},"u":{"docs":{},"e":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.029411764705882353}}}}}}}}}}}}}}},"z":{"docs":{},"a":{"docs":{},"p":{"docs":{},".":{"docs":{},"l":{"docs":{},"o":{"docs":{},"g":{"docs":{},"g":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}},"[":{"docs":{},"]":{"docs":{},"*":{"docs":{},"b":{"docs":{},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}}},"d":{"docs":{},"r":{"docs":{},"i":{"docs":{},"v":{"docs":{},"e":{"docs":{},"r":{"docs":{},")":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.005434782608695652}}}}}}}},"b":{"docs":{},".":{"docs":{},"r":{"docs":{},"o":{"docs":{},"w":{"docs":{},")":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}},"m":{"docs":{},"a":{"docs":{},"p":{"docs":{},"e":{"docs":{},"x":{"docs":{},"t":{"docs":{},"r":{"docs":{},"a":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"p":{"docs":{},"p":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},")":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"f":{"docs":{},"r":{"docs":{},"e":{"docs":{},"e":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}},"w":{"docs":{},"i":{"docs":{},"t":{"docs":{},"h":{"docs":{},"l":{"docs":{},"o":{"docs":{},"c":{"docs":{},"k":{"docs":{},"l":{"docs":{},"i":{"docs":{},"s":{"docs":{},"t":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}}}}}}}}},"o":{"docs":{},"n":{"docs":{},"c":{"docs":{},"e":{"docs":{},")":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.004434589800443459}}}}}}}},"值":{"docs":{},"将":{"docs":{},"引":{"docs":{},"发":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"好":{"docs":{},"很":{"docs":{},"多":{"docs":{},"。":{"docs":{},"从":{"docs":{},"这":{"docs":{},"里":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"能":{"docs":{},"够":{"docs":{},"知":{"docs":{},"道":{"docs":{},"二":{"docs":{},"者":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"别":{"docs":{},"之":{"docs":{},"大":{"docs":{},"的":{"docs":{},"原":{"docs":{},"因":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"传":{"docs":{},"递":{"docs":{},"会":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"整":{"docs":{},"个":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"而":{"docs":{},"指":{"docs":{},"针":{"docs":{},"传":{"docs":{},"递":{"docs":{},"只":{"docs":{},"会":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"地":{"docs":{},"址":{"docs":{},",":{"docs":{},"指":{"docs":{},"向":{"docs":{},"的":{"docs":{},"对":{"docs":{},"象":{"docs":{},"是":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"。":{"docs":{},"传":{"docs":{},"指":{"docs":{},"针":{"docs":{},"可":{"docs":{},"以":{"docs":{},"减":{"docs":{},"少":{"docs":{},"值":{"docs":{},"的":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"到":{"docs":{},"堆":{"docs":{},"中":{"docs":{},",":{"docs":{},"增":{"docs":{},"加":{"docs":{},"垃":{"docs":{},"圾":{"docs":{},"回":{"docs":{},"收":{"docs":{},"(":{"docs":{},"g":{"docs":{},"c":{"docs":{},")":{"docs":{},"的":{"docs":{},"负":{"docs":{},"担":{"docs":{},"。":{"docs":{},"在":{"docs":{},"对":{"docs":{},"象":{"docs":{},"频":{"docs":{},"繁":{"docs":{},"创":{"docs":{},"建":{"docs":{},"和":{"docs":{},"删":{"docs":{},"除":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},",":{"docs":{},"返":{"docs":{},"回":{"docs":{},"指":{"docs":{},"针":{"docs":{},"导":{"docs":{},"致":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"原":{"docs":{},"则":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"切":{"docs":{},"片":{"docs":{},"长":{"docs":{},"度":{"docs":{},"为":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.010830324909747292}}}}}}},"子":{"docs":{},"操":{"docs":{},"作":{"docs":{},"(":{"docs":{},"如":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"块":{"docs":{},"内":{"docs":{},",":{"docs":{},"读":{"docs":{},"取":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}},"注":{"docs":{},"释":{"docs":{},"即":{"docs":{},"在":{"docs":{},"代":{"docs":{},"码":{"docs":{},"块":{"docs":{},"前":{"docs":{},"给":{"docs":{},"出":{"docs":{},"一":{"docs":{},"个":{"docs":{},"总":{"docs":{},"的":{"docs":{},"说":{"docs":{},"明":{"docs":{},",":{"docs":{},"然":{"docs":{},"后":{"docs":{},"每":{"docs":{},"行":{"docs":{},"变":{"docs":{},"量":{"docs":{},"或":{"docs":{},"常":{"docs":{},"量":{"docs":{},"的":{"docs":{},"末":{"docs":{},"尾":{"docs":{},"给":{"docs":{},"出":{"docs":{},"详":{"docs":{},"细":{"docs":{},"注":{"docs":{},"释":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"看":{"docs":{},"起":{"docs":{},"来":{"docs":{},"更":{"docs":{},"加":{"docs":{},"简":{"docs":{},"洁":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"处":{"docs":{},"理":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.005836575875486381}},"p":{"docs":{},"a":{"docs":{},"n":{"docs":{},"i":{"docs":{},"c":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}},"r":{"docs":{},"e":{"docs":{},"c":{"docs":{},"o":{"docs":{},"v":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}},"类":{"docs":{},"型":{"docs":{},"断":{"docs":{},"言":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"o":{"docs":{},"r":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}},"。":{"docs":{},"在":{"docs":{},"知":{"docs":{},"道":{"docs":{},"常":{"docs":{},"见":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"场":{"docs":{},"景":{"docs":{},"后":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"在":{"docs":{},"编":{"docs":{},"码":{"docs":{},"时":{"docs":{},"可":{"docs":{},"以":{"docs":{},"有":{"docs":{},"意":{"docs":{},"识":{"docs":{},"地":{"docs":{},"避":{"docs":{},"免":{"docs":{},"变":{"docs":{},"量":{"docs":{},"发":{"docs":{},"生":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"地":{"docs":{},"使":{"docs":{},"用":{"docs":{},"栈":{"docs":{},"空":{"docs":{},"间":{"docs":{},",":{"docs":{},"而":{"docs":{},"非":{"docs":{},"堆":{"docs":{},"空":{"docs":{},"间":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"函":{"docs":{},"数":{"docs":{},"返":{"docs":{},"回":{"docs":{},"后":{"docs":{},"就":{"docs":{},"会":{"docs":{},"直":{"docs":{},"接":{"docs":{},"释":{"docs":{},"放":{"docs":{},",":{"docs":{},"而":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"分":{"docs":{},"配":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"使":{"docs":{},"用":{"docs":{},"完":{"docs":{},"毕":{"docs":{},"会":{"docs":{},"交":{"docs":{},"给":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"式":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"不":{"docs":{},"关":{"docs":{},"心":{"docs":{},"是":{"docs":{},"否":{"docs":{},"成":{"docs":{},"功":{"docs":{},",":{"docs":{},"o":{"docs":{},"k":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}},"当":{"docs":{},"y":{"docs":{},"与":{"docs":{},"e":{"docs":{},"r":{"docs":{},"r":{"docs":{},"都":{"docs":{},"为":{"docs":{},"空":{"docs":{},"时":{"docs":{},",":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"会":{"docs":{},"出":{"docs":{},"现":{"docs":{},"错":{"docs":{},"误":{"docs":{},"的":{"docs":{},"调":{"docs":{},"用":{"docs":{},"逻":{"docs":{},"辑":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}}}}}}}}}},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{},"多":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"具":{"docs":{},"有":{"docs":{},"退":{"docs":{},"出":{"docs":{},"能":{"docs":{},"力":{"docs":{},"时":{"docs":{},"会":{"docs":{},"存":{"docs":{},"在":{"docs":{},"一":{"docs":{},"些":{"docs":{},"问":{"docs":{},"题":{"docs":{},":":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}},"存":{"docs":{},"在":{"docs":{},"资":{"docs":{},"源":{"docs":{},"管":{"docs":{},"理":{"docs":{},"时":{"docs":{},",":{"docs":{},"应":{"docs":{},"紧":{"docs":{},"跟":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}},"然":{"docs":{},",":{"docs":{},"凡":{"docs":{},"事":{"docs":{},"无":{"docs":{},"绝":{"docs":{},"对":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"需":{"docs":{},"要":{"docs":{},"修":{"docs":{},"改":{"docs":{},"接":{"docs":{},"口":{"docs":{},"变":{"docs":{},"量":{"docs":{},"本":{"docs":{},"身":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"应":{"docs":{},"该":{"docs":{},"使":{"docs":{},"用":{"docs":{},"指":{"docs":{},"向":{"docs":{},"接":{"docs":{},"口":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},",":{"docs":{},"当":{"docs":{},"然":{"docs":{},"你":{"docs":{},"必":{"docs":{},"须":{"docs":{},"清":{"docs":{},"楚":{"docs":{},"自":{"docs":{},"己":{"docs":{},"在":{"docs":{},"干":{"docs":{},"什":{"docs":{},"么":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"枚":{"docs":{},"举":{"docs":{},"值":{"docs":{},"为":{"docs":{},"零":{"docs":{},"是":{"docs":{},"有":{"docs":{},"意":{"docs":{},"义":{"docs":{},"的":{"docs":{},",":{"docs":{},"如":{"docs":{},"当":{"docs":{},"零":{"docs":{},"值":{"docs":{},"是":{"docs":{},"理":{"docs":{},"想":{"docs":{},"的":{"docs":{},"默":{"docs":{},"认":{"docs":{},"行":{"docs":{},"为":{"docs":{},"时":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"多":{"docs":{},"个":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125}}}}},"不":{"docs":{},"能":{"docs":{},"在":{"docs":{},"这":{"docs":{},"些":{"docs":{},"交":{"docs":{},"互":{"docs":{},"中":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}},"在":{"docs":{},"这":{"docs":{},"些":{"docs":{},"交":{"docs":{},"互":{"docs":{},"中":{"docs":{},"不":{"docs":{},"能":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}},"使":{"docs":{},"用":{"docs":{},"反":{"docs":{},"射":{"docs":{},"时":{"docs":{},",":{"docs":{},"请":{"docs":{},"问":{"docs":{},"一":{"docs":{},"下":{"docs":{},"自":{"docs":{},"己":{"docs":{},",":{"docs":{},"我":{"docs":{},"真":{"docs":{},"地":{"docs":{},"需":{"docs":{},"要":{"docs":{},"它":{"docs":{},"吗":{"docs":{},"?":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}},"创":{"docs":{},"建":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"且":{"docs":{},"仅":{"docs":{},"当":{"docs":{},"第":{"docs":{},"一":{"docs":{},"次":{"docs":{},"访":{"docs":{},"问":{"docs":{},"某":{"docs":{},"个":{"docs":{},"变":{"docs":{},"量":{"docs":{},"时":{"docs":{},",":{"docs":{},"进":{"docs":{},"行":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"(":{"docs":{},"写":{"docs":{},")":{"docs":{},";":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}},"捕":{"docs":{},"获":{"docs":{},"最":{"docs":{},"晚":{"docs":{},"要":{"docs":{},"在":{"docs":{},"当":{"docs":{},"前":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}},"用":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}},"于":{"docs":{},"捕":{"docs":{},"获":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}},"获":{"docs":{},"取":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"系":{"docs":{},"数":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}},"从":{"docs":{},"对":{"docs":{},"象":{"docs":{},"池":{"docs":{},"中":{"docs":{},"获":{"docs":{},"取":{"docs":{},"对":{"docs":{},"象":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}},"阻":{"docs":{},"塞":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},",":{"docs":{},"等":{"docs":{},"待":{"docs":{},"通":{"docs":{},"知":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}},"户":{"docs":{},"结":{"docs":{},"构":{"docs":{},"定":{"docs":{},"义":{"docs":{},"了":{"docs":{},"用":{"docs":{},"户":{"docs":{},"基":{"docs":{},"础":{"docs":{},"信":{"docs":{},"息":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}},"的":{"docs":{},"就":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"来":{"docs":{},"调":{"docs":{},"节":{"docs":{},"读":{"docs":{},"操":{"docs":{},"作":{"docs":{},"的":{"docs":{},"占":{"docs":{},"比":{"docs":{},",":{"docs":{},"来":{"docs":{},"模":{"docs":{},"拟":{"docs":{},"读":{"docs":{},"写":{"docs":{},"占":{"docs":{},"比":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},"。":{"docs":{},"r":{"docs":{},"p":{"docs":{},"c":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}},"保":{"docs":{},"证":{"docs":{},"函":{"docs":{},"数":{"docs":{},"只":{"docs":{},"执":{"docs":{},"行":{"docs":{},"一":{"docs":{},"次":{"docs":{},"。":{"docs":{},"要":{"docs":{},"达":{"docs":{},"到":{"docs":{},"这":{"docs":{},"个":{"docs":{},"效":{"docs":{},"果":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"做":{"docs":{},"到":{"docs":{},"两":{"docs":{},"点":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}},"协":{"docs":{},"调":{"docs":{},"想":{"docs":{},"要":{"docs":{},"访":{"docs":{},"问":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}},"解":{"docs":{},"决":{"docs":{},"这":{"docs":{},"类":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"程":{"docs":{},"序":{"docs":{},"将":{"docs":{},"意":{"docs":{},"外":{"docs":{},"终":{"docs":{},"止":{"docs":{},"并":{"docs":{},"输":{"docs":{},"出":{"docs":{},":":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}},"中":{"docs":{},"每":{"docs":{},"一":{"docs":{},"个":{"docs":{},"被":{"docs":{},"导":{"docs":{},"出":{"docs":{},"的":{"docs":{},"(":{"docs":{},"大":{"docs":{},"写":{"docs":{},"的":{"docs":{},")":{"docs":{},"名":{"docs":{},"字":{"docs":{},",":{"docs":{},"都":{"docs":{},"应":{"docs":{},"该":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"文":{"docs":{},"档":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"退":{"docs":{},"出":{"docs":{},"方":{"docs":{},"式":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}},"会":{"docs":{},"像":{"docs":{},"预":{"docs":{},"期":{"docs":{},"的":{"docs":{},"那":{"docs":{},"样":{"docs":{},"顺":{"docs":{},"利":{"docs":{},"的":{"docs":{},"运":{"docs":{},"行":{"docs":{},"吗":{"docs":{},"?":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}},"崩":{"docs":{},"溃":{"1":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}}},"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"串":{"docs":{},"行":{"docs":{},"执":{"docs":{},"行":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"到":{"docs":{},"运":{"docs":{},"行":{"docs":{},"结":{"docs":{},"束":{"docs":{},",":{"docs":{},"占":{"docs":{},"用":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"资":{"docs":{},"源":{"docs":{},"是":{"docs":{},"需":{"docs":{},"要":{"docs":{},"由":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}},"势":{"docs":{},"必":{"docs":{},"会":{"docs":{},"带":{"docs":{},"来":{"docs":{},"性":{"docs":{},"能":{"docs":{},"影":{"docs":{},"响":{"docs":{},",":{"docs":{},"甚":{"docs":{},"至":{"docs":{},"程":{"docs":{},"序":{"docs":{},"崩":{"docs":{},"溃":{"docs":{},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"的":{"docs":{},"控":{"docs":{},"制":{"docs":{},"协":{"docs":{},"程":{"docs":{},"数":{"docs":{},"量":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"需":{"docs":{},"要":{"docs":{},",":{"docs":{},"请":{"docs":{},"复":{"docs":{},"用":{"docs":{},"它":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"占":{"docs":{},"用":{"docs":{},"约":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"后":{"docs":{},",":{"docs":{},"势":{"docs":{},"必":{"docs":{},"会":{"docs":{},"造":{"docs":{},"成":{"docs":{},"对":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}},"数":{"docs":{},"量":{"docs":{},"越":{"docs":{},"多":{"docs":{},",":{"docs":{},"g":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}},"的":{"docs":{},"结":{"docs":{},"构":{"docs":{},"定":{"docs":{},"义":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"函":{"docs":{},"数":{"docs":{},"仍":{"docs":{},"然":{"docs":{},"只":{"docs":{},"执":{"docs":{},"行":{"docs":{},"一":{"docs":{},"次":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}},"(":{"docs":{},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{},"e":{"docs":{},")":{"docs":{},"是":{"docs":{},"由":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}},"同":{"docs":{},"步":{"docs":{},"。":{"docs":{},"通":{"docs":{},"过":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},"间":{"docs":{},"的":{"docs":{},"同":{"docs":{},"步":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},",":{"docs":{},"以":{"docs":{},"此":{"docs":{},"来":{"docs":{},"实":{"docs":{},"现":{"docs":{},"多":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"即":{"docs":{},"保":{"docs":{},"存":{"docs":{},"了":{"docs":{},"一":{"docs":{},"个":{"docs":{},"通":{"docs":{},"知":{"docs":{},"列":{"docs":{},"表":{"docs":{},"。":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}},"被":{"docs":{},"捕":{"docs":{},"获":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}},"导":{"docs":{},"出":{"docs":{},"的":{"docs":{},"字":{"docs":{},"段":{"docs":{},"和":{"docs":{},"方":{"docs":{},"法":{"docs":{},"全":{"docs":{},"部":{"docs":{},"成":{"docs":{},"为":{"docs":{},"了":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}},",":{"docs":{},"在":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}},"用":{"docs":{},"于":{"docs":{},"控":{"docs":{},"制":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"读":{"docs":{},"写":{"docs":{},"满":{"docs":{},"足":{"docs":{},"如":{"docs":{},"下":{"docs":{},"三":{"docs":{},"个":{"docs":{},"条":{"docs":{},"件":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"越":{"docs":{},"界":{"docs":{},"运":{"docs":{},"行":{"docs":{},"时":{"docs":{},"抛":{"docs":{},"出":{"docs":{},"的":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}},"错":{"docs":{},"误":{"docs":{},"判":{"docs":{},"断":{"docs":{},"独":{"docs":{},"立":{"docs":{},"处":{"docs":{},"理":{"docs":{},",":{"docs":{},"不":{"docs":{},"与":{"docs":{},"其":{"docs":{},"他":{"docs":{},"变":{"docs":{},"量":{"docs":{},"组":{"docs":{},"合":{"docs":{},"判":{"docs":{},"断":{"docs":{},"。":{"docs":{"第二篇:代码风格/6.错误处理.html":{"ref":"第二篇:代码风格/6.错误处理.html","tf":0.0019455252918287938}}}}}}}}}}}}}}}}}}}},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}},"示":{"docs":{},"例":{"docs":{},":":{"docs":{},"u":{"docs":{},"r":{"docs":{},"l":{"docs":{},"a":{"docs":{},"r":{"docs":{},"r":{"docs":{},"a":{"docs":{},"y":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"写":{"docs":{},"成":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}},"地":{"docs":{},"使":{"docs":{},"用":{"docs":{},"接":{"docs":{},"口":{"docs":{},"会":{"docs":{},"在":{"docs":{},"编":{"docs":{},"译":{"docs":{},"期":{"docs":{},"报":{"docs":{},"错":{"docs":{},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{},"可":{"docs":{},"以":{"docs":{},"利":{"docs":{},"用":{"docs":{},"这":{"docs":{},"个":{"docs":{},"机":{"docs":{},"制":{"docs":{},"让":{"docs":{},"部":{"docs":{},"分":{"docs":{},"问":{"docs":{},"题":{"docs":{},"在":{"docs":{},"编":{"docs":{},"译":{"docs":{},"期":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"匹":{"docs":{},"配":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}},"消":{"docs":{},"息":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}},"后":{"docs":{},"面":{"docs":{},"要":{"docs":{},"有":{"docs":{},"空":{"docs":{},"格":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},",":{"docs":{},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}},"会":{"docs":{},"进":{"docs":{},"行":{"docs":{},"解":{"docs":{},"锁":{"docs":{},"操":{"docs":{},"作":{"docs":{},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"重":{"docs":{},"复":{"docs":{},"解":{"docs":{},"锁":{"docs":{},"引":{"docs":{},"发":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}},"命":{"docs":{},"令":{"docs":{},"行":{"docs":{},"参":{"docs":{},"数":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}},"名":{"docs":{},"清":{"docs":{},"晰":{"docs":{},"的":{"docs":{},"地":{"docs":{},"方":{"docs":{},",":{"docs":{},"不":{"docs":{},"要":{"docs":{},"添":{"docs":{},"加":{"docs":{},"无":{"docs":{},"意":{"docs":{},"义":{"docs":{},"的":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{},"类":{"docs":{},"型":{"docs":{},"注":{"docs":{},"释":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}},"不":{"docs":{},"能":{"docs":{},"采":{"docs":{},"用":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"规":{"docs":{},"则":{"docs":{},"基":{"docs":{},"本":{"docs":{},"保":{"docs":{},"持":{"docs":{},"和":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"命":{"docs":{},"名":{"docs":{},"规":{"docs":{},"则":{"docs":{},"一":{"docs":{},"致":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}},"大":{"docs":{},"块":{"docs":{},"变":{"docs":{},"量":{"docs":{},"或":{"docs":{},"常":{"docs":{},"量":{"docs":{},"定":{"docs":{},"义":{"docs":{},"时":{"docs":{},"的":{"docs":{},"注":{"docs":{},"释":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}},"部":{"docs":{},"分":{"docs":{},"业":{"docs":{},"务":{"docs":{},"场":{"docs":{},"景":{"docs":{},"是":{"docs":{},"读":{"docs":{},"多":{"docs":{},"写":{"docs":{},"少":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"可":{"docs":{},"有":{"docs":{},"效":{"docs":{},"提":{"docs":{},"高":{"docs":{},"对":{"docs":{},"共":{"docs":{},"享":{"docs":{},"数":{"docs":{},"据":{"docs":{},"的":{"docs":{},"访":{"docs":{},"问":{"docs":{},"效":{"docs":{},"率":{"docs":{},"。":{"docs":{},"最":{"docs":{},"坏":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"只":{"docs":{},"有":{"docs":{},"写":{"docs":{},"请":{"docs":{},"求":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"顶":{"docs":{},"多":{"docs":{},"退":{"docs":{},"化":{"docs":{},"成":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"。":{"docs":{},"所":{"docs":{},"以":{"docs":{},"优":{"docs":{},"先":{"docs":{},"使":{"docs":{},"用":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"而":{"docs":{},"非":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"提":{"docs":{},"高":{"docs":{},"程":{"docs":{},"序":{"docs":{},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"所":{"docs":{},"有":{"docs":{},"注":{"docs":{},"释":{"docs":{},"掉":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"在":{"docs":{},"提":{"docs":{},"交":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}},"以":{"docs":{},"如":{"docs":{},"果":{"docs":{},"对":{"docs":{},"性":{"docs":{},"能":{"docs":{},"要":{"docs":{},"求":{"docs":{},"非":{"docs":{},"常":{"docs":{},"严":{"docs":{},"格":{"docs":{},",":{"docs":{},"或":{"docs":{},"待":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"的":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"数":{"docs":{},"量":{"docs":{},"足":{"docs":{},"够":{"docs":{},"多":{"docs":{},"时":{"docs":{},",":{"docs":{},"建":{"docs":{},"议":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"谓":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},",":{"docs":{},"指":{"docs":{},"锁":{"docs":{},"只":{"docs":{},"能":{"docs":{},"被":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}},"接":{"docs":{},"口":{"docs":{},"注":{"docs":{},"释":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"收":{"docs":{},"器":{"docs":{},"的":{"docs":{},"名":{"docs":{},"称":{"docs":{},"在":{"docs":{},"函":{"docs":{},"数":{"docs":{},"超":{"docs":{},"过":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"为":{"docs":{},"值":{"docs":{},"和":{"docs":{},"指":{"docs":{},"针":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"在":{"docs":{},"调":{"docs":{},"用":{"docs":{},"方":{"docs":{},"式":{"docs":{},"上":{"docs":{},"是":{"docs":{},"有":{"docs":{},"区":{"docs":{},"别":{"docs":{},"的":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}}}}}}}}}}}}},"数":{"docs":{},"据":{"docs":{},",":{"docs":{},"接":{"docs":{},"收":{"docs":{},"完":{"docs":{},"成":{"docs":{},"后":{"docs":{},",":{"docs":{},"将":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}},"受":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"语":{"docs":{},"句":{"docs":{},",":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"缩":{"docs":{},"小":{"docs":{},"变":{"docs":{},"量":{"docs":{},"作":{"docs":{},"用":{"docs":{},"域":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0032948929159802307}}}}}}}}}}}}}}}}}}}},"下":{"docs":{},"来":{"docs":{},"逐":{"docs":{},"个":{"docs":{},"分":{"docs":{},"析":{"docs":{},",":{"docs":{},"首":{"docs":{},"先":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"测":{"docs":{},"试":{"docs":{},"三":{"docs":{},"种":{"docs":{},"情":{"docs":{},"景":{"docs":{},"下":{"docs":{},",":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"和":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"描":{"docs":{},"述":{"docs":{},"\"":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}},",":{"docs":{},"斜":{"docs":{},"线":{"docs":{},"后":{"docs":{},"面":{"docs":{},"紧":{"docs":{},"跟":{"docs":{},"一":{"docs":{},"个":{"docs":{},"空":{"docs":{},"格":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}},"了":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"的":{"docs":{},"规":{"docs":{},"则":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}},"族":{"docs":{},"群":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}},"样":{"docs":{},"式":{"docs":{},"注":{"docs":{},"释":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}},"每":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"包":{"docs":{},"都":{"docs":{},"应":{"docs":{},"该":{"docs":{},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"包":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}},"需":{"docs":{},"要":{"docs":{},"导":{"docs":{},"出":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{},"和":{"docs":{},"常":{"docs":{},"量":{"docs":{},"都":{"docs":{},"必":{"docs":{},"须":{"docs":{},"有":{"docs":{},"注":{"docs":{},"释":{"docs":{},"说":{"docs":{},"明":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}},"类":{"docs":{},"型":{"docs":{},"定":{"docs":{},"义":{"docs":{},"(":{"docs":{},"t":{"docs":{},"y":{"docs":{},"p":{"docs":{},"e":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}},"自":{"docs":{},"定":{"docs":{},"义":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"或":{"docs":{},"者":{"docs":{},"接":{"docs":{},"口":{"docs":{},"都":{"docs":{},"必":{"docs":{},"须":{"docs":{},"有":{"docs":{},"注":{"docs":{},"释":{"docs":{},"说":{"docs":{},"明":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}},"重":{"docs":{},"要":{"docs":{},"的":{"docs":{},"可":{"docs":{},"导":{"docs":{},"出":{"docs":{},"函":{"docs":{},"数":{"docs":{},"都":{"docs":{},"要":{"docs":{},"首":{"docs":{},"先":{"docs":{},"编":{"docs":{},"写":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{},"例":{"docs":{},",":{"docs":{},"测":{"docs":{},"试":{"docs":{},"用":{"docs":{},"例":{"docs":{},"和":{"docs":{},"正":{"docs":{},"规":{"docs":{},"代":{"docs":{},"码":{"docs":{},"一":{"docs":{},"起":{"docs":{},"提":{"docs":{},"交":{"docs":{},"方":{"docs":{},"便":{"docs":{},"进":{"docs":{},"行":{"docs":{},"回":{"docs":{},"归":{"docs":{},"测":{"docs":{},"试":{"docs":{},"。":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"字":{"docs":{},"段":{"docs":{},"按":{"docs":{},"照":{"docs":{},"自":{"docs":{},"身":{"docs":{},"的":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"系":{"docs":{},"数":{"docs":{},"来":{"docs":{},"确":{"docs":{},"定":{"docs":{},"在":{"docs":{},"内":{"docs":{},"存":{"docs":{},"中":{"docs":{},"的":{"docs":{},"偏":{"docs":{},"移":{"docs":{},"量":{"docs":{},",":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"因":{"docs":{},"偏":{"docs":{},"移":{"docs":{},"而":{"docs":{},"浪":{"docs":{},"费":{"docs":{},"的":{"docs":{},"大":{"docs":{},"小":{"docs":{},"也":{"docs":{},"不":{"docs":{},"同":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"特":{"docs":{},"殊":{"docs":{},"实":{"docs":{},"现":{"docs":{},"需":{"docs":{},"要":{"docs":{},"注":{"docs":{},"释":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}},"有":{"docs":{},"名":{"docs":{},"词":{"docs":{},"时":{"docs":{},",":{"docs":{},"需":{"docs":{},"遵":{"docs":{},"循":{"docs":{},"以":{"docs":{},"下":{"docs":{},"规":{"docs":{},"则":{"docs":{},":":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}},"解":{"docs":{},"析":{"docs":{},"函":{"docs":{},"数":{"docs":{},"应":{"docs":{},"该":{"docs":{},"注":{"docs":{},"明":{"docs":{},"解":{"docs":{},"析":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"的":{"docs":{},"范":{"docs":{},"例":{"docs":{},",":{"docs":{},"并":{"docs":{},"明":{"docs":{},"确":{"docs":{},"不":{"docs":{},"能":{"docs":{},"处":{"docs":{},"理":{"docs":{},"的":{"docs":{},"异":{"docs":{},"常":{"docs":{},"情":{"docs":{},"况":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"、":{"docs":{},"校":{"docs":{},"验":{"docs":{},"、":{"docs":{},"计":{"docs":{},"算":{"docs":{},"的":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"应":{"docs":{},"该":{"docs":{},"进":{"docs":{},"行":{"docs":{},"分":{"docs":{},"离":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}},"决":{"docs":{},",":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"需":{"docs":{},"要":{"docs":{},"描":{"docs":{},"述":{"docs":{},"谁":{"docs":{},",":{"docs":{},"在":{"docs":{},"什":{"docs":{},"么":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},",":{"docs":{},"如":{"docs":{},"何":{"docs":{},"使":{"docs":{},"用":{"docs":{},"接":{"docs":{},"口":{"docs":{},"。":{"docs":{"第二篇:代码风格/7.注释.html":{"ref":"第二篇:代码风格/7.注释.html","tf":0.0036900369003690036}}}}}}}}}}}}}}}}}}}},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"缺":{"docs":{},"省":{"docs":{},"处":{"docs":{},"理":{"docs":{},"逻":{"docs":{},"辑":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}},"判":{"docs":{},"断":{"docs":{},"当":{"docs":{},"前":{"docs":{},"文":{"docs":{},"件":{"docs":{},"是":{"docs":{},"否":{"docs":{},"应":{"docs":{},"该":{"docs":{},"归":{"docs":{},"属":{"docs":{},"于":{"docs":{},"当":{"docs":{},"前":{"docs":{},"包":{"docs":{},",":{"docs":{},"主":{"docs":{},"要":{"docs":{},"以":{"docs":{},"职":{"docs":{},"责":{"docs":{},"进":{"docs":{},"行":{"docs":{},"判":{"docs":{},"断":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"注":{"docs":{},"意":{"docs":{},"的":{"docs":{},"时":{"docs":{},",":{"docs":{},"上":{"docs":{},"面":{"docs":{},"运":{"docs":{},"行":{"docs":{},"基":{"docs":{},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},"时":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"编":{"docs":{},"译":{"docs":{},"选":{"docs":{},"项":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"运":{"docs":{},"行":{"docs":{},"上":{"docs":{},"面":{"docs":{},"基":{"docs":{},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},"时":{"docs":{},",":{"docs":{},"传":{"docs":{},"递":{"docs":{},"了":{"docs":{},"禁":{"docs":{},"止":{"docs":{},"内":{"docs":{},"联":{"docs":{},"的":{"docs":{},"编":{"docs":{},"译":{"docs":{},"选":{"docs":{},"项":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}},"做":{"docs":{},"一":{"docs":{},"次":{"docs":{},"偏":{"docs":{},"移":{"docs":{},"值":{"docs":{},"与":{"docs":{},"指":{"docs":{},"针":{"docs":{},"的":{"docs":{},"加":{"docs":{},"法":{"docs":{},"运":{"docs":{},"算":{"docs":{},",":{"docs":{},"才":{"docs":{},"能":{"docs":{},"获":{"docs":{},"取":{"docs":{},"要":{"docs":{},"访":{"docs":{},"问":{"docs":{},"的":{"docs":{},"值":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},",":{"docs":{},"访":{"docs":{},"问":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"的":{"docs":{},"机":{"docs":{},"器":{"docs":{},"代":{"docs":{},"码":{"docs":{},"更":{"docs":{},"紧":{"docs":{},"凑":{"docs":{},",":{"docs":{},"速":{"docs":{},"度":{"docs":{},"更":{"docs":{},"快":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"读":{"docs":{},"取":{"docs":{},"环":{"docs":{},"境":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"并":{"docs":{},"转":{"docs":{},"换":{"docs":{},"为":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"配":{"docs":{},"置":{"docs":{},"。":{"docs":{},"环":{"docs":{},"境":{"docs":{},"变":{"docs":{},"量":{"docs":{},"在":{"docs":{},"程":{"docs":{},"序":{"docs":{},"执":{"docs":{},"行":{"docs":{},"前":{"docs":{},"已":{"docs":{},"经":{"docs":{},"确":{"docs":{},"定":{"docs":{},",":{"docs":{},"执":{"docs":{},"行":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},"不":{"docs":{},"会":{"docs":{},"发":{"docs":{},"生":{"docs":{},"改":{"docs":{},"变":{"docs":{},"。":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"d":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"f":{"docs":{},"i":{"docs":{},"g":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"z":{"docs":{},"e":{"docs":{},"r":{"docs":{},"o":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"三":{"docs":{},"个":{"docs":{},"以":{"docs":{},"上":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"名":{"docs":{},",":{"docs":{},"类":{"docs":{},"似":{"docs":{},"于":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}},"两":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"名":{"docs":{},"综":{"docs":{},"合":{"docs":{},"两":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}},"二":{"docs":{},"维":{"docs":{},"切":{"docs":{},"片":{"docs":{},"或":{"docs":{},"数":{"docs":{},"组":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"传":{"docs":{},"输":{"docs":{},"协":{"docs":{},"议":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}}}}},"的":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"但":{"docs":{},"我":{"docs":{},"们":{"docs":{},"仍":{"docs":{},"然":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{},"的":{"docs":{},"包":{"docs":{},"内":{"docs":{},"将":{"docs":{},"其":{"docs":{},"和":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}},"保":{"docs":{},"持":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},"证":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}},"函":{"docs":{},"数":{"docs":{},"只":{"docs":{},"会":{"docs":{},"被":{"docs":{},"执":{"docs":{},"行":{"docs":{},"一":{"docs":{},"次":{"docs":{},"和":{"docs":{},"多":{"docs":{},"次":{"docs":{},"执":{"docs":{},"行":{"docs":{},",":{"docs":{},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}},"加":{"docs":{},"密":{"docs":{},"传":{"docs":{},"输":{"docs":{},"协":{"docs":{},"议":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"一":{"docs":{},"。":{"docs":{},"最":{"docs":{},"终":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}},"写":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"读":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"是":{"docs":{},"为":{"docs":{},"了":{"docs":{},"避":{"docs":{},"免":{"docs":{},"在":{"docs":{},"并":{"docs":{},"发":{"docs":{},"环":{"docs":{},"境":{"docs":{},"下":{"docs":{},",":{"docs":{},"同":{"docs":{},"时":{"docs":{},"访":{"docs":{},"问":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"产":{"docs":{},"生":{"docs":{},"的":{"docs":{},"安":{"docs":{},"全":{"docs":{},"问":{"docs":{},"题":{"docs":{},"。":{"docs":{},"那":{"docs":{},"么":{"docs":{},",":{"docs":{},"在":{"docs":{},"并":{"docs":{},"发":{"docs":{},"环":{"docs":{},"境":{"docs":{},"下":{"docs":{},",":{"docs":{},"是":{"docs":{},"否":{"docs":{},"必":{"docs":{},"须":{"docs":{},"加":{"docs":{},"锁":{"docs":{},"?":{"docs":{},"答":{"docs":{},"案":{"docs":{},"是":{"docs":{},"否":{"docs":{},"定":{"docs":{},"的":{"docs":{},"。":{"docs":{},"并":{"docs":{},"非":{"docs":{},"所":{"docs":{},"有":{"docs":{},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},"都":{"docs":{},"需":{"docs":{},"要":{"docs":{},"加":{"docs":{},"锁":{"docs":{},"。":{"docs":{},"适":{"docs":{},"当":{"docs":{},"地":{"docs":{},"降":{"docs":{},"低":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"粒":{"docs":{},"度":{"docs":{},",":{"docs":{},"甚":{"docs":{},"至":{"docs":{},"采":{"docs":{},"用":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"化":{"docs":{},"的":{"docs":{},"设":{"docs":{},"计":{"docs":{},",":{"docs":{},"更":{"docs":{},"能":{"docs":{},"提":{"docs":{},"升":{"docs":{},"并":{"docs":{},"发":{"docs":{},"能":{"docs":{},"力":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"并":{"docs":{},"且":{"docs":{},"继":{"docs":{},"续":{"docs":{},"执":{"docs":{},"行":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"匹":{"docs":{},"配":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"单":{"docs":{},"个":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"名":{"docs":{},"以":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"函":{"docs":{},"数":{"docs":{},"圈":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"度":{"docs":{},"最":{"docs":{},"大":{"docs":{},"值":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"元":{"docs":{},"测":{"docs":{},"试":{"docs":{},"文":{"docs":{},"件":{"docs":{},"名":{"docs":{},"命":{"docs":{},"名":{"docs":{},"规":{"docs":{},"范":{"docs":{},"为":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}},"测":{"docs":{},"文":{"docs":{},"件":{"docs":{},"行":{"docs":{},"数":{"docs":{},"限":{"docs":{},"制":{"docs":{},"是":{"docs":{},"普":{"docs":{},"通":{"docs":{},"文":{"docs":{},"件":{"docs":{},"的":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}}}},"名":{"docs":{},"字":{"docs":{},"应":{"docs":{},"该":{"docs":{},"追":{"docs":{},"求":{"docs":{},"清":{"docs":{},"晰":{"docs":{},"且":{"docs":{},"越":{"docs":{},"来":{"docs":{},"越":{"docs":{},"收":{"docs":{},"敛":{"docs":{},",":{"docs":{},"符":{"docs":{},"合":{"docs":{},"‘":{"docs":{},"单":{"docs":{},"一":{"docs":{},"职":{"docs":{},"责":{"docs":{},"’":{"docs":{},"原":{"docs":{},"则":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"像":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"m":{"docs":{},"o":{"docs":{},"n":{"docs":{},"一":{"docs":{},"样":{"docs":{},",":{"docs":{},"什":{"docs":{},"么":{"docs":{},"都":{"docs":{},"能":{"docs":{},"往":{"docs":{},"里":{"docs":{},"面":{"docs":{},"放":{"docs":{},",":{"docs":{},"越":{"docs":{},"来":{"docs":{},"越":{"docs":{},"膨":{"docs":{},"胀":{"docs":{},",":{"docs":{},"让":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"关":{"docs":{},"系":{"docs":{},"变":{"docs":{},"得":{"docs":{},"复":{"docs":{},"杂":{"docs":{},",":{"docs":{},"不":{"docs":{},"利":{"docs":{},"于":{"docs":{},"阅":{"docs":{},"读":{"docs":{},"、":{"docs":{},"复":{"docs":{},"用":{"docs":{},"、":{"docs":{},"重":{"docs":{},"构":{"docs":{},"。":{"docs":{},"注":{"docs":{},"意":{"docs":{},",":{"docs":{},"x":{"docs":{},"x":{"docs":{},"x":{"docs":{},"/":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"l":{"docs":{},"s":{"docs":{},"/":{"docs":{},"e":{"docs":{},"n":{"docs":{},"c":{"docs":{},"r":{"docs":{},"y":{"docs":{},"p":{"docs":{},"t":{"docs":{},"i":{"docs":{},"o":{"docs":{},"n":{"docs":{},"这":{"docs":{},"样":{"docs":{},"的":{"docs":{},"包":{"docs":{},"名":{"docs":{},"是":{"docs":{},"允":{"docs":{},"许":{"docs":{},"的":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"多":{"docs":{},"行":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"定":{"docs":{},"义":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"个":{"docs":{},"相":{"docs":{},"似":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"线":{"docs":{},"程":{"docs":{},"模":{"docs":{},"型":{"docs":{},"改":{"docs":{},"为":{"docs":{},"主":{"docs":{},"从":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},",":{"docs":{},"避":{"docs":{},"免":{"docs":{},"对":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"消":{"docs":{},"息":{"docs":{},"队":{"docs":{},"列":{"docs":{},"锁":{"docs":{},"读":{"docs":{},"取":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}},"好":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},",":{"docs":{},"s":{"docs":{},"l":{"docs":{},"i":{"docs":{},"c":{"docs":{},"e":{"docs":{},"i":{"docs":{},"n":{"docs":{},"d":{"docs":{},"e":{"docs":{},"x":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}},"小":{"docs":{},"写":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"有":{"docs":{},"多":{"docs":{},"个":{"docs":{},"单":{"docs":{},"词":{"docs":{},"使":{"docs":{},"用":{"docs":{},"连":{"docs":{},"字":{"docs":{},"符":{"docs":{},"分":{"docs":{},"隔":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}},"汽":{"docs":{},"车":{"docs":{},"结":{"docs":{},"构":{"docs":{},"申":{"docs":{},"明":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"时":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}},"并":{"docs":{},"不":{"docs":{},"总":{"docs":{},"是":{"docs":{},"产":{"docs":{},"生":{"docs":{},"一":{"docs":{},"个":{"docs":{},"新":{"docs":{},"的":{"docs":{},"日":{"docs":{},"历":{"docs":{},"日":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"使":{"docs":{},"用":{"docs":{},"`":{"docs":{},"t":{"docs":{},"i":{"docs":{},"m":{"docs":{},"e":{"docs":{},".":{"docs":{},"a":{"docs":{},"d":{"docs":{},"d":{"docs":{},"`":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}},"用":{"docs":{},"于":{"docs":{},"添":{"docs":{},"加":{"docs":{},"时":{"docs":{},"间":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"取":{"docs":{},"决":{"docs":{},"于":{"docs":{},"意":{"docs":{},"图":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"我":{"docs":{},"们":{"docs":{},"想":{"docs":{},"要":{"docs":{},"下":{"docs":{},"一":{"docs":{},"个":{"docs":{},"日":{"docs":{},"历":{"docs":{},"日":{"docs":{},"(":{"docs":{},"当":{"docs":{},"前":{"docs":{},"天":{"docs":{},"的":{"docs":{},"下":{"docs":{},"一":{"docs":{},"天":{"docs":{},")":{"docs":{},"的":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"时":{"docs":{},"间":{"docs":{},"点":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"应":{"docs":{},"该":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"好":{"docs":{},"过":{"docs":{},"引":{"docs":{},"用":{"docs":{},",":{"docs":{},"什":{"docs":{},"么":{"docs":{},"意":{"docs":{},"思":{"docs":{},"呢":{"docs":{},",":{"docs":{},"就":{"docs":{},"是":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"使":{"docs":{},"用":{"docs":{},"栈":{"docs":{},"变":{"docs":{},"量":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"堆":{"docs":{},"变":{"docs":{},"量":{"docs":{},"。":{"docs":{},"下":{"docs":{},"面":{"docs":{},"举":{"docs":{},"一":{"docs":{},"个":{"docs":{},"反":{"docs":{},"常":{"docs":{},"识":{"docs":{},"的":{"docs":{},"例":{"docs":{},"子":{"docs":{},",":{"docs":{},"来":{"docs":{},"证":{"docs":{},"明":{"docs":{},"小":{"docs":{},"的":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"比":{"docs":{},"在":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"创":{"docs":{},"建":{"docs":{},"引":{"docs":{},"用":{"docs":{},"变":{"docs":{},"量":{"docs":{},"要":{"docs":{},"好":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"常":{"docs":{},"量":{"docs":{},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}},"推":{"docs":{},"荐":{"docs":{},"以":{"docs":{},"类":{"docs":{},"名":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"英":{"docs":{},"文":{"docs":{},"首":{"docs":{},"字":{"docs":{},"母":{"docs":{},"的":{"docs":{},"小":{"docs":{},"写":{"docs":{},"作":{"docs":{},"为":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"的":{"docs":{},"命":{"docs":{},"名":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}},"方":{"docs":{},"法":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"中":{"docs":{},"没":{"docs":{},"有":{"docs":{},"使":{"docs":{},"用":{"docs":{},"值":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}},"是":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}},"支":{"docs":{},"持":{"docs":{},"将":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"来":{"docs":{},"获":{"docs":{},"取":{"docs":{},"和":{"docs":{},"放":{"docs":{},"回":{"docs":{},"池":{"docs":{},"子":{"docs":{},"中":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}},"释":{"docs":{},"放":{"docs":{},"锁":{"docs":{},",":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}},"实":{"docs":{},"例":{"docs":{},"化":{"docs":{},"具":{"docs":{},"有":{"docs":{},"给":{"docs":{},"定":{"docs":{},"容":{"docs":{},"量":{"docs":{},"的":{"docs":{},"池":{"docs":{},",":{"docs":{},"如":{"docs":{},"下":{"docs":{},"所":{"docs":{},"示":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}},"对":{"docs":{},"资":{"docs":{},"源":{"docs":{},"进":{"docs":{},"行":{"docs":{},"上":{"docs":{},"锁":{"docs":{},",":{"docs":{},"在":{"docs":{},"访":{"docs":{},"问":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"后":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}},"获":{"docs":{},"得":{"docs":{},"锁":{"docs":{},"后":{"docs":{},",":{"docs":{},"其":{"docs":{},"他":{"docs":{},"请":{"docs":{},"求":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},"都":{"docs":{},"会":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"在":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}},",":{"docs":{},"直":{"docs":{},"到":{"docs":{},"锁":{"docs":{},"被":{"docs":{},"释":{"docs":{},"放":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}},"在":{"docs":{},"结":{"docs":{},"束":{"docs":{},"阻":{"docs":{},"塞":{"docs":{},"时":{"docs":{},",":{"docs":{},"会":{"docs":{},"重":{"docs":{},"新":{"docs":{},"给":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}},"时":{"docs":{},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"加":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"式":{"docs":{},"一":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"二":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}},"传":{"docs":{},"递":{"docs":{},"后":{"docs":{},",":{"docs":{},"再":{"docs":{},"加":{"docs":{},"上":{"docs":{},"其":{"docs":{},"长":{"docs":{},"度":{"docs":{},"不":{"docs":{},"可":{"docs":{},"扩":{"docs":{},"展":{"docs":{},",":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"到":{"docs":{},"性":{"docs":{},"能":{"docs":{},"我":{"docs":{},"们":{"docs":{},"一":{"docs":{},"般":{"docs":{},"很":{"docs":{},"少":{"docs":{},"使":{"docs":{},"用":{"docs":{},"它":{"docs":{},"。":{"docs":{},"实":{"docs":{},"际":{"docs":{},"上":{"docs":{},",":{"docs":{},"凡":{"docs":{},"事":{"docs":{},"无":{"docs":{},"绝":{"docs":{},"对":{"docs":{},"。":{"docs":{},"有":{"docs":{},"时":{"docs":{},"使":{"docs":{},"用":{"docs":{},"数":{"docs":{},"组":{"docs":{},"进":{"docs":{},"行":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"传":{"docs":{},"递":{"docs":{},",":{"docs":{},"比":{"docs":{},"使":{"docs":{},"用":{"docs":{},"切":{"docs":{},"片":{"docs":{},"要":{"docs":{},"好":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"明":{"docs":{},"文":{"docs":{},"传":{"docs":{},"输":{"docs":{},"协":{"docs":{},"议":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"确":{"docs":{},"地":{"docs":{},"告":{"docs":{},"诉":{"docs":{},"我":{"docs":{},"们":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"并":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"知":{"docs":{},"道":{"docs":{},"变":{"docs":{},"量":{"docs":{},"是":{"docs":{},"分":{"docs":{},"配":{"docs":{},"在":{"docs":{},"栈":{"docs":{},"(":{"docs":{},"s":{"docs":{},"t":{"docs":{},"a":{"docs":{},"c":{"docs":{},"k":{"docs":{},")":{"docs":{},"上":{"docs":{},"还":{"docs":{},"是":{"docs":{},"堆":{"docs":{},"(":{"docs":{},"h":{"docs":{},"e":{"docs":{},"a":{"docs":{},"p":{"docs":{},")":{"docs":{},"上":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{},"l":{"docs":{},"a":{"docs":{},"n":{"docs":{},"g":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"更":{"docs":{},"多":{"docs":{},"可":{"docs":{},"参":{"docs":{},"考":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"关":{"docs":{},"于":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"未":{"docs":{},"导":{"docs":{},"出":{"docs":{},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"常":{"docs":{},"量":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}},"概":{"docs":{},"述":{"docs":{},"了":{"docs":{},"几":{"docs":{},"个":{"docs":{},"内":{"docs":{},"置":{"docs":{},"的":{"docs":{},",":{"docs":{},"不":{"docs":{},"应":{"docs":{},"在":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}},"比":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}},"如":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"多":{"docs":{},"个":{"docs":{},"班":{"docs":{},"级":{"docs":{},"下":{"docs":{},"的":{"docs":{},"学":{"docs":{},"生":{"docs":{},"i":{"docs":{},"d":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}},"下":{"docs":{},"面":{"docs":{},"将":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"的":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}}}},"现":{"docs":{},"在":{"docs":{},"是":{"docs":{},"明":{"docs":{},"确":{"docs":{},"的":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"一":{"docs":{},"个":{"docs":{},"拷":{"docs":{},"贝":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}},"等":{"docs":{},"单":{"docs":{},"词":{"docs":{},"开":{"docs":{},"头":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},")":{"docs":{},"进":{"docs":{},"行":{"docs":{},"操":{"docs":{},"作":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"很":{"docs":{},"容":{"docs":{},"易":{"docs":{},"忘":{"docs":{},"记":{"docs":{},"使":{"docs":{},"用":{"docs":{},"原":{"docs":{},"子":{"docs":{},"操":{"docs":{},"作":{"docs":{},"来":{"docs":{},"读":{"docs":{},"取":{"docs":{},"或":{"docs":{},"修":{"docs":{},"改":{"docs":{},"变":{"docs":{},"量":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}},"操":{"docs":{},"作":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"使":{"docs":{},"用":{"docs":{},"开":{"docs":{},"源":{"docs":{},"库":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}},"于":{"docs":{},"其":{"docs":{},"中":{"docs":{},"的":{"docs":{},"最":{"docs":{},"大":{"docs":{},"值":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}},"构":{"docs":{},"成":{"docs":{},"数":{"docs":{},"组":{"docs":{},"的":{"docs":{},"元":{"docs":{},"素":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"系":{"docs":{},"数":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}},"待":{"docs":{},"下":{"docs":{},"次":{"docs":{},"被":{"docs":{},"唤":{"docs":{},"醒":{"docs":{},"。":{"docs":{},"为":{"docs":{},"了":{"docs":{},"保":{"docs":{},"险":{"docs":{},"起":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}},"通":{"docs":{},"知":{"docs":{},",":{"docs":{},"直":{"docs":{},"到":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}},",":{"docs":{},"一":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"另":{"docs":{},"一":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}},"缩":{"docs":{},"略":{"docs":{},"语":{"docs":{},"要":{"docs":{},"么":{"docs":{},"全":{"docs":{},"小":{"docs":{},"写":{"docs":{},",":{"docs":{},"要":{"docs":{},"么":{"docs":{},"全":{"docs":{},"大":{"docs":{},"写":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}},"若":{"docs":{},"量":{"docs":{},"类":{"docs":{},"型":{"docs":{},"为":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}},"要":{"docs":{},"好":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}},",":{"docs":{},"i":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},"比":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.003289473684210526}}},"么":{"docs":{},"是":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":1.6666666666666665}}}}},"详":{"docs":{},"细":{"docs":{},"的":{"docs":{},"专":{"docs":{},"有":{"docs":{},"名":{"docs":{},"词":{"docs":{},"列":{"docs":{},"表":{"docs":{},"可":{"docs":{},"参":{"docs":{},"考":{"docs":{},"这":{"docs":{},"里":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}},"里":{"docs":{},"面":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}},"下":{"docs":{},"划":{"docs":{},"线":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}},"装":{"docs":{},"的":{"docs":{},"对":{"docs":{},"象":{"docs":{},"可":{"docs":{},"以":{"docs":{},"被":{"docs":{},"无":{"docs":{},"通":{"docs":{},"知":{"docs":{},"地":{"docs":{},"被":{"docs":{},"回":{"docs":{},"收":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}},"量":{"docs":{},"名":{"docs":{},"不":{"docs":{},"应":{"docs":{},"该":{"docs":{},"以":{"docs":{},"类":{"docs":{},"型":{"docs":{},"作":{"docs":{},"为":{"docs":{},"前":{"docs":{},"缀":{"docs":{},"/":{"docs":{},"后":{"docs":{},"缀":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}},"应":{"docs":{},"该":{"docs":{},"是":{"docs":{},"名":{"docs":{},"词":{"docs":{},",":{"docs":{},"进":{"docs":{},"行":{"docs":{},"时":{"docs":{},"和":{"docs":{},"过":{"docs":{},"去":{"docs":{},"式":{"docs":{},"可":{"docs":{},"以":{"docs":{},"做":{"docs":{},"形":{"docs":{},"容":{"docs":{},"词":{"docs":{},",":{"docs":{},"成":{"docs":{},"为":{"docs":{},"量":{"docs":{},"名":{"docs":{},"的":{"docs":{},"一":{"docs":{},"部":{"docs":{},"分":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"遵":{"docs":{},"循":{"docs":{},"驼":{"docs":{},"峰":{"docs":{},"式":{"docs":{},",":{"docs":{},"根":{"docs":{},"据":{"docs":{},"是":{"docs":{},"否":{"docs":{},"导":{"docs":{},"出":{"docs":{},"决":{"docs":{},"定":{"docs":{},"首":{"docs":{},"字":{"docs":{},"母":{"docs":{},"大":{"docs":{},"小":{"docs":{},"写":{"docs":{},"。":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}}}}}}}}}}}}}}}}}}}}},"命":{"docs":{},"名":{"docs":{"第二篇:代码风格/8.命名.html":{"ref":"第二篇:代码风格/8.命名.html","tf":0.001644736842105263}}}}},";":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"业":{"docs":{},"务":{"docs":{},"代":{"docs":{},"码":{"docs":{},"禁":{"docs":{},"止":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}},"则":{"docs":{},"需":{"docs":{},"要":{"docs":{},"以":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}},"不":{"docs":{},"存":{"docs":{},"在":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}},"是":{"docs":{},"在":{"docs":{},"对":{"docs":{},"象":{"docs":{},"使":{"docs":{},"用":{"docs":{},"完":{"docs":{},"毕":{"docs":{},"后":{"docs":{},",":{"docs":{},"放":{"docs":{},"回":{"docs":{},"到":{"docs":{},"对":{"docs":{},"象":{"docs":{},"池":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}},"阻":{"docs":{},"塞":{"docs":{},"等":{"docs":{},"待":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"判":{"docs":{},"断":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"是":{"docs":{},"否":{"docs":{},"为":{"docs":{},"空":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"更":{"docs":{},"加":{"docs":{},"直":{"docs":{},"观":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}},"条":{"docs":{},"件":{"docs":{},"较":{"docs":{},"为":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"时":{"docs":{},",":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"封":{"docs":{},"装":{"docs":{},"成":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}},"是":{"docs":{},"否":{"docs":{},"有":{"docs":{},"错":{"docs":{},"误":{"docs":{},"发":{"docs":{},"生":{"docs":{},"之":{"docs":{},"后":{"docs":{},",":{"docs":{},"再":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}},"又":{"docs":{},"如":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"没":{"docs":{},"有":{"docs":{},"明":{"docs":{},"确":{"docs":{},"说":{"docs":{},"明":{"docs":{},",":{"docs":{},"会":{"docs":{},"产":{"docs":{},"生":{"docs":{},"模":{"docs":{},"糊":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"文":{"docs":{},"档":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}},"循":{"docs":{},"环":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"不":{"docs":{},"要":{"docs":{},"存":{"docs":{},"储":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}},"指":{"docs":{},"向":{"docs":{},"的":{"docs":{},"是":{"docs":{},"同":{"docs":{},"一":{"docs":{},"个":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"赋":{"docs":{},"值":{"docs":{},"给":{"docs":{},"一":{"docs":{},"个":{"docs":{},"同":{"docs":{},"名":{"docs":{},"的":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"变":{"docs":{},"量":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"来":{"docs":{},"达":{"docs":{},"到":{"docs":{},"取":{"docs":{},"不":{"docs":{},"同":{"docs":{},"地":{"docs":{},"址":{"docs":{},"的":{"docs":{},"目":{"docs":{},"的":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"中":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":3.3410256410256407}}}}},"多":{"docs":{},"次":{"docs":{},"尝":{"docs":{},"试":{"docs":{},",":{"docs":{},"直":{"docs":{},"至":{"docs":{},"成":{"docs":{},"功":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}},"把":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"判":{"docs":{},"断":{"docs":{},"放":{"docs":{},"前":{"docs":{},"面":{"docs":{},",":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"的":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"判":{"docs":{},"断":{"docs":{},"放":{"docs":{},"后":{"docs":{},"面":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}},"替":{"docs":{},"换":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}},"为":{"docs":{},"指":{"docs":{},"针":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}},"队":{"docs":{},"列":{"docs":{},"里":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"调":{"docs":{},"用":{"docs":{},",":{"docs":{},"这":{"docs":{},"增":{"docs":{},"加":{"docs":{},"了":{"docs":{},"跳":{"docs":{},"过":{"docs":{},"重":{"docs":{},"要":{"docs":{},"清":{"docs":{},"理":{"docs":{},"任":{"docs":{},"务":{"docs":{},"的":{"docs":{},"风":{"docs":{},"险":{"docs":{},"。":{"docs":{"第二篇:代码风格/9.流程控制.html":{"ref":"第二篇:代码风格/9.流程控制.html","tf":0.0016474464579901153}}}}}}}}}}}}}}}}}}}}}}}}}}},"从":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"函":{"docs":{},"数":{"docs":{},"名":{"docs":{},"开":{"docs":{},"始":{"docs":{},"算":{"docs":{},"第":{"docs":{},"一":{"docs":{},"层":{"docs":{},",":{"docs":{},"当":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"嵌":{"docs":{},"套":{"docs":{},"深":{"docs":{},"度":{"docs":{},"超":{"docs":{},"过":{"4":{"docs":{},"层":{"docs":{},",":{"docs":{},"往":{"docs":{},"往":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"圈":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"度":{"docs":{},"过":{"docs":{},"高":{"docs":{},",":{"docs":{},"函":{"docs":{},"数":{"docs":{},"变":{"docs":{},"得":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"不":{"docs":{},"可":{"docs":{},"读":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"通":{"docs":{},"过":{"docs":{},"拆":{"docs":{},"分":{"docs":{},"函":{"docs":{},"数":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"来":{"docs":{},"减":{"docs":{},"少":{"docs":{},"嵌":{"docs":{},"套":{"docs":{},"深":{"docs":{},"度":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}}}}}},"前":{"docs":{},"文":{"docs":{},"可":{"docs":{},"知":{"docs":{},",":{"docs":{},"可":{"docs":{},"取":{"docs":{},"址":{"docs":{},"的":{"docs":{},"值":{"docs":{},"可":{"docs":{},"以":{"docs":{},"调":{"docs":{},"用":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"为":{"docs":{},"指":{"docs":{},"针":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},",":{"docs":{},"但":{"docs":{},"这":{"docs":{},"里":{"docs":{},"为":{"docs":{},"何":{"docs":{},"不":{"docs":{},"能":{"docs":{},"将":{"docs":{},"值":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"切":{"docs":{},"片":{"docs":{},"中":{"docs":{},"过":{"docs":{},"滤":{"docs":{},"指":{"docs":{},"定":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{},"注":{"docs":{},"意":{"docs":{},":":{"docs":{},"不":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}},"结":{"docs":{},"构":{"docs":{},"化":{"docs":{},"二":{"docs":{},"进":{"docs":{},"制":{"docs":{},"数":{"docs":{},"据":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}},"果":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"出":{"docs":{},",":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},".":{"docs":{},"j":{"docs":{},"o":{"docs":{},"i":{"docs":{},"n":{"docs":{},"(":{"docs":{},")":{"docs":{},"、":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"、":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"s":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"f":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"和":{"docs":{},"b":{"docs":{},"y":{"docs":{},"t":{"docs":{},"e":{"docs":{},"[":{"docs":{},"]":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"性":{"docs":{},"能":{"docs":{},"出":{"docs":{},"发":{"docs":{},",":{"docs":{},"兼":{"docs":{},"顾":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"便":{"docs":{},"捷":{"docs":{},"与":{"docs":{},"代":{"docs":{},"码":{"docs":{},"可":{"docs":{},"读":{"docs":{},"性":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"待":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"的":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"不":{"docs":{},"涉":{"docs":{},"及":{"docs":{},"类":{"docs":{},"型":{"docs":{},"转":{"docs":{},"换":{"docs":{},"且":{"docs":{},"数":{"docs":{},"量":{"docs":{},"较":{"docs":{},"少":{"docs":{},"(":{"docs":{},"f":{"docs":{},"m":{"docs":{},"t":{"docs":{},".":{"docs":{},"s":{"docs":{},"p":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"t":{"docs":{},"f":{"docs":{},"(":{"docs":{},")":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"基":{"docs":{},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},"来":{"docs":{},"看":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"最":{"docs":{},"佳":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{},"移":{"docs":{},"位":{"docs":{},"法":{"docs":{},",":{"docs":{},"其":{"docs":{},"中":{"docs":{},"又":{"docs":{},"属":{"docs":{},"第":{"docs":{},"一":{"docs":{},"种":{"docs":{},"实":{"docs":{},"现":{"docs":{},"方":{"docs":{},"式":{"docs":{},"较":{"docs":{},"佳":{"docs":{},"。":{"docs":{},"性":{"docs":{},"能":{"docs":{},"最":{"docs":{},"差":{"docs":{},"的":{"docs":{},"也":{"docs":{},"是":{"docs":{},"最":{"docs":{},"常":{"docs":{},"用":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{},"截":{"docs":{},"取":{"docs":{},"法":{"docs":{},"。":{"docs":{},"随":{"docs":{},"着":{"docs":{},"切":{"docs":{},"片":{"docs":{},"长":{"docs":{},"度":{"docs":{},"的":{"docs":{},"增":{"docs":{},"加":{"docs":{},",":{"docs":{},"上":{"docs":{},"面":{"docs":{},"四":{"docs":{},"种":{"docs":{},"删":{"docs":{},"除":{"docs":{},"方":{"docs":{},"式":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"会":{"docs":{},"愈":{"docs":{},"加":{"docs":{},"明":{"docs":{},"显":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"这":{"docs":{},"个":{"docs":{},"例":{"docs":{},"子":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"到":{"docs":{},",":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"对":{"docs":{},"实":{"docs":{},"现":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"原":{"docs":{},"子":{"docs":{},"性":{"docs":{},"操":{"docs":{},"作":{"docs":{},"也":{"docs":{},"是":{"docs":{},"有":{"docs":{},"好":{"docs":{},"处":{"docs":{},"的":{"docs":{},"。":{"docs":{},"每":{"docs":{},"次":{"docs":{},"内":{"docs":{},"存":{"docs":{},"访":{"docs":{},"问":{"docs":{},"是":{"docs":{},"原":{"docs":{},"子":{"docs":{},"的":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"大":{"docs":{},"小":{"docs":{},"不":{"docs":{},"超":{"docs":{},"过":{"docs":{},"字":{"docs":{},"长":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"后":{"docs":{},",":{"docs":{},"对":{"docs":{},"该":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"访":{"docs":{},"问":{"docs":{},"就":{"docs":{},"是":{"docs":{},"原":{"docs":{},"子":{"docs":{},"的":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"特":{"docs":{},"性":{"docs":{},"在":{"docs":{},"并":{"docs":{},"发":{"docs":{},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},"至":{"docs":{},"关":{"docs":{},"重":{"docs":{},"要":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"出":{"docs":{},",":{"docs":{},"对":{"docs":{},"数":{"docs":{},"组":{"docs":{},"的":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"性":{"docs":{},"能":{"docs":{},"却":{"docs":{},"比":{"docs":{},"使":{"docs":{},"用":{"docs":{},"切":{"docs":{},"片":{"docs":{},"要":{"docs":{},"好":{"docs":{},"。":{"docs":{},"为":{"docs":{},"什":{"docs":{},"么":{"docs":{},"会":{"docs":{},"这":{"docs":{},"样":{"docs":{},"呢":{"docs":{},"?":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"输":{"docs":{},"出":{"docs":{},"结":{"docs":{},"果":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"到":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"变":{"docs":{},"量":{"docs":{},"(":{"docs":{},"非":{"docs":{},"常":{"docs":{},"量":{"docs":{},")":{"docs":{},"来":{"docs":{},"指":{"docs":{},"定":{"docs":{},"切":{"docs":{},"片":{"docs":{},"的":{"docs":{},"容":{"docs":{},"量":{"docs":{},",":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{},"切":{"docs":{},"片":{"docs":{},"发":{"docs":{},"生":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"影":{"docs":{},"响":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{},"指":{"docs":{},"定":{"docs":{},"切":{"docs":{},"片":{"docs":{},"的":{"docs":{},"长":{"docs":{},"度":{"docs":{},"时":{"docs":{},"也":{"docs":{},"是":{"docs":{},"一":{"docs":{},"样":{"docs":{},"的":{"docs":{},",":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"使":{"docs":{},"用":{"docs":{},"常":{"docs":{},"量":{"docs":{},"或":{"docs":{},"数":{"docs":{},"值":{"docs":{},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"日":{"docs":{},"志":{"docs":{},"中":{"docs":{},"可":{"docs":{},"以":{"docs":{},"很":{"docs":{},"容":{"docs":{},"易":{"docs":{},"看":{"docs":{},"到":{"docs":{},",":{"docs":{},"每":{"docs":{},"秒":{"docs":{},"钟":{"docs":{},"只":{"docs":{},"并":{"docs":{},"发":{"docs":{},"执":{"docs":{},"行":{"docs":{},"了":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}},"字":{"docs":{},"段":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}},"等":{"docs":{},"待":{"docs":{},"队":{"docs":{},"列":{"docs":{},"中":{"docs":{},"按":{"docs":{},"照":{"docs":{},"顺":{"docs":{},"序":{"docs":{},"唤":{"docs":{},"醒":{"docs":{},",":{"docs":{},"先":{"docs":{},"进":{"docs":{},"入":{"docs":{},"等":{"docs":{},"待":{"docs":{},"队":{"docs":{},"列":{"docs":{},",":{"docs":{},"先":{"docs":{},"被":{"docs":{},"唤":{"docs":{},"醒":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}}},"入":{"docs":{},"参":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"&":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"成":{"docs":{},"员":{"docs":{},"函":{"docs":{},"数":{"docs":{},"局":{"docs":{},"部":{"docs":{},"变":{"docs":{},"量":{"docs":{},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"减":{"docs":{},"少":{"docs":{},"嵌":{"docs":{},"套":{"docs":{},"(":{"docs":{},"圈":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"度":{"docs":{},")":{"docs":{},"魔":{"docs":{},"法":{"docs":{},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{},"函":{"docs":{},"数":{"docs":{},"分":{"docs":{},"组":{"docs":{},"与":{"docs":{},"顺":{"docs":{},"序":{"docs":{},"入":{"docs":{},"参":{"docs":{},"&":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"和":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"个":{"docs":{},"数":{"docs":{},"均":{"docs":{},"不":{"docs":{},"能":{"docs":{},"超":{"docs":{},"过":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}},"均":{"docs":{},"以":{"docs":{},"小":{"docs":{},"写":{"docs":{},"字":{"docs":{},"母":{"docs":{},"开":{"docs":{},"头":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"顺":{"docs":{},"序":{"docs":{},"根":{"docs":{},"据":{"docs":{},"关":{"docs":{},"联":{"docs":{},"性":{"docs":{},"排":{"docs":{},"在":{"docs":{},"一":{"docs":{},"起":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}},"减":{"docs":{},"少":{"docs":{},"嵌":{"docs":{},"套":{"docs":{},"(":{"docs":{},"圈":{"docs":{},"复":{"docs":{},"杂":{"docs":{},"度":{"docs":{},")":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{},"可":{"docs":{},"参":{"docs":{},"考":{"docs":{},"标":{"docs":{},"准":{"docs":{},"库":{"docs":{},"包":{"docs":{},"的":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}},"使":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"兼":{"docs":{},"容":{"docs":{},"的":{"docs":{},"抽":{"docs":{},"象":{"docs":{},"列":{"docs":{},"表":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}},"多":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}},"同":{"docs":{},"一":{"docs":{},"文":{"docs":{},"件":{"docs":{},"中":{"docs":{},"的":{"docs":{},"函":{"docs":{},"数":{"docs":{},"应":{"docs":{},"按":{"docs":{},"接":{"docs":{},"收":{"docs":{},"者":{"docs":{},"分":{"docs":{},"组":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}},"层":{"docs":{},"级":{"docs":{},"的":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"细":{"docs":{},"节":{"docs":{},"不":{"docs":{},"要":{"docs":{},"拆":{"docs":{},"分":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}},"时":{"docs":{},"迭":{"docs":{},"代":{"docs":{},"下":{"docs":{},"标":{"docs":{},"和":{"docs":{},"值":{"docs":{},",":{"docs":{},"则":{"docs":{},"需":{"docs":{},"要":{"docs":{},"将":{"docs":{},"切":{"docs":{},"片":{"docs":{},"/":{"docs":{},"数":{"docs":{},"组":{"docs":{},"的":{"docs":{},"元":{"docs":{},"素":{"docs":{},"改":{"docs":{},"为":{"docs":{},"指":{"docs":{},"针":{"docs":{},",":{"docs":{},"才":{"docs":{},"能":{"docs":{},"不":{"docs":{},"影":{"docs":{},"响":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"圆":{"docs":{},"周":{"docs":{},"率":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}},"嵌":{"docs":{},"套":{"docs":{},"深":{"docs":{},"度":{"docs":{},"不":{"docs":{},"能":{"docs":{},"超":{"docs":{},"过":{"4":{"docs":{},"层":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}},"docs":{}}}}}}}},"入":{"docs":{},"到":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"中":{"docs":{},"。":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}}},"类":{"docs":{},"型":{"docs":{},"会":{"docs":{},"泄":{"docs":{},"漏":{"docs":{},"实":{"docs":{},"现":{"docs":{},"细":{"docs":{},"节":{"docs":{},"、":{"docs":{},"禁":{"docs":{},"止":{"docs":{},"类":{"docs":{},"型":{"docs":{},"演":{"docs":{},"化":{"docs":{},"和":{"docs":{},"产":{"docs":{},"生":{"docs":{},"模":{"docs":{},"糊":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"文":{"docs":{},"档":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"建":{"docs":{},"议":{"docs":{},"调":{"docs":{},"整":{"docs":{},"为":{"docs":{},"这":{"docs":{},"样":{"docs":{},":":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}},"成":{"docs":{},"员":{"docs":{},"函":{"docs":{},"数":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}},"本":{"docs":{},",":{"docs":{},"可":{"docs":{},"提":{"docs":{},"高":{"docs":{},"程":{"docs":{},"序":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}},"批":{"docs":{},"量":{"docs":{},"查":{"docs":{},"询":{"docs":{},"函":{"docs":{},"数":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"获":{"docs":{},"取":{"docs":{},"用":{"docs":{},"户":{"docs":{},"信":{"docs":{},"息":{"docs":{},"(":{"docs":{},"允":{"docs":{},"许":{"docs":{},"部":{"docs":{},"分":{"docs":{},"失":{"docs":{},"败":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}},"需":{"docs":{},"全":{"docs":{},"部":{"docs":{},"成":{"docs":{},"功":{"docs":{},")":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}},"按":{"docs":{},"照":{"docs":{},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"规":{"docs":{},"则":{"docs":{},",":{"docs":{},"下":{"docs":{},"面":{"docs":{},"给":{"docs":{},"出":{"docs":{},"好":{"docs":{},"坏":{"docs":{},"文":{"docs":{},"件":{"docs":{},"内":{"docs":{},"容":{"docs":{},"布":{"docs":{},"局":{"docs":{},"示":{"docs":{},"例":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}},"条":{"docs":{},"件":{"docs":{},"不":{"docs":{},"满":{"docs":{},"足":{"docs":{},"或":{"docs":{},"出":{"docs":{},"现":{"docs":{},"错":{"docs":{},"误":{"docs":{},"应":{"docs":{},"尽":{"docs":{},"早":{"docs":{},"返":{"docs":{},"回":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}},"查":{"docs":{},"询":{"docs":{},"对":{"docs":{},"应":{"docs":{},"的":{"docs":{},"值":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"出":{"docs":{},"现":{"docs":{},"部":{"docs":{},"分":{"docs":{},"失":{"docs":{},"败":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"如":{"docs":{},"某":{"docs":{},"个":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}},"次":{"docs":{},",":{"docs":{},"则":{"docs":{},"禁":{"docs":{},"止":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"用":{"docs":{},"一":{"docs":{},"个":{"docs":{},"有":{"docs":{},"名":{"docs":{},"称":{"docs":{},"的":{"docs":{},"常":{"docs":{},"量":{"docs":{},"代":{"docs":{},"替":{"docs":{},",":{"docs":{},"可":{"docs":{},"读":{"docs":{},"性":{"docs":{},"更":{"docs":{},"好":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}},"正":{"docs":{},"常":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"不":{"docs":{},"应":{"docs":{},"该":{"docs":{},"在":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}},"添":{"docs":{},"加":{"docs":{},"成":{"docs":{},"功":{"docs":{},"或":{"docs":{},"出":{"docs":{},"错":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},"生":{"docs":{},"成":{"docs":{},"新":{"docs":{},"错":{"docs":{},"误":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}},";":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}},"将":{"docs":{},"实":{"docs":{},"体":{"docs":{},"添":{"docs":{},"加":{"docs":{},"到":{"docs":{},"列":{"docs":{},"表":{"docs":{},"中":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.01775147928994083}}}}}}}}}}}}}},"示":{"docs":{},"例":{"docs":{},",":{"docs":{},"实":{"docs":{},"际":{"docs":{},"不":{"docs":{},"要":{"docs":{},"这":{"docs":{},"么":{"docs":{},"查":{"docs":{},"询":{"docs":{},",":{"docs":{},"防":{"docs":{},"止":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.003401360544217687}}}}}}}}}}}}}}}},"禁":{"docs":{},"止":{"docs":{},"在":{"docs":{},"循":{"docs":{},"环":{"docs":{},"中":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}},"类":{"docs":{},"型":{"docs":{},"演":{"docs":{},"化":{"docs":{},"指":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}},"继":{"docs":{},"续":{"docs":{},"使":{"docs":{},"用":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"f":{"docs":{},"i":{"docs":{},"e":{"docs":{},"l":{"docs":{},"d":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}},"看":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}},"表":{"docs":{},"示":{"docs":{},"执":{"docs":{},"行":{"docs":{},"是":{"docs":{},"否":{"docs":{},"成":{"docs":{},"功":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"用":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}},"状":{"docs":{},"态":{"docs":{},"的":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"应":{"docs":{},"该":{"docs":{},"放":{"docs":{},"在":{"docs":{},"最":{"docs":{},"后":{"docs":{},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}}}}}}}}}}}},"连":{"docs":{},"续":{"docs":{},"的":{"docs":{},"非":{"docs":{},"类":{"docs":{},"型":{"docs":{},"化":{"docs":{},"整":{"docs":{},"数":{"docs":{},"常":{"docs":{},"量":{"docs":{},",":{"docs":{},"它":{"docs":{},"的":{"docs":{},"值":{"docs":{},"是":{"docs":{},"对":{"docs":{},"应":{"docs":{},"常":{"docs":{},"量":{"docs":{},"的":{"docs":{},"下":{"docs":{},"标":{"docs":{},"(":{"docs":{},"从":{"docs":{},"零":{"docs":{},"开":{"docs":{},"始":{"docs":{},")":{"docs":{},",":{"docs":{},"它":{"docs":{},"可":{"docs":{},"用":{"docs":{},"于":{"docs":{},"构":{"docs":{},"造":{"docs":{},"一":{"docs":{},"组":{"docs":{},"相":{"docs":{},"关":{"docs":{},"常":{"docs":{},"数":{"docs":{},":":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"读":{"docs":{},"写":{"docs":{},"一":{"docs":{},"致":{"docs":{},"(":{"docs":{},"各":{"docs":{},"占":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"多":{"docs":{},"写":{"docs":{},"少":{"docs":{},"(":{"docs":{},"读":{"docs":{},"占":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"少":{"docs":{},"写":{"docs":{},"多":{"docs":{},"(":{"docs":{},"读":{"docs":{},"占":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}},"广":{"docs":{},"播":{"docs":{},"通":{"docs":{},"知":{"docs":{},",":{"docs":{},"其":{"docs":{},"他":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},"驱":{"docs":{},"动":{"docs":{},"测":{"docs":{},"试":{"docs":{},".":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}},"达":{"docs":{},"时":{"docs":{},"间":{"docs":{},"段":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"瞬":{"docs":{},"时":{"docs":{},"时":{"docs":{},"间":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}},"释":{"docs":{},"放":{"docs":{},"资":{"docs":{},"源":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":3.333333333333333}},"。":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}},",":{"docs":{},"诸":{"docs":{},"如":{"docs":{},"文":{"docs":{},"件":{"docs":{},"和":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125}}}}}}}}}}}},"写":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"读":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}},"除":{"docs":{},"了":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}},"包":{"docs":{},"的":{"docs":{},"主":{"docs":{},"逻":{"docs":{},"辑":{"docs":{},"文":{"docs":{},"件":{"docs":{},"中":{"docs":{},"内":{"docs":{},"容":{"docs":{},"允":{"docs":{},"许":{"docs":{},"导":{"docs":{},"出":{"docs":{},",":{"docs":{},"包":{"docs":{},"内":{"docs":{},"的":{"docs":{},"辅":{"docs":{},"助":{"docs":{},"函":{"docs":{},"数":{"docs":{},"都":{"docs":{},"应":{"docs":{},"该":{"docs":{},"是":{"docs":{},"非":{"docs":{},"导":{"docs":{},"出":{"docs":{},"的":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"魔":{"docs":{},"法":{"docs":{},"字":{"docs":{},"面":{"docs":{},"量":{"docs":{"第二篇:代码风格/10.函数.html":{"ref":"第二篇:代码风格/10.函数.html","tf":0.0017006802721088435}}}}}}},"倍":{"docs":{},"(":{"1":{"6":{"0":{"0":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}},"docs":{}},"docs":{}},"docs":{}},"docs":{}}},"分":{"docs":{},"组":{"docs":{},"等":{"docs":{},"其":{"docs":{},"他":{"docs":{},"规":{"docs":{},"范":{"docs":{},"细":{"docs":{},"节":{"docs":{},"和":{"docs":{},"普":{"docs":{},"通":{"docs":{},"文":{"docs":{},"件":{"docs":{},"保":{"docs":{},"持":{"docs":{},"一":{"docs":{},"致":{"docs":{},"。":{"docs":{"第二篇:代码风格/11.单元测试.html":{"ref":"第二篇:代码风格/11.单元测试.html","tf":0.006134969325153374}}}}}}}}}}}}}}}}}}}},"支":{"docs":{},"时":{"docs":{},",":{"docs":{},"很":{"docs":{},"容":{"docs":{},"易":{"docs":{},"遗":{"docs":{},"忘":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125}}}}}}}}}},"钟":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}},"出":{"docs":{},"现":{"docs":{},"状":{"docs":{},"态":{"docs":{},"/":{"docs":{},"类":{"docs":{},"型":{"docs":{},"等":{"docs":{},"字":{"docs":{},"眼":{"docs":{},"时":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"枚":{"docs":{},"举":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}},"启":{"docs":{},"动":{"docs":{},"的":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}},"复":{"docs":{},"杂":{"docs":{},"的":{"docs":{},"执":{"docs":{},"行":{"docs":{},"/":{"docs":{},"错":{"docs":{},"误":{"docs":{},"信":{"docs":{},"息":{"docs":{},",":{"docs":{},"需":{"docs":{},"要":{"docs":{},"定":{"docs":{},"义":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"保":{"docs":{},"存":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}},"对":{"docs":{},"象":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":5}},",":{"docs":{},"每":{"docs":{},"次":{"docs":{},"操":{"docs":{},"作":{"docs":{},"不":{"docs":{},"再":{"docs":{},"有":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}},"意":{"docs":{},"义":{"docs":{},"不":{"docs":{},"明":{"docs":{},"的":{"docs":{},"成":{"docs":{},"员":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"定":{"docs":{},"义":{"docs":{},"类":{"docs":{},"型":{"docs":{},"描":{"docs":{},"述":{"docs":{},"作":{"docs":{},"用":{"docs":{},"。":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}},"抛":{"docs":{},"出":{"docs":{},"的":{"docs":{},"异":{"docs":{},"常":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"启":{"docs":{},"动":{"docs":{},"的":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}},"去":{"docs":{},"大":{"docs":{},"段":{"docs":{},"的":{"docs":{},"注":{"docs":{},"释":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"到":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}},"时":{"docs":{},"间":{"docs":{},"类":{"docs":{},"型":{"docs":{},"尽":{"docs":{},"量":{"docs":{},"使":{"docs":{},"用":{"docs":{},"内":{"docs":{},"置":{"docs":{},"定":{"docs":{},"义":{"docs":{},",":{"docs":{},"如":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}},"处":{"docs":{},"理":{"docs":{},"看":{"docs":{},"似":{"docs":{},"简":{"docs":{},"单":{"docs":{},",":{"docs":{},"实":{"docs":{},"则":{"docs":{},"不":{"docs":{},"然":{"docs":{},"。":{"docs":{},"关":{"docs":{},"于":{"docs":{},"时":{"docs":{},"间":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},"假":{"docs":{},"设":{"docs":{},"通":{"docs":{},"常":{"docs":{},"包":{"docs":{},"括":{"docs":{},"以":{"docs":{},"下":{"docs":{},"几":{"docs":{},"点":{"docs":{},":":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"上":{"docs":{},",":{"docs":{},"协":{"docs":{},"程":{"docs":{},"调":{"docs":{},"度":{"docs":{},"也":{"docs":{},"会":{"docs":{},"有":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},",":{"docs":{},"同":{"docs":{},"样":{"docs":{},"的":{"docs":{},",":{"docs":{},"请":{"docs":{},"注":{"docs":{},"意":{"docs":{},"用":{"docs":{},"户":{"docs":{},"对":{"docs":{},"暴":{"docs":{},"露":{"docs":{},"内":{"docs":{},"部":{"docs":{},"状":{"docs":{},"态":{"docs":{},"的":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}}}}}}}},"请":{"docs":{},"记":{"docs":{},"住":{"docs":{},"当":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}},"除":{"docs":{},"非":{"docs":{},"达":{"docs":{},"成":{"docs":{},"一":{"docs":{},"致":{"docs":{},",":{"docs":{},"否":{"docs":{},"则":{"docs":{},"使":{"docs":{},"用":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}},"甚":{"docs":{},"至":{"docs":{},"在":{"docs":{},"指":{"docs":{},"定":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}},"为":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}},"获":{"docs":{},"取":{"docs":{},"的":{"docs":{},"是":{"docs":{},"值":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},",":{"docs":{},"对":{"docs":{},"副":{"docs":{},"本":{"docs":{},"的":{"docs":{},"修":{"docs":{},"改":{"docs":{},",":{"docs":{},"是":{"docs":{},"不":{"docs":{},"会":{"docs":{},"影":{"docs":{},"响":{"docs":{},"到":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}},"传":{"docs":{},"入":{"docs":{},"的":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"没":{"docs":{},"有":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}},"自":{"docs":{},"动":{"docs":{},"格":{"docs":{},"式":{"docs":{},"化":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"保":{"docs":{},"证":{"docs":{},"所":{"docs":{},"有":{"docs":{},"的":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}},"说":{"docs":{},"明":{"docs":{},"文":{"docs":{},"档":{"docs":{},",":{"docs":{},"介":{"docs":{},"绍":{"docs":{},"服":{"docs":{},"务":{"docs":{},"功":{"docs":{},"能":{"docs":{},"、":{"docs":{},"使":{"docs":{},"用":{"docs":{},"方":{"docs":{},"法":{"docs":{},"、":{"docs":{},"部":{"docs":{},"署":{"docs":{},"时":{"docs":{},"的":{"docs":{},"限":{"docs":{},"制":{"docs":{},"与":{"docs":{},"要":{"docs":{},"求":{"docs":{},"、":{"docs":{},"基":{"docs":{},"础":{"docs":{},"环":{"docs":{},"境":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"等":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"遇":{"docs":{},"到":{"docs":{"第二篇:代码风格/12.杂项.html":{"ref":"第二篇:代码风格/12.杂项.html","tf":0.009615384615384616}}}},"为":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.037037037037037035},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}},"什":{"docs":{},"么":{"docs":{},"可":{"docs":{},"以":{"docs":{},"这":{"docs":{},"样":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"接":{"docs":{},"口":{"docs":{},"实":{"docs":{},"质":{"docs":{},"上":{"docs":{},"在":{"docs":{},"底":{"docs":{},"层":{"docs":{},"用":{"docs":{},"两":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"表":{"docs":{},"示":{"docs":{},":":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}}}}}}},"常":{"docs":{},"识":{"docs":{},"性":{"docs":{},"的":{"docs":{},"认":{"docs":{},"知":{"docs":{},"是":{"docs":{},"错":{"docs":{},"误":{"docs":{},"的":{"docs":{},"呢":{"docs":{},"?":{"docs":{},"因":{"docs":{},"为":{"docs":{},"地":{"docs":{},"球":{"docs":{},"自":{"docs":{},"转":{"docs":{},"的":{"docs":{},"不":{"docs":{},"均":{"docs":{},"匀":{"docs":{},"性":{"docs":{},"和":{"docs":{},"长":{"docs":{},"期":{"docs":{},"变":{"docs":{},"慢":{"docs":{},"性":{"docs":{},",":{"docs":{},"会":{"docs":{},"存":{"docs":{},"在":{"docs":{},"时":{"docs":{},"间":{"docs":{},"修":{"docs":{},"正":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"比":{"docs":{},"如":{"docs":{},"闰":{"docs":{},"秒":{"docs":{},",":{"docs":{},"闰":{"docs":{},"年":{"docs":{},"等":{"docs":{},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"性":{"docs":{},"能":{"docs":{},"上":{"docs":{},"会":{"docs":{},"有":{"docs":{},"两":{"docs":{},"倍":{"docs":{},"多":{"docs":{},"的":{"docs":{},"差":{"docs":{},"距":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"会":{"docs":{},"对":{"docs":{},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"测":{"docs":{},"试":{"docs":{},"代":{"docs":{},"码":{"docs":{},"进":{"docs":{},"行":{"docs":{},"优":{"docs":{},"化":{"docs":{},"呢":{"docs":{},"?":{"docs":{},"因":{"docs":{},"为":{"docs":{},"代":{"docs":{},"码":{"docs":{},"实":{"docs":{},"际":{"docs":{},"上":{"docs":{},"只":{"docs":{},"取":{"docs":{},"最":{"docs":{},"后":{"docs":{},"一":{"docs":{},"个":{"docs":{},"切":{"docs":{},"片":{"docs":{},"元":{"docs":{},"素":{"docs":{},"的":{"docs":{},"值":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"前":{"docs":{},"面":{"docs":{},"的":{"docs":{},"循":{"docs":{},"环":{"docs":{},"操":{"docs":{},"作":{"docs":{},"可":{"docs":{},"以":{"docs":{},"跳":{"docs":{},"过":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"便":{"docs":{},"带":{"docs":{},"来":{"docs":{},"性":{"docs":{},"能":{"docs":{},"的":{"docs":{},"提":{"docs":{},"升":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"是":{"docs":{},"下":{"docs":{},"面":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{},"编":{"docs":{},"器":{"docs":{},"将":{"docs":{},"无":{"docs":{},"法":{"docs":{},"优":{"docs":{},"化":{"docs":{},",":{"docs":{},"必":{"docs":{},"须":{"docs":{},"遍":{"docs":{},"历":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"所":{"docs":{},"有":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"放":{"docs":{},"在":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"就":{"docs":{},"能":{"docs":{},"够":{"docs":{},"减":{"docs":{},"少":{"docs":{},"指":{"docs":{},"令":{"docs":{},"呢":{"docs":{},"?":{"docs":{},"因":{"docs":{},"为":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"的":{"docs":{},"地":{"docs":{},"址":{"docs":{},"和":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},"是":{"docs":{},"相":{"docs":{},"同":{"docs":{},"的":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"是":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"直":{"docs":{},"接":{"docs":{},"对":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},"解":{"docs":{},"引":{"docs":{},"用":{"docs":{},"即":{"docs":{},"可":{"docs":{},"。":{"docs":{},"如":{"docs":{},"果":{"docs":{},"是":{"docs":{},"其":{"docs":{},"他":{"docs":{},"的":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"除":{"docs":{},"了":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"指":{"docs":{},"针":{"docs":{},"外":{"docs":{},",":{"docs":{},"还":{"docs":{},"需":{"docs":{},"要":{"docs":{},"计":{"docs":{},"算":{"docs":{},"与":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"值":{"docs":{},"的":{"docs":{},"偏":{"docs":{},"移":{"docs":{},"(":{"docs":{},"c":{"docs":{},"a":{"docs":{},"l":{"docs":{},"c":{"docs":{},"u":{"docs":{},"l":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"是":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"?":{"3":{"docs":{},".":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"1":{"docs":{},".":{"docs":{},"简":{"docs":{},"介":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"docs":{}}}}}}},"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}},"零":{"docs":{},"。":{"docs":{},"任":{"docs":{},"何":{"docs":{},"其":{"docs":{},"他":{"docs":{},"尺":{"docs":{},"寸":{"docs":{},"都":{"docs":{},"必":{"docs":{},"须":{"docs":{},"经":{"docs":{},"过":{"docs":{},"严":{"docs":{},"格":{"docs":{},"的":{"docs":{},"审":{"docs":{},"查":{"docs":{},",":{"docs":{},"而":{"docs":{},"不":{"docs":{},"是":{"docs":{},"拍":{"docs":{},"脑":{"docs":{},"袋":{"docs":{},"给":{"docs":{},"出":{"docs":{},"一":{"docs":{},"个":{"docs":{},"大":{"docs":{},"致":{"docs":{},"的":{"docs":{},"值":{"docs":{},"。":{"docs":{},"我":{"docs":{},"们":{"docs":{},"需":{"docs":{},"要":{"docs":{},"考":{"docs":{},"虑":{"docs":{},"如":{"docs":{},"何":{"docs":{},"确":{"docs":{},"定":{"docs":{},"大":{"docs":{},"小":{"docs":{},",":{"docs":{},"什":{"docs":{},"么":{"docs":{},"原":{"docs":{},"因":{"docs":{},"会":{"docs":{},"导":{"docs":{},"致":{"docs":{"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","tf":0.018518518518518517}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"你":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},"添":{"docs":{},"加":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{},",":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}},"例":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}},"给":{"docs":{},"出":{"docs":{},"具":{"docs":{},"体":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}},",":{"docs":{},"简":{"docs":{},"单":{"docs":{},"介":{"docs":{},"绍":{"docs":{},"其":{"docs":{},"使":{"docs":{},"用":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"了":{"docs":{},"模":{"docs":{},"拟":{"docs":{},"上":{"docs":{},"面":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},",":{"docs":{},"简":{"docs":{},"单":{"docs":{},"地":{"docs":{},"写":{"docs":{},"个":{"docs":{},"示":{"docs":{},"例":{"docs":{},"程":{"docs":{},"序":{"docs":{},",":{"docs":{},"对":{"docs":{},"比":{"docs":{},"下":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}},"读":{"docs":{},"操":{"docs":{},"作":{"docs":{},"占":{"docs":{},"比":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}},"并":{"docs":{},"发":{"docs":{},"而":{"docs":{},"生":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}},"具":{"docs":{},"体":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"下":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}},"我":{"docs":{},"们":{"docs":{},"几":{"docs":{},"乎":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{},"使":{"docs":{},"用":{"docs":{},"指":{"docs":{},"向":{"docs":{},"接":{"docs":{},"口":{"docs":{},"的":{"docs":{},"指":{"docs":{},"针":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"将":{"docs":{},"接":{"docs":{},"口":{"docs":{},"直":{"docs":{},"接":{"docs":{},"赋":{"docs":{},"值":{"docs":{},"给":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"在":{"docs":{},"传":{"docs":{},"递":{"docs":{},"过":{"docs":{},"程":{"docs":{},"中":{"docs":{},",":{"docs":{},"实":{"docs":{},"质":{"docs":{},"上":{"docs":{},"传":{"docs":{},"递":{"docs":{},"的":{"docs":{},"底":{"docs":{},"层":{"docs":{},"数":{"docs":{},"据":{"docs":{},"仍":{"docs":{},"然":{"docs":{},"是":{"docs":{},"指":{"docs":{},"针":{"docs":{},",":{"docs":{},"即":{"docs":{},"不":{"docs":{},"存":{"docs":{},"在":{"docs":{},"值":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"下":{"docs":{},"接":{"docs":{},"口":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"宽":{"docs":{},"度":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","tf":0.012345679012345678}}}}}}}}}}}}},"一":{"docs":{},"下":{"docs":{},"最":{"docs":{},"常":{"docs":{},"用":{"docs":{},"的":{"docs":{},"标":{"docs":{},"准":{"docs":{},"格":{"docs":{},"式":{"docs":{},"化":{"docs":{},"输":{"docs":{},"出":{"docs":{},"函":{"docs":{},"数":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}},"找":{"docs":{},"到":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}},"切":{"docs":{},"片":{"docs":{},"的":{"docs":{},"底":{"docs":{},"层":{"docs":{},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}}}}},"通":{"docs":{},"过":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"注":{"docs":{},"入":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"将":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"注":{"docs":{},"入":{"docs":{},"到":{"docs":{},"使":{"docs":{},"用":{"docs":{},"方":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"便":{"docs":{},"可":{"docs":{},"以":{"docs":{},"避":{"docs":{},"免":{"docs":{},"使":{"docs":{},"用":{"docs":{},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},",":{"docs":{},"进":{"docs":{},"而":{"docs":{},"避":{"docs":{},"免":{"docs":{},"了":{"docs":{},"依":{"docs":{},"赖":{"docs":{},"的":{"docs":{},"全":{"docs":{},"局":{"docs":{},"变":{"docs":{},"量":{"docs":{},"被":{"docs":{},"错":{"docs":{},"误":{"docs":{},"修":{"docs":{},"改":{"docs":{},"的":{"docs":{},"可":{"docs":{},"能":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","tf":0.0078125}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"在":{"docs":{},"访":{"docs":{},"问":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"前":{"docs":{},"前":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}},"来":{"docs":{},"看":{"docs":{},"一":{"docs":{},"下":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"编":{"docs":{},"译":{"docs":{},"时":{"docs":{},"对":{"docs":{},"上":{"docs":{},"面":{"docs":{},"两":{"docs":{},"个":{"docs":{},"切":{"docs":{},"片":{"docs":{},"的":{"docs":{},"优":{"docs":{},"化":{"docs":{},"决":{"docs":{},"策":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}},"还":{"docs":{},"是":{"docs":{},"以":{"docs":{},"上":{"docs":{},"面":{"docs":{},"斐":{"docs":{},"波":{"docs":{},"那":{"docs":{},"契":{"docs":{},"数":{"docs":{},"列":{"docs":{},"函":{"docs":{},"数":{"docs":{},"为":{"docs":{},"例":{"docs":{},",":{"docs":{},"看":{"docs":{},"下":{"docs":{},"返":{"docs":{},"回":{"docs":{},"值":{"docs":{},"为":{"docs":{},"确":{"docs":{},"定":{"docs":{},"类":{"docs":{},"型":{"docs":{},"和":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"都":{"docs":{},"知":{"docs":{},"道":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}},"以":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}},"一":{"docs":{},"个":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{},"线":{"docs":{},"程":{"docs":{},"安":{"docs":{},"全":{"docs":{},"单":{"docs":{},"向":{"docs":{},"链":{"docs":{},"表":{"docs":{},"的":{"docs":{},"插":{"docs":{},"入":{"docs":{},"操":{"docs":{},"作":{"docs":{},"来":{"docs":{},"看":{"docs":{},"下":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"编":{"docs":{},"程":{"docs":{},"和":{"docs":{},"普":{"docs":{},"通":{"docs":{},"加":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"区":{"docs":{},"别":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"示":{"docs":{},"例":{"docs":{},",":{"docs":{},"来":{"docs":{},"说":{"docs":{},"明":{"docs":{},"使":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}},"分":{"docs":{},"别":{"docs":{},"对":{"docs":{},"两":{"docs":{},"种":{"docs":{},"链":{"docs":{},"表":{"docs":{},"做":{"docs":{},"一":{"docs":{},"个":{"docs":{},"并":{"docs":{},"发":{"docs":{},"写":{"docs":{},"入":{"docs":{},"的":{"docs":{},"操":{"docs":{},"作":{"docs":{},"验":{"docs":{},"证":{"docs":{},"一":{"docs":{},"下":{"docs":{},"其":{"docs":{},"功":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}},"看":{"docs":{},"下":{"docs":{},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},"一":{"docs":{},"个":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{},"例":{"docs":{},"子":{"docs":{},",":{"docs":{},"三":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}},"想":{"docs":{},"象":{"docs":{},"一":{"docs":{},"个":{"docs":{},"非":{"docs":{},"常":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}},"合":{"docs":{},"理":{"docs":{},"性":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":3.333333333333333}}}}},"赋":{"docs":{},"值":{"docs":{},"的":{"docs":{},"右":{"docs":{},"边":{"docs":{},"应":{"docs":{},"该":{"docs":{},"是":{"docs":{},"断":{"docs":{},"言":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"零":{"docs":{},"值":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","tf":0.00980392156862745}}}}}}}}}}}}}}}}},"给":{"docs":{},"接":{"docs":{},"口":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}},"吗":{"docs":{},"?":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}},"底":{"docs":{},"层":{"docs":{},"核":{"docs":{},"心":{"docs":{},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"docs":{"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","tf":0.002717391304347826}}}}}}}}}},"组":{"docs":{},"来":{"docs":{},"表":{"docs":{},"示":{"docs":{},"枚":{"docs":{},"举":{"docs":{},"值":{"docs":{},"。":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}}}}}},"预":{"docs":{},"先":{"docs":{},"声":{"docs":{},"明":{"docs":{},"的":{"docs":{},"标":{"docs":{},"识":{"docs":{},"符":{"docs":{"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","tf":0.009523809523809525}}}}}}}},"分":{"docs":{},"配":{"docs":{},"容":{"docs":{},"量":{"docs":{},"这":{"docs":{},"种":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}},"做":{"docs":{},"了":{"docs":{},"说":{"docs":{},"明":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"为":{"docs":{},"指":{"docs":{},"针":{"docs":{},"的":{"docs":{},"方":{"docs":{},"法":{"docs":{},"会":{"docs":{},"修":{"docs":{},"改":{"docs":{},"接":{"docs":{},"受":{"docs":{},"器":{"docs":{},",":{"docs":{},"为":{"docs":{},"了":{"docs":{},"避":{"docs":{},"免":{"docs":{},"产":{"docs":{},"生":{"docs":{},"这":{"docs":{},"种":{"docs":{},"错":{"docs":{},"误":{"docs":{},"的":{"docs":{},"行":{"docs":{},"为":{"docs":{},",":{"docs":{},"便":{"docs":{},"禁":{"docs":{},"止":{"docs":{},"将":{"docs":{},"值":{"docs":{},"赋":{"docs":{},"给":{"docs":{},"和":{"docs":{},"指":{"docs":{},"针":{"docs":{},"接":{"docs":{},"收":{"docs":{},"器":{"docs":{},"方":{"docs":{},"法":{"docs":{},"集":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"二":{"docs":{},"次":{"docs":{},"判":{"docs":{},"断":{"docs":{},",":{"docs":{},"来":{"docs":{},"保":{"docs":{},"证":{"docs":{},"任":{"docs":{},"务":{"docs":{},"函":{"docs":{},"数":{"docs":{},"只":{"docs":{},"会":{"docs":{},"被":{"docs":{},"执":{"docs":{},"行":{"docs":{},"一":{"docs":{},"次":{"docs":{},",":{"docs":{},"d":{"docs":{},"o":{"docs":{},"n":{"docs":{},"e":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"取":{"docs":{},"址":{"docs":{},"。":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}},"呢":{"docs":{},"?":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"g":{"docs":{},"o":{"docs":{},"r":{"docs":{},"o":{"docs":{},"u":{"docs":{},"t":{"docs":{},"i":{"docs":{},"n":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"指":{"docs":{},"针":{"docs":{},"既":{"docs":{},"可":{"docs":{},"以":{"docs":{},"调":{"docs":{},"用":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}}}}}},"复":{"docs":{},"制":{"docs":{},"是":{"docs":{},"没":{"docs":{},"有":{"docs":{},"问":{"docs":{},"题":{"docs":{},"的":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}},",":{"docs":{},"对":{"docs":{},"于":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"导":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}},"令":{"docs":{},",":{"docs":{},"也":{"docs":{},"就":{"docs":{},"是":{"docs":{},"说":{"docs":{},",":{"docs":{},"这":{"docs":{},"样":{"docs":{},"做":{"docs":{},"能":{"docs":{},"够":{"docs":{},"提":{"docs":{},"升":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.007104795737122558}},"。":{"docs":{"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","tf":0.007352941176470588}}},"有":{"docs":{},"名":{"docs":{},"函":{"docs":{},"数":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}},"度":{"docs":{},"开":{"docs":{},"销":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"提":{"docs":{},"升":{"docs":{},"可":{"docs":{},"读":{"docs":{},"性":{"docs":{},"是":{"docs":{},"值":{"docs":{},"得":{"docs":{},"的":{"docs":{},",":{"docs":{},"因":{"docs":{},"为":{"docs":{},"使":{"docs":{},"用":{"docs":{},"它":{"docs":{},"们":{"docs":{},"的":{"docs":{},"成":{"docs":{},"本":{"docs":{},"微":{"docs":{},"不":{"docs":{},"足":{"docs":{},"道":{"docs":{},"。":{"docs":{},"尤":{"docs":{},"其":{"docs":{},"适":{"docs":{},"用":{"docs":{},"于":{"docs":{},"那":{"docs":{},"些":{"docs":{},"不":{"docs":{},"仅":{"docs":{},"仅":{"docs":{},"是":{"docs":{},"简":{"docs":{},"单":{"docs":{},"内":{"docs":{},"存":{"docs":{},"访":{"docs":{},"问":{"docs":{},"的":{"docs":{},"较":{"docs":{},"大":{"docs":{},"方":{"docs":{},"法":{"docs":{},",":{"docs":{},"在":{"docs":{},"这":{"docs":{},"些":{"docs":{},"方":{"docs":{},"法":{"docs":{},"中":{"docs":{},"其":{"docs":{},"他":{"docs":{},"计":{"docs":{},"算":{"docs":{},"的":{"docs":{},"资":{"docs":{},"源":{"docs":{},"消":{"docs":{},"耗":{"docs":{},"远":{"docs":{},"超":{"docs":{},"过":{"docs":{"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","tf":0.03125}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"供":{"docs":{},"容":{"docs":{},"量":{"docs":{},"提":{"docs":{},"示":{"docs":{},"会":{"docs":{},"在":{"docs":{},"初":{"docs":{},"始":{"docs":{},"化":{"docs":{},"时":{"docs":{},"尝":{"docs":{},"试":{"docs":{},"调":{"docs":{},"整":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}},"了":{"docs":{},"两":{"docs":{},"个":{"docs":{},"导":{"docs":{},"出":{"docs":{},"方":{"docs":{},"法":{"docs":{},"用":{"docs":{},"来":{"docs":{},"使":{"docs":{},"用":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}},"种":{"docs":{},"锁":{"docs":{},",":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"(":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},")":{"docs":{},"和":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"(":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"r":{"docs":{},"w":{"docs":{},"m":{"docs":{},"u":{"docs":{},"t":{"docs":{},"e":{"docs":{},"x":{"docs":{},")":{"docs":{},",":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"便":{"docs":{},"是":{"docs":{},"共":{"docs":{},"享":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"一":{"docs":{},"种":{"docs":{},"具":{"docs":{},"体":{"docs":{},"实":{"docs":{},"现":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"五":{"docs":{},"个":{"docs":{},"导":{"docs":{},"出":{"docs":{},"方":{"docs":{},"法":{"docs":{},"用":{"docs":{},"来":{"docs":{},"使":{"docs":{},"用":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}},"示":{"docs":{},"并":{"docs":{},"不":{"docs":{},"保":{"docs":{},"证":{"docs":{},"完":{"docs":{},"全":{"docs":{},"的":{"docs":{},"抢":{"docs":{},"占":{"docs":{},"式":{"docs":{},"分":{"docs":{},"配":{"docs":{},",":{"docs":{},"而":{"docs":{},"是":{"docs":{},"用":{"docs":{},"于":{"docs":{},"估":{"docs":{},"计":{"docs":{},"所":{"docs":{},"需":{"docs":{},"的":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}}}}}}}}}}},"'":{"docs":{},"d":{"docs":{},"e":{"docs":{},"f":{"docs":{},"e":{"docs":{},"r":{"docs":{},"'":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}},"f":{"docs":{},"o":{"docs":{},"r":{"docs":{},"'":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}},"放":{"docs":{},"在":{"docs":{},"匿":{"docs":{},"名":{"docs":{},"函":{"docs":{},"数":{"docs":{},"中":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}},"有":{"docs":{},"名":{"docs":{},"函":{"docs":{},"数":{"docs":{},"中":{"docs":{},"然":{"docs":{},"后":{"docs":{},"调":{"docs":{},"用":{"docs":{},"之":{"docs":{"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","tf":0.007692307692307693}}}}}}}}}}}},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"字":{"docs":{},"段":{"docs":{},",":{"docs":{},"能":{"docs":{},"够":{"docs":{},"减":{"docs":{},"少":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}},"及":{"docs":{},"其":{"docs":{},"方":{"docs":{},"法":{"docs":{},"是":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}}}}},"零":{"docs":{},"值":{"docs":{"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","tf":0.008264462809917356}}}},"否":{"docs":{},"则":{"docs":{},",":{"docs":{},"尽":{"docs":{},"可":{"docs":{},"能":{"docs":{},"在":{"docs":{},"错":{"docs":{},"误":{"docs":{},"消":{"docs":{},"息":{"docs":{},"中":{"docs":{},"添":{"docs":{},"加":{"docs":{},"上":{"docs":{},"下":{"docs":{},"文":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}},"它":{"docs":{},"们":{"docs":{},"将":{"docs":{},"成":{"docs":{},"为":{"docs":{},"包":{"docs":{},"的":{"docs":{},"公":{"docs":{},"共":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}},"您":{"docs":{},"会":{"docs":{},"收":{"docs":{},"到":{"docs":{},"更":{"docs":{},"多":{"docs":{},"有":{"docs":{},"用":{"docs":{},"的":{"docs":{},"错":{"docs":{},"误":{"docs":{},",":{"docs":{},"例":{"docs":{},"如":{"docs":{},"“":{"docs":{},"呼":{"docs":{},"叫":{"docs":{},"服":{"docs":{},"务":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}},"无":{"docs":{},"错":{"docs":{},"误":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"。":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}},"论":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}},"使":{"docs":{},"用":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"结":{"docs":{},"构":{"docs":{},"还":{"docs":{},"是":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"接":{"docs":{},"口":{"docs":{},",":{"docs":{},"都":{"docs":{},"会":{"docs":{},"限":{"docs":{},"制":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"演":{"docs":{},"化":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}}}}},"需":{"docs":{},"去":{"docs":{},"除":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"优":{"docs":{},"化":{"docs":{},",":{"docs":{},"基":{"docs":{},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},"如":{"docs":{},"下":{"docs":{},":":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}},"锁":{"docs":{},"化":{"docs":{},"主":{"docs":{},"要":{"docs":{},"有":{"docs":{},"两":{"docs":{},"种":{"docs":{},"实":{"docs":{},"现":{"docs":{},",":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"docs":{},"和":{"docs":{},"串":{"docs":{},"行":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}},"单":{"docs":{},"向":{"docs":{},"链":{"docs":{},"表":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"的":{"docs":{},"简":{"docs":{},"单":{"docs":{},"实":{"docs":{},"现":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"1":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}}},"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}},"根":{"docs":{},"据":{"docs":{},"调":{"docs":{},"用":{"docs":{},"者":{"docs":{},"是":{"docs":{},"否":{"docs":{},"应":{"docs":{},"该":{"docs":{},"能":{"docs":{},"够":{"docs":{},"匹":{"docs":{},"配":{"docs":{},"和":{"docs":{},"提":{"docs":{},"取":{"docs":{},"根":{"docs":{},"本":{"docs":{},"原":{"docs":{},"因":{"docs":{},",":{"docs":{},"在":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}},"然":{"docs":{},"而":{"docs":{},",":{"docs":{},"一":{"docs":{},"旦":{"docs":{},"错":{"docs":{},"误":{"docs":{},"被":{"docs":{},"发":{"docs":{},"送":{"docs":{},"到":{"docs":{},"另":{"docs":{},"一":{"docs":{},"个":{"docs":{},"系":{"docs":{},"统":{"docs":{},",":{"docs":{},"应":{"docs":{},"该":{"docs":{},"清":{"docs":{},"楚":{"docs":{},"消":{"docs":{},"息":{"docs":{},"是":{"docs":{},"一":{"docs":{},"个":{"docs":{},"错":{"docs":{},"误":{"docs":{},"(":{"docs":{},"例":{"docs":{},"如":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"后":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}},"请":{"docs":{},"注":{"docs":{},"意":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"您":{"docs":{},"从":{"docs":{},"包":{"docs":{},"中":{"docs":{},"导":{"docs":{},"出":{"docs":{},"错":{"docs":{},"误":{"docs":{},"变":{"docs":{},"量":{"docs":{},"或":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{"第三篇:功能设计/4.错误处理/1.错误处理.html":{"ref":"第三篇:功能设计/4.错误处理/1.错误处理.html","tf":0.003367003367003367}}}}}}}}}}}}}}}}}}}}}},"。":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009}}},"列":{"docs":{},"转":{"docs":{},"换":{"docs":{},"为":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}},"回":{"docs":{},"到":{"docs":{},"第":{"docs":{},"一":{"docs":{},"个":{"docs":{},"例":{"docs":{},"子":{"docs":{},",":{"docs":{},"在":{"docs":{},"一":{"docs":{},"个":{"docs":{},"时":{"docs":{},"间":{"docs":{},"时":{"docs":{},"刻":{"docs":{},"加":{"docs":{},"上":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}}}}}}}}}}}}}}}}}},"天":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.009009009009009009}}},"秒":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},";":{"docs":{"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","tf":0.0045045045045045045}}},"产":{"docs":{},"生":{"docs":{},"模":{"docs":{},"糊":{"docs":{},"的":{"docs":{},"接":{"docs":{},"口":{"docs":{},"文":{"docs":{},"档":{"docs":{},"指":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}},"假":{"docs":{},"设":{"docs":{},"您":{"docs":{},"使":{"docs":{},"用":{"docs":{},"共":{"docs":{},"享":{"docs":{},"的":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}},"我":{"docs":{},"们":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},"有":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}},"有":{"docs":{},"一":{"docs":{},"个":{"docs":{},"“":{"docs":{},"学":{"docs":{},"生":{"docs":{},"”":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},",":{"docs":{},"并":{"docs":{},"复":{"docs":{},"用":{"docs":{},"改":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"对":{"docs":{},"象":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}}}},"很":{"docs":{},"少":{"docs":{},"需":{"docs":{},"要":{"docs":{},"嵌":{"docs":{},"入":{"docs":{},"类":{"docs":{},"型":{"docs":{},",":{"docs":{},"虽":{"docs":{},"然":{"docs":{},"它":{"docs":{},"可":{"docs":{},"以":{"docs":{},"帮":{"docs":{},"助":{"docs":{},"您":{"docs":{},"避":{"docs":{},"免":{"docs":{},"编":{"docs":{},"写":{"docs":{},"冗":{"docs":{},"长":{"docs":{},"的":{"docs":{},"委":{"docs":{},"托":{"docs":{},"方":{"docs":{},"法":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"多":{"docs":{},"时":{"docs":{},"候":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"能":{"docs":{},"只":{"docs":{},"需":{"docs":{},"要":{"docs":{},"操":{"docs":{},"作":{"docs":{},"一":{"docs":{},"个":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},",":{"docs":{},"利":{"docs":{},"用":{"docs":{},"反":{"docs":{},"射":{"docs":{},"实":{"docs":{},"现":{"docs":{},"的":{"docs":{},"类":{"docs":{},"型":{"docs":{},"泛":{"docs":{},"化":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"的":{"docs":{},"能":{"docs":{},"力":{"docs":{},"压":{"docs":{},"根":{"docs":{},"没":{"docs":{},"用":{"docs":{},"上":{"docs":{},"。":{"docs":{},"退":{"docs":{},"一":{"docs":{},"步":{"docs":{},"说":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"我":{"docs":{},"们":{"docs":{},"真":{"docs":{},"地":{"docs":{},"需":{"docs":{},"要":{"docs":{},"对":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"泄":{"docs":{},"漏":{"docs":{},"实":{"docs":{},"现":{"docs":{},"细":{"docs":{},"节":{"docs":{},"指":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}},"移":{"docs":{},"除":{"docs":{},"从":{"docs":{},"列":{"docs":{},"表":{"docs":{},"中":{"docs":{},"移":{"docs":{},"除":{"docs":{},"实":{"docs":{},"体":{"docs":{},"。":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.01775147928994083}}}}}}}}}}}}},"获":{"docs":{},"得":{"docs":{},"了":{"docs":{},"同":{"docs":{},"名":{"docs":{},"嵌":{"docs":{},"套":{"docs":{},"类":{"docs":{},"型":{"docs":{},"字":{"docs":{},"段":{"docs":{"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","tf":0.005917159763313609}}}}}}}}}}},"。":{"docs":{},"共":{"docs":{},"享":{"docs":{},"锁":{"docs":{},"指":{"docs":{},"可":{"docs":{},"以":{"docs":{},"同":{"docs":{},"时":{"docs":{},"被":{"docs":{},"多":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}},"的":{"docs":{},"锁":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},"取":{"docs":{},"读":{"docs":{},"锁":{"docs":{},",":{"docs":{},"所":{"docs":{},"以":{"docs":{},"是":{"docs":{},"一":{"docs":{},"种":{"docs":{},"共":{"docs":{},"享":{"docs":{},"锁":{"docs":{},"。":{"docs":{},"但":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"是":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"的":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}},"@":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.005012531328320802},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.012539184952978056},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.009111617312072893},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}},"利":{"docs":{},"用":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}},"反":{"docs":{},"射":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"实":{"docs":{},"现":{"docs":{},"一":{"docs":{},"个":{"docs":{},"类":{"docs":{},"型":{"docs":{},"泛":{"docs":{},"化":{"docs":{},"支":{"docs":{},"持":{"docs":{},"扩":{"docs":{},"展":{"docs":{},"的":{"docs":{},"切":{"docs":{},"片":{"docs":{},"过":{"docs":{},"滤":{"docs":{},"函":{"docs":{},"数":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"一":{"docs":{},"个":{"docs":{},"下":{"docs":{},"标":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}},"硬":{"docs":{},"件":{"docs":{},"支":{"docs":{},"持":{"docs":{},"的":{"docs":{},"原":{"docs":{},"子":{"docs":{},"操":{"docs":{},"作":{"docs":{},"可":{"docs":{},"以":{"docs":{},"实":{"docs":{},"现":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"docs":{},",":{"docs":{},"原":{"docs":{},"子":{"docs":{},"操":{"docs":{},"作":{"docs":{},"可":{"docs":{},"以":{"docs":{},"在":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"框":{"docs":{},"架":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}},"网":{"docs":{},"络":{"docs":{},"字":{"docs":{},"节":{"docs":{},"序":{"docs":{},"解":{"docs":{},"析":{"docs":{},"到":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}},"转":{"docs":{},"为":{"docs":{},"主":{"docs":{},"机":{"docs":{},"字":{"docs":{},"节":{"docs":{},"序":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}},"过":{"docs":{},"滤":{"docs":{},"指":{"docs":{},"定":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{},"注":{"docs":{},"意":{"docs":{},":":{"docs":{},"不":{"docs":{},"修":{"docs":{},"改":{"docs":{},"原":{"docs":{},"切":{"docs":{},"片":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","tf":0.002506265664160401}}}}}}}}}}}}}}}}}}},"差":{"docs":{},"距":{"docs":{},"不":{"docs":{},"是":{"docs":{},"很":{"docs":{},"大":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{},"随":{"docs":{},"着":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"长":{"docs":{},"度":{"docs":{},"的":{"docs":{},"增":{"docs":{},"加":{"docs":{},",":{"docs":{},"差":{"docs":{},"距":{"docs":{},"将":{"docs":{},"会":{"docs":{},"越":{"docs":{},"来":{"docs":{},"越":{"docs":{},"明":{"docs":{},"显":{"docs":{},"。":{"docs":{},"此":{"docs":{},"外":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"这":{"docs":{},"种":{"docs":{},"重":{"docs":{},"复":{"docs":{},"的":{"docs":{},"转":{"docs":{},"换":{"docs":{},"在":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"看":{"docs":{},"一":{"docs":{},"下":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},",":{"docs":{},"注":{"docs":{},"意":{"docs":{},"需":{"docs":{},"要":{"docs":{},"禁":{"docs":{},"止":{"docs":{},"编":{"docs":{},"译":{"docs":{},"器":{"docs":{},"优":{"docs":{},"化":{"docs":{},",":{"docs":{},"不":{"docs":{},"然":{"docs":{},"看":{"docs":{},"不":{"docs":{},"出":{"docs":{},"差":{"docs":{},"别":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","tf":0.015625}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"下":{"docs":{},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0030534351145038168}}}}}}}}}}}},"与":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}},"操":{"docs":{},"作":{"docs":{},"将":{"docs":{},"导":{"docs":{},"致":{"docs":{},"零":{"docs":{},"分":{"docs":{},"配":{"docs":{},"(":{"docs":{},"直":{"docs":{},"到":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}},",":{"docs":{},"及":{"docs":{},"做":{"docs":{},"一":{"docs":{},"次":{"docs":{},"数":{"docs":{},"据":{"docs":{},"拷":{"docs":{},"贝":{"docs":{},",":{"docs":{},"耗":{"docs":{},"时":{"docs":{},"几":{"docs":{},"乎":{"docs":{},"可":{"docs":{},"以":{"docs":{},"忽":{"docs":{},"略":{"docs":{},"。":{"docs":{},"而":{"docs":{},"内":{"docs":{},"存":{"docs":{},"分":{"docs":{},"配":{"docs":{},"和":{"docs":{},"回":{"docs":{},"收":{"docs":{},"的":{"docs":{},"耗":{"docs":{},"时":{"docs":{},"占":{"docs":{},"比":{"docs":{},"较":{"docs":{},"多":{"docs":{},",":{"docs":{},"因":{"docs":{},"此":{"docs":{},"对":{"docs":{},"程":{"docs":{},"序":{"docs":{},"整":{"docs":{},"体":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"影":{"docs":{},"响":{"docs":{},"更":{"docs":{},"大":{"docs":{},"。":{"docs":{},"从":{"docs":{},"测":{"docs":{},"试":{"docs":{},"结":{"docs":{},"果":{"docs":{},"也":{"docs":{},"可":{"docs":{},"以":{"docs":{},"看":{"docs":{},"出":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.002564102564102564}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"即":{"docs":{},"调":{"docs":{},"用":{"docs":{},"c":{"docs":{},"o":{"docs":{},"m":{"docs":{},"p":{"docs":{},"a":{"docs":{},"r":{"docs":{},"e":{"docs":{},"a":{"docs":{},"n":{"docs":{},"d":{"docs":{},"s":{"docs":{},"w":{"docs":{},"a":{"docs":{},"p":{"docs":{},"(":{"docs":{},")":{"docs":{},"方":{"docs":{},"法":{"docs":{},"进":{"docs":{},"行":{"docs":{},"插":{"docs":{},"入":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"插":{"docs":{},"入":{"docs":{},"失":{"docs":{},"败":{"docs":{},"则":{"docs":{},"进":{"docs":{},"行":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"基":{"docs":{},"准":{"docs":{},"测":{"docs":{},"试":{"docs":{},",":{"docs":{},"对":{"docs":{},"比":{"docs":{},"一":{"docs":{},"下":{"docs":{},"有":{"docs":{},"锁":{"docs":{},"与":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"异":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}},"来":{"docs":{},"达":{"docs":{},"到":{"docs":{},"一":{"docs":{},"发":{"docs":{},"多":{"docs":{},"收":{"docs":{},"的":{"docs":{},"效":{"docs":{},"果":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}},"都":{"docs":{},"可":{"docs":{},"能":{"docs":{},"调":{"docs":{},"整":{"docs":{},"大":{"docs":{},"小":{"docs":{},"以":{"docs":{},"容":{"docs":{},"纳":{"docs":{},"其":{"docs":{},"他":{"docs":{},"元":{"docs":{},"素":{"docs":{},")":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}}}}}}}}}},"会":{"docs":{},"浪":{"docs":{},"费":{"docs":{},"额":{"docs":{},"外":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"。":{"docs":{},"因":{"docs":{},"此":{"docs":{},",":{"docs":{},"在":{"docs":{},"这":{"docs":{},"种":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},",":{"docs":{},"声":{"docs":{},"明":{"docs":{},"为":{"docs":{},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"体":{"docs":{},"最":{"docs":{},"合":{"docs":{},"适":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"实":{"docs":{},"现":{"docs":{},"了":{"docs":{},"分":{"docs":{},"片":{"docs":{},"功":{"docs":{},"能":{"docs":{},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"分":{"docs":{},"片":{"docs":{},"一":{"docs":{},"把":{"docs":{},"锁":{"docs":{},",":{"docs":{},"采":{"docs":{},"用":{"docs":{},"分":{"docs":{},"片":{"docs":{},"存":{"docs":{},"储":{"docs":{},"的":{"docs":{},"方":{"docs":{},"式":{"docs":{},"减":{"docs":{},"少":{"docs":{},"加":{"docs":{},"锁":{"docs":{},"的":{"docs":{},"次":{"docs":{},"数":{"docs":{},"从":{"docs":{},"而":{"docs":{},"提":{"docs":{},"高":{"docs":{},"整":{"docs":{},"体":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"重":{"docs":{},"新":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","tf":0.006711409395973154}}}}}}}}},"且":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}},"预":{"docs":{},"先":{"docs":{},"分":{"docs":{},"配":{"docs":{},"容":{"docs":{},"量":{"docs":{},"的":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"方":{"docs":{},"式":{"docs":{},"性":{"docs":{},"能":{"docs":{},"最":{"docs":{},"佳":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}},"先":{"docs":{},"看":{"docs":{},"下":{"docs":{},"其":{"docs":{},"性":{"docs":{},"能":{"docs":{},"测":{"docs":{},"试":{"docs":{},"的":{"docs":{},"对":{"docs":{},"比":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}},"综":{"docs":{},"合":{"docs":{},"易":{"docs":{},"用":{"docs":{},"性":{"docs":{},"和":{"docs":{},"性":{"docs":{},"能":{"docs":{},",":{"docs":{},"一":{"docs":{},"般":{"docs":{},"推":{"docs":{},"荐":{"docs":{},"使":{"docs":{},"用":{"docs":{},"s":{"docs":{},"t":{"docs":{},"r":{"docs":{},"i":{"docs":{},"n":{"docs":{},"g":{"docs":{},"s":{"docs":{},".":{"docs":{},"b":{"docs":{},"u":{"docs":{},"i":{"docs":{},"l":{"docs":{},"d":{"docs":{},"e":{"docs":{},"r":{"docs":{},"来":{"docs":{},"拼":{"docs":{},"接":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"能":{"docs":{},"够":{"docs":{},"接":{"docs":{},"收":{"docs":{},"不":{"docs":{},"同":{"docs":{},"类":{"docs":{},"型":{"docs":{},"的":{"docs":{},"入":{"docs":{},"参":{"docs":{},",":{"docs":{},"通":{"docs":{},"过":{"docs":{},"格":{"docs":{},"式":{"docs":{},"化":{"docs":{},"输":{"docs":{},"出":{"docs":{},"完":{"docs":{},"成":{"docs":{},"字":{"docs":{},"符":{"docs":{},"串":{"docs":{},"的":{"docs":{},"拼":{"docs":{},"接":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"非":{"docs":{},"常":{"docs":{},"方":{"docs":{},"便":{"docs":{},"。":{"docs":{},"但":{"docs":{},"因":{"docs":{},"其":{"docs":{},"底":{"docs":{},"层":{"docs":{},"实":{"docs":{},"现":{"docs":{},"使":{"docs":{},"用":{"docs":{},"了":{"docs":{},"反":{"docs":{},"射":{"docs":{},",":{"docs":{},"性":{"docs":{},"能":{"docs":{},"上":{"docs":{},"会":{"docs":{},"有":{"docs":{},"所":{"docs":{},"损":{"docs":{},"耗":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","tf":0.006289308176100629}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"确":{"docs":{},"保":{"docs":{},"被":{"docs":{},"唤":{"docs":{},"醒":{"docs":{},"后":{"docs":{},"条":{"docs":{},"件":{"docs":{},"一":{"docs":{},"定":{"docs":{},"符":{"docs":{},"合":{"docs":{},"后":{"docs":{},",":{"docs":{},"再":{"docs":{},"执":{"docs":{},"行":{"docs":{},"后":{"docs":{},"续":{"docs":{},"的":{"docs":{},"代":{"docs":{},"码":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}},"性":{"docs":{},"能":{"docs":{},"没":{"docs":{},"有":{"docs":{},"差":{"docs":{},"别":{"docs":{},",":{"docs":{},"但":{"docs":{},"是":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}},"对":{"docs":{},"比":{"1":{"docs":{},".":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"化":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},"此":{"docs":{},"外":{"docs":{},",":{"docs":{},"因":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}},"迭":{"docs":{},"代":{"docs":{},"的":{"docs":{},"元":{"docs":{},"素":{"docs":{},"较":{"docs":{},"小":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}},"遍":{"docs":{},"历":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.009404388714733543}},"切":{"docs":{},"片":{"docs":{},"或":{"docs":{},"数":{"docs":{},"组":{"docs":{},"有":{"docs":{},"两":{"docs":{},"种":{"docs":{},"方":{"docs":{},"式":{"docs":{},",":{"docs":{},"一":{"docs":{},"种":{"docs":{},"是":{"docs":{},"下":{"docs":{},"标":{"docs":{},",":{"docs":{},"一":{"docs":{},"种":{"docs":{},"是":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}},"性":{"docs":{},"能":{"docs":{},"几":{"docs":{},"乎":{"docs":{},"没":{"docs":{},"有":{"docs":{},"区":{"docs":{},"别":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}},"首":{"docs":{},"先":{"docs":{},"看":{"docs":{},"一":{"docs":{},"下":{"docs":{},"遍":{"docs":{},"历":{"docs":{},"基":{"docs":{},"本":{"docs":{},"类":{"docs":{},"型":{"docs":{},"切":{"docs":{},"片":{"docs":{},"时":{"docs":{},"二":{"docs":{},"者":{"docs":{},"的":{"docs":{},"性":{"docs":{},"能":{"docs":{},"差":{"docs":{},"别":{"docs":{},",":{"docs":{},"以":{"docs":{"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","tf":0.003134796238244514}}}}}}}}}}}}}}}}}}}}}}},"根":{"docs":{},"据":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"docs":{},"和":{"docs":{},"读":{"docs":{},"写":{"docs":{},"锁":{"docs":{},"分":{"docs":{},"别":{"docs":{},"实":{"docs":{},"现":{"docs":{},"对":{"docs":{},"共":{"docs":{},"享":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}},"次":{"docs":{},"被":{"docs":{},"加":{"docs":{},"载":{"docs":{},"时":{"docs":{},"执":{"docs":{},"行":{"docs":{},",":{"docs":{},"若":{"docs":{},"迟":{"docs":{},"迟":{"docs":{},"未":{"docs":{},"被":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"则":{"docs":{},"既":{"docs":{},"浪":{"docs":{},"费":{"docs":{},"了":{"docs":{},"内":{"docs":{},"存":{"docs":{},",":{"docs":{},"又":{"docs":{},"延":{"docs":{},"长":{"docs":{},"了":{"docs":{},"程":{"docs":{},"序":{"docs":{},"加":{"docs":{},"载":{"docs":{},"时":{"docs":{},"间":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"删":{"docs":{},"除":{"docs":{},"切":{"docs":{},"片":{"docs":{},"指":{"docs":{},"定":{"docs":{},"元":{"docs":{},"素":{"docs":{},"一":{"docs":{},"般":{"docs":{},"有":{"docs":{},"如":{"docs":{},"下":{"docs":{},"几":{"docs":{},"种":{"docs":{},"方":{"docs":{},"法":{"docs":{},",":{"docs":{},"本":{"docs":{},"文":{"docs":{},"以":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.0036101083032490976}}}}}}}}}}}}}}}}}}}}},"指":{"docs":{},"定":{"docs":{},"元":{"docs":{},"素":{"docs":{},"。":{"docs":{"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","tf":0.01444043321299639}}}}}}}}},"事":{"docs":{},"实":{"docs":{},"上":{"docs":{},"可":{"docs":{},"以":{"docs":{},"用":{"docs":{},"任":{"docs":{},"何":{"docs":{},"的":{"docs":{},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"docs":{},"替":{"docs":{},"代":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}},"计":{"docs":{},"算":{"docs":{},"出":{"docs":{},"一":{"docs":{},"个":{"docs":{},"数":{"docs":{},"据":{"docs":{},"类":{"docs":{},"型":{"docs":{},"实":{"docs":{},"例":{"docs":{},"需":{"docs":{},"要":{"docs":{},"占":{"docs":{},"用":{"docs":{},"的":{"docs":{},"字":{"docs":{},"节":{"docs":{},"数":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","tf":0.005847953216374269}}}}}}}}}}}}}}}}}}}}},"数":{"docs":{},"器":{"docs":{},",":{"docs":{},"统":{"docs":{},"计":{"docs":{},"函":{"docs":{},"数":{"docs":{},"执":{"docs":{},"行":{"docs":{},"次":{"docs":{},"数":{"docs":{},";":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}}},"位":{"docs":{},"的":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}},"始":{"docs":{},"终":{"docs":{},"以":{"docs":{},"字":{"docs":{},"长":{"docs":{},"访":{"docs":{},"问":{"docs":{},"内":{"docs":{},"存":{"docs":{},",":{"docs":{},"如":{"docs":{},"果":{"docs":{},"不":{"docs":{},"进":{"docs":{},"行":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},",":{"docs":{},"可":{"docs":{},"能":{"docs":{},"会":{"docs":{},"增":{"docs":{},"加":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}},"布":{"docs":{},"局":{"4":{"docs":{},".":{"docs":{},"空":{"docs":{},"结":{"docs":{},"构":{"docs":{},"与":{"docs":{},"空":{"docs":{},"数":{"docs":{},"组":{"docs":{},"对":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"的":{"docs":{},"影":{"docs":{},"响":{"1":{"docs":{},".":{"docs":{},"为":{"docs":{},"什":{"docs":{},"么":{"docs":{},"需":{"docs":{},"要":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}},"docs":{}}}}}}}}}}}}}}}}}},"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}},"可":{"docs":{},"以":{"docs":{},"减":{"docs":{},"少":{"docs":{},"内":{"docs":{},"存":{"docs":{},"占":{"docs":{},"用":{"docs":{},",":{"docs":{},"提":{"docs":{},"高":{"docs":{},"程":{"docs":{},"序":{"docs":{},"性":{"docs":{},"能":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}},"考":{"docs":{},"虑":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":5}}}}}}}}}},"至":{"docs":{},"少":{"docs":{},"为":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"访":{"docs":{},"存":{"docs":{},"指":{"docs":{},"令":{"docs":{},"周":{"docs":{},"期":{"docs":{},",":{"docs":{},"提":{"docs":{},"高":{"docs":{},"内":{"docs":{},"存":{"docs":{},"的":{"docs":{},"访":{"docs":{},"问":{"docs":{},"效":{"docs":{},"率":{"docs":{},",":{"docs":{},"会":{"docs":{},"对":{"docs":{},"变":{"docs":{},"量":{"docs":{},"进":{"docs":{},"行":{"docs":{},"内":{"docs":{},"存":{"docs":{},"对":{"docs":{},"齐":{"docs":{},"。":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"次":{"docs":{},"数":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}},"的":{"docs":{},"单":{"docs":{},"位":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}},"问":{"docs":{},"内":{"docs":{},"存":{"docs":{},"并":{"docs":{},"不":{"docs":{},"是":{"docs":{},"逐":{"docs":{},"个":{"docs":{},"字":{"docs":{},"节":{"docs":{},"访":{"docs":{},"问":{"docs":{},",":{"docs":{},"而":{"docs":{},"是":{"docs":{},"以":{"docs":{},"字":{"docs":{},"长":{"docs":{},"(":{"docs":{},"w":{"docs":{},"o":{"docs":{},"r":{"docs":{},"d":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"吞":{"docs":{},"吐":{"docs":{},"量":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},"同":{"docs":{},"样":{"docs":{},"读":{"docs":{},"取":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}},"次":{"docs":{},"数":{"docs":{},",":{"docs":{},"加":{"docs":{},"大":{"docs":{"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","tf":0.0034482758620689655}}}}}}}}}}}},"发":{"docs":{},"生":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"在":{"docs":{},"堆":{"docs":{},"上":{"docs":{},"申":{"docs":{},"请":{"docs":{},"切":{"docs":{},"片":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}},"栈":{"docs":{},"上":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"比":{"docs":{},"在":{"docs":{},"堆":{"docs":{},"中":{"docs":{},"分":{"docs":{},"配":{"docs":{},"内":{"docs":{},"存":{"docs":{},"有":{"docs":{},"更":{"docs":{},"高":{"docs":{},"的":{"docs":{},"效":{"docs":{},"率":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},"栈":{"docs":{},"上":{"docs":{},"分":{"docs":{},"配":{"docs":{},"的":{"docs":{},"内":{"docs":{},"存":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"版":{"docs":{},"本":{"docs":{},"的":{"docs":{},"大":{"docs":{},"小":{"docs":{},"限":{"docs":{},"制":{"docs":{},"可":{"docs":{},"能":{"docs":{},"不":{"docs":{},"一":{"docs":{},"样":{"docs":{},"。":{"docs":{},"一":{"docs":{},"般":{"docs":{},"是":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}},"知":{"docs":{},"道":{"docs":{},"变":{"docs":{},"量":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},"的":{"docs":{},"原":{"docs":{},"因":{"docs":{},"后":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"有":{"docs":{},"意":{"docs":{},"识":{"docs":{},"地":{"docs":{},"避":{"docs":{},"免":{"docs":{},"变":{"docs":{},"量":{"docs":{},"发":{"docs":{},"生":{"docs":{},"逃":{"docs":{},"逸":{"docs":{},",":{"docs":{},"将":{"docs":{},"其":{"docs":{},"限":{"docs":{},"制":{"docs":{},"在":{"docs":{},"栈":{"docs":{},"上":{"docs":{},",":{"docs":{},"减":{"docs":{},"少":{"docs":{},"堆":{"docs":{},"变":{"docs":{},"量":{"docs":{},"的":{"docs":{},"分":{"docs":{},"配":{"docs":{},",":{"docs":{},"降":{"docs":{},"低":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"闭":{"docs":{},"包":{"docs":{"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","tf":0.002277904328018223}}}},"压":{"docs":{},"力":{"docs":{},"。":{"docs":{"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","tf":0.005128205128205128}}},")":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}},"、":{"docs":{},"g":{"docs":{},"o":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}},"串":{"docs":{},"行":{"docs":{},"无":{"docs":{},"锁":{"2":{"docs":{},".":{"docs":{},"减":{"docs":{},"少":{"docs":{},"锁":{"docs":{},"竞":{"docs":{},"争":{"3":{"docs":{},".":{"docs":{},"优":{"docs":{},"先":{"docs":{},"使":{"docs":{},"用":{"docs":{},"共":{"docs":{},"享":{"docs":{},"锁":{"docs":{},"而":{"docs":{},"非":{"docs":{},"互":{"docs":{},"斥":{"docs":{},"锁":{"3":{"docs":{},".":{"1":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}},"docs":{}}},"docs":{}}}}}}}}}}}}}}},"docs":{}}}}}}}},"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}},"是":{"docs":{},"一":{"docs":{},"种":{"docs":{},"思":{"docs":{},"想":{"docs":{},",":{"docs":{},"就":{"docs":{},"是":{"docs":{},"避":{"docs":{},"免":{"docs":{},"对":{"docs":{},"共":{"docs":{},"享":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},"访":{"docs":{},"问":{"docs":{},",":{"docs":{},"改":{"docs":{},"为":{"docs":{},"每":{"docs":{},"个":{"docs":{},"并":{"docs":{},"发":{"docs":{},"操":{"docs":{},"作":{"docs":{},"访":{"docs":{},"问":{"docs":{},"自":{"docs":{},"己":{"docs":{},"独":{"docs":{},"占":{"docs":{},"的":{"docs":{},"资":{"docs":{},"源":{"docs":{},",":{"docs":{},"达":{"docs":{},"到":{"docs":{},"串":{"docs":{},"行":{"docs":{},"访":{"docs":{},"问":{"docs":{},"资":{"docs":{},"源":{"docs":{},"的":{"docs":{},"效":{"docs":{},"果":{"docs":{},",":{"docs":{},"来":{"docs":{},"避":{"docs":{},"免":{"docs":{},"使":{"docs":{},"用":{"docs":{},"锁":{"docs":{},"。":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},"有":{"docs":{},"不":{"docs":{},"同":{"docs":{},"的":{"docs":{},"实":{"docs":{},"现":{"docs":{},"方":{"docs":{},"式":{"docs":{},"。":{"docs":{},"比":{"docs":{},"如":{"docs":{},"网":{"docs":{},"络":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"协":{"docs":{},"程":{"docs":{},"调":{"docs":{},"用":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}},"池":{"docs":{},"化":{"docs":{},",":{"docs":{},"我":{"docs":{},"们":{"docs":{},"可":{"docs":{},"以":{"docs":{},"自":{"docs":{},"己":{"docs":{},"写":{"docs":{},"一":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"池":{"docs":{},",":{"docs":{},"但":{"docs":{},"不":{"docs":{},"推":{"docs":{},"荐":{"docs":{},"这":{"docs":{},"么":{"docs":{},"做":{"docs":{},"。":{"docs":{},"因":{"docs":{},"为":{"docs":{},"已":{"docs":{},"经":{"docs":{},"有":{"docs":{},"成":{"docs":{},"熟":{"docs":{},"的":{"docs":{},"开":{"docs":{},"源":{"docs":{},"库":{"docs":{},"可":{"docs":{},"供":{"docs":{},"使":{"docs":{},"用":{"docs":{},",":{"docs":{},"无":{"docs":{},"需":{"docs":{},"再":{"docs":{},"重":{"docs":{},"复":{"docs":{},"造":{"docs":{},"轮":{"docs":{},"子":{"docs":{},"。":{"docs":{},"目":{"docs":{},"前":{"docs":{},"有":{"docs":{},"很":{"docs":{},"多":{"docs":{},"第":{"docs":{},"三":{"docs":{},"方":{"docs":{},"库":{"docs":{},"实":{"docs":{},"现":{"docs":{},"了":{"docs":{},"协":{"docs":{},"程":{"docs":{},"池":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"很":{"docs":{},"方":{"docs":{},"便":{"docs":{},"地":{"docs":{},"用":{"docs":{},"来":{"docs":{},"控":{"docs":{},"制":{"docs":{},"协":{"docs":{},"程":{"docs":{},"的":{"docs":{},"并":{"docs":{},"发":{"docs":{},"数":{"docs":{},"量":{"docs":{},",":{"docs":{},"比":{"docs":{},"较":{"docs":{},"受":{"docs":{},"欢":{"docs":{},"迎":{"docs":{},"的":{"docs":{},"有":{"docs":{},":":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"的":{"docs":{},"代":{"docs":{},"价":{"2":{"docs":{},".":{"2":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"docs":{}}},"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}},"都":{"docs":{},"执":{"docs":{},"行":{"docs":{},"到":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"场":{"docs":{},"景":{"docs":{},"下":{"docs":{},"将":{"docs":{},"单":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}},"库":{"docs":{},")":{"docs":{},",":{"docs":{},"可":{"docs":{},"以":{"docs":{},"用":{"docs":{},"于":{"docs":{},"实":{"docs":{},"现":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"数":{"docs":{},"据":{"docs":{},"结":{"docs":{},"构":{"docs":{},",":{"docs":{},"如":{"docs":{},"无":{"docs":{},"锁":{"docs":{},"链":{"docs":{},"表":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}}}}}}}}}}}}}}}}}}}},"设":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.004580152671755725}}}},"链":{"docs":{},"表":{"docs":{},"节":{"docs":{},"点":{"docs":{"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"ref":"第四篇:最佳性能/3.并发编程/1.关于锁.html","tf":0.0015267175572519084}}}}}},"~":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}},"亿":{"docs":{},"个":{"docs":{},",":{"docs":{},"每":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},"内":{"docs":{},"部":{"docs":{},"几":{"docs":{},"乎":{"docs":{},"没":{"docs":{},"有":{"docs":{},"做":{"docs":{},"什":{"docs":{},"么":{"docs":{},"事":{"docs":{},"情":{"docs":{},"。":{"docs":{},"正":{"docs":{},"常":{"docs":{},"的":{"docs":{},"情":{"docs":{},"况":{"docs":{},"下":{"docs":{},"呢":{"docs":{},",":{"docs":{},"这":{"docs":{},"个":{"docs":{},"程":{"docs":{},"序":{"docs":{},"会":{"docs":{},"乱":{"docs":{},"序":{"docs":{},"输":{"docs":{},"出":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"去":{"docs":{},"执":{"docs":{},"行":{"docs":{},"另":{"docs":{},"外":{"docs":{},"一":{"docs":{},"个":{"docs":{},"协":{"docs":{},"程":{"docs":{},",":{"docs":{},"下":{"docs":{},"面":{"docs":{},"看":{"docs":{},"一":{"docs":{},"下":{"docs":{},"协":{"docs":{},"程":{"docs":{},"之":{"docs":{},"间":{"docs":{},"切":{"docs":{},"换":{"docs":{},"的":{"docs":{},"耗":{"docs":{},"时":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}}}}}},"手":{"docs":{},"动":{"docs":{},"g":{"docs":{},"c":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.00683371298405467}}}}}},"控":{"docs":{},"制":{"docs":{},"并":{"docs":{},"发":{"docs":{},"处":{"docs":{},"理":{"docs":{},"的":{"docs":{},"任":{"docs":{},"务":{"docs":{},"数":{"docs":{},"量":{"docs":{},",":{"docs":{},"就":{"docs":{},"不":{"docs":{},"需":{"docs":{},"要":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}},"数":{"docs":{},"量":{"docs":{},",":{"docs":{},"复":{"docs":{},"用":{"docs":{},"协":{"docs":{},"程":{"docs":{},",":{"docs":{},"达":{"docs":{},"到":{"docs":{},"更":{"docs":{},"高":{"docs":{},"效":{"docs":{},"执":{"docs":{},"行":{"docs":{},"任":{"docs":{},"务":{"docs":{},"的":{"docs":{},"效":{"docs":{},"果":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}}},"毫":{"docs":{},"无":{"docs":{},"压":{"docs":{},"力":{"docs":{},",":{"docs":{},"但":{"docs":{},"当":{"docs":{},"我":{"docs":{},"们":{"docs":{},"起":{"docs":{},"十":{"docs":{},"万":{"docs":{},"、":{"docs":{},"百":{"docs":{},"万":{"docs":{},"甚":{"docs":{},"至":{"docs":{},"千":{"docs":{},"万":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}}}}}}}}}}}},"池":{"docs":{},",":{"docs":{},"实":{"docs":{},"现":{"docs":{},"了":{"docs":{},"对":{"docs":{},"大":{"docs":{},"规":{"docs":{},"模":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}},"约":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}},"耗":{"docs":{},"时":{"docs":{},"越":{"docs":{},"大":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}},"轻":{"docs":{},"量":{"docs":{},"的":{"docs":{},"开":{"docs":{},"销":{"docs":{},"将":{"docs":{},"被":{"docs":{},"放":{"docs":{},"大":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"限":{"docs":{},"制":{"docs":{},"协":{"docs":{},"程":{"docs":{},"数":{"docs":{},"量":{"3":{"docs":{},".":{"docs":{},"协":{"docs":{},"程":{"docs":{},"池":{"docs":{},"化":{"4":{"docs":{},".":{"docs":{},"小":{"docs":{},"结":{"1":{"docs":{},".":{"docs":{},"协":{"docs":{},"程":{"docs":{},"数":{"docs":{},"过":{"docs":{},"多":{"docs":{},"的":{"docs":{},"问":{"docs":{},"题":{"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}}}}}},"docs":{}}}}},"docs":{}}}}}}},"docs":{"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","tf":0.002277904328018223}}}}}}}},"“":{"docs":{},"h":{"docs":{},"o":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}},"热":{"docs":{},"路":{"docs":{},"径":{"docs":{},"(":{"docs":{},"h":{"docs":{},"o":{"docs":{},"t":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}},"线":{"docs":{},"程":{"docs":{},"安":{"docs":{},"全":{"docs":{},",":{"docs":{},"保":{"docs":{},"障":{"docs":{},"在":{"docs":{},"多":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}},"绝":{"docs":{},"大":{"docs":{},"部":{"docs":{},"分":{"docs":{},"场":{"docs":{},"景":{"docs":{},"都":{"docs":{},"会":{"docs":{},"访":{"docs":{},"问":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}},"统":{"docs":{},"计":{"docs":{},"函":{"docs":{},"数":{"docs":{},"执":{"docs":{},"行":{"docs":{},"次":{"docs":{},"数":{"docs":{},",":{"docs":{},"使":{"docs":{},"用":{"docs":{},"锁":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}}},"考":{"docs":{},"虑":{"docs":{},"一":{"docs":{},"个":{"docs":{},"简":{"docs":{},"单":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},",":{"docs":{},"函":{"docs":{},"数":{"docs":{"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","tf":0.0022172949002217295}}}}}}}}}}}}},"点":{"docs":{},"汇":{"docs":{},"总":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"$":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.003552397868561279}}},"充":{"docs":{},"当":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{},"实":{"docs":{},"现":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"唤":{"docs":{},"醒":{"docs":{},"了":{"docs":{},"该":{"docs":{},"协":{"docs":{},"程":{"docs":{},",":{"docs":{},"那":{"docs":{},"么":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}},"所":{"docs":{},"有":{"docs":{},"等":{"docs":{},"待":{"docs":{},"条":{"docs":{},"件":{"docs":{},"变":{"docs":{},"量":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"的":{"docs":{},"协":{"docs":{},"程":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"顺":{"docs":{},"序":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}},"定":{"docs":{},"位":{"docs":{},"于":{"docs":{},"同":{"docs":{},"步":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"一":{"docs":{},"发":{"docs":{},"多":{"docs":{},"收":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},"。":{"docs":{},"虽":{"docs":{},"然":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}},"通":{"docs":{},"信":{"docs":{},",":{"docs":{},"用":{"docs":{},"于":{"docs":{},"一":{"docs":{},"发":{"docs":{},"一":{"docs":{},"收":{"docs":{},"的":{"docs":{},"场":{"docs":{},"景":{"docs":{},",":{"docs":{},"s":{"docs":{},"y":{"docs":{},"n":{"docs":{},"c":{"docs":{},".":{"docs":{},"c":{"docs":{},"o":{"docs":{},"n":{"docs":{},"d":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}}}}}}}}}}}}}}}}}}},"既":{"docs":{},"然":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"经":{"docs":{},"常":{"docs":{},"用":{"docs":{},"在":{"docs":{},"多":{"docs":{},"个":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}},"置":{"docs":{},"为":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}},"阻":{"docs":{},"塞":{"docs":{},"等":{"docs":{},"待":{"docs":{},"的":{"docs":{},"条":{"docs":{},"件":{"docs":{},"。":{"docs":{"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","tf":0.0017761989342806395}}}}}}}}}},"博":{"docs":{},"客":{"docs":{},"园":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}},"极":{"docs":{},"客":{"docs":{},"兔":{"docs":{},"兔":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}},"深":{"docs":{},"度":{"docs":{},"解":{"docs":{},"密":{"docs":{},"g":{"docs":{},"o":{"docs":{"参考文献.html":{"ref":"参考文献.html","tf":0.017543859649122806}}}}}}}}},"length":6401},"corpusTokens":["!=","!allowuserlogin","!condition()","!done","!ok","\"","\"\"","\"\",","\",","\",\"","\"../net\"","\"/api/v3/projects/%s/merge_request/%s/commits\"","\"0\",","\"1\",","\"1.0.0\"","\"192.0.2.0\",","\"192.0.2.0:8000\",","\"192.0.2.0:http\",","\"1:8\",","\"8\",","\"8000\",","\":8000\",","\"a\"","\"add\"},","\"application/json\"","\"application/json\",","\"b\"","\"b\",","\"bar\"","\"bar\")","\"bar\",","\"bar\"}","\"bar/testutil\"","\"baz\"","\"c\"}","\"config\",","\"config.yaml\"),","\"darwin\":","\"doe\",","\"encoding/json\"","\"error\"","\"fail","\"failed\"","\"fmt\"","\"foo\"","\"foo\",","\"foo\"}","\"github.com/olivere/elastic/v7\"","\"github.com/panjf2000/ants\"","\"github.com/xxxxxxxx/utils/formatlog\"","\"github.com/xxxxxxxx/xxxserver/pkg/formatlog\"","\"go.uber.org/atomic\"","\"golang.org/x/sync/errgroup\"","\"http\"","\"http\",","\"https\"","\"https://git.code.oa.com\"","\"img\"","\"john\",","\"john@example.com\",","\"linux\":","\"log\"","\"main/list\"","\"my_env\"","\"myproject/controller\"","\"myproject/models\"","\"new","\"os\"","\"rsp","\"runtime\"","\"runtime/debug\"","\"start","\"strings\"","\"subtract\"},","\"sync\"","\"sync/atomic\"","\"time\"","\"tom,jerry,spike\"","\"unknown","\"unsafe\"","\"wake","\"xxxx.com/proj/net\"","#","$","%","%d,","%q","%q\",","%s\",","%v","%v\",","%v\",err))","%v\\n\",","%w","%w\",","%w。","&&","&_config)","&bytes.buffer{}","&cond{l:","&config)","&config{","&node{","¬found)","¬founderror{file:","&num)","&s1{}","&s2{}","&signer{","&smap{","&something{}","&st","&t{name:","&wg)","&withlocklist{}","&{storag","'defer'","'for'","(","(*handler)(nil)","(*handler)(nil)将无法编译通过。","(*node,","(/*","([]userinfo,","(amd64/386),","(bucket","(c","(can","(d","(e","(error,","(f","(f*","(faq)","(format","(h","(https://golang.org/ref/spec#predeclared_identifiers)。","(https://rakyll.org/styl","(if","(int(bar)","(int,","(int32,","(l","(lat,","(m","(map[uint64]userinfo,","(max","(multipl","(myerror)","(n","(non","(o","(often","(p","(s","(string","(system","(to","(travis、circle、drone)配置和脚本放在","(use",")",")、容器(",")、操作系统(",")包配置和脚本放在","*","*/","*/)","*/,","*[]*bmap","*_type","*abstractlist","*abstractlist)","*attrmodel","*bmap","*bookingservice)","*common.context)","*concretelist)","*cond","*cond)","*config","*db.row)","*driver)","*foo)","*handler)","*handler)、切片和映射是","*http.request)","*itab","*item","*lockfreelist)","*mapextra","*mutex","*node","*node)","*notfounderror","*notfounderror)","*once)","*pp","*pp)","*resolveerror)","*rwmutex),","*s)","*s2)","*signer","*signer)","*smap","*smap)","*someth","*something)","*st","*stats)","*sync.cond)","*sync.waitgroup)","*testing.b)","*testing.t)","*withlocklist)","*zap.logg","+","+0x11b","+0x48","+0x65","+0x72","+0x75","+0x8f","+1,一个","+=",".","...","....","...interface{})","...string)","...uint64)","./main.go:5:12","./main.go:5:12:","./main.go:9:12:",".形式导入包",".,因为它使程序难以阅读,比如使用","/*","//","//手动抛出","/api","/asset","/build","/build/ci","/build/packag","/cmd","/config","/deploy","/deploy。","/doc","/exampl","/githook","/init","/intern","/internal/app/myapp","/internal/pkg/","/pkg","/readme.md","/script","/src","/test","/test/data","/test/testdata。请注意,如果你需要忽略目录中的内容,go","/third_parti","/tool","/users/dablelv/work/code/test/main.go:14","/users/dablelv/work/code/test/main.go:16","/usr/local/go/src/fmt/print.go:265","/usr/local/go/src/fmt/print.go:274","/usr/local/go/src/internal/poll/fd_mutex.go:147","/usr/local/go/src/internal/poll/fd_mutex.go:239","/usr/local/go/src/internal/poll/fd_unix.go:262","/usr/local/go/src/os/file.go:176","/usr/local/go/src/os/file_posix.go:49","/vendor","/web","/websit","0","0)","0,","0.2511","0.导语","05","07","09","09:47:59","09:59:32","09:59:33","0;","0s","0x0)","0x1,","0x1})","0x1}))","0x8,","0x8})","0xc0000ac008},","0xc12ea62f50})","0},","0。","0,但不够直观","0,更加直观","1","1)","1,","1.","1.1","1.13","1.2","1.379","1.582","1.732","1.813","1.841","1.[]int","1.[]int2.[]struct{}3.[]*struct4.小结go","1.for","1.不占内存空间2.空结构体的作用2.1","1.不需要指向","1.为什么需要内存对齐2.go","1.优先使用","1.使用","1.使用空结构体节省内存","1.关于锁","1.前言2.项目布局2.1","1.协程数过多的问题1.1","1.反射虽好,切莫贪杯","1.基本类型偏执通用场景结构体2.单一职责包&文件函数3.goroutine4.应用服务5.常用工具1.基本类型偏执","1.将","1.局部切片尽可能确定长度或容量","1.局部切片尽可能确定长度或容量2.返回值","1.截取法(修改原切片)","1.截取法(修改原切片)2.拷贝法(不改原切片)3.移位法(修改原切片)4.性能对比5.小结go","1.指定","1.方法接收器为值和指针的区别","1.无锁化1.1","1.格式化","1.简介2.作用3.如何使用4.性能差异5.在标准库中的应用1.简介","1.简介2.使用场景3.实现原理4.使用示例5.注意事项1.简介","1.简介2.原理2.1","1.行内字符串拼接2.非行内字符串拼接1.行内字符串拼接","1.避免使用可变全局变量","1.错误处理","1.错误类型2.错误包装1.错误类型","1.零值","10","10)","10.函数","100","1000","1000)","10000","10000)","100000","100000)","1000000","1000000000","1000:","100ns,相对于线程的微秒级耗时切换,性能表现非常优秀,但是仍有开销。","100:","1020","1024","1024)","10240","1048575)","108668","10:48:42","10、100、1000","10:","11.单元测试","1142025","1158408","11987966","12","12.杂项","1226868","1246887","127.0.0.1","13,","13026195","13339154","1342947","1427","144,","145.3","145690","14897282","14:53:51","1514","15190)。如果您比较两个时刻,则差异将不包括这两个时刻之间可能发生的闰秒。","1521","157.2","16","1652146","166.0","17.53","17.81","1708","17466486","18","186127288","1906","19:01:50","19:15:30","19:20:12","19:29:10","19:31:00","19:40:30","19:41:43","19:53:07","19:55:55","19:56:05","1m","1mb","1s,一方面是模拟耗时,另一方面是确保前面的","1。","1,不要使用魔法数字。","1,我们要删除所有的","1,错误输出文件描述符为","2","2)","2,","2.0,","2.0027m","2.1","2.2","2.3","2.4","2.5","2.6","2.60ghz","2.7","2.962","2.[]struct{}","2.channel","2.for","2.go","2.struct","2.代码行","2.作用","2.使用","2.使用场景","2.使用第三方","2.减少锁竞争","2.单一职责","2.原理","2.将","2.少量的重复不比反射差","2.拷贝法(不改原切片)","2.指定切片容量","2.空结构体的作用","2.编译期验证","2.返回值","2.避免在公共结构中嵌入类型","2.避免重复转换字符串到字节切片","2.错误包装","2.限制协程数量","2.非行内字符串拼接","2.项目布局","20","20%)","20%)。","20.95","2000}","2009","2022","2022/03/06","2022/03/27","20:35:37","20:37:02","20:37:03","20:37:04","20:37:05","20:47:33","20:50:26","20:57:39","20:59:41","21,","2124","2124237","2130706433","216.2","2165","21915","21952129","21:02:49","22","22176390","2242","2290372","23","233)","236.2","239.1","24","2406","2462","258662","27","27.40","2714158","27169","2724","2861","296","2^31","2^b","2k","2kb","2}","2。","2,从第","2,因此,必须空出","2,标准输入的文件描述符为","3","3)","3,","3.006","3.00ghz","3.0}[i","3.1","3.14","3.2","3.3","3.378","3.510","3.742","3.809","3.865","3.908","3.[]*struct","3.for","3.goroutin","3.不要在","3.优先使用共享锁而非互斥锁","3.使用","3.减少逃逸,将变量限制在栈上","3.协程池化","3.合理的","3.在边界处拷贝","3.如何使用","3.字符串","3.实现原理","3.小的拷贝好过引用","3.小结","3.性能差异","3.慎用","3.指定容器容量","3.移位法(修改原切片)","30.9523m","30079785","303693","30748495","30914","31543916","3161318","31663521","32","325194","3339","34,","359.9","36.39","3615","365","37.34","380626","38799","39.58","3s,确保所有操作执行完毕。","3。","4","4,","4.402","4.sync.pool","4.使用","4.使用示例","4.依赖管理","4.字符串拼接方式","4.小结","4.应用服务","4.性能对比","4.性能差异","4.枚举从","4.空结构与空数组对内存对齐的影响","4.返回值使用确定的类型","40.60","404","4124","423.7","432049","432386","43268738","44","46161","464974","485917","498673","4gb/2kb","4gb,那么至多允许","4。","4,因此,demo2","4,因此,必须空出","4,此时,内存已经是对齐的,从第","5","5,","5.097","5.427","5.[]struct{}","5.初始化","5.在标准库中的应用","5.小结","5.常用工具","5.注意事项","50","50%)","50%),rpct","50.78","5007","5043324","5076255","5194722","532350","534.8","535705","54.68","55,","55,89,","556436","56067","578.4","5}","6","6,","6.454","6.切片删除指定元素","6.错误处理","60","60079003","639","64","64)","65.07","665341896","66930670","670438965","692400","7","7,","7.注释","7032921","70638928","748467979","7520017","752077","762.1","773634","8","8,","8,7,6,9,5,4,3,1,2,0","8.命名","80","80%)","80%),rpct","800","8074","81.96","8192","8249469","832418","85.22","87.46","8728),也不在计算中考虑闰秒(issu","878246492","89,","893.6","9","9,8,7,6,5,4,3,2,0,1","9.532","9.流程控制","97.12","9700","9750h","978.2","997200n","99n","9}",":=",";","=","==","===","======begin",">",">=2","@","[1024]byte","[1024]byte,如果每次遍历","[1024]int","[4]","[]*item","[]byte)","[]data){}","[]float64{1.0,","[]int","[]int)","[]int,","[]interface{}{uint64(1),","[]int{1,","[]int{}","[]int。但如果迭代的元素较大,如一个包含很多属性的","[]item,都会进行一次值拷贝,所以带来了性能损耗。","[]string)","[]string{\"a\",","[]string{\"tom\",\"jerry\",\"spike\"}","[]struct","[]struct{","[]trip)","[]uint64","[]uint64,","[]uint64{1,","[capacity]int","[predeclar","[running]:","[style","_","_,","_config","_defaultfoo","_e","_type","```go","```shell","`fields`","`json:\"interval\"`","`json:\"intervalmillis\"`","`time.adddate`。但是,如果我们想保证某一时刻比前一时刻晚","`unknown","a)","a,","a...)","a[:0]","a[:j]","a[j]","abstractlist","abstractlist。相反,只需手动将方法写入具体的列表,委托给抽象列表的方法。","abstractlist,如果嵌入的类型是","accord","action","action.","add","add(","add(entity)","add(key","add1","add2","add=0,","add=1,","addarea","addarea(area","address","admin:","advic","ag","aliases)都必须有注释说明。","align","alive,","all\")","alloc","allocations.","allocs/op","allow","allowuserlogin","alreadi","amd64","ami","announc","ant","ants.newpool(10000)","ants,我们简单地使用其默认的协程池,直接将任务提交并发执行。默认协程池的缺省容量","any).","any.","api","apiclient、repoid、userid;","apiclient;","api,但又没有明确说明,既导致了模糊的文档,又泄露了","append","append()","append(nums,","append(s.areas,","append(t,","append(tgt,","append(tmp,","application)。","approxim","appvers","architectur","architectures.","area","area)","arg","args[0]","argument","arr","arr[4])","array","array'","arrayfibonacci","arrayfibonacci()","ask","assert.equal(t,","asset","assign","associ","assum","atom","atomic.bool","atomic.compareandswapuint32(&o.done,","atomic.loaduint32(&o.done)","atomic.storeuint32","atomic.storeuint32(&o.done,","atomic.swapint32(&f.running,","atomic.valu","avoid","awoken","a、b","b","b)","b,","b/op","ba","back","bad","bad:","bar","bar(&foo)","bar(foo)","bar(i","bar/testutil,后者导入","basic","baz","be","befor","believ","bench=.","bench=^benchmarkjoinstr","bench=benchmarkntohl.*","bench=benchmarkrang","bench=benchmarkret","bench=benchmarkslic","bench=benchmarkstringtobyt","bench=intslice$","bench=pointer$","benchmarkarray","benchmarkarray(b","benchmarkbuff","benchmarkbufferwithpool","benchmarkbufferwithpool(b","benchmarkconcurwritemapwithlock(b","benchmarkconwritemapnoshard(b","benchmarkdeleteslice1","benchmarkdeleteslice1(b","benchmarkdeleteslice2","benchmarkdeleteslice3","benchmarkdeleteslice4","benchmarkdeletesliceelm","benchmarkdeletesliceelms(b","benchmarkdeleteu64liceelm","benchmarkifc","benchmarkindexintslic","benchmarkindexpoint","benchmarkindexstructslic","benchmarkindexstructslice(b","benchmarkjoinstrwithbytesbuff","benchmarkjoinstrwithbyteslic","benchmarkjoinstrwithbytesliceprealloc","benchmarkjoinstrwithoper","benchmarkjoinstrwithoperator(b","benchmarkjoinstrwithsprintf","benchmarkjoinstrwithstringsbuild","benchmarkjoinstrwithstringsbuilderprealloc","benchmarkjoinstrwithstringsbuilderprealloc(b","benchmarkjoinstrwithstringsjoin","benchmarkjoinstrwithstringsjoin(b","benchmarkmutexreadmor","benchmarkmutexreadmore(b","benchmarkmutexrwequ","benchmarkmutexwritemor","benchmarkntohl","benchmarkntohl(b","benchmarkntohlnotusebinari","benchmarkrange1","benchmarkrange1(b","benchmarkrange2","benchmarkrangeindexstructslic","benchmarkrangeintslic","benchmarkrangepoint","benchmarkrangestructslic","benchmarkreadconfig","benchmarkreadconfigwithonc","benchmarkreadconfigwithonce(b","benchmarkretptr","benchmarkretvalu","benchmarkretvalue(b","benchmarkrwmutexreadmor","benchmarkrwmutexrwequ","benchmarkrwmutexwritemor","benchmarkslic","benchmarksliceescap","benchmarkslicenoescap","benchmarkstringtobyt","benchmarkstringtobyte(b","benchmarkstringtobyteonc","benchmarkwritewithlocklist(b","benchmem","bigcach","binari","binary.bigendian,","binary.read","binary.read(buf,","binary.writ","binary.write标准库","blank","blog","blue","bmap.overflow","bodi","bool","bool)","both","break","broadcast","broadcast()","broken\")","bucket","bucket.","buckets.","buckets;","buf","buffer","buffer,","bufferpool","build","builtin)","byte","byte[]","byteorder,","bytes","bytes.buff","bytes.newbuffer([]byte(req)))","bytes.newreader(bys)","c","c++","c++11","c,","c.","c.broadcast()","c.checker.check()","c.l","c.l.lock()","c.l.unlock()","c.l,因为","c.wait()","c/c++","ca","cach","cache、freecach","cal()","calccost(n","calccost(s.weights)","calcul","call","call)","call.","called,","caller","calls,","can't","cap","cap(p.buf)","cap)","capac","capacity)","captur","car","case","caus","cell","cfg.decode(data)","cfg.decode(data);","ch","chan","chang","channel","channel,在没有被接收的情况下,至多发送","channel,每个协程阻塞在一个","check","checker","cheney","ci","classesuid","close","close()","close(ch)","cloud","cmd","cmd/compile/internal/reflectdata/reflect.go.","cn.md。","code","code)","code,","coder","codeusing(f,","color.new(0x0000ff)","color.new(0x00ff00)","color.new(0xff0000)","comm","comma","command","comment","commit","common","compact","compiler'","complete.","complex","complex128","complex64","compose、kubernetes/helm、mesos、terraform、bosh)。注意,在一些存储库中(特别是使用","concretelist","concurr","concurwritemapwithlock","concurwritemapwithlock()","concurwritewithlocklist","concurwritewithlocklist(l","cond","cond)","condit","config","config\"","config.init(filename)","config.once.do(func()","consid","console.log(\"plugin","const","const,","constant","constants:","contain","context","context.context,","continu","continue,","conversion)","convert","conwritemapnoshard","conwritemapnoshard()","copi","copy(d.trips,","copy/copy.go","copy/copy.go:17:6:","copy/copy.go:18:11:","copy/copy.go:5:6:","copycheck","core(tm)","correctli","cost","cost()","cost,","cost.","count","count==0.","counter","cpu","cpu:","creat","createlargenumgoroutine(1000,","createlargenumgoroutine(10000,","createlargenumgoroutine(100000,","createlargenumgoroutine(num","cur","cur.next","cur.value)","custom","customer、wikipage、account、addressparser,它不应是动词。","cwd,","d","d)","d,","d.settrips(trips)","d.trip","dablelv@dablelv","darwin","darwin/amd64","data","data,","data:","database/sql、编码类型注册表等;","dataetl(ctx","data、info","data。data","datetim","dave","day","db.query(...)","db.query(.....)","db.query(v)","deadlock.","debug.setgcpercent(","deb、rpm、pkg","default:","defaultfoo()","default。","defer","defer。","defer,因为这可能会导致资源泄漏(poss","defer,因为释放资源不会尽可能早地发生(在每次迭代结束时),只有在","defer,资源将在不需要时被立即释放。","definition.","definition)和类型别名(typ","delay","delet","delete(key","delete(m,","delete(s,","deleteslice1","deleteslice1(a","deleteslice2","deleteslice2(a","deleteslice3","deleteslice3(a","deleteslice4","deleteslice4(a","deletesliceelm","deletesliceelms(i","deleteu64liceelm","deleteu64liceelms(i","demo1","demo1:","demo2","demo2:","demo3","demo4","demo4{}","demograph","deploy","descriptor)来访问文件,标准输出的文件描述符为","detail","differ","do()","do(),参数","do(f","do:","doc","docker","done","door","door\")","door)","door,在这种情况下,door","doslow(f","driven","dure","dynam","e.file)","e.path)","e.target.tagnam","each","echart","efac","effect","elast","elem","element","elm","else。","email","email:","encod","encoding/binari","encoding/json","encoding/json。以","encountered.","entity)","entri","enum","envvar","er","err","err)","err.error())","err:%v\",","errbrokenlink","errcouldnotopen","errgroup.group","errgroup.group{}","errgroup.group。","errnotfound","error","error\")","error()","error)","error.","error:","error:\"test\"`","errorcod","errormessag","errors,","errors.a","errors.as(err,","errors.i","errors.is(err,","errors.new","errors.new(\"an","errors.new(\"could","errors.new(\"link","errors.new(\"miss","errors.new(\"not","errors.new(fmt.sprintf(\"modul","errors.new,但对于后者,我们必须使用","error。","err。","escap","etc.","etldata(ctx","evacu","evacuated)","even","event.","exactli","exampl","example_test.go。","except","exception\")","exe.run()","exec","execut","execute.","execution,","extra","f","f()","f,","f.","f.close","f.close()","f.err","f.error","f.run","f.running.load()","f.running.swap(true)","f.stat()","f.str","f.string","fail","failures)的主要根源。如果发生错误,该函数应该返回错误,让调用方决定如何处理它。","faketim","fall","fals","false,","falsehood","fast","fewer","field","fields,","fields.close()","file","file\")","file)","file.chmod(0664)","file.chmod(0664);","file/socket","files,","file}","filterhandlermap","filtersomething(valu","finished.","first","first'","firstname:","flag","flagconfigfil","flagconfigfile1","flagconfigfile2","flagconfigfile3","flagconfigfile4","float32","float64","float64)","float64,","float64,并在字段名称中包含单位。","flow:","fmt","fmt.errorf","fmt.errorf(","fmt.errorf(\"db.queri","fmt.errorf(\"fil","fmt.errorf(\"modul","fmt.errorf(\"run","fmt.errorf(\"som","fmt.errorf。","fmt.fprintln(os.stderr,","fmt.fprintln({0x10c00e0,","fmt.printf","fmt.printf(\"%f\\n\",","fmt.printf(\"%s.\\n\",","fmt.printf(\"%v","fmt.printf(\"%v这里要空格%v\",","fmt.printf(\"gc","fmt.printf()的调用是非常频繁的,利用","fmt.println(\"======aft","fmt.println(\"======begin","fmt.println(\"clos","fmt.println(\"linux.\")","fmt.println(\"mac","fmt.println(\"open","fmt.println(&v)","fmt.println(...)","fmt.println(cfg)","fmt.println(err)","fmt.println(name,","fmt.println(ntohl([]byte{0x7f,","fmt.println(s.has(\"bar\"))","fmt.println(s.has(\"foo\"))","fmt.println(unsafe.sizeof(demo1{}))","fmt.println(unsafe.sizeof(demo2{}))","fmt.println(unsafe.sizeof(demo3{}))","fmt.println(unsafe.sizeof(demo4{}))","fmt.println(unsafe.sizeof(foo))","fmt.println(unsafe.sizeof(struct{}{}))","fmt.sprintf(\"%v\",","fmt.sprintf(\"/api/v3/projects/%s/merge_request/%s/commits\",","fmt.sprintf(\"fak","fmt.sprintf(\"fil","fmt.sprintf(\"resolv","fmt.sprintf(\"rsp","fmt.sprintf()","fmt2.少量的重复不比反射差3.慎用","fmt,因为前者性能更佳。","foo","foo()","foo(bar","foo(getids())","foo(ids)","foo(key","foo(m","foo(r","foo(rs);","foo)","foo.errcouldnotopen)","foo.open(\"testfile.txt\");","foo.open();","foo_test","foo{","foo{...}","foo。所以我们使用import","foo,让测试文件假装是包","foo:连接被拒绝”。","fork","format","format,","found\")","found\",","fprintf","fprintf()","fprintf(os.stdout,","fprintf(w","free","free()","freebsd,","frequent","fullnam","func","func()","func())","func(t","func(usernam","function","function(e){","functions.","functions:","futur","future.","g","gc","gcflags=","gcflags=\"","gener","genitem","genitems(n","genrandomintslic","genrandomintslice()","genrandomintslice(n","get()","get(k","getarea(r","getids()","getlength(r","getlinecount()","getmrcommitsuri()","geton","getone()","getslice(n","getuserinfobatch","getuserinfobatch(uid","git","git.code.oa.com/group/myrepo","gitbook该文章修订时间:","githook","github","github.com/astaxie/beego/orm","github.com/golang","github.com/ub","github.com/xxx/xxx。内部包是指不能被外部","github/dgryski/go","github/hashicorp/terraform/makefile。","give","give:","given","go","go.sum文件必须提交,不要添加到.gitignore规则中。","go.uber.org/atom","go/guid","go1.11","go1.17","go1.4","goarch:","godoc","goechart","gofmt","gofmt,如","goimport","goland","golang","golang内存分配逃逸分析","golang梦工厂","golang,目前官方团队并未提供权威规范。不过不用担心,我们依然有一个规范可以参考,那就是业界推崇的","golint","good","googl","goos:","gopath","gopath:","gopher","gopherzhang","gopher,想更好地管理","gorm、xorm","goroot","goroot:","gorouin","goroutin","goroutine.","goroutine。","goroutine。如果其他协程调用了","goroutine。当共享资源的状态发生变化时,sync.cond","goroutine。当共享资源的状态发生变化的时候,sync.cond","goroutine一定要梳理清楚","goroutine,必须在入口处捕获","goroutine,无需锁保护。","goroutine,无需锁保护。broadcast","goto","goto,其他框架或底层源码推荐尽量不用。","go语言最佳实践go","go语言的内存逃逸分析","go,以及第三方书籍","go,这应该是入门必读最佳读物。","grab","gracefully。","green","grow","grow:","guarante","guarantee:","guidelin","h","half","handl","handle(info)","handleerrormessage(error","handleerrormessage(msg","handler","hard","has(key","hasarea","hasarea(area","hash","hash0","hashmap","has,is,can","head","head.(*node)","header","headnode,","heap","heap:","held","helper","here","high","hint)","hiter.","hmap","hmap.buckets.","hmap.extra.oldoverflow.","hmap.extra.overflow","hmap.oldbuckets.","hold","host)","host,","hot","however,","html.","http","http.get(url)","http.handler","http.post(url,","http.responsewriter,","https://golang.org/issue/23199","https://proxy.golang.org","i.(string)","i/o","i/o)","i/o,包括文件系统、网络和系统调用。","i7","i]","iaas、paas、系统和容器编排部署配置和模板(dock","id","identifi","identifiers]","ifac","ifforrangeswitchreturngoto程序退出方式if","if。","if,是因为当前协程被唤醒时,条件不一定符合要求,需要再次","ignor","imag","immediately,","implement","import","in64(0)","inccounter()","inccountern()","inconsist","incorrect","incrnoverflow","index","index。如果使用","index,记录下一个有效元素应该在的位置。遍历所有元素,当遇到有效元素,将其移动到","indic","indirect","info","info,","init","init()","init()初始化","init(),当","initi","inlin","inline,","instanc","instead,","instruct","int","int(bar)","int)","int,","int16","int32","int64","int8","intel(r)","intend","interfac","interface{}","interface{})","interface{},","interface{}。","interface{},因此需要类型转换。","interface,而不是结构体,这将为开发人员提供更大的灵活性来改变未来,但仍然泄露了具体列表使用抽象实现的细节。","intern","internal/poll.(*fd).write(0xc0000ae060,","internal/poll.(*fd).writelock(...)","internal/poll.(*fdmutex).rwlock(0xc0000ae060,","internal,所有名为","interv","intervalmilli","int。","int,一个是类型是","invocation.","invok","io.reader,","io.writer,","io.writer,printf()","iota","ioutil.readall(f)","ioutil.readdir(\"./files\")","ioutil.readfile(","ioutil.readfile(name)","ioutil.readfile(name);","ip","is\"","isactive(now,","iscontinue,","isempty(","isloc","islocal,","iso","isrunning()","item","items)","j","j++","java","javascript","jeffail/tunni","jslint","json.unmarshal(buf,","jsoncontenttyp","json、orm","k","k,","k1:","k2:","k3:","kb","keep","key","key)","key.expired()","kubernet","l","l\"","l\",如果发生内联,那么将不会出现变量的逃逸,就不存在堆上分配内存与回收的操作了,二者将看不出性能差异。","l.","l.head","l.head,","l.head.compareandswap(head,","l.head.load()","l.head.load().(*node)","l.list.add(e)","l.list.remove(e)","l.mu.lock()","l.mu.unlock()","languag","largest","lastname:","later","layout","layout。","layout,给出布局建议。一个清晰的项目结构,能帮忙我们高效有序的管理与日俱增的业务代码。不会随着代码量的递增,项目代码变得凌乱而不堪入目。","leak,","len","len()","len(a))","len(args)","len(elms))","len(files))","len(i))","len(s)","len(s.counters))","len(str)","len(trips))","length","length,","less","level","limit","line","linecount","linecount,","linux","list","liter","live","loadconfig()","loadfactor","local","locat","location()","lock","lock()","lock)。在使用锁时,对获取锁的目的操作做了区分,一种是读操作,一种是写操作。因为同一时刻允许多个","locker","locker)","locker。因为","lockfreelist","lockfreelist)","log","log.fat","log.fatal(\"miss","log.fatal(err)","log.fatalf","log.printf(\"invalid","log.println(\"exec","log.println(\"hello,\",","log.println(debug.stack())","log_2","logger.errorf(\"num","logger.errorf(\"num:%d,","loghandl","loghandler)","loghandler{}","logoutput","logo,readm","logtofil","logtofile=1,","logtoremot","logtoremote=2","logtostdout","logtostdout=0,","long","loop:","loop)。","l}","l(互斥锁","m","m.data[k]","m.lock()","m.mutex.lock()","m.mutex.unlock()","m.unlock()","m0","m1","m2","m[\"key\"].(info)","m[f.name()]","m[i]","m[k1]","m[k2]","m[k3]","m[v]","m[v];","magic”。","main","main()","main.go","main.main","main.main.func1(0x0)","main.main.func2()","main/copi","main/mutex","main/onc","main/perf","main/pool","main/rang","main/reflect","main/slic","make","make()","make([]*item,","make([]byte,","make([]int)","make([]int,","make([]item,","make([]t,","make([]trip,","make([]uint64,","make(chan","make(map[int]int)","make(map[int]struct{})","make(map[int]struct{},","make(map[interface{}]struct{},","make(map[string]int,","make(map[string]os.fileinfo)","make(map[string]os.fileinfo,","make(map[string]string),","make(map[t1]t2)","make(map[t1]t2,","make(map[uint64]struct{},","make(set)","makefile(如果有的话)变得小而简单,例如","mani","map","map.","map[int]*s{1:","map[int]int","map[int]s{1:","map[string]int","map[string]interface{})","map[string]str","map[string]struct{}","map[t1]t2","map[t1]t2{","map[t1]t2{}","mapextra","maps.","map、slice、channel","map。","map。此时我们可以将每个协程拉取的结果写入到一个临时对象,这样便将并发地协程与同一个变量解绑,然后再将其汇聚到一起,这样便可以不用使用锁。即独立处理,然后合并。","map初始化","map,slice,chan,interfac","map,这样可以在初始化时指定元素。","mark","markdown","math","math.maxint32","math.maxint32。","mathemat","maximum","mayb","maybenewday","mb0","md5","mean","memori","method","method.","metrics.incrcounter(cntcachemisskey,","me,this,self","middlename:","mistak","mod","modifyuserinfo(user)","modul","modules。从","modules,我们并不需要","month","more","mrcommitsuri","msg","msg)","mu","mu.lock()","mu.rlock()","mu.runlock()","mu.unlock()","mu0","mu1","multipl","multipli","multiply=2","multiply=3","mutex","mutex,","mutex/rwmutex","mutex、lock","mutex,或读写锁","myerror","myerror{}","m查看编译器对上面两个函数的优化决策。","n","n\"","n)","n,","name","name:\\\"test\\\"\"","necessari","net.splithostport(\"192.0.2.0:8000\")","net.splithostport(\"192.0.2.0:http\")","net.splithostport(\"1:8\")","net.splithostport(\":8000\")","net.splithostport(tt.give)","net/url","nevacu","new","new(order.areaorder)","new(pp)","new(student)","new(sync.mutex)","new(t)","new:","newattrmodel(ctx","newcond","newcond(l","newday","newpool","newprint","newprinter()","newsigner()","newsmap()","newsomething()","newtattrmodel","next","next:","nextoverflow","nil","niladic,","nil。","nil,但是满足其他逻辑进入到","nil,另一个不是),并且在不同的情况下(例如序列化),这两个切片的处理方式可能不同。","nil;对于结构类型是空结构。","nocopi","node","non","normal","note:","notfound","notfounderror","notifi","notifylist","notifylist.wait、notifylist.notifi","notifylist。如果这个队列被复制的话,那么就在并发场景下导致不同","noverflow","now","now)","now:","ns/op","ntohl","ntohl()","ntohl(bi","ntohlnotusebinary(bi","num","num)","num,","number","number)","number)}:","n禁用了编译器对切片遍历的优化。如果没有该选项,那么上面三种遍历方式没有性能差别。","o.don","o.done,在热路径上是比较好理解的。如果","o.doslow(f)","o.m.lock()","o.m.unlock()","object","observ","obtain","occurr","offici","offset)","offset)。在机器码中,偏移量是随指令传递的附加值,cpu","ok","ok。","oldbucket","oldoverflow","oldtimenow","on","onc","once.","once.do(f)","once.do(func()","one.","op","open\")","open()","open(fil","openapi","openbsd,","oper","operand","opmapwithmutex","opmapwithmutex(rpct","opmapwithrwmutex","opmapwithrwmutex(rpct","option","optohandl","or,","order","os","os\")","os)","os.(*file).write(...)","os.(*file).write(0xc0000ac008,","os.args[1:]","os.exit(1)","os.getenv(\"gopath\"),","os.getenv(\"goroot\"),","os.getwd()","os.open(name)","os.stdout,相当于直接输出到标准输出。这里的","out","outlin","output","output.","overflow","p","p,","p.count","p.doprintf(format,","p.error","p.fmt.init(&p.buf)","p.free()","p.lock()","p.panick","p.processunity()","p.wraperr","packag","packages/)。","packages]","page","panic","panic(\"an","panic(\"nil","panic(\"unknown","panic(44)","panic/recov","panic:","paniclinesparsing(){}","panics,","panic。","panic。因为","panic。因此,请始终使用","panic。每个自行启动的","panic,因为这样可以记录错误的同时结束程序,方便排查问题。","panic,并打印详细堆栈信息或进行其它处理。","panic,建议使用","panjf2000/ant","parent1","parent1()","parent2","parent2()","parsepaniclines(){}","pass","path","path.","path.join(cwd,","pathkey","pathkey:","path”","path)是程序非常频繁执行的一系列指令,sync.onc","path,即热点路径,顾名思义,是你的程序中那些会频繁执行到的代码。","per","perfbook","perform","performed.","pi","pkg","pkg:","place","plan9,","point","pointer","pointer.","pointers.","poll(10)","poll(10*time.second)","poll(delay","pool","pool.","popup....\");document.onclick","port)","port,","power","pp","ppfree","ppfree.get().(*pp)","ppfree;","present","previou","print","printer'","printf","printf()","printf(format","printinfo(\"foo\",","printinfo(nam","println","process(v)","processor","program","programm","progress","project","proper","properti","proverb","provid","pr,它将会变得更好。","public","public。为了保持向后兼容性,外部类型的每个未来版本都必须保留嵌入类型;","public,那么字段是","push","push(v","put()","question","r","race!","rand.seed(time.now().unixnano())","rang","range。二者在功能上没有区别,但在性能上会有区别吗?","range,建议只迭代下标,通过下标访问元素,这种使用方式和","range,有时候甚至会有上千倍的性能差异。对于这种场景,建议使用","raw,","reactor","read","read(\"reader1\",","read(\"reader2\",","read(\"reader3\",","read()","read(nam","read(p","read(r","readabl","readconfig","readconfig()","readconfigwithonce()","reader","reader1","reader2","reader3","readers,","reader,writer。","reading\")","readm","readme.md","readme_zh","readme,相得益彰。","read。","read,也可以调用","real","receiv","record","recov","recover()","recover();","recover。","recover,很容易发生","red","reflect","reflect.makeslice(reflect.typeof(i),","reflect.valueof(i)","region","region,","remark","remove(","remove(entity)","rendezv","requir","require.noerror(t,","required\")","res,","res.ret","resolveerror","resourc","resp,","resp.body.close()","result","result[k]","resum","resumes,","ret","ret,","retcod","retptr()","return","returned;","returning.","returns,","returns.","return。","retvalue()","reus","review","rfc","rlock()","rlocker()","rows.next()","rpct","rpc、db","rsp,","run","run()","run();","run(arg","run(os.args[1:])","run(os.args[1:]);","rune","runlock()","running…","runtim","runtime.gc()","runtime.gomaxprocs(1)","runtime.goos;","runtime.hmap:","runtime.slice:","runtime_notifylistadd(&c.notify)","runtime_notifylistnotifyall(&c.notify)","runtime_notifylistnotifyone(&c.notify)","runtime_notifylistwait(&c.notify,","rwmutex),当修改条件或者调用","s","s)","s,","s.add(\"bar\")","s.add(\"foo\")","s.area","s.areaorders[area]","s.counter","s.data","s.hasarea(area)","s.lock()","s.mu.lock()","s.mu.unlock()","s.now","s.now()","s.sign(give))","s.unlock()","s1","s1)","s1,","s1ptr","s1val","s1{}","s2","s2,","s2ptr","s2val","s2{}","s3","s[key]","same","save","scan","scheme","script","second","see","seed","select","servehttp(w","set","set)","settrips(trip","set。","set)、add、del、clear、contain","sign(give))","sign(msg","sign.go","sign_test.go","signal","signal()","signal.","signer","signwithtime(msg,","simultan","singl","site.","size","size(v","size)","size,","size)为单位访问。如","slice","sliceescap","sliceescape()","slicefibonacci","slicefibonacci()","slicefibonacci()函数中分配的局部变量切片因为要返回到函数外部,所以发生了逃逸,需要在堆上申请内存空间。从测试也过也可以看出,arrayfibonacci()函数没有内存分配,完全在栈上完成数组的创建。这里说明了对于一些短小的对象,栈上复制的成本远小于在堆上分配和回收的成本。","sliceindex","slice。","slice申明变量避免使用","slice,但是共用原始","slice,因为重复的切片初始化会带来性能损耗。相反,请执行一次转换并捕获结果。","slice,将要删除的元素过滤掉。缺点是需要开辟另一个","slice,这意味着,","slow","smap","snapshot","snapshot()","socket","somefixedtim","someth","spa(singl","specif","specifi","specification。","split()","splitn()。","sptr","sptr.name","sptrs[1].read()","sptrs[1].write(\"test\")","sql","src","src/runtime/map.go","src/runtime/runtime2.go里面,我们可以找到","src/runtime/slice.go","srverr.errareaconflict","st","stackoverflow","stackoverflow。","standard","standards/project","start","start()","start([]byte)","start,","stat","state","static","stats.snapshot()","statu","status)","status=","statusdon","statusinprogress","statusreadi","stay","stefno","stop","stop()","storageclass","store","store.new()","store:","str","strconv","string","string()","string)","string,","string.builder也提供了预分配内存的方式","struct","struct,","struct{","struct{}","struct{})","struct{},","struct{}{}","struct。","struct初始化","stu","stu)","student","studentpool","studentpool.get().(*student)","studentpool.put(stu)","subtract","subtract=1,","subtract=2,","such","sum","supervisord)配置。","sure","suspend","sval","svals[1]","svals[1].read()","svals[1].write(\"test\")","swagger","switch","sync","sync.cach","sync.cond","sync.cond?","sync.mutex","sync.mutex3.2","sync.mutex{}","sync.newcond(&sync.mutex{})","sync.onc","sync.once?","sync.pool","sync.pool{","sync.pool。","sync.pool,例如","sync.rwmutex","sync.rwmutex3.3","sync.rwmutex{}","sync.waitgroup","sync.waitgroup。","sync/atom","syscal","systems,","sysv)和进程管理(runit,","t","t)","t,","t.add(24","t.adddate(0","t.run(tt.give,","tab","tag","templat","test","testexample。","testsign(t","testsigner(t","testsplithostport(t","textual","tgithost","tgt","third_parti","time","time.dur","time.duration)","time.duration,因此该单位包含在字段的名称中。","time.format","time.hour)","time.millisecond)","time.now","time.now()","time.now,","time.pars","time.parsedur","time.rfc3339","time.second)","time.second,不要使用","time.since(t)","time.sleep(1","time.sleep(delay)","time.sleep(time.duration(delay)","time.sleep(time.microsecond)","time.sleep(time.second","time.sleep(time.second)","time.tim","time.time,在比较、添加或减去时间时使用","time.time,如果底层驱动程序支持则返回;","time.unmarshaljson","timenow","timenow()","times,","timestamp","time。","tmp","to\"之类的短语来保持上下文简洁,当错误通过堆栈向上传递时,它会一层一层被堆积起来:","to/for。","todo","tool","top","total","tour","trip","trips)","trips[0]","trips[0],但不会影响","true","true)","true,","true}","true。","true,调用","tt","tt.wanthost,","tt.wantport,","two","type","type.","type:","types:","typic","t{name:","u","uid","uidarray","uidslic","uidsliceslic","uint","uint16","uint32","uint32(bys[2])","uint32(bys[3])","uint64","uint64(3),","uint64(5),","uint64(7),","uint64(9)}","uint8","uintptr","ui。","unknownregion","unless","unlik","unlock","unlock()","unsafe.alignof","unsafe.alignof(x)","unsafe.alignof(x.f)","unsafe.alignof(x.f),unsafe.alignof(x)","unsafe.point","unsafe.sizeof","until","up","upstart,","urlarray","urlarray;","urlkey","urlkey:","us","usag","use.","user","username)","username:","user{","user{\"john\",","user{}","util","util、common、misc、global。packag","v","v)","v+1","v+1)","v,","v.call();","v.f1","v.len())","v.send()","v1","v1,","v2","v2,","v3","v3,","v:","val","valu","value:","var","variabl","variable,","varint","var。","var的后面。","vendor","verb","verifyflow)","version","vet","vet之类的工具会正确地指出这些和其他情况下的隐式问题。","volum","vs","vs.","w","w.","w.write(p.buf)","wait","wait()","wait(),处于等待状态。main","wake","want","want,","want:","wanterror","wanthost","wanthost:","wantport","wantport:","watcher","web","websit","wg","wg.add(num)","wg.wait()","whether","wiki","wikipedia","window","window.open(e.target.src,e.target.src)}img{cursor:pointer}","windows...","winner","wirt","withlocklist","withlocklist)","without","words,","work======","work======\")","worker(ch","workshop","write","write(\"writer\",","write()","write(nam","write(str","write(w","writer","write。","writing\")","written","w。data","x","x,","xx.close()可以不用显式处理。","xxx.pb.go,gotest","xxx:","xxx_test.go","x,unsafe.alignof(x)","x,计算","y","y,","yaml.unmarshal(raw,","ye","year","zero","{","{\"a\"}}","{\"interval\":","{\"intervalmillis\":","{...}","{0xc12cadf690,","{0xc12ea62f90,","{add,","{give:","{heap}","{subtract,","{}","|","||","}","}()","})","},","}{","~","“hot","、go","。","一个函数内不应该混杂多个实现细节,需要将独立的逻辑封装成函数。","一个函数只负责一个职责。","一个可能引发的问题就是","一个文件中出现多个结构体时,需要注意观察是否有重复的成员。","一个结构体中,成员较多,且多个成员有明显关联关系,需要封装新的结构体。","一份。","一分钟有","一句话总结:用来保存和复用临时对象,减少内存分配,降低","一周有","一天有","一小时有","一年","一旦有错误发生,马上返回。","一次循环尽量只做一件事,不用担心多次循环。","一种是不含任何方法的空接口runtime.eface:","一种是带有一组方法的接口runtime.iface:","一般情况下,对于需要修改原对象,或占用内存比较大的对象,返回指针。对于只读或占用内存较小的对象,返回值能够获得更好的性能。","一般来说,有如下几种情况:","一行代码不要超过120列,超过的情况,使用合理的方法换行。","一起使用。","三个以上函数的接口名,类似于结构体名。","上例中创建了缓冲区大小为","上的包要确认活跃度,不知名的包可能会被下架或出现不兼容的版本升级情况,必要情况下可","上进行修改。","上面的例子只是简单地限制了协程开辟的数量。在此基础之上,基于对象复用的思想,我们可以重复利用已开辟的协程,避免协程的重复创建销毁,达到池化的效果。","上面的分析目的是为了尽可能地量化","上面的实现有几点需要注意一下:","上面这三条是编译器对接口的检查机制,","上,由接收数据的协程在数据接收完毕后,逐个通知。总之,需要额外的复杂度来完成这件事。","上,那么其对性能的影响将被放大。这里解释下","下标时,性能比","下面代码无法通过编译,因为","下面以","下面以一个简单的示例来看下二者的性能差异。","下面以我们熟知的","下面再看一下链表","下面是一个反面示例,其他","下面看一下","下面看一下二者的性能对比。","下面看一下性能对比。","下面看下二者的性能对比。","下面看下二者的性能差异。","下面看下剥去反射前后二者的性能差异。","下面,就像不应该拥有","不仅易用,也很易学,这得益于与之匹配的丰富学习资料。go","不再受互斥锁保护,可能会引发并发读写的错误","不分片写入一个","不发送数据的信道","不发送数据的信道2.3","不可避免时,init()","不同。map","不同,slice","不存在。如果不允许部分失败,使用","不应该拥有的目录","不应该拥有的目录/src3.小结参考文献1.前言","不建议使用","不必要的","不必要的空行","不支持","不是一个提示:编译器将为提供给","不是基于代码块的,而是基于函数的。你在循环中分配资源,那么不应该简单地使用","不是错误处理的合适策略,仅当发生不可恢复的异常(如","不用复数。如","不管是什么语言,开发什么项目,一个稍大的项目,必然要面临如何管理项目结构布局的问题,因为一个简洁清晰的布局是项目可读的关键。","不管是全局切片还是局部切片,使用","不能满足这些要求的代码可能要在","不能被复制","不能被复制的原因,并不是因为其内部嵌套了","不要传递指针。","不要使用2/4来表达英文","不要使用双重否定。","不要使用大而全的无意义包名。","不要使用字符串表示","不要使用相对路径导入内部包,应该使用完整的路径引入包。","不要包装系统调用错误,并给出一些没意义的附加信息。","不要反复从固定字符串创建字节","不要在该目录下放太多的代码,如果代码可以被其他项目导入使用,请放到","不要添加没必要的括号。","不要用宽泛、无意义的名字,如:","不要用注释删除代码。","不要轻易使用别名。","不要返回多个用于控制流程的状态。","不要这样使用","不要随便","不需要发送任何的数据,只用来通知子协程(goroutine)执行任务,或只用来控制协程的并发。这种情况下,使用空结构体作为占位符就非常合适了。","与","且","且预先分配容量的拼接方式性能最佳。","业务代码禁止使用","两个函数的接口名综合两个函数名。","个","个任务,达到了协程并发控制的目的。","个位置开始占据","个协程同时存在。那如果协程中还存在着其他需要分配内存的操作,那么允许并发执行的协程将会数量级地减少。","个协程并发写入","个协程并发写入链表","个协程的并发,2^31","个字节的数据,一次读取","个字节那么只需要读取","个字节,cpu","个字节,偏移量才是","个字节,那假设","个或更少的字段,则可以在测试表中省略字段名称。","个数字。","个数的增多而线性扩展。很多语言都提供","个消息则被阻塞。开启协程前,调用ch","个等待条件变量","个,如果超过,请封装成新的类型。","个,或有相同类型的返回值,或者从上下文中不清楚返回值的含义,使用命名返回,其它情况不建议使用命名返回。","中","中。","中一节","中使用。","中使用,一般用来捕获程序运行期间发生异常抛出的","中保证了","中元素时,性能非常差。","中内置一个","中可勾选","中定义的格式时间戳。默认情况下,time.unmarshaltext","中引用的图片等。","中执行。","中无法捕获当前","中有一百万条数据,就会浪费","中比较特殊。没有任何字段的空","中的","中的代码,作为项目的主应用目录。目录也可以包含多个可执行文件,子目录名称一般与可执行文件相对应(如:/cmd/myapp","中的变量只要被引用就一直会存活,存储在堆上还是栈上由","中的字节数。","中的方法。","中的暂停了","中空结构体","中空结构体仍占用","中英文之间应该有空格。","中调用才会生效。","中退出程序且只退出一次。","中需要使用","中,因为","中,因为它使用","中,我们可以使用","中,而应用的共享代码可以放在","丰富的示例将帮助用户更加便捷快速的了解上手一个项目,再加上","串行无锁","串行无锁2.减少锁竞争3.优先使用共享锁而非互斥锁3.1","串行无锁是一种思想,就是避免对共享资源的并发访问,改为每个并发操作访问自己独占的资源,达到串行访问资源的效果,来避免使用锁。不同的场景有不同的实现方式。比如网络","为","为了模拟上面的情况,简单地写个示例程序,对比下性能。","为什么可以这样,因为接口实质上在底层用两个字段表示:","为什么常识性的认知是错误的呢?因为地球自转的不均匀性和长期变慢性,会存在时间修正的情况,比如闰秒,闰年等。","为什么性能上会有两倍多的差距,因为","为什么放在第一个字段就能够减少指令呢?因为结构体第一个字段的地址和结构体的指针是相同的,如果是第一个字段,直接对结构体的指针解引用即可。如果是其他的字段,除了结构体指针外,还需要计算与第一个值的偏移(calcul","为什么是第一个字段。","为什么是第一个字段?","为什么是第一个字段?3.性能差异1.简介","为什么编译器会对上面的测试代码进行优化呢?因为代码实际上只取最后一个切片元素的值,所以前面的循环操作可以跳过,这样便带来性能的提升。如果是下面的代码,那么编器将无法优化,必须遍历拷贝所有元素。","为你的错误添加上下文,","为例。","为例给出具体实现。","为例,简单介绍其使用。","为并发而生。goroutin","为读操作占比。","为零。任何其他尺寸都必须经过严格的审查,而不是拍脑袋给出一个大致的值。我们需要考虑如何确定大小,什么原因会导致","主体风格占位符主体风格","主要原因是","主调对条件的检查,使用了","之势。","之外使用函数调用的结果,则不应尝试缩小范围。","之间操作的","也是不错的选择。","了。","事实上可以用任何的数据结构替代。","二维切片或数组。","互动勘误","互斥锁","互斥锁的作用是保证共享资源同一时刻只能被一个","产生模糊的接口文档指","亿个,每个协程内部几乎没有做什么事情。正常的情况下呢,这个程序会乱序输出","仅包含方法的结构体","仅包含方法的结构体1.不占内存空间","仅在","仅将相关的声明放在一组。不要将不相关的声明放在一组。","仅提供了一个导出方法","从","从函数名开始算第一层,当函数的嵌套深度超过4层,往往会导致圈复杂度过高,函数变得复杂不可读,我们可以通过拆分函数的方式来减少嵌套深度。","从切片中过滤指定元素。注意:不修改原切片。","从前文可知,可取址的值可以调用接收器为指针的方法,但这里为何不能将值","从基准测试结果来看,性能最佳的方法是移位法,其中又属第一种实现方式较佳。性能最差的也是最常用的方法是截取法。随着切片长度的增加,上面四种删除方式的性能差异会愈加明显。","从字段","从性能出发,兼顾实现的便捷与代码可读性,如果待拼接的字符串不涉及类型转换且数量较少(fmt.sprintf()。","从日志中可以很容易看到,每秒钟只并发执行了","从测试结果可以看出,对数组的拷贝性能却比使用切片要好。为什么会这样呢?","从等待队列中按照顺序唤醒,先进入等待队列,先被唤醒。","从结构化二进制数据","从结果可以看出,strings.join()、strings.builder、bytes.buffer和byte[]","从输出结果可以看到,使用变量(非常量)来指定切片的容量,会导致切片发生逃逸,影响性能。指定切片的长度时也是一样的,尽可能使用常量或数值字面量。","从这个例子可以看到,内存对齐对实现变量的原子性操作也是有好处的。每次内存访问是原子的,如果变量的大小不超过字长,那么内存对齐后,对该变量的访问就是原子的,这个特性在并发场景下至关重要。","代码与官方推荐的格式保持一致,于是所有格式有关问题,都以","代码也可以优先处理条件不满足或错误的情况,尽早返回或继续循环来减少嵌套。","代码即注释","代码必须用","代码生成工具自动生成的代码可排除此规则(如协议生成文件","代码的稳健、可读和高效是我们每一个位","代码目录","代码目录/cmd/internal/pkg/vendor2.3","代码风格","代码,想写出更加高效易读的","代码,想让自己拥有一个更好的编码风格,","以","以一个简单的示例,通过对map[uint64]struct{}分片前后并发写入的对比,来看下减少锁竞争带来的性能提升。","以上仅列出了部分变量发生逃逸的情形。实际上,go","以上必须使用","以后,go","以外类型的切片进行过滤,拷贝一次代码又何妨呢?可以肯定的是,绝大部份场景,根本不会对所有类型的切片进行过滤,那么反射带来好处我们并没有充分享受,但却要为其带来的性能成本买单。","们努力的结果。此项目布局是通用的,建议并非强制,当然我们最好遵守,因为这能让我的项目布局看起来更加规范,易于交流和维护。","优先使用","优化后的版本的性能测试结果如下。可以看出相较于不预先分配空间的方式,性能提升了很多。","优秀的本地缓存组件","优雅地处理错误。","会一直阻塞。","会将主调加入条件变量的通知列表,需要修改条件变量,所以主调在调用","会自动添加依赖的包,并移除未引用的包。把依赖包按字母序升序排列,并对包进行分组管理。通过空行隔开,默认分为标准库包和非标准库包(第三方包和内部包)。","会自动释放锁","传的是","传输协议。","但我们仍然可以在的包内将其和","位的","作为","作为一门追求高性能的后台编程语言,当然也不例外。","作为下标不留空格","作为他们的模块代理服务器)。使用","作为依赖管理的项目不要提交","作为入参不要留空格","作为其他","作为其他结构体一个字段时,应该使用值而不是指针。即使该结构体不被导出,也不要直接把","作为函数参数传入时,如果您存储了对它们的引用,则用户可以对其进行修改。","作为函数的值返回,必须对","作为函数返回值且有多个返回值的时候,error","作为后缀,如","作为结构体最后一个字段时,需要内存对齐。因为如果有指针指向该字段,返回的地址将在结构体之外,如果此指针一直存活不释放对应的内存,就会有内存泄露的问题(该内存不因结构体释放而释放)。","作为输入参数或者数组下标时,运算符和操作数之间不需要空格,紧凑展示。","作为集合(set)使用时,可以将值类型定义为空结构体,仅作为占位符使用即可。","作用域内隐式覆盖","作用域较大的名字(全局变量),不要使用缩写,要有明确的意义。","作用域较小的名字(局部变量/函数参数),尽量使用简短的名字。","作用域隐藏内置","你只能通过值调用","你实际的代码可以放在","你是要修改","你的项目结构布局看起来应该像下面这个样子。","你还可以在","使用","使用make()初始化,并指定容量。","使用os.exit或者log.fatal*退出程序,而不是panic。","使用了","使用互斥锁读写","使用值接收器的方法既可以通过值调用,也可以通过指针调用。带指针接收器的方法只能通过指针或","使用制表符进行缩进,使用空白符进行对齐。","使用反射并且很慢。如果有需要用到这两个函数的地方,我们应该手动实现这两个函数的相关功能,而不是直接去使用它们。","使用字段名初始化结构体。","使用此格式,并可通过","使用表驱动的方式编写用例,代码看上去会更简洁。","使用读写锁读写","例外场景:","例外,如果是相似的一组变量,请使用","例外:在字段名提供有意义上下文的地方可以显示指定零值。如表驱动单元测试中的测试用例,即使字段为零值,限制指定零值,通过字段名可清晰地表达用例的含义。","例外:如果","例外:如果有","例如,使用errors.new表示带有静态字符串的错误。如果调用者需要匹配并处理此错误,则将此错误导出为变量以支持将其与errors.is匹配。","例如,在一个时间点上加上","例如,由于","依旧可以继续使用。这可能就是“全能”与“专精”的区别。","依赖规范import","保持","保证","保证函数只会被执行一次和多次执行,二者的性能差异。","信息是否符合规范。","倍(1600","值传递会拷贝整个对象,而指针传递只会拷贝地址,指向的对象是同一个。传指针可以减少值的拷贝,但是会导致内存分配逃逸到堆中,增加垃圾回收(gc)的负担。在对象频繁创建和删除的场景下,返回指针导致的","值好很多。从这里我们应该能够知道二者性能差别之大的原因。","值将引发","假设您使用共享的","假设我们有一个“学生”结构体,并复用改结构体对象。","假设我们的切片有","做一个二次判断,来保证任务函数只会被执行一次,done","做了说明,因为接收器为指针的方法会修改接受器,为了避免产生这种错误的行为,便禁止将值赋给和指针接收器方法集匹配的接口。","充当条件变量实现","先看下其性能测试的对比。","入参","入参&返回值成员函数局部变量defer减少嵌套(圈复杂度)魔法字面量函数分组与顺序入参&返回值","入参和返回值个数均不能超过","入参和返回值均以小写字母开头。","入参和返回值顺序根据关联性排在一起。","全局变量使用","全局变量申明使用","全局量中不要包含格式化字符,否则必然违反就近原则。","公有库代码(外部项目可以使用)","公有库代码(外部项目可以使用)。","关于项目的设计文档,用户的使用文档等(除了","关键字并省略类型。","关键字申明,一般情况下其类型与表达式的类型一致,这种情况下可省略其类型。","关闭gc改为手动执行","其中函数","其中数字与字节序列的转换可以用如下三个函数:","其他","其他情况都应该使用该名词原有的写法,如","其他目录","其他目录/docs/tools/examples/third_party/githooks/assets/website2.7","具体可以看下","内存对齐前变量","内存对齐规则","内存对齐规则3.合理的","内存开销","内容简介","内部包","内部实现决定而和具体的语法没有关系。","内部是维护着一个","内部维护了一个等待队列,队列中存放的是所有在等待这个","写入到","写出更优质的代码。","写并发程序的时候随便起个成千上万的","写锁与读锁是互斥的,如果存在读锁,写锁阻塞,如果存在写锁,读锁阻塞。","写锁之间是互斥的,存在写锁,其他写锁阻塞。","减少嵌套(圈复杂度)","凡事无绝对,某些情况下,init()","出现状态/类型等字眼时,需要使用枚举。","函数","函数。","函数中定义的局部变量切片逃逸到了堆。","函数中被调用(或程序生命周期中的其他地方),或作为","函数中调用os.exit或log.fatal*且只调用一次。如果有多个错误场景停止程序执行,请将该逻辑放在单独的函数并从中返回错误。","函数中,通过对成员变量","函数为例,看看","函数之间的关系可能会使代码变得脆弱和容易出错;","函数体第一行不要换行。","函数信息描述\"。","函数分组与顺序","函数创建。","函数前,需要先获得条件变量的成员锁,原因是需要互斥地变更条件变量的等待队列。在","函数即可。对象池中没有对象时,将会调用","函数名","函数名必须遵循驼峰式,首字母根据访问控制决定使用大写或小写。","函数命名","函数均可内联。slicefibonacci()","函数将","函数应按粗略的调用顺序排序。","函数应该以动词开头。","函数应该放在","函数引起的,fmt.printf","函数才会被执行。这带来的后果就是,如果迭代次数过多,那么可能导致资源长时间得不到释放,造成泄漏。","函数是当所在的","函数最后暂停了","函数本身的一部分。特别是打算给其他程序使用的库应该特别注意代码行为的完全确定性,","函数注释","函数用于生成指定长度元素类型为","函数的参数是一个","函数的顺序或副作用。虽然","函数直接注入到使用方","函数类似,但有区别。","函数而不是字面量,因为这样看起来更容易和申明区分开来。","函数调用中意义不明确的实参可能会损害代码可读性。当参数名称的含义不明显时,请为参数添加","函数调用和对调用结果的处理,是紧密相连的,不能加空行。","函数进行资源的释放。","函数长度不能超过","函数,调用","分支时,很容易遗忘","分组等其他规范细节和普通文件保持一致。","分钟","切片","切片元素从结构体","切片是有效的切片,但它不等于长度为","切片过滤掉指定的元素。","切片,代码会更加简洁清晰。","列转换为","则不存在拷贝。","则是在对象使用完毕后,放回到对象池。","则阻塞等待。","则需要以","创建","创建。","创建了一个","创建新切片,过滤掉指定元素。","初始化","初始化信息","初始化信息。","初始化函数仅执行了一次,避免了多次重复初始化,在并发环境下很有用。","初始化切片时提供容量信息,特别是在追加切片时。","初始化的时候提供容量信息。","初始化结构指针变量使用字面量","初始化结构指针变量时,请使用&t{}代替new(t),可以与结构体初始化在代码风格上保持一致。","删除切片指定元素一般有如下几种方法,本文以","删除指定元素。","判断字符串是否为空,这样更加直观。","判断是否有错误发生之后,再","判断条件较为复杂时,考虑封装成函数。","利用","利用一个下标","利用反射,我们可以实现一个类型泛化支持扩展的切片过滤函数。","利用硬件支持的原子操作可以实现无锁的数据结构,原子操作可以在","前有一段注释,说明了done","前缀)。","前要加锁","前言","前都应该被删除,除非添加注释讲解为什么不删除,","前需要对条件变量进行上锁,主调加入条件变量的通知列表后再解锁。","前面的例子过于极端,一般情况下程序也不会无限开辟协程,旨在说明协程数量是有限制的,不能无限开辟。","功能实践","功能设计","加一。最终","加写锁","加密传输协议","加读锁","加锁","加锁是为了避免在并发环境下,同时访问共享资源产生的安全问题。那么,在并发环境下,是否必须加锁?答案是否定的。并非所有的并发都需要加锁。适当地降低锁的粒度,甚至采用无锁化的设计,更能提升并发能力。","加锁,并且继续执行","包","包&文件","包下的一个组件,可以作为保存临时取还对象的一个“池子”。个人觉得它的名字有一定的误导性,因为","包不支持解析闰秒时间戳(issu","包两种接口类型的定义。","包中使用","包中程序初始化是一个例外,如程序启动时,文件无法打开或数据库无法连接导致程序无法正常运行可使用","包为例,我们看下其是如何使用","包信息描述。","包名","包名和","包名应该为小写单词,不要使用下划线或者混合大小写,使用多级目录来划分层级。","包名谨慎使用缩写。当缩写是程序员广泛熟知的词时,可以使用缩写。例如:","包含了指向底层数据的指针,因此在需要复制它们时要特别注意。","包含固定的元素列表,则使用字面量初始化","包命名","包和","包处理时间","包如何实现。","包如果有多个","包实现了数字和字节序列之间的简单转换以及","包注释","包的原子操作对基本类型","包的性能相较于针对具体类型实现的版本,性能差异非常大。","包针对大端字节序将字节序列转为","包,因为它有助于以更安全、更准确的方式处理这些不正确的假设。","匹配。","协程池化,我们可以自己写一个协程池,但不推荐这么做。因为已经有成熟的开源库可供使用,无需再重复造轮子。目前有很多第三方库实现了协程池,可以很方便地用来控制协程的并发数量,比较受欢迎的有:","协程的代价","协程的代价2.2","协程调用","协程都执行到","单个函数的接口名以","单元测试文件名命名规范为","单函数圈复杂度最大值","单测文件行数限制是普通文件的","博客园","占位符","占据的内存空间大小为","占据空间一致,而","占用了,其他的","占用,一个","即使嵌入兼容的抽象列表","即可。可参考标准库包的","即多个","压力。","压力)。","原切片长度为","原则。","原子操作(如","去执行另外一个协程,下面看一下协程之间切换的耗时。","参考","参考文献","又如","又没有明确说明,会产生模糊的接口文档。","及其方法是","发生逃逸,在堆上申请切片","取址。","变量仅初始化一次,初始化完成后驻留在内存里。","变量初始化过程中,所有读都被阻塞,直到初始化完成;","变量名","变量和常量注释","变量大小不确定(如","变量申明的位置尽量靠近使用的地方。","变量的值只需要一次访存。","变量的值需要两次访存,第一次访存得到前一个字节,第二次得到后两个字节。内存对齐后","变量较大(栈空间不足)","另外请参考:don't","另外,分组使用的位置没有限制,我们也可以在函数内部使用它们。","只会被修改一次。","只唤醒任意","只有一个源文件的包,包名应该和文件名保持一致。","只有在","只能在当前","只能用于测试文件,且必须是为了解决循环依赖,才能使用。","只能简单地完成字符串之间的拼接,非字符串类型的变量需要单独做类型转换。行内拼接字符串不会产生内存分配,也不涉及类型地动态转换,所以性能上优于fmt.sprintf()。","只设置一个","只遍历","可以利用信道","可以在代码的任意位置初始化和调用,因此可以延迟到使用时再执行,并发场景下是线程安全的。","可以实现,看起来代码更加简洁,那么","可以将暂时不用的对象缓存起来,待下次需要的时候直接使用,不用再次经过内存分配,复用对象的内存,减轻","可以用来唤醒一个或所有因等待条件变量而阻塞的","可以用来通知等待条件发生而阻塞的","可以用来通知被阻塞的","可以看出无锁版本比有锁版本性能高一些。","可以看出,两种通过","可以看到,arrayfibonacci()","可以看到,demo3{}","可以看到,go","可以看到,二者的性能差距很大,快达到一个数量级了。所以在不影响代码可读性时,行内字符串尽可能地使用运算符","可以看到,反射涉及了额外的类型判断和大量的内存分配,导致其对性能的影响非常明显。随着切片元素的递增,每一次判断元素是否在","可以看到,同样的字段,因排列顺序不同,会导致不一样的结构体大小。","可以看到,通过对分共享资源的分片处理,减少了锁竞争,能明显地提高程序的并发性能。可以预见的是,随着分片粒度地变小,性能差距会越来越大。当然,分片粒度不是越小越好。因为每一个分片都要配一把锁,那么会带来很多额外的不必要的开销。可以选择一个不太大的值,在性能和花销上寻找一个平衡。","可以通过","可变全局变量在使用时,可能会被其他地方修改,导致程序运行时出现意外情况。","可执行文件目录","可执行文件目录。","可显示使用空标识符(下划线)忽略。","可能会被多个协程并发调用,为了提升性能(减少执行时间和内存占用),使用","可能更可取或是必要的:","可见一次协程的切换,耗时大概在","可见使用反射实现的","可见读多写少的场景,使用读写锁并发性能会更优。可以预见的是如果写占比更低,那么读写锁带的并发效果会更优。","可见,函数返回值使用","各个公司或组织,都有各自不同的","各占","各占据","合理性","同一层级的逻辑细节不要拆分。","同一文件中的函数应按接收者分组。","同时迭代下标和值,则需要将切片/数组的元素改为指针,才能不影响性能。","名字应该追求清晰且越来越收敛,符合‘单一职责’原则,而不是像common一样,什么都能往里面放,越来越膨胀,让依赖关系变得复杂,不利于阅读、复用、重构。注意,xxx/utils/encryption这样的包名是允许的。","后会进行解锁操作,避免重复解锁引发","后面的代码。","后面要有空格。","后,for","向","吗?","否则,尽可能在错误消息中添加上下文","含有","启动的","呢?","呢?goroutin","命令行参数。","命名不能采用","命名清晰的地方,不要添加无意义的注释。类型注释","命名规则基本保持和结构体命名规则一致。","和","和一个","和其他形式的确定性预计算的优化。","和没有任何元素的","唤醒了该协程,那么","唤醒所有等待条件变量","唤醒所有等待的协程。","唤醒顺序","回到第一个例子,在一个时间时刻加上","因为其他","因为内存对齐的存在,合理的","因为空结构体不占据内存空间,因此被广泛作为各种场景下的占位符使用。一是节省资源,二是空结构体本身就具备很强的语义,即这里不需要任何值,仅作为占位符,达到的代码即注释的效果。","因为这一点,空","因此","因此呢,将","因此,在处理时间时始终使用","因此,在对内存特别敏感的结构体的设计上,我们可以通过调整字段的顺序,将字段宽度从小到大由上到下排列,来减少内存的占用。","因此,在将元素添加到","圆周率","在","在业务逻辑处理中禁止使用","在为返回的错误添加上下文时,通过避免使用\"fail","在使用预先分配的标识符时编译器不会报告错误,但是诸如go","在保存代码时可设置自动执行","在写入时会","在处理时间的瞬间时使用","在多数情况下,sync.onc","在尽可能的情况下,在使用","在接收","在热路径中,done","在编译时验证接口的合理性,这包括:","在视觉上是相似的","在调用失败时传播错误有三个主要方式:","在运行时可能会有更多分配。","在返回","在这种情况下,测试文件不能在包","在迭代过程中返回的是元素的拷贝,index","在部分场景下,结构体只包含方法,不包含任何的字段。例如上面例子中的","在高负载下被填满并阻塞写入者,以及当这种情况发生时系统会发生哪些变化。","场景下将单","块内,读取","块注释即在代码块前给出一个总的说明,然后每行变量或常量的末尾给出详细注释,这样看起来更加简洁。","基于互斥锁/读写锁,那它和互斥锁的区别是什么呢?","基于当前目录","基准测试代码如下:","基准测试结果如下:","基本数据类型与字符串之间的转换,优先使用","声明","声明到一组。","声明和初始化在视觉上很相似","声明和初始化在视觉上是不同的","声明结构,因为这样更加简洁,其各个字段值为字段类型对应的零值。","声明错误可选的方式很少,在选择合适的错误申明方式之前,应考虑以下几点。","声明零值结构使用关键字","处理","处理panic","处理recov","处理。在知道常见的变量逃逸场景后,我们在编码时可以有意识地避免变量发生逃逸,尽可能地使用栈空间,而非堆空间。","处理类型断言error","处理,函数返回后就会直接释放,而堆上分配的内存使用完毕会交给","复杂的执行/错误信息,需要定义结构体保存。","复用","复用对象","复用对象,每次操作不再有内存分配。","外部依赖库","外部依赖库。","外部包","外部辅助工具","外部辅助工具。","多个相似","多线程模型改为主从","多线程模型,避免对同一个消息队列锁读取。","多行初始化。","多行定义。","大块变量或常量定义时的注释方式。","大部分业务场景是读多写少,所以使用读写锁可有效提高对共享数据的访问效率。最坏的情况,只有写请求,那么读写锁顶多退化成互斥锁。所以优先使用读写锁而非互斥锁,可以提高程序的并发性能。","天","好。","好,sliceindex","如","如下面这个函数的第二个参数是没有必要的,大部分时候都是","如不同环境(测试、正式)的服务配置信息。","如将","如引入","如放置测试工具和测试依赖数据。对于较大的项目,有一个数据子目录是有意义的。例如,你可以使用","如无必要,不要起和包相同的名字。","如果","如果*handler与http.handler的接口不匹配,那么语句var","如果不关心是否成功,可显示忽略","如果为","如果代码不可复用或者你不希望其他项目使用,请放到","如果传入的参数通常是固定的,考虑通过实现多个函数实现默认参数。","如果你不使用","如果你对文章内容有任何疑问和建议,欢迎在应相应章节下留言探讨。","如果使用局部切片时,已知切片的长度或容量,请使用常量或数值字面量来定义。","如果全局变量仅在单个函数内使用,则应该定义为局部变量。","如果出现失败应该立即返回error,如果继续处理,则属于特殊情况需要添加注释。","如果函数返回值需用于初始化其他变量,则采用下面的方式。","如果切片中是指向结构体的指针,而不是结构体呢?","如果加锁无法避免,则可以采用分片的形式,减少对资源加锁的次数,这样也可以提高整体的性能。","如果发现此项目布局规范并不适用自己的项目,可在其基础上适当做出改变,不要泥古拘方。","如果变量为私有,且特有名词为首个单词,则使用小写,如","如果变量类型不确定,那么将会逃逸到堆上。所以,函数返回值如果能确定的类型,就不要使用","如果只需要第一项(key),就丢弃第二项(value)。","如果只需要第二项,则把第一项置为空标识符(下划线)。","如果在","如果在声明中省略了结构的所有字段,请使用","如果字符串字面量出现","如果局部变量仅被使用一次,且不能起到解释逻辑的作用时,应该删除局部变量,直接内联。","如果并发无法做到无锁化,优先使用共享锁而非互斥锁。","如果想使用","如果我们开辟很多协程,但不会导致程序崩溃,可以吗?如果真要这么做的话,我们应该清楚地知道,协程虽然轻量,但仍有开销。","如果我们调用","如果我们针对","如果手动管理依赖包可以将依赖包放到该目录,当然推荐使用依赖包管理工具","如果操作成功,再","如果方法不使用类的成员,应该实现为非成员函数。","如果是","如果是想全面了解","如果是想深入了解","如果是枚举类型的常量,需要先创建相应类型。","如果是这样,请参阅错误包装部分。","如果是静态字符串,我们可以使用","如果是,我们必须通过声明顶级错误变量或自定义类型来支持","如果有一个类似上面分配资源的代码段,我们应该将其包裹在一个函数中(匿名函数或有名函数)。在该函数中,使用","如果没有要添加的其他上下文,则按原样返回原始错误。","如果自定义协程池容量大小,可以调用","如果表达式的类型与所需的类型不完全匹配,请指定类型。","如果要开启多个线程执行一组动作,并且要等待全部完成后继续后续逻辑,考虑使用","如果调用者不需要匹配它,则使用fmt.errorf,如果调用者确实需要匹配它,则自定义","如果需要在","如果非成员函数要使用类的多个属性时,应该实现为成员函数。","始终以字长访问内存,如果不进行内存对齐,可能会增加","字符串占位符,如果输入数据来自外部,建议使用%q进行安全转义。","字符串字面量","字符串拼接","字符串拼接还有其他的方式,比如strings.join()、strings.builder、bytes.buffer和byte[],这几种不适合行内使用。当待拼接字符串数量较多时可考虑使用。","字符串的搜索存在二义性","字符串,并通过","字符串;","字节。","字节即可。","字节数组读取接口。","字节的空间。","字节缓冲器为例,利用","字节,与字段","字节,即额外填充了","字节,那么","存储类型","存放","它们将成为包的公共","官方","官方也在","官方文档","官方的入门指南","官方网站已有系统全面的指导文档,新手可以快速通过官方资料,轻松上手。此外,第三方资料,也有百家争鸣之势。有介绍","定位于同步,用于一发多收的场景。虽然","定位于通信,用于一发一收的场景,sync.cond","实例时,需要关联一个锁。","实例都会关联一个锁","实现上利用反射来达到范型的效果,在运行时进行类型的动态判断,所以带来了一定的性能损耗。","实现了多种列表类型,请避免在具体的列表实现中嵌入","实现了接口;","实现线程安全。果不其然,和上面的猜想一致。","实现集合(set)","实现集合(set)2.2","实现非常简洁。do()","实践建议,帮助我们更好的使用","实际上","实际上,我们可以使用无缓冲","实际使用时,我们可以根据不用场景来选择。如不能修改原切片使用拷贝法,可以修改原切片使用移位法中的第一种实现方式。","容量大小。","容量提示","容量提示2.指定切片容量尽可能指定容器容量,以便为容器预先分配内存。这将在后续添加元素时减少通过复制来调整容器大小。","容量时,仍可能发生分配。","对","对两个值进行判断时,被比较的值放在左边。","对于","对于上面的示例代码,还有一种更好的处理方式是将上面的","对于任意类型的变量","对于其它的包,可导出的接口也不能有","对于动态字符串的错误,","对于变量、常量的声明,相似的声明应该放在一组。类型的定义同样适用。","对于大多数包装错误,这是一个很好的默认值,但请注意,调用者可能会开始依赖此行为。因此,对于包装错误是已知变量或类型的情况,请将其作为函数契约的一部分进行记录和测试。","对于存储为全局变量的错误值,根据是否导出,使用前缀","对于很多需要重复分配、回收内存的地方,sync.pool","对于指针类型(如","对于数组类型的变量","对于结构体类型的变量","对于自定义错误类型,请改用后缀","对单个","对外部系统使用","对整数采用的便是这种编码方式。","对象池,每次只执行","对象能够极大地提升性能,减少内存占用,同时降低","对象,避免重复创建与回收内存,来看看对性能的提升效果。","对齐系数决定了字段的偏移和变量的大小,两者必须是对齐系数的整数倍。","导入代码。","导入的包按照先后顺序应该分为三组:","导出与非导出接口均需要有注释。","导出以下两个错误,以便此包的用户可以将它们与errors.i","导出全局变量。","导出全局常量。","导出的函数/变量的职责必须与包&文件职责高度一致。","导出的函数和方法(结构体或接口下的函数称为方法)都必须有注释。","导出的函数应该放在非导出函数前面","导出的字段和","导致整个进程退出。","将","将不会被执行","将你的","将你的云(","将元素插入到链表的首部","将更加人性化,如","将格式化后的字符串打印到屏幕,即标准输出。在","将网络字节序的","小写,如果有多个单词使用连字符分隔。","小时","小时并不总是产生一个新的日历日。","小时,我们应该使用`time.add`。","小时,我们用于添加时间的方法取决于意图。如果我们想要下一个日历日(当前天的下一天)的同一个时间点,我们应该使用","小汽车结构申明。","小的拷贝好过引用,什么意思呢,就是尽量使用栈变量而不是堆变量。下面举一个反常识的例子,来证明小的拷贝比在堆上创建引用变量要好。","就没有区别了。如果想使用","就能搞定了。","就近申明。","尽可能在与外部系统交互中使用","尽可能地在初始化时提供","尽可能地避免在","尽可能避免使用","尽早","尽管编写这些委托方法是乏味的,但是额外的工作隐藏了实现细节,留下了更多的更改机会,还消除了在未能描述出潜在接口的模糊文档。","尽管这在实践中并不成问题,但请记住,time","尽量不要用拼音命名。","尽量用","尽量用值传递,非指针传递。","尽量采取有意义、简短的包名,尽量不要和标准库冲突。","局部变量","局部变量使用短变量声明形式(:=)。","嵌入到结构体中。","嵌入类型会泄漏实现细节、禁止类型演化和产生模糊的接口文档。","嵌套深度不能超过4层。","工具可以帮我们静态分析我们的源码存在的各种问题,例如多余的代码,提前","工具格式化。","工具生成的代码","工具自动格式化引入的包名,import","工具自动生成文件","差距不是很大,但是随着字符串长度的增加,差距将会越来越明显。此外,如果这种重复的转换在","已无法继续使用,而","已经明确了返回一个字符串类型,因此我们没有必要显式指定类型。","布局","布局4.空结构与空数组对内存对齐的影响1.为什么需要内存对齐","布局可以减少内存占用,提高程序性能。","布局考虑内存对齐","带域名的包名都属于外部包,如","带来一定的负担,严重的时候会引起","常量命名","年诞生以来,因其出色的并发能力和简单易用的低门槛,已在各大厂商的后台高并发业务场景崭露头脚,甚至有取代传统后台服务开发语言","并不是同一个,这会导致出现有些","并不是必须的,例如","并且标明后续处理建议(如删除计划)。","并发写入有锁链表","并指定作用范围。","并没有关键字","并没有提供删除切片元素专用的语法或函数,需要使用切片本身的特性来删除元素。","库),可以用于实现无锁数据结构,如无锁链表。","应为","应当使用如下的方式:","应用服务建议有","应用服务必须要有接口测试","应用程序和公共库的示例","应用程序和公共库的示例。","应用程序特定组件,如静态","应用程序的组件","应用程序目录","应用程序目录/web2.5","应用程序项目的基本布局,是社区","应该做到:","应该后移一位。","应该足以满足任何情况!","底层核心数据结构","建议调整为这样:","开发经验的","开头,例如","开始","开始。","开始,如果需要使第一个值为有意义的值,我们应该从","开始,官方推荐使用新的依赖管理系统","开销","开销。我们可以利用runntime.gosched()让当前协程主动让出","开销可能会严重影响性能。","式","式。如果不关心是否成功,ok","引入第三方包要慎重。","引用)时,才可以","当y与err都为空时,函数的调用者会出现错误的调用逻辑","当不能在这些交互中使用","当且仅当第一次访问某个变量时,进行初始化(写);","当使用反射时,请问一下自己,我真地需要它吗?","当创建的","当在这些交互中不能使用","当存在资源管理时,应紧跟","当有多个","当然,凡事无绝对。如果第一个枚举值为零是有意义的,如当零值是理想的默认行为时。","当然,凡事无绝对。如果需要修改接口变量本身,那么应该使用指向接口变量的指针,当然你必须清楚自己在干什么。","当程序的多个函数具有退出能力时会存在一些问题:","很多时候,我们可能只需要操作一个类型的切片,利用反射实现的类型泛化扩展的能力压根没用上。退一步说,如果我们真地需要对","很少需要嵌入类型,虽然它可以帮助您避免编写冗长的委托方法。","循环中使用","循环变量的地址不要存储。","循环变量的地址指向的是同一个变量,我们可以通过赋值给一个同名的变量,通过变量逃逸,来达到取不同地址的目的。","循环多次尝试,直至成功。","必要情况下字段给出注释。","必要时给包起个别名","必须在","必须是固定大小的值或固定大小值的切片,或指向此类数据的指针。","必须是指向固定大小值的指针或固定大小值的切片。","必须是最后一个参数。","必须要有","性能对比","性能对比1.无锁化","性能没有差别,但是","您会收到更多有用的错误,例如“呼叫服务","想离","意义不明的成员变量,应该定义类型描述作用。","成员函数","成本,可提高程序性能。","我们以","我们以一个简单的线程安全单向链表的插入操作来看下无锁编程和普通加锁的区别。","我们以一个简单示例,来说明使用","我们几乎不需要使用指向接口的指针,应该将接口直接赋值给接口,这样在传递过程中,实质上传递的底层数据仍然是指针,即不存在值拷贝的情况。","我们分别对两种链表做一个并发写入的操作验证一下其功能。","我们可以找到","我们可以找到切片的底层数据结构","我们可以看一下最常用的标准格式化输出函数","我们可以看下接口变量的内存宽度。","我们可以通过依赖注入的方式将依赖注入到使用方,这样便可以避免使用全局变量,进而避免了依赖的全局变量被错误修改的可能。","我们可以通过在访问共享资源前前用","我们实现一个简单的例子,三个协程调用","我们想象一个非常简单的场景:","我们来看一下编译器编译时对上面两个切片的优化决策。","我们看下二者的性能差异。","我们还是以上面斐波那契数列函数为例,看下返回值为确定类型和","我们都知道","或","或互斥锁,那么只能有一个协程可以等待,并读取到数据,没办法通知其他的协程也读取数据。","或无缓冲","或是无缓冲的。默认情况下,channel","或程序主动抛出的","或空","或者","或者为了更好的可测试性","或自定义错误类型。","所以如果对性能要求非常严格,或待拼接的字符串数量足够多时,建议使用","所有注释掉的代码在提交","所谓互斥锁,指锁只能被一个","手动gc","打包和持续集成","打包和持续集成。","打印的是不同的地址","打印的是相同的地址","执行runtime_notifylistwait会挂起调用者所在的","执行各种构建、安装、分析等操作的脚本","执行各种构建、安装、分析等操作的脚本。","执行基准测试结果如下:","执行基准测试:","执行当前包下的所有基准测试,结果如下:","执行性能测试结果:","执行测试结果如下:","批量查询函数返回值使用","批量获取用户信息(允许部分失败)。","批量获取用户信息(需全部成功)。","把简单的逻辑判断放前面,复杂的逻辑判断放后面。","抛出的异常。如果启动的","抛去大段的注释,可以看到","括号和空格","持续集成配置与脚本","指令,也就是说,这样做能够提升性能。","指导","指针复制是没有问题的。","指针既可以调用","指针,对于","按照上面的规则,下面给出好坏文件内容布局示例。","捕获最晚要在当前","换行方式","接下来逐个分析,首先是","接下来,我们测试三种情景下,互斥锁和读写锁的性能差异。","接受初始化语句,尽可能缩小变量作用域。","接口命名","接口注释","接收器为值和指针的方法在调用方式上是有区别的。","接收器的名称在函数超过","接收数据,接收完成后,将","控制并发处理的任务数量,就不需要","推荐以类名第一个英文首字母的小写作为接收器的命名。","描述\"。","描述\",斜线后面紧跟一个空格。","描述了内存对齐的规则。","提供了两个导出方法用来使用锁。","提供了两种锁,互斥锁(sync.mutex)和读写锁(sync.rwmutex),读写锁便是共享锁的一种具体实现。","提供了五个导出方法用来使用锁。","提供容量提示会在初始化时尝试调整","提升可读性是值得的,因为使用它们的成本微不足道。尤其适用于那些不仅仅是简单内存访问的较大方法,在这些方法中其他计算的资源消耗远超过","提示并不保证完全的抢占式分配,而是用于估计所需的","操作将导致零分配(直到","操作来达到一发多收的效果,但是","操作的基准测试,对比一下有锁与无锁的性能差异。","操作,即调用compareandswap()方法进行插入,如果插入失败则进行","操作,及做一次数据拷贝,耗时几乎可以忽略。而内存分配和回收的耗时占比较多,因此对程序整体的性能影响更大。从测试结果也可以看出,使用了","支持","支持使用原始字符串字面值,可以使用反引号来表示原生字符串。在需要转义的场景下,我们应该尽量使用使用反引号表示字符串,避免转义。","支持将","放在匿名函数中","放在有名函数中然后调用之","放在第一个字段,能够减少","数量,复用协程,达到更高效执行任务的效果。","整体风格","整体风格2.2","文件中(一般是和包同名的文件)即可。","文件名应该采用小写,并且使用下划线分割各个单词。","文件命名","文件长度不能超过","文件,只需要出现在一个","方式一","方式二","方式传递后,再加上其长度不可扩展,考虑到性能我们一般很少使用它。实际上,凡事无绝对。有时使用数组进行拷贝传递,比使用切片要好。","方法中没有使用值接收器。","方法在结束阻塞时,会重新给","方法对资源进行上锁,在访问共享资源后调用","方法接收器命名","方法支持将","方法时,必须加锁。","方法是","方法来实例化具有给定容量的池,如下所示:","方法来获取和放回池子中。","方法来释放锁,也可以用","方法获得锁后,其他请求锁的协程都会阻塞在","方法,直到锁被释放。","族群","无论是","无论是使用嵌入结构还是嵌入接口,都会限制类型的演化。","无锁化主要有两种实现,无锁数据结构和串行无锁。","无锁单向链表","无锁单向链表的简单实现","无锁数据结构","无锁数据结构1.2","无错误匹配。","无需去除编译器优化,基准测试结果如下:","既然","时为","时传入的","时获取的是值拷贝,对副本的修改,是不会影响到原切片。","时间上,协程调度也会有","时间处理看似简单,实则不然。关于时间的错误假设通常包括以下几点:","时间类型尽量使用内置定义,如","时,同样的,请注意用户对暴露内部状态的","时,甚至在指定","时,请使用","时,请记住当","时,除非达成一致,否则使用","明文传输协议","明确地告诉我们,我们并不需要知道变量是分配在栈(stack)上还是堆(heap)上。golang","是","是一个值,而","是一个实体列表。","是一个很好的选择。频繁地分配、回收内存会给","是一个更合适的名字。","是一个有效的","是一个有效的长度为","是一个比较好的方式。","是一个简单易用的高性能","是一个结构体类型","是一种使用可变字节表示整数的方法。其中数值本身越小,其所占用的字节数越少。protocol","是不占用内存空间,不像","是不确定的类型,会发生变量逃逸,触发堆内存的分配。所以,可预见的是当元素数量增加时,性能差异会越来大。","是几秒钟还是几毫秒?","是只会被执行一次的函数,一般为对象初始化函数。","是可伸缩的,同时也是并发安全的,其容量仅受限于内存的大小。存放在池中的对象如果不活跃了会被自动清理。","是各种实体列表的通用实现。","是否符合标准等。编译前先执行代码静态分析。","是在没有大小提示的情况下创建的;","是基于互斥锁/读写锁实现的条件变量,用来协调想要访问共享资源的那些","是属性数据层操作类的工厂方法","是无法捕当前","是无缓冲的,其","是有区别的,channel","是有大小提示创建的;在运行时可能会有更少的分配。","是有效的","是有效的,所以指向","是由","是第一个字段,默认是已经对齐的,从第","是第三个字段,对齐倍数为","是第二个字段,对齐倍数为","是第二个字段,对齐系数为","是级联失败(cascad","显示处理","显示指明","更多关于","更多可参考","替换。","替换为指针","最佳实践更近一步,建议看看本书。","最佳性能","最好有","最小化变量作用域。","最顶层将其捕获,在其他","有一个协程在异步地接收数据,剩下的多个协程必须等待这个协程接收完数据,才能读取到正确的数据。在这种情况下,如果单纯使用","有些","有些语言自身提供了目录结构规范,但对于较为年轻的","有时候你会看到某个类里有很多基本类型字段,但是你隐约地能区分出某些字段好像应该在一起,如手机号和带区号的电话号码、描述某个日期范围的开始日期和结束日期,它们应该有一个真实的载体,如联系方式类和时间范围类)","有时候使用","有时后我们需要根据多个","有时,我们需要一些工具函数。比如从","有锁","有锁单向链表","有锁单向链表的简单实现","有锁并发写入","有锁链表的字符串形式输出","服务对外接口","服务对外接口。","服务应用程序目录","服务应用程序目录/api2.4","服务,每个请求天然是并发的,此时使用","未导出全局变量。","未导出全局常量。","本书为开源书籍,希望得到大家的协同共建,不断迭代丰富。如果有你的建议和","本书主要分为四个方面:","本书所述内容谈不上是","本书由来","本书由来内容简介目标读者互动勘误","本文所述内容均为参考意见,并非标准。其中许多是","本文结合官方编码建议,大厂编码规范、开源技术书籍和自身项目经验,尽可能以简短的语言给出一套行之有效","本身在代码规范方面做了很多努力,很多限制都是语法要求,例如左大括号不换行,引用的包或者定义的变量不使用会报错。此外","条件不满足或出现错误应尽早返回。","来代替。","来代替。事实上,对于集合来说,只需要","来取代","来回收,如果无休止地创建大量","来定义枚举类型,引入枚举的标准方法是声明一个自定义类型和一个使用了自增器","来实现。","来拼接而不是fmt.sprintf()。","来混淆底层错误,调用者将无法匹配它,但如果需要,您可以在将来切换到","极客兔兔","构建","构建依赖包","构造函数应该放在其他函数之前,如newxyz()/newxyz()。","查询对应的值,可能会出现部分失败的情况,如某个","标准包","标准库","标准库也大量使用了","标准库函数","标准库提供的使函数只执行一次的实现,常应用于单例模式,例如初始化配置、保持数据库连接等。作用与","标准库时间的类型别名","标志:flag","标签或日志中的","栈上分配内存比在堆中分配内存有更高的效率。因为栈上分配的内存不需要","样式注释","根据调用者是否应该能够匹配和提取根本原因,在","格式为//","格式为:\"//","格式之间进行选择。","格式化字符串中多个占位符之间要有空格。","格式的说明文档,是用户了解一个项目最直观的入口。如果有需要,添加不同语言的","框架","概述了几个内置的,不应在","模块语句","模式。go","模拟","次。","次,则禁止使用,用一个有名称的常量代替,可读性更好。","正常逻辑不应该在","此外,因","每一个字段","每个","每个包都应该有一个包注释。","每个字段按照自身的对齐系数来确定在内存中的偏移量,一个字段因偏移而浪费的大小也不同。","每个重要的可导出函数都要首先编写测试用例,测试用例和正规代码一起提交方便进行回归测试。","每个需要导出的变量和常量都必须有注释说明。","每个需要导出的类型定义(type","每个需要导出的自定义结构体或者接口都必须有注释说明。","比","比如","比如下面将依赖的","比如多个班级下的学生id。","毫无压力,但当我们起十万、百万甚至千万个","池,实现了对大规模","没有","泄漏实现细节指","注入","注意,1.11","注意,与","注意,多次运行上面的main()函数的结果可能会不相同,因为并发是无序的。","注意,如果方法的接收器为不可导出类型,可以不注释,但需要质疑该方法可导出的必要性。","注释对变量和常量进行简要介绍,放在常量或变量定义的前一行。独行注释格式为:\"//","注释对结构进行简要介绍,放在结构体定义的前一行。格式为:\"//","注释描述函数或方法功能、调用方等信息。格式为:\"//","注释结束添加点或句号,参考标准库源码注释。","测试用例的函数名称必须以","测试相关","测试相关。","测试结果如下:","深度解密go","添加上下文生成新错误。","添加上下文生成新错误;","添加将实体添加到列表中。","添加成功或出错。","源码","源码2.2","源码应该是你的首选,再结合精彩的第三方分析,如","源码文件","源码目录","源码目录。","源码进行剖析介绍实现原理的,有介绍高并发场景下实战指导的,也有介绍使用","热路径(hot","然后调用","然而,一旦错误被发送到另一个系统,应该清楚消息是一个错误(例如","版本的大小限制可能不一样。一般是","特有名词时,需遵循以下规则:","特殊实现需要注释。","现在是一个拷贝","现在是明确的","生成切片函数如下:","生成带参数的","生成指定长度","生成指定长度的随机","生成的文档之外)均可以放在该目录。","用","用于从对象池中获取对象,因为返回值是","用于捕获","用于获取变量的对齐系数。","用于阻塞调用者,等待通知。","用户结构定义了用户基础信息","用来保证函数只执行一次。要达到这个效果,需要做到两点:","用来协调想要访问共享资源的","用来解决这类问题。","用来调节读操作的占比,来模拟读写占比不同的场景。rpct","用的就是","由两个字段构成,一个类型是","由于","由于函数是按接收者分组的,因此普通工具函数应在文件末尾出现。","由于单测文件内的函数都是不对外的,所有可导出函数可以没有注释,但是结构体定义时尽量不要导出。","由于第一个值从","申明","申明变量","的","的。","的一部分。","的一部分,尽管它不是。除了这一种情况,不要使用import","的两个分支中都设置变量,则可以将其替换为单个","的二进制表示形式写入","的位置就是所有有效元素的下一个位置,最后做一个截取就行了。这种方法会修改原来的","的使用方式非常简单,只需要实现","的修改。","的修改是一个互斥操作。在执行任务函数前,对","的倍数,从第","的共同追求。为书写效率更高的代码,本文将结合","的共同追求。本篇将结合","的内存占用为","的内存,在源码","的切片。从最终的结果可以看到,遍历","的切片进行测试,来上下上面四种实现的性能差异。","的切片(一个为","的初学者,建议先略过本书,了解下","的判断,来决定是否执行传入的任务函数。执行任务函数前,通过锁保证任务函数的执行和","的包。","的区别?","的压力。","的压力,提升系统的性能。","的原理与使用场景","的名字和目录一致。","的四个成员函数定义如下:","的基础上增加了自动删除和引入包。","的大小为","的大小,这将减少在将元素添加到","的子目录都不能被导出。","的字段时,一般不需要内存对齐。但是有一种情况除外:即当","的存在还有必要吗?","的完整功能,如初始化(通过切片构建一个","的定义。","的定义如下:","的实现是","的实现细节。good","的实现细节,对其调用者不可见。","的实现细节,被到处泄露了;","的实现,通常使用","的容量分配足够的内存,这意味着后续的","的对齐系数决定,也是","的对齐系数由","的工具,主要功能就是检测代码中不规范的地方。","的并发操作个数超过了系统上限,这个报错是","的并发读写。","的底层数组。这样也不需要额外分配内存空间,直接在原","的底层结构后,我们应该知道在传递过程中一般也不需要使用指向它们的指针。","的开销。虽然官方宣称用","的开销主要是三个方面:创建(占用内存)、调度(增加调度器负担)和删除(增加","的开销非常小,只有在您可以证明函数执行时间处于纳秒级的程度时,才应避免这样做。使用","的异常,禁止滥用","的性能几乎一样,如基本类型的切片","的性能几乎是一样的。而且使用指针还有另一个好处,可以直接修改指针对应的结构体的值。","的性能将显著地高于","的性能差别。","的性能相近。如果结果字符串的长度是可预知的,使用","的情况下保证并发安全,并且它的性能也能做到随","的截取删除指定元素。注意删除时,后面的元素会前移,下标","的打印顺序是随机的。","的指针","的指针基本是不必要的。","的操作耗时很短,所以每次睡眠一微秒(百万分之一秒)来增加耗时,不然对共享资源的访问耗时,小于锁处理的本身耗时,那么使用读写锁带来的性能优化效果将变得不那么明显,甚至会降低性能。","的数量。","的最佳实践更近一步。","的最佳实践,但希望能够帮助广大","的毛刺,而","的空间。","的空间,优点是容易理解,而且不会修改原","的空间,那么假设计算机的内存是","的结果为准。","的缓冲区大小来实现。","的编码和解码。varint","的讨论可参考","的调度管理和复用,允许使用者在开发并发程序的时候限制","的退出机制,防止泄漏。","的通用准则,其他扩展内容也参考了很多官方指南,包括但不限于。","的逻辑。","的逻辑,","的遍历方式","的键,而不需要值。即使是将值设置为","的长度与容量匹配,在此之后,任何","的非","目录。","目录下。","目录下,","目录下,而不是具体业务目录下。","目录内部增加一些代码结构来区分共享和非共享的。虽然它并不是必须的(尤其是小的项目),但是最好能从视觉上区分包的用途。","目录的项目结构是一种常见的布局模式,但并不是所有人都接受它,一些","目标读者","目,但这通常发生在开发人员有","相似的声明放在一组。","相关操作需要独立封装","省略结构中的零值字段。","看一下性能差异,注意需要禁止编译器优化,不然看不出差别。","看下二者的性能差异:","知道变量逃逸的原因后,我们可以有意识地避免变量发生逃逸,将其限制在栈上,减少堆变量的分配,降低","示例,实际不要这么查询,防止","社区的人并不推荐它。","禁止在循环中使用","禁止类型演化指","私有库代码(仅本项目使用)","私有库代码(仅本项目使用)。","私有量和局部量规范一致,均以小写字母开头。","秒","移除从列表中移除实体。","程串行执行","程到运行结束,占用的内存资源是需要由","程势必会带来性能影响,甚至程序崩溃。所以,我们应尽可能的控制协程数量,如果有需要,请复用它。","程占用约","程同步。通过","程后,势必会造成对","程序中每一个被导出的(大写的)名字,都应该有一个文档注释。","程序会像预期的那样顺利的运行吗?","程序将意外终止并输出:","程序崩溃","程序崩溃1.2","程序退出方式","程数量越多,gc","程的情况下,函数仍然只执行一次,比如锁。","程的结构定义type","程间的同步。","程(goroutine)是由","程,以此来实现多个","程,即保存了一个通知列表。sync.cond","空切片使用","空结构与空数组在","空间上,一个","等。","等于其中的最大值。","等于构成数组的元素类型的对齐系数。","等单词开头。","等待下次被唤醒。为了保险起,使用","等待通知,直到","等待,一个","等待,另一个协程调用","等操作,可以使用开源库","等)进行操作,因为很容易忘记使用原子操作来读取或修改变量。","简体中文","简单明了的包命名,如:time、list、http。","简而言之,系统的资源被耗尽了。","简言之:合理的内存对齐可以提高内存读写的性能,并且便于实现变量操作的原子性。","管理依赖的项目,","类似地,在了解","类似的,使用值接收器和指针接收器来实现接口,在判断与接口是否匹配时,也存在一定的区别。","类型。","类型为","类型名","类型呢?","类型手动实现一个","类型换成自定义类型。将来,该参数可以支持不仅仅局限于两个状态(true/false)。","类型断言","类型断言使用","类型断言的单个返回值形式如果断言失败将产生","类型时的实现。","类型的切片,下标与","类型的变量,应直接进行真假判断。","类型的实例,但是我们要","类型,也会多占据","类型,则名称应以","系统中,标准输出也可以视为文件,内核(kernel)利用文件描述符(fil","系统初始化(systemd,","系统地资源是有限,协程是有代价的,为了保护程序,提高性能,我们应主动限制并发的协程数量。","约为","线程安全,保障在多","组来表示枚举值。","经常用在多个","结束。","结束程序而不是","结构。","结构体","结构体信息描述\"。","结构体内的可导出成员变量名,如果是个生僻词或意义不明确的词,必须要单独给出注释,放在成员变量的前一行或同一行的末尾。","结构体名","结构体名应该是名词或名词短语,如","结构体命名","结构体注释","结构体的定义和初始化格式采用多行。","结构体,那么","结构来接收通知就行了。","结构,其有两个变量。使用","绝大部分场景都会访问","统计函数执行次数,使用锁","继续使用","继续使用field","继续看","综合易用性和性能,一般推荐使用strings.builder来拼接字符串。","编码为","编码建议的。至此,本书应运而生。","编码建议,让您的代码高效易读。","编码规范,但大同小异。规范是一种倡导,不遵守并不代表错误,但当大家都遵守规范时,你会发现,整个世界将变得整洁有序。","编码风格","编码风格从简洁易读的角度出发,参考","编译不通过,因为无法对","编译后的机器码指令更少,更直接,必然是能够提升性能的。","编译器一般为了减少","编译器对变量的逃逸分析决策远比我们想像的要复杂。我们只能尽可能地去勾勒而无以绘其全貌。go","编译器而言,超过一定大小的局部变量将逃逸到堆上,不同","编译时可以借助选项","缩略语要么全小写,要么全大写。","网络字节序解析到","置为","考点汇总","考虑一个简单的场景,函数","而不是","而不是net/urls。","而不是执行“init","而非","耗时越大。","背景。不同类型的代码应该有自己的目录,而不是全部放到","能够接收不同类型的入参,通过格式化输出完成字符串的拼接,使用非常方便。但因其底层实现使用了反射,性能上会有所损耗。","能够确保被唤醒后条件一定符合后,再执行后续的代码。","自动格式化代码,保证所有的","至少为","若量类型为","获取读锁,所以是一种共享锁。但写锁是互斥的。","获得。共享锁指可以同时被多个","获得了同名嵌套类型字段","获得的锁。","虽然简单,但其功能特性却不单一。其丰富的语言特性,在使用时还是有很多不同的姿势。本书从功能特性出发,给出","虽然轻量,但天下没有免费的午餐,无休止地开辟大量","虽然这些使用内置标识符的自定义字段可以编译通过,但对","虽然默认为","行。","行内字符串拼接时,出于性能的考虑,待拼接字符串数量较少(fmt.sprintf()。","行内字符串的拼接,主要追求的是代码的简洁可读。fmt.sprintf()","行内拼接字符串为了书写方便快捷,最常用的两个方法是:","行数","行的时候不要用单字符。","行长度换行方式不必要的空行括号和空格行数行长度","行)。单测函数行数限制也是普通函数的2倍(160行)。圈复杂度、列数限制、","表示广播通知,其他的","表示执行是否成功,而不是用","表示执行状态的返回值应该放在最后。","表示读写一致(各占","表示读多写少(读占","表示读少写多(读占","表示连续的非类型化整数常量,它的值是对应常量的下标(从零开始),它可用于构造一组相关常数:","表达时间段","表达瞬时时间","表驱动测试.","被导出的字段和方法全部成为了","被导出的字段和方法,在","被捕获。","被用于控制变量的初始化,这个变量的读写满足如下三个条件:","要么是","要好。","要好,i","要比","规则为准。","规范","规范依赖规范","规范原则上以","解决,","解析、校验、计算的逻辑应该进行分离","解析函数应该注明解析字符串的范例,并明确不能处理的异常情况。","计数器,统计函数执行次数;","计算出一个数据类型实例需要占用的字节数。","记住,虽然","设为","访存指令周期,提高内存的访问效率,会对变量进行内存对齐。go","访存次数。","访存的单位是","访问内存并不是逐个字节访问,而是以字长(word","访问内存的吞吐量。比如同样读取","访问内存的次数,加大","该函数也是参考了","该包已经","该方法可以看成对第一种方法截取法的改进,因为每次指需移动一个元素,性能更加。","该注释对类型进行简要介绍,放在定义的前一行。","详细的专有名词列表可参考这里。","语句之后(所有迭代之后),即所在函数结束时,defer","语句前不要换行。","语句来保证互斥锁一定会被解锁。在一个","语法知识和语言特性与,也建议先略过本书。go","语言之sync.pool","语言圣经","语言在标准库","语言基础和实战的,有对","语言实现原理,还是建议先略过本书。虽然本书略有涉及,但不够全面。go","语言提供了运行时动态获取对象的类型和值以及动态创建对象的能力。反射可以帮助抽象和简化代码,提高开发效率。","语言标准库以及很多开源软件中都使用了","语言标准库没有提供","语言特性,为书写高效的代码,力争从常用数据结构、内存管理和并发编程三个方面给出相关建议。话不多说,让我们一起学习","语言特性,从常用数据结构、内存管理和并发,三个方面给出相关建议。","语言的反射能力,例如用于序列化和反序列化的","语言自","语言规范","语言设计与实现,应该会大有收获。","语言高性能编程","说明文档,介绍服务功能、使用方法、部署时的限制与要求、基础环境依赖等","请注意,如果您从包中导出错误变量或类型,","读、写、计算的逻辑应该进行分离","读写一致(各占","读写安全","读写锁是一种共享锁,也称之为多读单写锁","读写锁的存在是为了解决读多写少时的性能问题,读场景较多时,读写锁可有效地减少锁阻塞的时间。","读取","读取到","读取整个给定的字节数据并返回读取的长度","读多写少(读占","读少写多(读占","读操作。","读锁之间不互斥,没有写锁的情况下,读锁是无阻塞的,多个协程可以同时获得读锁。","调度开销","调用","调用。","调用有名函数","资源、服务器端模板和","赋值的右边应该是断言类型的零值。","赋给接口","起,从编译器层面限制该目录不可被导出,而且不只是项目根目录下的","越界运行时抛出的","路径名不一致时,或者多个相同包名冲突时,使用别名代替会有更好的可读性。","转为主机字节序。","轻量的开销将被放大。","过滤指定元素。注意:不修改原切片。","运算符","运算符+","运算符和操作数之间要留空格","运算符和操作数之间要留空格。","运行上面的例子将会输出:","运行上面的基准测试。","运行上面的基准测试结果如下:","运行上面的基准测试,将得到如下结果。","运行上面的基准测试,结果如下:","运行时管理的轻量级线程。通过它我们可以轻松实现并发编程。但是当我们无限开辟协程时,将会遇到致命的问题。","运行时管理的轻量级线程,通过它我们可以轻松实现并发编程。go","运行测试结果如下:","运行的结果是程序直接崩溃了,关键的报错信息是:","运行结果如下,注意","运行结果如下:","运行结果:","运行输出如下,注意","运行输出:","返回","返回一个","返回值类型不确定(不能确定大小)","返回值超过","返回值,如果允许部分失败使用","返回前,会重新上锁。重新上锁的原因是主调在","返回地址","返回引用(引用变量的底层是指针)","返回当前状态。","返回指定用户名的完整名称。","返回指针","返回指针3.小的拷贝好过引用4.返回值使用确定的类型5.小结变量逃逸一般发生在如下几种情况:","返回时,编译器无法确定返回值的具体类型,导致返回值逃逸到堆上。当发生了堆上内存的申请与回收时,性能会差一点。","返回读锁,使用","还会忽略以“.”或“_”开头的目录或文件,因此在如何命名测试数据目录方面有更大的灵活性。","还启用了模块代理功能(默认使用","还是","还是以上面给出的同步示例,这里换作","还是提供了很多好用的工具帮助我们进行代码的规范。","还有更多,具体可参考","这个例子创建了一个","这个例子实现了","这个时候,就需要有个全局的变量来标志第一个协程数据是否接受完毕,剩下的协程,反复检查该变量的值,直到满足要求。或者创建多个","这个错误没有被导出,因为我们不想让它成为公共","这个错误没有被导出,因为我们不想让它成为我们公共","这个错误被导出,以便这个包的用户可以将它与","这么设计的目的,是减少","这些脚本帮助根目录下","这会精简main()函数,并将所有关键业务逻辑放入一个单独的、可测试的函数中。","这将保留原始错误类型和消息。","这是","这样就不会出现诸如“连接被拒绝”之类的模糊错误,","这样的标识符,不知道其是顶级标识符还是导入包中的顶级标识符。","这样的目录,因为这些名称含义太泛了,违背了单一职责原则。","这种方法最容易理解,重新使用一个","这类意义太宽泛的结构体名。","这类易混淆名称。","这行代码去掉呢?那程序很可能会因为内存不足而崩溃。这一点更好理解,每个协程至少需要消耗","这里分别对长度为","这里利用对","这里我介绍的是后台微服务开发经常遇到的一种情况。我们经常需要并发拉取多方面的信息,汇聚到一个变量上。那么此时就存在对同一个变量互斥写入的情况。比如批量并发拉取用户信息写入到一个","这里我们修改","这里放不希望被其他应用程序或者库导入的代码。注意:从","这里放希望被其他应用程序或者库导入的代码,所以在这里放东西之前要三思。","这里是服务对外接口的实现,定义接口时,我们应该遵循","这里需要注意的是,因为每次读写","这非常适合底层错误消息有足够的信息来追踪它来自哪里的错误。","进行","进行匹配。","进行处理,或使用空白标识符忽略。对于defer","进行自动化管理。","进行高性能编程的,等等。很遗憾的是,没有发现一个系统介绍","迭代的元素较小,那么","通常只包含一个简单的","通常可以简写为","通常用来保护共享的临界资源,条件变量","通用","通用包注释函数注释结构体注释变量和常量注释类型注释接口注释在编码阶段同步写好类型、变量、函数、包注释,注释可以通过godoc导出生成文档。","通用场景","通用应用目录","通用应用目录/configs/init/scripts/build/deployments/test/readme.md2.6","通用的功能包,应该放在","通用规则","通用规则项目命名包命名文件命名函数命名结构体命名接口命名量命名通用常量命名方法接收器命名错误命名避免使用内置名称命名是代码规范中很重要的一部分,统一的命名规范有利于提高代码的可读性,好的命名仅仅通过命名就可以获取到足够多的信息。","通知协程","通知所有等待的协程。","通知队列","通知(事件发生)的场景。如果是一个通知,一个等待,使用互斥锁或","通过","通过%v打印错误信息时建议加冒号。","通过其","通过隐藏基础类型为这些操作增加了类型安全性。此外,它还包括一个易用的","遇到","遍历","遍历切片或数组有两种方式,一种是下标,一种是","遍历性能几乎没有区别。","遵循","避免使用","避免使用内置名称","避免参数语义不明确。","避免重复执行","那么到底是谁适合阅读本书呢?如果你是一位有","那么多大的变量才算是小变量呢?","那么对于稍微复杂一点的","那如果我们将","部分会导致字段","部分可以做到字段","部署的应用程序),这个目录被称为","部署相关","部署相关。","都会浪费额外的内存。因此,在这种情况下,声明为空结构体最合适。","都可能调整大小以容纳其他元素)。","都实现了分片功能,每个分片一把锁,采用分片存储的方式减少加锁的次数从而提高整体性能。","配置信息","配置信息。","配置文件的命令行参数名","配置文件的命令行参数名。","配置文件的读取,和对象初始化应该分开,不要让对象自己根据配置文件初始化,保证构造函数足够简单","采用惰性换行,换行前应尽可能占满当前行不留空位。","采用有意义、简短的文件名。","采用独立的错误流进行处理。","采用驼峰命名方式,首字母根据访问控制采用大写或者小写。","释放写锁","释放读锁","释放资源","释放资源。","释放资源,诸如文件和锁。","释放锁","里装的对象可以被无通知地被回收,可能","里面的","里面的下划线)。","重新分配内存。","量名不应该以类型作为前缀/后缀。","量名应该是名词,进行时和过去式可以做形容词,成为量名的一部分。","量名遵循驼峰式,根据是否导出决定首字母大小写。","量命名","钩子","钩子。","钩子,可以帮忙我们在代码提交时完成一些检测,比如分支名称和","链表节点","错误判断独立处理,不与其他变量组合判断。","错误匹配","错误匹配。","错误命名","错误地使用接口会在编译期报错。所以可以利用这个机制让部分问题在编译期暴露。","错误消息","错误示例:urlarray,应该写成","长度为","长度或容量不定)","闭包","队列里的函数调用,这增加了跳过重要清理任务的风险。","阻塞等待的条件。","限制协程数量","限制协程数量3.协程池化4.小结1.协程数过多的问题","除了","除了包的主逻辑文件中内容允许导出,包内的辅助函数都应该是非导出的。","零值","需要做一次偏移值与指针的加法运算,才能获取要访问的值的地址。因为,访问第一个字段的机器代码更紧凑,速度更快。","需要判断当前文件是否应该归属于当前包,主要以职责进行判断。","需要描述谁,在什么场景下,如何使用接口。","需要有一个缺省处理逻辑","需要注意的时,上面运行基准测试时,使用编译选项","需要注意,运行上面基准测试时,传递了禁止内联的编译选项","需要读取环境变量,并转换为对应的配置。环境变量在程序执行前已经确定,执行过程中不会发生改变。readconfig","非导出的函数,如果比较简单,不需要注释。","非缩略语则应该使用驼峰命名。","非零值","页面,则在这里放置项目网站数据。","项目中使用的标识符","项目依赖的第三方工具,比如","项目命名","项目工具","项目工具。","项目布局","项目布局代码风格功能设计最佳性能项目布局","项目布局参考业界认可度较高的","项目文档","项目文档。","项目用到的相关资源文件,比如项目","项目确实有一个","项目网站数据","项目网站数据。","项目说明","项目说明。","项目资源文件","项目资源文件。","项目配套工具,实现这些工具可以使用从","顺序是明确的,但代码可以更改,","预先分配容量这种方式。","预先声明的标识符","首先根据互斥锁和读写锁分别实现对共享","首先看一下遍历基本类型切片时二者的性能差别,以","首次被加载时执行,若迟迟未被使用,则既浪费了内存,又延长了程序加载时间。","高性能编码","高性能编程技法吧。","高效的代码是我们每一个","魔法字面量","(1)command","(1)一个指向某些特定类型信息的指针;","(1)不明显的控制流:任何函数都可以退出程序,因此很难对控制流进行推理;","(1)不能表示为单个赋值的复杂表达式;","(1)向嵌入接口添加方法是一个破坏性的改变;","(1)如果调用者应该可以访问底层错误,请使用","(1)导出类型的部分","(1)您不应明确返回长度为零的切片。应该返回nil","(1)无论程序环境或调用如何,行为都必须是完全确定的;","(1)无锁单向链表实现时在插入时需要进行","(1)调用者是否需要匹配错误以便他们可以处理它?","(1)返回原始错误;","(2)json:encoding/json","(2)一个指向具体数据的指针。如果存储的数据是指针,则直接存储。如果存储的数据是一个值,则存储指向该值的指针。","(2)为了方便打印链表内容,实现一个string()方法遍历链表,且使用值作为接收者,避免打印对象指针时无法生效。","(2)从嵌入结构体删除方法是一个破坏性的改变;","(2)使用","(2)可插入的钩子,如","(2)导出或非导出类型实现了接口且属于某类型的一部分(匿名嵌套);","(2)要检查切片是否为空,请始终使用","(2)避免依赖其他","(2)错误消息是否为静态字符串,还是需要上下文信息的动态字符串?","(2)难以测试:退出程序的函数也将退出调用它的测试,这使得函数很难测试,并跳过了尚未被运行的其他代码;","(3)sql:database/sql","(3)任何其他情况都违反接口合理性检查,终止编译并通知用户。","(3)使用","(3)删除嵌入类型是一个破坏性的改变;","(3)对","(3)我们是否正在传递由下游函数返回的新错误?","(3)跳过清理:当函数退出程序时,会跳过已经进入","(3)避免访问或操作全局变量和环境状态,如机器信息、环境变量、工作目录、程序参数/输入等;","(3)零值切片(用var声明的切片)可立即使用,无需调用","(4)yaml:gopkg.in/yaml.v2","(4)即使使用满足相同接口的类型替换嵌入类型,也是一个破坏性的改变。","(4)避免",")。",",item",",unsafe.alignof(x)",",vet",",大部分的格式问题可以通过",",字长为",",并结合自身项目团队编码规范,力争给出全面、认可度较高的编码风格,帮助大家写出风格统一的简洁高效的代码。",",此工具在",",类似",",而不应全部零散放在一个大类型中。",",若缓存区满,则阻塞。协程任务结束,调用",";"],"pipeline":["stopWordFilter","stemmer"]},"store":{"./":{"url":"./","title":"前言","keywords":"","body":"本书由来内容简介目标读者互动勘误\n本书由来\nGo 语言自 2009 年诞生以来,因其出色的并发能力和简单易用的低门槛,已在各大厂商的后台高并发业务场景崭露头脚,甚至有取代传统后台服务开发语言 C++ 和 Java 之势。\nGo 不仅易用,也很易学,这得益于与之匹配的丰富学习资料。Go 官方网站已有系统全面的指导文档,新手可以快速通过官方资料,轻松上手。此外,第三方资料,也有百家争鸣之势。有介绍 Go 语言基础和实战的,有对 Go 源码进行剖析介绍实现原理的,有介绍高并发场景下实战指导的,也有介绍使用 Go 进行高性能编程的,等等。很遗憾的是,没有发现一个系统介绍 Go 编码建议的。至此,本书应运而生。\n本书所述内容谈不上是 Go 的最佳实践,但希望能够帮助广大 Gopher 向 Go 的最佳实践更近一步。\n内容简介\n各个公司或组织,都有各自不同的 Go 编码规范,但大同小异。规范是一种倡导,不遵守并不代表错误,但当大家都遵守规范时,你会发现,整个世界将变得整洁有序。\n本文结合官方编码建议,大厂编码规范、开源技术书籍和自身项目经验,尽可能以简短的语言给出一套行之有效 Go 编码建议,让您的代码高效易读。\n本书主要分为四个方面:\n\n项目布局\n\n项目布局参考业界认可度较高的 Standard Go Project Layout,给出布局建议。一个清晰的项目结构,能帮忙我们高效有序的管理与日俱增的业务代码。不会随着代码量的递增,项目代码变得凌乱而不堪入目。\n\n编码风格\n\n编码风格从简洁易读的角度出发,参考 Go 官方 Go Code Review Comments\n,并结合自身项目团队编码规范,力争给出全面、认可度较高的编码风格,帮助大家写出风格统一的简洁高效的代码。\n\n功能实践\n\nGo 虽然简单,但其功能特性却不单一。其丰富的语言特性,在使用时还是有很多不同的姿势。本书从功能特性出发,给出 Go 实践建议,帮助我们更好的使用 Go 写出更优质的代码。\n\n高性能编码\n\n高效的代码是我们每一个 coder 的共同追求。为书写效率更高的代码,本文将结合 Go 语言特性,从常用数据结构、内存管理和并发,三个方面给出相关建议。\n本文所述内容均为参考意见,并非标准。其中许多是 Go 的通用准则,其他扩展内容也参考了很多官方指南,包括但不限于。\n\nEffective Go\nGolang Wiki | Go Common Mistakes\nGolang Wiki | Go Code Review Comments\nThe Go Programming Language Specification\nThe Go Programming Frequently Asked Questions (FAQ)\n\n目标读者\n如果是 Go 的初学者,建议先略过本书,了解下 Go 官方的入门指南 A Tour of Go,这应该是入门必读最佳读物。\n如果是想全面了解 Go 语法知识和语言特性与,也建议先略过本书。Go 官方文档 The Go Programming Language Specification 和 Effective Go,以及第三方书籍 Go 语言圣经 也是不错的选择。\n如果是想深入了解 Go 语言实现原理,还是建议先略过本书。虽然本书略有涉及,但不够全面。Go 源码应该是你的首选,再结合精彩的第三方分析,如 Go 语言设计与实现,应该会大有收获。\n那么到底是谁适合阅读本书呢?如果你是一位有 Go 开发经验的 Gopher,想更好地管理 Go 代码,想写出更加高效易读的 Go 代码,想让自己拥有一个更好的编码风格, 想离 Go 最佳实践更近一步,建议看看本书。\n互动勘误\n如果你对文章内容有任何疑问和建议,欢迎在应相应章节下留言探讨。\n本书为开源书籍,希望得到大家的协同共建,不断迭代丰富。如果有你的建议和 PR,它将会变得更好。 \npowered by Gitbook该文章修订时间:\n2022-05-23 09:59:32\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第一篇:项目布局/项目布局.html":{"url":"第一篇:项目布局/项目布局.html","title":"项目布局","keywords":"","body":"1.前言2.项目布局2.1 整体风格2.2 Go 代码目录/cmd/internal/pkg/vendor2.3 服务应用程序目录/api2.4 Web 应用程序目录/web2.5 通用应用目录/configs/init/scripts/build/deployments/test/README.md2.6 其他目录/docs/tools/examples/third_party/githooks/assets/website2.7 不应该拥有的目录/src3.小结参考文献1.前言\n不管是什么语言,开发什么项目,一个稍大的项目,必然要面临如何管理项目结构布局的问题,因为一个简洁清晰的布局是项目可读的关键。\n有些语言自身提供了目录结构规范,但对于较为年轻的 Golang,目前官方团队并未提供权威规范。不过不用担心,我们依然有一个规范可以参考,那就是业界推崇的 Standard Go Project Layout。\n2.项目布局\n2.1 整体风格\n你的项目结构布局看起来应该像下面这个样子。\n# Go 代码目录\n|--cmd 可执行文件目录\n|--internal 私有库代码(仅本项目使用)\n|--pkg 公有库代码(外部项目可以使用)\n|--vendor 外部依赖库\n\n# 服务应用程序目录\n|--api 服务对外接口\n\n# Web 应用程序目录\n|--web Web 应用程序的组件\n\n# 通用应用目录\n|--configs 配置信息\n|--init 初始化信息\n|--scripts 执行各种构建、安装、分析等操作的脚本\n|--build 打包和持续集成\n |-- package 构建依赖包\n |-- ci 持续集成配置与脚本\n|--deployments 部署相关\n|--test 测试相关\n|--README.md 项目说明\n\n# 其他目录\n|--docs 项目文档\n|--tools 项目工具\n|--examples 应用程序和公共库的示例\n|--third_party 外部辅助工具\n|--githooks Git 钩子\n|--assets 项目资源文件\n|--website 项目网站数据\n\n# 不应该拥有的目录\n|--src 源码目录\n\n2.2 Go 代码目录\n/cmd\n可执行文件目录。\n通常只包含一个简单的 main 函数,调用 /internal 和 /pkg 中的代码,作为项目的主应用目录。目录也可以包含多个可执行文件,子目录名称一般与可执行文件相对应(如:/cmd/myapp )。\n不要在该目录下放太多的代码,如果代码可以被其他项目导入使用,请放到 /pkg 目录下, 如果代码不可复用或者你不希望其他项目使用,请放到 /internal 目录下。\n/internal\n私有库代码(仅本项目使用)。\n这里放不希望被其他应用程序或者库导入的代码。注意:从 Go1.4 起,从编译器层面限制该目录不可被导出,而且不只是项目根目录下的 internal,所有名为 internal 的子目录都不能被导出。\n你还可以在 internal 目录内部增加一些代码结构来区分共享和非共享的。虽然它并不是必须的(尤其是小的项目),但是最好能从视觉上区分包的用途。 你实际的代码可以放在 /internal/app/myapp 中,而应用的共享代码可以放在 /internal/pkg/ 目录下。\n/pkg\n公有库代码(外部项目可以使用)。\n这里放希望被其他应用程序或者库导入的代码,所以在这里放东西之前要三思。\n含有 /pkg 目录的项目结构是一种常见的布局模式,但并不是所有人都接受它,一些 Go 社区的人并不推荐它。\n/vendor\n外部依赖库。\n如果手动管理依赖包可以将依赖包放到该目录,当然推荐使用依赖包管理工具 Go Modules 进行自动化管理。\n注意,1.11 开始,官方推荐使用新的依赖管理系统 Go Modules。从 1.13 以后,Go 还启用了模块代理功能(默认使用 https://proxy.golang.org 作为他们的模块代理服务器)。使用 Go Modules,我们并不需要 vendor 目录。\n2.3 服务应用程序目录\n/api\n服务对外接口。\n这里是服务对外接口的实现,定义接口时,我们应该遵循 OpenAPI Specification。\n2.4 Web 应用程序目录\n/web\n存放 Web 应用程序特定组件,如静态 Web 资源、服务器端模板和 SPA(Single Page Application)。\n2.5 通用应用目录\n/configs\n配置信息。\n如不同环境(测试、正式)的服务配置信息。\n/init\n初始化信息。\n系统初始化(systemd, upstart, sysv)和进程管理(runit, supervisord)配置。\n/scripts\n执行各种构建、安装、分析等操作的脚本。\n这些脚本帮助根目录下 Makefile(如果有的话)变得小而简单,例如 github/hashicorp/terraform/Makefile。\n/build\n打包和持续集成。\n将你的云( AMI )、容器( Docker )、操作系统( deb、rpm、pkg )包配置和脚本放在 /build/package 目录下。\n将你的 CI (travis、circle、drone)配置和脚本放在 /build/ci 目录下。\n/deployments\n部署相关。\n如 IaaS、PaaS、系统和容器编排部署配置和模板(docker-compose、kubernetes/helm、mesos、terraform、bosh)。注意,在一些存储库中(特别是使用 kubernetes 部署的应用程序),这个目录被称为 /deploy。\n/test\n测试相关。\n如放置测试工具和测试依赖数据。对于较大的项目,有一个数据子目录是有意义的。例如,你可以使用 /test/data 或 /test/testdata。请注意,如果你需要忽略目录中的内容,Go 还会忽略以“.”或“_”开头的目录或文件,因此在如何命名测试数据目录方面有更大的灵活性。\n/README.md\n项目说明。\nMarkdown 格式的说明文档,是用户了解一个项目最直观的入口。如果有需要,添加不同语言的 README 将更加人性化,如 简体中文 README_zh-CN.md。\n2.6 其他目录\n/docs\n项目文档。\n关于项目的设计文档,用户的使用文档等(除了 godoc 生成的文档之外)均可以放在该目录。\n/tools\n项目工具。\n项目配套工具,实现这些工具可以使用从 /pkg 和 /internal 导入代码。\n/examples\n应用程序和公共库的示例。\n丰富的示例将帮助用户更加便捷快速的了解上手一个项目,再加上 README,相得益彰。\n/third_party\n外部辅助工具。\n项目依赖的第三方工具,比如 Swagger UI。\n/githooks\nGit 钩子。\n使用 Git 钩子,可以帮忙我们在代码提交时完成一些检测,比如分支名称和 commit 信息是否符合规范。\n/assets\n项目资源文件。\n项目用到的相关资源文件,比如项目 Logo,README 中引用的图片等。\n/website\n项目网站数据。\n如果你不使用 Github 页面,则在这里放置项目网站数据。\n2.7 不应该拥有的目录\n/src\n源码目录。\n有些 Go 项目确实有一个 src 目,但这通常发生在开发人员有 Java 背景。不同类型的代码应该有自己的目录,而不是全部放到 src 下面,就像不应该拥有 comm 和 util 这样的目录,因为这些名称含义太泛了,违背了单一职责原则。\n3.小结\n这是 Go 应用程序项目的基本布局,是社区 Gopher 们努力的结果。此项目布局是通用的,建议并非强制,当然我们最好遵守,因为这能让我的项目布局看起来更加规范,易于交流和维护。\n如果发现此项目布局规范并不适用自己的项目,可在其基础上适当做出改变,不要泥古拘方。\n\n参考文献\nStandard Go Project Layout\nWikipedia List of ISO 639-1 codes\nOfficial ISO 639 list \npowered by Gitbook该文章修订时间:\n2022-05-18 14:53:51\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/1.格式化.html":{"url":"第二篇:代码风格/1.格式化.html","title":"1.格式化","keywords":"","body":"主体风格占位符主体风格\n\n代码必须用 gofmt 工具格式化。\n\ngofmt 使用制表符进行缩进,使用空白符进行对齐。\nIDE 在保存代码时可设置自动执行 gofmt,如 GoLand 的 Settings > Tools > File Watchers 中可勾选 go fmt 并指定作用范围。\n\n占位符\n\n通过%v打印错误信息时建议加冒号。\n\n// Bad\nlogger.Errorf(\"num %d, err %s\", num, err.Error())\n\n// Good\nlogger.Errorf(\"num:%d, err:%v\", num, err.Error())\n\n\n字符串占位符,如果输入数据来自外部,建议使用%q进行安全转义。\n格式化字符串中多个占位符之间要有空格。\n\nfmt.Printf(\"%v这里要空格%v\", a, b)\n\npowered by Gitbook该文章修订时间:\n2022-05-23 09:59:33\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/2.代码行.html":{"url":"第二篇:代码风格/2.代码行.html","title":"2.代码行","keywords":"","body":"行长度换行方式不必要的空行括号和空格行数行长度\n一行代码不要超过120列,超过的情况,使用合理的方法换行。\n例外场景:\n\nimport 模块语句\nstruct tag\n工具生成的代码\n\n换行方式\n采用惰性换行,换行前应尽可能占满当前行不留空位。\n// Bad\nfmt.Printf(\"%v %v %v %v %v %v %v %v %v %v %v %v %v %v\\n\",\n0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,89, 144, 233)\n\n// Good\nfmt.Printf(\"%v %v %v %v %v %v %v %v %v %v %v %v %v %v\\n\", 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,\n89, 144, 233)\n\n不必要的空行\n\n函数体第一行不要换行。\n\n// Bad\nfunc foo() {\n\n // func body\n}\n\n// Good\nfunc foo() {\n // func body\n}\n\n\n函数调用和对调用结果的处理,是紧密相连的,不能加空行。\n\n// Bad\nres, err := foo()\n\nif err != nil || res.Ret != 0 {\n return\n}\n\n// Good\nres, err := foo()\nif err != nil || res.Ret != 0 {\n return\n}\n\n\nreturn 语句前不要换行。\n\n// Bad\nfunc foo() {\n // func body\n\n return\n}\n\n// Good\nfunc foo() {\n // func body\n return\n}\n\n括号和空格\n\n遵循 gofmt 的逻辑。\n运算符和操作数之间要留空格。\n作为输入参数或者数组下标时,运算符和操作数之间不需要空格,紧凑展示。\n\nvar i int = 1 + 2 // 运算符和操作数之间要留空格\nv := []float64{1.0, 2.0, 3.0}[i-i] // i-i 作为下标不留空格\nfmt.Printf(\"%f\\n\", v+1) // v+1 作为入参不要留空格\n\n\n不要添加没必要的括号。\n\n// Bad\nif foo && (int(bar) > 0) {\n // ...\n}\n\n// Good\nif foo && int(bar) > 0 {\n // ...\n}\n\n行数\n\n函数长度不能超过 80 行。\n文件长度不能超过 800 行。 \n\npowered by Gitbook该文章修订时间:\n2022-05-23 09:59:33\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/3.字符串.html":{"url":"第二篇:代码风格/3.字符串.html","title":"3.字符串","keywords":"","body":"\n字符串字面量\n\nGo 支持使用原始字符串字面值,可以使用反引号来表示原生字符串。在需要转义的场景下,我们应该尽量使用使用反引号表示字符串,避免转义。\n// Bad\nwantError := \"unknown name:\\\"test\\\"\"\n\n// Good\nwantError := `unknown error:\"test\"`\n\n\n不要使用字符串表示 list 和 map 结构。\n\n// Bad\nvar Receivers = \"tom,jerry,spike\"\n\n// Good\nvar Receivers = []string{\"tom\",\"jerry\",\"spike\"}\n\n\n字符串拼接\n\n行内字符串拼接时,出于性能的考虑,待拼接字符串数量较少(fmt.Sprintf()。\n// Bad\nstr := fmt.Sprintf(\"rsp code is %v\", code)\nstr := \"rsp code is \" + code \" and msg is\" + msg\n\n// Good\nstr := \"rsp code is \" + code\nstr := fmt.Sprintf(\"rsp code is %v and msg is %v\", code, msg)\n\npowered by Gitbook该文章修订时间:\n2022-05-23 09:59:33\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/4.依赖管理.html":{"url":"第二篇:代码风格/4.依赖管理.html","title":"4.依赖管理","keywords":"","body":"依赖规范import 规范依赖规范\n\ngo1.11 以上必须使用 go modules 模式。go mod init git.code.oa.com/group/myrepo\n\n\n使用 go modules 作为依赖管理的项目不要提交 vendor 目录。\n使用 go modules 管理依赖的项目, go.sum文件必须提交,不要添加到.gitignore规则中。\n\nimport 规范\n\n使用 goimports 工具自动格式化引入的包名,import 规范原则上以 goimports 规则为准。\n\ngoimports 会自动添加依赖的包,并移除未引用的包。把依赖包按字母序升序排列,并对包进行分组管理。通过空行隔开,默认分为标准库包和非标准库包(第三方包和内部包)。\n\n导入的包按照先后顺序应该分为三组:\n标准包\n外部包\n内部包\n\n\n\n带域名的包名都属于外部包,如 github.com/xxx/xxx。内部包是指不能被外部 import 的包。\n// Bad\nimport (\n \"fmt\"\n \"os\"\n \"go.uber.org/atomic\"\n \"golang.org/x/sync/errgroup\"\n \"myproject/models\"\n \"myproject/controller\"\n)\n\n// Good\nimport (\n \"encoding/json\"\n \"strings\"\n\n \"go.uber.org/atomic\"\n \"golang.org/x/sync/errgroup\"\n\n \"myproject/models\"\n \"myproject/controller\"\n)\n\n\n不要使用相对路径导入内部包,应该使用完整的路径引入包。\n\n// Bad\nimport (\n \"../net\"\n)\n\n// Good\nimport (\n \"xxxx.com/proj/net\"\n)\n\n\n必要时给包起个别名\n\n包名和 git 路径名不一致时,或者多个相同包名冲突时,使用别名代替会有更好的可读性。\n// Bad\nimport (\n elastic \"github.com/olivere/elastic/v7\"\n)\n\n// Good\nimport (\n elastic \"github.com/olivere/elastic/v7\"\n)\n\n\n通用的功能包,应该放在 public 目录下,而不是具体业务目录下。\n\n// Bad\nimport \"github.com/xxxxxxxx/XXXServer/pkg/formatlog\"\n\n// Good\nimport \"github.com/xxxxxxxx/utils/formatlog\"\n\n\nimport . 只能用于测试文件,且必须是为了解决循环依赖,才能使用。\n\npackage foo_test\n\nimport (\n \"bar/testutil\" // also imports \"foo\"\n . \"foo\"\n)\n\n在这种情况下,测试文件不能在包 foo 中,因为它使用 bar/testutil,后者导入 foo。所以我们使用import .形式导入包 foo,让测试文件假装是包 foo 的一部分,尽管它不是。除了这一种情况,不要使用import .,因为它使程序难以阅读,比如使用 Baz 这样的标识符,不知道其是顶级标识符还是导入包中的顶级标识符。\n\n引入第三方包要慎重。\n\n如引入 Github 上的包要确认活跃度,不知名的包可能会被下架或出现不兼容的版本升级情况,必要情况下可 fork 一份。\n// 该包已经 404 了。\ngithub.com/astaxie/beego/orm\n\npowered by Gitbook该文章修订时间:\n2022-05-23 09:59:33\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/5.初始化.html":{"url":"第二篇:代码风格/5.初始化.html","title":"5.初始化","keywords":"","body":"初始化 struct初始化 map初始化 slice申明变量避免使用 init()初始化 struct\n\n使用字段名初始化结构体。\n\n// Bad\nk := User{\"John\", \"Doe\", true}\n\n// Good\nk := User{\n FirstName: \"John\",\n LastName: \"Doe\",\n Admin: true,\n}\n\n例外:如果有 3 个或更少的字段,则可以在测试表中省略字段名称。\ntests := []struct{\n op Operation\n want string\n}{\n {Add, \"add\"},\n {Subtract, \"subtract\"},\n}\n\n\n省略结构中的零值字段。\n\n// Bad\nuser := User{\n FirstName: \"John\",\n LastName: \"Doe\",\n MiddleName: \"\",\n Admin: false,\n}\n\n// Good\nuser := User{\n FirstName: \"John\",\n LastName: \"Doe\",\n}\n\n例外:在字段名提供有意义上下文的地方可以显示指定零值。如表驱动单元测试中的测试用例,即使字段为零值,限制指定零值,通过字段名可清晰地表达用例的含义。\ntests := []struct{\n give string\n want int\n}{\n {give: \"0\", want: 0},\n // ...\n}\n\n\n声明零值结构使用关键字 var。\n\n如果在声明中省略了结构的所有字段,请使用 var 声明结构,因为这样更加简洁,其各个字段值为字段类型对应的零值。\n// Bad\nuser := User{}\n\n// Good\nvar user User\n\n\n初始化结构指针变量使用字面量\n\n初始化结构指针变量时,请使用&T{}代替new(T),可以与结构体初始化在代码风格上保持一致。\n// Bad\nsval := T{Name: \"foo\"}\n\n// inconsistent\nsptr := new(T)\nsptr.Name = \"bar\"\n\n// Good\nsval := T{Name: \"foo\"}\n\nsptr := &T{Name: \"bar\"}\n\n初始化 map\n初始化 map 优先使用 make() 函数而不是字面量,因为这样看起来更容易和申明区分开来。\n// Bad\nvar (\n // m1 读写安全\n // m2 在写入时会 panic\n m1 = map[T1]T2{}\n m2 map[T1]T2\n)\n// 声明和初始化在视觉上很相似\n\n// Good\nvar (\n // m1 读写安全\n // m2 在写入时会 panic\n m1 = make(map[T1]T2)\n m2 map[T1]T2\n)\n// 声明和初始化在视觉上是不同的\n\n尽可能地在初始化时提供 map 容量大小。\n例外:如果 map 包含固定的元素列表,则使用字面量初始化 map,这样可以在初始化时指定元素。\n// Bad\nm := make(map[T1]T2, 3)\nm[k1] = v1\nm[k2] = v2\nm[k3] = v3\n\n// Good\nm := map[T1]T2{\n k1: v1,\n k2: v2,\n k3: v3,\n}\n\n初始化 slice\n\n非零值 slice 使用make()初始化,并指定容量。\n\n// Bad\nnums := []int{}\n\n// Good\nnums := make([]int, 0, CAP)\n\n\n空切片使用 var 声明\n\n不管是全局切片还是局部切片,使用 var 申明 nil 切片,代码会更加简洁清晰。\n// Bad\nfunc foo() {\n // 长度为 0 的非 nil 切片\n nums := []int{}\n}\n\n// Good\nfunc foo() {\n // nil 切片\n var nums []int\n}\n\n\nnil 是一个有效的 slice。\n\nnil 是一个有效的长度为 0 的 slice,这意味着,\n(1)您不应明确返回长度为零的切片。应该返回nil 来代替。\n// Bad\nif x == \"\" {\n return []int{}\n}\n\n// Good\nif x == \"\" {\n return nil\n}\n\n(2)要检查切片是否为空,请始终使用 len(s) == 0 而非 nil。\n// Bad\nfunc isEmpty(s []string) bool {\n return s == nil\n}\n\n// Good\nfunc isEmpty(s []string) bool {\n return len(s) == 0\n}\n\n(3)零值切片(用var声明的切片)可立即使用,无需调用 make() 创建。\n// Bad\nnums := []int{}\n// or, nums := make([]int)\n\nif add1 {\n nums = append(nums, 1)\n}\n\nif add2 {\n nums = append(nums, 2)\n}\n\n// Good\nvar nums []int\n\nif add1 {\n nums = append(nums, 1)\n}\nif add2 {\n nums = append(nums, 2)\n}\n\n记住,虽然 nil 切片是有效的切片,但它不等于长度为 0 的切片(一个为 nil,另一个不是),并且在不同的情况下(例如序列化),这两个切片的处理方式可能不同。\n申明变量\n\n就近申明。\n\n变量申明的位置尽量靠近使用的地方。\n// Bad\nfunc foo(m map[string]interface{}) string {\n info, _ := m[\"key\"].(Info)\n ...\n return handle(info)\n}\n\n// Good\nfunc foo(m map[string]interface{}) string {\n ...\n info, _ := m[\"key\"].(Info)\n return handle(info)\n}\n\n\n相似的声明放在一组。\n\n对于变量、常量的声明,相似的声明应该放在一组。类型的定义同样适用。\n// Bad\nconst a = 1\nconst b = 2\n\nvar a = 1\nvar b = 2\n\ntype Area float64\ntype Volume float64\n\n// Good\nconst (\n a = 1\n b = 2\n)\n\nvar (\n a = 1\n b = 2\n)\n\ntype (\n Area float64\n Volume float64\n)\n\n仅将相关的声明放在一组。不要将不相关的声明放在一组。\n// Bad\ntype Operation int\n\nconst (\n Add Operation = iota + 1\n Subtract\n Multiply\n EnvVar = \"MY_ENV\"\n)\n\n// Good\ntype Operation int\n\nconst (\n Add Operation = iota + 1\n Subtract\n Multiply\n)\n\nconst EnvVar = \"MY_ENV\"\n\n另外,分组使用的位置没有限制,我们也可以在函数内部使用它们。\n// Bad\nfunc f() string {\n red := color.New(0xff0000)\n green := color.New(0x00ff00)\n blue := color.New(0x0000ff)\n ...\n}\n\n// Good\nfunc f() string {\n var (\n red = color.New(0xff0000)\n green = color.New(0x00ff00)\n blue = color.New(0x0000ff)\n )\n ...\n}\n\n\n全局变量申明使用 var 关键字并省略类型。\n\n全局变量使用 var 关键字申明,一般情况下其类型与表达式的类型一致,这种情况下可省略其类型。\n// Bad\nvar s string = F()\n\nfunc F() string { return \"A\" }\n\n// Good\n// 由于 F 已经明确了返回一个字符串类型,因此我们没有必要显式指定类型。\nvar s = F()\n\nfunc F() string { return \"A\" }\n\n如果表达式的类型与所需的类型不完全匹配,请指定类型。\ntype myError struct{}\n\nfunc (myError) Error() string { return \"error\" }\n\nfunc F() myError { return myError{} }\n\n// F 返回一个 myError 类型的实例,但是我们要 error 类型。\nvar _e error = F()\n\n\n局部变量使用短变量声明形式(:=)。\n\n// Bad\nfunc foo() {\n var s = \"foo\"\n var i int64 // 虽然默认为 0,但不够直观\n ...\n}\n\n// Good\nfunc foo() {\n s := \"foo\"\n i := in64(0) // 显示指明 0,更加直观\n ...\n}\n\n例外,如果是相似的一组变量,请使用 var 声明到一组。\n// Bad\nfunc foo() {\n s1 := \"foo\"\n s2 := \"bar\"\n ...\n}\n\n// Good\nfunc foo() {\n var (\n s1 = \"foo\"\n s2 = \"bar\"\n )\n ...\n}\n\n\n如果全局变量仅在单个函数内使用,则应该定义为局部变量。\n\n避免使用 init()\n尽可能避免使用 init(),当 init() 不可避免时,init() 应该做到:\n(1)无论程序环境或调用如何,行为都必须是完全确定的;\n(2)避免依赖其他 init() 函数的顺序或副作用。虽然 init() 顺序是明确的,但代码可以更改, 因此 init() 函数之间的关系可能会使代码变得脆弱和容易出错;\n(3)避免访问或操作全局变量和环境状态,如机器信息、环境变量、工作目录、程序参数/输入等;\n(4)避免 I/O,包括文件系统、网络和系统调用。\n不能满足这些要求的代码可能要在 main() 函数中被调用(或程序生命周期中的其他地方),或作为 main() 函数本身的一部分。特别是打算给其他程序使用的库应该特别注意代码行为的完全确定性, 而不是执行“init magic”。\n// Bad\ntype Foo struct {\n // ...\n}\nvar _defaultFoo Foo\nfunc init() {\n _defaultFoo = Foo{\n // ...\n }\n}\n\n// Good\nvar _defaultFoo = Foo{\n // ...\n}\n// 或者为了更好的可测试性\nvar _defaultFoo = defaultFoo()\nfunc defaultFoo() Foo {\n return Foo{\n // ...\n }\n}\n\n// Bad\ntype Config struct {\n // ...\n}\nvar _config Config\nfunc init() {\n // Bad: 基于当前目录\n cwd, _ := os.Getwd()\n // Bad: I/O\n raw, _ := ioutil.ReadFile(\n path.Join(cwd, \"config\", \"config.yaml\"),\n )\n yaml.Unmarshal(raw, &_config)\n}\n\n// Good\ntype Config struct {\n // ...\n}\nfunc loadConfig() Config {\n cwd, err := os.Getwd()\n // handle err\n raw, err := ioutil.ReadFile(\n path.Join(cwd, \"config\", \"config.yaml\"),\n )\n // handle err\n var config Config\n yaml.Unmarshal(raw, &config)\n return config\n}\n\n凡事无绝对,某些情况下,init() 可能更可取或是必要的:\n(1)不能表示为单个赋值的复杂表达式;\n(2)可插入的钩子,如 database/sql、编码类型注册表等;\n(3)对 Google Cloud Functions 和其他形式的确定性预计算的优化。 \npowered by Gitbook该文章修订时间:\n2022-05-23 09:59:33\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/6.错误处理.html":{"url":"第二篇:代码风格/6.错误处理.html","title":"6.错误处理","keywords":"","body":"error 处理panic 处理recover 处理类型断言error 处理\n\n显示处理 error。\n\n如果 error 作为函数的值返回,必须对 error 进行处理,或使用空白标识符忽略。对于defer xx.Close()可以不用显式处理。\n\nerror 作为函数返回值且有多个返回值的时候,error 必须是最后一个参数。\n\n// Bad\nfunc do() (error, int) {\n}\n\n// Good\nfunc do() (int, error) {\n}\n\n\n采用独立的错误流进行处理。\n```go\n// Bad\nif err != nil {\n // handle error\n} else {\n // normal code\n}\n\n// Good\nif err != nil {\n // handle error\n return // or continue, etc.\n}\n// normal code\n- Fail Fast 原则。\n\n如果出现失败应该立即返回error,如果继续处理,则属于特殊情况需要添加注释。\n\n- 如果函数返回值需用于初始化其他变量,则采用下面的方式。\n\n```go\nx, err := f()\nif err != nil {\n // error handling\n return // or continue, etc.\n}\n// use x\n\n错误判断独立处理,不与其他变量组合判断。\n\n一个可能引发的问题就是 err 如果为 nil,但是满足其他逻辑进入到 if 块内,读取 err 值将引发 panic。\n// Bad\nx, y, err := f()\nif err != nil || y == nil {\n return err // 当y与err都为空时,函数的调用者会出现错误的调用逻辑\n}\n\n// Good\nx, y, err := f()\nif err != nil {\n return err\n}\nif y == nil {\n return fmt.Errorf(\"some error\")\n}\n\n\n生成带参数的 error 使用 fmt.Errorf。\n```go\n// Bad\nerrors.New(fmt.Sprintf(\"module xxx: %v\",err))\n\n// Good\nfmt.Errorf(\"module xxx: %v\", err)\n- 不要包装系统调用错误,并给出一些没意义的附加信息。\n\n```go\n// Bad\nerr := exe.Run()\nif err != nil {\n return fmt.Errorf(\"run error %s\", err.Error())\n}\n\n// Good\nreturn exe.Run()\npanic 处理\n\n不要随便 panic。\n\n在业务逻辑处理中禁止使用 panic。因为 panic 是级联失败(cascading failures)的主要根源。如果发生错误,该函数应该返回错误,让调用方决定如何处理它。\n// Bad\nfunc run(args []string) {\n if len(args) == 0 {\n panic(\"an argument is required\")\n }\n // ...\n}\n\nfunc main() {\n run(os.Args[1:])\n}\n\n// Good\nfunc run(args []string) error {\n if len(args) == 0 {\n return errors.New(\"an argument is required\")\n }\n // ...\n return nil\n}\n\nfunc main() {\n if err := run(os.Args[1:]); err != nil {\n fmt.Fprintln(os.Stderr, err)\n os.Exit(1)\n }\n}\n\npanic/recover 不是错误处理的合适策略,仅当发生不可恢复的异常(如 nil 引用)时,才可以 panic。\n在 main 包中程序初始化是一个例外,如程序启动时,文件无法打开或数据库无法连接导致程序无法正常运行可使用 panic。\n对于其它的包,可导出的接口也不能有 panic。\n\n在 main 包中使用 log.Fatal 或 log.Fatalf 结束程序而不是 panic。\n\n如果 main 中需要使用 panic,建议使用 log.Fatal 或 log.Fatalf 来取代 panic,因为这样可以记录错误的同时结束程序,方便排查问题。\n\npanic 只能在当前 Goroutine 被捕获。\n\npanic 捕获最晚要在当前 Goroutine 最顶层将其捕获,在其他 Goroutine 中无法捕获当前 Goroutine 的 panic。每个自行启动的 Goroutine,必须在入口处捕获 panic,并打印详细堆栈信息或进行其它处理。\n下面是一个反面示例,其他 Goroutine 中无法捕获当前 Goroutine 的 panic。\npackage main\n\nimport (\n \"fmt\"\n \"time\"\n)\n\nfunc main() {\n defer func() {\n if err := recover(); err != nil {\n fmt.Println(err)\n }\n }()\n go func() {\n fmt.Println(\"======begin work======\")\n panic(\"nil pointer exception\")\n }()\n time.Sleep(1 * time.Second)\n fmt.Println(\"======after work======\")\n}\n\n程序将意外终止并输出:\n======begin work======\npanic: nil pointer exception\n\ngoroutine 6 [running]:\nmain.main.func2()\n /Users/dablelv/work/code/test/main.go:16 +0x65\ncreated by main.main\n /Users/dablelv/work/code/test/main.go:14 +0x48\nrecover 处理\n\nrecover 用于捕获 runtime 的异常,禁止滥用 recover。\nrecover 只有在 defer 中调用才会生效。\n\n必须在 defer 中使用,一般用来捕获程序运行期间发生异常抛出的 panic 或程序主动抛出的 panic。\npackage main\n\nimport (\n \"log\"\n)\n\nfunc main() {\n defer func() {\n if err := recover(); err != nil {\n // do something or record log\n log.Println(\"exec panic error: \", err)\n // log.Println(debug.Stack())\n }\n }()\n\n getOne()\n\n panic(44) //手动抛出 panic\n}\n\n// getOne 模拟 slice 越界运行时抛出的 panic。\nfunc getOne() {\n defer func() {\n if err := recover(); err != nil {\n // do something or record log\n log.Println(\"exec panic error: \", err)\n // log.Println(debug.Stack())\n }\n }()\n\n var arr = []string{\"a\", \"b\", \"c\"}\n log.Println(\"hello,\", arr[4])\n}\n\n运行结果:\n2022/03/27 10:48:42 exec panic error: runtime error: index out of range [4] with length 3\n2022/03/27 10:48:42 exec panic error: 44\n类型断言\n\n类型断言使用 comma ok 式\n\n类型断言的单个返回值形式如果断言失败将产生 panic。因此,请始终使用 comma ok 式。如果不关心是否成功,ok 可显示使用空标识符(下划线)忽略。\n// Bad\nt := i.(string)\n\n// Good\nt, ok := i.(string)\nif !ok {\n // 优雅地处理错误。\n}\n\n// 如果不关心是否成功,可显示忽略 ok。\nt, _ := i.(string)\n\npowered by Gitbook该文章修订时间:\n2022-05-23 09:59:33\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/7.注释.html":{"url":"第二篇:代码风格/7.注释.html","title":"7.注释","keywords":"","body":"通用包注释函数注释结构体注释变量和常量注释类型注释接口注释在编码阶段同步写好类型、变量、函数、包注释,注释可以通过godoc导出生成文档。\n程序中每一个被导出的(大写的)名字,都应该有一个文档注释。\n所有注释掉的代码在提交 Code Review 前都应该被删除,除非添加注释讲解为什么不删除, 并且标明后续处理建议(如删除计划)。\n通用\n\n不要用注释删除代码。\n// 后面要有空格。\n中英文之间应该有空格。\n特殊实现需要注释。\n注释结束添加点或句号,参考标准库源码注释。\n\n包注释\n\n每个包都应该有一个包注释。\n包如果有多个 go 文件,只需要出现在一个 go 文件中(一般是和包同名的文件)即可。\n格式为// Package 包名 包信息描述。\n\n// Package math provides basic constants and mathematical functions.\npackage math\n\n// 或者\n\n/*\nPackage template implements data-driven templates for generating textual\noutput such as HTML.\n....\n*/\npackage template\n\n函数注释\n\n导出的函数和方法(结构体或接口下的函数称为方法)都必须有注释。\n\n注释描述函数或方法功能、调用方等信息。格式为:\"// 函数名 函数信息描述\"。\n注意,如果方法的接收器为不可导出类型,可以不注释,但需要质疑该方法可导出的必要性。\n// NewtAttrModel 是属性数据层操作类的工厂方法\nfunc NewAttrModel(ctx *common.Context) *AttrModel {\n // TODO\n}\n\n\n避免参数语义不明确。\n\n函数调用中意义不明确的实参可能会损害代码可读性。当参数名称的含义不明显时,请为参数添加 C 样式注释 (/* ... */)\n// Bad\n// func printInfo(name string, isLocal, done bool)\nprintInfo(\"foo\", true, true)\n\n// Good \n// func printInfo(name string, isLocal, done bool)\nprintInfo(\"foo\", true /* isLocal */, true /* done */)\n\n对于上面的示例代码,还有一种更好的处理方式是将上面的 bool 类型换成自定义类型。将来,该参数可以支持不仅仅局限于两个状态(true/false)。\ntype Region int\n\nconst (\n UnknownRegion Region = iota\n Local\n)\n\ntype Status int\n\nconst (\n StatusReady Status= iota + 1\n StatusDone\n // Maybe we will have a StatusInProgress in the future.\n)\n\nfunc printInfo(name string, region Region, status Status)\n\n\n非导出的函数,如果比较简单,不需要注释。\n解析函数应该注明解析字符串的范例,并明确不能处理的异常情况。\n\n结构体注释\n\n每个需要导出的自定义结构体或者接口都必须有注释说明。\n\n注释对结构进行简要介绍,放在结构体定义的前一行。格式为:\"// 结构体名 结构体信息描述\"。\n\n必要情况下字段给出注释。\n\n结构体内的可导出成员变量名,如果是个生僻词或意义不明确的词,必须要单独给出注释,放在成员变量的前一行或同一行的末尾。\n// User 用户结构定义了用户基础信息\ntype User struct {\n Name string\n Email string\n Demographic string // 族群\n}\n\n变量和常量注释\n\n每个需要导出的变量和常量都必须有注释说明。\n\n注释对变量和常量进行简要介绍,放在常量或变量定义的前一行。独行注释格式为:\"// 变量名 描述\",斜线后面紧跟一个空格。\n// FlagConfigFile 配置文件的命令行参数名。\nconst FlagConfigFile = \"--config\"\n\n// FullName 返回指定用户名的完整名称。\nvar FullName = func(username string) string {\n return fmt.Sprintf(\"fake-%s\", username)\n}\n\n\n大块变量或常量定义时的注释方式。\n\n块注释即在代码块前给出一个总的说明,然后每行变量或常量的末尾给出详细注释,这样看起来更加简洁。\n// 命令行参数。\nconst (\n FlagConfigFile1 = \"--config\" // 配置文件的命令行参数名 1。\n FlagConfigFile2 = \"--config\" // 配置文件的命令行参数名 2。\n FlagConfigFile3 = \"--config\" // 配置文件的命令行参数名 3。\n FlagConfigFile4 = \"--config\" // 配置文件的命令行参数名 4。\n)\n\n\n命名清晰的地方,不要添加无意义的注释。类型注释\n\n每个需要导出的类型定义(type definition)和类型别名(type aliases)都必须有注释说明。\n该注释对类型进行简要介绍,放在定义的前一行。\n格式为:\"// 类型名 描述\"。\n\n// StorageClass 存储类型\ntype StorageClass string\n\n// FakeTime 标准库时间的类型别名\ntype FakeTime = time.Time\n\n接口注释\n\n导出与非导出接口均需要有注释。\n需要描述谁,在什么场景下,如何使用接口。 \n\npowered by Gitbook该文章修订时间:\n2022-05-23 09:59:33\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/8.命名.html":{"url":"第二篇:代码风格/8.命名.html","title":"8.命名","keywords":"","body":"通用规则项目命名包命名文件命名函数命名结构体命名接口命名量命名通用常量命名方法接收器命名错误命名避免使用内置名称命名是代码规范中很重要的一部分,统一的命名规范有利于提高代码的可读性,好的命名仅仅通过命名就可以获取到足够多的信息。\n通用规则\n\n不要用宽泛、无意义的名字,如:\n\nutil\nhelper\ninfo\ncommon\n\n\n缩略语要么全小写,要么全大写。\n\n\n// Bad\nMd5\nUid\n\n// Good\nMD5\nmd5\nUID\nuid\n\n\n非缩略语则应该使用驼峰命名。\n不要使用2/4来表达英文 to/for。\n如无必要,不要起和包相同的名字。\n\n项目命名\n\n小写,如果有多个单词使用连字符分隔。\n\n// Bad\nGoEcharts\ngoecharts\ngoEcharts\n\n// Good\ngo-echarts\n\n包命名\n\n保持 package 的名字和目录一致。\n尽量采取有意义、简短的包名,尽量不要和标准库冲突。\n包名应该为小写单词,不要使用下划线或者混合大小写,使用多级目录来划分层级。\n简单明了的包命名,如:time、list、http。\n不用复数。如 net/url 而不是net/urls。\n包名谨慎使用缩写。当缩写是程序员广泛熟知的词时,可以使用缩写。例如:\nstrconv (string conversion)\nsyscall (system call)\nfmt (formatted I/O)\n\n\n不要使用大而全的无意义包名。\n\n如 util、common、misc、global。package 名字应该追求清晰且越来越收敛,符合‘单一职责’原则,而不是像common一样,什么都能往里面放,越来越膨胀,让依赖关系变得复杂,不利于阅读、复用、重构。注意,xxx/utils/encryption这样的包名是允许的。\n\n只有一个源文件的包,包名应该和文件名保持一致。\n不要轻易使用别名。\n\n更多可参考 Package names - The Go Blog 和 [Style guideline for Go packages]\n(https://rakyll.org/style-packages/)。\n文件命名\n\n采用有意义、简短的文件名。\n文件名应该采用小写,并且使用下划线分割各个单词。\n\n函数命名\n\n函数名必须遵循驼峰式,首字母根据访问控制决定使用大写或小写。\n代码生成工具自动生成的代码可排除此规则(如协议生成文件 xxx.pb.go,gotests 工具自动生成文件 xxx_test.go 里面的下划线)。\n函数应该以动词开头。\n\n// Bad\nfunc panicLinesParsing(){}\nfunc (f VerifyFlow) DataETL(ctx context.Context, datas []Data){}\n\n// Good\nfunc parsePanicLines(){}\nfunc (f VerifyFlow) ETLData(ctx context.Context, datas []Data){}\n\n结构体命名\n\n采用驼峰命名方式,首字母根据访问控制采用大写或者小写。\n结构体名应该是名词或名词短语,如 Customer、WikiPage、Account、AddressParser,它不应是动词。\n避免使用 Data、Info 这类意义太宽泛的结构体名。\n结构体的定义和初始化格式采用多行。\n\n// User 多行定义。\ntype User struct {\n Name string\n Email string\n}\n\n// 多行初始化。\nu := User{\n UserName: \"john\",\n Email: \"john@example.com\",\n}\n\n接口命名\n\n命名规则基本保持和结构体命名规则一致。\n单个函数的接口名以 er 作为后缀,如 Reader,Writer。\n\n// Reader 字节数组读取接口。\ntype Reader interface {\n // Read 读取整个给定的字节数据并返回读取的长度\n Read(p []byte) (n int, err error)\n}\n\n\n两个函数的接口名综合两个函数名。\n三个以上函数的接口名,类似于结构体名。\n\n// Car 小汽车结构申明。\ntype Car interface {\n // Start ...\n Start([]byte)\n // Stop ...\n Stop() error\n // Recover ...\n Recover()\n}\n\n量命名\n通用\n\n量名不应该以类型作为前缀/后缀。\n\n// map\nfilterHandlerMap -> opToHandler\n\n// slice\nuidSlice -> uids\n\n// array\nuidArray -> uids \n\n// 二维切片或数组。\n// 比如多个班级下的学生ID。\nuidSliceSlice -> classesUIDs\n\n\n量名应该是名词,进行时和过去式可以做形容词,成为量名的一部分。\n特有名词时,需遵循以下规则:\n如果变量为私有,且特有名词为首个单词,则使用小写,如 apiClient;\n其他情况都应该使用该名词原有的写法,如 APIClient、repoID、UserID;\n错误示例:UrlArray,应该写成 urlArray 或者 URLArray;\n详细的专有名词列表可参考这里。\n\n\n尽量不要用拼音命名。\n量名遵循驼峰式,根据是否导出决定首字母大小写。\n\n// 导出全局变量。\nvar AppVersion = \"1.0.0\"\n// 未导出全局变量。\nvar appVersion = \"1.0.0\"\n\n// 导出全局常量。\nconst AppVersion = \"1.0.0\"\n// 未导出全局常量。\nconst appVersion = \"1.0.0\"\n\n\n若量类型为 bool 类型,则名称应以 Has,Is,Can 或 Allow 等单词开头。\n私有量和局部量规范一致,均以小写字母开头。\n作用域较小的名字(局部变量/函数参数),尽量使用简短的名字。\n\n如 c 比 lineCount 要好,i 比 sliceIndex 要好。\n// Bad\nlineCount := getlineCount()\n for sliceIndex := range msgs {\n}\n\n// Good\nc := getlineCount()\n for i := range msgs {\n}\n\n\n作用域较大的名字(全局变量),不要使用缩写,要有明确的意义。\n\n如 lineCount 要比 c 好,sliceIndex 要比 i 好。\n// Bad\nvar c, i int\n\n// Good\nvar lineCount, sliceIndex int\n\n\n全局量中不要包含格式化字符,否则必然违反就近原则。\n\n// Bad\nvar (\n tGitHost = \"https://git.code.oa.com\"\n mrCommitsUri = \"/api/v3/projects/%s/merge_request/%s/commits\"\n)\n\n// Good\nfunc getMRCommitsUri() string {\n return fmt.Sprintf(\"/api/v3/projects/%s/merge_request/%s/commits\", \"foo\", \"bar\")\n}\n\n常量命名\n\n如果是枚举类型的常量,需要先创建相应类型。\n\n// Scheme 传输协议。\ntype Scheme string\n\n// 传输协议。\nconst (\n HTTP Scheme = \"http\" // HTTP 明文传输协议\n HTTPS Scheme = \"https\" // HTTPS 加密传输协议\n)\n\n方法接收器命名\n\n推荐以类名第一个英文首字母的小写作为接收器的命名。\n接收器的名称在函数超过 20 行的时候不要用单字符。\n命名不能采用 me,this,self 这类易混淆名称。\n\n错误命名\n对于存储为全局变量的错误值,根据是否导出,使用前缀 Err 或 err。\nvar (\n // 导出以下两个错误,以便此包的用户可以将它们与errors.Is 进行匹配。\n ErrBrokenLink = errors.New(\"link is broken\")\n ErrCouldNotOpen = errors.New(\"could not open\")\n\n // 这个错误没有被导出,因为我们不想让它成为我们公共 API 的一部分。\n errNotFound = errors.New(\"not found\")\n)\n\n对于自定义错误类型,请改用后缀 Error。\n// 这个错误被导出,以便这个包的用户可以将它与 errors.As 匹配。\ntype NotFoundError struct {\n File string\n}\n\nfunc (e *NotFoundError) Error() string {\n return fmt.Sprintf(\"file %q not found\", e.File)\n}\n\n// 这个错误没有被导出,因为我们不想让它成为公共 API 的一部分。\n// 但我们仍然可以在的包内将其和 errors.As 一起使用。\ntype resolveError struct {\n Path string\n}\n\nfunc (e *resolveError) Error() string {\n return fmt.Sprintf(\"resolve %q\", e.Path)\n}\n\n避免使用内置名称\nGo 语言规范 language specification 概述了几个内置的,不应在 Go 项目中使用的标识符 [predeclared identifiers]\n(https://golang.org/ref/spec#Predeclared_identifiers)。\nTypes:\n bool byte complex64 complex128 error float32 float64\n int int8 int16 int32 int64 rune string\n uint uint8 uint16 uint32 uint64 uintptr\n\nConstants:\n true false iota\n\nZero value:\n nil\n\nFunctions:\n append cap close complex copy delete imag len\n make new panic print println real recover\n在使用预先分配的标识符时编译器不会报告错误,但是诸如go vet之类的工具会正确地指出这些和其他情况下的隐式问题。\n// Bad\n// 作用域内隐式覆盖 error interface\nvar error string\n\nfunc handleErrorMessage(error string) {\n // 作用域隐藏内置 error\n}\n\ntype Foo struct {\n // 虽然这些使用内置标识符的自定义字段可以编译通过,但对 error 或 string 字符串的搜索存在二义性\n error error\n string string\n}\n\nfunc (f Foo) Error() error {\n // error 和 f.error 在视觉上是相似的\n return f.error\n}\n\nfunc (f Foo) String() string {\n // string and f.string 在视觉上是相似的\n return f.string\n}\n\n// Good\nvar errorMessage string\n\nfunc handleErrorMessage(msg string) {\n}\n\ntype Foo struct {\n // error 和 string 现在是明确的\n err error\n str string\n}\n\nfunc (f Foo) Error() error {\n return f.err\n}\n\nfunc (f Foo) String() string {\n return f.str\n}\n\npowered by Gitbook该文章修订时间:\n2022-05-23 09:59:33\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/9.流程控制.html":{"url":"第二篇:代码风格/9.流程控制.html","title":"9.流程控制","keywords":"","body":"ifforrangeswitchreturngoto程序退出方式if\n\n最小化变量作用域。\n\nif 接受初始化语句,尽可能缩小变量作用域。\n// Bad\nerr := file.Chmod(0664)\nif err != nil {\n return err\n}\n\n// Good\nif err := file.Chmod(0664); err != nil {\n return err\n}\n\n如果需要在 if 之外使用函数调用的结果,则不应尝试缩小范围。\n// Bad\nif data, err := ioutil.ReadFile(name); err == nil {\n err = cfg.Decode(data)\n if err != nil {\n return err\n }\n\n fmt.Println(cfg)\n return nil\n} else {\n return err\n}\n\n// Good\ndata, err := ioutil.ReadFile(name)\nif err != nil {\n return err\n}\n\nif err := cfg.Decode(data); err != nil {\n return err\n}\n\nfmt.Println(cfg)\nreturn nil\n\n\nif 对两个值进行判断时,被比较的值放在左边。\n\n// Bad\nif nil != err {\n // error handling\n}\nif 0 == errorCode {\n // do something\n}\n\n// Good\nif err != nil {\n // error handling\n} \nif errorCode == 0 {\n // do something\n}\n\n\nif 对于 bool 类型的变量,应直接进行真假判断。\n```go\nvar allowUserLogin bool\n// Bad\nif allowUserLogin == true {\n // do something\n}\nif allowUserLogin == false {\n // do something\n}\n\n// Good\nif allowUserLogin {\n // do something\n}\nif !allowUserLogin {\n // do something\n}\n- 不必要的 else。\n\n如果在 if 的两个分支中都设置变量,则可以将其替换为单个 if。\n```go\n// Bad\nvar a int\nif b {\n a = 100\n} else {\n a = 10\n}\n\n// Good\na := 10\nif b {\n a = 100\n}\n又如 if else 通常可以简写为 if return。\n// Bad\nfunc Foo(bar int) {\n if bar == 1 {\n // ...\n } else {\n // ...\n }\n}\n\n// Good\nfunc Foo() {\n if bar == 1 {\n // ...\n return\n }\n // ...\n}\n\n\n多个相似 if 用 switch 替换。\n```go\n// Bad\nfunc foo(key string) {\n if key == pathKey { ...\n }\n if key == urlKey { ...\n }\n}\n\n// Good\nfunc foo(key string) {\n switch key {\n case pathKey:\n ...\n case urlKey:\n ...\n }\n}\n- 使用 == \"\" 判断字符串是否为空,这样更加直观。\n```go\n// Bad\nif len(str) == 0 {\n ...\n}\n\n// Good\nif str == \"\" {\n ...\n}\n\n把简单的逻辑判断放前面,复杂的逻辑判断放后面。\n不要使用双重否定。\n判断条件较为复杂时,考虑封装成函数。\n使用了 else if 则需要以 else 结束。\n\n// Bad\nif foo == \"a\" {\n ...\n} else if foo == \"b\" {\n ...\n}\n\n// Good\nif foo == \"a\" {\n ...\n} else if foo == \"b\" {\n ...\n} else {\n // 需要有一个缺省处理逻辑\n}\n\nfor\n\n最小化变量作用域。\n\nfor 接受初始化语句,尽可能缩小变量作用域。\n// Bad\nsum := 0\ni := 0\nfor ; i \n\n循环变量的地址不要存储。\n\n循环变量的地址指向的是同一个变量,我们可以通过赋值给一个同名的变量,通过变量逃逸,来达到取不同地址的目的。\n// Bad\nfunc main() {\n ints := []int{1, 2, 3, 4, 5}\n for _, v := range ints {\n fmt.Println(&v) // 打印的是相同的地址\n }\n}\n\n// Good\nfunc main() {\n ints := []int{1, 2, 3, 4, 5}\n for _, v := range ints {\n v := v\n fmt.Println(&v) // 打印的是不同的地址\n }\n}\n\nrange\n\n如果只需要第一项(key),就丢弃第二项(value)。\n\nfor key := range m {\n if key.expired() {\n delete(m, key)\n }\n}\n\n\n如果只需要第二项,则把第一项置为空标识符(下划线)。\n\nsum := 0\nfor _, v := range array {\n sum += v\n}\n\nswitch\n\n必须要有 default。\n\nswitch os := runtime.GOOS; os {\n case \"darwin\":\n fmt.Println(\"MAC OS\")\n case \"linux\":\n fmt.Println(\"Linux.\")\n default:\n // freebsd, openbsd,\n // plan9, windows...\n fmt.Printf(\"%s.\\n\", os)\n}\n\nreturn\n\n尽早 return。\n\n一旦有错误发生,马上返回。\nf, err := os.Open(name)\nif err != nil {\n return err\n}\n\ndefer f.Close()\n\nd, err := f.Stat()\nif err != nil {\n return err\n}\n\ncodeUsing(f, d)\n\ngoto\n业务代码禁止使用 goto,其他框架或底层源码推荐尽量不用。\n程序退出方式\n\n使用os.Exit或者log.Fatal*退出程序,而不是panic。\n在 main() 中退出程序且只退出一次。\n\n仅在 main() 函数中调用os.Exit或log.Fatal*且只调用一次。如果有多个错误场景停止程序执行,请将该逻辑放在单独的函数并从中返回错误。 这会精简main()函数,并将所有关键业务逻辑放入一个单独的、可测试的函数中。\n// Bad\npackage main\nfunc main() {\n args := os.Args[1:]\n if len(args) != 1 {\n log.Fatal(\"missing file\")\n }\n name := args[0]\n f, err := os.Open(name)\n if err != nil {\n log.Fatal(err)\n }\n defer f.Close()\n // 如果我们调用 log.Fatal f.Close 将不会被执行\n b, err := ioutil.ReadAll(f)\n if err != nil {\n log.Fatal(err)\n }\n // ...\n}\n\n// Good\npackage main\nfunc main() {\n if err := run(); err != nil {\n log.Fatal(err)\n }\n}\nfunc run() error {\n args := os.Args[1:]\n if len(args) != 1 {\n return errors.New(\"missing file\")\n }\n name := args[0]\n f, err := os.Open(name)\n if err != nil {\n return err\n }\n defer f.Close()\n b, err := ioutil.ReadAll(f)\n if err != nil {\n return err\n }\n // ...\n}\n\n当程序的多个函数具有退出能力时会存在一些问题:\n(1)不明显的控制流:任何函数都可以退出程序,因此很难对控制流进行推理;\n(2)难以测试:退出程序的函数也将退出调用它的测试,这使得函数很难测试,并跳过了尚未被运行的其他代码;\n(3)跳过清理:当函数退出程序时,会跳过已经进入 defer 队列里的函数调用,这增加了跳过重要清理任务的风险。 \npowered by Gitbook该文章修订时间:\n2022-05-23 09:59:33\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/10.函数.html":{"url":"第二篇:代码风格/10.函数.html","title":"10.函数","keywords":"","body":"入参&返回值成员函数局部变量defer减少嵌套(圈复杂度)魔法字面量函数分组与顺序入参&返回值\n\n入参和返回值均以小写字母开头。\n入参和返回值个数均不能超过 5 个,如果超过,请封装成新的类型。\n尽量用值传递,非指针传递。\n类型为 map,slice,chan,interface 不要传递指针。\n返回值超过 3 个,或有相同类型的返回值,或者从上下文中不清楚返回值的含义,使用命名返回,其它情况不建议使用命名返回。\n\n// Parent1 ...\nfunc (n *Node) Parent1() *Node\n\n// Parent2 ...\nfunc (n *Node) Parent2() (*Node, error)\n\n// Location ...\nfunc (f *Foo) Location() (lat, long float64, err error)\n\n\n入参和返回值顺序根据关联性排在一起。\n尽量用 error 表示执行是否成功,而不是用 bool 或者 int。\n表示执行状态的返回值应该放在最后。\n\n// Bad\nret, info := ModifyUserInfo(user)\n\n// Good\ninfo, ret := ModifyUserInfo(user)\n\n\n不要返回多个用于控制流程的状态。\n\n// Bad\nisContinue, retCode := p.processUnity()\n\n// Good\nretCode := p.processUnity()\n\n\n如果传入的参数通常是固定的,考虑通过实现多个函数实现默认参数。\n\n如下面这个函数的第二个参数是没有必要的,大部分时候都是 +1,一个 IncCounter() 和一个 IncCounterN() 即可。可参考标准库包的 Split() 和 SplitN()。\nmetrics.IncrCounter(cntCacheMissKey, 1)\n\n\n批量查询函数返回值使用 slice 还是 map。\n\n有时后我们需要根据多个 ID 查询对应的值,可能会出现部分失败的情况,如某个 ID 不存在。如果不允许部分失败,使用 slice 返回值,如果允许部分失败使用 map。\n// GetUserInfoBatch 批量获取用户信息(需全部成功)。\nfunc GetUserInfoBatch(uids ...uint64) ([]UserInfo, error) {\n ...\n}\n\n// GetUserInfoBatch 批量获取用户信息(允许部分失败)。\nfunc GetUserInfoBatch(uids ...uint64) (map[uint64]UserInfo, error) {\n ...\n}\n\n成员函数\n\n如果方法不使用类的成员,应该实现为非成员函数。\n如果非成员函数要使用类的多个属性时,应该实现为成员函数。\n\n局部变量\n\n如果局部变量仅被使用一次,且不能起到解释逻辑的作用时,应该删除局部变量,直接内联。\n\n// Bad\nids := GetIDs()\nFoo(ids)\n\n// Good\nFoo(GetIDs())\n\ndefer\n\n当存在资源管理时,应紧跟 defer 函数进行资源的释放。\n判断是否有错误发生之后,再 defer 释放资源。\n\nresp, err := http.Get(url)\nif err != nil {\n return err\n}\n// 如果操作成功,再 defer Close()\ndefer resp.Body.Close()\n\n\n禁止在循环中使用 defer。\n\n// 不要这样使用\nfunc filterSomething(values []string) {\n for _, v := range values {\n fields, err := db.Query(v) // 示例,实际不要这么查询,防止 SQL 注入\n if err != nil {\n // ...\n }\n defer fields.Close()\n // 继续使用fields\n }\n}\n\n// 应当使用如下的方式:\nfunc filterSomething(values []string) {\n for _, v := range values {\n func() {\n fields, err := db.Query(v) // 示例,实际不要这么查询,防止 SQL 注入\n if err != nil {\n // ...\n }\n defer fields.Close()\n // 继续使用 fields\n }()\n }\n}\n\n\n正常逻辑不应该在 defer 中执行。\n\n减少嵌套(圈复杂度)\n\n嵌套深度不能超过4层。\n\n从函数名开始算第一层,当函数的嵌套深度超过4层,往往会导致圈复杂度过高,函数变得复杂不可读,我们可以通过拆分函数的方式来减少嵌套深度。\n// AddArea 添加成功或出错。\nfunc (s *BookingService) AddArea(areas ...string) error {\n s.Lock()\n defer s.Unlock()\n\n for _, area := range areas {\n for _, has := range s.areas {\n if area == has {\n return srverr.ErrAreaConflict\n }\n }\n s.areas = append(s.areas, area)\n s.areaOrders[area] = new(order.AreaOrder)\n }\n return nil\n}\n\n// 建议调整为这样:\n\n// AddArea 添加成功或出错。\nfunc (s *BookingService) AddArea(areas ...string) error {\n s.Lock()\n defer s.Unlock()\n\n for _, area := range areas {\n if s.HasArea(area) {\n return srverr.ErrAreaConflict\n }\n s.areas = append(s.areas, area)\n s.areaOrders[area] = new(order.AreaOrder)\n }\n return nil\n}\n\n// HasArea ...\nfunc (s *BookingService) HasArea(area string) bool {\n for _, has := range s.areas {\n if area == has {\n return true\n }\n }\n return false\n}\n\n\n单函数圈复杂度最大值 \n条件不满足或出现错误应尽早返回。\n\n代码也可以优先处理条件不满足或错误的情况,尽早返回或继续循环来减少嵌套。\n// Bad\nfor _, v := range data {\n if v.F1 == 1 {\n v = process(v)\n if err := v.Call(); err == nil {\n v.Send()\n } else {\n return err\n }\n } else {\n log.Printf(\"Invalid v: %v\", v)\n }\n}\n\n// Good\nfor _, v := range data {\n if v.F1 != 1 {\n log.Printf(\"Invalid v: %v\", v)\n continue\n }\n\n v = process(v)\n if err := v.Call(); err != nil {\n return err\n }\n v.Send()\n}\n\n魔法字面量\n\n除了 0 和 1,不要使用魔法数字。\n\n// Bad\nfunc getArea(r float64) float64 {\n return 3.14 * r * r\n}\nfunc getLength(r float64) float64 {\n return 3.14 * 2 * r\n}\n\n// Good\n// PI 圆周率\nconst PI = 3.14\n\nfunc getArea(r float64) float64 {\n return PI * r * r\n}\n\nfunc getLength(r float64) float64 {\n return PI * 2 * r\n}\n\n\n如果字符串字面量出现 >=2 次,则禁止使用,用一个有名称的常量代替,可读性更好。\n\n// Bad\nrsp, err := http.Post(url, \"application/json\", bytes.NewBuffer([]byte(req)))\n\n// Good\nconst JsonContentType = \"application/json\"\nrsp, err := http.Post(url, \"application/json\", bytes.NewBuffer([]byte(req)))\n\n函数分组与顺序\n\n函数应该放在 struct, const, var的后面。\n构造函数应该放在其他函数之前,如newXYZ()/NewXYZ()。\n导出的函数应该放在非导出函数前面\n同一文件中的函数应按接收者分组。\n由于函数是按接收者分组的,因此普通工具函数应在文件末尾出现。\n函数应按粗略的调用顺序排序。\n\n按照上面的规则,下面给出好坏文件内容布局示例。\n// Bad\nfunc (s *something) Cost() {\n return calcCost(s.weights)\n}\n\ntype something struct{ ... }\n\nfunc calcCost(n []int) int {...}\n\nfunc (s *something) Stop() {...}\n\nfunc newSomething() *something {\n return &something{}\n}\n\n// Good\ntype something struct{ ... }\n\nfunc newSomething() *something {\n return &something{}\n}\n\nfunc (s *something) Cost() {\n return calcCost(s.weights)\n}\n\nfunc (s *something) Stop() {...}\n\nfunc calcCost(n []int) int {...}\n\npowered by Gitbook该文章修订时间:\n2022-05-23 09:59:33\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/11.单元测试.html":{"url":"第二篇:代码风格/11.单元测试.html","title":"11.单元测试","keywords":"","body":"\n单元测试文件名命名规范为 example_test.go。\n测试用例的函数名称必须以 Test 开头,例如 TestExample。\n单测文件行数限制是普通文件的 2 倍(1600 行)。单测函数行数限制也是普通函数的2倍(160行)。圈复杂度、列数限制、 import 分组等其他规范细节和普通文件保持一致。\n由于单测文件内的函数都是不对外的,所有可导出函数可以没有注释,但是结构体定义时尽量不要导出。\n每个重要的可导出函数都要首先编写测试用例,测试用例和正规代码一起提交方便进行回归测试。\n表驱动测试.\n\n使用表驱动的方式编写用例,代码看上去会更简洁。\n// Bad\n// func TestSplitHostPort(t *testing.T)\n\nhost, port, err := net.SplitHostPort(\"192.0.2.0:8000\")\nrequire.NoError(t, err)\nassert.Equal(t, \"192.0.2.0\", host)\nassert.Equal(t, \"8000\", port)\n\nhost, port, err = net.SplitHostPort(\"192.0.2.0:http\")\nrequire.NoError(t, err)\nassert.Equal(t, \"192.0.2.0\", host)\nassert.Equal(t, \"http\", port)\n\nhost, port, err = net.SplitHostPort(\":8000\")\nrequire.NoError(t, err)\nassert.Equal(t, \"\", host)\nassert.Equal(t, \"8000\", port)\n\nhost, port, err = net.SplitHostPort(\"1:8\")\nrequire.NoError(t, err)\nassert.Equal(t, \"1\", host)\nassert.Equal(t, \"8\", port)\n\n// Good\n// func TestSplitHostPort(t *testing.T)\n\ntests := []struct{\n give string\n wantHost string\n wantPort string\n}{\n {\n give: \"192.0.2.0:8000\",\n wantHost: \"192.0.2.0\",\n wantPort: \"8000\",\n },\n {\n give: \"192.0.2.0:http\",\n wantHost: \"192.0.2.0\",\n wantPort: \"http\",\n },\n {\n give: \":8000\",\n wantHost: \"\",\n wantPort: \"8000\",\n },\n {\n give: \"1:8\",\n wantHost: \"1\",\n wantPort: \"8\",\n },\n}\n\nfor _, tt := range tests {\n t.Run(tt.give, func(t *testing.T) {\n host, port, err := net.SplitHostPort(tt.give)\n require.NoError(t, err)\n assert.Equal(t, tt.wantHost, host)\n assert.Equal(t, tt.wantPort, port)\n })\n}\n\npowered by Gitbook该文章修订时间:\n2022-05-07 19:01:50\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第二篇:代码风格/12.杂项.html":{"url":"第二篇:代码风格/12.杂项.html","title":"12.杂项","keywords":"","body":"1.基本类型偏执通用场景结构体2.单一职责包&文件函数3.goroutine4.应用服务5.常用工具1.基本类型偏执\n有时候你会看到某个类里有很多基本类型字段,但是你隐约地能区分出某些字段好像应该在一起,如手机号和带区号的电话号码、描述某个日期范围的开始日期和结束日期,它们应该有一个真实的载体,如联系方式类和时间范围类)\n,而不应全部零散放在一个大类型中。\n通用场景\n\n复杂的执行/错误信息,需要定义结构体保存。\n出现状态/类型等字眼时,需要使用枚举。\n时间类型尽量使用内置定义,如 time.Second,不要使用 int。\n\n结构体\n\n一个文件中出现多个结构体时,需要注意观察是否有重复的成员。\n一个结构体中,成员较多,且多个成员有明显关联关系,需要封装新的结构体。\n意义不明的成员变量,应该定义类型描述作用。\n\n2.单一职责\n包&文件\n\n需要判断当前文件是否应该归属于当前包,主要以职责进行判断。\n导出的函数/变量的职责必须与包&文件职责高度一致。\n除了包的主逻辑文件中内容允许导出,包内的辅助函数都应该是非导出的。\n\n函数\n\n一个函数只负责一个职责。\n配置文件的读取,和对象初始化应该分开,不要让对象自己根据配置文件初始化,保证构造函数足够简单\n解析、校验、计算的逻辑应该进行分离\n读、写、计算的逻辑应该进行分离\nrpc、db 相关操作需要独立封装\n\n\n一个函数内不应该混杂多个实现细节,需要将独立的逻辑封装成函数。\n一次循环尽量只做一件事,不用担心多次循环。\n同一层级的逻辑细节不要拆分。\n\n3.goroutine\n\n启动的 goroutine 最好有 recover。\n\n因为其他 goroutine 是无法捕当前 goroutine 抛出的异常。如果启动的 goroutine 没有 recover,很容易发生 panic 导致整个进程退出。\n\n遇到 goroutine一定要梳理清楚 goroutine 的退出机制,防止泄漏。\n如果要开启多个线程执行一组动作,并且要等待全部完成后继续后续逻辑,考虑使用 errgroup.Group。\n\n4.应用服务\n\n应用服务建议有 README.md 说明文档,介绍服务功能、使用方法、部署时的限制与要求、基础环境依赖等\n应用服务必须要有接口测试\n\n5.常用工具\nGo 本身在代码规范方面做了很多努力,很多限制都是语法要求,例如左大括号不换行,引用的包或者定义的变量不使用会报错。此外 Go 还是提供了很多好用的工具帮助我们进行代码的规范。\n\ngofmt ,大部分的格式问题可以通过 gofmt 解决, gofmt 自动格式化代码,保证所有的 go 代码与官方推荐的格式保持一致,于是所有格式有关问题,都以 gofmt 的结果为准。\ngoimports ,此工具在 gofmt 的基础上增加了自动删除和引入包。\ngo vet ,vet 工具可以帮我们静态分析我们的源码存在的各种问题,例如多余的代码,提前 return 的逻辑, struct 的 tag 是否符合标准等。编译前先执行代码静态分析。\ngolint ,类似 javascript 中的 jslint 的工具,主要功能就是检测代码中不规范的地方。 \n\npowered by Gitbook该文章修订时间:\n2022-05-23 09:59:33\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html":{"url":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.html","title":"1.不需要指向 interface 的指针","keywords":"","body":"我们几乎不需要使用指向接口的指针,应该将接口直接赋值给接口,这样在传递过程中,实质上传递的底层数据仍然是指针,即不存在值拷贝的情况。\ntype Foo struct {\n T string\n}\n\nfunc bar(i interface{}) {\n ...\n}\n\nvar foo interface{} = Foo{...}\n\n// Bad\nbar(&foo)\n\n// Good\nbar(foo)\n\n为什么可以这样,因为接口实质上在底层用两个字段表示:\n(1)一个指向某些特定类型信息的指针;\n(2)一个指向具体数据的指针。如果存储的数据是指针,则直接存储。如果存储的数据是一个值,则存储指向该值的指针。\n具体可以看下 Go 源码 runtime 包两种接口类型的定义。\n一种是带有一组方法的接口runtime.iface:\ntype iface struct {\n tab *itab\n data unsafe.Pointer\n}\n\n一种是不含任何方法的空接口runtime.eface:\ntype eface struct {\n _type *_type\n data unsafe.Pointer\n}\n\n我们可以看下接口变量的内存宽度。\nvar foo interface{} = Foo{...}\nfmt.Println(unsafe.Sizeof(foo)) // 16\n\n当然,凡事无绝对。如果需要修改接口变量本身,那么应该使用指向接口变量的指针,当然你必须清楚自己在干什么。\n类似地,在了解 map、slice、channel 的底层结构后,我们应该知道在传递过程中一般也不需要使用指向它们的指针。 \npowered by Gitbook该文章修订时间:\n2022-05-07 19:01:50\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html":{"url":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.html","title":"2.编译期验证 interface 合理性","keywords":"","body":"在编译时验证接口的合理性,这包括:\n(1)导出类型的部分 API 实现了接口;\n(2)导出或非导出类型实现了接口且属于某类型的一部分(匿名嵌套);\n(3)任何其他情况都违反接口合理性检查,终止编译并通知用户。\n上面这三条是编译器对接口的检查机制, 错误地使用接口会在编译期报错。所以可以利用这个机制让部分问题在编译期暴露。\n// Bad\ntype Handler struct {\n // ...\n}\n\nfunc (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\n // ...\n}\n\n// Good\ntype Handler struct {\n // ...\n}\n\nvar _ http.Handler = (*Handler)(nil)\n\nfunc (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\n // ...\n}\n\n如果*Handler与http.Handler的接口不匹配,那么语句var _ http.Handler = (*Handler)(nil)将无法编译通过。\n赋值的右边应该是断言类型的零值。 对于指针类型(如 *Handler)、切片和映射是 nil;对于结构类型是空结构。\ntype LogHandler struct {\n h http.Handler\n log *zap.Logger\n}\n\nvar _ http.Handler = LogHandler{}\n\nfunc (h LogHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\n // ...\n}\n\npowered by Gitbook该文章修订时间:\n2022-05-07 19:01:50\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html":{"url":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.html","title":"3.在边界处拷贝 slice 和 map","keywords":"","body":"slice 和 map 包含了指向底层数据的指针,因此在需要复制它们时要特别注意。\n在 Go 源码文件 src/runtime/slice.go 我们可以找到切片的底层数据结构 runtime.slice:\ntype slice struct {\n array unsafe.Pointer\n len int\n cap int\n}\n\n在 Go 源码文件 src/runtime/map.go 我们可以找到 map 底层核心数据结构 runtime.hmap:\n// A header for a Go map.\ntype hmap struct {\n // Note: the format of the hmap is also encoded in cmd/compile/internal/reflectdata/reflect.go.\n // Make sure this stays in sync with the compiler's definition.\n count int // # live cells == size of map. Must be first (used by len() builtin)\n flags uint8\n B uint8 // log_2 of # of buckets (can hold up to loadFactor * 2^B items)\n noverflow uint16 // approximate number of overflow buckets; see incrnoverflow for details\n hash0 uint32 // hash seed\n\n buckets unsafe.Pointer // array of 2^B Buckets. may be nil if count==0.\n oldbuckets unsafe.Pointer // previous bucket array of half the size, non-nil only when growing\n nevacuate uintptr // progress counter for evacuation (buckets less than this have been evacuated)\n\n extra *mapextra // optional fields\n}\n\n// mapextra holds fields that are not present on all maps.\ntype mapextra struct {\n // If both key and elem do not contain pointers and are inline, then we mark bucket\n // type as containing no pointers. This avoids scanning such maps.\n // However, bmap.overflow is a pointer. In order to keep overflow buckets\n // alive, we store pointers to all overflow buckets in hmap.extra.overflow and hmap.extra.oldoverflow.\n // overflow and oldoverflow are only used if key and elem do not contain pointers.\n // overflow contains overflow buckets for hmap.buckets.\n // oldoverflow contains overflow buckets for hmap.oldbuckets.\n // The indirection allows to store a pointer to the slice in hiter.\n overflow *[]*bmap\n oldoverflow *[]*bmap\n\n // nextOverflow holds a pointer to a free overflow bucket.\n nextOverflow *bmap\n}\n\n在接收 slice 和 map 时,请记住当 map 或 slice 作为函数参数传入时,如果您存储了对它们的引用,则用户可以对其进行修改。\n// Bas\nfunc (d *Driver) SetTrips(trips []Trip) {\n d.trips = trips\n}\n\ntrips := ...\nd.SetTrips(trips)\n\n// 你是要修改 d.trips 吗?\ntrips[0] = ...\n\n// Good\nfunc (d *Driver) SetTrips(trips []Trip) {\n d.trips = make([]Trip, len(trips))\n copy(d.trips, trips)\n}\n\ntrips := ...\nd.SetTrips(trips)\n\n// 这里我们修改 trips[0],但不会影响 d.trips\ntrips[0] = ...\n\n在返回 slice 和 map 时,同样的,请注意用户对暴露内部状态的 map 或 slice 的修改。\n// Bad\ntype Stats struct {\n mu sync.Mutex\n\n counters map[string]int\n}\n\n// Snapshot 返回当前状态。\nfunc (s *Stats) Snapshot() map[string]int {\n s.mu.Lock()\n defer s.mu.Unlock()\n\n return s.counters\n}\n\n// snapshot 不再受互斥锁保护,可能会引发并发读写的错误\nsnapshot := stats.Snapshot()\n\n// Good\ntype Stats struct {\n mu sync.Mutex\n\n counters map[string]int\n}\n\nfunc (s *Stats) Snapshot() map[string]int {\n s.mu.Lock()\n defer s.mu.Unlock()\n\n result := make(map[string]int, len(s.counters))\n for k, v := range s.counters {\n result[k] = v\n }\n return result\n}\n\n// snapshot 现在是一个拷贝\nsnapshot := stats.Snapshot()\n\npowered by Gitbook该文章修订时间:\n2022-05-07 19:01:50\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html":{"url":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.html","title":"4.枚举从 1 开始","keywords":"","body":"Go 并没有关键字 enum 来定义枚举类型,引入枚举的标准方法是声明一个自定义类型和一个使用了自增器 iota 的 const 组来表示枚举值。\n预先声明的标识符 iota 表示连续的非类型化整数常量,它的值是对应常量的下标(从零开始),它可用于构造一组相关常数:\ntype ByteSize float64\n\nconst (\n _ = iota // ignore first value by assigning to blank identifier\n KB ByteSize = 1 \n由于第一个值从 0 开始,如果需要使第一个值为有意义的值,我们应该从 1 开始。\n// Bad\ntype Operation int\n\nconst (\n Add Operation = iota\n Subtract\n Multiply\n)\n// Add=0, Subtract=1, Multiply=2\n\n// Good\ntype Operation int\n\nconst (\n Add Operation = iota + 1\n Subtract\n Multiply\n)\n// Add=1, Subtract=2, Multiply=3\n\n当然,凡事无绝对。如果第一个枚举值为零是有意义的,如当零值是理想的默认行为时。\ntype LogOutput int\n\nconst (\n LogToStdout LogOutput = iota\n LogToFile\n LogToRemote\n)\n// LogToStdout=0, LogToFile=1, LogToRemote=2\n\npowered by Gitbook该文章修订时间:\n2022-05-07 19:01:50\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html":{"url":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.html","title":"1.方法接收器为值和指针的区别","keywords":"","body":"接收器为值和指针的方法在调用方式上是有区别的。\n使用值接收器的方法既可以通过值调用,也可以通过指针调用。带指针接收器的方法只能通过指针或 addressable values 调用。\ntype S struct {\n data string\n}\n\nfunc (s S) Read() string {\n return s.data\n}\n\nfunc (s *S) Write(str string) {\n s.data = str\n}\n\nsVals := map[int]S{1: {\"A\"}}\n\n// 你只能通过值调用 Read。\nsVals[1].Read()\n\n// 编译不通过,因为无法对 sVals[1] 取址。\n// sVals[1].Write(\"test\")\n\nsPtrs := map[int]*S{1: {\"A\"}}\n\n// 指针既可以调用 Read,也可以调用 Write。\nsPtrs[1].Read()\nsPtrs[1].Write(\"test\")\n\n类似的,使用值接收器和指针接收器来实现接口,在判断与接口是否匹配时,也存在一定的区别。\ntype F interface {\n f()\n}\n\ntype S1 struct{}\n\nfunc (s S1) f() {}\n\ntype S2 struct{}\n\nfunc (s *S2) f() {}\n\ns1Val := S1{}\ns1Ptr := &S1{}\ns2Val := S2{}\ns2Ptr := &S2{}\n\nvar i F\ni = s1Val\ni = s1Ptr\ni = s2Ptr\n\n// 下面代码无法通过编译,因为 s2Val 是一个值,而 S2 的 f 方法中没有使用值接收器。\n// i = s2Val\n\n从前文可知,可取址的值可以调用接收器为指针的方法,但这里为何不能将值 s2Val 赋给接口 i 呢?\n在 Effective Go 中一节 Pointers vs. Values 做了说明,因为接收器为指针的方法会修改接受器,为了避免产生这种错误的行为,便禁止将值赋给和指针接收器方法集匹配的接口。 \npowered by Gitbook该文章修订时间:\n2022-05-07 19:01:50\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/2.函数/2.使用defer释放资源.html":{"url":"第三篇:功能设计/2.函数/2.使用defer释放资源.html","title":"2.使用 defer 释放资源","keywords":"","body":"使用 defer 释放资源,诸如文件和锁。\n// Bad\n// 当有多个 return 分支时,很容易遗忘 unlock\np.Lock()\nif p.count \ndefer 的开销非常小,只有在您可以证明函数执行时间处于纳秒级的程度时,才应避免这样做。使用 defer 提升可读性是值得的,因为使用它们的成本微不足道。尤其适用于那些不仅仅是简单内存访问的较大方法,在这些方法中其他计算的资源消耗远超过 defer。 \npowered by Gitbook该文章修订时间:\n2022-05-07 19:01:50\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html":{"url":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.html","title":"3.不要在 for 循环中使用 defer","keywords":"","body":"尽可能地避免在 for 循环中使用 defer,因为这可能会导致资源泄漏(Possible resource leak, 'defer' is called in the 'for' loop)。\ndefer 不是基于代码块的,而是基于函数的。你在循环中分配资源,那么不应该简单地使用 defer,因为释放资源不会尽可能早地发生(在每次迭代结束时),只有在 for 语句之后(所有迭代之后),即所在函数结束时,defer 函数才会被执行。这带来的后果就是,如果迭代次数过多,那么可能导致资源长时间得不到释放,造成泄漏。\n// Bad\nfor rows.Next() {\n fields, err := db.Query(.....)\n if err != nil {\n // ...\n }\n defer fields.Close()\n\n // do something with `fields`\n\n}\n\n如果有一个类似上面分配资源的代码段,我们应该将其包裹在一个函数中(匿名函数或有名函数)。在该函数中,使用 defer,资源将在不需要时被立即释放。\n// 1.将 defer 放在匿名函数中\nfor rows.Next() {\n func() {\n fields, err := db.Query(...)\n if err != nil {\n // Handle error and return\n return\n }\n defer fields.Close()\n\n // do something with `fields`\n }()\n}\n\n// 2.将 defer 放在有名函数中然后调用之\nfunc foo(r *db.Row) error {\n fields, err := db.Query(...)\n if err != nil {\n return fmt.Errorf(\"db.Query error: %w\", err)\n }\n defer fields.Close()\n\n // do something with `fields`\n return nil\n}\n\n// 调用有名函数\nfor rows.Next() {\n if err := foo(rs); err != nil {\n // Handle error and return\n return\n }\n}\n\npowered by Gitbook该文章修订时间:\n2022-05-07 19:01:50\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html":{"url":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.html","title":"1.零值 Mutex 是有效的","keywords":"","body":"零值 sync.Mutex 和 sync.RWMutex 是有效的,所以指向 mutex 的指针基本是不必要的。\n// Bad\nmu := new(sync.Mutex)\nmu.Lock()\n\n// Good\nvar mu sync.Mutex\nmu.Lock()\n\nMutex 作为其他结构体一个字段时,应该使用值而不是指针。即使该结构体不被导出,也不要直接把 Mutex 嵌入到结构体中。\n// Bad\ntype sMap struct {\n sync.Mutex\n data map[string]string\n}\n\nfunc NewSMap() *sMap {\n return &sMap{\n data: make(map[string]string),\n }\n}\n\nfunc (m *sMap) Get(k string) string {\n m.Lock()\n defer m.Unlock()\n return m.data[k]\n}\n\n// Good\ntype sMap struct {\n mutex sync.Mutex\n data map[string]string\n}\n\nfunc NewSMap() *sMap {\n return &sMap{\n data: make(map[string]string),\n }\n}\n\nfunc (m *SMap) Get(k string) string {\n m.mutex.Lock()\n defer m.mutex.Unlock()\n return m.data[k]\n}\n\nBad 部分会导致字段 Mutex、Lock 和 Unlock 方法是 sMap 导出的字段和 API,但又没有明确说明,既导致了模糊的文档,又泄露了 sMap 的实现细节。Good 部分可以做到字段 mutex 及其方法是 sMap 的实现细节,对其调用者不可见。 \npowered by Gitbook该文章修订时间:\n2022-05-07 19:01:50\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html":{"url":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.html","title":"2.channel size 要么是 1 或 0","keywords":"","body":"channel size 应为 1 或是无缓冲的。默认情况下,channel 是无缓冲的,其 size 为零。任何其他尺寸都必须经过严格的审查,而不是拍脑袋给出一个大致的值。我们需要考虑如何确定大小,什么原因会导致 channel 在高负载下被填满并阻塞写入者,以及当这种情况发生时系统会发生哪些变化。\n// Bad\n// 应该足以满足任何情况!\nc := make(chan int, 64)\n\n// Good\n// size 为 1\nc := make(chan int, 1) \n// 或无缓冲 size 为 0\nc := make(chan int)\n\npowered by Gitbook该文章修订时间:\n2022-05-07 19:01:50\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/4.错误处理/1.错误处理.html":{"url":"第三篇:功能设计/4.错误处理/1.错误处理.html","title":"1.错误处理","keywords":"","body":"1.错误类型2.错误包装1.错误类型\n声明错误可选的方式很少,在选择合适的错误申明方式之前,应考虑以下几点。\n(1)调用者是否需要匹配错误以便他们可以处理它? 如果是,我们必须通过声明顶级错误变量或自定义类型来支持 errors.Is 或 errors.As 函数。\n(2)错误消息是否为静态字符串,还是需要上下文信息的动态字符串? 如果是静态字符串,我们可以使用 errors.New,但对于后者,我们必须使用 fmt.Errorf 或自定义错误类型。\n(3)我们是否正在传递由下游函数返回的新错误? 如果是这样,请参阅错误包装部分。\n\n\n\n错误匹配\n错误消息\n指导\n\n\n\n\nNo\nstatic\nerrors.New\n\n\nNo\ndynamic\nfmt.Errorf\n\n\nYes\nstatic\ntop-level var with errors.New\n\n\nYes\ndynamic\ncustom error type\n\n\n\n例如,使用errors.New表示带有静态字符串的错误。如果调用者需要匹配并处理此错误,则将此错误导出为变量以支持将其与errors.Is匹配。\n// Bad\n\n// package foo\n\nfunc Open() error {\n return errors.New(\"could not open\")\n}\n\n// package bar\n\nif err := foo.Open(); err != nil {\n // Can't handle the error.\n panic(\"unknown error\")\n}\n\n// Good\n// package foo\n\nvar ErrCouldNotOpen = errors.New(\"could not open\")\n\nfunc Open() error {\n return ErrCouldNotOpen\n}\n\n// package bar\n\nif err := foo.Open(); err != nil {\n if errors.Is(err, foo.ErrCouldNotOpen) {\n // handle the error\n } else {\n panic(\"unknown error\")\n }\n}\n\n对于动态字符串的错误, 如果调用者不需要匹配它,则使用fmt.Errorf,如果调用者确实需要匹配它,则自定义 error。\n无错误匹配。\n// package foo\n\nfunc Open(file string) error {\n return fmt.Errorf(\"file %q not found\", file)\n}\n\n// package bar\n\nif err := foo.Open(\"testfile.txt\"); err != nil {\n // Can't handle the error.\n panic(\"unknown error\")\n}\n\n错误匹配。\n// package foo\n\ntype NotFoundError struct {\n File string\n}\n\nfunc (e *NotFoundError) Error() string {\n return fmt.Sprintf(\"file %q not found\", e.File)\n}\n\nfunc Open(file string) error {\n return &NotFoundError{File: file}\n}\n\n\n// package bar\n\nif err := foo.Open(\"testfile.txt\"); err != nil {\n var notFound *NotFoundError\n if errors.As(err, ¬Found) {\n // handle the error\n } else {\n panic(\"unknown error\")\n }\n}\n\n请注意,如果您从包中导出错误变量或类型, 它们将成为包的公共 API 的一部分。\n2.错误包装\n在调用失败时传播错误有三个主要方式:\n(1)返回原始错误;\n(2)使用 fmt.Errorf 和 %w 添加上下文生成新错误;\n(3)使用 fmt.Errorf 和 %v 添加上下文生成新错误。\n如果没有要添加的其他上下文,则按原样返回原始错误。 这将保留原始错误类型和消息。 这非常适合底层错误消息有足够的信息来追踪它来自哪里的错误。\n否则,尽可能在错误消息中添加上下文 这样就不会出现诸如“连接被拒绝”之类的模糊错误, 您会收到更多有用的错误,例如“呼叫服务 foo:连接被拒绝”。\n使用 fmt.Errorf 为你的错误添加上下文, 根据调用者是否应该能够匹配和提取根本原因,在 %w 或 %v 格式之间进行选择。\n(1)如果调用者应该可以访问底层错误,请使用 %w。 对于大多数包装错误,这是一个很好的默认值,但请注意,调用者可能会开始依赖此行为。因此,对于包装错误是已知变量或类型的情况,请将其作为函数契约的一部分进行记录和测试。\n(2)使用 %v 来混淆底层错误,调用者将无法匹配它,但如果需要,您可以在将来切换到 %w。\n在为返回的错误添加上下文时,通过避免使用\"failed to\"之类的短语来保持上下文简洁,当错误通过堆栈向上传递时,它会一层一层被堆积起来:\n// Bad\ns, err := store.New()\nif err != nil {\n return fmt.Errorf(\n \"failed to create new store: %w\", err)\n}\n\n// Good\ns, err := store.New()\nif err != nil {\n return fmt.Errorf(\n \"new store: %w\", err)\n}\n\n然而,一旦错误被发送到另一个系统,应该清楚消息是一个错误(例如 err 标签或日志中的 \"Failed\" 前缀)。\n另外请参考:Don't just check errors, handle them gracefully。 \npowered by Gitbook该文章修订时间:\n2022-05-07 19:01:50\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html":{"url":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.html","title":"1.使用 time 包处理时间","keywords":"","body":"时间处理看似简单,实则不然。关于时间的错误假设通常包括以下几点:\n\n一分钟有 60 秒\n一小时有 60 分钟\n一天有 24 小时\n一周有 7 天\n一年 365 天\n\n还有更多,具体可参考 Falsehoods programmers believe about time。\n例如,在一个时间点上加上 24 小时并不总是产生一个新的日历日。\n为什么常识性的认知是错误的呢?因为地球自转的不均匀性和长期变慢性,会存在时间修正的情况,比如闰秒,闰年等。\n因此,在处理时间时始终使用 \"time\" 包,因为它有助于以更安全、更准确的方式处理这些不正确的假设。\n\n使用 time.Time 表达瞬时时间\n\n在处理时间的瞬间时使用 time.Time,在比较、添加或减去时间时使用 time.Time 中的方法。\n// Bad\nfunc isActive(now, start, stop int) bool {\n return start \n\n使用 time.Duration 表达时间段\n```go\n// Bad\nfunc poll(delay int) {\nfor {\n // ...\n time.Sleep(time.Duration(delay) * time.Millisecond)\n}\n}\npoll(10) // 是几秒钟还是几毫秒?\n\n// Good\nfunc poll(delay time.Duration) {\n for {\n // ...\n time.Sleep(delay)\n }\n}\npoll(10*time.Second) // 代码即注释\n回到第一个例子,在一个时间时刻加上 24 小时,我们用于添加时间的方法取决于意图。如果我们想要下一个日历日(当前天的下一天)的同一个时间点,我们应该使用 `Time.AddDate`。但是,如果我们想保证某一时刻比前一时刻晚 24 小时,我们应该使用`Time.Add`。\n```go\nnewDay := t.AddDate(0 /* years */, 0 /* months */, 1 /* days */)\nmaybeNewDay := t.Add(24 * time.Hour)\n\n对外部系统使用 time.Time 和 time.Duration\n\n尽可能在与外部系统交互中使用 time.Time 和 time.Duration 。\n(1)Command-line 标志:flag 通过 time.ParseDuration 支持 time.Duration ;\n(2)JSON:encoding/json 通过其 Time.UnmarshalJSON 方法支持将 time.Time 编码为 RFC 3339 字符串;\n(3)SQL:database/sql 支持将 DATETIME 或 TIMESTAMP 列转换为 time.Time,如果底层驱动程序支持则返回;\n(4)YAML:gopkg.in/yaml.v2 支持将 time.Time 作为 RFC 3339 字符串,并通过 time.ParseDuration 支持 time.Duration 。\n当不能在这些交互中使用 time.Duration 时,请使用 int 或 float64,并在字段名称中包含单位。\n例如,由于 encoding/json 不支持 time.Duration,因此该单位包含在字段的名称中。\n// Bad\n// {\"interval\": 2}\ntype Config struct {\n Interval int `json:\"interval\"`\n}\n\n// Good\n// {\"intervalMillis\": 2000}\ntype Config struct {\n IntervalMillis int `json:\"intervalMillis\"`\n}\n\n当在这些交互中不能使用 time.Time 时,除非达成一致,否则使用 string 和 RFC 3339 中定义的格式时间戳。默认情况下,Time.UnmarshalText 使用此格式,并可通过 time.RFC3339 在 Time.Format 和 time.Parse 中使用。\n尽管这在实践中并不成问题,但请记住,time 包不支持解析闰秒时间戳(issue 8728),也不在计算中考虑闰秒(issue 15190)。如果您比较两个时刻,则差异将不包括这两个时刻之间可能发生的闰秒。 \npowered by Gitbook该文章修订时间:\n2022-05-07 19:01:50\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html":{"url":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.html","title":"2.使用第三方 atomic 包","keywords":"","body":"不建议使用 sync/atomic 包的原子操作对基本类型 (int32, int64 等)进行操作,因为很容易忘记使用原子操作来读取或修改变量。\ngo.uber.org/atomic 通过隐藏基础类型为这些操作增加了类型安全性。此外,它还包括一个易用的 atomic.Bool 类型。\n// Bad\ntype foo struct {\n running int32 // atomic\n}\n\nfunc (f* foo) start() {\n if atomic.SwapInt32(&f.running, 1) == 1 {\n // already running…\n return\n }\n // start the Foo\n}\n\nfunc (f *foo) isRunning() bool {\n return f.running == 1 // race!\n}\n\n// Good\ntype foo struct {\n running atomic.Bool\n}\n\nfunc (f *foo) start() {\n if f.running.Swap(true) {\n // already running…\n return\n }\n // start the Foo\n}\n\nfunc (f *foo) isRunning() bool {\n return f.running.Load()\n}\n\npowered by Gitbook该文章修订时间:\n2022-05-07 19:01:50\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html":{"url":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.html","title":"1.避免使用可变全局变量","keywords":"","body":"可变全局变量在使用时,可能会被其他地方修改,导致程序运行时出现意外情况。\n我们可以通过依赖注入的方式将依赖注入到使用方,这样便可以避免使用全局变量,进而避免了依赖的全局变量被错误修改的可能。\n比如下面将依赖的 now 函数直接注入到使用方 signer struct 中。\n// Bad\n\n// sign.go\n\nvar timeNow = time.Now\n\nfunc sign(msg string) string {\n now := timeNow()\n return signWithTime(msg, now)\n}\n\n// sign_test.go\nfunc TestSign(t *testing.T) {\n oldTimeNow := timeNow\n timeNow = func() time.Time {\n return someFixedTime\n }\n defer func() { timeNow = oldTimeNow }()\n\n assert.Equal(t, want, sign(give))\n}\n\n// Good\n\n// sign.go\n\ntype signer struct {\n now func() time.Time\n}\n\nfunc newSigner() *signer {\n return &signer{\n now: time.Now,\n }\n}\n\nfunc (s *signer) Sign(msg string) string {\n now := s.now()\n return signWithTime(msg, now)\n}\n\n// sign_test.go\n\nfunc TestSigner(t *testing.T) {\n s := newSigner()\n s.now = func() time.Time {\n return someFixedTime\n }\n\n assert.Equal(t, want, s.Sign(give))\n}\n\npowered by Gitbook该文章修订时间:\n2022-05-07 19:01:50\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html":{"url":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.html","title":"2.避免在公共结构中嵌入类型","keywords":"","body":"嵌入类型会泄漏实现细节、禁止类型演化和产生模糊的接口文档。\n假设您使用共享的 AbstractList 实现了多种列表类型,请避免在具体的列表实现中嵌入 AbstractList。相反,只需手动将方法写入具体的列表,委托给抽象列表的方法。\ntype AbstractList struct {}\n// 添加将实体添加到列表中。\nfunc (l *AbstractList) Add(e Entity) {\n // ...\n}\n// 移除从列表中移除实体。\nfunc (l *AbstractList) Remove(e Entity) {\n // ...\n}\n\n// Bad\n\n// ConcreteList 是一个实体列表。\ntype ConcreteList struct {\n *AbstractList\n}\n\n// Good\n\n// ConcreteList 是一个实体列表。\ntype ConcreteList struct {\n list *AbstractList\n}\n// 添加将实体添加到列表中。\nfunc (l *ConcreteList) Add(e Entity) {\n l.list.Add(e)\n}\n// 移除从列表中移除实体。\nfunc (l *ConcreteList) Remove(e Entity) {\n l.list.Remove(e)\n}\n\n泄漏实现细节指 AbstractList 的实现是 ConcreteList 的实现细节,被到处泄露了;\n禁止类型演化指 ConcreteList 获得了同名嵌套类型字段 AbstractList,如果嵌入的类型是 public,那么字段是 public。为了保持向后兼容性,外部类型的每个未来版本都必须保留嵌入类型;\n产生模糊的接口文档指 AbstractList 被导出的字段和方法全部成为了 ConcreteList 被导出的字段和方法,在 ConcreteList 又没有明确说明,会产生模糊的接口文档。\n很少需要嵌入类型,虽然它可以帮助您避免编写冗长的委托方法。\n即使嵌入兼容的抽象列表 interface,而不是结构体,这将为开发人员提供更大的灵活性来改变未来,但仍然泄露了具体列表使用抽象实现的细节。\n// Bad\n\n// AbstractList 是各种实体列表的通用实现。\ntype AbstractList interface {\n Add(Entity)\n Remove(Entity)\n}\n// ConcreteList 是一个实体列表。\ntype ConcreteList struct {\n AbstractList\n}\n\n// Good\n\n// ConcreteList 是一个实体列表。\ntype ConcreteList struct {\n list AbstractList\n}\n// 添加将实体添加到列表中。\nfunc (l *ConcreteList) Add(e Entity) {\n l.list.Add(e)\n}\n// 移除从列表中移除实体。\nfunc (l *ConcreteList) Remove(e Entity) {\n l.list.Remove(e)\n}\n\n无论是使用嵌入结构还是嵌入接口,都会限制类型的演化。\n(1)向嵌入接口添加方法是一个破坏性的改变;\n(2)从嵌入结构体删除方法是一个破坏性的改变;\n(3)删除嵌入类型是一个破坏性的改变;\n(4)即使使用满足相同接口的类型替换嵌入类型,也是一个破坏性的改变。\n尽管编写这些委托方法是乏味的,但是额外的工作隐藏了实现细节,留下了更多的更改机会,还消除了在未能描述出潜在接口的模糊文档。 \npowered by Gitbook该文章修订时间:\n2022-05-07 19:01:50\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/0.导语.html":{"url":"第四篇:最佳性能/0.导语.html","title":"0.导语","keywords":"","body":"代码的稳健、可读和高效是我们每一个位 coder 的共同追求。本篇将结合 Go 语言特性,为书写高效的代码,力争从常用数据结构、内存管理和并发编程三个方面给出相关建议。话不多说,让我们一起学习 Go 高性能编程技法吧。 \npowered by Gitbook该文章修订时间:\n2022-05-16 19:20:12\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html":{"url":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.html","title":"1.反射虽好,切莫贪杯","keywords":"","body":"1.优先使用 strconv 而不是 fmt2.少量的重复不比反射差3.慎用 binary.Read 和 binary.Write标准库 reflect 为 Go 语言提供了运行时动态获取对象的类型和值以及动态创建对象的能力。反射可以帮助抽象和简化代码,提高开发效率。\nGo 语言标准库以及很多开源软件中都使用了 Go 语言的反射能力,例如用于序列化和反序列化的 json、ORM 框架 gorm、xorm 等。\n1.优先使用 strconv 而不是 fmt\n基本数据类型与字符串之间的转换,优先使用 strconv 而不是 fmt,因为前者性能更佳。\n// Bad\nfor i := 0; i \n为什么性能上会有两倍多的差距,因为 fmt 实现上利用反射来达到范型的效果,在运行时进行类型的动态判断,所以带来了一定的性能损耗。\n2.少量的重复不比反射差\n有时,我们需要一些工具函数。比如从 uint64 切片过滤掉指定的元素。\n利用反射,我们可以实现一个类型泛化支持扩展的切片过滤函数。\n// DeleteSliceElms 从切片中过滤指定元素。注意:不修改原切片。\nfunc DeleteSliceElms(i interface{}, elms ...interface{}) interface{} {\n // 构建 map set。\n m := make(map[interface{}]struct{}, len(elms))\n for _, v := range elms {\n m[v] = struct{}{}\n }\n // 创建新切片,过滤掉指定元素。\n v := reflect.ValueOf(i)\n t := reflect.MakeSlice(reflect.TypeOf(i), 0, v.Len())\n for i := 0; i \n很多时候,我们可能只需要操作一个类型的切片,利用反射实现的类型泛化扩展的能力压根没用上。退一步说,如果我们真地需要对 uint64 以外类型的切片进行过滤,拷贝一次代码又何妨呢?可以肯定的是,绝大部份场景,根本不会对所有类型的切片进行过滤,那么反射带来好处我们并没有充分享受,但却要为其带来的性能成本买单。\n// DeleteU64liceElms 从 []uint64 过滤指定元素。注意:不修改原切片。\nfunc DeleteU64liceElms(i []uint64, elms ...uint64) []uint64 {\n // 构建 map set。\n m := make(map[uint64]struct{}, len(elms))\n for _, v := range elms {\n m[v] = struct{}{}\n }\n // 创建新切片,过滤掉指定元素。\n t := make([]uint64, 0, len(i))\n for _, v := range i {\n if _, ok := m[v]; !ok {\n t = append(t, v)\n }\n }\n return t\n}\n\n下面看一下二者的性能对比。\nfunc BenchmarkDeleteSliceElms(b *testing.B) {\n slice := []uint64{1, 2, 3, 4, 5, 6, 7, 8, 9}\n elms := []interface{}{uint64(1), uint64(3), uint64(5), uint64(7), uint64(9)}\n for i := 0; i \n运行上面的基准测试。\ngo test -bench=. -benchmem main/reflect \ngoos: darwin\ngoarch: amd64\npkg: main/reflect\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkDeleteSliceElms-12 1226868 978.2 ns/op 296 B/op 16 allocs/op\nBenchmarkDeleteU64liceElms-12 8249469 145.3 ns/op 80 B/op 1 allocs/op\nPASS\nok main/reflect 3.809s\n\n可以看到,反射涉及了额外的类型判断和大量的内存分配,导致其对性能的影响非常明显。随着切片元素的递增,每一次判断元素是否在 map 中,因为 map 的 key 是不确定的类型,会发生变量逃逸,触发堆内存的分配。所以,可预见的是当元素数量增加时,性能差异会越来大。\n当使用反射时,请问一下自己,我真地需要它吗?\n3.慎用 binary.Read 和 binary.Write\nbinary.Read 和 binary.Write 使用反射并且很慢。如果有需要用到这两个函数的地方,我们应该手动实现这两个函数的相关功能,而不是直接去使用它们。\nencoding/binary 包实现了数字和字节序列之间的简单转换以及 varints 的编码和解码。varints 是一种使用可变字节表示整数的方法。其中数值本身越小,其所占用的字节数越少。Protocol Buffers 对整数采用的便是这种编码方式。\n其中数字与字节序列的转换可以用如下三个函数:\n// Read 从结构化二进制数据 r 读取到 data。data 必须是指向固定大小值的指针或固定大小值的切片。\nfunc Read(r io.Reader, order ByteOrder, data interface{}) error\n// Write 将 data 的二进制表示形式写入 w。data 必须是固定大小的值或固定大小值的切片,或指向此类数据的指针。\nfunc Write(w io.Writer, order ByteOrder, data interface{}) error\n// Size 返回 Wirte 函数将 v 写入到 w 中的字节数。\nfunc Size(v interface{}) int\n\n下面以我们熟知的 C 标准库函数 ntohl() 函数为例,看看 Go 利用 binary 包如何实现。\n// Ntohl 将网络字节序的 uint32 转为主机字节序。\nfunc Ntohl(bys []byte) uint32 {\n r := bytes.NewReader(bys)\n err = binary.Read(buf, binary.BigEndian, &num)\n}\n\n// 如将 IP 127.0.0.1 网络字节序解析到 uint32\nfmt.Println(Ntohl([]byte{0x7f, 0, 0, 0x1})) // 2130706433 \n\n如果我们针对 uint32 类型手动实现一个 ntohl() 呢?\nfunc NtohlNotUseBinary(bys []byte) uint32 {\n return uint32(bys[3]) | uint32(bys[2])\n该函数也是参考了 encoding/binary 包针对大端字节序将字节序列转为 uint32 类型时的实现。\n下面看下剥去反射前后二者的性能差异。\nfunc BenchmarkNtohl(b *testing.B) {\n for i := 0; i \n运行上面的基准测试,结果如下:\ngo test -bench=BenchmarkNtohl.* -benchmem main/reflect\ngoos: darwin\ngoarch: amd64\npkg: main/reflect\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkNtohl-12 13026195 81.96 ns/op 60 B/op 4 allocs/op\nBenchmarkNtohlNotUseBinary-12 1000000000 0.2511 ns/op 0 B/op 0 allocs/op\nPASS\nok main/reflect 1.841s\n可见使用反射实现的 encoding/binary 包的性能相较于针对具体类型实现的版本,性能差异非常大。 \npowered by Gitbook该文章修订时间:\n2022-05-07 19:15:30\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html":{"url":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.html","title":"2.避免重复转换字符串到字节切片","keywords":"","body":"不要反复从固定字符串创建字节 slice,因为重复的切片初始化会带来性能损耗。相反,请执行一次转换并捕获结果。\nfunc BenchmarkStringToByte(b *testing.B) {\n for i := 0; i \n看一下性能差异,注意需要禁止编译器优化,不然看不出差别。\ngo test -bench=BenchmarkStringToByte -gcflags=\"-N\" main/perf\ngoos: windows\ngoarch: amd64\npkg: main/perf\ncpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz\nBenchmarkStringToByte-8 748467979 1.582 ns/op\nBenchmarkStringToByteOnce-8 878246492 1.379 ns/op\nPASS\nok main/perf 2.962s\n差距不是很大,但是随着字符串长度的增加,差距将会越来越明显。此外,如果这种重复的转换在 Hot Path 上,那么其对性能的影响将被放大。这里解释下 Hot Path,即热点路径,顾名思义,是你的程序中那些会频繁执行到的代码。 \npowered by Gitbook该文章修订时间:\n2022-05-07 19:29:10\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html":{"url":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.html","title":"3.指定容器容量","keywords":"","body":"1.指定 map 容量提示2.指定切片容量尽可能指定容器容量,以便为容器预先分配内存。这将在后续添加元素时减少通过复制来调整容器大小。\n1.指定 map 容量提示\n在尽可能的情况下,在使用 make() 初始化的时候提供容量信息。\nmake(map[T1]T2, hint)\n\n向 make() 提供容量提示会在初始化时尝试调整 map 的大小,这将减少在将元素添加到 map 时为 map 重新分配内存。\n注意,与 slice 不同。map capacity 提示并不保证完全的抢占式分配,而是用于估计所需的 hashmap bucket 的数量。 因此,在将元素添加到 map 时,甚至在指定 map 容量时,仍可能发生分配。\n// Bad\nm := make(map[string]os.FileInfo)\n\nfiles, _ := ioutil.ReadDir(\"./files\")\nfor _, f := range files {\n m[f.Name()] = f\n}\n// m 是在没有大小提示的情况下创建的; 在运行时可能会有更多分配。\n\n// Good\nfiles, _ := ioutil.ReadDir(\"./files\")\n\nm := make(map[string]os.FileInfo, len(files))\nfor _, f := range files {\n m[f.Name()] = f\n}\n// m 是有大小提示创建的;在运行时可能会有更少的分配。\n\n2.指定切片容量\n在尽可能的情况下,在使用 make() 初始化切片时提供容量信息,特别是在追加切片时。\nmake([]T, length, capacity)\n\n与 map 不同,slice capacity 不是一个提示:编译器将为提供给 make() 的 slice 的容量分配足够的内存,这意味着后续的 append() 操作将导致零分配(直到 slice 的长度与容量匹配,在此之后,任何 append 都可能调整大小以容纳其他元素)。\nconst size = 1000000\n\n// Bad\nfor n := 0; n \n执行基准测试:\ngo test -bench=^BenchmarkJoinStr -benchmem \nBenchmarkJoinStrWithOperator-8 66930670 17.81 ns/op 0 B/op 0 allocs/op\nBenchmarkJoinStrWithSprintf-8 7032921 166.0 ns/op 64 B/op 4 allocs/op\n\npowered by Gitbook该文章修订时间:\n2022-05-07 19:31:00\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html":{"url":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.html","title":"4.字符串拼接方式","keywords":"","body":"1.行内字符串拼接2.非行内字符串拼接1.行内字符串拼接\n行内拼接字符串为了书写方便快捷,最常用的两个方法是:\n\n运算符+\nfmt.Sprintf()\n\n行内字符串的拼接,主要追求的是代码的简洁可读。fmt.Sprintf() 能够接收不同类型的入参,通过格式化输出完成字符串的拼接,使用非常方便。但因其底层实现使用了反射,性能上会有所损耗。\n运算符 + 只能简单地完成字符串之间的拼接,非字符串类型的变量需要单独做类型转换。行内拼接字符串不会产生内存分配,也不涉及类型地动态转换,所以性能上优于fmt.Sprintf()。\n从性能出发,兼顾实现的便捷与代码可读性,如果待拼接的字符串不涉及类型转换且数量较少(fmt.Sprintf()。\n下面看下二者的性能对比。\n// Good\nfunc BenchmarkJoinStrWithOperator(b *testing.B) {\n s1, s2, s3 := \"foo\", \"bar\", \"baz\"\n for i := 0; i \n执行基准测试结果如下:\ngo test -bench=^BenchmarkJoinStr -benchmem .\nBenchmarkJoinStrWithOperator-8 70638928 17.53 ns/op 0 B/op 0 allocs/op\nBenchmarkJoinStrWithSprintf-8 7520017 157.2 ns/op 64 B/op 4 allocs/op\n\n可以看到,二者的性能差距很大,快达到一个数量级了。所以在不影响代码可读性时,行内字符串尽可能地使用运算符 + 来拼接而不是fmt.Sprintf()。\n2.非行内字符串拼接\n字符串拼接还有其他的方式,比如strings.Join()、strings.Builder、bytes.Buffer和byte[],这几种不适合行内使用。当待拼接字符串数量较多时可考虑使用。\n先看下其性能测试的对比。\nfunc BenchmarkJoinStrWithStringsJoin(b *testing.B) {\n s1, s2, s3 := \"foo\", \"bar\", \"baz\"\n for i := 0; i \n基准测试结果如下:\ngo test -bench=^BenchmarkJoinStr .\ngoos: windows\ngoarch: amd64\npkg: main/perf\ncpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz\nBenchmarkJoinStrWithStringsJoin-8 31543916 36.39 ns/op\nBenchmarkJoinStrWithStringsBuilder-8 30079785 40.60 ns/op\nBenchmarkJoinStrWithBytesBuffer-8 31663521 39.58 ns/op\nBenchmarkJoinStrWithByteSlice-8 30748495 37.34 ns/op\nBenchmarkJoinStrWithByteSlicePreAlloc-8 665341896 1.813 ns/op\n\n从结果可以看出,strings.Join()、strings.Builder、bytes.Buffer和byte[] 的性能相近。如果结果字符串的长度是可预知的,使用 byte[] 且预先分配容量的拼接方式性能最佳。\n所以如果对性能要求非常严格,或待拼接的字符串数量足够多时,建议使用 byte[] 预先分配容量这种方式。\n综合易用性和性能,一般推荐使用strings.Builder来拼接字符串。\nstring.Builder也提供了预分配内存的方式 Grow:\nfunc BenchmarkJoinStrWithStringsBuilderPreAlloc(b *testing.B) {\n s1, s2, s3 := \"foo\", \"bar\", \"baz\"\n for i := 0; i \n使用了 Grow 优化后的版本的性能测试结果如下。可以看出相较于不预先分配空间的方式,性能提升了很多。\nBenchmarkJoinStrWithStringsBuilderPreAlloc-8 60079003 20.95 ns/op\n\npowered by Gitbook该文章修订时间:\n2022-05-12 19:56:05\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html":{"url":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.html","title":"5.[]struct{} 的遍历方式","keywords":"","body":"1.[]int2.[]struct{}3.[]*struct4.小结Go 遍历切片或数组有两种方式,一种是下标,一种是 range。二者在功能上没有区别,但在性能上会有区别吗?\n1.[]int\n首先看一下遍历基本类型切片时二者的性能差别,以 []int 为例。\n// genRandomIntSlice 生成指定长度的随机 []int 切片\nfunc genRandomIntSlice(n int) []int {\n rand.Seed(time.Now().UnixNano())\n nums := make([]int, 0, n)\n for i := 0; i \n运行测试结果如下:\ngo test -bench=IntSlice$ .\ngoos: windows\ngoarch: amd64\npkg: main/perf\ncpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz\nBenchmarkIndexIntSlice-8 5043324 236.2 ns/op\nBenchmarkRangeIntSlice-8 5076255 239.1 ns/op\n\ngenRandomIntSlice() 函数用于生成指定长度元素类型为 int 的切片。从最终的结果可以看到,遍历 []int 类型的切片,下标与 range 遍历性能几乎没有区别。\n2.[]struct{}\n那么对于稍微复杂一点的 []struct 类型呢?\ntype Item struct {\n id int\n val [1024]byte\n}\n\nfunc BenchmarkIndexStructSlice(b *testing.B) {\n items := make([]Item, 1024)\n for i := 0; i \n运行测试结果如下:\ngo test -bench=. -gcflags=-N -benchmem main/range\ngoos: darwin\ngoarch: amd64\npkg: main/range\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkIndexStructSlice-12 556436 2165 ns/op 1 B/op 0 allocs/op\nBenchmarkRangeIndexStructSlice-12 535705 2124 ns/op 1 B/op 0 allocs/op\nBenchmarkRangeStructSlice-12 38799 30914 ns/op 27 B/op 0 allocs/op\nPASS\nok main/range 5.097s\n\n可以看出,两种通过 index 遍历 []struct 性能没有差别,但是 range 遍历 []struct 中元素时,性能非常差。\nrange 只遍历 []struct 下标时,性能比 range 遍历 []struct 值好很多。从这里我们应该能够知道二者性能差别之大的原因。\nItem 是一个结构体类型 ,Item 由两个字段构成,一个类型是 int,一个是类型是 [1024]byte,如果每次遍历 []Item,都会进行一次值拷贝,所以带来了性能损耗。\n此外,因 range 时获取的是值拷贝,对副本的修改,是不会影响到原切片。\n需要注意的时,上面运行基准测试时,使用编译选项-gcflags=-N禁用了编译器对切片遍历的优化。如果没有该选项,那么上面三种遍历方式没有性能差别。\n为什么编译器会对上面的测试代码进行优化呢?因为代码实际上只取最后一个切片元素的值,所以前面的循环操作可以跳过,这样便带来性能的提升。如果是下面的代码,那么编器将无法优化,必须遍历拷贝所有元素。\nfunc BenchmarkRange1(b *testing.B) {\n items := make([]Item, 1024)\n tmps := make([]int, 1024)\n for i := 0; i \n无需去除编译器优化,基准测试结果如下:\ngo test -bench=BenchmarkRange -benchmem main/range\ngoos: darwin\ngoarch: amd64\npkg: main/range\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkRange1-12 2290372 534.8 ns/op 0 B/op 0 allocs/op\nBenchmarkRange2-12 46161 27169 ns/op 22 B/op 0 allocs/op\nPASS\nok main/range 3.378s\n\n3.[]*struct\n如果切片中是指向结构体的指针,而不是结构体呢?\n// genItems 生成指定长度 []*Item 切片\nfunc genItems(n int) []*Item {\n items := make([]*Item, 0, n)\n for i := 0; i \n执行性能测试结果:\ngo test -bench=Pointer$ main/perf\ngoos: windows\ngoarch: amd64\npkg: main/perf\ncpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz\nBenchmarkIndexPointer-8 773634 1521 ns/op\nBenchmarkRangePointer-8 752077 1514 ns/op\n\n切片元素从结构体 Item 替换为指针 *Item 后,for 和 range 的性能几乎是一样的。而且使用指针还有另一个好处,可以直接修改指针对应的结构体的值。\n4.小结\nrange 在迭代过程中返回的是元素的拷贝,index 则不存在拷贝。\n如果 range 迭代的元素较小,那么 index 和 range 的性能几乎一样,如基本类型的切片 []int。但如果迭代的元素较大,如一个包含很多属性的 struct 结构体,那么 index 的性能将显著地高于 range,有时候甚至会有上千倍的性能差异。对于这种场景,建议使用 index。如果使用 range,建议只迭代下标,通过下标访问元素,这种使用方式和 index 就没有区别了。如果想使用 range 同时迭代下标和值,则需要将切片/数组的元素改为指针,才能不影响性能。 \npowered by Gitbook该文章修订时间:\n2022-05-07 19:40:30\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html":{"url":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.html","title":"6.切片删除指定元素","keywords":"","body":"1.截取法(修改原切片)2.拷贝法(不改原切片)3.移位法(修改原切片)4.性能对比5.小结Go 并没有提供删除切片元素专用的语法或函数,需要使用切片本身的特性来删除元素。\n删除切片指定元素一般有如下几种方法,本文以 []int 为例给出具体实现。\n1.截取法(修改原切片)\n这里利用对 slice 的截取删除指定元素。注意删除时,后面的元素会前移,下标 i 应该后移一位。\n// DeleteSlice1 删除指定元素。\nfunc DeleteSlice1(a []int, elem int) []int {\n for i := 0; i \n2.拷贝法(不改原切片)\n这种方法最容易理解,重新使用一个 slice,将要删除的元素过滤掉。缺点是需要开辟另一个 slice 的空间,优点是容易理解,而且不会修改原 slice。\n// DeleteSlice2 删除指定元素。\nfunc DeleteSlice2(a []int, elem int) []int {\n tmp := make([]int, 0, len(a))\n for _, v := range a {\n if v != elem {\n tmp = append(tmp, v)\n }\n }\n return tmp\n}\n\n3.移位法(修改原切片)\n\n方式一\n\n利用一个下标 index,记录下一个有效元素应该在的位置。遍历所有元素,当遇到有效元素,将其移动到 index 且 index 加一。最终 index 的位置就是所有有效元素的下一个位置,最后做一个截取就行了。这种方法会修改原来的 slice。\n该方法可以看成对第一种方法截取法的改进,因为每次指需移动一个元素,性能更加。\n// DeleteSlice3 删除指定元素。\nfunc DeleteSlice3(a []int, elem int) []int {\n j := 0\n for _, v := range a {\n if v != elem {\n a[j] = v\n j++\n }\n }\n return a[:j]\n}\n\n\n方式二\n\n创建了一个 slice,但是共用原始 slice 的底层数组。这样也不需要额外分配内存空间,直接在原 slice 上进行修改。\n// DeleteSlice4 删除指定元素。\nfunc DeleteSlice4(a []int, elem int) []int {\n tgt := a[:0]\n for _, v := range a {\n if v != elem {\n tgt = append(tgt, v)\n }\n }\n return tgt\n}\n\n4.性能对比\n假设我们的切片有 0 和 1,我们要删除所有的 0。\n这里分别对长度为 10、100、1000 的切片进行测试,来上下上面四种实现的性能差异。\n生成切片函数如下:\nfunc getSlice(n int) []int {\n a := make([]int, 0, n)\n for i := 0; i \n基准测试代码如下:\nfunc BenchmarkDeleteSlice1(b *testing.B) {\n for i := 0; i \n测试结果如下:\n原切片长度为 10:\ngo test -bench=. main/slice\ngoos: windows\ngoarch: amd64\npkg: main/slice\ncpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz\nBenchmarkDeleteSlice1-8 17466486 65.07 ns/op\nBenchmarkDeleteSlice2-8 14897282 85.22 ns/op\nBenchmarkDeleteSlice3-8 21952129 50.78 ns/op\nBenchmarkDeleteSlice4-8 22176390 54.68 ns/op\nPASS\nok main/slice 5.427s\n原切片长度为 100:\nBenchmarkDeleteSlice1-8 1652146 762.1 ns/op\nBenchmarkDeleteSlice2-8 2124237 578.4 ns/op\nBenchmarkDeleteSlice3-8 3161318 359.9 ns/op\nBenchmarkDeleteSlice4-8 2714158 423.7 ns/op\n原切片长度为 1000:\nBenchmarkDeleteSlice1-8 56067 21915 ns/op\nBenchmarkDeleteSlice2-8 258662 5007 ns/op\nBenchmarkDeleteSlice3-8 432049 2724 ns/op\nBenchmarkDeleteSlice4-8 325194 3615 ns/op\n5.小结\n从基准测试结果来看,性能最佳的方法是移位法,其中又属第一种实现方式较佳。性能最差的也是最常用的方法是截取法。随着切片长度的增加,上面四种删除方式的性能差异会愈加明显。\n实际使用时,我们可以根据不用场景来选择。如不能修改原切片使用拷贝法,可以修改原切片使用移位法中的第一种实现方式。 \npowered by Gitbook该文章修订时间:\n2022-05-07 19:41:43\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html":{"url":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.html","title":"1.使用空结构体节省内存","keywords":"","body":"1.不占内存空间2.空结构体的作用2.1 实现集合(Set)2.2 不发送数据的信道2.3 仅包含方法的结构体1.不占内存空间\n在 Go 中,我们可以使用 unsafe.Sizeof 计算出一个数据类型实例需要占用的字节数。\npackage main\n\nimport (\n \"fmt\"\n \"unsafe\"\n)\n\nfunc main() {\n fmt.Println(unsafe.Sizeof(struct{}{}))\n}\n\n运行上面的例子将会输出:\ngo run main.go\n0\n\n可以看到,Go 中空结构体 struct{} 是不占用内存空间,不像 C/C++ 中空结构体仍占用 1 字节。\n2.空结构体的作用\n因为空结构体不占据内存空间,因此被广泛作为各种场景下的占位符使用。一是节省资源,二是空结构体本身就具备很强的语义,即这里不需要任何值,仅作为占位符,达到的代码即注释的效果。\n2.1 实现集合(Set)\nGo 语言标准库没有提供 Set 的实现,通常使用 map 来代替。事实上,对于集合来说,只需要 map 的键,而不需要值。即使是将值设置为 bool 类型,也会多占据 1 个字节,那假设 map 中有一百万条数据,就会浪费 1MB 的空间。\n因此呢,将 map 作为集合(Set)使用时,可以将值类型定义为空结构体,仅作为占位符使用即可。\ntype Set map[string]struct{}\n\nfunc (s Set) Has(key string) bool {\n _, ok := s[key]\n return ok\n}\n\nfunc (s Set) Add(key string) {\n s[key] = struct{}{}\n}\n\nfunc (s Set) Delete(key string) {\n delete(s, key)\n}\n\nfunc main() {\n s := make(Set)\n s.Add(\"foo\")\n s.Add(\"bar\")\n fmt.Println(s.Has(\"foo\"))\n fmt.Println(s.Has(\"bar\"))\n}\n\n如果想使用 Set 的完整功能,如初始化(通过切片构建一个 Set)、Add、Del、Clear、Contains 等操作,可以使用开源库 golang-set。\n2.2 不发送数据的信道\nfunc worker(ch chan struct{}) {\n \n有时候使用 channel 不需要发送任何的数据,只用来通知子协程(goroutine)执行任务,或只用来控制协程的并发。这种情况下,使用空结构体作为占位符就非常合适了。\n2.3 仅包含方法的结构体\ntype Door struct{}\n\nfunc (d Door) Open() {\n fmt.Println(\"Open the door\")\n}\n\nfunc (d Door) Close() {\n fmt.Println(\"Close the door\")\n}\n\n在部分场景下,结构体只包含方法,不包含任何的字段。例如上面例子中的 Door,在这种情况下,Door 事实上可以用任何的数据结构替代。\ntype Door int\ntype Door bool\n\n无论是 int 还是 bool 都会浪费额外的内存。因此,在这种情况下,声明为空结构体最合适。 \npowered by Gitbook该文章修订时间:\n2022-05-07 19:53:07\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html":{"url":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.html","title":"2.struct 布局考虑内存对齐","keywords":"","body":"1.为什么需要内存对齐2.Go 内存对齐规则3.合理的 struct 布局4.空结构与空数组对内存对齐的影响1.为什么需要内存对齐\nCPU 访问内存并不是逐个字节访问,而是以字长(word size)为单位访问。如 32 位的 CPU ,字长为 4 字节,那么 CPU 访存的单位是 4 字节。\n这么设计的目的,是减少 CPU 访问内存的次数,加大 CPU 访问内存的吞吐量。比如同样读取 8 个字节的数据,一次读取 4 个字节那么只需要读取 2 次。\nCPU 始终以字长访问内存,如果不进行内存对齐,可能会增加 CPU 访存次数。\n\n内存对齐前变量 a、b 各占据 3 个字节,CPU 读取 b 变量的值需要两次访存,第一次访存得到前一个字节,第二次得到后两个字节。内存对齐后 a、b 各占 4 个字节,CPU 读取 b 变量的值只需要一次访存。\n从这个例子可以看到,内存对齐对实现变量的原子性操作也是有好处的。每次内存访问是原子的,如果变量的大小不超过字长,那么内存对齐后,对该变量的访问就是原子的,这个特性在并发场景下至关重要。\n简言之:合理的内存对齐可以提高内存读写的性能,并且便于实现变量操作的原子性。\n2.Go 内存对齐规则\n编译器一般为了减少 CPU 访存指令周期,提高内存的访问效率,会对变量进行内存对齐。Go 作为一门追求高性能的后台编程语言,当然也不例外。\nGo Language Specification 中 Size and alignment guarantees 描述了内存对齐的规则。\n\n1.For a variable x of any type: unsafe.Alignof(x) is at least 1.\n2.For a variable x of struct type: unsafe.Alignof(x) is the largest of all the values unsafe.Alignof(x.f) for each field f of x, but at least 1.\n3.For a variable x of array type: unsafe.Alignof(x) is the same as the alignment of a variable of the array's element type.\n\n\n对于任意类型的变量 x ,unsafe.Alignof(x) 至少为 1。\n对于结构体类型的变量 x,计算 x 每一个字段 f 的 unsafe.Alignof(x.f),unsafe.Alignof(x) 等于其中的最大值。\n对于数组类型的变量 x,unsafe.Alignof(x) 等于构成数组的元素类型的对齐系数。\n\n其中函数 unsafe.Alignof 用于获取变量的对齐系数。 对齐系数决定了字段的偏移和变量的大小,两者必须是对齐系数的整数倍。\n3.合理的 struct 布局\n因为内存对齐的存在,合理的 struct 布局可以减少内存占用,提高程序性能。\ntype demo1 struct {\n a int8\n b int16\n c int32\n}\n\ntype demo2 struct {\n a int8\n c int32\n b int16\n}\n\nfunc main() {\n fmt.Println(unsafe.Sizeof(demo1{})) // 8\n fmt.Println(unsafe.Sizeof(demo2{})) // 12\n}\n\n可以看到,同样的字段,因排列顺序不同,会导致不一样的结构体大小。\n每个字段按照自身的对齐系数来确定在内存中的偏移量,一个字段因偏移而浪费的大小也不同。\n接下来逐个分析,首先是 demo1:\na 是第一个字段,默认是已经对齐的,从第 0 个位置开始占据 1 字节。\nb 是第二个字段,对齐系数为 2,因此,必须空出 1 个字节,偏移量才是 2 的倍数,从第 2 个位置开始占据 2 字节。\nc 是第三个字段,对齐倍数为 4,此时,内存已经是对齐的,从第 4 个位置开始占据 4 字节即可。\n因此 demo1 的内存占用为 8 字节。\n对于 demo2:\na 是第一个字段,默认是已经对齐的,从第 0 个位置开始占据 1 字节。\nc 是第二个字段,对齐倍数为 4,因此,必须空出 3 个字节,偏移量才是 4 的倍数,从第 4 个位置开始占据 4 字节。\nb 是第三个字段,对齐倍数为 2,从第 8 个位置开始占据 2 字节。\ndemo2 的对齐系数由 c 的对齐系数决定,也是 4,因此,demo2 的内存占用为 12 字节。\n\n因此,在对内存特别敏感的结构体的设计上,我们可以通过调整字段的顺序,将字段宽度从小到大由上到下排列,来减少内存的占用。\n4.空结构与空数组对内存对齐的影响\n空结构与空数组在 Go 中比较特殊。没有任何字段的空 struct{} 和没有任何元素的 array 占据的内存空间大小为 0。\n因为这一点,空 struct{} 或空 array 作为其他 struct 的字段时,一般不需要内存对齐。但是有一种情况除外:即当 struct{} 或空 array 作为结构体最后一个字段时,需要内存对齐。因为如果有指针指向该字段,返回的地址将在结构体之外,如果此指针一直存活不释放对应的内存,就会有内存泄露的问题(该内存不因结构体释放而释放)。\ntype demo3 struct {\n a struct{}\n b int32\n}\ntype demo4 struct {\n b int32\n a struct{}\n}\n\nfunc main() {\n fmt.Println(unsafe.Sizeof(demo3{})) // 4\n fmt.Println(unsafe.Sizeof(demo4{})) // 8\n}\n\n可以看到,demo3{} 的大小为 4 字节,与字段 b 占据空间一致,而 demo4{} 的大小为 8 字节,即额外填充了 4 字节的空间。 \npowered by Gitbook该文章修订时间:\n2022-05-07 19:55:55\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html":{"url":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.html","title":"3.减少逃逸,将变量限制在栈上","keywords":"","body":"1.局部切片尽可能确定长度或容量2.返回值 VS 返回指针3.小的拷贝好过引用4.返回值使用确定的类型5.小结变量逃逸一般发生在如下几种情况:\n\n变量较大(栈空间不足)\n变量大小不确定(如 slice 长度或容量不定)\n返回地址\n返回引用(引用变量的底层是指针)\n返回值类型不确定(不能确定大小)\n闭包\n其他\n\n知道变量逃逸的原因后,我们可以有意识地避免变量发生逃逸,将其限制在栈上,减少堆变量的分配,降低 GC 成本,可提高程序性能。\n1.局部切片尽可能确定长度或容量\n如果使用局部切片时,已知切片的长度或容量,请使用常量或数值字面量来定义。\npackage main\n\nfunc main() {\n number := 10\n s1 := make([]int, 0, number)\n for i := 0; i \n我们来看一下编译器编译时对上面两个切片的优化决策。\n go build -gcflags=\"-m -m -l\" main.go\n# command-line-arguments\n./main.go:5:12: make([]int, 0, number) escapes to heap:\n./main.go:5:12: flow: {heap} = &{storage for make([]int, 0, number)}:\n./main.go:5:12: from make([]int, 0, number) (non-constant size) at ./main.go:5:12\n./main.go:5:12: make([]int, 0, number) escapes to heap\n./main.go:9:12: make([]int, 0, 10) does not escape\n\n从输出结果可以看到,使用变量(非常量)来指定切片的容量,会导致切片发生逃逸,影响性能。指定切片的长度时也是一样的,尽可能使用常量或数值字面量。\n下面看下二者的性能差异。\n// sliceEscape 发生逃逸,在堆上申请切片\nfunc sliceEscape() {\n number := 10\n s1 := make([]int, 0, number)\n for i := 0; i \n运行上面的基准测试结果如下:\ngo test -bench=BenchmarkSlice -benchmem main/copy \ngoos: darwin\ngoarch: amd64\npkg: main/copy\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkSliceEscape-12 43268738 27.40 ns/op 80 B/op 1 allocs/op\nBenchmarkSliceNoEscape-12 186127288 6.454 ns/op 0 B/op 0 allocs/op\nPASS\nok main/copy 4.402s\n\n2.返回值 VS 返回指针\n值传递会拷贝整个对象,而指针传递只会拷贝地址,指向的对象是同一个。传指针可以减少值的拷贝,但是会导致内存分配逃逸到堆中,增加垃圾回收(GC)的负担。在对象频繁创建和删除的场景下,返回指针导致的 GC 开销可能会严重影响性能。\n一般情况下,对于需要修改原对象,或占用内存比较大的对象,返回指针。对于只读或占用内存较小的对象,返回值能够获得更好的性能。\n下面以一个简单的示例来看下二者的性能差异。\ntype St struct {\n arr [1024]int\n}\n\nfunc retValue() St {\n var st St\n return st\n}\n\nfunc retPtr() *St {\n var st St\n return &st\n}\n\nfunc BenchmarkRetValue(b *testing.B) {\n for i := 0; i \n基准测试结果如下:\ngo test -gcflags=\"-l\" -bench=BenchmarkRet -benchmem main/copy\ngoos: darwin\ngoarch: amd64\npkg: main/copy\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkRetValue-12 5194722 216.2 ns/op 0 B/op 0 allocs/op\nBenchmarkRetPtr-12 1342947 893.6 ns/op 8192 B/op 1 allocs/op\nPASS\nok main/copy 3.865s\n\n3.小的拷贝好过引用\n小的拷贝好过引用,什么意思呢,就是尽量使用栈变量而不是堆变量。下面举一个反常识的例子,来证明小的拷贝比在堆上创建引用变量要好。\n我们都知道 Go 里面的 Array 以 pass-by-value 方式传递后,再加上其长度不可扩展,考虑到性能我们一般很少使用它。实际上,凡事无绝对。有时使用数组进行拷贝传递,比使用切片要好。\n// copy/copy.go\n\nconst capacity = 1024\n\nfunc arrayFibonacci() [capacity]int {\n var d [capacity]int\n for i := 0; i \n下面看一下性能对比。\nfunc BenchmarkArray(b *testing.B) {\n for i := 0; i \n运行上面的基准测试,将得到如下结果。\ngo test -bench=. -benchmem -gcflags=\"-l\" main/copy\ngoos: darwin\ngoarch: amd64\npkg: main/copy\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkArray-12 692400 1708 ns/op 0 B/op 0 allocs/op\nBenchmarkSlice-12 464974 2242 ns/op 8192 B/op 1 allocs/op\nPASS\nok main/copy 3.908s\n\n从测试结果可以看出,对数组的拷贝性能却比使用切片要好。为什么会这样呢?\nsliceFibonacci()函数中分配的局部变量切片因为要返回到函数外部,所以发生了逃逸,需要在堆上申请内存空间。从测试也过也可以看出,arrayFibonacci()函数没有内存分配,完全在栈上完成数组的创建。这里说明了对于一些短小的对象,栈上复制的成本远小于在堆上分配和回收的成本。\n需要注意,运行上面基准测试时,传递了禁止内联的编译选项 \"-l\",如果发生内联,那么将不会出现变量的逃逸,就不存在堆上分配内存与回收的操作了,二者将看不出性能差异。\n编译时可以借助选项-gcflags=-m查看编译器对上面两个函数的优化决策。\ngo build -gcflags=-m copy/copy.go\n# command-line-arguments\ncopy/copy.go:5:6: can inline arrayFibonacci\ncopy/copy.go:17:6: can inline sliceFibonacci\ncopy/copy.go:18:11: make([]int, capacity) escapes to heap\n\n可以看到,arrayFibonacci() 和 sliceFibonacci() 函数均可内联。sliceFibonacci() 函数中定义的局部变量切片逃逸到了堆。\n那么多大的变量才算是小变量呢? 对 Go 编译器而言,超过一定大小的局部变量将逃逸到堆上,不同 Go 版本的大小限制可能不一样。一般是 \n4.返回值使用确定的类型\n如果变量类型不确定,那么将会逃逸到堆上。所以,函数返回值如果能确定的类型,就不要使用 interface{}。\n我们还是以上面斐波那契数列函数为例,看下返回值为确定类型和 interface{} 的性能差别。\nconst capacity = 1024\n\nfunc arrayFibonacci() [capacity]int {\n var d [capacity]int\n for i := 0; i \nfunc BenchmarkArray(b *testing.B) {\n for i := 0; i \n运行上面的基准测试结果如下:\ngo test -bench=. -benchmem main/copy\ngoos: darwin\ngoarch: amd64\npkg: main/copy\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkArray-12 832418 1427 ns/op 0 B/op 0 allocs/op\nBenchmarkIfc-12 380626 2861 ns/op 8192 B/op 1 allocs/op\nPASS\nok main/copy 3.742s\n\n可见,函数返回值使用 interface{} 返回时,编译器无法确定返回值的具体类型,导致返回值逃逸到堆上。当发生了堆上内存的申请与回收时,性能会差一点。\n5.小结\n栈上分配内存比在堆中分配内存有更高的效率。因为栈上分配的内存不需要 GC 处理,函数返回后就会直接释放,而堆上分配的内存使用完毕会交给 GC 处理。在知道常见的变量逃逸场景后,我们在编码时可以有意识地避免变量发生逃逸,尽可能地使用栈空间,而非堆空间。\n以上仅列出了部分变量发生逃逸的情形。实际上,Go 编译器对变量的逃逸分析决策远比我们想像的要复杂。我们只能尽可能地去勾勒而无以绘其全貌。Go 官方也在 Frequently Asked Questions (FAQ) 明确地告诉我们,我们并不需要知道变量是分配在栈(stack)上还是堆(heap)上。Golang 中的变量只要被引用就一直会存活,存储在堆上还是栈上由 Go 内部实现决定而和具体的语法没有关系。 \npowered by Gitbook该文章修订时间:\n2022-05-07 20:47:33\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html":{"url":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.html","title":"4.sync.Pool 复用对象","keywords":"","body":"1.简介2.作用3.如何使用4.性能差异5.在标准库中的应用1.简介\nsync.Pool 是 sync 包下的一个组件,可以作为保存临时取还对象的一个“池子”。个人觉得它的名字有一定的误导性,因为 Pool 里装的对象可以被无通知地被回收,可能 sync.Cache 是一个更合适的名字。\nsync.Pool 是可伸缩的,同时也是并发安全的,其容量仅受限于内存的大小。存放在池中的对象如果不活跃了会被自动清理。\n2.作用\n对于很多需要重复分配、回收内存的地方,sync.Pool 是一个很好的选择。频繁地分配、回收内存会给 GC 带来一定的负担,严重的时候会引起 CPU 的毛刺,而 sync.Pool 可以将暂时不用的对象缓存起来,待下次需要的时候直接使用,不用再次经过内存分配,复用对象的内存,减轻 GC 的压力,提升系统的性能。\n一句话总结:用来保存和复用临时对象,减少内存分配,降低 GC 压力。\n3.如何使用\nsync.Pool 的使用方式非常简单,只需要实现 New 函数即可。对象池中没有对象时,将会调用 New 函数创建。\n假设我们有一个“学生”结构体,并复用改结构体对象。\ntype Student struct {\n Name string\n Age int32\n Remark [1024]byte\n}\n\nvar studentPool = sync.Pool{\n New: func() interface{} { \n return new(Student) \n },\n}\n\n然后调用 Pool 的 Get() 和 Put() 方法来获取和放回池子中。\nstu := studentPool.Get().(*Student)\njson.Unmarshal(buf, stu)\nstudentPool.Put(stu)\n\n\nGet() 用于从对象池中获取对象,因为返回值是 interface{},因此需要类型转换。\nPut() 则是在对象使用完毕后,放回到对象池。\n\n4.性能差异\n我们以 bytes.Buffer 字节缓冲器为例,利用 sync.Pool 复用 bytes.Buffer 对象,避免重复创建与回收内存,来看看对性能的提升效果。\nvar bufferPool = sync.Pool{\n New: func() interface{} {\n return &bytes.Buffer{}\n },\n}\n\nvar data = make([]byte, 10000)\n\nfunc BenchmarkBufferWithPool(b *testing.B) {\n for n := 0; n \n测试结果如下:\ngo test -bench=. -benchmem main/pool\ngoos: darwin\ngoarch: amd64\npkg: main/pool\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkBufferWithPool-12 11987966 97.12 ns/op 0 B/op 0 allocs/op\nBenchmarkBuffer-12 1246887 1020 ns/op 10240 B/op 1 allocs/op\nPASS\nok main/pool 3.510s\n\n这个例子创建了一个 bytes.Buffer 对象池,每次只执行 Write 操作,及做一次数据拷贝,耗时几乎可以忽略。而内存分配和回收的耗时占比较多,因此对程序整体的性能影响更大。从测试结果也可以看出,使用了 Pool 复用对象,每次操作不再有内存分配。\n5.在标准库中的应用\nGo 标准库也大量使用了 sync.Pool,例如 fmt 和 encoding/json。以 fmt 包为例,我们看下其是如何使用 sync.Pool 的。\n我们可以看一下最常用的标准格式化输出函数 Printf() 函数。\n// Printf formats according to a format specifier and writes to standard output.\n// It returns the number of bytes written and any write error encountered.\nfunc Printf(format string, a ...interface{}) (n int, err error) {\n return Fprintf(os.Stdout, format, a...)\n}\n\n继续看 Fprintf() 的定义。\n// Fprintf formats according to a format specifier and writes to w.\n// It returns the number of bytes written and any write error encountered.\nfunc Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) {\n p := newPrinter()\n p.doPrintf(format, a)\n n, err = w.Write(p.buf)\n p.free()\n return\n}\n\nFprintf() 函数的参数是一个 io.Writer,Printf() 传的是 os.Stdout,相当于直接输出到标准输出。这里的 newPrinter 用的就是 sync.Pool。\n// go version go1.17 darwin/amd64\n\n// pp is used to store a printer's state and is reused with sync.Pool to avoid allocations.\ntype pp struct {\n buf buffer\n ...\n}\n\nvar ppFree = sync.Pool{\n New: func() interface{} { return new(pp) },\n}\n\n// newPrinter allocates a new pp struct or grabs a cached one.\nfunc newPrinter() *pp {\n p := ppFree.Get().(*pp)\n p.panicking = false\n p.erroring = false\n p.wrapErrs = false\n p.fmt.init(&p.buf)\n return p\n}\n\n// free saves used pp structs in ppFree; avoids an allocation per invocation.\nfunc (p *pp) free() {\n // Proper usage of a sync.Pool requires each entry to have approximately\n // the same memory cost. To obtain this property when the stored type\n // contains a variably-sized buffer, we add a hard limit on the maximum buffer\n // to place back in the pool.\n //\n // See https://golang.org/issue/23199\n if cap(p.buf) > 64\nfmt.Printf()的调用是非常频繁的,利用 sync.Pool 复用 pp 对象能够极大地提升性能,减少内存占用,同时降低 GC 压力。 \npowered by Gitbook该文章修订时间:\n2022-05-07 20:50:26\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/3.并发编程/1.关于锁.html":{"url":"第四篇:最佳性能/3.并发编程/1.关于锁.html","title":"1.关于锁","keywords":"","body":"1.无锁化1.1 无锁数据结构1.2 串行无锁2.减少锁竞争3.优先使用共享锁而非互斥锁3.1 sync.Mutex3.2 sync.RWMutex3.3 性能对比1.无锁化\n加锁是为了避免在并发环境下,同时访问共享资源产生的安全问题。那么,在并发环境下,是否必须加锁?答案是否定的。并非所有的并发都需要加锁。适当地降低锁的粒度,甚至采用无锁化的设计,更能提升并发能力。\n无锁化主要有两种实现,无锁数据结构和串行无锁。\n1.1 无锁数据结构\n利用硬件支持的原子操作可以实现无锁的数据结构,原子操作可以在 lock-free 的情况下保证并发安全,并且它的性能也能做到随 CPU 个数的增多而线性扩展。很多语言都提供 CAS 原子操作(如 Go 中的 atomic 包和 C++11 中的 atomic 库),可以用于实现无锁数据结构,如无锁链表。\n我们以一个简单的线程安全单向链表的插入操作来看下无锁编程和普通加锁的区别。\npackage list\n\nimport (\n \"fmt\"\n \"sync\"\n \"sync/atomic\"\n\n \"golang.org/x/sync/errgroup\"\n)\n\n// Node 链表节点\ntype Node struct {\n Value interface{}\n Next *Node\n}\n\n//\n// 有锁单向链表的简单实现\n//\n\n// WithLockList 有锁单向链表\ntype WithLockList struct {\n Head *Node\n mu sync.Mutex\n}\n\n// Push 将元素插入到链表的首部\nfunc (l *WithLockList) Push(v interface{}) {\n l.mu.Lock()\n defer l.mu.Unlock()\n n := &Node{\n Value: v,\n Next: l.Head,\n }\n l.Head = n\n}\n\n// String 有锁链表的字符串形式输出\nfunc (l WithLockList) String() string {\n s := \"\"\n cur := l.Head\n for {\n if cur == nil {\n break\n }\n if s != \"\" {\n s += \",\"\n }\n s += fmt.Sprintf(\"%v\", cur.Value)\n cur = cur.Next\n }\n return s\n}\n\n//\n// 无锁单向链表的简单实现\n//\n\n// LockFreeList 无锁单向链表\ntype LockFreeList struct {\n Head atomic.Value\n}\n\n// Push 有锁\nfunc (l *LockFreeList) Push(v interface{}) {\n for {\n head := l.Head.Load()\n headNode, _ := head.(*Node)\n n := &Node{\n Value: v,\n Next: headNode,\n }\n if l.Head.CompareAndSwap(head, n) {\n break\n }\n }\n}\n\n// String 有锁链表的字符串形式输出\nfunc (l LockFreeList) String() string {\n s := \"\"\n cur := l.Head.Load().(*Node)\n for {\n if cur == nil {\n break\n }\n if s != \"\" {\n s += \",\"\n }\n s += fmt.Sprintf(\"%v\", cur.Value)\n cur = cur.Next\n }\n return s\n}\n\n上面的实现有几点需要注意一下:\n(1)无锁单向链表实现时在插入时需要进行 CAS 操作,即调用CompareAndSwap()方法进行插入,如果插入失败则进行 for 循环多次尝试,直至成功。\n(2)为了方便打印链表内容,实现一个String()方法遍历链表,且使用值作为接收者,避免打印对象指针时无法生效。\n\n\nIf an operand implements method String() string, that method will be invoked to convert the object to a string, which will then be formatted as required by the verb (if any).\n\n\n我们分别对两种链表做一个并发写入的操作验证一下其功能。\npackage main\n\nimport (\n \"fmt\"\n\n \"main/list\"\n)\n\n// ConcurWriteWithLockList 并发写入有锁链表\nfunc ConcurWriteWithLockList(l *WithLockList) {\n var g errgroup.Group\n // 10 个协程并发写入链表\n for i := 0; i \n注意,多次运行上面的main()函数的结果可能会不相同,因为并发是无序的。\n8,7,6,9,5,4,3,1,2,0\n9,8,7,6,5,4,3,2,0,1\n下面再看一下链表 Push 操作的基准测试,对比一下有锁与无锁的性能差异。\nfunc BenchmarkWriteWithLockList(b *testing.B) {\n l := &WithLockList{}\n for n := 0; n \n可以看出无锁版本比有锁版本性能高一些。\n1.2 串行无锁\n串行无锁是一种思想,就是避免对共享资源的并发访问,改为每个并发操作访问自己独占的资源,达到串行访问资源的效果,来避免使用锁。不同的场景有不同的实现方式。比如网络 I/O 场景下将单 Reactor 多线程模型改为主从 Reactor 多线程模型,避免对同一个消息队列锁读取。\n这里我介绍的是后台微服务开发经常遇到的一种情况。我们经常需要并发拉取多方面的信息,汇聚到一个变量上。那么此时就存在对同一个变量互斥写入的情况。比如批量并发拉取用户信息写入到一个 map。此时我们可以将每个协程拉取的结果写入到一个临时对象,这样便将并发地协程与同一个变量解绑,然后再将其汇聚到一起,这样便可以不用使用锁。即独立处理,然后合并。\n\n为了模拟上面的情况,简单地写个示例程序,对比下性能。\nimport (\n \"sync\"\n\n \"golang.org/x/sync/errgroup\"\n)\n\n// ConcurWriteMapWithLock 有锁并发写入 map\nfunc ConcurWriteMapWithLock() map[int]int {\n m := make(map[int]int)\n var mu sync.Mutex\n var g errgroup.Group\n // 10 个协程并发写入 map\n for i := 0; i \n看下二者的性能差异:\nfunc BenchmarkConcurWriteMapWithLock(b *testing.B) {\n for n := 0; n \n2.减少锁竞争\n如果加锁无法避免,则可以采用分片的形式,减少对资源加锁的次数,这样也可以提高整体的性能。\n比如 Golang 优秀的本地缓存组件 bigcache 、go-cache、freecache 都实现了分片功能,每个分片一把锁,采用分片存储的方式减少加锁的次数从而提高整体性能。\n以一个简单的示例,通过对map[uint64]struct{}分片前后并发写入的对比,来看下减少锁竞争带来的性能提升。\nvar (\n num = 1000000\n m0 = make(map[int]struct{}, num)\n mu0 = sync.RWMutex{}\n m1 = make(map[int]struct{}, num)\n mu1 = sync.RWMutex{}\n)\n\n// ConWriteMapNoShard 不分片写入一个 map。\nfunc ConWriteMapNoShard() {\n g := errgroup.Group{}\n for i := 0; i \n看下二者的性能差异:\nfunc BenchmarkConWriteMapNoShard(b *testing.B) {\n for i := 0; i \n可以看到,通过对分共享资源的分片处理,减少了锁竞争,能明显地提高程序的并发性能。可以预见的是,随着分片粒度地变小,性能差距会越来越大。当然,分片粒度不是越小越好。因为每一个分片都要配一把锁,那么会带来很多额外的不必要的开销。可以选择一个不太大的值,在性能和花销上寻找一个平衡。\n3.优先使用共享锁而非互斥锁\n如果并发无法做到无锁化,优先使用共享锁而非互斥锁。\n所谓互斥锁,指锁只能被一个 Goroutine 获得。共享锁指可以同时被多个 Goroutine 获得的锁。\nGo 标准库 sync 提供了两种锁,互斥锁(sync.Mutex)和读写锁(sync.RWMutex),读写锁便是共享锁的一种具体实现。\n3.1 sync.Mutex\n互斥锁的作用是保证共享资源同一时刻只能被一个 Goroutine 占用,一个 Goroutine 占用了,其他的 Goroutine 则阻塞等待。\n\nsync.Mutex 提供了两个导出方法用来使用锁。\nLock() // 加锁\nUnlock() // 释放锁\n\n我们可以通过在访问共享资源前前用 Lock 方法对资源进行上锁,在访问共享资源后调用 Unlock 方法来释放锁,也可以用 defer 语句来保证互斥锁一定会被解锁。在一个 Go 协程调用 Lock 方法获得锁后,其他请求锁的协程都会阻塞在 Lock 方法,直到锁被释放。\n3.2 sync.RWMutex\n读写锁是一种共享锁,也称之为多读单写锁 (multiple readers, single writer lock)。在使用锁时,对获取锁的目的操作做了区分,一种是读操作,一种是写操作。因为同一时刻允许多个 Gorouine 获取读锁,所以是一种共享锁。但写锁是互斥的。\n一般来说,有如下几种情况:\n\n读锁之间不互斥,没有写锁的情况下,读锁是无阻塞的,多个协程可以同时获得读锁。\n写锁之间是互斥的,存在写锁,其他写锁阻塞。\n写锁与读锁是互斥的,如果存在读锁,写锁阻塞,如果存在写锁,读锁阻塞。\n\n\nsync.RWMutex 提供了五个导出方法用来使用锁。\nLock() // 加写锁\nUnlock() // 释放写锁\nRLock() // 加读锁\nRUnlock() // 释放读锁\nRLocker() Locker // 返回读锁,使用 Lock() 和 Unlock() 进行 RLock() 和 RUnlock()\n\n读写锁的存在是为了解决读多写少时的性能问题,读场景较多时,读写锁可有效地减少锁阻塞的时间。\n3.3 性能对比\n大部分业务场景是读多写少,所以使用读写锁可有效提高对共享数据的访问效率。最坏的情况,只有写请求,那么读写锁顶多退化成互斥锁。所以优先使用读写锁而非互斥锁,可以提高程序的并发性能。\n接下来,我们测试三种情景下,互斥锁和读写锁的性能差异。\n\n读多写少(读占 80%)\n读写一致(各占 50%)\n读少写多(读占 20%)\n\n首先根据互斥锁和读写锁分别实现对共享 map 的并发读写。\n// OpMapWithMutex 使用互斥锁读写 map。\n// rpct 为读操作占比。\nfunc OpMapWithMutex(rpct int) {\n m := make(map[int]struct{})\n mu := sync.Mutex{}\n var wg sync.WaitGroup\n for i := 0; i = rpct {\n m[i] = struct{}{}\n time.Sleep(time.Microsecond)\n return\n }\n // 读操作。\n _ = m[i]\n time.Sleep(time.Microsecond)\n }()\n }\n wg.Wait()\n}\n\n// OpMapWithRWMutex 使用读写锁读写 map。\n// rpct 为读操作占比。\nfunc OpMapWithRWMutex(rpct int) {\n m := make(map[int]struct{})\n mu := sync.RWMutex{}\n var wg sync.WaitGroup\n for i := 0; i = rpct {\n mu.Lock()\n defer mu.Unlock()\n m[i] = struct{}{}\n time.Sleep(time.Microsecond)\n return\n }\n // 读操作。\n mu.RLock()\n defer mu.RUnlock()\n _ = m[i]\n time.Sleep(time.Microsecond)\n }()\n }\n wg.Wait()\n}\n\n入参 rpct 用来调节读操作的占比,来模拟读写占比不同的场景。rpct 设为 80 表示读多写少(读占 80%),rpct 设为 50 表示读写一致(各占 50%),rpct 设为 20 表示读少写多(读占 20%)。\nfunc BenchmarkMutexReadMore(b *testing.B) {\n for i := 0; i \n执行当前包下的所有基准测试,结果如下:\ndablelv@DABLELV-MB0 mutex % go test -bench=.\ngoos: darwin\ngoarch: amd64\npkg: main/mutex\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkMutexReadMore-12 2462 485917 ns/op\nBenchmarkRWMutexReadMore-12 8074 145690 ns/op\nBenchmarkMutexRWEqual-12 2406 498673 ns/op\nBenchmarkRWMutexRWEqual-12 4124 303693 ns/op\nBenchmarkMutexWriteMore-12 1906 532350 ns/op\nBenchmarkRWMutexWriteMore-12 2462 432386 ns/op\nPASS\nok main/mutex 9.532s\n\n可见读多写少的场景,使用读写锁并发性能会更优。可以预见的是如果写占比更低,那么读写锁带的并发效果会更优。\n这里需要注意的是,因为每次读写 map 的操作耗时很短,所以每次睡眠一微秒(百万分之一秒)来增加耗时,不然对共享资源的访问耗时,小于锁处理的本身耗时,那么使用读写锁带来的性能优化效果将变得不那么明显,甚至会降低性能。 \npowered by Gitbook该文章修订时间:\n2022-05-07 20:57:39\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/3.并发编程/2.限制协程数量.html":{"url":"第四篇:最佳性能/3.并发编程/2.限制协程数量.html","title":"2.限制协程数量","keywords":"","body":"1.协程数过多的问题1.1 程序崩溃1.2 协程的代价2.2 限制协程数量3.协程池化4.小结1.协程数过多的问题\n1.1 程序崩溃\nGo 程(goroutine)是由 Go 运行时管理的轻量级线程。通过它我们可以轻松实现并发编程。但是当我们无限开辟协程时,将会遇到致命的问题。\nfunc main() {\n var wg sync.WaitGroup\n for i := 0; i \n这个例子实现了 math.MaxInt32 个协程的并发,2^31 - 1 约为 20 亿个,每个协程内部几乎没有做什么事情。正常的情况下呢,这个程序会乱序输出 0 ~ 2^31-1 个数字。\n程序会像预期的那样顺利的运行吗?\ngo run main.go\n...\n108668\n1142025\npanic: too many concurrent operations on a single file or socket (max 1048575)\n\ngoroutine 1158408 [running]:\ninternal/poll.(*fdMutex).rwlock(0xc0000ae060, 0x0)\n /usr/local/go/src/internal/poll/fd_mutex.go:147 +0x11b\ninternal/poll.(*FD).writeLock(...)\n /usr/local/go/src/internal/poll/fd_mutex.go:239\ninternal/poll.(*FD).Write(0xc0000ae060, {0xc12cadf690, 0x8, 0x8})\n /usr/local/go/src/internal/poll/fd_unix.go:262 +0x72\nos.(*File).write(...)\n /usr/local/go/src/os/file_posix.go:49\nos.(*File).Write(0xc0000ac008, {0xc12cadf690, 0x1, 0xc12ea62f50})\n /usr/local/go/src/os/file.go:176 +0x65\nfmt.Fprintln({0x10c00e0, 0xc0000ac008}, {0xc12ea62f90, 0x1, 0x1})\n /usr/local/go/src/fmt/print.go:265 +0x75\nfmt.Println(...)\n /usr/local/go/src/fmt/print.go:274\nmain.main.func1(0x0)\n /Users/dablelv/work/code/test/main.go:16 +0x8f\n...\n\n运行的结果是程序直接崩溃了,关键的报错信息是:\npanic: too many concurrent operations on a single file or socket (max 1048575)\n对单个 file/socket 的并发操作个数超过了系统上限,这个报错是 fmt.Printf 函数引起的,fmt.Printf 将格式化后的字符串打印到屏幕,即标准输出。在 Linux 系统中,标准输出也可以视为文件,内核(Kernel)利用文件描述符(File Descriptor)来访问文件,标准输出的文件描述符为 1,错误输出文件描述符为 2,标准输入的文件描述符为 0。\n简而言之,系统的资源被耗尽了。\n那如果我们将 fmt.Printf 这行代码去掉呢?那程序很可能会因为内存不足而崩溃。这一点更好理解,每个协程至少需要消耗 2KB 的空间,那么假设计算机的内存是 4GB,那么至多允许 4GB/2KB = 1M 个协程同时存在。那如果协程中还存在着其他需要分配内存的操作,那么允许并发执行的协程将会数量级地减少。\n1.2 协程的代价\n前面的例子过于极端,一般情况下程序也不会无限开辟协程,旨在说明协程数量是有限制的,不能无限开辟。\n如果我们开辟很多协程,但不会导致程序崩溃,可以吗?如果真要这么做的话,我们应该清楚地知道,协程虽然轻量,但仍有开销。\nGo 的开销主要是三个方面:创建(占用内存)、调度(增加调度器负担)和删除(增加 GC 压力)。\n\n内存开销\n\n空间上,一个 Go 程占用约 2K 的内存,在源码 src/runtime/runtime2.go里面,我们可以找到 Go 程的结构定义type g struct。\n\n调度开销\n\n时间上,协程调度也会有 CPU 开销。我们可以利用runntime.Gosched()让当前协程主动让出 CPU 去执行另外一个协程,下面看一下协程之间切换的耗时。\nconst NUM = 10000\n\nfunc cal() {\n for i := 0; i \n运行输出:\ntotal 997200ns per 99ns\n可见一次协程的切换,耗时大概在 100ns,相对于线程的微秒级耗时切换,性能表现非常优秀,但是仍有开销。\n\nGC 开销\n创建 Go 程到运行结束,占用的内存资源是需要由 GC 来回收,如果无休止地创建大量 Go 程后,势必会造成对 GC 的压力。\n```go\npackage main\n\nimport (\n \"fmt\"\n \"runtime\"\n \"runtime/debug\"\n \"sync\"\n \"time\"\n)\nfunc createLargeNumGoroutine(num int, wg *sync.WaitGroup) {\n wg.Add(num)\n for i := 0; i \nfunc main() {\n // 只设置一个 Processor 保证 Go 程串行执行\n runtime.GOMAXPROCS(1)\n // 关闭GC改为手动执行\n debug.SetGCPercent(-1)\nvar wg sync.WaitGroup\ncreateLargeNumGoroutine(1000, &wg)\nwg.Wait()\nt := time.Now()\nruntime.GC() // 手动GC\ncost := time.Since(t)\nfmt.Printf(\"GC cost %v when goroutine num is %v\\n\", cost, 1000)\n\ncreateLargeNumGoroutine(10000, &wg)\nwg.Wait()\nt = time.Now()\nruntime.GC() // 手动GC\ncost = time.Since(t)\nfmt.Printf(\"GC cost %v when goroutine num is %v\\n\", cost, 10000)\n\ncreateLargeNumGoroutine(100000, &wg)\nwg.Wait()\nt = time.Now()\nruntime.GC() // 手动GC\ncost = time.Since(t)\nfmt.Printf(\"GC cost %v when goroutine num is %v\\n\", cost, 100000)\n}\n运行输出:\n```shell\nGC cost 0s when goroutine num is 1000\nGC cost 2.0027ms when goroutine num is 10000\nGC cost 30.9523ms when goroutine num is 100000\n当创建的 Go 程数量越多,GC 耗时越大。\n上面的分析目的是为了尽可能地量化 Goroutine 的开销。虽然官方宣称用 Golang 写并发程序的时候随便起个成千上万的 Goroutine 毫无压力,但当我们起十万、百万甚至千万个 Goroutine 呢?Goroutine 轻量的开销将被放大。\n2.2 限制协程数量\n系统地资源是有限,协程是有代价的,为了保护程序,提高性能,我们应主动限制并发的协程数量。\n可以利用信道 channel 的缓冲区大小来实现。\nfunc main() {\n var wg sync.WaitGroup\n ch := make(chan struct{}, 3)\n for i := 0; i \n上例中创建了缓冲区大小为 3 的 channel,在没有被接收的情况下,至多发送 3 个消息则被阻塞。开启协程前,调用ch ,若缓存区满,则阻塞。协程任务结束,调用 \nsync.WaitGroup 并不是必须的,例如 Http 服务,每个请求天然是并发的,此时使用 channel 控制并发处理的任务数量,就不需要 sync.WaitGroup。\n运行结果如下:\n2022/03/06 20:37:02 0\n2022/03/06 20:37:02 2\n2022/03/06 20:37:02 1\n2022/03/06 20:37:03 3\n2022/03/06 20:37:03 4\n2022/03/06 20:37:03 5\n2022/03/06 20:37:04 6\n2022/03/06 20:37:04 7\n2022/03/06 20:37:04 8\n2022/03/06 20:37:05 9\n\n从日志中可以很容易看到,每秒钟只并发执行了 3 个任务,达到了协程并发控制的目的。\n3.协程池化\n上面的例子只是简单地限制了协程开辟的数量。在此基础之上,基于对象复用的思想,我们可以重复利用已开辟的协程,避免协程的重复创建销毁,达到池化的效果。\n协程池化,我们可以自己写一个协程池,但不推荐这么做。因为已经有成熟的开源库可供使用,无需再重复造轮子。目前有很多第三方库实现了协程池,可以很方便地用来控制协程的并发数量,比较受欢迎的有:\n\nJeffail/tunny\npanjf2000/ants\n\n下面以 panjf2000/ants 为例,简单介绍其使用。\nants 是一个简单易用的高性能 Goroutine 池,实现了对大规模 Goroutine 的调度管理和复用,允许使用者在开发并发程序的时候限制 Goroutine 数量,复用协程,达到更高效执行任务的效果。\npackage main\n\nimport (\n \"fmt\"\n \"time\"\n\n \"github.com/panjf2000/ants\"\n)\n\nfunc main() {\n // Use the common pool\n for i := 0; i \n使用 ants,我们简单地使用其默认的协程池,直接将任务提交并发执行。默认协程池的缺省容量 math.MaxInt32。\n如果自定义协程池容量大小,可以调用 NewPool 方法来实例化具有给定容量的池,如下所示:\n// Set 10000 the size of goroutine pool\np, _ := ants.NewPool(10000)\n\n4.小结\nGolang 为并发而生。Goroutine 是由 Go 运行时管理的轻量级线程,通过它我们可以轻松实现并发编程。Go 虽然轻量,但天下没有免费的午餐,无休止地开辟大量 Go 程势必会带来性能影响,甚至程序崩溃。所以,我们应尽可能的控制协程数量,如果有需要,请复用它。 \npowered by Gitbook该文章修订时间:\n2022-05-07 20:59:41\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html":{"url":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.html","title":"3.使用 sync.Once 避免重复执行","keywords":"","body":"1.简介2.原理2.1 源码2.2 done 为什么是第一个字段?3.性能差异1.简介\nsync.Once 是 Go 标准库提供的使函数只执行一次的实现,常应用于单例模式,例如初始化配置、保持数据库连接等。作用与 init 函数类似,但有区别。\n\ninit 函数是当所在的 package 首次被加载时执行,若迟迟未被使用,则既浪费了内存,又延长了程序加载时间。\nsync.Once 可以在代码的任意位置初始化和调用,因此可以延迟到使用时再执行,并发场景下是线程安全的。\n\n在多数情况下,sync.Once 被用于控制变量的初始化,这个变量的读写满足如下三个条件:\n\n当且仅当第一次访问某个变量时,进行初始化(写);\n变量初始化过程中,所有读都被阻塞,直到初始化完成;\n变量仅初始化一次,初始化完成后驻留在内存里。\n\n2.原理\nsync.Once 用来保证函数只执行一次。要达到这个效果,需要做到两点:\n\n计数器,统计函数执行次数;\n线程安全,保障在多 Go 程的情况下,函数仍然只执行一次,比如锁。\n\n2.1 源码\n下面看一下 sync.Once 结构,其有两个变量。使用 done 统计函数执行次数,使用锁 m 实现线程安全。果不其然,和上面的猜想一致。\n// Once is an object that will perform exactly one action.\n//\n// A Once must not be copied after first use.\ntype Once struct {\n // done indicates whether the action has been performed.\n // It is first in the struct because it is used in the hot path.\n // The hot path is inlined at every call site.\n // Placing done first allows more compact instructions on some architectures (amd64/386),\n // and fewer instructions (to calculate offset) on other architectures.\n done uint32\n m Mutex\n}\n\nsync.Once 仅提供了一个导出方法 Do(),参数 f 是只会被执行一次的函数,一般为对象初始化函数。\n// go version go1.17 darwin/amd64\n\n// Do calls the function f if and only if Do is being called for the\n// first time for this instance of Once. In other words, given\n// var once Once\n// if once.Do(f) is called multiple times, only the first call will invoke f,\n// even if f has a different value in each invocation. A new instance of\n// Once is required for each function to execute.\n//\n// Do is intended for initialization that must be run exactly once. Since f\n// is niladic, it may be necessary to use a function literal to capture the\n// arguments to a function to be invoked by Do:\n// config.once.Do(func() { config.init(filename) })\n//\n// Because no call to Do returns until the one call to f returns, if f causes\n// Do to be called, it will deadlock.\n//\n// If f panics, Do considers it to have returned; future calls of Do return\n// without calling f.\n//\nfunc (o *Once) Do(f func()) {\n // Note: Here is an incorrect implementation of Do:\n //\n // if atomic.CompareAndSwapUint32(&o.done, 0, 1) {\n // f()\n // }\n //\n // Do guarantees that when it returns, f has finished.\n // This implementation would not implement that guarantee:\n // given two simultaneous calls, the winner of the cas would\n // call f, and the second would return immediately, without\n // waiting for the first's call to f to complete.\n // This is why the slow path falls back to a mutex, and why\n // the atomic.StoreUint32 must be delayed until after f returns.\n\n if atomic.LoadUint32(&o.done) == 0 {\n // Outlined slow-path to allow inlining of the fast-path.\n o.doSlow(f)\n }\n}\n\nfunc (o *Once) doSlow(f func()) {\n o.m.Lock()\n defer o.m.Unlock()\n if o.done == 0 {\n defer atomic.StoreUint32(&o.done, 1)\n f()\n }\n}\n\n抛去大段的注释,可以看到 sync.Once 实现非常简洁。Do() 函数中,通过对成员变量 done 的判断,来决定是否执行传入的任务函数。执行任务函数前,通过锁保证任务函数的执行和 done 的修改是一个互斥操作。在执行任务函数前,对 done 做一个二次判断,来保证任务函数只会被执行一次,done 只会被修改一次。\n2.2 done 为什么是第一个字段?\n从字段 done 前有一段注释,说明了done 为什么是第一个字段。\ndone 在热路径中,done 放在第一个字段,能够减少 CPU 指令,也就是说,这样做能够提升性能。\n热路径(hot path)是程序非常频繁执行的一系列指令,sync.Once 绝大部分场景都会访问 o.done,在热路径上是比较好理解的。如果 hot path 编译后的机器码指令更少,更直接,必然是能够提升性能的。\n为什么放在第一个字段就能够减少指令呢?因为结构体第一个字段的地址和结构体的指针是相同的,如果是第一个字段,直接对结构体的指针解引用即可。如果是其他的字段,除了结构体指针外,还需要计算与第一个值的偏移(calculate offset)。在机器码中,偏移量是随指令传递的附加值,CPU 需要做一次偏移值与指针的加法运算,才能获取要访问的值的地址。因为,访问第一个字段的机器代码更紧凑,速度更快。\n\n参考 What does “hot path” mean in the context of sync.Once? - StackOverflow\n\n3.性能差异\n我们以一个简单示例,来说明使用 sync.Once 保证函数只会被执行一次和多次执行,二者的性能差异。\n考虑一个简单的场景,函数 ReadConfig 需要读取环境变量,并转换为对应的配置。环境变量在程序执行前已经确定,执行过程中不会发生改变。ReadConfig 可能会被多个协程并发调用,为了提升性能(减少执行时间和内存占用),使用 sync.Once 是一个比较好的方式。\ntype Config struct {\n GoRoot string\n GoPath string\n}\n\nvar (\n once sync.Once\n config *Config\n)\n\nfunc ReadConfigWithOnce() *Config {\n once.Do(func() {\n config = &Config{\n GoRoot: os.Getenv(\"GOROOT\"),\n GoPath: os.Getenv(\"GOPATH\"),\n }\n })\n return config\n}\n\nfunc ReadConfig() *Config {\n return &Config{\n GoRoot: os.Getenv(\"GOROOT\"),\n GoPath: os.Getenv(\"GOPATH\"),\n }\n}\n\n我们看下二者的性能差异。\nfunc BenchmarkReadConfigWithOnce(b *testing.B) {\n for i := 0; i \n执行测试结果如下:\ngo test -bench=. main/once\ngoos: darwin\ngoarch: amd64\npkg: main/once\ncpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz\nBenchmarkReadConfigWithOnce-12 670438965 1.732 ns/op\nBenchmarkReadConfig-12 13339154 87.46 ns/op\nPASS\nok main/once 3.006s\n\nsync.Once 中保证了 Config 初始化函数仅执行了一次,避免了多次重复初始化,在并发环境下很有用。 \npowered by Gitbook该文章修订时间:\n2022-05-07 21:02:49\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html":{"url":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.html","title":"4.使用 sync.Cond 通知协程","keywords":"","body":"1.简介2.使用场景3.实现原理4.使用示例5.注意事项1.简介\nsync.Cond 是基于互斥锁/读写锁实现的条件变量,用来协调想要访问共享资源的那些 Goroutine。当共享资源的状态发生变化的时候,sync.Cond 可以用来通知等待条件发生而阻塞的 Goroutine。\nsync.Cond 基于互斥锁/读写锁,那它和互斥锁的区别是什么呢?\n互斥锁 sync.Mutex 通常用来保护共享的临界资源,条件变量 sync.Cond 用来协调想要访问共享资源的 Goroutine。当共享资源的状态发生变化时,sync.Cond 可以用来通知被阻塞的 Goroutine。\n2.使用场景\nsync.Cond 经常用在多个 Goroutine 等待,一个 Goroutine 通知(事件发生)的场景。如果是一个通知,一个等待,使用互斥锁或 channel 就能搞定了。\n我们想象一个非常简单的场景:\n有一个协程在异步地接收数据,剩下的多个协程必须等待这个协程接收完数据,才能读取到正确的数据。在这种情况下,如果单纯使用 chan 或互斥锁,那么只能有一个协程可以等待,并读取到数据,没办法通知其他的协程也读取数据。\n这个时候,就需要有个全局的变量来标志第一个协程数据是否接受完毕,剩下的协程,反复检查该变量的值,直到满足要求。或者创建多个 channel,每个协程阻塞在一个 channel 上,由接收数据的协程在数据接收完毕后,逐个通知。总之,需要额外的复杂度来完成这件事。\nGo 语言在标准库 sync 中内置一个 sync.Cond 用来解决这类问题。\n3.实现原理\nsync.Cond 内部维护了一个等待队列,队列中存放的是所有在等待这个 sync.Cond 的 Go 程,即保存了一个通知列表。sync.Cond 可以用来唤醒一个或所有因等待条件变量而阻塞的 Go 程,以此来实现多个 Go 程间的同步。\nsync.Cond 的定义如下:\n// Cond implements a condition variable, a rendezvous point\n// for goroutines waiting for or announcing the occurrence\n// of an event.\n//\n// Each Cond has an associated Locker L (often a *Mutex or *RWMutex),\n// which must be held when changing the condition and\n// when calling the Wait method.\n//\n// A Cond must not be copied after first use.\ntype Cond struct {\n noCopy noCopy\n\n // L is held while observing or changing the condition\n L Locker\n\n notify notifyList\n checker copyChecker\n}\n\n每个 Cond 实例都会关联一个锁 L(互斥锁 Mutex,或读写锁 RWMutex),当修改条件或者调用 Wait 方法时,必须加锁。\nsync.Cond 的四个成员函数定义如下:\n// NewCond returns a new Cond with Locker l.\nfunc NewCond(l Locker) *Cond {\n return &Cond{L: l}\n}\n\nNewCond 创建 Cond 实例时,需要关联一个锁。\n// Wait atomically unlocks c.L and suspends execution\n// of the calling goroutine. After later resuming execution,\n// Wait locks c.L before returning. Unlike in other systems,\n// Wait cannot return unless awoken by Broadcast or Signal.\n//\n// Because c.L is not locked when Wait first resumes, the caller\n// typically cannot assume that the condition is true when\n// Wait returns. Instead, the caller should Wait in a loop:\n//\n// c.L.Lock()\n// for !condition() {\n// c.Wait()\n// }\n// ... make use of condition ...\n// c.L.Unlock()\n//\nfunc (c *Cond) Wait() {\n c.checker.check()\n t := runtime_notifyListAdd(&c.notify)\n c.L.Unlock()\n runtime_notifyListWait(&c.notify, t)\n c.L.Lock()\n}\n\nWait 用于阻塞调用者,等待通知。\n调用 Wait 会自动释放锁 c.L,因为 Wait() 会将主调加入条件变量的通知列表,需要修改条件变量,所以主调在调用 Wait() 前需要对条件变量进行上锁,主调加入条件变量的通知列表后再解锁。\n执行runtime_notifyListWait会挂起调用者所在的 Goroutine。如果其他协程调用了 Signal 或 Broadcast 唤醒了该协程,那么 Wait 方法在结束阻塞时,会重新给 c.L 加锁,并且继续执行 Wait 后面的代码。\n主调对条件的检查,使用了 for !condition() 而非 if,是因为当前协程被唤醒时,条件不一定符合要求,需要再次 Wait 等待下次被唤醒。为了保险起,使用 for 能够确保被唤醒后条件一定符合后,再执行后续的代码。\n// Signal wakes one goroutine waiting on c, if there is any.\n//\n// It is allowed but not required for the caller to hold c.L\n// during the call.\nfunc (c *Cond) Signal() {\n c.checker.check()\n runtime_notifyListNotifyOne(&c.notify)\n}\n\n// Broadcast wakes all goroutines waiting on c.\n//\n// It is allowed but not required for the caller to hold c.L\n// during the call.\nfunc (c *Cond) Broadcast() {\n c.checker.check()\n runtime_notifyListNotifyAll(&c.notify)\n}\n\nSignal 只唤醒任意 1 个等待条件变量 c 的 goroutine,无需锁保护。Broadcast 唤醒所有等待条件变量 c 的 goroutine,无需锁保护。\n4.使用示例\n我们实现一个简单的例子,三个协程调用 Wait() 等待,另一个协程调用 Broadcast() 唤醒所有等待的协程。\nvar done = false\n\nfunc read(name string, c *sync.Cond) {\n c.L.Lock()\n for !done {\n c.Wait()\n }\n fmt.Println(name, \"starts reading\")\n c.L.Unlock()\n}\n\nfunc write(name string, c *sync.Cond) {\n fmt.Println(name, \"starts writing\")\n time.Sleep(time.Second)\n done = true\n fmt.Println(name, \"wakes all\")\n c.Broadcast()\n}\n\nfunc main() {\n cond := sync.NewCond(&sync.Mutex{})\n\n go read(\"reader1\", cond)\n go read(\"reader2\", cond)\n go read(\"reader3\", cond)\n write(\"writer\", cond)\n\n time.Sleep(time.Second * 3)\n}\n\n\ndone 即多个 Goroutine 阻塞等待的条件。\nread() 调用 Wait() 等待通知,直到 done 为 true。\nwrite() 接收数据,接收完成后,将 done 置为 true,调用 Broadcast() 通知所有等待的协程。\nwrite() 中的暂停了 1s,一方面是模拟耗时,另一方面是确保前面的 3 个 read 协程都执行到 Wait(),处于等待状态。main 函数最后暂停了 3s,确保所有操作执行完毕。\n\n运行结果如下,注意 reader 的打印顺序是随机的。\n$ go run main.go\nwriter starts writing\nwriter wakes all\nreader3 starts reading\nreader1 starts reading\nreader2 starts reading\n\n更多关于 sync.Cond 的讨论可参考 How to correctly use sync.Cond? - StackOverflow。\n5.注意事项\n\nsync.Cond 不能被复制\n\nsync.Cond 不能被复制的原因,并不是因为其内部嵌套了 Locker。因为 NewCond 时传入的 Mutex/RWMutex 指针,对于 Mutex 指针复制是没有问题的。\n主要原因是 sync.Cond 内部是维护着一个 Goroutine 通知队列 notifyList。如果这个队列被复制的话,那么就在并发场景下导致不同 Goroutine 之间操作的 notifyList.wait、notifyList.notify 并不是同一个,这会导致出现有些 Goroutine 会一直阻塞。\n\n唤醒顺序\n\n从等待队列中按照顺序唤醒,先进入等待队列,先被唤醒。\n\n调用 Wait() 前要加锁\n\n调用 Wait() 函数前,需要先获得条件变量的成员锁,原因是需要互斥地变更条件变量的等待队列。在 Wait() 返回前,会重新上锁。重新上锁的原因是主调在 Wait 后会进行解锁操作,避免重复解锁引发 panic。\n\nsync.Cond 和 channel 的区别?\n\n实际上,我们可以使用无缓冲 channel 充当条件变量实现 Go 程同步。通过 close(ch) 表示广播通知,其他的 Goroutine 使用 for select 结构来接收通知就行了。\n还是以上面给出的同步示例,这里换作 channel 来实现。\nvar done = false\nvar ch = make(chan struct{})\n\nfunc read(name string) {\n for !done {\n select {\n case \n运行输出如下,注意 reader 的打印顺序是随机的。\n$ go run main.go\nwriter starts writing\nwriter wakes all\nreader1 starts reading\nreader3 starts reading\nreader2 starts reading\n\n既然 channel 可以实现,看起来代码更加简洁,那么 sync.Cond 的存在还有必要吗?\n实际上 sync.Cond 与 Channel 是有区别的,channel 定位于通信,用于一发一收的场景,sync.Cond 定位于同步,用于一发多收的场景。虽然 channel 可以通过 close 操作来达到一发多收的效果,但是 closed 的 channel 已无法继续使用,而 sync.Cond 依旧可以继续使用。这可能就是“全能”与“专精”的区别。 \npowered by Gitbook该文章修订时间:\n2022-05-09 20:35:37\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"},"参考文献.html":{"url":"参考文献.html","title":"参考文献","keywords":"","body":"项目布局代码风格功能设计最佳性能项目布局\ngithub.com/golang-standards/project-layout\n代码风格\nGo Code Review Comments\nGolang Readability 考点汇总\n功能设计\ngithub.com/uber-go/guide\nGo语言最佳实践Go-advice\n最佳性能\ngo-proverbs\ngithub/dgryski/go-perfbook\nHigh Performance Go Workshop - Dave Cheney\natomic 的原理与使用场景\n极客兔兔 | Go 语言高性能编程\n深度解密Go 语言之sync.Pool - Stefno - 博客园\nGolang内存分配逃逸分析 - Gopherzhang\nGo语言的内存逃逸分析 - Golang梦工厂 \npowered by Gitbook该文章修订时间:\n2022-05-10 09:47:59\n\nconsole.log(\"plugin-popup....\");document.onclick = function(e){ e.target.tagName === \"IMG\" && window.open(e.target.src,e.target.src)}img{cursor:pointer}"}}} \ No newline at end of file diff --git a/docs/styles/website.css b/docs/styles/website.css index 1e502a0..32807f9 100644 --- a/docs/styles/website.css +++ b/docs/styles/website.css @@ -1,8 +1,4 @@ .custom-link{ text-align: center; font-weight: bold; -} - -.active, span{ - font-weight: bold; } \ No newline at end of file diff --git "a/docs/\345\217\202\350\200\203\346\226\207\347\214\256.html" "b/docs/\345\217\202\350\200\203\346\226\207\347\214\256.html" index 5c953a0..07ba91d 100644 --- "a/docs/\345\217\202\350\200\203\346\226\207\347\214\256.html" +++ "b/docs/\345\217\202\350\200\203\346\226\207\347\214\256.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1013,7 +1009,7 @@

                                                                                          Golang内存分配逃逸分析 - Gopherzhang

                                                                                          Go语言的内存逃逸分析 - Golang梦工厂

                                                                                          powered by Gitbook该文章修订时间: -2022-05-09 22:37:19 +2022-05-10 09:47:59
                                                                                          @@ -1054,7 +1050,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"参考文献","level":"1.6","depth":1,"previous":{"title":"4.使用 sync.Cond 通知协程","level":"1.5.4.4","depth":3,"path":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.md","ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"参考文献.md","mtime":"2022-05-09T14:37:19.044Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":".","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"参考文献","level":"1.6","depth":1,"previous":{"title":"4.使用 sync.Cond 通知协程","level":"1.5.4.4","depth":3,"path":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.md","ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"参考文献.md","mtime":"2022-05-10T01:47:59.840Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":".","book":{"language":""}}); }); @@ -1064,10 +1060,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\270\200\347\257\207\357\274\232\351\241\271\347\233\256\345\270\203\345\261\200/\351\241\271\347\233\256\345\270\203\345\261\200.html" "b/docs/\347\254\254\344\270\200\347\257\207\357\274\232\351\241\271\347\233\256\345\270\203\345\261\200/\351\241\271\347\233\256\345\270\203\345\261\200.html" index 76e66e9..4a1db9b 100644 --- "a/docs/\347\254\254\344\270\200\347\257\207\357\274\232\351\241\271\347\233\256\345\270\203\345\261\200/\351\241\271\347\233\256\345\270\203\345\261\200.html" +++ "b/docs/\347\254\254\344\270\200\347\257\207\357\274\232\351\241\271\347\233\256\345\270\203\345\261\200/\351\241\271\347\233\256\345\270\203\345\261\200.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1116,7 +1112,7 @@

                                                                                          Wikipedia List of ISO 639-1 codes

                                                                                          Official ISO 639 list

                                                                                          powered by Gitbook该文章修订时间: -2022-05-01 19:54:14 +2022-05-18 14:53:51
                                                                                          @@ -1153,7 +1149,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"项目布局","level":"1.2.1","depth":2,"next":{"title":"第二篇:代码风格","level":"1.3","depth":1,"ref":"","articles":[{"title":"1.格式化","level":"1.3.1","depth":2,"path":"第二篇:代码风格/1.格式化.md","ref":"第二篇:代码风格/1.格式化.md","articles":[]},{"title":"2.代码行","level":"1.3.2","depth":2,"path":"第二篇:代码风格/2.代码行.md","ref":"第二篇:代码风格/2.代码行.md","articles":[]},{"title":"3.字符串","level":"1.3.3","depth":2,"path":"第二篇:代码风格/3.字符串.md","ref":"第二篇:代码风格/3.字符串.md","articles":[]},{"title":"4.依赖管理","level":"1.3.4","depth":2,"path":"第二篇:代码风格/4.依赖管理.md","ref":"第二篇:代码风格/4.依赖管理.md","articles":[]},{"title":"5.初始化","level":"1.3.5","depth":2,"path":"第二篇:代码风格/5.初始化.md","ref":"第二篇:代码风格/5.初始化.md","articles":[]},{"title":"6.错误处理","level":"1.3.6","depth":2,"path":"第二篇:代码风格/6.错误处理.md","ref":"第二篇:代码风格/6.错误处理.md","articles":[]},{"title":"7.注释","level":"1.3.7","depth":2,"path":"第二篇:代码风格/7.注释.md","ref":"第二篇:代码风格/7.注释.md","articles":[]},{"title":"8.命名","level":"1.3.8","depth":2,"path":"第二篇:代码风格/8.命名.md","ref":"第二篇:代码风格/8.命名.md","articles":[]},{"title":"9.流程控制","level":"1.3.9","depth":2,"path":"第二篇:代码风格/9.流程控制.md","ref":"第二篇:代码风格/9.流程控制.md","articles":[]},{"title":"10.函数","level":"1.3.10","depth":2,"path":"第二篇:代码风格/10.函数.md","ref":"第二篇:代码风格/10.函数.md","articles":[]},{"title":"11.单元测试","level":"1.3.11","depth":2,"path":"第二篇:代码风格/11.单元测试.md","ref":"第二篇:代码风格/11.单元测试.md","articles":[]},{"title":"12.杂项","level":"1.3.12","depth":2,"path":"第二篇:代码风格/12.杂项.md","ref":"第二篇:代码风格/12.杂项.md","articles":[]}]},"previous":{"title":"第一篇:项目布局","level":"1.2","depth":1,"ref":"","articles":[{"title":"项目布局","level":"1.2.1","depth":2,"path":"第一篇:项目布局/项目布局.md","ref":"第一篇:项目布局/项目布局.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第一篇:项目布局/项目布局.md","mtime":"2022-05-01T11:54:14.168Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"项目布局","level":"1.2.1","depth":2,"next":{"title":"第二篇:代码风格","level":"1.3","depth":1,"ref":"","articles":[{"title":"1.格式化","level":"1.3.1","depth":2,"path":"第二篇:代码风格/1.格式化.md","ref":"第二篇:代码风格/1.格式化.md","articles":[]},{"title":"2.代码行","level":"1.3.2","depth":2,"path":"第二篇:代码风格/2.代码行.md","ref":"第二篇:代码风格/2.代码行.md","articles":[]},{"title":"3.字符串","level":"1.3.3","depth":2,"path":"第二篇:代码风格/3.字符串.md","ref":"第二篇:代码风格/3.字符串.md","articles":[]},{"title":"4.依赖管理","level":"1.3.4","depth":2,"path":"第二篇:代码风格/4.依赖管理.md","ref":"第二篇:代码风格/4.依赖管理.md","articles":[]},{"title":"5.初始化","level":"1.3.5","depth":2,"path":"第二篇:代码风格/5.初始化.md","ref":"第二篇:代码风格/5.初始化.md","articles":[]},{"title":"6.错误处理","level":"1.3.6","depth":2,"path":"第二篇:代码风格/6.错误处理.md","ref":"第二篇:代码风格/6.错误处理.md","articles":[]},{"title":"7.注释","level":"1.3.7","depth":2,"path":"第二篇:代码风格/7.注释.md","ref":"第二篇:代码风格/7.注释.md","articles":[]},{"title":"8.命名","level":"1.3.8","depth":2,"path":"第二篇:代码风格/8.命名.md","ref":"第二篇:代码风格/8.命名.md","articles":[]},{"title":"9.流程控制","level":"1.3.9","depth":2,"path":"第二篇:代码风格/9.流程控制.md","ref":"第二篇:代码风格/9.流程控制.md","articles":[]},{"title":"10.函数","level":"1.3.10","depth":2,"path":"第二篇:代码风格/10.函数.md","ref":"第二篇:代码风格/10.函数.md","articles":[]},{"title":"11.单元测试","level":"1.3.11","depth":2,"path":"第二篇:代码风格/11.单元测试.md","ref":"第二篇:代码风格/11.单元测试.md","articles":[]},{"title":"12.杂项","level":"1.3.12","depth":2,"path":"第二篇:代码风格/12.杂项.md","ref":"第二篇:代码风格/12.杂项.md","articles":[]}]},"previous":{"title":"第一篇:项目布局","level":"1.2","depth":1,"ref":"","articles":[{"title":"项目布局","level":"1.2.1","depth":2,"path":"第一篇:项目布局/项目布局.md","ref":"第一篇:项目布局/项目布局.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第一篇:项目布局/项目布局.md","mtime":"2022-05-18T06:53:51.328Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"..","book":{"language":""}}); }); @@ -1163,10 +1159,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\270\200\347\257\207\357\274\232\351\241\271\347\233\256\345\270\203\345\261\200/\351\241\271\347\233\256\345\270\203\345\261\200.md" "b/docs/\347\254\254\344\270\200\347\257\207\357\274\232\351\241\271\347\233\256\345\270\203\345\261\200/\351\241\271\347\233\256\345\270\203\345\261\200.md" new file mode 100644 index 0000000..426b88f --- /dev/null +++ "b/docs/\347\254\254\344\270\200\347\257\207\357\274\232\351\241\271\347\233\256\345\270\203\345\261\200/\351\241\271\347\233\256\345\270\203\345\261\200.md" @@ -0,0 +1,175 @@ +# 1.前言 +不管是什么语言,开发什么项目,一个稍大的项目,必然要面临如何管理项目结构布局的问题,因为一个简洁清晰的布局是项目可读的关键。 + +有些语言自身提供了目录结构规范,但对于较为年轻的 Golang,目前官方团队并未提供权威规范。不过不用担心,我们依然有一个规范可以参考,那就是业界推崇的 [Standard Go Project Layout](https://github.com/golang-standards/project-layout)。 + +# 2.项目布局 +## 2.1 整体风格 +你的项目结构布局看起来应该像下面这个样子。 +```shell +# Go 代码目录 +|--cmd 可执行文件目录 +|--internal 私有库代码(仅本项目使用) +|--pkg 公有库代码(外部项目可以使用) +|--vendor 外部依赖库 + +# 服务应用程序目录 +|--api 服务对外接口 + +# Web 应用程序目录 +|--web Web 应用程序的组件 + +# 通用应用目录 +|--configs 配置信息 +|--init 初始化信息 +|--scripts 执行各种构建、安装、分析等操作的脚本 +|--build 打包和持续集成 + |-- package 构建依赖包 + |-- ci 持续集成配置与脚本 +|--deployments 部署相关 +|--test 测试相关 +|--README.md 项目说明 + +# 其他目录 +|--docs 项目文档 +|--tools 项目工具 +|--examples 应用程序和公共库的示例 +|--third_party 外部辅助工具 +|--githooks Git 钩子 +|--assets 项目资源文件 +|--website 项目网站数据 + +# 不应该拥有的目录 +|--src 源码目录 +``` +## 2.2 Go 代码目录 +### /cmd +可执行文件目录。 + +通常只包含一个简单的 main 函数,调用 /internal 和 /pkg 中的代码,作为项目的主应用目录。目录也可以包含多个可执行文件,子目录名称一般与可执行文件相对应(如:/cmd/myapp )。 + +不要在该目录下放太多的代码,如果代码可以被其他项目导入使用,请放到 /pkg 目录下, 如果代码不可复用或者你不希望其他项目使用,请放到 /internal 目录下。 + +### /internal +私有库代码(仅本项目使用)。 + +这里放不希望被其他应用程序或者库导入的代码。注意:从 Go1.4 起,从编译器层面限制该目录不可被导出,而且不只是项目根目录下的 internal,所有名为 internal 的子目录都不能被导出。 + +你还可以在 internal 目录内部增加一些代码结构来区分共享和非共享的。虽然它并不是必须的(尤其是小的项目),但是最好能从视觉上区分包的用途。 你实际的代码可以放在 /internal/app/myapp 中,而应用的共享代码可以放在 /internal/pkg/ 目录下。 + +### /pkg +公有库代码(外部项目可以使用)。 + +这里放希望被其他应用程序或者库导入的代码,所以在这里放东西之前要三思。 + +含有 /pkg 目录的项目结构是一种常见的布局模式,但并不是所有人都接受它,一些 Go 社区的人并不推荐它。 + +### /vendor +外部依赖库。 + +如果手动管理依赖包可以将依赖包放到该目录,当然推荐使用依赖包管理工具 [Go Modules](https://github.com/golang/go/wiki/Modules) 进行自动化管理。 + +注意,1.11 开始,官方推荐使用新的依赖管理系统 [Go Modules](https://github.com/golang/go/wiki/Modules)。从 1.13 以后,Go 还启用了模块代理功能(默认使用 https://proxy.golang.org 作为他们的模块代理服务器)。使用 Go Modules,我们并不需要 vendor 目录。 + +## 2.3 服务应用程序目录 +### /api +服务对外接口。 + +这里是服务对外接口的实现,定义接口时,我们应该遵循 [OpenAPI Specification](https://spec.openapis.org/oas/latest.html)。 + +## 2.4 Web 应用程序目录 +### /web +存放 Web 应用程序特定组件,如静态 Web 资源、服务器端模板和 SPA(Single Page Application)。 + +## 2.5 通用应用目录 +### /configs +配置信息。 + +如不同环境(测试、正式)的服务配置信息。 + +### /init +初始化信息。 + +系统初始化(systemd, upstart, sysv)和进程管理(runit, supervisord)配置。 + +### /scripts +执行各种构建、安装、分析等操作的脚本。 + +这些脚本帮助根目录下 Makefile(如果有的话)变得小而简单,例如 [github/hashicorp/terraform/Makefile](https://github.com/hashicorp/terraform/blob/master/Makefile)。 + +### /build +打包和持续集成。 + +将你的云( AMI )、容器( Docker )、操作系统( deb、rpm、pkg )包配置和脚本放在 /build/package 目录下。 + +将你的 CI (travis、circle、drone)配置和脚本放在 /build/ci 目录下。 + +### /deployments +部署相关。 + +如 IaaS、PaaS、系统和容器编排部署配置和模板(docker-compose、kubernetes/helm、mesos、terraform、bosh)。注意,在一些存储库中(特别是使用 kubernetes 部署的应用程序),这个目录被称为 /deploy。 + +### /test +测试相关。 + +如放置测试工具和测试依赖数据。对于较大的项目,有一个数据子目录是有意义的。例如,你可以使用 /test/data 或 /test/testdata。请注意,如果你需要忽略目录中的内容,Go 还会忽略以“.”或“_”开头的目录或文件,因此在如何命名测试数据目录方面有更大的灵活性。 + +### /README.md +项目说明。 + +Markdown 格式的说明文档,是用户了解一个项目最直观的入口。如果有需要,添加不同语言的 README 将更加人性化,如 简体中文 README_zh-CN.md。 + +## 2.6 其他目录 +### /docs +项目文档。 + +关于项目的设计文档,用户的使用文档等(除了 godoc 生成的文档之外)均可以放在该目录。 + +### /tools +项目工具。 + +项目配套工具,实现这些工具可以使用从 /pkg 和 /internal 导入代码。 + +### /examples +应用程序和公共库的示例。 + +丰富的示例将帮助用户更加便捷快速的了解上手一个项目,再加上 README,相得益彰。 + +### /third_party +外部辅助工具。 + +项目依赖的第三方工具,比如 Swagger UI。 + +### /githooks +Git 钩子。 + +使用 Git 钩子,可以帮忙我们在代码提交时完成一些检测,比如分支名称和 commit 信息是否符合规范。 + +### /assets +项目资源文件。 + +项目用到的相关资源文件,比如项目 Logo,README 中引用的图片等。 + +### /website +项目网站数据。 + +如果你不使用 Github 页面,则在这里放置项目网站数据。 + +## 2.7 不应该拥有的目录 +### /src +源码目录。 + +有些 Go 项目确实有一个 src 目,但这通常发生在开发人员有 Java 背景。不同类型的代码应该有自己的目录,而不是全部放到 src 下面,就像不应该拥有 comm 和 util 这样的目录,因为这些名称含义太泛了,违背了单一职责原则。 + +# 3.小结 +这是 Go 应用程序项目的基本布局,是社区 Gopher 们努力的结果。此项目布局是通用的,建议并非强制,当然我们最好遵守,因为这能让我的项目布局看起来更加规范,易于交流和维护。 + +如果发现此项目布局规范并不适用自己的项目,可在其基础上适当做出改变,不要泥古拘方。 + +--- +# 参考文献 +[Standard Go Project Layout](https://github.com/golang-standards/project-layout) + +[Wikipedia List of ISO 639-1 codes](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes) + +[Official ISO 639 list](https://www.loc.gov/standards/iso639-2/php/English_list.php) \ No newline at end of file diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/.DS_Store" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..b5e4c9d9157d4ca52372bc94d1aff2eadcf53af7 GIT binary patch literal 8196 zcmeHMOKcTY7(U;$rDvu*hDT`!xp=WqUIoglfQVfBkRsFqw{OtPy>~{KFr6uP=H8;D z(uj#K0=h6UF3`9!#zf-61l+jMjjx3gMP*~68&@tgz)Jr!XKr~E7KTJgn3K%;&iNm6 z&i~K%&-C0f#?V?c*DzMk7~^ya)N81_O%r-?O=?OcsUigVv(gLQCyGmRqy9+FnPeRc z;ta$Yh%*ppAkILXfqNkX^vxEH-{HG2wQ(P3AkM&jnE~;BNYW)R72&wV@YO+GcmyD< zByreitcw9*GQw1Z;}S_j4bqiRx*|GaK)RDW8QG;G9G58F8KT1nqLmSyP!O(8_fLlA z3@M3mA7>!Wz~l^wvwJmL$5yco>8cyg?_Q2H=W`>D?FY@x-$SXWteR5It9cE7GJV(^ zO$XVa=(lDI`^Bus^PF6HoXz#w)@Vkb)8@HB)^@Ez=wO=`nH=c1UDF$F^@^_PhrVg4 z;3`)$dj0X^8`iFAO0I9&Jl2#vzHwtSjn}n|jj6o0VfB`MnIq1y>%AfaLG&_U({2gu z)yYwre%{H^E``f20Xu%FE$4`UE0l7;m&yUFT8+`$rwwHEStW|9dnB+u*YC3mK4C_m z;ZyWG^Pan>UuAk9o=Ce+|=wt(HyW^zoXDxpqu#N>{G~|1Qpe;1a=z7t& z_E}_Sm#lWO_6KaboiNj(emJ!@@lfN6<_!;TYumAV&&6reXXu(Xdrp7J_U)Ww4QBnk z<(js8sCU#hgTq6VOE<8ewylDy>L2&G*R!x zTe@oN)^k-id!1~~aw5^D%_Q2@Uy}KZgj*lw>P$2ZUH&VJ9iq!kbgK^u)0Tyf%>Sa%Q@!_sil%*VM^78RC7c*&I~G^6zgOMn8ileNp^~zW@p%0_8vRO zF0fD87wk*+75j#L$1by9+3)O6_7}Utt^&|dgQ=K~2e1f>(TKI!f=93w+t7|KJb`ZP zMISOah%EB3QGkyCB|L{0@e*FfDZGKRcpLBF9M0ncKEY@B8kg`Be#T||hAX&=Yl@=O zDsz=OrCwR6G%8EvzLj$63`TK8poq98*9ZNeC+b5Pyj^`H+B>uz|4)7VI8{`{%vrPN z)GlaPx^gYm$pmX8&&t%gk+LC6Z{l{y((uvVhG51#ZGNJcXlxz3UNo|Z$|a>&3&L_i zN8>?lVM4DWqRZ(btudibA(G4Kvc!snu25~s>8eDtrdLqqsG+Z#SfOz_Y|%DpdL>nm zoNm#!YC5BumeZ8D4e|2d6Z2j60sDxE`8g5u2cqOJ><@O0{S6f}PzM9^kiY^g!7?mI z6IP-Ho3J?~W(Rhl6OUsTdWe?&7{n0K(u4&UBRCq8a||aij^}Zb$axxP@ETsnTY{pJ zUlX+JjQAD--lxGWv@4|xuH(6fNK+>3%}(*`?lMpz-Rs5qzvIro|KHsrv3Hz-I0N@| z22k0aZf~V6-sv@~kS - + @@ -17,10 +17,6 @@ - - - - @@ -1035,7 +1031,7 @@

                                                                                          当然,凡事无绝对。如果需要修改接口变量本身,那么应该使用指向接口变量的指针,当然你必须清楚自己在干什么。

                                                                                          类似地,在了解 map、slice、channel 的底层结构后,我们应该知道在传递过程中一般也不需要使用指向它们的指针。

                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 19:22:09 +2022-05-07 19:01:50
                                                                                          @@ -1076,7 +1072,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"1.不需要指向 interface 的指针","level":"1.4.1.1","depth":3,"next":{"title":"2.编译期验证 interface 合理性","level":"1.4.1.2","depth":3,"path":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.md","ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.md","articles":[]},"previous":{"title":"1.常用数据结构","level":"1.4.1","depth":2,"ref":"","articles":[{"title":"1.不需要指向 interface 的指针","level":"1.4.1.1","depth":3,"path":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.md","ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.md","articles":[]},{"title":"2.编译期验证 interface 合理性","level":"1.4.1.2","depth":3,"path":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.md","ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.md","articles":[]},{"title":"3.在边界处拷贝 slice 和 map","level":"1.4.1.3","depth":3,"path":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.md","ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.md","articles":[]},{"title":"4.枚举从 1 开始","level":"1.4.1.4","depth":3,"path":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.md","ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.md","mtime":"2022-05-08T11:22:09.366Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"1.不需要指向 interface 的指针","level":"1.4.1.1","depth":3,"next":{"title":"2.编译期验证 interface 合理性","level":"1.4.1.2","depth":3,"path":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.md","ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.md","articles":[]},"previous":{"title":"1.常用数据结构","level":"1.4.1","depth":2,"ref":"","articles":[{"title":"1.不需要指向 interface 的指针","level":"1.4.1.1","depth":3,"path":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.md","ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.md","articles":[]},{"title":"2.编译期验证 interface 合理性","level":"1.4.1.2","depth":3,"path":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.md","ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.md","articles":[]},{"title":"3.在边界处拷贝 slice 和 map","level":"1.4.1.3","depth":3,"path":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.md","ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.md","articles":[]},{"title":"4.枚举从 1 开始","level":"1.4.1.4","depth":3,"path":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.md","ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.md","mtime":"2022-05-07T11:01:50.444Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1086,10 +1082,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/1.\344\270\215\351\234\200\350\246\201\346\214\207\345\220\221interface\347\232\204\346\214\207\351\222\210.md" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/1.\344\270\215\351\234\200\350\246\201\346\214\207\345\220\221interface\347\232\204\346\214\207\351\222\210.md" new file mode 100644 index 0000000..29eccda --- /dev/null +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/1.\344\270\215\351\234\200\350\246\201\346\214\207\345\220\221interface\347\232\204\346\214\207\351\222\210.md" @@ -0,0 +1,47 @@ +我们几乎不需要使用指向接口的指针,应该将接口直接赋值给接口,这样在传递过程中,实质上传递的底层数据仍然是指针,即不存在值拷贝的情况。 +```go +type Foo struct { + T string +} + +func bar(i interface{}) { + ... +} + +var foo interface{} = Foo{...} + +// Bad +bar(&foo) + +// Good +bar(foo) +``` + +为什么可以这样,因为接口实质上在底层用两个字段表示: +(1)一个指向某些特定类型信息的指针; +(2)一个指向具体数据的指针。如果存储的数据是指针,则直接存储。如果存储的数据是一个值,则存储指向该值的指针。 + +具体可以看下 Go 源码 runtime 包两种接口类型的定义。 + +一种是带有一组方法的接口`runtime.iface`: +```go +type iface struct { + tab *itab + data unsafe.Pointer +} +``` +一种是不含任何方法的空接口`runtime.eface`: +```go +type eface struct { + _type *_type + data unsafe.Pointer +} +``` +我们可以看下接口变量的内存宽度。 +```go +var foo interface{} = Foo{...} +fmt.Println(unsafe.Sizeof(foo)) // 16 +``` +当然,凡事无绝对。如果需要修改接口变量本身,那么应该使用指向接口变量的指针,当然你必须清楚自己在干什么。 + +类似地,在了解 map、slice、channel 的底层结构后,我们应该知道在传递过程中一般也不需要使用指向它们的指针。 \ No newline at end of file diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/2.\347\274\226\350\257\221\346\234\237\351\252\214\350\257\201interface\345\220\210\347\220\206\346\200\247.html" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/2.\347\274\226\350\257\221\346\234\237\351\252\214\350\257\201interface\345\220\210\347\220\206\346\200\247.html" index 756f25d..cd7ee01 100644 --- "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/2.\347\274\226\350\257\221\346\234\237\351\252\214\350\257\201interface\345\220\210\347\220\206\346\200\247.html" +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/2.\347\274\226\350\257\221\346\234\237\351\252\214\350\257\201interface\345\220\210\347\220\206\346\200\247.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1036,7 +1032,7 @@

                                                                                          }
                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 19:22:09 +2022-05-07 19:01:50
                                                                                          @@ -1081,7 +1077,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"2.编译期验证 interface 合理性","level":"1.4.1.2","depth":3,"next":{"title":"3.在边界处拷贝 slice 和 map","level":"1.4.1.3","depth":3,"path":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.md","ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.md","articles":[]},"previous":{"title":"1.不需要指向 interface 的指针","level":"1.4.1.1","depth":3,"path":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.md","ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.md","mtime":"2022-05-08T11:22:09.367Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"2.编译期验证 interface 合理性","level":"1.4.1.2","depth":3,"next":{"title":"3.在边界处拷贝 slice 和 map","level":"1.4.1.3","depth":3,"path":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.md","ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.md","articles":[]},"previous":{"title":"1.不需要指向 interface 的指针","level":"1.4.1.1","depth":3,"path":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.md","ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.md","mtime":"2022-05-07T11:01:50.445Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1091,10 +1087,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/2.\347\274\226\350\257\221\346\234\237\351\252\214\350\257\201interface\345\220\210\347\220\206\346\200\247.md" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/2.\347\274\226\350\257\221\346\234\237\351\252\214\350\257\201interface\345\220\210\347\220\206\346\200\247.md" new file mode 100644 index 0000000..69cfb1b --- /dev/null +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/2.\347\274\226\350\257\221\346\234\237\351\252\214\350\257\201interface\345\220\210\347\220\206\346\200\247.md" @@ -0,0 +1,45 @@ +在编译时验证接口的合理性,这包括: + +(1)导出类型的部分 API 实现了接口; + +(2)导出或非导出类型实现了接口且属于某类型的一部分(匿名嵌套); + +(3)任何其他情况都违反接口合理性检查,终止编译并通知用户。 + +上面这三条是编译器对接口的检查机制, 错误地使用接口会在编译期报错。所以可以利用这个机制让部分问题在编译期暴露。 +```go +// Bad +type Handler struct { + // ... +} + +func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + // ... +} + +// Good +type Handler struct { + // ... +} + +var _ http.Handler = (*Handler)(nil) + +func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + // ... +} +``` +如果`*Handler`与`http.Handler`的接口不匹配,那么语句`var _ http.Handler = (*Handler)(nil)`将无法编译通过。 + +赋值的右边应该是断言类型的零值。 对于指针类型(如 *Handler)、切片和映射是 nil;对于结构类型是空结构。 +```go +type LogHandler struct { + h http.Handler + log *zap.Logger +} + +var _ http.Handler = LogHandler{} + +func (h LogHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { + // ... +} +``` \ No newline at end of file diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/3.\345\234\250\350\276\271\347\225\214\345\244\204\346\213\267\350\264\235slice\345\222\214map.html" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/3.\345\234\250\350\276\271\347\225\214\345\244\204\346\213\267\350\264\235slice\345\222\214map.html" index 015bd0f..16493aa 100644 --- "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/3.\345\234\250\350\276\271\347\225\214\345\244\204\346\213\267\350\264\235slice\345\222\214map.html" +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/3.\345\234\250\350\276\271\347\225\214\345\244\204\346\213\267\350\264\235slice\345\222\214map.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1105,7 +1101,7 @@

                                                                                          snapshot := stats.Snapshot()
                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 19:22:09 +2022-05-07 19:01:50
                                                                                          @@ -1150,7 +1146,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"3.在边界处拷贝 slice 和 map","level":"1.4.1.3","depth":3,"next":{"title":"4.枚举从 1 开始","level":"1.4.1.4","depth":3,"path":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.md","ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.md","articles":[]},"previous":{"title":"2.编译期验证 interface 合理性","level":"1.4.1.2","depth":3,"path":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.md","ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.md","mtime":"2022-05-08T11:22:09.368Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"3.在边界处拷贝 slice 和 map","level":"1.4.1.3","depth":3,"next":{"title":"4.枚举从 1 开始","level":"1.4.1.4","depth":3,"path":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.md","ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.md","articles":[]},"previous":{"title":"2.编译期验证 interface 合理性","level":"1.4.1.2","depth":3,"path":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.md","ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.md","mtime":"2022-05-07T11:01:50.446Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1160,10 +1156,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/3.\345\234\250\350\276\271\347\225\214\345\244\204\346\213\267\350\264\235slice\345\222\214map.md" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/3.\345\234\250\350\276\271\347\225\214\345\244\204\346\213\267\350\264\235slice\345\222\214map.md" new file mode 100644 index 0000000..7b7fa67 --- /dev/null +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/3.\345\234\250\350\276\271\347\225\214\345\244\204\346\213\267\350\264\235slice\345\222\214map.md" @@ -0,0 +1,114 @@ +slice 和 map 包含了指向底层数据的指针,因此在需要复制它们时要特别注意。 + +在 Go 源码文件 src/runtime/slice.go 我们可以找到切片的底层数据结构 [runtime.slice](https://github.com/golang/go/blob/master/src/runtime/slice.go): +```go +type slice struct { + array unsafe.Pointer + len int + cap int +} +``` +在 Go 源码文件 src/runtime/map.go 我们可以找到 map 底层核心数据结构 [runtime.hmap](https://github.com/golang/go/blob/master/src/runtime/map.go): +```go +// A header for a Go map. +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 +} + +// mapextra holds fields that are not present on all maps. +type mapextra struct { + // If both key and elem do not contain pointers and are inline, then we mark bucket + // type as containing no pointers. This avoids scanning such maps. + // However, bmap.overflow is a pointer. In order to keep overflow buckets + // alive, we store pointers to all overflow buckets in hmap.extra.overflow and hmap.extra.oldoverflow. + // overflow and oldoverflow are only used if key and elem do not contain pointers. + // overflow contains overflow buckets for hmap.buckets. + // oldoverflow contains overflow buckets for hmap.oldbuckets. + // The indirection allows to store a pointer to the slice in hiter. + overflow *[]*bmap + oldoverflow *[]*bmap + + // nextOverflow holds a pointer to a free overflow bucket. + nextOverflow *bmap +} +``` + +在接收 slice 和 map 时,请记住当 map 或 slice 作为函数参数传入时,如果您存储了对它们的引用,则用户可以对其进行修改。 +```go +// Bas +func (d *Driver) SetTrips(trips []Trip) { + d.trips = trips +} + +trips := ... +d.SetTrips(trips) + +// 你是要修改 d.trips 吗? +trips[0] = ... + +// Good +func (d *Driver) SetTrips(trips []Trip) { + d.trips = make([]Trip, len(trips)) + copy(d.trips, trips) +} + +trips := ... +d.SetTrips(trips) + +// 这里我们修改 trips[0],但不会影响 d.trips +trips[0] = ... +``` + +在返回 slice 和 map 时,同样的,请注意用户对暴露内部状态的 map 或 slice 的修改。 +```go +// Bad +type Stats struct { + mu sync.Mutex + + counters map[string]int +} + +// Snapshot 返回当前状态。 +func (s *Stats) Snapshot() map[string]int { + s.mu.Lock() + defer s.mu.Unlock() + + return s.counters +} + +// snapshot 不再受互斥锁保护,可能会引发并发读写的错误 +snapshot := stats.Snapshot() + +// Good +type Stats struct { + mu sync.Mutex + + counters map[string]int +} + +func (s *Stats) Snapshot() map[string]int { + s.mu.Lock() + defer s.mu.Unlock() + + result := make(map[string]int, len(s.counters)) + for k, v := range s.counters { + result[k] = v + } + return result +} + +// snapshot 现在是一个拷贝 +snapshot := stats.Snapshot() +``` diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/4.\346\236\232\344\270\276\344\273\2161\345\274\200\345\247\213.html" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/4.\346\236\232\344\270\276\344\273\2161\345\274\200\345\247\213.html" index 33e2ec5..c1d9830 100644 --- "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/4.\346\236\232\344\270\276\344\273\2161\345\274\200\345\247\213.html" +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/4.\346\236\232\344\270\276\344\273\2161\345\274\200\345\247\213.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1043,7 +1039,7 @@

                                                                                          // LogToStdout=0, LogToFile=1, LogToRemote=2
                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 19:22:09 +2022-05-07 19:01:50
                                                                                          @@ -1084,7 +1080,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"4.枚举从 1 开始","level":"1.4.1.4","depth":3,"next":{"title":"2.函数","level":"1.4.2","depth":2,"ref":"","articles":[{"title":"1.方法接收器为值和指针的区别","level":"1.4.2.1","depth":3,"path":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.md","ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.md","articles":[]},{"title":"2.使用 defer 释放资源","level":"1.4.2.2","depth":3,"path":"第三篇:功能设计/2.函数/2.使用defer释放资源.md","ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.md","articles":[]},{"title":"3.不要在 for 循环中使用 defer","level":"1.4.2.3","depth":3,"path":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.md","ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.md","articles":[]}]},"previous":{"title":"3.在边界处拷贝 slice 和 map","level":"1.4.1.3","depth":3,"path":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.md","ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.md","mtime":"2022-05-08T11:22:09.368Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"4.枚举从 1 开始","level":"1.4.1.4","depth":3,"next":{"title":"2.函数","level":"1.4.2","depth":2,"ref":"","articles":[{"title":"1.方法接收器为值和指针的区别","level":"1.4.2.1","depth":3,"path":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.md","ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.md","articles":[]},{"title":"2.使用 defer 释放资源","level":"1.4.2.2","depth":3,"path":"第三篇:功能设计/2.函数/2.使用defer释放资源.md","ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.md","articles":[]},{"title":"3.不要在 for 循环中使用 defer","level":"1.4.2.3","depth":3,"path":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.md","ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.md","articles":[]}]},"previous":{"title":"3.在边界处拷贝 slice 和 map","level":"1.4.1.3","depth":3,"path":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.md","ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.md","mtime":"2022-05-07T11:01:50.446Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1094,10 +1090,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/4.\346\236\232\344\270\276\344\273\2161\345\274\200\345\247\213.md" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/4.\346\236\232\344\270\276\344\273\2161\345\274\200\345\247\213.md" new file mode 100644 index 0000000..4d3aa3b --- /dev/null +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/4.\346\236\232\344\270\276\344\273\2161\345\274\200\345\247\213.md" @@ -0,0 +1,51 @@ +Go 并没有关键字 enum 来定义枚举类型,引入枚举的标准方法是声明一个自定义类型和一个使用了自增器 iota 的 const 组来表示枚举值。 + +预先声明的标识符 iota 表示连续的非类型化整数常量,它的值是对应常量的下标(从零开始),它可用于构造一组相关常数: +```go +type ByteSize float64 + +const ( + _ = iota // ignore first value by assigning to blank identifier + KB ByteSize = 1 << (10 * iota) + MB + GB + TB + PB + EB + ZB + YB +) +``` +由于第一个值从 0 开始,如果需要使第一个值为有意义的值,我们应该从 1 开始。 +```go +// Bad +type Operation int + +const ( + Add Operation = iota + Subtract + Multiply +) +// Add=0, Subtract=1, Multiply=2 + +// Good +type Operation int + +const ( + Add Operation = iota + 1 + Subtract + Multiply +) +// Add=1, Subtract=2, Multiply=3 +``` +当然,凡事无绝对。如果第一个枚举值为零是有意义的,如当零值是理想的默认行为时。 +```go +type LogOutput int + +const ( + LogToStdout LogOutput = iota + LogToFile + LogToRemote +) +// LogToStdout=0, LogToFile=1, LogToRemote=2 +``` \ No newline at end of file diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/1.\346\226\271\346\263\225\346\216\245\346\224\266\345\231\250\344\270\272\345\200\274\345\222\214\346\214\207\351\222\210\347\232\204\345\214\272\345\210\253.html" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/1.\346\226\271\346\263\225\346\216\245\346\224\266\345\231\250\344\270\272\345\200\274\345\222\214\346\214\207\351\222\210\347\232\204\345\214\272\345\210\253.html" index 3a1a170..89ec4d0 100644 --- "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/1.\346\226\271\346\263\225\346\216\245\346\224\266\345\231\250\344\270\272\345\200\274\345\222\214\346\214\207\351\222\210\347\232\204\345\214\272\345\210\253.html" +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/1.\346\226\271\346\263\225\346\216\245\346\224\266\345\231\250\344\270\272\345\200\274\345\222\214\346\214\207\351\222\210\347\232\204\345\214\272\345\210\253.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1052,7 +1048,7 @@

                                                                                          从前文可知,可取址的值可以调用接收器为指针的方法,但这里为何不能将值 s2Val 赋给接口 i 呢?

                                                                                          在 Effective Go 中一节 Pointers vs. Values 做了说明,因为接收器为指针的方法会修改接受器,为了避免产生这种错误的行为,便禁止将值赋给和指针接收器方法集匹配的接口。

                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 19:22:09 +2022-05-07 19:01:50
                                                                                          @@ -1093,7 +1089,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"1.方法接收器为值和指针的区别","level":"1.4.2.1","depth":3,"next":{"title":"2.使用 defer 释放资源","level":"1.4.2.2","depth":3,"path":"第三篇:功能设计/2.函数/2.使用defer释放资源.md","ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.md","articles":[]},"previous":{"title":"2.函数","level":"1.4.2","depth":2,"ref":"","articles":[{"title":"1.方法接收器为值和指针的区别","level":"1.4.2.1","depth":3,"path":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.md","ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.md","articles":[]},{"title":"2.使用 defer 释放资源","level":"1.4.2.2","depth":3,"path":"第三篇:功能设计/2.函数/2.使用defer释放资源.md","ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.md","articles":[]},{"title":"3.不要在 for 循环中使用 defer","level":"1.4.2.3","depth":3,"path":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.md","ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.md","mtime":"2022-05-08T11:22:09.369Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"1.方法接收器为值和指针的区别","level":"1.4.2.1","depth":3,"next":{"title":"2.使用 defer 释放资源","level":"1.4.2.2","depth":3,"path":"第三篇:功能设计/2.函数/2.使用defer释放资源.md","ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.md","articles":[]},"previous":{"title":"2.函数","level":"1.4.2","depth":2,"ref":"","articles":[{"title":"1.方法接收器为值和指针的区别","level":"1.4.2.1","depth":3,"path":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.md","ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.md","articles":[]},{"title":"2.使用 defer 释放资源","level":"1.4.2.2","depth":3,"path":"第三篇:功能设计/2.函数/2.使用defer释放资源.md","ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.md","articles":[]},{"title":"3.不要在 for 循环中使用 defer","level":"1.4.2.3","depth":3,"path":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.md","ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.md","mtime":"2022-05-07T11:01:50.447Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1103,10 +1099,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/1.\346\226\271\346\263\225\346\216\245\346\224\266\345\231\250\344\270\272\345\200\274\345\222\214\346\214\207\351\222\210\347\232\204\345\214\272\345\210\253.md" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/1.\346\226\271\346\263\225\346\216\245\346\224\266\345\231\250\344\270\272\345\200\274\345\222\214\346\214\207\351\222\210\347\232\204\345\214\272\345\210\253.md" new file mode 100644 index 0000000..bcc3dd6 --- /dev/null +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/1.\346\226\271\346\263\225\346\216\245\346\224\266\345\231\250\344\270\272\345\200\274\345\222\214\346\214\207\351\222\210\347\232\204\345\214\272\345\210\253.md" @@ -0,0 +1,60 @@ +接收器为值和指针的方法在调用方式上是有区别的。 + +使用值接收器的方法既可以通过值调用,也可以通过指针调用。带指针接收器的方法只能通过指针或 addressable values 调用。 +```go +type S struct { + data string +} + +func (s S) Read() string { + return s.data +} + +func (s *S) Write(str string) { + s.data = str +} + +sVals := map[int]S{1: {"A"}} + +// 你只能通过值调用 Read。 +sVals[1].Read() + +// 编译不通过,因为无法对 sVals[1] 取址。 +// sVals[1].Write("test") + +sPtrs := map[int]*S{1: {"A"}} + +// 指针既可以调用 Read,也可以调用 Write。 +sPtrs[1].Read() +sPtrs[1].Write("test") +``` +类似的,使用值接收器和指针接收器来实现接口,在判断与接口是否匹配时,也存在一定的区别。 +```go +type F interface { + f() +} + +type S1 struct{} + +func (s S1) f() {} + +type S2 struct{} + +func (s *S2) f() {} + +s1Val := S1{} +s1Ptr := &S1{} +s2Val := S2{} +s2Ptr := &S2{} + +var i F +i = s1Val +i = s1Ptr +i = s2Ptr + +// 下面代码无法通过编译,因为 s2Val 是一个值,而 S2 的 f 方法中没有使用值接收器。 +// i = s2Val +``` +从前文可知,可取址的值可以调用接收器为指针的方法,但这里为何不能将值 s2Val 赋给接口 i 呢? + +在 Effective Go 中一节 [Pointers vs. Values](https://golang.org/doc/effective_go.html#pointers_vs_values) 做了说明,因为接收器为指针的方法会修改接受器,为了避免产生这种错误的行为,便禁止将值赋给和指针接收器方法集匹配的接口。 \ No newline at end of file diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/2.\344\275\277\347\224\250defer\351\207\212\346\224\276\350\265\204\346\272\220.html" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/2.\344\275\277\347\224\250defer\351\207\212\346\224\276\350\265\204\346\272\220.html" index de63f52..dd6c2c0 100644 --- "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/2.\344\275\277\347\224\250defer\351\207\212\346\224\276\350\265\204\346\272\220.html" +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/2.\344\275\277\347\224\250defer\351\207\212\346\224\276\350\265\204\346\272\220.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1026,7 +1022,7 @@

                                                                                          defer 的开销非常小,只有在您可以证明函数执行时间处于纳秒级的程度时,才应避免这样做。使用 defer 提升可读性是值得的,因为使用它们的成本微不足道。尤其适用于那些不仅仅是简单内存访问的较大方法,在这些方法中其他计算的资源消耗远超过 defer。

                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 19:22:09 +2022-05-07 19:01:50
                                                                                          @@ -1071,7 +1067,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"2.使用 defer 释放资源","level":"1.4.2.2","depth":3,"next":{"title":"3.不要在 for 循环中使用 defer","level":"1.4.2.3","depth":3,"path":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.md","ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.md","articles":[]},"previous":{"title":"1.方法接收器为值和指针的区别","level":"1.4.2.1","depth":3,"path":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.md","ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/2.函数/2.使用defer释放资源.md","mtime":"2022-05-08T11:22:09.370Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"2.使用 defer 释放资源","level":"1.4.2.2","depth":3,"next":{"title":"3.不要在 for 循环中使用 defer","level":"1.4.2.3","depth":3,"path":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.md","ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.md","articles":[]},"previous":{"title":"1.方法接收器为值和指针的区别","level":"1.4.2.1","depth":3,"path":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.md","ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/2.函数/2.使用defer释放资源.md","mtime":"2022-05-07T11:01:50.447Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1081,10 +1077,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/2.\344\275\277\347\224\250defer\351\207\212\346\224\276\350\265\204\346\272\220.md" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/2.\344\275\277\347\224\250defer\351\207\212\346\224\276\350\265\204\346\272\220.md" new file mode 100644 index 0000000..041419b --- /dev/null +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/2.\344\275\277\347\224\250defer\351\207\212\346\224\276\350\265\204\346\272\220.md" @@ -0,0 +1,29 @@ +使用 defer 释放资源,诸如文件和锁。 +```go +// Bad +// 当有多个 return 分支时,很容易遗忘 unlock +p.Lock() +if p.count < 10 { + p.Unlock() + return p.count +} + +p.count++ +newCount := p.count +p.Unlock() + +return newCount + +// Good +// 更可读且安全 +p.Lock() +defer p.Unlock() + +if p.count < 10 { + return p.count +} + +p.count++ +return p.count +``` +defer 的开销非常小,只有在您可以证明函数执行时间处于纳秒级的程度时,才应避免这样做。使用 defer 提升可读性是值得的,因为使用它们的成本微不足道。尤其适用于那些不仅仅是简单内存访问的较大方法,在这些方法中其他计算的资源消耗远超过 defer。 \ No newline at end of file diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/3.\344\270\215\350\246\201\345\234\250for\345\276\252\347\216\257\344\270\255\344\275\277\347\224\250defer.html" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/3.\344\270\215\350\246\201\345\234\250for\345\276\252\347\216\257\344\270\255\344\275\277\347\224\250defer.html" index 5c6f777..0cf1860 100644 --- "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/3.\344\270\215\350\246\201\345\234\250for\345\276\252\347\216\257\344\270\255\344\275\277\347\224\250defer.html" +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/3.\344\270\215\350\246\201\345\234\250for\345\276\252\347\216\257\344\270\255\344\275\277\347\224\250defer.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1045,7 +1041,7 @@

                                                                                          }
                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 19:22:09 +2022-05-07 19:01:50
                                                                                          @@ -1086,7 +1082,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"3.不要在 for 循环中使用 defer","level":"1.4.2.3","depth":3,"next":{"title":"3.并发编程","level":"1.4.3","depth":2,"ref":"","articles":[{"title":"1.零值 Mutex 是有效的","level":"1.4.3.1","depth":3,"path":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.md","ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.md","articles":[]},{"title":"2.channel size 要么是 1 或 0","level":"1.4.3.2","depth":3,"path":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.md","ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.md","articles":[]}]},"previous":{"title":"2.使用 defer 释放资源","level":"1.4.2.2","depth":3,"path":"第三篇:功能设计/2.函数/2.使用defer释放资源.md","ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.md","mtime":"2022-05-08T11:22:09.370Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"3.不要在 for 循环中使用 defer","level":"1.4.2.3","depth":3,"next":{"title":"3.并发编程","level":"1.4.3","depth":2,"ref":"","articles":[{"title":"1.零值 Mutex 是有效的","level":"1.4.3.1","depth":3,"path":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.md","ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.md","articles":[]},{"title":"2.channel size 要么是 1 或 0","level":"1.4.3.2","depth":3,"path":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.md","ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.md","articles":[]}]},"previous":{"title":"2.使用 defer 释放资源","level":"1.4.2.2","depth":3,"path":"第三篇:功能设计/2.函数/2.使用defer释放资源.md","ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.md","mtime":"2022-05-07T11:01:50.448Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1096,10 +1092,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/3.\344\270\215\350\246\201\345\234\250for\345\276\252\347\216\257\344\270\255\344\275\277\347\224\250defer.md" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/3.\344\270\215\350\246\201\345\234\250for\345\276\252\347\216\257\344\270\255\344\275\277\347\224\250defer.md" new file mode 100644 index 0000000..44dd671 --- /dev/null +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/2.\345\207\275\346\225\260/3.\344\270\215\350\246\201\345\234\250for\345\276\252\347\216\257\344\270\255\344\275\277\347\224\250defer.md" @@ -0,0 +1,52 @@ +尽可能地避免在 for 循环中使用 defer,因为这可能会导致资源泄漏(Possible resource leak, 'defer' is called in the 'for' loop)。 + +defer 不是基于代码块的,而是基于函数的。你在循环中分配资源,那么不应该简单地使用 defer,因为释放资源不会尽可能早地发生(在每次迭代结束时),只有在 for 语句之后(所有迭代之后),即所在函数结束时,defer 函数才会被执行。这带来的后果就是,如果迭代次数过多,那么可能导致资源长时间得不到释放,造成泄漏。 +```go +// Bad +for rows.Next() { + fields, err := db.Query(.....) + if err != nil { + // ... + } + defer fields.Close() + + // do something with `fields` + +} +``` +如果有一个类似上面分配资源的代码段,我们应该将其包裹在一个函数中(匿名函数或有名函数)。在该函数中,使用 defer,资源将在不需要时被立即释放。 +```go +// 1.将 defer 放在匿名函数中 +for rows.Next() { + func() { + fields, err := db.Query(...) + if err != nil { + // Handle error and return + return + } + defer fields.Close() + + // do something with `fields` + }() +} + +// 2.将 defer 放在有名函数中然后调用之 +func foo(r *db.Row) error { + fields, err := db.Query(...) + if err != nil { + return fmt.Errorf("db.Query error: %w", err) + } + defer fields.Close() + + // do something with `fields` + return nil +} + +// 调用有名函数 +for rows.Next() { + if err := foo(rs); err != nil { + // Handle error and return + return + } +} +``` \ No newline at end of file diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/3.\345\271\266\345\217\221\347\274\226\347\250\213/1.\351\233\266\345\200\274Mutex\346\230\257\346\234\211\346\225\210\347\232\204.html" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/3.\345\271\266\345\217\221\347\274\226\347\250\213/1.\351\233\266\345\200\274Mutex\346\230\257\346\234\211\346\225\210\347\232\204.html" index da494e9..ed47bd7 100644 --- "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/3.\345\271\266\345\217\221\347\274\226\347\250\213/1.\351\233\266\345\200\274Mutex\346\230\257\346\234\211\346\225\210\347\232\204.html" +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/3.\345\271\266\345\217\221\347\274\226\347\250\213/1.\351\233\266\345\200\274Mutex\346\230\257\346\234\211\346\225\210\347\232\204.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1043,7 +1039,7 @@

                                                                                          Bad 部分会导致字段 Mutex、Lock 和 Unlock 方法是 sMap 导出的字段和 API,但又没有明确说明,既导致了模糊的文档,又泄露了 sMap 的实现细节。Good 部分可以做到字段 mutex 及其方法是 sMap 的实现细节,对其调用者不可见。

                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 19:22:09 +2022-05-07 19:01:50
                                                                                          @@ -1084,7 +1080,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"1.零值 Mutex 是有效的","level":"1.4.3.1","depth":3,"next":{"title":"2.channel size 要么是 1 或 0","level":"1.4.3.2","depth":3,"path":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.md","ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.md","articles":[]},"previous":{"title":"3.并发编程","level":"1.4.3","depth":2,"ref":"","articles":[{"title":"1.零值 Mutex 是有效的","level":"1.4.3.1","depth":3,"path":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.md","ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.md","articles":[]},{"title":"2.channel size 要么是 1 或 0","level":"1.4.3.2","depth":3,"path":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.md","ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.md","mtime":"2022-05-08T11:22:09.371Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"1.零值 Mutex 是有效的","level":"1.4.3.1","depth":3,"next":{"title":"2.channel size 要么是 1 或 0","level":"1.4.3.2","depth":3,"path":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.md","ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.md","articles":[]},"previous":{"title":"3.并发编程","level":"1.4.3","depth":2,"ref":"","articles":[{"title":"1.零值 Mutex 是有效的","level":"1.4.3.1","depth":3,"path":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.md","ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.md","articles":[]},{"title":"2.channel size 要么是 1 或 0","level":"1.4.3.2","depth":3,"path":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.md","ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.md","mtime":"2022-05-07T11:01:50.449Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1094,10 +1090,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/3.\345\271\266\345\217\221\347\274\226\347\250\213/1.\351\233\266\345\200\274Mutex\346\230\257\346\234\211\346\225\210\347\232\204.md" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/3.\345\271\266\345\217\221\347\274\226\347\250\213/1.\351\233\266\345\200\274Mutex\346\230\257\346\234\211\346\225\210\347\232\204.md" new file mode 100644 index 0000000..51d393b --- /dev/null +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/3.\345\271\266\345\217\221\347\274\226\347\250\213/1.\351\233\266\345\200\274Mutex\346\230\257\346\234\211\346\225\210\347\232\204.md" @@ -0,0 +1,49 @@ +零值 sync.Mutex 和 sync.RWMutex 是有效的,所以指向 mutex 的指针基本是不必要的。 +```go +// Bad +mu := new(sync.Mutex) +mu.Lock() + +// Good +var mu sync.Mutex +mu.Lock() +``` +Mutex 作为其他结构体一个字段时,应该使用值而不是指针。即使该结构体不被导出,也不要直接把 Mutex 嵌入到结构体中。 +```go +// Bad +type sMap struct { + sync.Mutex + data map[string]string +} + +func NewSMap() *sMap { + return &sMap{ + data: make(map[string]string), + } +} + +func (m *sMap) Get(k string) string { + m.Lock() + defer m.Unlock() + return m.data[k] +} + +// Good +type sMap struct { + mutex sync.Mutex + data map[string]string +} + +func NewSMap() *sMap { + return &sMap{ + data: make(map[string]string), + } +} + +func (m *SMap) Get(k string) string { + m.mutex.Lock() + defer m.mutex.Unlock() + return m.data[k] +} +``` +Bad 部分会导致字段 Mutex、Lock 和 Unlock 方法是 sMap 导出的字段和 API,但又没有明确说明,既导致了模糊的文档,又泄露了 sMap 的实现细节。Good 部分可以做到字段 mutex 及其方法是 sMap 的实现细节,对其调用者不可见。 \ No newline at end of file diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/3.\345\271\266\345\217\221\347\274\226\347\250\213/2.channel\345\244\247\345\260\217\350\246\201\344\271\210\346\230\2571\346\210\2260.html" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/3.\345\271\266\345\217\221\347\274\226\347\250\213/2.channel\345\244\247\345\260\217\350\246\201\344\271\210\346\230\2571\346\210\2260.html" index 2679786..d987c34 100644 --- "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/3.\345\271\266\345\217\221\347\274\226\347\250\213/2.channel\345\244\247\345\260\217\350\246\201\344\271\210\346\230\2571\346\210\2260.html" +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/3.\345\271\266\345\217\221\347\274\226\347\250\213/2.channel\345\244\247\345\260\217\350\246\201\344\271\210\346\230\2571\346\210\2260.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1007,7 +1003,7 @@

                                                                                          c := make(chan int)
                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 19:22:09 +2022-05-07 19:01:50
                                                                                          @@ -1048,7 +1044,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"2.channel size 要么是 1 或 0","level":"1.4.3.2","depth":3,"next":{"title":"4.错误处理","level":"1.4.4","depth":2,"ref":"","articles":[{"title":"1.错误处理","level":"1.4.4.1","depth":3,"path":"第三篇:功能设计/4.错误处理/1.错误处理.md","ref":"第三篇:功能设计/4.错误处理/1.错误处理.md","articles":[]}]},"previous":{"title":"1.零值 Mutex 是有效的","level":"1.4.3.1","depth":3,"path":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.md","ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.md","mtime":"2022-05-08T11:22:09.371Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"2.channel size 要么是 1 或 0","level":"1.4.3.2","depth":3,"next":{"title":"4.错误处理","level":"1.4.4","depth":2,"ref":"","articles":[{"title":"1.错误处理","level":"1.4.4.1","depth":3,"path":"第三篇:功能设计/4.错误处理/1.错误处理.md","ref":"第三篇:功能设计/4.错误处理/1.错误处理.md","articles":[]}]},"previous":{"title":"1.零值 Mutex 是有效的","level":"1.4.3.1","depth":3,"path":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.md","ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.md","mtime":"2022-05-07T11:01:50.449Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1058,10 +1054,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/3.\345\271\266\345\217\221\347\274\226\347\250\213/2.channel\345\244\247\345\260\217\350\246\201\344\271\210\346\230\2571\346\210\2260.md" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/3.\345\271\266\345\217\221\347\274\226\347\250\213/2.channel\345\244\247\345\260\217\350\246\201\344\271\210\346\230\2571\346\210\2260.md" new file mode 100644 index 0000000..115fd1e --- /dev/null +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/3.\345\271\266\345\217\221\347\274\226\347\250\213/2.channel\345\244\247\345\260\217\350\246\201\344\271\210\346\230\2571\346\210\2260.md" @@ -0,0 +1,12 @@ +channel size 应为 1 或是无缓冲的。默认情况下,channel 是无缓冲的,其 size 为零。任何其他尺寸都必须经过严格的审查,而不是拍脑袋给出一个大致的值。我们需要考虑如何确定大小,什么原因会导致 channel 在高负载下被填满并阻塞写入者,以及当这种情况发生时系统会发生哪些变化。 +```go +// Bad +// 应该足以满足任何情况! +c := make(chan int, 64) + +// Good +// size 为 1 +c := make(chan int, 1) +// 或无缓冲 size 为 0 +c := make(chan int) +``` \ No newline at end of file diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/4.\351\224\231\350\257\257\345\244\204\347\220\206/1.\351\224\231\350\257\257\345\244\204\347\220\206.html" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/4.\351\224\231\350\257\257\345\244\204\347\220\206/1.\351\224\231\350\257\257\345\244\204\347\220\206.html" index c09a8d5..9816ad9 100644 --- "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/4.\351\224\231\350\257\257\345\244\204\347\220\206/1.\351\224\231\350\257\257\345\244\204\347\220\206.html" +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/4.\351\224\231\350\257\257\345\244\204\347\220\206/1.\351\224\231\350\257\257\345\244\204\347\220\206.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1135,7 +1131,7 @@

                                                                                          Don't just check errors, handle them gracefully

                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 19:22:09 +2022-05-07 19:01:50
                                                                                          @@ -1172,7 +1168,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"1.错误处理","level":"1.4.4.1","depth":3,"next":{"title":"5.包的使用","level":"1.4.5","depth":2,"ref":"","articles":[{"title":"1.使用 time 包处理时间","level":"1.4.5.1","depth":3,"path":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.md","ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.md","articles":[]},{"title":"2.使用第三方 atomic 包","level":"1.4.5.2","depth":3,"path":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.md","ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.md","articles":[]}]},"previous":{"title":"4.错误处理","level":"1.4.4","depth":2,"ref":"","articles":[{"title":"1.错误处理","level":"1.4.4.1","depth":3,"path":"第三篇:功能设计/4.错误处理/1.错误处理.md","ref":"第三篇:功能设计/4.错误处理/1.错误处理.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/4.错误处理/1.错误处理.md","mtime":"2022-05-08T11:22:09.372Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"1.错误处理","level":"1.4.4.1","depth":3,"next":{"title":"5.包的使用","level":"1.4.5","depth":2,"ref":"","articles":[{"title":"1.使用 time 包处理时间","level":"1.4.5.1","depth":3,"path":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.md","ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.md","articles":[]},{"title":"2.使用第三方 atomic 包","level":"1.4.5.2","depth":3,"path":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.md","ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.md","articles":[]}]},"previous":{"title":"4.错误处理","level":"1.4.4","depth":2,"ref":"","articles":[{"title":"1.错误处理","level":"1.4.4.1","depth":3,"path":"第三篇:功能设计/4.错误处理/1.错误处理.md","ref":"第三篇:功能设计/4.错误处理/1.错误处理.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/4.错误处理/1.错误处理.md","mtime":"2022-05-07T11:01:50.450Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1182,10 +1178,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/4.\351\224\231\350\257\257\345\244\204\347\220\206/1.\351\224\231\350\257\257\345\244\204\347\220\206.md" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/4.\351\224\231\350\257\257\345\244\204\347\220\206/1.\351\224\231\350\257\257\345\244\204\347\220\206.md" new file mode 100644 index 0000000..b1632ce --- /dev/null +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/4.\351\224\231\350\257\257\345\244\204\347\220\206/1.\351\224\231\350\257\257\345\244\204\347\220\206.md" @@ -0,0 +1,139 @@ +# 1.错误类型 +声明错误可选的方式很少,在选择合适的错误申明方式之前,应考虑以下几点。 + +(1)调用者是否需要匹配错误以便他们可以处理它? 如果是,我们必须通过声明顶级错误变量或自定义类型来支持 errors.Is 或 errors.As 函数。 + +(2)错误消息是否为静态字符串,还是需要上下文信息的动态字符串? 如果是静态字符串,我们可以使用 errors.New,但对于后者,我们必须使用 fmt.Errorf 或自定义错误类型。 + +(3)我们是否正在传递由下游函数返回的新错误? 如果是这样,请参阅错误包装部分。 + +|错误匹配|错误消息|指导| +|---|---|---| +|No|static|errors.New| +|No|dynamic|fmt.Errorf| +|Yes|static|top-level var with errors.New| +|Yes|dynamic|custom error type| + +例如,使用`errors.New`表示带有静态字符串的错误。如果调用者需要匹配并处理此错误,则将此错误导出为变量以支持将其与`errors.Is`匹配。 +```go +// Bad + +// package foo + +func Open() error { + return errors.New("could not open") +} + +// package bar + +if err := foo.Open(); err != nil { + // Can't handle the error. + panic("unknown error") +} + +// Good +// package foo + +var ErrCouldNotOpen = errors.New("could not open") + +func Open() error { + return ErrCouldNotOpen +} + +// package bar + +if err := foo.Open(); err != nil { + if errors.Is(err, foo.ErrCouldNotOpen) { + // handle the error + } else { + panic("unknown error") + } +} +``` + +对于动态字符串的错误, 如果调用者不需要匹配它,则使用`fmt.Errorf`,如果调用者确实需要匹配它,则自定义 error。 + +无错误匹配。 +```go +// package foo + +func Open(file string) error { + return fmt.Errorf("file %q not found", file) +} + +// package bar + +if err := foo.Open("testfile.txt"); err != nil { + // Can't handle the error. + panic("unknown error") +} +``` + +错误匹配。 +```go +// package foo + +type NotFoundError struct { + File string +} + +func (e *NotFoundError) Error() string { + return fmt.Sprintf("file %q not found", e.File) +} + +func Open(file string) error { + return &NotFoundError{File: file} +} + + +// package bar + +if err := foo.Open("testfile.txt"); err != nil { + var notFound *NotFoundError + if errors.As(err, ¬Found) { + // handle the error + } else { + panic("unknown error") + } +} +``` +请注意,如果您从包中导出错误变量或类型, 它们将成为包的公共 API 的一部分。 + +# 2.错误包装 +在调用失败时传播错误有三个主要方式: + +(1)返回原始错误; + +(2)使用 fmt.Errorf 和 %w 添加上下文生成新错误; + +(3)使用 fmt.Errorf 和 %v 添加上下文生成新错误。 + +如果没有要添加的其他上下文,则按原样返回原始错误。 这将保留原始错误类型和消息。 这非常适合底层错误消息有足够的信息来追踪它来自哪里的错误。 + +否则,尽可能在错误消息中添加上下文 这样就不会出现诸如“连接被拒绝”之类的模糊错误, 您会收到更多有用的错误,例如“呼叫服务 foo:连接被拒绝”。 + +使用 fmt.Errorf 为你的错误添加上下文, 根据调用者是否应该能够匹配和提取根本原因,在 %w 或 %v 格式之间进行选择。 + +(1)如果调用者应该可以访问底层错误,请使用 %w。 对于大多数包装错误,这是一个很好的默认值,但请注意,调用者可能会开始依赖此行为。因此,对于包装错误是已知变量或类型的情况,请将其作为函数契约的一部分进行记录和测试。 + +(2)使用 %v 来混淆底层错误,调用者将无法匹配它,但如果需要,您可以在将来切换到 %w。 + +在为返回的错误添加上下文时,通过避免使用"failed to"之类的短语来保持上下文简洁,当错误通过堆栈向上传递时,它会一层一层被堆积起来: +```go +// Bad +s, err := store.New() +if err != nil { + return fmt.Errorf( + "failed to create new store: %w", err) +} + +// Good +s, err := store.New() +if err != nil { + return fmt.Errorf( + "new store: %w", err) +} +``` +然而,一旦错误被发送到另一个系统,应该清楚消息是一个错误(例如 err 标签或日志中的 "Failed" 前缀)。 + +另外请参考:[Don't just check errors, handle them gracefully](https://dave.cheney.net/2016/04/27/dont-just-check-errors-handle-them-gracefully)。 \ No newline at end of file diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/.DS_Store" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/.DS_Store" new file mode 100644 index 0000000000000000000000000000000000000000..b5334bf4a149f677e65979d7844ecf6b2d6f0e39 GIT binary patch literal 6148 zcmeHKJxc^J5Y6Z*3nFZ3ncD73yLhav&0S+Bd#h)$OAf?RNTr2;>wc59Z!)7??iMTr z5t)JHO)?+ZJlG`ToTJ%OH+8Od&Q)lP#L9^9^r-1TosWRTIj-MtF1p8M-^SRFB>Ia} z{O!l9^TqSx^zL={`wK(An$DMTSa0p3un)0m+CH|hS1+6Uw^VN~casmX`_^auu(!_E zlBOC1#(*(k3>X7HWdL_JOLZb>y)j@67z1An@cH1;7=vOG%tr^hTmk?mn9c&7YYC3= zia{|6!U7=)1xhGsi9r&Md9Qv!F$qezBP~8iSN<$sD6fwEKD#>#g4P=Y#z4uyp$u!j z|F7`Nj28K2h>eT^W8j}LK$B+P%&;lFTlcodcdbXeMPp&V#0ms@@d&_x&ylli6uV~~ YenBw_au%M?;Xr!`WJ0Vn27ZBo4>y!OasU7T literal 0 HcmV?d00001 diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/1.\344\275\277\347\224\250time\345\214\205\345\244\204\347\220\206\346\227\266\351\227\264.html" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/1.\344\275\277\347\224\250time\345\214\205\345\244\204\347\220\206\346\227\266\351\227\264.html" index cc61399..3a3b6f3 100644 --- "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/1.\344\275\277\347\224\250time\345\214\205\345\244\204\347\220\206\346\227\266\351\227\264.html" +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/1.\344\275\277\347\224\250time\345\214\205\345\244\204\347\220\206\346\227\266\351\227\264.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1070,7 +1066,7 @@

                                                                                          当在这些交互中不能使用 time.Time 时,除非达成一致,否则使用 string 和 RFC 3339 中定义的格式时间戳。默认情况下,Time.UnmarshalText 使用此格式,并可通过 time.RFC3339 在 Time.Format 和 time.Parse 中使用。

                                                                                          尽管这在实践中并不成问题,但请记住,time 包不支持解析闰秒时间戳(issue 8728),也不在计算中考虑闰秒(issue 15190)。如果您比较两个时刻,则差异将不包括这两个时刻之间可能发生的闰秒。

                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 19:22:09 +2022-05-07 19:01:50
                                                                                          @@ -1111,7 +1107,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"1.使用 time 包处理时间","level":"1.4.5.1","depth":3,"next":{"title":"2.使用第三方 atomic 包","level":"1.4.5.2","depth":3,"path":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.md","ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.md","articles":[]},"previous":{"title":"5.包的使用","level":"1.4.5","depth":2,"ref":"","articles":[{"title":"1.使用 time 包处理时间","level":"1.4.5.1","depth":3,"path":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.md","ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.md","articles":[]},{"title":"2.使用第三方 atomic 包","level":"1.4.5.2","depth":3,"path":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.md","ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.md","mtime":"2022-05-08T11:22:09.373Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"1.使用 time 包处理时间","level":"1.4.5.1","depth":3,"next":{"title":"2.使用第三方 atomic 包","level":"1.4.5.2","depth":3,"path":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.md","ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.md","articles":[]},"previous":{"title":"5.包的使用","level":"1.4.5","depth":2,"ref":"","articles":[{"title":"1.使用 time 包处理时间","level":"1.4.5.1","depth":3,"path":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.md","ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.md","articles":[]},{"title":"2.使用第三方 atomic 包","level":"1.4.5.2","depth":3,"path":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.md","ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.md","mtime":"2022-05-07T11:01:50.451Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1121,10 +1117,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/1.\344\275\277\347\224\250time\345\214\205\345\244\204\347\220\206\346\227\266\351\227\264.md" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/1.\344\275\277\347\224\250time\345\214\205\345\244\204\347\220\206\346\227\266\351\227\264.md" new file mode 100644 index 0000000..bfc68bb --- /dev/null +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/1.\344\275\277\347\224\250time\345\214\205\345\244\204\347\220\206\346\227\266\351\227\264.md" @@ -0,0 +1,86 @@ +时间处理看似简单,实则不然。关于时间的错误假设通常包括以下几点: + +- 一分钟有 60 秒 +- 一小时有 60 分钟 +- 一天有 24 小时 +- 一周有 7 天 +- 一年 365 天 + +还有更多,具体可参考 [Falsehoods programmers believe about time](https://infiniteundo.com/post/25326999628/falsehoods-programmers-believe-about-time)。 + +例如,在一个时间点上加上 24 小时并不总是产生一个新的日历日。 + +为什么常识性的认知是错误的呢?因为地球自转的不均匀性和长期变慢性,会存在时间修正的情况,比如闰秒,闰年等。 + +因此,在处理时间时始终使用 "time" 包,因为它有助于以更安全、更准确的方式处理这些不正确的假设。 + +- 使用 time.Time 表达瞬时时间 + +在处理时间的瞬间时使用 time.Time,在比较、添加或减去时间时使用 time.Time 中的方法。 +```go +// Bad +func isActive(now, start, stop int) bool { + return start <= now && now < stop +} + +// God +func isActive(now, start, stop time.Time) bool { + return (start.Before(now) || start.Equal(now)) && now.Before(stop) +} +``` +- 使用 time.Duration 表达时间段 +```go +// Bad +func poll(delay int) { + for { + // ... + time.Sleep(time.Duration(delay) * time.Millisecond) + } +} +poll(10) // 是几秒钟还是几毫秒? + +// Good +func poll(delay time.Duration) { + for { + // ... + time.Sleep(delay) + } +} +poll(10*time.Second) // 代码即注释 +``` +回到第一个例子,在一个时间时刻加上 24 小时,我们用于添加时间的方法取决于意图。如果我们想要下一个日历日(当前天的下一天)的同一个时间点,我们应该使用 `Time.AddDate`。但是,如果我们想保证某一时刻比前一时刻晚 24 小时,我们应该使用`Time.Add`。 +```go +newDay := t.AddDate(0 /* years */, 0 /* months */, 1 /* days */) +maybeNewDay := t.Add(24 * time.Hour) +``` +- 对外部系统使用 time.Time 和 time.Duration + +尽可能在与外部系统交互中使用 [time.Time](https://pkg.go.dev/time#Time) 和 [time.Duration](https://pkg.go.dev/time#Duration) 。 + +(1)Command-line 标志:flag 通过 [time.ParseDuration](https://pkg.go.dev/time#ParseDuration) 支持 [time.Duration](https://pkg.go.dev/time#Duration) ; + +(2)JSON:[encoding/json](https://pkg.go.dev/encoding/json) 通过其 [Time.UnmarshalJSON](https://pkg.go.dev/time#Time.UnmarshalJSON) 方法支持将 [time.Time](https://pkg.go.dev/time#Time) 编码为 [RFC 3339](https://tools.ietf.org/html/rfc3339) 字符串; + +(3)SQL:[database/sql](https://pkg.go.dev/database/sql) 支持将 `DATETIME` 或 `TIMESTAMP` 列转换为 [time.Time](https://pkg.go.dev/time#Time),如果底层驱动程序支持则返回; + +(4)YAML:[gopkg.in/yaml.v2](https://pkg.go.dev/gopkg.in/yaml.v2) 支持将 [time.Time](https://pkg.go.dev/time#Time) 作为 [RFC 3339](https://tools.ietf.org/html/rfc3339) 字符串,并通过 [time.ParseDuration](https://pkg.go.dev/time#ParseDuration) 支持 [time.Duration](https://pkg.go.dev/time#Duration) 。 + +当不能在这些交互中使用 `time.Duration` 时,请使用 `int` 或 `float64`,并在字段名称中包含单位。 + +例如,由于 `encoding/json` 不支持 `time.Duration`,因此该单位包含在字段的名称中。 +```go +// Bad +// {"interval": 2} +type Config struct { + Interval int `json:"interval"` +} + +// Good +// {"intervalMillis": 2000} +type Config struct { + IntervalMillis int `json:"intervalMillis"` +} +``` +当在这些交互中不能使用 time.Time 时,除非达成一致,否则使用 string 和 RFC 3339 中定义的格式时间戳。默认情况下,Time.UnmarshalText 使用此格式,并可通过 time.RFC3339 在 Time.Format 和 time.Parse 中使用。 + +尽管这在实践中并不成问题,但请记住,time 包不支持解析闰秒时间戳([issue 8728](https://github.com/golang/go/issues/8728)),也不在计算中考虑闰秒([issue 15190](https://github.com/golang/go/issues/15190))。如果您比较两个时刻,则差异将不包括这两个时刻之间可能发生的闰秒。 \ No newline at end of file diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/2.\344\275\277\347\224\250\347\254\254\344\270\211\346\226\271atomic\345\214\205.html" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/2.\344\275\277\347\224\250\347\254\254\344\270\211\346\226\271atomic\345\214\205.html" index aad7842..c354f9d 100644 --- "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/2.\344\275\277\347\224\250\347\254\254\344\270\211\346\226\271atomic\345\214\205.html" +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/2.\344\275\277\347\224\250\347\254\254\344\270\211\346\226\271atomic\345\214\205.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1032,7 +1028,7 @@

                                                                                          }
                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 19:22:09 +2022-05-07 19:01:50
                                                                                          @@ -1073,7 +1069,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"2.使用第三方 atomic 包","level":"1.4.5.2","depth":3,"next":{"title":"6.程序设计","level":"1.4.6","depth":2,"ref":"","articles":[{"title":"1.避免使用可变全局变量","level":"1.4.6.1","depth":3,"path":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.md","ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.md","articles":[]},{"title":"2.避免在公共结构中嵌入类型","level":"1.4.6.2","depth":3,"path":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.md","ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.md","articles":[]}]},"previous":{"title":"1.使用 time 包处理时间","level":"1.4.5.1","depth":3,"path":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.md","ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.md","mtime":"2022-05-08T11:22:09.373Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"2.使用第三方 atomic 包","level":"1.4.5.2","depth":3,"next":{"title":"6.程序设计","level":"1.4.6","depth":2,"ref":"","articles":[{"title":"1.避免使用可变全局变量","level":"1.4.6.1","depth":3,"path":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.md","ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.md","articles":[]},{"title":"2.避免在公共结构中嵌入类型","level":"1.4.6.2","depth":3,"path":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.md","ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.md","articles":[]}]},"previous":{"title":"1.使用 time 包处理时间","level":"1.4.5.1","depth":3,"path":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.md","ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.md","mtime":"2022-05-07T11:01:50.452Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1083,10 +1079,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/2.\344\275\277\347\224\250\347\254\254\344\270\211\346\226\271atomic\345\214\205.md" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/2.\344\275\277\347\224\250\347\254\254\344\270\211\346\226\271atomic\345\214\205.md" new file mode 100644 index 0000000..f7d465f --- /dev/null +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/5.\345\214\205\347\232\204\344\275\277\347\224\250/2.\344\275\277\347\224\250\347\254\254\344\270\211\346\226\271atomic\345\214\205.md" @@ -0,0 +1,38 @@ +不建议使用 [sync/atomic](https://golang.org/pkg/sync/atomic/) 包的原子操作对基本类型 (int32, int64 等)进行操作,因为很容易忘记使用原子操作来读取或修改变量。 + +[go.uber.org/atomic](https://godoc.org/go.uber.org/atomic) 通过隐藏基础类型为这些操作增加了类型安全性。此外,它还包括一个易用的 atomic.Bool 类型。 +```go +// Bad +type foo struct { + running int32 // atomic +} + +func (f* foo) start() { + if atomic.SwapInt32(&f.running, 1) == 1 { + // already running… + return + } + // start the Foo +} + +func (f *foo) isRunning() bool { + return f.running == 1 // race! +} + +// Good +type foo struct { + running atomic.Bool +} + +func (f *foo) start() { + if f.running.Swap(true) { + // already running… + return + } + // start the Foo +} + +func (f *foo) isRunning() bool { + return f.running.Load() +} +``` \ No newline at end of file diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/6.\347\250\213\345\272\217\350\256\276\350\256\241/1.\351\201\277\345\205\215\344\275\277\347\224\250\345\217\257\345\217\230\345\205\250\345\261\200\345\217\230\351\207\217.html" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/6.\347\250\213\345\272\217\350\256\276\350\256\241/1.\351\201\277\345\205\215\344\275\277\347\224\250\345\217\257\345\217\230\345\205\250\345\261\200\345\217\230\351\207\217.html" index 231dc6b..25ae33b 100644 --- "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/6.\347\250\213\345\272\217\350\256\276\350\256\241/1.\351\201\277\345\205\215\344\275\277\347\224\250\345\217\257\345\217\230\345\205\250\345\261\200\345\217\230\351\207\217.html" +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/6.\347\250\213\345\272\217\350\256\276\350\256\241/1.\351\201\277\345\205\215\344\275\277\347\224\250\345\217\257\345\217\230\345\205\250\345\261\200\345\217\230\351\207\217.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1051,7 +1047,7 @@

                                                                                          }
                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 19:22:09 +2022-05-07 19:01:50
                                                                                          @@ -1092,7 +1088,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"1.避免使用可变全局变量","level":"1.4.6.1","depth":3,"next":{"title":"2.避免在公共结构中嵌入类型","level":"1.4.6.2","depth":3,"path":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.md","ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.md","articles":[]},"previous":{"title":"6.程序设计","level":"1.4.6","depth":2,"ref":"","articles":[{"title":"1.避免使用可变全局变量","level":"1.4.6.1","depth":3,"path":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.md","ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.md","articles":[]},{"title":"2.避免在公共结构中嵌入类型","level":"1.4.6.2","depth":3,"path":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.md","ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.md","mtime":"2022-05-08T11:22:09.374Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"1.避免使用可变全局变量","level":"1.4.6.1","depth":3,"next":{"title":"2.避免在公共结构中嵌入类型","level":"1.4.6.2","depth":3,"path":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.md","ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.md","articles":[]},"previous":{"title":"6.程序设计","level":"1.4.6","depth":2,"ref":"","articles":[{"title":"1.避免使用可变全局变量","level":"1.4.6.1","depth":3,"path":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.md","ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.md","articles":[]},{"title":"2.避免在公共结构中嵌入类型","level":"1.4.6.2","depth":3,"path":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.md","ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.md","mtime":"2022-05-07T11:01:50.453Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1102,10 +1098,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/6.\347\250\213\345\272\217\350\256\276\350\256\241/1.\351\201\277\345\205\215\344\275\277\347\224\250\345\217\257\345\217\230\345\205\250\345\261\200\345\217\230\351\207\217.md" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/6.\347\250\213\345\272\217\350\256\276\350\256\241/1.\351\201\277\345\205\215\344\275\277\347\224\250\345\217\257\345\217\230\345\205\250\345\261\200\345\217\230\351\207\217.md" new file mode 100644 index 0000000..5f1ff34 --- /dev/null +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/6.\347\250\213\345\272\217\350\256\276\350\256\241/1.\351\201\277\345\205\215\344\275\277\347\224\250\345\217\257\345\217\230\345\205\250\345\261\200\345\217\230\351\207\217.md" @@ -0,0 +1,58 @@ +可变全局变量在使用时,可能会被其他地方修改,导致程序运行时出现意外情况。 + +我们可以通过依赖注入的方式将依赖注入到使用方,这样便可以避免使用全局变量,进而避免了依赖的全局变量被错误修改的可能。 + +比如下面将依赖的 now 函数直接注入到使用方 signer struct 中。 +```go +// Bad + +// sign.go + +var timeNow = time.Now + +func sign(msg string) string { + now := timeNow() + return signWithTime(msg, now) +} + +// sign_test.go +func TestSign(t *testing.T) { + oldTimeNow := timeNow + timeNow = func() time.Time { + return someFixedTime + } + defer func() { timeNow = oldTimeNow }() + + assert.Equal(t, want, sign(give)) +} + +// Good + +// sign.go + +type signer struct { + now func() time.Time +} + +func newSigner() *signer { + return &signer{ + now: time.Now, + } +} + +func (s *signer) Sign(msg string) string { + now := s.now() + return signWithTime(msg, now) +} + +// sign_test.go + +func TestSigner(t *testing.T) { + s := newSigner() + s.now = func() time.Time { + return someFixedTime + } + + assert.Equal(t, want, s.Sign(give)) +} +``` \ No newline at end of file diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/6.\347\250\213\345\272\217\350\256\276\350\256\241/2.\351\201\277\345\205\215\345\234\250\345\205\254\345\205\261\347\273\223\346\236\204\344\270\255\345\265\214\345\205\245\347\261\273\345\236\213.html" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/6.\347\250\213\345\272\217\350\256\276\350\256\241/2.\351\201\277\345\205\215\345\234\250\345\205\254\345\205\261\347\273\223\346\236\204\344\270\255\345\265\214\345\205\245\347\261\273\345\236\213.html" index 87d081f..01959d1 100644 --- "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/6.\347\250\213\345\272\217\350\256\276\350\256\241/2.\351\201\277\345\205\215\345\234\250\345\205\254\345\205\261\347\273\223\346\236\204\344\270\255\345\265\214\345\205\245\347\261\273\345\236\213.html" +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/6.\347\250\213\345\272\217\350\256\276\350\256\241/2.\351\201\277\345\205\215\345\234\250\345\205\254\345\205\261\347\273\223\346\236\204\344\270\255\345\265\214\345\205\245\347\261\273\345\236\213.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1068,7 +1064,7 @@

                                                                                          (4)即使使用满足相同接口的类型替换嵌入类型,也是一个破坏性的改变。

                                                                                          尽管编写这些委托方法是乏味的,但是额外的工作隐藏了实现细节,留下了更多的更改机会,还消除了在未能描述出潜在接口的模糊文档。

                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 19:22:09 +2022-05-07 19:01:50
                                                                                          @@ -1109,7 +1105,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"2.避免在公共结构中嵌入类型","level":"1.4.6.2","depth":3,"next":{"title":"第四篇:最佳性能","level":"1.5","depth":1,"ref":"","articles":[{"title":"0.导语","level":"1.5.1","depth":2,"path":"第四篇:最佳性能/0.导语.md","ref":"第四篇:最佳性能/0.导语.md","articles":[]},{"title":"1.常用数据结构","level":"1.5.2","depth":2,"ref":"","articles":[{"title":"1.反射虽好,切莫贪杯","level":"1.5.2.1","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.md","ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.md","articles":[]},{"title":"2.避免重复转换字符串到字节切片","level":"1.5.2.2","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.md","ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.md","articles":[]},{"title":"3.指定容器容量","level":"1.5.2.3","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.md","ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.md","articles":[]},{"title":"4.字符串拼接方式","level":"1.5.2.4","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.md","ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.md","articles":[]},{"title":"5.[]struct{} 的遍历方式","level":"1.5.2.5","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.md","ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.md","articles":[]},{"title":"6.切片删除指定元素","level":"1.5.2.6","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.md","ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.md","articles":[]}]},{"title":"2.内存管理","level":"1.5.3","depth":2,"ref":"","articles":[{"title":"1.使用空结构体节省内存","level":"1.5.3.1","depth":3,"path":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.md","ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.md","articles":[]},{"title":"2.struct 布局考虑内存对齐","level":"1.5.3.2","depth":3,"path":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.md","ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.md","articles":[]},{"title":"3.减少逃逸,将变量限制在栈上","level":"1.5.3.3","depth":3,"path":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.md","ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.md","articles":[]},{"title":"4.sync.Pool 复用对象","level":"1.5.3.4","depth":3,"path":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.md","ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.md","articles":[]}]},{"title":"3.并发编程","level":"1.5.4","depth":2,"ref":"","articles":[{"title":"1.关于锁","level":"1.5.4.1","depth":3,"path":"第四篇:最佳性能/3.并发编程/1.关于锁.md","ref":"第四篇:最佳性能/3.并发编程/1.关于锁.md","articles":[]},{"title":"2.限制协程数量","level":"1.5.4.2","depth":3,"path":"第四篇:最佳性能/3.并发编程/2.限制协程数量.md","ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.md","articles":[]},{"title":"3.使用 sync.Once 避免重复执行","level":"1.5.4.3","depth":3,"path":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.md","ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.md","articles":[]},{"title":"4.使用 sync.Cond 通知协程","level":"1.5.4.4","depth":3,"path":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.md","ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.md","articles":[]}]}]},"previous":{"title":"1.避免使用可变全局变量","level":"1.4.6.1","depth":3,"path":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.md","ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.md","mtime":"2022-05-08T11:22:09.374Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"2.避免在公共结构中嵌入类型","level":"1.4.6.2","depth":3,"next":{"title":"第四篇:最佳性能","level":"1.5","depth":1,"ref":"","articles":[{"title":"0.导语","level":"1.5.1","depth":2,"path":"第四篇:最佳性能/0.导语.md","ref":"第四篇:最佳性能/0.导语.md","articles":[]},{"title":"1.常用数据结构","level":"1.5.2","depth":2,"ref":"","articles":[{"title":"1.反射虽好,切莫贪杯","level":"1.5.2.1","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.md","ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.md","articles":[]},{"title":"2.避免重复转换字符串到字节切片","level":"1.5.2.2","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.md","ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.md","articles":[]},{"title":"3.指定容器容量","level":"1.5.2.3","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.md","ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.md","articles":[]},{"title":"4.字符串拼接方式","level":"1.5.2.4","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.md","ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.md","articles":[]},{"title":"5.[]struct{} 的遍历方式","level":"1.5.2.5","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.md","ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.md","articles":[]},{"title":"6.切片删除指定元素","level":"1.5.2.6","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.md","ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.md","articles":[]}]},{"title":"2.内存管理","level":"1.5.3","depth":2,"ref":"","articles":[{"title":"1.使用空结构体节省内存","level":"1.5.3.1","depth":3,"path":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.md","ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.md","articles":[]},{"title":"2.struct 布局考虑内存对齐","level":"1.5.3.2","depth":3,"path":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.md","ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.md","articles":[]},{"title":"3.减少逃逸,将变量限制在栈上","level":"1.5.3.3","depth":3,"path":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.md","ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.md","articles":[]},{"title":"4.sync.Pool 复用对象","level":"1.5.3.4","depth":3,"path":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.md","ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.md","articles":[]}]},{"title":"3.并发编程","level":"1.5.4","depth":2,"ref":"","articles":[{"title":"1.关于锁","level":"1.5.4.1","depth":3,"path":"第四篇:最佳性能/3.并发编程/1.关于锁.md","ref":"第四篇:最佳性能/3.并发编程/1.关于锁.md","articles":[]},{"title":"2.限制协程数量","level":"1.5.4.2","depth":3,"path":"第四篇:最佳性能/3.并发编程/2.限制协程数量.md","ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.md","articles":[]},{"title":"3.使用 sync.Once 避免重复执行","level":"1.5.4.3","depth":3,"path":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.md","ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.md","articles":[]},{"title":"4.使用 sync.Cond 通知协程","level":"1.5.4.4","depth":3,"path":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.md","ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.md","articles":[]}]}]},"previous":{"title":"1.避免使用可变全局变量","level":"1.4.6.1","depth":3,"path":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.md","ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.md","mtime":"2022-05-07T11:01:50.454Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1119,10 +1115,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/6.\347\250\213\345\272\217\350\256\276\350\256\241/2.\351\201\277\345\205\215\345\234\250\345\205\254\345\205\261\347\273\223\346\236\204\344\270\255\345\265\214\345\205\245\347\261\273\345\236\213.md" "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/6.\347\250\213\345\272\217\350\256\276\350\256\241/2.\351\201\277\345\205\215\345\234\250\345\205\254\345\205\261\347\273\223\346\236\204\344\270\255\345\265\214\345\205\245\347\261\273\345\236\213.md" new file mode 100644 index 0000000..0b533de --- /dev/null +++ "b/docs/\347\254\254\344\270\211\347\257\207\357\274\232\345\212\237\350\203\275\350\256\276\350\256\241/6.\347\250\213\345\272\217\350\256\276\350\256\241/2.\351\201\277\345\205\215\345\234\250\345\205\254\345\205\261\347\273\223\346\236\204\344\270\255\345\265\214\345\205\245\347\261\273\345\236\213.md" @@ -0,0 +1,84 @@ +嵌入类型会泄漏实现细节、禁止类型演化和产生模糊的接口文档。 + +假设您使用共享的 AbstractList 实现了多种列表类型,请避免在具体的列表实现中嵌入 AbstractList。相反,只需手动将方法写入具体的列表,委托给抽象列表的方法。 +```go +type AbstractList struct {} +// 添加将实体添加到列表中。 +func (l *AbstractList) Add(e Entity) { + // ... +} +// 移除从列表中移除实体。 +func (l *AbstractList) Remove(e Entity) { + // ... +} + +// Bad + +// ConcreteList 是一个实体列表。 +type ConcreteList struct { + *AbstractList +} + +// Good + +// ConcreteList 是一个实体列表。 +type ConcreteList struct { + list *AbstractList +} +// 添加将实体添加到列表中。 +func (l *ConcreteList) Add(e Entity) { + l.list.Add(e) +} +// 移除从列表中移除实体。 +func (l *ConcreteList) Remove(e Entity) { + l.list.Remove(e) +} +``` +泄漏实现细节指 AbstractList 的实现是 ConcreteList 的实现细节,被到处泄露了; + +禁止类型演化指 ConcreteList 获得了同名嵌套类型字段 AbstractList,如果嵌入的类型是 public,那么字段是 public。为了保持向后兼容性,外部类型的每个未来版本都必须保留嵌入类型; + +产生模糊的接口文档指 AbstractList 被导出的字段和方法全部成为了 ConcreteList 被导出的字段和方法,在 ConcreteList 又没有明确说明,会产生模糊的接口文档。 + +很少需要嵌入类型,虽然它可以帮助您避免编写冗长的委托方法。 + +即使嵌入兼容的抽象列表 interface,而不是结构体,这将为开发人员提供更大的灵活性来改变未来,但仍然泄露了具体列表使用抽象实现的细节。 +```go +// Bad + +// AbstractList 是各种实体列表的通用实现。 +type AbstractList interface { + Add(Entity) + Remove(Entity) +} +// ConcreteList 是一个实体列表。 +type ConcreteList struct { + AbstractList +} + +// Good + +// ConcreteList 是一个实体列表。 +type ConcreteList struct { + list AbstractList +} +// 添加将实体添加到列表中。 +func (l *ConcreteList) Add(e Entity) { + l.list.Add(e) +} +// 移除从列表中移除实体。 +func (l *ConcreteList) Remove(e Entity) { + l.list.Remove(e) +} +``` +无论是使用嵌入结构还是嵌入接口,都会限制类型的演化。 + +(1)向嵌入接口添加方法是一个破坏性的改变; + +(2)从嵌入结构体删除方法是一个破坏性的改变; + +(3)删除嵌入类型是一个破坏性的改变; + +(4)即使使用满足相同接口的类型替换嵌入类型,也是一个破坏性的改变。 + +尽管编写这些委托方法是乏味的,但是额外的工作隐藏了实现细节,留下了更多的更改机会,还消除了在未能描述出潜在接口的模糊文档。 \ No newline at end of file diff --git "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/1.\346\240\274\345\274\217\345\214\226.html" "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/1.\346\240\274\345\274\217\345\214\226.html" index 3cd2010..a669d8d 100644 --- "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/1.\346\240\274\345\274\217\345\214\226.html" +++ "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/1.\346\240\274\345\274\217\345\214\226.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1019,7 +1015,7 @@

                                                                                          fmt.Printf("%v这里要空格%v", a, b)
                                                                                          powered by Gitbook该文章修订时间: -2022-05-21 21:18:14 +2022-05-23 09:59:33
                                                                                          @@ -1060,7 +1056,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"1.格式化","level":"1.3.1","depth":2,"next":{"title":"2.代码行","level":"1.3.2","depth":2,"path":"第二篇:代码风格/2.代码行.md","ref":"第二篇:代码风格/2.代码行.md","articles":[]},"previous":{"title":"第二篇:代码风格","level":"1.3","depth":1,"ref":"","articles":[{"title":"1.格式化","level":"1.3.1","depth":2,"path":"第二篇:代码风格/1.格式化.md","ref":"第二篇:代码风格/1.格式化.md","articles":[]},{"title":"2.代码行","level":"1.3.2","depth":2,"path":"第二篇:代码风格/2.代码行.md","ref":"第二篇:代码风格/2.代码行.md","articles":[]},{"title":"3.字符串","level":"1.3.3","depth":2,"path":"第二篇:代码风格/3.字符串.md","ref":"第二篇:代码风格/3.字符串.md","articles":[]},{"title":"4.依赖管理","level":"1.3.4","depth":2,"path":"第二篇:代码风格/4.依赖管理.md","ref":"第二篇:代码风格/4.依赖管理.md","articles":[]},{"title":"5.初始化","level":"1.3.5","depth":2,"path":"第二篇:代码风格/5.初始化.md","ref":"第二篇:代码风格/5.初始化.md","articles":[]},{"title":"6.错误处理","level":"1.3.6","depth":2,"path":"第二篇:代码风格/6.错误处理.md","ref":"第二篇:代码风格/6.错误处理.md","articles":[]},{"title":"7.注释","level":"1.3.7","depth":2,"path":"第二篇:代码风格/7.注释.md","ref":"第二篇:代码风格/7.注释.md","articles":[]},{"title":"8.命名","level":"1.3.8","depth":2,"path":"第二篇:代码风格/8.命名.md","ref":"第二篇:代码风格/8.命名.md","articles":[]},{"title":"9.流程控制","level":"1.3.9","depth":2,"path":"第二篇:代码风格/9.流程控制.md","ref":"第二篇:代码风格/9.流程控制.md","articles":[]},{"title":"10.函数","level":"1.3.10","depth":2,"path":"第二篇:代码风格/10.函数.md","ref":"第二篇:代码风格/10.函数.md","articles":[]},{"title":"11.单元测试","level":"1.3.11","depth":2,"path":"第二篇:代码风格/11.单元测试.md","ref":"第二篇:代码风格/11.单元测试.md","articles":[]},{"title":"12.杂项","level":"1.3.12","depth":2,"path":"第二篇:代码风格/12.杂项.md","ref":"第二篇:代码风格/12.杂项.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第二篇:代码风格/1.格式化.md","mtime":"2022-05-21T13:18:14.279Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"1.格式化","level":"1.3.1","depth":2,"next":{"title":"2.代码行","level":"1.3.2","depth":2,"path":"第二篇:代码风格/2.代码行.md","ref":"第二篇:代码风格/2.代码行.md","articles":[]},"previous":{"title":"第二篇:代码风格","level":"1.3","depth":1,"ref":"","articles":[{"title":"1.格式化","level":"1.3.1","depth":2,"path":"第二篇:代码风格/1.格式化.md","ref":"第二篇:代码风格/1.格式化.md","articles":[]},{"title":"2.代码行","level":"1.3.2","depth":2,"path":"第二篇:代码风格/2.代码行.md","ref":"第二篇:代码风格/2.代码行.md","articles":[]},{"title":"3.字符串","level":"1.3.3","depth":2,"path":"第二篇:代码风格/3.字符串.md","ref":"第二篇:代码风格/3.字符串.md","articles":[]},{"title":"4.依赖管理","level":"1.3.4","depth":2,"path":"第二篇:代码风格/4.依赖管理.md","ref":"第二篇:代码风格/4.依赖管理.md","articles":[]},{"title":"5.初始化","level":"1.3.5","depth":2,"path":"第二篇:代码风格/5.初始化.md","ref":"第二篇:代码风格/5.初始化.md","articles":[]},{"title":"6.错误处理","level":"1.3.6","depth":2,"path":"第二篇:代码风格/6.错误处理.md","ref":"第二篇:代码风格/6.错误处理.md","articles":[]},{"title":"7.注释","level":"1.3.7","depth":2,"path":"第二篇:代码风格/7.注释.md","ref":"第二篇:代码风格/7.注释.md","articles":[]},{"title":"8.命名","level":"1.3.8","depth":2,"path":"第二篇:代码风格/8.命名.md","ref":"第二篇:代码风格/8.命名.md","articles":[]},{"title":"9.流程控制","level":"1.3.9","depth":2,"path":"第二篇:代码风格/9.流程控制.md","ref":"第二篇:代码风格/9.流程控制.md","articles":[]},{"title":"10.函数","level":"1.3.10","depth":2,"path":"第二篇:代码风格/10.函数.md","ref":"第二篇:代码风格/10.函数.md","articles":[]},{"title":"11.单元测试","level":"1.3.11","depth":2,"path":"第二篇:代码风格/11.单元测试.md","ref":"第二篇:代码风格/11.单元测试.md","articles":[]},{"title":"12.杂项","level":"1.3.12","depth":2,"path":"第二篇:代码风格/12.杂项.md","ref":"第二篇:代码风格/12.杂项.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第二篇:代码风格/1.格式化.md","mtime":"2022-05-23T01:59:33.012Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"..","book":{"language":""}}); }); @@ -1070,10 +1066,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/1.\346\240\274\345\274\217\345\214\226.md" "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/1.\346\240\274\345\274\217\345\214\226.md" new file mode 100644 index 0000000..aee04a3 --- /dev/null +++ "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/1.\346\240\274\345\274\217\345\214\226.md" @@ -0,0 +1,25 @@ +# 主体风格 +- 代码必须用 [gofmt](https://pkg.go.dev/cmd/gofmt) 工具格式化。 + +gofmt 使用制表符进行缩进,使用空白符进行对齐。 + +IDE 在保存代码时可设置自动执行 gofmt,如 GoLand 的 Settings > Tools > File Watchers 中可勾选 go fmt 并指定作用范围。 + + + +# 占位符 +- 通过`%v`打印错误信息时建议加冒号。 + +```go +// Bad +logger.Errorf("num %d, err %s", num, err.Error()) + +// Good +logger.Errorf("num:%d, err:%v", num, err.Error()) +``` +- 字符串占位符,如果输入数据来自外部,建议使用`%q`进行安全转义。 +- 格式化字符串中多个占位符之间要有空格。 + +```go +fmt.Printf("%v这里要空格%v", a, b) +``` \ No newline at end of file diff --git "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/10.\345\207\275\346\225\260.html" "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/10.\345\207\275\346\225\260.html" index 068490f..a86e665 100644 --- "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/10.\345\207\275\346\225\260.html" +++ "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/10.\345\207\275\346\225\260.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1271,7 +1267,7 @@

                                                                                          func calcCost(n []int) int {...}
                                                                                          powered by Gitbook该文章修订时间: -2022-05-22 16:00:37 +2022-05-23 09:59:33
                                                                                          @@ -1316,7 +1312,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"10.函数","level":"1.3.10","depth":2,"next":{"title":"11.单元测试","level":"1.3.11","depth":2,"path":"第二篇:代码风格/11.单元测试.md","ref":"第二篇:代码风格/11.单元测试.md","articles":[]},"previous":{"title":"9.流程控制","level":"1.3.9","depth":2,"path":"第二篇:代码风格/9.流程控制.md","ref":"第二篇:代码风格/9.流程控制.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第二篇:代码风格/10.函数.md","mtime":"2022-05-22T08:00:37.391Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"10.函数","level":"1.3.10","depth":2,"next":{"title":"11.单元测试","level":"1.3.11","depth":2,"path":"第二篇:代码风格/11.单元测试.md","ref":"第二篇:代码风格/11.单元测试.md","articles":[]},"previous":{"title":"9.流程控制","level":"1.3.9","depth":2,"path":"第二篇:代码风格/9.流程控制.md","ref":"第二篇:代码风格/9.流程控制.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第二篇:代码风格/10.函数.md","mtime":"2022-05-23T01:59:33.012Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"..","book":{"language":""}}); }); @@ -1326,10 +1322,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/10.\345\207\275\346\225\260.md" "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/10.\345\207\275\346\225\260.md" new file mode 100644 index 0000000..5232044 --- /dev/null +++ "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/10.\345\207\275\346\225\260.md" @@ -0,0 +1,272 @@ +# 入参&返回值 +- 入参和返回值均以小写字母开头。 +- 入参和返回值个数均不能超过 **5** 个,如果超过,请封装成新的类型。 +- 尽量用值传递,非指针传递。 +- 类型为 map,slice,chan,interface 不要传递指针。 +- 返回值超过 3 个,或有相同类型的返回值,或者从上下文中不清楚返回值的含义,使用命名返回,其它情况不建议使用命名返回。 + +```go +// Parent1 ... +func (n *Node) Parent1() *Node + +// Parent2 ... +func (n *Node) Parent2() (*Node, error) + +// Location ... +func (f *Foo) Location() (lat, long float64, err error) +``` +- 入参和返回值顺序根据关联性排在一起。 +- 尽量用 error 表示执行是否成功,而不是用 bool 或者 int。 +- 表示执行状态的返回值应该放在最后。 + +```go +// Bad +ret, info := ModifyUserInfo(user) + +// Good +info, ret := ModifyUserInfo(user) +``` +- 不要返回多个用于控制流程的状态。 + +```go +// Bad +isContinue, retCode := p.processUnity() + +// Good +retCode := p.processUnity() +``` +- 如果传入的参数通常是固定的,考虑通过实现多个函数实现默认参数。 + +如下面这个函数的第二个参数是没有必要的,大部分时候都是 +1,一个 IncCounter() 和一个 IncCounterN() 即可。可参考标准库包的 Split() 和 SplitN()。 +```go +metrics.IncrCounter(cntCacheMissKey, 1) +``` +- 批量查询函数返回值使用 slice 还是 map。 + +有时后我们需要根据多个 ID 查询对应的值,可能会出现部分失败的情况,如某个 ID 不存在。如果不允许部分失败,使用 slice 返回值,如果允许部分失败使用 map。 +```go +// GetUserInfoBatch 批量获取用户信息(需全部成功)。 +func GetUserInfoBatch(uids ...uint64) ([]UserInfo, error) { + ... +} + +// GetUserInfoBatch 批量获取用户信息(允许部分失败)。 +func GetUserInfoBatch(uids ...uint64) (map[uint64]UserInfo, error) { + ... +} +``` +# 成员函数 +- 如果方法不使用类的成员,应该实现为非成员函数。 +- 如果非成员函数要使用类的多个属性时,应该实现为成员函数。 + +# 局部变量 +- 如果局部变量仅被使用一次,且不能起到解释逻辑的作用时,应该删除局部变量,直接内联。 + +```go +// Bad +ids := GetIDs() +Foo(ids) + +// Good +Foo(GetIDs()) +``` + +# defer +- 当存在资源管理时,应紧跟 defer 函数进行资源的释放。 +- 判断是否有错误发生之后,再 defer 释放资源。 + +```go +resp, err := http.Get(url) +if err != nil { + return err +} +// 如果操作成功,再 defer Close() +defer resp.Body.Close() +``` +- 禁止在循环中使用 defer。 + +```go +// 不要这样使用 +func filterSomething(values []string) { + for _, v := range values { + fields, err := db.Query(v) // 示例,实际不要这么查询,防止 SQL 注入 + if err != nil { + // ... + } + defer fields.Close() + // 继续使用fields + } +} + +// 应当使用如下的方式: +func filterSomething(values []string) { + for _, v := range values { + func() { + fields, err := db.Query(v) // 示例,实际不要这么查询,防止 SQL 注入 + if err != nil { + // ... + } + defer fields.Close() + // 继续使用 fields + }() + } +} +``` +- 正常逻辑不应该在 defer 中执行。 + +# 减少嵌套(圈复杂度) +- 嵌套深度不能超过**4层**。 + +从函数名开始算第一层,当函数的嵌套深度超过**4层**,往往会导致圈复杂度过高,函数变得复杂不可读,我们可以通过拆分函数的方式来减少嵌套深度。 +```go +// AddArea 添加成功或出错。 +func (s *BookingService) AddArea(areas ...string) error { + s.Lock() + defer s.Unlock() + + for _, area := range areas { + for _, has := range s.areas { + if area == has { + return srverr.ErrAreaConflict + } + } + s.areas = append(s.areas, area) + s.areaOrders[area] = new(order.AreaOrder) + } + return nil +} + +// 建议调整为这样: + +// AddArea 添加成功或出错。 +func (s *BookingService) AddArea(areas ...string) error { + s.Lock() + defer s.Unlock() + + for _, area := range areas { + if s.HasArea(area) { + return srverr.ErrAreaConflict + } + s.areas = append(s.areas, area) + s.areaOrders[area] = new(order.AreaOrder) + } + return nil +} + +// HasArea ... +func (s *BookingService) HasArea(area string) bool { + for _, has := range s.areas { + if area == has { + return true + } + } + return false +} +``` +- 单函数圈复杂度最大值 <=10。 +- 条件不满足或出现错误应尽早返回。 + +代码也可以优先处理条件不满足或错误的情况,尽早返回或继续循环来减少嵌套。 +```go +// Bad +for _, v := range data { + if v.F1 == 1 { + v = process(v) + if err := v.Call(); err == nil { + v.Send() + } else { + return err + } + } else { + log.Printf("Invalid v: %v", v) + } +} + +// Good +for _, v := range data { + if v.F1 != 1 { + log.Printf("Invalid v: %v", v) + continue + } + + v = process(v) + if err := v.Call(); err != nil { + return err + } + v.Send() +} +``` +# 魔法字面量 +- 除了 0 和 1,不要使用魔法数字。 + +```go +// Bad +func getArea(r float64) float64 { + return 3.14 * r * r +} +func getLength(r float64) float64 { + return 3.14 * 2 * r +} + +// Good +// PI 圆周率 +const PI = 3.14 + +func getArea(r float64) float64 { + return PI * r * r +} + +func getLength(r float64) float64 { + return PI * 2 * r +} +``` +- 如果字符串字面量出现 **>=2** 次,则禁止使用,用一个有名称的常量代替,可读性更好。 + +```go +// Bad +rsp, err := http.Post(url, "application/json", bytes.NewBuffer([]byte(req))) + +// Good +const JsonContentType = "application/json" +rsp, err := http.Post(url, "application/json", bytes.NewBuffer([]byte(req))) +``` +# 函数分组与顺序 +- 函数应该放在 `struct`, `const`, `var`的后面。 +- 构造函数应该放在其他函数之前,如`newXYZ()/NewXYZ()`。 +- 导出的函数应该放在非导出函数前面 +- 同一文件中的函数应按接收者分组。 +- 由于函数是按接收者分组的,因此普通工具函数应在文件末尾出现。 +- 函数应按粗略的调用顺序排序。 + +按照上面的规则,下面给出好坏文件内容布局示例。 +```go +// Bad +func (s *something) Cost() { + return calcCost(s.weights) +} + +type something struct{ ... } + +func calcCost(n []int) int {...} + +func (s *something) Stop() {...} + +func newSomething() *something { + return &something{} +} + +// Good +type something struct{ ... } + +func newSomething() *something { + return &something{} +} + +func (s *something) Cost() { + return calcCost(s.weights) +} + +func (s *something) Stop() {...} + +func calcCost(n []int) int {...} +``` \ No newline at end of file diff --git "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/11.\345\215\225\345\205\203\346\265\213\350\257\225.html" "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/11.\345\215\225\345\205\203\346\265\213\350\257\225.html" index 92695e2..1654b61 100644 --- "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/11.\345\215\225\345\205\203\346\265\213\350\257\225.html" +++ "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/11.\345\215\225\345\205\203\346\265\213\350\257\225.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1069,7 +1065,7 @@

                                                                                          }
                                                                                          powered by Gitbook该文章修订时间: -2022-05-01 21:44:06 +2022-05-07 19:01:50
                                                                                          @@ -1114,7 +1110,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"11.单元测试","level":"1.3.11","depth":2,"next":{"title":"12.杂项","level":"1.3.12","depth":2,"path":"第二篇:代码风格/12.杂项.md","ref":"第二篇:代码风格/12.杂项.md","articles":[]},"previous":{"title":"10.函数","level":"1.3.10","depth":2,"path":"第二篇:代码风格/10.函数.md","ref":"第二篇:代码风格/10.函数.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第二篇:代码风格/11.单元测试.md","mtime":"2022-05-01T13:44:06.619Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"11.单元测试","level":"1.3.11","depth":2,"next":{"title":"12.杂项","level":"1.3.12","depth":2,"path":"第二篇:代码风格/12.杂项.md","ref":"第二篇:代码风格/12.杂项.md","articles":[]},"previous":{"title":"10.函数","level":"1.3.10","depth":2,"path":"第二篇:代码风格/10.函数.md","ref":"第二篇:代码风格/10.函数.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第二篇:代码风格/11.单元测试.md","mtime":"2022-05-07T11:01:50.456Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"..","book":{"language":""}}); }); @@ -1124,10 +1120,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/11.\345\215\225\345\205\203\346\265\213\350\257\225.md" "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/11.\345\215\225\345\205\203\346\265\213\350\257\225.md" new file mode 100644 index 0000000..dedd917 --- /dev/null +++ "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/11.\345\215\225\345\205\203\346\265\213\350\257\225.md" @@ -0,0 +1,71 @@ +- 单元测试文件名命名规范为 example_test.go。 +- 测试用例的函数名称必须以 Test 开头,例如 TestExample。 +- 单测文件行数限制是普通文件的 2 倍(1600 行)。单测函数行数限制也是普通函数的2倍(160行)。圈复杂度、列数限制、 import 分组等其他规范细节和普通文件保持一致。 +- 由于单测文件内的函数都是不对外的,所有可导出函数可以没有注释,但是结构体定义时尽量不要导出。 +- 每个重要的可导出函数都要首先编写测试用例,测试用例和正规代码一起提交方便进行回归测试。 +- 表驱动测试. + +使用表驱动的方式编写用例,代码看上去会更简洁。 +```go +// Bad +// func TestSplitHostPort(t *testing.T) + +host, port, err := net.SplitHostPort("192.0.2.0:8000") +require.NoError(t, err) +assert.Equal(t, "192.0.2.0", host) +assert.Equal(t, "8000", port) + +host, port, err = net.SplitHostPort("192.0.2.0:http") +require.NoError(t, err) +assert.Equal(t, "192.0.2.0", host) +assert.Equal(t, "http", port) + +host, port, err = net.SplitHostPort(":8000") +require.NoError(t, err) +assert.Equal(t, "", host) +assert.Equal(t, "8000", port) + +host, port, err = net.SplitHostPort("1:8") +require.NoError(t, err) +assert.Equal(t, "1", host) +assert.Equal(t, "8", port) + +// Good +// func TestSplitHostPort(t *testing.T) + +tests := []struct{ + give string + wantHost string + wantPort string +}{ + { + give: "192.0.2.0:8000", + wantHost: "192.0.2.0", + wantPort: "8000", + }, + { + give: "192.0.2.0:http", + wantHost: "192.0.2.0", + wantPort: "http", + }, + { + give: ":8000", + wantHost: "", + wantPort: "8000", + }, + { + give: "1:8", + wantHost: "1", + wantPort: "8", + }, +} + +for _, tt := range tests { + t.Run(tt.give, func(t *testing.T) { + host, port, err := net.SplitHostPort(tt.give) + require.NoError(t, err) + assert.Equal(t, tt.wantHost, host) + assert.Equal(t, tt.wantPort, port) + }) +} +``` \ No newline at end of file diff --git "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/12.\346\235\202\351\241\271.html" "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/12.\346\235\202\351\241\271.html" index 8290aae..908148d 100644 --- "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/12.\346\235\202\351\241\271.html" +++ "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/12.\346\235\202\351\241\271.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1053,7 +1049,7 @@

                                                                                          powered by Gitbook该文章修订时间: -2022-05-22 17:03:00 +2022-05-23 09:59:33 @@ -1094,7 +1090,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"12.杂项","level":"1.3.12","depth":2,"next":{"title":"第三篇:功能设计","level":"1.4","depth":1,"ref":"","articles":[{"title":"1.常用数据结构","level":"1.4.1","depth":2,"ref":"","articles":[{"title":"1.不需要指向 interface 的指针","level":"1.4.1.1","depth":3,"path":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.md","ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.md","articles":[]},{"title":"2.编译期验证 interface 合理性","level":"1.4.1.2","depth":3,"path":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.md","ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.md","articles":[]},{"title":"3.在边界处拷贝 slice 和 map","level":"1.4.1.3","depth":3,"path":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.md","ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.md","articles":[]},{"title":"4.枚举从 1 开始","level":"1.4.1.4","depth":3,"path":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.md","ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.md","articles":[]}]},{"title":"2.函数","level":"1.4.2","depth":2,"ref":"","articles":[{"title":"1.方法接收器为值和指针的区别","level":"1.4.2.1","depth":3,"path":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.md","ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.md","articles":[]},{"title":"2.使用 defer 释放资源","level":"1.4.2.2","depth":3,"path":"第三篇:功能设计/2.函数/2.使用defer释放资源.md","ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.md","articles":[]},{"title":"3.不要在 for 循环中使用 defer","level":"1.4.2.3","depth":3,"path":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.md","ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.md","articles":[]}]},{"title":"3.并发编程","level":"1.4.3","depth":2,"ref":"","articles":[{"title":"1.零值 Mutex 是有效的","level":"1.4.3.1","depth":3,"path":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.md","ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.md","articles":[]},{"title":"2.channel size 要么是 1 或 0","level":"1.4.3.2","depth":3,"path":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.md","ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.md","articles":[]}]},{"title":"4.错误处理","level":"1.4.4","depth":2,"ref":"","articles":[{"title":"1.错误处理","level":"1.4.4.1","depth":3,"path":"第三篇:功能设计/4.错误处理/1.错误处理.md","ref":"第三篇:功能设计/4.错误处理/1.错误处理.md","articles":[]}]},{"title":"5.包的使用","level":"1.4.5","depth":2,"ref":"","articles":[{"title":"1.使用 time 包处理时间","level":"1.4.5.1","depth":3,"path":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.md","ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.md","articles":[]},{"title":"2.使用第三方 atomic 包","level":"1.4.5.2","depth":3,"path":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.md","ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.md","articles":[]}]},{"title":"6.程序设计","level":"1.4.6","depth":2,"ref":"","articles":[{"title":"1.避免使用可变全局变量","level":"1.4.6.1","depth":3,"path":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.md","ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.md","articles":[]},{"title":"2.避免在公共结构中嵌入类型","level":"1.4.6.2","depth":3,"path":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.md","ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.md","articles":[]}]}]},"previous":{"title":"11.单元测试","level":"1.3.11","depth":2,"path":"第二篇:代码风格/11.单元测试.md","ref":"第二篇:代码风格/11.单元测试.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第二篇:代码风格/12.杂项.md","mtime":"2022-05-22T09:03:00.905Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"12.杂项","level":"1.3.12","depth":2,"next":{"title":"第三篇:功能设计","level":"1.4","depth":1,"ref":"","articles":[{"title":"1.常用数据结构","level":"1.4.1","depth":2,"ref":"","articles":[{"title":"1.不需要指向 interface 的指针","level":"1.4.1.1","depth":3,"path":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.md","ref":"第三篇:功能设计/1.常用数据结构/1.不需要指向interface的指针.md","articles":[]},{"title":"2.编译期验证 interface 合理性","level":"1.4.1.2","depth":3,"path":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.md","ref":"第三篇:功能设计/1.常用数据结构/2.编译期验证interface合理性.md","articles":[]},{"title":"3.在边界处拷贝 slice 和 map","level":"1.4.1.3","depth":3,"path":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.md","ref":"第三篇:功能设计/1.常用数据结构/3.在边界处拷贝slice和map.md","articles":[]},{"title":"4.枚举从 1 开始","level":"1.4.1.4","depth":3,"path":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.md","ref":"第三篇:功能设计/1.常用数据结构/4.枚举从1开始.md","articles":[]}]},{"title":"2.函数","level":"1.4.2","depth":2,"ref":"","articles":[{"title":"1.方法接收器为值和指针的区别","level":"1.4.2.1","depth":3,"path":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.md","ref":"第三篇:功能设计/2.函数/1.方法接收器为值和指针的区别.md","articles":[]},{"title":"2.使用 defer 释放资源","level":"1.4.2.2","depth":3,"path":"第三篇:功能设计/2.函数/2.使用defer释放资源.md","ref":"第三篇:功能设计/2.函数/2.使用defer释放资源.md","articles":[]},{"title":"3.不要在 for 循环中使用 defer","level":"1.4.2.3","depth":3,"path":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.md","ref":"第三篇:功能设计/2.函数/3.不要在for循环中使用defer.md","articles":[]}]},{"title":"3.并发编程","level":"1.4.3","depth":2,"ref":"","articles":[{"title":"1.零值 Mutex 是有效的","level":"1.4.3.1","depth":3,"path":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.md","ref":"第三篇:功能设计/3.并发编程/1.零值Mutex是有效的.md","articles":[]},{"title":"2.channel size 要么是 1 或 0","level":"1.4.3.2","depth":3,"path":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.md","ref":"第三篇:功能设计/3.并发编程/2.channel大小要么是1或0.md","articles":[]}]},{"title":"4.错误处理","level":"1.4.4","depth":2,"ref":"","articles":[{"title":"1.错误处理","level":"1.4.4.1","depth":3,"path":"第三篇:功能设计/4.错误处理/1.错误处理.md","ref":"第三篇:功能设计/4.错误处理/1.错误处理.md","articles":[]}]},{"title":"5.包的使用","level":"1.4.5","depth":2,"ref":"","articles":[{"title":"1.使用 time 包处理时间","level":"1.4.5.1","depth":3,"path":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.md","ref":"第三篇:功能设计/5.包的使用/1.使用time包处理时间.md","articles":[]},{"title":"2.使用第三方 atomic 包","level":"1.4.5.2","depth":3,"path":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.md","ref":"第三篇:功能设计/5.包的使用/2.使用第三方atomic包.md","articles":[]}]},{"title":"6.程序设计","level":"1.4.6","depth":2,"ref":"","articles":[{"title":"1.避免使用可变全局变量","level":"1.4.6.1","depth":3,"path":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.md","ref":"第三篇:功能设计/6.程序设计/1.避免使用可变全局变量.md","articles":[]},{"title":"2.避免在公共结构中嵌入类型","level":"1.4.6.2","depth":3,"path":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.md","ref":"第三篇:功能设计/6.程序设计/2.避免在公共结构中嵌入类型.md","articles":[]}]}]},"previous":{"title":"11.单元测试","level":"1.3.11","depth":2,"path":"第二篇:代码风格/11.单元测试.md","ref":"第二篇:代码风格/11.单元测试.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第二篇:代码风格/12.杂项.md","mtime":"2022-05-23T01:59:33.013Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"..","book":{"language":""}}); }); @@ -1104,10 +1100,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/12.\346\235\202\351\241\271.md" "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/12.\346\235\202\351\241\271.md" new file mode 100644 index 0000000..1f99d6b --- /dev/null +++ "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/12.\346\235\202\351\241\271.md" @@ -0,0 +1,49 @@ +# 1.基本类型偏执 +有时候你会看到某个类里有很多基本类型字段,但是你隐约地能区分出某些字段好像应该在一起,如手机号和带区号的电话号码、描述某个日期范围的开始日期和结束日期,它们应该有一个真实的载体,如联系方式类和时间范围类) +,而不应全部零散放在一个大类型中。 + +## 通用场景 +- 复杂的执行/错误信息,需要定义结构体保存。 +- 出现状态/类型等字眼时,需要使用枚举。 +- 时间类型尽量使用内置定义,如 time.Second,不要使用 int。 + +## 结构体 +- 一个文件中出现多个结构体时,需要注意观察是否有重复的成员。 +- 一个结构体中,成员较多,且多个成员有明显关联关系,需要封装新的结构体。 +- 意义不明的成员变量,应该定义类型描述作用。 + +# 2.单一职责 +## 包&文件 +- 需要判断当前文件是否应该归属于当前包,主要以职责进行判断。 +- 导出的函数/变量的职责必须与包&文件职责高度一致。 +- 除了包的主逻辑文件中内容允许导出,包内的辅助函数都应该是非导出的。 + +## 函数 +- 一个函数只负责一个职责。 + - 配置文件的读取,和对象初始化应该分开,不要让对象自己根据配置文件初始化,保证构造函数足够简单 + - 解析、校验、计算的逻辑应该进行分离 + - 读、写、计算的逻辑应该进行分离 + - rpc、db 相关操作需要独立封装 +- 一个函数内不应该混杂多个实现细节,需要将独立的逻辑封装成函数。 +- 一次循环尽量只做一件事,不用担心多次循环。 +- 同一层级的逻辑细节不要拆分。 + +# 3.goroutine +- 启动的 goroutine 最好有 recover。 + +因为其他 goroutine 是无法捕当前 goroutine 抛出的异常。如果启动的 goroutine 没有 recover,很容易发生 panic 导致整个进程退出。 + +- 遇到 goroutine一定要梳理清楚 goroutine 的退出机制,防止泄漏。 +- 如果要开启多个线程执行一组动作,并且要等待全部完成后继续后续逻辑,考虑使用 [errgroup.Group](https://pkg.go.dev/golang.org/x/sync/errgroup)。 + +# 4.应用服务 +- 应用服务建议有 README.md 说明文档,介绍服务功能、使用方法、部署时的限制与要求、基础环境依赖等 +- 应用服务必须要有接口测试 + +# 5.常用工具 +Go 本身在代码规范方面做了很多努力,很多限制都是语法要求,例如左大括号不换行,引用的包或者定义的变量不使用会报错。此外 Go 还是提供了很多好用的工具帮助我们进行代码的规范。 + +- gofmt ,大部分的格式问题可以通过 gofmt 解决, gofmt 自动格式化代码,保证所有的 go 代码与官方推荐的格式保持一致,于是所有格式有关问题,都以 gofmt 的结果为准。 +- goimports ,此工具在 gofmt 的基础上增加了自动删除和引入包。 +- go vet ,vet 工具可以帮我们静态分析我们的源码存在的各种问题,例如多余的代码,提前 return 的逻辑, struct 的 tag 是否符合标准等。编译前先执行代码静态分析。 +- golint ,类似 javascript 中的 jslint 的工具,主要功能就是检测代码中不规范的地方。 \ No newline at end of file diff --git "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/2.\344\273\243\347\240\201\350\241\214.html" "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/2.\344\273\243\347\240\201\350\241\214.html" index 727eb10..1929f94 100644 --- "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/2.\344\273\243\347\240\201\350\241\214.html" +++ "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/2.\344\273\243\347\240\201\350\241\214.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1091,7 +1087,7 @@

                                                                                          powered by Gitbook该文章修订时间: -2022-05-21 21:18:32 +2022-05-23 09:59:33 @@ -1136,7 +1132,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"2.代码行","level":"1.3.2","depth":2,"next":{"title":"3.字符串","level":"1.3.3","depth":2,"path":"第二篇:代码风格/3.字符串.md","ref":"第二篇:代码风格/3.字符串.md","articles":[]},"previous":{"title":"1.格式化","level":"1.3.1","depth":2,"path":"第二篇:代码风格/1.格式化.md","ref":"第二篇:代码风格/1.格式化.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第二篇:代码风格/2.代码行.md","mtime":"2022-05-21T13:18:32.249Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"2.代码行","level":"1.3.2","depth":2,"next":{"title":"3.字符串","level":"1.3.3","depth":2,"path":"第二篇:代码风格/3.字符串.md","ref":"第二篇:代码风格/3.字符串.md","articles":[]},"previous":{"title":"1.格式化","level":"1.3.1","depth":2,"path":"第二篇:代码风格/1.格式化.md","ref":"第二篇:代码风格/1.格式化.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第二篇:代码风格/2.代码行.md","mtime":"2022-05-23T01:59:33.013Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"..","book":{"language":""}}); }); @@ -1146,10 +1142,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/2.\344\273\243\347\240\201\350\241\214.md" "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/2.\344\273\243\347\240\201\350\241\214.md" new file mode 100644 index 0000000..0db1d30 --- /dev/null +++ "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/2.\344\273\243\347\240\201\350\241\214.md" @@ -0,0 +1,99 @@ +# 行长度 +一行代码不要超过**120**列,超过的情况,使用合理的方法换行。 + +例外场景: +- import 模块语句 +- struct tag +- 工具生成的代码 + +# 换行方式 +采用惰性换行,换行前应尽可能占满当前行不留空位。 +```go +// Bad +fmt.Printf("%v %v %v %v %v %v %v %v %v %v %v %v %v %v\n", +0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,89, 144, 233) + +// Good +fmt.Printf("%v %v %v %v %v %v %v %v %v %v %v %v %v %v\n", 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, +89, 144, 233) +``` + +# 不必要的空行 + +- 函数体第一行不要换行。 + +```go +// Bad +func foo() { + + // func body +} + +// Good +func foo() { + // func body +} +``` + +- 函数调用和对调用结果的处理,是紧密相连的,不能加空行。 + +```go +// Bad +res, err := foo() + +if err != nil || res.Ret != 0 { + return +} + +// Good +res, err := foo() +if err != nil || res.Ret != 0 { + return +} +``` + +- return 语句前不要换行。 + +```go +// Bad +func foo() { + // func body + + return +} + +// Good +func foo() { + // func body + return +} +``` + +# 括号和空格 +- 遵循 gofmt 的逻辑。 +- 运算符和操作数之间要留空格。 +- 作为输入参数或者数组下标时,运算符和操作数之间不需要空格,紧凑展示。 + +```go +var i int = 1 + 2 // 运算符和操作数之间要留空格 +v := []float64{1.0, 2.0, 3.0}[i-i] // i-i 作为下标不留空格 +fmt.Printf("%f\n", v+1) // v+1 作为入参不要留空格 +``` + +- 不要添加没必要的括号。 + +```go +// Bad +if foo && (int(bar) > 0) { + // ... +} + +// Good +if foo && int(bar) > 0 { + // ... +} +``` + +# 行数 +- 函数长度不能超过 80 行。 +- 文件长度不能超过 800 行。 \ No newline at end of file diff --git "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/3.\345\255\227\347\254\246\344\270\262.html" "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/3.\345\255\227\347\254\246\344\270\262.html" index 8ce1127..801baff 100644 --- "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/3.\345\255\227\347\254\246\344\270\262.html" +++ "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/3.\345\255\227\347\254\246\344\270\262.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1029,7 +1025,7 @@

                                                                                          str := fmt.Sprintf("rsp code is %v and msg is %v", code, msg)
                                                                                          powered by Gitbook该文章修订时间: -2022-05-21 22:19:54 +2022-05-23 09:59:33
                                                                                          @@ -1074,7 +1070,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"3.字符串","level":"1.3.3","depth":2,"next":{"title":"4.依赖管理","level":"1.3.4","depth":2,"path":"第二篇:代码风格/4.依赖管理.md","ref":"第二篇:代码风格/4.依赖管理.md","articles":[]},"previous":{"title":"2.代码行","level":"1.3.2","depth":2,"path":"第二篇:代码风格/2.代码行.md","ref":"第二篇:代码风格/2.代码行.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第二篇:代码风格/3.字符串.md","mtime":"2022-05-21T14:19:54.751Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"3.字符串","level":"1.3.3","depth":2,"next":{"title":"4.依赖管理","level":"1.3.4","depth":2,"path":"第二篇:代码风格/4.依赖管理.md","ref":"第二篇:代码风格/4.依赖管理.md","articles":[]},"previous":{"title":"2.代码行","level":"1.3.2","depth":2,"path":"第二篇:代码风格/2.代码行.md","ref":"第二篇:代码风格/2.代码行.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第二篇:代码风格/3.字符串.md","mtime":"2022-05-23T01:59:33.014Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"..","book":{"language":""}}); }); @@ -1084,10 +1080,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/3.\345\255\227\347\254\246\344\270\262.md" "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/3.\345\255\227\347\254\246\344\270\262.md" new file mode 100644 index 0000000..ce8c61b --- /dev/null +++ "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/3.\345\255\227\347\254\246\344\270\262.md" @@ -0,0 +1,31 @@ +- 字符串字面量 + +Go 支持使用[原始字符串字面值](https://golang.org/ref/spec#raw_string_lit),可以使用反引号来表示原生字符串。在需要转义的场景下,我们应该尽量使用使用反引号表示字符串,避免转义。 +```go +// Bad +wantError := "unknown name:\"test\"" + +// Good +wantError := `unknown error:"test"` +``` +- 不要使用字符串表示 list 和 map 结构。 + +```go +// Bad +var Receivers = "tom,jerry,spike" + +// Good +var Receivers = []string{"tom","jerry","spike"} +``` +- 字符串拼接 + +行内字符串拼接时,出于性能的考虑,待拼接字符串数量较少(<=3)且不涉及类型转换时,使用运算符 + 而非`fmt.Sprintf()`。 +```go +// Bad +str := fmt.Sprintf("rsp code is %v", code) +str := "rsp code is " + code " and msg is" + msg + +// Good +str := "rsp code is " + code +str := fmt.Sprintf("rsp code is %v and msg is %v", code, msg) +``` \ No newline at end of file diff --git "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/4.\344\276\235\350\265\226\347\256\241\347\220\206.html" "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/4.\344\276\235\350\265\226\347\256\241\347\220\206.html" index 559d240..b7fbaed 100644 --- "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/4.\344\276\235\350\265\226\347\256\241\347\220\206.html" +++ "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/4.\344\276\235\350\265\226\347\256\241\347\220\206.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1096,7 +1092,7 @@

                                                                                          powered by Gitbook该文章修订时间: -2022-05-22 15:40:04 +2022-05-23 09:59:33 @@ -1141,7 +1137,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"4.依赖管理","level":"1.3.4","depth":2,"next":{"title":"5.初始化","level":"1.3.5","depth":2,"path":"第二篇:代码风格/5.初始化.md","ref":"第二篇:代码风格/5.初始化.md","articles":[]},"previous":{"title":"3.字符串","level":"1.3.3","depth":2,"path":"第二篇:代码风格/3.字符串.md","ref":"第二篇:代码风格/3.字符串.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第二篇:代码风格/4.依赖管理.md","mtime":"2022-05-22T07:40:04.744Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"4.依赖管理","level":"1.3.4","depth":2,"next":{"title":"5.初始化","level":"1.3.5","depth":2,"path":"第二篇:代码风格/5.初始化.md","ref":"第二篇:代码风格/5.初始化.md","articles":[]},"previous":{"title":"3.字符串","level":"1.3.3","depth":2,"path":"第二篇:代码风格/3.字符串.md","ref":"第二篇:代码风格/3.字符串.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第二篇:代码风格/4.依赖管理.md","mtime":"2022-05-23T01:59:33.014Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"..","book":{"language":""}}); }); @@ -1151,10 +1147,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/4.\344\276\235\350\265\226\347\256\241\347\220\206.md" "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/4.\344\276\235\350\265\226\347\256\241\347\220\206.md" new file mode 100644 index 0000000..ebe5780 --- /dev/null +++ "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/4.\344\276\235\350\265\226\347\256\241\347\220\206.md" @@ -0,0 +1,97 @@ +# 依赖规范 +- go1.11 以上必须使用 go modules 模式。 +```go +go mod init git.code.oa.com/group/myrepo +``` +- 使用 go modules 作为依赖管理的项目不要提交 vendor 目录。 +- 使用 go modules 管理依赖的项目, `go.sum`文件必须提交,不要添加到`.gitignore`规则中。 + +# import 规范 +- 使用 [goimports](https://pkg.go.dev/golang.org/x/tools@v0.1.10/cmd/goimports) 工具自动格式化引入的包名,import 规范原则上以 goimports 规则为准。 + +[goimports](https://pkg.go.dev/golang.org/x/tools@v0.1.10/cmd/goimports) 会自动添加依赖的包,并移除未引用的包。把依赖包按字母序升序排列,并对包进行分组管理。通过空行隔开,默认分为标准库包和非标准库包(第三方包和内部包)。 + +- 导入的包按照先后顺序应该分为三组: + * 标准包 + * 外部包 + * 内部包 + +带域名的包名都属于外部包,如 `github.com/xxx/xxx`。内部包是指不能被外部 import 的包。 +```go +// Bad +import ( + "fmt" + "os" + "go.uber.org/atomic" + "golang.org/x/sync/errgroup" + "myproject/models" + "myproject/controller" +) + +// Good +import ( + "encoding/json" + "strings" + + "go.uber.org/atomic" + "golang.org/x/sync/errgroup" + + "myproject/models" + "myproject/controller" +) +``` +- 不要使用相对路径导入内部包,应该使用完整的路径引入包。 + +```go +// Bad +import ( + "../net" +) + +// Good +import ( + "xxxx.com/proj/net" +) +``` +- 必要时给包起个别名 + +包名和 git 路径名不一致时,或者多个相同包名冲突时,使用别名代替会有更好的可读性。 +```go +// Bad +import ( + elastic "github.com/olivere/elastic/v7" +) + +// Good +import ( + elastic "github.com/olivere/elastic/v7" +) +``` +- 通用的功能包,应该放在 public 目录下,而不是具体业务目录下。 + +```go +// Bad +import "github.com/xxxxxxxx/XXXServer/pkg/formatlog" + +// Good +import "github.com/xxxxxxxx/utils/formatlog" +``` +- `import .` 只能用于测试文件,且必须是为了解决循环依赖,才能使用。 + +```go +package foo_test + +import ( + "bar/testutil" // also imports "foo" + . "foo" +) +``` +在这种情况下,测试文件不能在包 foo 中,因为它使用 bar/testutil,后者导入 foo。所以我们使用`import .`形式导入包 foo,让测试文件假装是包 foo 的一部分,尽管它不是。除了这一种情况,不要使用`import .`,因为它使程序难以阅读,比如使用 Baz 这样的标识符,不知道其是顶级标识符还是导入包中的顶级标识符。 + +- 引入第三方包要慎重。 + +如引入 Github 上的包要确认活跃度,不知名的包可能会被下架或出现不兼容的版本升级情况,必要情况下可 fork 一份。 +```go +// 该包已经 404 了。 +github.com/astaxie/beego/orm +``` \ No newline at end of file diff --git "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/5.\345\210\235\345\247\213\345\214\226.html" "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/5.\345\210\235\345\247\213\345\214\226.html" index bf62f96..a9bd185 100644 --- "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/5.\345\210\235\345\247\213\345\214\226.html" +++ "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/5.\345\210\235\345\247\213\345\214\226.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1401,7 +1397,7 @@

                                                                                          Google Cloud Functions 和其他形式的确定性预计算的优化。

                                                                                          powered by Gitbook该文章修订时间: -2022-05-22 15:43:51 +2022-05-23 09:59:33
                                                                                          @@ -1446,7 +1442,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"5.初始化","level":"1.3.5","depth":2,"next":{"title":"6.错误处理","level":"1.3.6","depth":2,"path":"第二篇:代码风格/6.错误处理.md","ref":"第二篇:代码风格/6.错误处理.md","articles":[]},"previous":{"title":"4.依赖管理","level":"1.3.4","depth":2,"path":"第二篇:代码风格/4.依赖管理.md","ref":"第二篇:代码风格/4.依赖管理.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第二篇:代码风格/5.初始化.md","mtime":"2022-05-22T07:43:51.250Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"5.初始化","level":"1.3.5","depth":2,"next":{"title":"6.错误处理","level":"1.3.6","depth":2,"path":"第二篇:代码风格/6.错误处理.md","ref":"第二篇:代码风格/6.错误处理.md","articles":[]},"previous":{"title":"4.依赖管理","level":"1.3.4","depth":2,"path":"第二篇:代码风格/4.依赖管理.md","ref":"第二篇:代码风格/4.依赖管理.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第二篇:代码风格/5.初始化.md","mtime":"2022-05-23T01:59:33.015Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"..","book":{"language":""}}); }); @@ -1456,10 +1452,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/5.\345\210\235\345\247\213\345\214\226.md" "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/5.\345\210\235\345\247\213\345\214\226.md" new file mode 100644 index 0000000..30349f4 --- /dev/null +++ "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/5.\345\210\235\345\247\213\345\214\226.md" @@ -0,0 +1,420 @@ +# 初始化 struct +- 使用字段名初始化结构体。 + +```go +// Bad +k := User{"John", "Doe", true} + +// Good +k := User{ + FirstName: "John", + LastName: "Doe", + Admin: true, +} +``` +例外:如果有 **3 个**或更少的字段,则可以在测试表中省略字段名称。 +```go +tests := []struct{ + op Operation + want string +}{ + {Add, "add"}, + {Subtract, "subtract"}, +} +``` +- 省略结构中的零值字段。 + +```go +// Bad +user := User{ + FirstName: "John", + LastName: "Doe", + MiddleName: "", + Admin: false, +} + +// Good +user := User{ + FirstName: "John", + LastName: "Doe", +} +``` +例外:在字段名提供有意义上下文的地方可以显示指定零值。如表驱动单元测试中的测试用例,即使字段为零值,限制指定零值,通过字段名可清晰地表达用例的含义。 +```go +tests := []struct{ + give string + want int +}{ + {give: "0", want: 0}, + // ... +} +``` +- 声明零值结构使用关键字 var。 + +如果在声明中省略了结构的所有字段,请使用 var 声明结构,因为这样更加简洁,其各个字段值为字段类型对应的零值。 +```go +// Bad +user := User{} + +// Good +var user User +``` +- 初始化结构指针变量使用字面量 + +初始化结构指针变量时,请使用`&T{}`代替`new(T)`,可以与结构体初始化在代码风格上保持一致。 +```go +// Bad +sval := T{Name: "foo"} + +// inconsistent +sptr := new(T) +sptr.Name = "bar" + +// Good +sval := T{Name: "foo"} + +sptr := &T{Name: "bar"} +``` +# 初始化 map +初始化 map 优先使用 make() 函数而不是字面量,因为这样看起来更容易和申明区分开来。 +```go +// Bad +var ( + // m1 读写安全 + // m2 在写入时会 panic + m1 = map[T1]T2{} + m2 map[T1]T2 +) +// 声明和初始化在视觉上很相似 + +// Good +var ( + // m1 读写安全 + // m2 在写入时会 panic + m1 = make(map[T1]T2) + m2 map[T1]T2 +) +// 声明和初始化在视觉上是不同的 +``` +尽可能地在初始化时提供 map 容量大小。 + +例外:如果 map 包含固定的元素列表,则使用字面量初始化 map,这样可以在初始化时指定元素。 +```go +// Bad +m := make(map[T1]T2, 3) +m[k1] = v1 +m[k2] = v2 +m[k3] = v3 + +// Good +m := map[T1]T2{ + k1: v1, + k2: v2, + k3: v3, +} +``` +# 初始化 slice +- 非零值 slice 使用`make()`初始化,并指定容量。 + +```go +// Bad +nums := []int{} + +// Good +nums := make([]int, 0, CAP) +``` +- 空切片使用 var 声明 + +不管是全局切片还是局部切片,使用 var 申明 nil 切片,代码会更加简洁清晰。 +```go +// Bad +func foo() { + // 长度为 0 的非 nil 切片 + nums := []int{} +} + +// Good +func foo() { + // nil 切片 + var nums []int +} +``` +- nil 是一个有效的 slice。 + +nil 是一个有效的长度为 0 的 slice,这意味着, + +(1)您不应明确返回长度为零的切片。应该返回nil 来代替。 +```go +// Bad +if x == "" { + return []int{} +} + +// Good +if x == "" { + return nil +} +``` +(2)要检查切片是否为空,请始终使用 len(s) == 0 而非 nil。 +```go +// Bad +func isEmpty(s []string) bool { + return s == nil +} + +// Good +func isEmpty(s []string) bool { + return len(s) == 0 +} +``` +(3)零值切片(用var声明的切片)可立即使用,无需调用 make() 创建。 +```go +// Bad +nums := []int{} +// or, nums := make([]int) + +if add1 { + nums = append(nums, 1) +} + +if add2 { + nums = append(nums, 2) +} + +// Good +var nums []int + +if add1 { + nums = append(nums, 1) +} +if add2 { + nums = append(nums, 2) +} +``` +记住,虽然 nil 切片是有效的切片,但它不等于长度为 0 的切片(一个为 nil,另一个不是),并且在不同的情况下(例如序列化),这两个切片的处理方式可能不同。 + +# 申明变量 +- 就近申明。 + +变量申明的位置尽量靠近使用的地方。 +```go +// Bad +func foo(m map[string]interface{}) string { + info, _ := m["key"].(Info) + ... + return handle(info) +} + +// Good +func foo(m map[string]interface{}) string { + ... + info, _ := m["key"].(Info) + return handle(info) +} +``` +- 相似的声明放在一组。 + +对于变量、常量的声明,相似的声明应该放在一组。类型的定义同样适用。 +```go +// Bad +const a = 1 +const b = 2 + +var a = 1 +var b = 2 + +type Area float64 +type Volume float64 + +// Good +const ( + a = 1 + b = 2 +) + +var ( + a = 1 + b = 2 +) + +type ( + Area float64 + Volume float64 +) +``` +仅将相关的声明放在一组。不要将不相关的声明放在一组。 +```go +// Bad +type Operation int + +const ( + Add Operation = iota + 1 + Subtract + Multiply + EnvVar = "MY_ENV" +) + +// Good +type Operation int + +const ( + Add Operation = iota + 1 + Subtract + Multiply +) + +const EnvVar = "MY_ENV" +``` +另外,分组使用的位置没有限制,我们也可以在函数内部使用它们。 +```go +// Bad +func f() string { + red := color.New(0xff0000) + green := color.New(0x00ff00) + blue := color.New(0x0000ff) + ... +} + +// Good +func f() string { + var ( + red = color.New(0xff0000) + green = color.New(0x00ff00) + blue = color.New(0x0000ff) + ) + ... +} +``` +- 全局变量申明使用 var 关键字并省略类型。 + +全局变量使用 var 关键字申明,一般情况下其类型与表达式的类型一致,这种情况下可省略其类型。 +```go +// Bad +var s string = F() + +func F() string { return "A" } + +// Good +// 由于 F 已经明确了返回一个字符串类型,因此我们没有必要显式指定类型。 +var s = F() + +func F() string { return "A" } +``` +如果表达式的类型与所需的类型不完全匹配,请指定类型。 +```go +type myError struct{} + +func (myError) Error() string { return "error" } + +func F() myError { return myError{} } + +// F 返回一个 myError 类型的实例,但是我们要 error 类型。 +var _e error = F() +``` +- 局部变量使用短变量声明形式(`:=`)。 + +```go +// Bad +func foo() { + var s = "foo" + var i int64 // 虽然默认为 0,但不够直观 + ... +} + +// Good +func foo() { + s := "foo" + i := in64(0) // 显示指明 0,更加直观 + ... +} +``` +例外,如果是相似的一组变量,请使用 var 声明到一组。 +```go +// Bad +func foo() { + s1 := "foo" + s2 := "bar" + ... +} + +// Good +func foo() { + var ( + s1 = "foo" + s2 = "bar" + ) + ... +} +``` +- 如果全局变量仅在单个函数内使用,则应该定义为局部变量。 + +# 避免使用 init() +尽可能避免使用 init(),当 init() 不可避免时,init() 应该做到: +(1)无论程序环境或调用如何,行为都必须是完全确定的; +(2)避免依赖其他 init() 函数的顺序或副作用。虽然 init() 顺序是明确的,但代码可以更改, 因此 init() 函数之间的关系可能会使代码变得脆弱和容易出错; +(3)避免访问或操作全局变量和环境状态,如机器信息、环境变量、工作目录、程序参数/输入等; +(4)避免 I/O,包括文件系统、网络和系统调用。 + +不能满足这些要求的代码可能要在 main() 函数中被调用(或程序生命周期中的其他地方),或作为 main() 函数本身的一部分。特别是打算给其他程序使用的库应该特别注意代码行为的完全确定性, 而不是执行“init magic”。 +```go +// Bad +type Foo struct { + // ... +} +var _defaultFoo Foo +func init() { + _defaultFoo = Foo{ + // ... + } +} + +// Good +var _defaultFoo = Foo{ + // ... +} +// 或者为了更好的可测试性 +var _defaultFoo = defaultFoo() +func defaultFoo() Foo { + return Foo{ + // ... + } +} + +// Bad +type Config struct { + // ... +} +var _config Config +func init() { + // Bad: 基于当前目录 + cwd, _ := os.Getwd() + // Bad: I/O + raw, _ := ioutil.ReadFile( + path.Join(cwd, "config", "config.yaml"), + ) + yaml.Unmarshal(raw, &_config) +} + +// Good +type Config struct { + // ... +} +func loadConfig() Config { + cwd, err := os.Getwd() + // handle err + raw, err := ioutil.ReadFile( + path.Join(cwd, "config", "config.yaml"), + ) + // handle err + var config Config + yaml.Unmarshal(raw, &config) + return config +} +``` +凡事无绝对,某些情况下,init() 可能更可取或是必要的: + +(1)不能表示为单个赋值的复杂表达式; + +(2)可插入的钩子,如 database/sql、编码类型注册表等; + +(3)对 [Google Cloud Functions](https://cloud.google.com/functions/docs/bestpractices/tips#use_global_variables_to_reuse_objects_in_future_invocations) 和其他形式的确定性预计算的优化。 \ No newline at end of file diff --git "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/6.\351\224\231\350\257\257\345\244\204\347\220\206.html" "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/6.\351\224\231\350\257\257\345\244\204\347\220\206.html" index 0bcbad2..fae2697 100644 --- "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/6.\351\224\231\350\257\257\345\244\204\347\220\206.html" +++ "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/6.\351\224\231\350\257\257\345\244\204\347\220\206.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1216,7 +1212,7 @@

                                                                                          t, _ := i.(string)
                                                                                          powered by Gitbook该文章修订时间: -2022-05-22 15:47:37 +2022-05-23 09:59:33
                                                                                          @@ -1261,7 +1257,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"6.错误处理","level":"1.3.6","depth":2,"next":{"title":"7.注释","level":"1.3.7","depth":2,"path":"第二篇:代码风格/7.注释.md","ref":"第二篇:代码风格/7.注释.md","articles":[]},"previous":{"title":"5.初始化","level":"1.3.5","depth":2,"path":"第二篇:代码风格/5.初始化.md","ref":"第二篇:代码风格/5.初始化.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第二篇:代码风格/6.错误处理.md","mtime":"2022-05-22T07:47:37.037Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"6.错误处理","level":"1.3.6","depth":2,"next":{"title":"7.注释","level":"1.3.7","depth":2,"path":"第二篇:代码风格/7.注释.md","ref":"第二篇:代码风格/7.注释.md","articles":[]},"previous":{"title":"5.初始化","level":"1.3.5","depth":2,"path":"第二篇:代码风格/5.初始化.md","ref":"第二篇:代码风格/5.初始化.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第二篇:代码风格/6.错误处理.md","mtime":"2022-05-23T01:59:33.019Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"..","book":{"language":""}}); }); @@ -1271,10 +1267,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/6.\351\224\231\350\257\257\345\244\204\347\220\206.md" "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/6.\351\224\231\350\257\257\345\244\204\347\220\206.md" new file mode 100644 index 0000000..8a06791 --- /dev/null +++ "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/6.\351\224\231\350\257\257\345\244\204\347\220\206.md" @@ -0,0 +1,230 @@ +# error 处理 +- 显示处理 error。 + +如果 error 作为函数的值返回,必须对 error 进行处理,或使用空白标识符忽略。对于`defer xx.Close()`可以不用显式处理。 + +- error 作为函数返回值且有多个返回值的时候,error 必须是最后一个参数。 + +```go +// Bad +func do() (error, int) { +} + +// Good +func do() (int, error) { +} +``` +- 采用独立的错误流进行处理。 +```go +// Bad +if err != nil { + // handle error +} else { + // normal code +} + +// Good +if err != nil { + // handle error + return // or continue, etc. +} +// normal code +``` +- Fail Fast 原则。 + +如果出现失败应该立即返回error,如果继续处理,则属于特殊情况需要添加注释。 + +- 如果函数返回值需用于初始化其他变量,则采用下面的方式。 + +```go +x, err := f() +if err != nil { + // error handling + return // or continue, etc. +} +// use x +``` +- 错误判断独立处理,不与其他变量组合判断。 + +一个可能引发的问题就是 err 如果为 nil,但是满足其他逻辑进入到 if 块内,读取 err 值将引发 panic。 +```go +// Bad +x, y, err := f() +if err != nil || y == nil { + return err // 当y与err都为空时,函数的调用者会出现错误的调用逻辑 +} + +// Good +x, y, err := f() +if err != nil { + return err +} +if y == nil { + return fmt.Errorf("some error") +} +``` +- 生成带参数的 error 使用 `fmt.Errorf`。 +```go +// Bad +errors.New(fmt.Sprintf("module xxx: %v",err)) + +// Good +fmt.Errorf("module xxx: %v", err) +``` +- 不要包装系统调用错误,并给出一些没意义的附加信息。 + +```go +// Bad +err := exe.Run() +if err != nil { + return fmt.Errorf("run error %s", err.Error()) +} + +// Good +return exe.Run() +``` +# panic 处理 +- 不要随便 panic。 + +在业务逻辑处理中禁止使用 panic。因为 panic 是级联失败(cascading failures)的主要根源。如果发生错误,该函数应该返回错误,让调用方决定如何处理它。 +```go +// Bad +func run(args []string) { + if len(args) == 0 { + panic("an argument is required") + } + // ... +} + +func main() { + run(os.Args[1:]) +} + +// Good +func run(args []string) error { + if len(args) == 0 { + return errors.New("an argument is required") + } + // ... + return nil +} + +func main() { + if err := run(os.Args[1:]); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } +} +``` +panic/recover 不是错误处理的合适策略,仅当发生不可恢复的异常(如 nil 引用)时,才可以 panic。 + +在 main 包中程序初始化是一个例外,如程序启动时,文件无法打开或数据库无法连接导致程序无法正常运行可使用 panic。 + +对于其它的包,可导出的接口也不能有 panic。 + +- 在 main 包中使用 log.Fatal 或 log.Fatalf 结束程序而不是 panic。 + +如果 main 中需要使用 panic,建议使用 log.Fatal 或 log.Fatalf 来取代 panic,因为这样可以记录错误的同时结束程序,方便排查问题。 + +- panic 只能在当前 Goroutine 被捕获。 + +panic 捕获最晚要在当前 Goroutine 最顶层将其捕获,在其他 Goroutine 中无法捕获当前 Goroutine 的 panic。每个自行启动的 Goroutine,必须在入口处捕获 panic,并打印详细堆栈信息或进行其它处理。 + +下面是一个反面示例,其他 Goroutine 中无法捕获当前 Goroutine 的 panic。 +```go +package main + +import ( + "fmt" + "time" +) + +func main() { + defer func() { + if err := recover(); err != nil { + fmt.Println(err) + } + }() + go func() { + fmt.Println("======begin work======") + panic("nil pointer exception") + }() + time.Sleep(1 * time.Second) + fmt.Println("======after work======") +} +``` +程序将意外终止并输出: +``` +======begin work====== +panic: nil pointer exception + +goroutine 6 [running]: +main.main.func2() + /Users/dablelv/work/code/test/main.go:16 +0x65 +created by main.main + /Users/dablelv/work/code/test/main.go:14 +0x48 +``` + +# recover 处理 +- recover 用于捕获 runtime 的异常,禁止滥用 recover。 +- recover 只有在 defer 中调用才会生效。 + +必须在 defer 中使用,一般用来捕获程序运行期间发生异常抛出的 panic 或程序主动抛出的 panic。 +```go +package main + +import ( + "log" +) + +func main() { + defer func() { + if err := recover(); err != nil { + // do something or record log + log.Println("exec panic error: ", err) + // log.Println(debug.Stack()) + } + }() + + getOne() + + panic(44) //手动抛出 panic +} + +// getOne 模拟 slice 越界运行时抛出的 panic。 +func getOne() { + defer func() { + if err := recover(); err != nil { + // do something or record log + log.Println("exec panic error: ", err) + // log.Println(debug.Stack()) + } + }() + + var arr = []string{"a", "b", "c"} + log.Println("hello,", arr[4]) +} +``` +运行结果: +``` +2022/03/27 10:48:42 exec panic error: runtime error: index out of range [4] with length 3 +2022/03/27 10:48:42 exec panic error: 44 +``` + +# 类型断言 +- 类型断言使用 comma ok 式 + +类型断言的单个返回值形式如果断言失败将产生 panic。因此,请始终使用 comma ok 式。如果不关心是否成功,ok 可显示使用空标识符(下划线)忽略。 +```go +// Bad +t := i.(string) + +// Good +t, ok := i.(string) +if !ok { + // 优雅地处理错误。 +} + +// 如果不关心是否成功,可显示忽略 ok。 +t, _ := i.(string) +``` \ No newline at end of file diff --git "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/7.\346\263\250\351\207\212.html" "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/7.\346\263\250\351\207\212.html" index e20e2bd..3234b44 100644 --- "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/7.\346\263\250\351\207\212.html" +++ "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/7.\346\263\250\351\207\212.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1131,7 +1127,7 @@

                                                                                          powered by Gitbook该文章修订时间: -2022-05-22 15:50:17 +2022-05-23 09:59:33 @@ -1176,7 +1172,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"7.注释","level":"1.3.7","depth":2,"next":{"title":"8.命名","level":"1.3.8","depth":2,"path":"第二篇:代码风格/8.命名.md","ref":"第二篇:代码风格/8.命名.md","articles":[]},"previous":{"title":"6.错误处理","level":"1.3.6","depth":2,"path":"第二篇:代码风格/6.错误处理.md","ref":"第二篇:代码风格/6.错误处理.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第二篇:代码风格/7.注释.md","mtime":"2022-05-22T07:50:17.181Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"7.注释","level":"1.3.7","depth":2,"next":{"title":"8.命名","level":"1.3.8","depth":2,"path":"第二篇:代码风格/8.命名.md","ref":"第二篇:代码风格/8.命名.md","articles":[]},"previous":{"title":"6.错误处理","level":"1.3.6","depth":2,"path":"第二篇:代码风格/6.错误处理.md","ref":"第二篇:代码风格/6.错误处理.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第二篇:代码风格/7.注释.md","mtime":"2022-05-23T01:59:33.019Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"..","book":{"language":""}}); }); @@ -1186,10 +1182,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/7.\346\263\250\351\207\212.md" "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/7.\346\263\250\351\207\212.md" new file mode 100644 index 0000000..3f39bac --- /dev/null +++ "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/7.\346\263\250\351\207\212.md" @@ -0,0 +1,135 @@ +在编码阶段同步写好类型、变量、函数、包注释,注释可以通过`godoc`导出生成文档。 + +程序中每一个被导出的(大写的)名字,都应该有一个文档注释。 + +所有注释掉的代码在提交 Code Review 前都应该被删除,除非添加注释讲解为什么不删除, 并且标明后续处理建议(如删除计划)。 + +# 通用 +- 不要用注释删除代码。 +- // 后面要有空格。 +- 中英文之间应该有空格。 +- 特殊实现需要注释。 +- 注释结束添加点或句号,参考标准库源码注释。 + +# 包注释 +- 每个包都应该有一个包注释。 +- 包如果有多个 go 文件,只需要出现在一个 go 文件中(一般是和包同名的文件)即可。 +- 格式为`// Package 包名 包信息描述`。 + +```go +// Package math provides basic constants and mathematical functions. +package math + +// 或者 + +/* +Package template implements data-driven templates for generating textual +output such as HTML. +.... +*/ +package template +``` + +# 函数注释 +- 导出的函数和方法(结构体或接口下的函数称为方法)都必须有注释。 + +注释描述函数或方法功能、调用方等信息。格式为:"// 函数名 函数信息描述"。 + +注意,如果方法的接收器为不可导出类型,可以不注释,但需要质疑该方法可导出的必要性。 +```go +// NewtAttrModel 是属性数据层操作类的工厂方法 +func NewAttrModel(ctx *common.Context) *AttrModel { + // TODO +} +``` +- 避免参数语义不明确。 + +函数调用中意义不明确的实参可能会损害代码可读性。当参数名称的含义不明显时,请为参数添加 C 样式注释 (`/* ... */`) +```go +// Bad +// func printInfo(name string, isLocal, done bool) +printInfo("foo", true, true) + +// Good +// func printInfo(name string, isLocal, done bool) +printInfo("foo", true /* isLocal */, true /* done */) +``` +对于上面的示例代码,还有一种更好的处理方式是将上面的 bool 类型换成自定义类型。将来,该参数可以支持不仅仅局限于两个状态(true/false)。 +```go +type Region int + +const ( + UnknownRegion Region = iota + Local +) + +type Status int + +const ( + StatusReady Status= iota + 1 + StatusDone + // Maybe we will have a StatusInProgress in the future. +) + +func printInfo(name string, region Region, status Status) +``` +- 非导出的函数,如果比较简单,不需要注释。 +- 解析函数应该注明解析字符串的范例,并明确不能处理的异常情况。 + +# 结构体注释 +- 每个需要导出的自定义结构体或者接口都必须有注释说明。 + +注释对结构进行简要介绍,放在结构体定义的前一行。格式为:"// 结构体名 结构体信息描述"。 + +- 必要情况下字段给出注释。 + +结构体内的可导出成员变量名,如果是个生僻词或意义不明确的词,必须要单独给出注释,放在成员变量的前一行或同一行的末尾。 +```go +// User 用户结构定义了用户基础信息 +type User struct { + Name string + Email string + Demographic string // 族群 +} +``` +## 变量和常量注释 +- 每个需要导出的变量和常量都必须有注释说明。 + +注释对变量和常量进行简要介绍,放在常量或变量定义的前一行。独行注释格式为:"// 变量名 描述",斜线后面紧跟一个空格。 +```go +// FlagConfigFile 配置文件的命令行参数名。 +const FlagConfigFile = "--config" + +// FullName 返回指定用户名的完整名称。 +var FullName = func(username string) string { + return fmt.Sprintf("fake-%s", username) +} +``` +- 大块变量或常量定义时的注释方式。 + +块注释即在代码块前给出一个总的说明,然后每行变量或常量的末尾给出详细注释,这样看起来更加简洁。 +```go +// 命令行参数。 +const ( + FlagConfigFile1 = "--config" // 配置文件的命令行参数名 1。 + FlagConfigFile2 = "--config" // 配置文件的命令行参数名 2。 + FlagConfigFile3 = "--config" // 配置文件的命令行参数名 3。 + FlagConfigFile4 = "--config" // 配置文件的命令行参数名 4。 +) +``` +- 命名清晰的地方,不要添加无意义的注释。 +## 类型注释 +- 每个需要导出的类型定义(type definition)和类型别名(type aliases)都必须有注释说明。 +- 该注释对类型进行简要介绍,放在定义的前一行。 +- 格式为:"// 类型名 描述"。 + +```go +// StorageClass 存储类型 +type StorageClass string + +// FakeTime 标准库时间的类型别名 +type FakeTime = time.Time +``` +## 接口注释 +- 导出与非导出接口均需要有注释。 +- 需要描述谁,在什么场景下,如何使用接口。 \ No newline at end of file diff --git "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/8.\345\221\275\345\220\215.html" "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/8.\345\221\275\345\220\215.html" index bbb18aa..ee443b9 100644 --- "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/8.\345\221\275\345\220\215.html" +++ "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/8.\345\221\275\345\220\215.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1316,7 +1312,7 @@

                                                                                          powered by Gitbook该文章修订时间: -2022-05-22 15:54:25 +2022-05-23 09:59:33
                                                                                          @@ -1361,7 +1357,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"8.命名","level":"1.3.8","depth":2,"next":{"title":"9.流程控制","level":"1.3.9","depth":2,"path":"第二篇:代码风格/9.流程控制.md","ref":"第二篇:代码风格/9.流程控制.md","articles":[]},"previous":{"title":"7.注释","level":"1.3.7","depth":2,"path":"第二篇:代码风格/7.注释.md","ref":"第二篇:代码风格/7.注释.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第二篇:代码风格/8.命名.md","mtime":"2022-05-22T07:54:25.637Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"8.命名","level":"1.3.8","depth":2,"next":{"title":"9.流程控制","level":"1.3.9","depth":2,"path":"第二篇:代码风格/9.流程控制.md","ref":"第二篇:代码风格/9.流程控制.md","articles":[]},"previous":{"title":"7.注释","level":"1.3.7","depth":2,"path":"第二篇:代码风格/7.注释.md","ref":"第二篇:代码风格/7.注释.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第二篇:代码风格/8.命名.md","mtime":"2022-05-23T01:59:33.020Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"..","book":{"language":""}}); }); @@ -1371,10 +1367,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/8.\345\221\275\345\220\215.md" "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/8.\345\221\275\345\220\215.md" new file mode 100644 index 0000000..a5d7e2d --- /dev/null +++ "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/8.\345\221\275\345\220\215.md" @@ -0,0 +1,318 @@ +命名是代码规范中很重要的一部分,统一的命名规范有利于提高代码的可读性,好的命名仅仅通过命名就可以获取到足够多的信息。 + +# 通用规则 +- 不要用宽泛、无意义的名字,如: + - util + - helper + - info + - common + +- 缩略语要么全小写,要么全大写。 + +```go +// Bad +Md5 +Uid + +// Good +MD5 +md5 +UID +uid +``` +- 非缩略语则应该使用驼峰命名。 +- 不要使用2/4来表达英文 to/for。 +- 如无必要,不要起和包相同的名字。 + +# 项目命名 +- 小写,如果有多个单词使用连字符分隔。 + +```go +// Bad +GoEcharts +goecharts +goEcharts + +// Good +go-echarts +``` + +# 包命名 +- 保持 package 的名字和目录一致。 +- 尽量采取有意义、简短的包名,尽量不要和标准库冲突。 +- 包名应该为小写单词,不要使用下划线或者混合大小写,使用多级目录来划分层级。 +- 简单明了的包命名,如:time、list、http。 +- 不用复数。如 net/url 而不是net/urls。 +- 包名谨慎使用缩写。当缩写是程序员广泛熟知的词时,可以使用缩写。例如: + * strconv (string conversion) + - syscall (system call) + - fmt (formatted I/O) +- 不要使用大而全的无意义包名。 + +如 `util、common、misc、global`。package 名字应该追求清晰且越来越收敛,符合‘单一职责’原则,而不是像`common`一样,什么都能往里面放,越来越膨胀,让依赖关系变得复杂,不利于阅读、复用、重构。注意,`xxx/utils/encryption`这样的包名是允许的。 + +- 只有一个源文件的包,包名应该和文件名保持一致。 +- 不要轻易使用别名。 + +更多可参考 [Package names - The Go Blog](https://blog.golang.org/package-names) 和 [Style guideline for Go packages] +(https://rakyll.org/style-packages/)。 + +# 文件命名 +- 采用有意义、简短的文件名。 +- 文件名应该采用小写,并且使用下划线分割各个单词。 + +# 函数命名 +- 函数名必须遵循驼峰式,首字母根据访问控制决定使用大写或小写。 +- 代码生成工具自动生成的代码可排除此规则(如协议生成文件 xxx.pb.go,[gotests](https://github.com/cweill/gotests) 工具自动生成文件 xxx_test.go 里面的下划线)。 +- 函数应该以动词开头。 + +```go +// Bad +func panicLinesParsing(){} +func (f VerifyFlow) DataETL(ctx context.Context, datas []Data){} + +// Good +func parsePanicLines(){} +func (f VerifyFlow) ETLData(ctx context.Context, datas []Data){} +``` +# 结构体命名 +- 采用驼峰命名方式,首字母根据访问控制采用大写或者小写。 +- 结构体名应该是名词或名词短语,如 Customer、WikiPage、Account、AddressParser,它不应是动词。 +- 避免使用 Data、Info 这类意义太宽泛的结构体名。 +- 结构体的定义和初始化格式采用多行。 + +```go +// User 多行定义。 +type User struct { + Name string + Email string +} + +// 多行初始化。 +u := User{ + UserName: "john", + Email: "john@example.com", +} +``` +# 接口命名 +- 命名规则基本保持和结构体命名规则一致。 +- 单个函数的接口名以 er 作为后缀,如 Reader,Writer。 + +```go +// Reader 字节数组读取接口。 +type Reader interface { + // Read 读取整个给定的字节数据并返回读取的长度 + Read(p []byte) (n int, err error) +} +``` +- 两个函数的接口名综合两个函数名。 +- 三个以上函数的接口名,类似于结构体名。 + +```go +// Car 小汽车结构申明。 +type Car interface { + // Start ... + Start([]byte) + // Stop ... + Stop() error + // Recover ... + Recover() +} +``` +# 量命名 +## 通用 +- 量名不应该以类型作为前缀/后缀。 + +```go +// map +filterHandlerMap -> opToHandler + +// slice +uidSlice -> uids + +// array +uidArray -> uids + +// 二维切片或数组。 +// 比如多个班级下的学生ID。 +uidSliceSlice -> classesUIDs +``` +- 量名应该是名词,进行时和过去式可以做形容词,成为量名的一部分。 +- 特有名词时,需遵循以下规则: + - 如果变量为私有,且特有名词为首个单词,则使用小写,如 apiClient; + - 其他情况都应该使用该名词原有的写法,如 APIClient、repoID、UserID; + - 错误示例:UrlArray,应该写成 urlArray 或者 URLArray; + - 详细的专有名词列表可参考[这里](https://github.com/golang/lint/blob/738671d3881b9731cc63024d5d88cf28db875626/lint.go#L770)。 +- 尽量不要用拼音命名。 +- 量名遵循驼峰式,根据是否导出决定首字母大小写。 + +```go +// 导出全局变量。 +var AppVersion = "1.0.0" +// 未导出全局变量。 +var appVersion = "1.0.0" + +// 导出全局常量。 +const AppVersion = "1.0.0" +// 未导出全局常量。 +const appVersion = "1.0.0" +``` + +- 若量类型为 bool 类型,则名称应以 Has,Is,Can 或 Allow 等单词开头。 +- 私有量和局部量规范一致,均以小写字母开头。 +- 作用域较小的名字(局部变量/函数参数),尽量使用简短的名字。 + +如 c 比 lineCount 要好,i 比 sliceIndex 要好。 +```go +// Bad +lineCount := getlineCount() + for sliceIndex := range msgs { +} + +// Good +c := getlineCount() + for i := range msgs { +} +``` +- 作用域较大的名字(全局变量),不要使用缩写,要有明确的意义。 + +如 lineCount 要比 c 好,sliceIndex 要比 i 好。 +```go +// Bad +var c, i int + +// Good +var lineCount, sliceIndex int +``` +- 全局量中不要包含格式化字符,否则必然违反就近原则。 + +```go +// Bad +var ( + tGitHost = "https://git.code.oa.com" + mrCommitsUri = "/api/v3/projects/%s/merge_request/%s/commits" +) + +// Good +func getMRCommitsUri() string { + return fmt.Sprintf("/api/v3/projects/%s/merge_request/%s/commits", "foo", "bar") +} +``` + +## 常量命名 +- 如果是枚举类型的常量,需要先创建相应类型。 + +```go +// Scheme 传输协议。 +type Scheme string + +// 传输协议。 +const ( + HTTP Scheme = "http" // HTTP 明文传输协议 + HTTPS Scheme = "https" // HTTPS 加密传输协议 +) +``` + +# 方法接收器命名 +- 推荐以类名第一个英文首字母的小写作为接收器的命名。 +- 接收器的名称在函数超过 20 行的时候不要用单字符。 +- 命名不能采用 me,this,self 这类易混淆名称。 + +# 错误命名 +对于存储为全局变量的错误值,根据是否导出,使用前缀 Err 或 err。 +```go +var ( + // 导出以下两个错误,以便此包的用户可以将它们与errors.Is 进行匹配。 + ErrBrokenLink = errors.New("link is broken") + ErrCouldNotOpen = errors.New("could not open") + + // 这个错误没有被导出,因为我们不想让它成为我们公共 API 的一部分。 + errNotFound = errors.New("not found") +) +``` +对于自定义错误类型,请改用后缀 Error。 +```go +// 这个错误被导出,以便这个包的用户可以将它与 errors.As 匹配。 +type NotFoundError struct { + File string +} + +func (e *NotFoundError) Error() string { + return fmt.Sprintf("file %q not found", e.File) +} + +// 这个错误没有被导出,因为我们不想让它成为公共 API 的一部分。 +// 但我们仍然可以在的包内将其和 errors.As 一起使用。 +type resolveError struct { + Path string +} + +func (e *resolveError) Error() string { + return fmt.Sprintf("resolve %q", e.Path) +} +``` +# 避免使用内置名称 +Go 语言规范 [language specification](https://golang.org/ref/spec) 概述了几个内置的,不应在 Go 项目中使用的标识符 [predeclared identifiers] +(https://golang.org/ref/spec#Predeclared_identifiers)。 +``` +Types: + bool byte complex64 complex128 error float32 float64 + int int8 int16 int32 int64 rune string + uint uint8 uint16 uint32 uint64 uintptr + +Constants: + true false iota + +Zero value: + nil + +Functions: + append cap close complex copy delete imag len + make new panic print println real recover +``` +在使用预先分配的标识符时编译器不会报告错误,但是诸如`go vet`之类的工具会正确地指出这些和其他情况下的隐式问题。 +```go +// Bad +// 作用域内隐式覆盖 error interface +var error string + +func handleErrorMessage(error string) { + // 作用域隐藏内置 error +} + +type Foo struct { + // 虽然这些使用内置标识符的自定义字段可以编译通过,但对 error 或 string 字符串的搜索存在二义性 + error error + string string +} + +func (f Foo) Error() error { + // error 和 f.error 在视觉上是相似的 + return f.error +} + +func (f Foo) String() string { + // string and f.string 在视觉上是相似的 + return f.string +} + +// Good +var errorMessage string + +func handleErrorMessage(msg string) { +} + +type Foo struct { + // error 和 string 现在是明确的 + err error + str string +} + +func (f Foo) Error() error { + return f.err +} + +func (f Foo) String() string { + return f.str +} +``` \ No newline at end of file diff --git "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/9.\346\265\201\347\250\213\346\216\247\345\210\266.html" "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/9.\346\265\201\347\250\213\346\216\247\345\210\266.html" index c5dbb1d..27262c1 100644 --- "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/9.\346\265\201\347\250\213\346\216\247\345\210\266.html" +++ "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/9.\346\265\201\347\250\213\346\216\247\345\210\266.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1317,7 +1313,7 @@

                                                                                          powered by Gitbook该文章修订时间: -2022-05-22 16:56:50 +2022-05-23 09:59:33 @@ -1362,7 +1358,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"9.流程控制","level":"1.3.9","depth":2,"next":{"title":"10.函数","level":"1.3.10","depth":2,"path":"第二篇:代码风格/10.函数.md","ref":"第二篇:代码风格/10.函数.md","articles":[]},"previous":{"title":"8.命名","level":"1.3.8","depth":2,"path":"第二篇:代码风格/8.命名.md","ref":"第二篇:代码风格/8.命名.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第二篇:代码风格/9.流程控制.md","mtime":"2022-05-22T08:56:50.304Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"9.流程控制","level":"1.3.9","depth":2,"next":{"title":"10.函数","level":"1.3.10","depth":2,"path":"第二篇:代码风格/10.函数.md","ref":"第二篇:代码风格/10.函数.md","articles":[]},"previous":{"title":"8.命名","level":"1.3.8","depth":2,"path":"第二篇:代码风格/8.命名.md","ref":"第二篇:代码风格/8.命名.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第二篇:代码风格/9.流程控制.md","mtime":"2022-05-23T01:59:33.020Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"..","book":{"language":""}}); }); @@ -1372,10 +1368,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/9.\346\265\201\347\250\213\346\216\247\345\210\266.md" "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/9.\346\265\201\347\250\213\346\216\247\345\210\266.md" new file mode 100644 index 0000000..7ffad9e --- /dev/null +++ "b/docs/\347\254\254\344\272\214\347\257\207\357\274\232\344\273\243\347\240\201\351\243\216\346\240\274/9.\346\265\201\347\250\213\346\216\247\345\210\266.md" @@ -0,0 +1,332 @@ +# if +- 最小化变量作用域。 + +if 接受初始化语句,尽可能缩小变量作用域。 +```go +// Bad +err := file.Chmod(0664) +if err != nil { + return err +} + +// Good +if err := file.Chmod(0664); err != nil { + return err +} +``` +如果需要在 if 之外使用函数调用的结果,则不应尝试缩小范围。 +```go +// Bad +if data, err := ioutil.ReadFile(name); err == nil { + err = cfg.Decode(data) + if err != nil { + return err + } + + fmt.Println(cfg) + return nil +} else { + return err +} + +// Good +data, err := ioutil.ReadFile(name) +if err != nil { + return err +} + +if err := cfg.Decode(data); err != nil { + return err +} + +fmt.Println(cfg) +return nil +``` + +- if 对两个值进行判断时,被比较的值放在左边。 + +```go +// Bad +if nil != err { + // error handling +} +if 0 == errorCode { + // do something +} + +// Good +if err != nil { + // error handling +} +if errorCode == 0 { + // do something +} +``` +- if 对于 bool 类型的变量,应直接进行真假判断。 +```go +var allowUserLogin bool +// Bad +if allowUserLogin == true { + // do something +} +if allowUserLogin == false { + // do something +} + +// Good +if allowUserLogin { + // do something +} +if !allowUserLogin { + // do something +} +``` +- 不必要的 else。 + +如果在 if 的两个分支中都设置变量,则可以将其替换为单个 if。 +```go +// Bad +var a int +if b { + a = 100 +} else { + a = 10 +} + +// Good +a := 10 +if b { + a = 100 +} +``` +又如 if else 通常可以简写为 if return。 +```go +// Bad +func Foo(bar int) { + if bar == 1 { + // ... + } else { + // ... + } +} + +// Good +func Foo() { + if bar == 1 { + // ... + return + } + // ... +} +``` +- 多个相似 if 用 switch 替换。 +```go +// Bad +func foo(key string) { + if key == pathKey { + ... + } + if key == urlKey { + ... + } +} + +// Good +func foo(key string) { + switch key { + case pathKey: + ... + case urlKey: + ... + } +} +``` +- 使用 == "" 判断字符串是否为空,这样更加直观。 +```go +// Bad +if len(str) == 0 { + ... +} + +// Good +if str == "" { + ... +} +``` +- 把简单的逻辑判断放前面,复杂的逻辑判断放后面。 +- 不要使用双重否定。 +- 判断条件较为复杂时,考虑封装成函数。 +- 使用了 else if 则需要以 else 结束。 + +```go +// Bad +if foo == "a" { + ... +} else if foo == "b" { + ... +} + +// Good +if foo == "a" { + ... +} else if foo == "b" { + ... +} else { + // 需要有一个缺省处理逻辑 +} +``` + +# for +- 最小化变量作用域。 + +for 接受初始化语句,尽可能缩小变量作用域。 +```go +// Bad +sum := 0 +i := 0 +for ; i < 10; i++ { + sum += 1 +} + +// Good +sum := 0 +for i := 0; i < 10; i++ { + sum += 1 +} +``` +- 循环变量的地址不要存储。 + +循环变量的地址指向的是同一个变量,我们可以通过赋值给一个同名的变量,通过变量逃逸,来达到取不同地址的目的。 +```go +// Bad +func main() { + ints := []int{1, 2, 3, 4, 5} + for _, v := range ints { + fmt.Println(&v) // 打印的是相同的地址 + } +} + +// Good +func main() { + ints := []int{1, 2, 3, 4, 5} + for _, v := range ints { + v := v + fmt.Println(&v) // 打印的是不同的地址 + } +} +``` + +# range +- 如果只需要第一项(key),就丢弃第二项(value)。 + +```go +for key := range m { + if key.expired() { + delete(m, key) + } +} +``` +- 如果只需要第二项,则把第一项置为空标识符(下划线)。 + +```go +sum := 0 +for _, v := range array { + sum += v +} +``` +# switch +- 必须要有 default。 + +```go +switch os := runtime.GOOS; os { + case "darwin": + fmt.Println("MAC OS") + case "linux": + fmt.Println("Linux.") + default: + // freebsd, openbsd, + // plan9, windows... + fmt.Printf("%s.\n", os) +} +``` +# return +- 尽早 return。 + +一旦有错误发生,马上返回。 +```go +f, err := os.Open(name) +if err != nil { + return err +} + +defer f.Close() + +d, err := f.Stat() +if err != nil { + return err +} + +codeUsing(f, d) +``` +# goto +业务代码禁止使用 goto,其他框架或底层源码推荐尽量不用。 + +# 程序退出方式 +- 使用`os.Exit`或者`log.Fatal*`退出程序,而不是`panic`。 +- 在 main() 中退出程序且只退出一次。 + +仅在 main() 函数中调用`os.Exit`或`log.Fatal*`且只调用一次。如果有多个错误场景停止程序执行,请将该逻辑放在单独的函数并从中返回错误。 这会精简`main()`函数,并将所有关键业务逻辑放入一个单独的、可测试的函数中。 +```go +// Bad +package main +func main() { + args := os.Args[1:] + if len(args) != 1 { + log.Fatal("missing file") + } + name := args[0] + f, err := os.Open(name) + if err != nil { + log.Fatal(err) + } + defer f.Close() + // 如果我们调用 log.Fatal f.Close 将不会被执行 + b, err := ioutil.ReadAll(f) + if err != nil { + log.Fatal(err) + } + // ... +} + +// Good +package main +func main() { + if err := run(); err != nil { + log.Fatal(err) + } +} +func run() error { + args := os.Args[1:] + if len(args) != 1 { + return errors.New("missing file") + } + name := args[0] + f, err := os.Open(name) + if err != nil { + return err + } + defer f.Close() + b, err := ioutil.ReadAll(f) + if err != nil { + return err + } + // ... +} +``` +当程序的多个函数具有退出能力时会存在一些问题: + +(1)不明显的控制流:任何函数都可以退出程序,因此很难对控制流进行推理; + +(2)难以测试:退出程序的函数也将退出调用它的测试,这使得函数很难测试,并跳过了尚未被运行的其他代码; + +(3)跳过清理:当函数退出程序时,会跳过已经进入 defer 队列里的函数调用,这增加了跳过重要清理任务的风险。 \ No newline at end of file diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/0.\345\257\274\350\257\255.html" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/0.\345\257\274\350\257\255.html" index 1afb1ed..3c446dc 100644 --- "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/0.\345\257\274\350\257\255.html" +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/0.\345\257\274\350\257\255.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -995,7 +991,7 @@

                                                                                          代码的稳健、可读和高效是我们每一个位 coder 的共同追求。本篇将结合 Go 语言特性,为书写高效的代码,力争从常用数据结构、内存管理和并发编程三个方面给出相关建议。话不多说,让我们一起学习 Go 高性能编程技法吧。

                                                                                          powered by Gitbook该文章修订时间: -2022-05-18 22:23:35 +2022-05-16 19:20:12
                                                                                          @@ -1032,7 +1028,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"0.导语","level":"1.5.1","depth":2,"next":{"title":"1.常用数据结构","level":"1.5.2","depth":2,"ref":"","articles":[{"title":"1.反射虽好,切莫贪杯","level":"1.5.2.1","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.md","ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.md","articles":[]},{"title":"2.避免重复转换字符串到字节切片","level":"1.5.2.2","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.md","ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.md","articles":[]},{"title":"3.指定容器容量","level":"1.5.2.3","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.md","ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.md","articles":[]},{"title":"4.字符串拼接方式","level":"1.5.2.4","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.md","ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.md","articles":[]},{"title":"5.[]struct{} 的遍历方式","level":"1.5.2.5","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.md","ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.md","articles":[]},{"title":"6.切片删除指定元素","level":"1.5.2.6","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.md","ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.md","articles":[]}]},"previous":{"title":"第四篇:最佳性能","level":"1.5","depth":1,"ref":"","articles":[{"title":"0.导语","level":"1.5.1","depth":2,"path":"第四篇:最佳性能/0.导语.md","ref":"第四篇:最佳性能/0.导语.md","articles":[]},{"title":"1.常用数据结构","level":"1.5.2","depth":2,"ref":"","articles":[{"title":"1.反射虽好,切莫贪杯","level":"1.5.2.1","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.md","ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.md","articles":[]},{"title":"2.避免重复转换字符串到字节切片","level":"1.5.2.2","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.md","ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.md","articles":[]},{"title":"3.指定容器容量","level":"1.5.2.3","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.md","ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.md","articles":[]},{"title":"4.字符串拼接方式","level":"1.5.2.4","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.md","ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.md","articles":[]},{"title":"5.[]struct{} 的遍历方式","level":"1.5.2.5","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.md","ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.md","articles":[]},{"title":"6.切片删除指定元素","level":"1.5.2.6","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.md","ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.md","articles":[]}]},{"title":"2.内存管理","level":"1.5.3","depth":2,"ref":"","articles":[{"title":"1.使用空结构体节省内存","level":"1.5.3.1","depth":3,"path":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.md","ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.md","articles":[]},{"title":"2.struct 布局考虑内存对齐","level":"1.5.3.2","depth":3,"path":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.md","ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.md","articles":[]},{"title":"3.减少逃逸,将变量限制在栈上","level":"1.5.3.3","depth":3,"path":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.md","ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.md","articles":[]},{"title":"4.sync.Pool 复用对象","level":"1.5.3.4","depth":3,"path":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.md","ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.md","articles":[]}]},{"title":"3.并发编程","level":"1.5.4","depth":2,"ref":"","articles":[{"title":"1.关于锁","level":"1.5.4.1","depth":3,"path":"第四篇:最佳性能/3.并发编程/1.关于锁.md","ref":"第四篇:最佳性能/3.并发编程/1.关于锁.md","articles":[]},{"title":"2.限制协程数量","level":"1.5.4.2","depth":3,"path":"第四篇:最佳性能/3.并发编程/2.限制协程数量.md","ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.md","articles":[]},{"title":"3.使用 sync.Once 避免重复执行","level":"1.5.4.3","depth":3,"path":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.md","ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.md","articles":[]},{"title":"4.使用 sync.Cond 通知协程","level":"1.5.4.4","depth":3,"path":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.md","ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.md","articles":[]}]}]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/0.导语.md","mtime":"2022-05-18T14:23:35.788Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"0.导语","level":"1.5.1","depth":2,"next":{"title":"1.常用数据结构","level":"1.5.2","depth":2,"ref":"","articles":[{"title":"1.反射虽好,切莫贪杯","level":"1.5.2.1","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.md","ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.md","articles":[]},{"title":"2.避免重复转换字符串到字节切片","level":"1.5.2.2","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.md","ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.md","articles":[]},{"title":"3.指定容器容量","level":"1.5.2.3","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.md","ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.md","articles":[]},{"title":"4.字符串拼接方式","level":"1.5.2.4","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.md","ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.md","articles":[]},{"title":"5.[]struct{} 的遍历方式","level":"1.5.2.5","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.md","ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.md","articles":[]},{"title":"6.切片删除指定元素","level":"1.5.2.6","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.md","ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.md","articles":[]}]},"previous":{"title":"第四篇:最佳性能","level":"1.5","depth":1,"ref":"","articles":[{"title":"0.导语","level":"1.5.1","depth":2,"path":"第四篇:最佳性能/0.导语.md","ref":"第四篇:最佳性能/0.导语.md","articles":[]},{"title":"1.常用数据结构","level":"1.5.2","depth":2,"ref":"","articles":[{"title":"1.反射虽好,切莫贪杯","level":"1.5.2.1","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.md","ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.md","articles":[]},{"title":"2.避免重复转换字符串到字节切片","level":"1.5.2.2","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.md","ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.md","articles":[]},{"title":"3.指定容器容量","level":"1.5.2.3","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.md","ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.md","articles":[]},{"title":"4.字符串拼接方式","level":"1.5.2.4","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.md","ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.md","articles":[]},{"title":"5.[]struct{} 的遍历方式","level":"1.5.2.5","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.md","ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.md","articles":[]},{"title":"6.切片删除指定元素","level":"1.5.2.6","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.md","ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.md","articles":[]}]},{"title":"2.内存管理","level":"1.5.3","depth":2,"ref":"","articles":[{"title":"1.使用空结构体节省内存","level":"1.5.3.1","depth":3,"path":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.md","ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.md","articles":[]},{"title":"2.struct 布局考虑内存对齐","level":"1.5.3.2","depth":3,"path":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.md","ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.md","articles":[]},{"title":"3.减少逃逸,将变量限制在栈上","level":"1.5.3.3","depth":3,"path":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.md","ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.md","articles":[]},{"title":"4.sync.Pool 复用对象","level":"1.5.3.4","depth":3,"path":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.md","ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.md","articles":[]}]},{"title":"3.并发编程","level":"1.5.4","depth":2,"ref":"","articles":[{"title":"1.关于锁","level":"1.5.4.1","depth":3,"path":"第四篇:最佳性能/3.并发编程/1.关于锁.md","ref":"第四篇:最佳性能/3.并发编程/1.关于锁.md","articles":[]},{"title":"2.限制协程数量","level":"1.5.4.2","depth":3,"path":"第四篇:最佳性能/3.并发编程/2.限制协程数量.md","ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.md","articles":[]},{"title":"3.使用 sync.Once 避免重复执行","level":"1.5.4.3","depth":3,"path":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.md","ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.md","articles":[]},{"title":"4.使用 sync.Cond 通知协程","level":"1.5.4.4","depth":3,"path":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.md","ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.md","articles":[]}]}]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/0.导语.md","mtime":"2022-05-16T11:20:12.521Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"..","book":{"language":""}}); }); @@ -1042,10 +1038,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/0.\345\257\274\350\257\255.md" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/0.\345\257\274\350\257\255.md" new file mode 100644 index 0000000..113e47a --- /dev/null +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/0.\345\257\274\350\257\255.md" @@ -0,0 +1 @@ +代码的稳健、可读和高效是我们每一个位 coder 的共同追求。本篇将结合 Go 语言特性,为书写高效的代码,力争从常用数据结构、内存管理和并发编程三个方面给出相关建议。话不多说,让我们一起学习 Go 高性能编程技法吧。 \ No newline at end of file diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/1.\345\217\215\345\260\204\350\231\275\345\245\275\357\274\214\345\210\207\350\216\253\350\264\252\346\235\257.html" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/1.\345\217\215\345\260\204\350\231\275\345\245\275\357\274\214\345\210\207\350\216\253\350\264\252\346\235\257.html" index c7d8c84..e81ae1c 100644 --- "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/1.\345\217\215\345\260\204\350\231\275\345\245\275\357\274\214\345\210\207\350\216\253\350\264\252\346\235\257.html" +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/1.\345\217\215\345\260\204\350\231\275\345\245\275\357\274\214\345\210\207\350\216\253\350\264\252\346\235\257.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1138,7 +1134,7 @@

                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 19:22:09 +2022-05-07 19:15:30 @@ -1179,7 +1175,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"1.反射虽好,切莫贪杯","level":"1.5.2.1","depth":3,"next":{"title":"2.避免重复转换字符串到字节切片","level":"1.5.2.2","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.md","ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.md","articles":[]},"previous":{"title":"1.常用数据结构","level":"1.5.2","depth":2,"ref":"","articles":[{"title":"1.反射虽好,切莫贪杯","level":"1.5.2.1","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.md","ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.md","articles":[]},{"title":"2.避免重复转换字符串到字节切片","level":"1.5.2.2","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.md","ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.md","articles":[]},{"title":"3.指定容器容量","level":"1.5.2.3","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.md","ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.md","articles":[]},{"title":"4.字符串拼接方式","level":"1.5.2.4","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.md","ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.md","articles":[]},{"title":"5.[]struct{} 的遍历方式","level":"1.5.2.5","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.md","ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.md","articles":[]},{"title":"6.切片删除指定元素","level":"1.5.2.6","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.md","ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.md","mtime":"2022-05-08T11:22:09.375Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"1.反射虽好,切莫贪杯","level":"1.5.2.1","depth":3,"next":{"title":"2.避免重复转换字符串到字节切片","level":"1.5.2.2","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.md","ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.md","articles":[]},"previous":{"title":"1.常用数据结构","level":"1.5.2","depth":2,"ref":"","articles":[{"title":"1.反射虽好,切莫贪杯","level":"1.5.2.1","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.md","ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.md","articles":[]},{"title":"2.避免重复转换字符串到字节切片","level":"1.5.2.2","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.md","ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.md","articles":[]},{"title":"3.指定容器容量","level":"1.5.2.3","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.md","ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.md","articles":[]},{"title":"4.字符串拼接方式","level":"1.5.2.4","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.md","ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.md","articles":[]},{"title":"5.[]struct{} 的遍历方式","level":"1.5.2.5","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.md","ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.md","articles":[]},{"title":"6.切片删除指定元素","level":"1.5.2.6","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.md","ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.md","mtime":"2022-05-07T11:15:30.250Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1189,10 +1185,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/1.\345\217\215\345\260\204\350\231\275\345\245\275\357\274\214\345\210\207\350\216\253\350\264\252\346\235\257.md" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/1.\345\217\215\345\260\204\350\231\275\345\245\275\357\274\214\345\210\207\350\216\253\350\264\252\346\235\257.md" new file mode 100644 index 0000000..8e74070 --- /dev/null +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/1.\345\217\215\345\260\204\350\231\275\345\245\275\357\274\214\345\210\207\350\216\253\350\264\252\346\235\257.md" @@ -0,0 +1,162 @@ +标准库 reflect 为 Go 语言提供了运行时动态获取对象的类型和值以及动态创建对象的能力。反射可以帮助抽象和简化代码,提高开发效率。 + +Go 语言标准库以及很多开源软件中都使用了 Go 语言的反射能力,例如用于序列化和反序列化的 json、ORM 框架 gorm、xorm 等。 + +# 1.优先使用 strconv 而不是 fmt +基本数据类型与字符串之间的转换,优先使用 strconv 而不是 fmt,因为前者性能更佳。 +```go +// Bad +for i := 0; i < b.N; i++ { + s := fmt.Sprint(rand.Int()) +} + +BenchmarkFmtSprint-4 143 ns/op 2 allocs/op + +// Good +for i := 0; i < b.N; i++ { + s := strconv.Itoa(rand.Int()) +} + +BenchmarkStrconv-4 64.2 ns/op 1 allocs/op +``` +为什么性能上会有两倍多的差距,因为 fmt 实现上利用反射来达到范型的效果,在运行时进行类型的动态判断,所以带来了一定的性能损耗。 + +# 2.少量的重复不比反射差 +有时,我们需要一些工具函数。比如从 uint64 切片过滤掉指定的元素。 + +利用反射,我们可以实现一个类型泛化支持扩展的切片过滤函数。 +```go +// DeleteSliceElms 从切片中过滤指定元素。注意:不修改原切片。 +func DeleteSliceElms(i interface{}, elms ...interface{}) interface{} { + // 构建 map set。 + m := make(map[interface{}]struct{}, len(elms)) + for _, v := range elms { + m[v] = struct{}{} + } + // 创建新切片,过滤掉指定元素。 + v := reflect.ValueOf(i) + t := reflect.MakeSlice(reflect.TypeOf(i), 0, v.Len()) + for i := 0; i < v.Len(); i++ { + if _, ok := m[v.Index(i).Interface()]; !ok { + t = reflect.Append(t, v.Index(i)) + } + } + return t.Interface() +} +``` +很多时候,我们可能只需要操作一个类型的切片,利用反射实现的类型泛化扩展的能力压根没用上。退一步说,如果我们真地需要对 uint64 以外类型的切片进行过滤,拷贝一次代码又何妨呢?可以肯定的是,绝大部份场景,根本不会对所有类型的切片进行过滤,那么反射带来好处我们并没有充分享受,但却要为其带来的性能成本买单。 +```go +// DeleteU64liceElms 从 []uint64 过滤指定元素。注意:不修改原切片。 +func DeleteU64liceElms(i []uint64, elms ...uint64) []uint64 { + // 构建 map set。 + m := make(map[uint64]struct{}, len(elms)) + for _, v := range elms { + m[v] = struct{}{} + } + // 创建新切片,过滤掉指定元素。 + t := make([]uint64, 0, len(i)) + for _, v := range i { + if _, ok := m[v]; !ok { + t = append(t, v) + } + } + return t +} +``` +下面看一下二者的性能对比。 +```go +func BenchmarkDeleteSliceElms(b *testing.B) { + slice := []uint64{1, 2, 3, 4, 5, 6, 7, 8, 9} + elms := []interface{}{uint64(1), uint64(3), uint64(5), uint64(7), uint64(9)} + for i := 0; i < b.N; i++ { + _ = DeleteSliceElms(slice, elms...) + } +} + +func BenchmarkDeleteU64liceElms(b *testing.B) { + slice := []uint64{1, 2, 3, 4, 5, 6, 7, 8, 9} + elms := []uint64{1, 3, 5, 7, 9} + for i := 0; i < b.N; i++ { + _ = DeleteU64liceElms(slice, elms...) + } +} +``` +运行上面的基准测试。 +```go +go test -bench=. -benchmem main/reflect +goos: darwin +goarch: amd64 +pkg: main/reflect +cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz +BenchmarkDeleteSliceElms-12 1226868 978.2 ns/op 296 B/op 16 allocs/op +BenchmarkDeleteU64liceElms-12 8249469 145.3 ns/op 80 B/op 1 allocs/op +PASS +ok main/reflect 3.809s +``` +可以看到,反射涉及了额外的类型判断和大量的内存分配,导致其对性能的影响非常明显。随着切片元素的递增,每一次判断元素是否在 map 中,因为 map 的 key 是不确定的类型,会发生变量逃逸,触发堆内存的分配。所以,可预见的是当元素数量增加时,性能差异会越来大。 + +当使用反射时,请问一下自己,我真地需要它吗? + +# 3.慎用 binary.Read 和 binary.Write +binary.Read 和 binary.Write 使用反射并且很慢。如果有需要用到这两个函数的地方,我们应该手动实现这两个函数的相关功能,而不是直接去使用它们。 + +encoding/binary 包实现了数字和字节序列之间的简单转换以及 varints 的编码和解码。varints 是一种使用可变字节表示整数的方法。其中数值本身越小,其所占用的字节数越少。Protocol Buffers 对整数采用的便是这种编码方式。 + +其中数字与字节序列的转换可以用如下三个函数: +```go +// Read 从结构化二进制数据 r 读取到 data。data 必须是指向固定大小值的指针或固定大小值的切片。 +func Read(r io.Reader, order ByteOrder, data interface{}) error +// Write 将 data 的二进制表示形式写入 w。data 必须是固定大小的值或固定大小值的切片,或指向此类数据的指针。 +func Write(w io.Writer, order ByteOrder, data interface{}) error +// Size 返回 Wirte 函数将 v 写入到 w 中的字节数。 +func Size(v interface{}) int +``` +下面以我们熟知的 C 标准库函数 ntohl() 函数为例,看看 Go 利用 binary 包如何实现。 +```go +// Ntohl 将网络字节序的 uint32 转为主机字节序。 +func Ntohl(bys []byte) uint32 { + r := bytes.NewReader(bys) + err = binary.Read(buf, binary.BigEndian, &num) +} + +// 如将 IP 127.0.0.1 网络字节序解析到 uint32 +fmt.Println(Ntohl([]byte{0x7f, 0, 0, 0x1})) // 2130706433 +``` +如果我们针对 uint32 类型手动实现一个 ntohl() 呢? +```go +func NtohlNotUseBinary(bys []byte) uint32 { + return uint32(bys[3]) | uint32(bys[2])<<8 | uint32(bys[1])<<16 | uint32(bys[0])<<24 +} + +// 如将 IP 127.0.0.1 网络字节序解析到 uint32 +fmt.Println(NtohlNotUseBinary([]byte{0x7f, 0, 0, 0x1})) // 2130706433 +``` +该函数也是参考了 encoding/binary 包针对大端字节序将字节序列转为 uint32 类型时的实现。 + +下面看下剥去反射前后二者的性能差异。 +```go +func BenchmarkNtohl(b *testing.B) { + for i := 0; i < b.N; i++ { + _, _ = Ntohl([]byte{0x7f, 0, 0, 0x1}) + } +} + +func BenchmarkNtohlNotUseBinary(b *testing.B) { + for i := 0; i < b.N; i++ { + _ = NtohlNotUseBinary([]byte{0x7f, 0, 0, 0x1}) + } +} +``` +运行上面的基准测试,结果如下: +``` +go test -bench=BenchmarkNtohl.* -benchmem main/reflect +goos: darwin +goarch: amd64 +pkg: main/reflect +cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz +BenchmarkNtohl-12 13026195 81.96 ns/op 60 B/op 4 allocs/op +BenchmarkNtohlNotUseBinary-12 1000000000 0.2511 ns/op 0 B/op 0 allocs/op +PASS +ok main/reflect 1.841s +``` +可见使用反射实现的 encoding/binary 包的性能相较于针对具体类型实现的版本,性能差异非常大。 \ No newline at end of file diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/2.\351\201\277\345\205\215\351\207\215\345\244\215\350\275\254\346\215\242\345\255\227\347\254\246\344\270\262\345\210\260\345\255\227\350\212\202\345\210\207\347\211\207.html" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/2.\351\201\277\345\205\215\351\207\215\345\244\215\350\275\254\346\215\242\345\255\227\347\254\246\344\270\262\345\210\260\345\255\227\350\212\202\345\210\207\347\211\207.html" index b3bd474..4172fa2 100644 --- "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/2.\351\201\277\345\205\215\351\207\215\345\244\215\350\275\254\346\215\242\345\255\227\347\254\246\344\270\262\345\210\260\345\255\227\350\212\202\345\210\207\347\211\207.html" +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/2.\351\201\277\345\205\215\351\207\215\345\244\215\350\275\254\346\215\242\345\255\227\347\254\246\344\270\262\345\210\260\345\255\227\350\212\202\345\210\207\347\211\207.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1025,7 +1021,7 @@

                                                                                          ok main/perf 2.962s

                                                                                          差距不是很大,但是随着字符串长度的增加,差距将会越来越明显。此外,如果这种重复的转换在 Hot Path 上,那么其对性能的影响将被放大。这里解释下 Hot Path,即热点路径,顾名思义,是你的程序中那些会频繁执行到的代码。

                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 19:22:09 +2022-05-07 19:29:10
                                                                                          @@ -1070,7 +1066,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"2.避免重复转换字符串到字节切片","level":"1.5.2.2","depth":3,"next":{"title":"3.指定容器容量","level":"1.5.2.3","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.md","ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.md","articles":[]},"previous":{"title":"1.反射虽好,切莫贪杯","level":"1.5.2.1","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.md","ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.md","mtime":"2022-05-08T11:22:09.375Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"2.避免重复转换字符串到字节切片","level":"1.5.2.2","depth":3,"next":{"title":"3.指定容器容量","level":"1.5.2.3","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.md","ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.md","articles":[]},"previous":{"title":"1.反射虽好,切莫贪杯","level":"1.5.2.1","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.md","ref":"第四篇:最佳性能/1.常用数据结构/1.反射虽好,切莫贪杯.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.md","mtime":"2022-05-07T11:29:10.002Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1080,10 +1076,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/2.\351\201\277\345\205\215\351\207\215\345\244\215\350\275\254\346\215\242\345\255\227\347\254\246\344\270\262\345\210\260\345\255\227\350\212\202\345\210\207\347\211\207.md" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/2.\351\201\277\345\205\215\351\207\215\345\244\215\350\275\254\346\215\242\345\255\227\347\254\246\344\270\262\345\210\260\345\255\227\350\212\202\345\210\207\347\211\207.md" new file mode 100644 index 0000000..8e7a288 --- /dev/null +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/2.\351\201\277\345\205\215\351\207\215\345\244\215\350\275\254\346\215\242\345\255\227\347\254\246\344\270\262\345\210\260\345\255\227\350\212\202\345\210\207\347\211\207.md" @@ -0,0 +1,30 @@ +不要反复从固定字符串创建字节 slice,因为重复的切片初始化会带来性能损耗。相反,请执行一次转换并捕获结果。 +```go +func BenchmarkStringToByte(b *testing.B) { + for i := 0; i < b.N; i++ { + by := []byte("Hello world") + _ = by + } +} + +func BenchmarkStringToByteOnce(b *testing.B) { + bys := []byte("Hello world") + for i := 0; i < b.N; i++ { + by := bys + _ = by + } +} +``` +看一下性能差异,注意需要禁止编译器优化,不然看不出差别。 +``` +go test -bench=BenchmarkStringToByte -gcflags="-N" main/perf +goos: windows +goarch: amd64 +pkg: main/perf +cpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz +BenchmarkStringToByte-8 748467979 1.582 ns/op +BenchmarkStringToByteOnce-8 878246492 1.379 ns/op +PASS +ok main/perf 2.962s +``` +差距不是很大,但是随着字符串长度的增加,差距将会越来越明显。此外,如果这种重复的转换在 Hot Path 上,那么其对性能的影响将被放大。这里解释下 Hot Path,即热点路径,顾名思义,是你的程序中那些会频繁执行到的代码。 \ No newline at end of file diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/3.\346\214\207\345\256\232\345\256\271\345\231\250\345\256\271\351\207\217.html" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/3.\346\214\207\345\256\232\345\256\271\345\231\250\345\256\271\351\207\217.html" index 062d242..93b22d5 100644 --- "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/3.\346\214\207\345\256\232\345\256\271\345\231\250\345\256\271\351\207\217.html" +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/3.\346\214\207\345\256\232\345\256\271\345\231\250\345\256\271\351\207\217.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1055,7 +1051,7 @@

                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 19:22:09 +2022-05-07 19:31:00 @@ -1100,7 +1096,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"3.指定容器容量","level":"1.5.2.3","depth":3,"next":{"title":"4.字符串拼接方式","level":"1.5.2.4","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.md","ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.md","articles":[]},"previous":{"title":"2.避免重复转换字符串到字节切片","level":"1.5.2.2","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.md","ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.md","mtime":"2022-05-08T11:22:09.375Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"3.指定容器容量","level":"1.5.2.3","depth":3,"next":{"title":"4.字符串拼接方式","level":"1.5.2.4","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.md","ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.md","articles":[]},"previous":{"title":"2.避免重复转换字符串到字节切片","level":"1.5.2.2","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.md","ref":"第四篇:最佳性能/1.常用数据结构/2.避免重复转换字符串到字节切片.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.md","mtime":"2022-05-07T11:31:00.999Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1110,10 +1106,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/3.\346\214\207\345\256\232\345\256\271\345\231\250\345\256\271\351\207\217.md" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/3.\346\214\207\345\256\232\345\256\271\345\231\250\345\256\271\351\207\217.md" new file mode 100644 index 0000000..da8c3e9 --- /dev/null +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/3.\346\214\207\345\256\232\345\256\271\345\231\250\345\256\271\351\207\217.md" @@ -0,0 +1,65 @@ +尽可能指定容器容量,以便为容器预先分配内存。这将在后续添加元素时减少通过复制来调整容器大小。 + +# 1.指定 map 容量提示 +在尽可能的情况下,在使用 make() 初始化的时候提供容量信息。 +```go +make(map[T1]T2, hint) +``` +向 make() 提供容量提示会在初始化时尝试调整 map 的大小,这将减少在将元素添加到 map 时为 map 重新分配内存。 + +注意,与 slice 不同。map capacity 提示并不保证完全的抢占式分配,而是用于估计所需的 hashmap bucket 的数量。 因此,在将元素添加到 map 时,甚至在指定 map 容量时,仍可能发生分配。 +```go +// Bad +m := make(map[string]os.FileInfo) + +files, _ := ioutil.ReadDir("./files") +for _, f := range files { + m[f.Name()] = f +} +// m 是在没有大小提示的情况下创建的; 在运行时可能会有更多分配。 + +// Good +files, _ := ioutil.ReadDir("./files") + +m := make(map[string]os.FileInfo, len(files)) +for _, f := range files { + m[f.Name()] = f +} +// m 是有大小提示创建的;在运行时可能会有更少的分配。 +``` + +# 2.指定切片容量 +在尽可能的情况下,在使用 make() 初始化切片时提供容量信息,特别是在追加切片时。 +```go +make([]T, length, capacity) +``` +与 map 不同,slice capacity 不是一个提示:编译器将为提供给 make() 的 slice 的容量分配足够的内存,这意味着后续的 append() 操作将导致零分配(直到 slice 的长度与容量匹配,在此之后,任何 append 都可能调整大小以容纳其他元素)。 +```go +const size = 1000000 + +// Bad +for n := 0; n < b.N; n++ { + data := make([]int, 0) + for k := 0; k < size; k++ { + data = append(data, k) + } +} + +BenchmarkBad-4 219 5202179 ns/op + +// Good +for n := 0; n < b.N; n++ { + data := make([]int, 0, size) + for k := 0; k < size; k++ { + data = append(data, k) + } +} + +BenchmarkGood-4 706 1528934 ns/op +``` +执行基准测试: +```shell +go test -bench=^BenchmarkJoinStr -benchmem +BenchmarkJoinStrWithOperator-8 66930670 17.81 ns/op 0 B/op 0 allocs/op +BenchmarkJoinStrWithSprintf-8 7032921 166.0 ns/op 64 B/op 4 allocs/op +``` \ No newline at end of file diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/4.\345\255\227\347\254\246\344\270\262\346\213\274\346\216\245\346\226\271\345\274\217.html" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/4.\345\255\227\347\254\246\344\270\262\346\213\274\346\216\245\346\226\271\345\274\217.html" index 6f06839..877885a 100644 --- "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/4.\345\255\227\347\254\246\344\270\262\346\213\274\346\216\245\346\226\271\345\274\217.html" +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/4.\345\255\227\347\254\246\344\270\262\346\213\274\346\216\245\346\226\271\345\274\217.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1110,7 +1106,7 @@

                                                                                          BenchmarkJoinStrWithStringsBuilderPreAlloc-8 60079003 20.95 ns/op
                                                                                          powered by Gitbook该文章修订时间: -2022-05-13 15:46:40 +2022-05-12 19:56:05
                                                                                          @@ -1155,7 +1151,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"4.字符串拼接方式","level":"1.5.2.4","depth":3,"next":{"title":"5.[]struct{} 的遍历方式","level":"1.5.2.5","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.md","ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.md","articles":[]},"previous":{"title":"3.指定容器容量","level":"1.5.2.3","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.md","ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.md","mtime":"2022-05-13T07:46:40.800Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"4.字符串拼接方式","level":"1.5.2.4","depth":3,"next":{"title":"5.[]struct{} 的遍历方式","level":"1.5.2.5","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.md","ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.md","articles":[]},"previous":{"title":"3.指定容器容量","level":"1.5.2.3","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.md","ref":"第四篇:最佳性能/1.常用数据结构/3.指定容器容量.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.md","mtime":"2022-05-12T11:56:05.055Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1165,10 +1161,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/4.\345\255\227\347\254\246\344\270\262\346\213\274\346\216\245\346\226\271\345\274\217.md" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/4.\345\255\227\347\254\246\344\270\262\346\213\274\346\216\245\346\226\271\345\274\217.md" new file mode 100644 index 0000000..d6b90e9 --- /dev/null +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/4.\345\255\227\347\254\246\344\270\262\346\213\274\346\216\245\346\226\271\345\274\217.md" @@ -0,0 +1,125 @@ +# 1.行内字符串拼接 +行内拼接字符串为了书写方便快捷,最常用的两个方法是: +- 运算符+ +- `fmt.Sprintf()` + +行内字符串的拼接,主要追求的是代码的简洁可读。`fmt.Sprintf()` 能够接收不同类型的入参,通过格式化输出完成字符串的拼接,使用非常方便。但因其底层实现使用了反射,性能上会有所损耗。 + +运算符 + 只能简单地完成字符串之间的拼接,非字符串类型的变量需要单独做类型转换。行内拼接字符串不会产生内存分配,也不涉及类型地动态转换,所以性能上优于`fmt.Sprintf()`。 + +**从性能出发,兼顾实现的便捷与代码可读性,如果待拼接的字符串不涉及类型转换且数量较少(<=3),行内拼接字符串推荐使用运算符 +,反之使用 `fmt.Sprintf()`。** + +下面看下二者的性能对比。 +```go +// Good +func BenchmarkJoinStrWithOperator(b *testing.B) { + s1, s2, s3 := "foo", "bar", "baz" + for i := 0; i < b.N; i++ { + _ = s1 + s2 + s3 + } +} + +// Bad +func BenchmarkJoinStrWithSprintf(b *testing.B) { + s1, s2, s3 := "foo", "bar", "baz" + for i := 0; i < b.N; i++ { + _ = fmt.Sprintf("%s%s%s", s1, s2, s3) + } +} +``` +执行基准测试结果如下: +```shell +go test -bench=^BenchmarkJoinStr -benchmem . +BenchmarkJoinStrWithOperator-8 70638928 17.53 ns/op 0 B/op 0 allocs/op +BenchmarkJoinStrWithSprintf-8 7520017 157.2 ns/op 64 B/op 4 allocs/op +``` +可以看到,二者的性能差距很大,快达到一个数量级了。所以在不影响代码可读性时,行内字符串尽可能地使用运算符 + 来拼接而不是`fmt.Sprintf()`。 + +# 2.非行内字符串拼接 +字符串拼接还有其他的方式,比如`strings.Join()`、`strings.Builder`、`bytes.Buffer`和`byte[]`,这几种不适合行内使用。当待拼接字符串数量较多时可考虑使用。 + +先看下其性能测试的对比。 +```go +func BenchmarkJoinStrWithStringsJoin(b *testing.B) { + s1, s2, s3 := "foo", "bar", "baz" + for i := 0; i < b.N; i++ { + _ = strings.Join([]string{s1, s2, s3}, "") + } +} + +func BenchmarkJoinStrWithStringsBuilder(b *testing.B) { + s1, s2, s3 := "foo", "bar", "baz" + for i := 0; i < b.N; i++ { + var builder strings.Builder + _, _ = builder.WriteString(s1) + _, _ = builder.WriteString(s2) + _, _ = builder.WriteString(s3) + } +} + +func BenchmarkJoinStrWithBytesBuffer(b *testing.B) { + s1, s2, s3 := "foo", "bar", "baz" + for i := 0; i < b.N; i++ { + var buffer bytes.Buffer + _, _ = buffer.WriteString(s1) + _, _ = buffer.WriteString(s2) + _, _ = buffer.WriteString(s3) + } +} + +func BenchmarkJoinStrWithByteSlice(b *testing.B) { + s1, s2, s3 := "foo", "bar", "baz" + for i := 0; i < b.N; i++ { + var bys []byte + bys= append(bys, s1...) + bys= append(bys, s2...) + _ = append(bys, s3...) + } +} + +func BenchmarkJoinStrWithByteSlicePreAlloc(b *testing.B) { + s1, s2, s3 := "foo", "bar", "baz" + for i := 0; i < b.N; i++ { + bys:= make([]byte, 0, 9) + bys= append(bys, s1...) + bys= append(bys, s2...) + _ = append(bys, s3...) + } +} +``` +基准测试结果如下: +```shell +go test -bench=^BenchmarkJoinStr . +goos: windows +goarch: amd64 +pkg: main/perf +cpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz +BenchmarkJoinStrWithStringsJoin-8 31543916 36.39 ns/op +BenchmarkJoinStrWithStringsBuilder-8 30079785 40.60 ns/op +BenchmarkJoinStrWithBytesBuffer-8 31663521 39.58 ns/op +BenchmarkJoinStrWithByteSlice-8 30748495 37.34 ns/op +BenchmarkJoinStrWithByteSlicePreAlloc-8 665341896 1.813 ns/op +``` +从结果可以看出,`strings.Join()`、`strings.Builder`、`bytes.Buffer`和`byte[]` 的性能相近。如果结果字符串的长度是可预知的,使用 `byte[]` 且预先分配容量的拼接方式性能最佳。 + +所以如果对性能要求非常严格,或待拼接的字符串数量足够多时,建议使用 `byte[]` 预先分配容量这种方式。 + +**综合易用性和性能,一般推荐使用`strings.Builder`来拼接字符串。** + +`string.Builder`也提供了预分配内存的方式 Grow: +```go +func BenchmarkJoinStrWithStringsBuilderPreAlloc(b *testing.B) { + s1, s2, s3 := "foo", "bar", "baz" + for i := 0; i < b.N; i++ { + var builder strings.Builder + builder.Grow(9) + _, _ = builder.WriteString(s1) + _, _ = builder.WriteString(s2) + _, _ = builder.WriteString(s3) + } +} +``` +使用了 Grow 优化后的版本的性能测试结果如下。可以看出相较于不预先分配空间的方式,性能提升了很多。 +```shell +BenchmarkJoinStrWithStringsBuilderPreAlloc-8 60079003 20.95 ns/op +``` \ No newline at end of file diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/5.[]struct{}\347\232\204\351\201\215\345\216\206\346\226\271\345\274\217.html" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/5.[]struct{}\347\232\204\351\201\215\345\216\206\346\226\271\345\274\217.html" index 6c5224d..c8bb5a8 100644 --- "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/5.[]struct{}\347\232\204\351\201\215\345\216\206\346\226\271\345\274\217.html" +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/5.[]struct{}\347\232\204\351\201\215\345\216\206\346\226\271\345\274\217.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1178,7 +1174,7 @@

                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 19:22:09 +2022-05-07 19:40:30 @@ -1223,7 +1219,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"5.[]struct{} 的遍历方式","level":"1.5.2.5","depth":3,"next":{"title":"6.切片删除指定元素","level":"1.5.2.6","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.md","ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.md","articles":[]},"previous":{"title":"4.字符串拼接方式","level":"1.5.2.4","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.md","ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.md","mtime":"2022-05-08T11:22:09.376Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"5.[]struct{} 的遍历方式","level":"1.5.2.5","depth":3,"next":{"title":"6.切片删除指定元素","level":"1.5.2.6","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.md","ref":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.md","articles":[]},"previous":{"title":"4.字符串拼接方式","level":"1.5.2.4","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.md","ref":"第四篇:最佳性能/1.常用数据结构/4.字符串拼接方式.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.md","mtime":"2022-05-07T11:40:30.681Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1233,10 +1229,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/5.[]struct{}\347\232\204\351\201\215\345\216\206\346\226\271\345\274\217.md" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/5.[]struct{}\347\232\204\351\201\215\345\216\206\346\226\271\345\274\217.md" new file mode 100644 index 0000000..12b9543 --- /dev/null +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/5.[]struct{}\347\232\204\351\201\215\345\216\206\346\226\271\345\274\217.md" @@ -0,0 +1,197 @@ +Go 遍历切片或数组有两种方式,一种是下标,一种是 range。二者在功能上没有区别,但在性能上会有区别吗? + +# 1.[]int +首先看一下遍历基本类型切片时二者的性能差别,以 []int 为例。 +```go +// genRandomIntSlice 生成指定长度的随机 []int 切片 +func genRandomIntSlice(n int) []int { + rand.Seed(time.Now().UnixNano()) + nums := make([]int, 0, n) + for i := 0; i < n; i++ { + nums = append(nums, rand.Int()) + } + return nums +} + +func BenchmarkIndexIntSlice(b *testing.B) { + nums := genRandomIntSlice(1024) + for i := 0; i < b.N; i++ { + var tmp int + for k := 0; k < len(nums); k++ { + tmp = nums[k] + } + _ = tmp + } +} + +func BenchmarkRangeIntSlice(b *testing.B) { + nums := genRandomIntSlice(1024) + for i := 0; i < b.N; i++ { + var tmp int + for _, num := range nums { + tmp = num + } + _ = tmp + } +} +``` +运行测试结果如下: +```shell +go test -bench=IntSlice$ . +goos: windows +goarch: amd64 +pkg: main/perf +cpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz +BenchmarkIndexIntSlice-8 5043324 236.2 ns/op +BenchmarkRangeIntSlice-8 5076255 239.1 ns/op +``` +`genRandomIntSlice()` 函数用于生成指定长度元素类型为 int 的切片。从最终的结果可以看到,遍历 []int 类型的切片,下标与 range 遍历性能几乎没有区别。 + +# 2.[]struct{} +那么对于稍微复杂一点的 []struct 类型呢? +```go +type Item struct { + id int + val [1024]byte +} + +func BenchmarkIndexStructSlice(b *testing.B) { + items := make([]Item, 1024) + for i := 0; i < b.N; i++ { + var tmp int + for j := 0; j < len(items); j++ { + tmp = items[j].id + } + _ = tmp + } +} + +func BenchmarkRangeIndexStructSlice(b *testing.B) { + items := make([]Item, 1024) + for i := 0; i < b.N; i++ { + var tmp int + for k := range items { + tmp = items[k].id + } + _ = tmp + } +} + +func BenchmarkRangeStructSlice(b *testing.B) { + items := make([]Item, 1024) + for i := 0; i < b.N; i++ { + var tmp int + for _, item := range items { + tmp = item.id + } + _ = tmp + } +} +``` +运行测试结果如下: +```shell +go test -bench=. -gcflags=-N -benchmem main/range +goos: darwin +goarch: amd64 +pkg: main/range +cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz +BenchmarkIndexStructSlice-12 556436 2165 ns/op 1 B/op 0 allocs/op +BenchmarkRangeIndexStructSlice-12 535705 2124 ns/op 1 B/op 0 allocs/op +BenchmarkRangeStructSlice-12 38799 30914 ns/op 27 B/op 0 allocs/op +PASS +ok main/range 5.097s +``` +可以看出,两种通过 index 遍历 []struct 性能没有差别,但是 range 遍历 []struct 中元素时,性能非常差。 + +range 只遍历 []struct 下标时,性能比 range 遍历 []struct 值好很多。从这里我们应该能够知道二者性能差别之大的原因。 + +Item 是一个结构体类型 ,Item 由两个字段构成,一个类型是 int,一个是类型是 [1024]byte,如果每次遍历 []Item,都会进行一次值拷贝,所以带来了性能损耗。 + +此外,因 range 时获取的是值拷贝,对副本的修改,是不会影响到原切片。 + +需要注意的时,上面运行基准测试时,使用编译选项`-gcflags=-N`禁用了编译器对切片遍历的优化。如果没有该选项,那么上面三种遍历方式没有性能差别。 + +为什么编译器会对上面的测试代码进行优化呢?因为代码实际上只取最后一个切片元素的值,所以前面的循环操作可以跳过,这样便带来性能的提升。如果是下面的代码,那么编器将无法优化,必须遍历拷贝所有元素。 +```go +func BenchmarkRange1(b *testing.B) { + items := make([]Item, 1024) + tmps := make([]int, 1024) + for i := 0; i < b.N; i++ { + for j := range items { + tmps[j] = items[j].id + } + } +} + +func BenchmarkRange2(b *testing.B) { + items := make([]Item, 1024) + tmps := make([]int, 1024) + for i := 0; i < b.N; i++ { + for j, item := range items { + tmps[j] = item.id + } + } +} +``` +无需去除编译器优化,基准测试结果如下: +```shell +go test -bench=BenchmarkRange -benchmem main/range +goos: darwin +goarch: amd64 +pkg: main/range +cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz +BenchmarkRange1-12 2290372 534.8 ns/op 0 B/op 0 allocs/op +BenchmarkRange2-12 46161 27169 ns/op 22 B/op 0 allocs/op +PASS +ok main/range 3.378s +``` +# 3.[]*struct +如果切片中是指向结构体的指针,而不是结构体呢? +```go +// genItems 生成指定长度 []*Item 切片 +func genItems(n int) []*Item { + items := make([]*Item, 0, n) + for i := 0; i < n; i++ { + items = append(items, &Item{id: i}) + } + return items +} + +func BenchmarkIndexPointer(b *testing.B) { + items := genItems(1024) + for i := 0; i < b.N; i++ { + var tmp int + for k := 0; k < len(items); k++ { + tmp = items[k].id + } + _ = tmp + } +} + +func BenchmarkRangePointer(b *testing.B) { + items := genItems(1024) + for i := 0; i < b.N; i++ { + var tmp int + for _, item := range items { + tmp = item.id + } + _ = tmp + } +} +``` +执行性能测试结果: +```shell +go test -bench=Pointer$ main/perf +goos: windows +goarch: amd64 +pkg: main/perf +cpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz +BenchmarkIndexPointer-8 773634 1521 ns/op +BenchmarkRangePointer-8 752077 1514 ns/op +``` +切片元素从结构体 Item 替换为指针 *Item 后,for 和 range 的性能几乎是一样的。而且使用指针还有另一个好处,可以直接修改指针对应的结构体的值。 + +# 4.小结 +range 在迭代过程中返回的是元素的拷贝,index 则不存在拷贝。 + +如果 range 迭代的元素较小,那么 index 和 range 的性能几乎一样,如基本类型的切片 []int。但如果迭代的元素较大,如一个包含很多属性的 struct 结构体,那么 index 的性能将显著地高于 range,有时候甚至会有上千倍的性能差异。对于这种场景,建议使用 index。如果使用 range,建议只迭代下标,通过下标访问元素,这种使用方式和 index 就没有区别了。如果想使用 range 同时迭代下标和值,则需要将切片/数组的元素改为指针,才能不影响性能。 \ No newline at end of file diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/6.\345\210\207\347\211\207\345\210\240\351\231\244\346\214\207\345\256\232\345\205\203\347\264\240.html" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/6.\345\210\207\347\211\207\345\210\240\351\231\244\346\214\207\345\256\232\345\205\203\347\264\240.html" index e1f283f..087b986 100644 --- "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/6.\345\210\207\347\211\207\345\210\240\351\231\244\346\214\207\345\256\232\345\205\203\347\264\240.html" +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/6.\345\210\207\347\211\207\345\210\240\351\231\244\346\214\207\345\256\232\345\205\203\347\264\240.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1121,7 +1117,7 @@

                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 19:22:09 +2022-05-07 19:41:43 @@ -1162,7 +1158,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"6.切片删除指定元素","level":"1.5.2.6","depth":3,"next":{"title":"2.内存管理","level":"1.5.3","depth":2,"ref":"","articles":[{"title":"1.使用空结构体节省内存","level":"1.5.3.1","depth":3,"path":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.md","ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.md","articles":[]},{"title":"2.struct 布局考虑内存对齐","level":"1.5.3.2","depth":3,"path":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.md","ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.md","articles":[]},{"title":"3.减少逃逸,将变量限制在栈上","level":"1.5.3.3","depth":3,"path":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.md","ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.md","articles":[]},{"title":"4.sync.Pool 复用对象","level":"1.5.3.4","depth":3,"path":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.md","ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.md","articles":[]}]},"previous":{"title":"5.[]struct{} 的遍历方式","level":"1.5.2.5","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.md","ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.md","mtime":"2022-05-08T11:22:09.376Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"6.切片删除指定元素","level":"1.5.2.6","depth":3,"next":{"title":"2.内存管理","level":"1.5.3","depth":2,"ref":"","articles":[{"title":"1.使用空结构体节省内存","level":"1.5.3.1","depth":3,"path":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.md","ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.md","articles":[]},{"title":"2.struct 布局考虑内存对齐","level":"1.5.3.2","depth":3,"path":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.md","ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.md","articles":[]},{"title":"3.减少逃逸,将变量限制在栈上","level":"1.5.3.3","depth":3,"path":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.md","ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.md","articles":[]},{"title":"4.sync.Pool 复用对象","level":"1.5.3.4","depth":3,"path":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.md","ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.md","articles":[]}]},"previous":{"title":"5.[]struct{} 的遍历方式","level":"1.5.2.5","depth":3,"path":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.md","ref":"第四篇:最佳性能/1.常用数据结构/5.[]struct{}的遍历方式.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/1.常用数据结构/6.切片删除指定元素.md","mtime":"2022-05-07T11:41:43.065Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1172,10 +1168,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/6.\345\210\207\347\211\207\345\210\240\351\231\244\346\214\207\345\256\232\345\205\203\347\264\240.md" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/6.\345\210\207\347\211\207\345\210\240\351\231\244\346\214\207\345\256\232\345\205\203\347\264\240.md" new file mode 100644 index 0000000..4dbd9ba --- /dev/null +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/1.\345\270\270\347\224\250\346\225\260\346\215\256\347\273\223\346\236\204/6.\345\210\207\347\211\207\345\210\240\351\231\244\346\214\207\345\256\232\345\205\203\347\264\240.md" @@ -0,0 +1,143 @@ +Go 并没有提供删除切片元素专用的语法或函数,需要使用切片本身的特性来删除元素。 + +删除切片指定元素一般有如下几种方法,本文以 []int 为例给出具体实现。 + +# 1.截取法(修改原切片) +这里利用对 slice 的截取删除指定元素。注意删除时,后面的元素会前移,下标 i 应该后移一位。 +```go +// DeleteSlice1 删除指定元素。 +func DeleteSlice1(a []int, elem int) []int { + for i := 0; i < len(a); i++ { + if a[i] == elem { + a = append(a[:i], a[i+1:]...) + i-- + } + } + return a +} +``` +# 2.拷贝法(不改原切片) +这种方法最容易理解,重新使用一个 slice,将要删除的元素过滤掉。缺点是需要开辟另一个 slice 的空间,优点是容易理解,而且不会修改原 slice。 +```go +// DeleteSlice2 删除指定元素。 +func DeleteSlice2(a []int, elem int) []int { + tmp := make([]int, 0, len(a)) + for _, v := range a { + if v != elem { + tmp = append(tmp, v) + } + } + return tmp +} +``` + +# 3.移位法(修改原切片) +- 方式一 + +利用一个下标 index,记录下一个有效元素应该在的位置。遍历所有元素,当遇到有效元素,将其移动到 index 且 index 加一。最终 index 的位置就是所有有效元素的下一个位置,最后做一个截取就行了。这种方法会修改原来的 slice。 + +该方法可以看成对第一种方法截取法的改进,因为每次指需移动一个元素,性能更加。 +```go +// DeleteSlice3 删除指定元素。 +func DeleteSlice3(a []int, elem int) []int { + j := 0 + for _, v := range a { + if v != elem { + a[j] = v + j++ + } + } + return a[:j] +} +``` +- 方式二 + +创建了一个 slice,但是共用原始 slice 的底层数组。这样也不需要额外分配内存空间,直接在原 slice 上进行修改。 +```go +// DeleteSlice4 删除指定元素。 +func DeleteSlice4(a []int, elem int) []int { + tgt := a[:0] + for _, v := range a { + if v != elem { + tgt = append(tgt, v) + } + } + return tgt +} +``` +# 4.性能对比 +假设我们的切片有 0 和 1,我们要删除所有的 0。 + +这里分别对长度为 10、100、1000 的切片进行测试,来上下上面四种实现的性能差异。 + +生成切片函数如下: +```go +func getSlice(n int) []int { + a := make([]int, 0, n) + for i := 0; i < n; i++ { + if i%2 == 0 { + a = append(a, 0) + continue + } + a = append(a, 1) + } + return a +} +``` +基准测试代码如下: +```go +func BenchmarkDeleteSlice1(b *testing.B) { + for i := 0; i < b.N; i++ { + _ = DeleteSlice1(getSlice(10), 0) + } +} +func BenchmarkDeleteSlice2(b *testing.B) { + for i := 0; i < b.N; i++ { + _ = DeleteSlice2(getSlice(10), 0) + } +} +func BenchmarkDeleteSlice3(b *testing.B) { + for i := 0; i < b.N; i++ { + _ = DeleteSlice3(getSlice(10), 0) + } +} +func BenchmarkDeleteSlice4(b *testing.B) { + for i := 0; i < b.N; i++ { + _ = DeleteSlice4(getSlice(10), 0) + } +} +``` +测试结果如下: +原切片长度为 10: +``` +go test -bench=. main/slice +goos: windows +goarch: amd64 +pkg: main/slice +cpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz +BenchmarkDeleteSlice1-8 17466486 65.07 ns/op +BenchmarkDeleteSlice2-8 14897282 85.22 ns/op +BenchmarkDeleteSlice3-8 21952129 50.78 ns/op +BenchmarkDeleteSlice4-8 22176390 54.68 ns/op +PASS +ok main/slice 5.427s +``` +原切片长度为 100: +``` +BenchmarkDeleteSlice1-8 1652146 762.1 ns/op +BenchmarkDeleteSlice2-8 2124237 578.4 ns/op +BenchmarkDeleteSlice3-8 3161318 359.9 ns/op +BenchmarkDeleteSlice4-8 2714158 423.7 ns/op +``` + +原切片长度为 1000: +``` +BenchmarkDeleteSlice1-8 56067 21915 ns/op +BenchmarkDeleteSlice2-8 258662 5007 ns/op +BenchmarkDeleteSlice3-8 432049 2724 ns/op +BenchmarkDeleteSlice4-8 325194 3615 ns/op +``` +# 5.小结 +从基准测试结果来看,性能最佳的方法是移位法,其中又属第一种实现方式较佳。性能最差的也是最常用的方法是截取法。随着切片长度的增加,上面四种删除方式的性能差异会愈加明显。 + +实际使用时,我们可以根据不用场景来选择。如不能修改原切片使用拷贝法,可以修改原切片使用移位法中的第一种实现方式。 \ No newline at end of file diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/1.\344\275\277\347\224\250\347\251\272\347\273\223\346\236\204\344\275\223\350\212\202\347\234\201\345\206\205\345\255\230.html" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/1.\344\275\277\347\224\250\347\251\272\347\273\223\346\236\204\344\275\223\350\212\202\347\234\201\345\206\205\345\255\230.html" index 645879b..4ee2175 100644 --- "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/1.\344\275\277\347\224\250\347\251\272\347\273\223\346\236\204\344\275\223\350\212\202\347\234\201\345\206\205\345\255\230.html" +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/1.\344\275\277\347\224\250\347\251\272\347\273\223\346\236\204\344\275\223\350\212\202\347\234\201\345\206\205\345\255\230.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1073,7 +1069,7 @@

                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 19:22:09 +2022-05-07 19:53:07 @@ -1114,7 +1110,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"1.使用空结构体节省内存","level":"1.5.3.1","depth":3,"next":{"title":"2.struct 布局考虑内存对齐","level":"1.5.3.2","depth":3,"path":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.md","ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.md","articles":[]},"previous":{"title":"2.内存管理","level":"1.5.3","depth":2,"ref":"","articles":[{"title":"1.使用空结构体节省内存","level":"1.5.3.1","depth":3,"path":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.md","ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.md","articles":[]},{"title":"2.struct 布局考虑内存对齐","level":"1.5.3.2","depth":3,"path":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.md","ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.md","articles":[]},{"title":"3.减少逃逸,将变量限制在栈上","level":"1.5.3.3","depth":3,"path":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.md","ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.md","articles":[]},{"title":"4.sync.Pool 复用对象","level":"1.5.3.4","depth":3,"path":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.md","ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.md","mtime":"2022-05-08T11:22:09.377Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"1.使用空结构体节省内存","level":"1.5.3.1","depth":3,"next":{"title":"2.struct 布局考虑内存对齐","level":"1.5.3.2","depth":3,"path":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.md","ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.md","articles":[]},"previous":{"title":"2.内存管理","level":"1.5.3","depth":2,"ref":"","articles":[{"title":"1.使用空结构体节省内存","level":"1.5.3.1","depth":3,"path":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.md","ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.md","articles":[]},{"title":"2.struct 布局考虑内存对齐","level":"1.5.3.2","depth":3,"path":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.md","ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.md","articles":[]},{"title":"3.减少逃逸,将变量限制在栈上","level":"1.5.3.3","depth":3,"path":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.md","ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.md","articles":[]},{"title":"4.sync.Pool 复用对象","level":"1.5.3.4","depth":3,"path":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.md","ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.md","mtime":"2022-05-07T11:53:07.477Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1124,10 +1120,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/1.\344\275\277\347\224\250\347\251\272\347\273\223\346\236\204\344\275\223\350\212\202\347\234\201\345\206\205\345\255\230.md" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/1.\344\275\277\347\224\250\347\251\272\347\273\223\346\236\204\344\275\223\350\212\202\347\234\201\345\206\205\345\255\230.md" new file mode 100644 index 0000000..b18600e --- /dev/null +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/1.\344\275\277\347\224\250\347\251\272\347\273\223\346\236\204\344\275\223\350\212\202\347\234\201\345\206\205\345\255\230.md" @@ -0,0 +1,88 @@ +# 1.不占内存空间 +在 Go 中,我们可以使用 unsafe.Sizeof 计算出一个数据类型实例需要占用的字节数。 +```go +package main + +import ( + "fmt" + "unsafe" +) + +func main() { + fmt.Println(unsafe.Sizeof(struct{}{})) +} +``` +运行上面的例子将会输出: +```go +go run main.go +0 +``` +可以看到,Go 中空结构体 struct{} 是不占用内存空间,不像 C/C++ 中空结构体仍占用 1 字节。 + +# 2.空结构体的作用 +因为空结构体不占据内存空间,因此被广泛作为各种场景下的占位符使用。一是节省资源,二是空结构体本身就具备很强的语义,即这里不需要任何值,仅作为占位符,达到的代码即注释的效果。 + +## 2.1 实现集合(Set) +Go 语言标准库没有提供 Set 的实现,通常使用 map 来代替。事实上,对于集合来说,只需要 map 的键,而不需要值。即使是将值设置为 bool 类型,也会多占据 1 个字节,那假设 map 中有一百万条数据,就会浪费 1MB 的空间。 + +因此呢,将 map 作为集合(Set)使用时,可以将值类型定义为空结构体,仅作为占位符使用即可。 +```go +type Set map[string]struct{} + +func (s Set) Has(key string) bool { + _, ok := s[key] + return ok +} + +func (s Set) Add(key string) { + s[key] = struct{}{} +} + +func (s Set) Delete(key string) { + delete(s, key) +} + +func main() { + s := make(Set) + s.Add("foo") + s.Add("bar") + fmt.Println(s.Has("foo")) + fmt.Println(s.Has("bar")) +} +``` +如果想使用 Set 的完整功能,如初始化(通过切片构建一个 Set)、Add、Del、Clear、Contains 等操作,可以使用开源库 [golang-set](https://github.com/deckarep/golang-set)。 + +## 2.2 不发送数据的信道 +```go +func worker(ch chan struct{}) { + <-ch + fmt.Println("do something") +} + +func main() { + ch := make(chan struct{}) + go worker(ch) + ch <- struct{}{} + close(ch) +} +``` +有时候使用 channel 不需要发送任何的数据,只用来通知子协程(goroutine)执行任务,或只用来控制协程的并发。这种情况下,使用空结构体作为占位符就非常合适了。 + +## 2.3 仅包含方法的结构体 +```go +type Door struct{} + +func (d Door) Open() { + fmt.Println("Open the door") +} + +func (d Door) Close() { + fmt.Println("Close the door") +} +``` +在部分场景下,结构体只包含方法,不包含任何的字段。例如上面例子中的 Door,在这种情况下,Door 事实上可以用任何的数据结构替代。 +```go +type Door int +type Door bool +``` +无论是 int 还是 bool 都会浪费额外的内存。因此,在这种情况下,声明为空结构体最合适。 \ No newline at end of file diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/2.struct\345\270\203\345\261\200\350\200\203\350\231\221\345\206\205\345\255\230\345\257\271\351\275\220.html" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/2.struct\345\270\203\345\261\200\350\200\203\350\231\221\345\206\205\345\255\230\345\257\271\351\275\220.html" index 8e92a92..5abfe86 100644 --- "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/2.struct\345\270\203\345\261\200\350\200\203\350\231\221\345\206\205\345\255\230\345\257\271\351\275\220.html" +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/2.struct\345\270\203\345\261\200\350\200\203\350\231\221\345\206\205\345\255\230\345\257\271\351\275\220.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1071,7 +1067,7 @@

                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 19:22:09 +2022-05-07 19:55:55 @@ -1116,7 +1112,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"2.struct 布局考虑内存对齐","level":"1.5.3.2","depth":3,"next":{"title":"3.减少逃逸,将变量限制在栈上","level":"1.5.3.3","depth":3,"path":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.md","ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.md","articles":[]},"previous":{"title":"1.使用空结构体节省内存","level":"1.5.3.1","depth":3,"path":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.md","ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.md","mtime":"2022-05-08T11:22:09.377Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"2.struct 布局考虑内存对齐","level":"1.5.3.2","depth":3,"next":{"title":"3.减少逃逸,将变量限制在栈上","level":"1.5.3.3","depth":3,"path":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.md","ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.md","articles":[]},"previous":{"title":"1.使用空结构体节省内存","level":"1.5.3.1","depth":3,"path":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.md","ref":"第四篇:最佳性能/2.内存管理/1.使用空结构体节省内存.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.md","mtime":"2022-05-07T11:55:55.242Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1126,10 +1122,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/2.struct\345\270\203\345\261\200\350\200\203\350\231\221\345\206\205\345\255\230\345\257\271\351\275\220.md" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/2.struct\345\270\203\345\261\200\350\200\203\350\231\221\345\206\205\345\255\230\345\257\271\351\275\220.md" new file mode 100644 index 0000000..15f3f64 --- /dev/null +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/2.struct\345\270\203\345\261\200\350\200\203\350\231\221\345\206\205\345\255\230\345\257\271\351\275\220.md" @@ -0,0 +1,91 @@ +# 1.为什么需要内存对齐 +CPU 访问内存并不是逐个字节访问,而是以字长(word size)为单位访问。如 32 位的 CPU ,字长为 4 字节,那么 CPU 访存的单位是 4 字节。 + +这么设计的目的,是减少 CPU 访问内存的次数,加大 CPU 访问内存的吞吐量。比如同样读取 8 个字节的数据,一次读取 4 个字节那么只需要读取 2 次。 + +CPU 始终以字长访问内存,如果不进行内存对齐,可能会增加 CPU 访存次数。 + + + +内存对齐前变量 a、b 各占据 3 个字节,CPU 读取 b 变量的值需要两次访存,第一次访存得到前一个字节,第二次得到后两个字节。内存对齐后 a、b 各占 4 个字节,CPU 读取 b 变量的值只需要一次访存。 + +从这个例子可以看到,内存对齐对实现变量的原子性操作也是有好处的。每次内存访问是原子的,如果变量的大小不超过字长,那么内存对齐后,对该变量的访问就是原子的,这个特性在并发场景下至关重要。 + +简言之:合理的内存对齐可以提高内存读写的性能,并且便于实现变量操作的原子性。 + +# 2.Go 内存对齐规则 +编译器一般为了减少 CPU 访存指令周期,提高内存的访问效率,会对变量进行内存对齐。Go 作为一门追求高性能的后台编程语言,当然也不例外。 + +Go Language Specification 中 [Size and alignment guarantees](https://go.dev/ref/spec#Size_and_alignment_guarantees) 描述了内存对齐的规则。 +>1.For a variable x of any type: unsafe.Alignof(x) is at least 1. +2.For a variable x of struct type: unsafe.Alignof(x) is the largest of all the values unsafe.Alignof(x.f) for each field f of x, but at least 1. +3.For a variable x of array type: unsafe.Alignof(x) is the same as the alignment of a variable of the array's element type. + +- 对于任意类型的变量 x ,unsafe.Alignof(x) 至少为 1。 +- 对于结构体类型的变量 x,计算 x 每一个字段 f 的 unsafe.Alignof(x.f),unsafe.Alignof(x) 等于其中的最大值。 +- 对于数组类型的变量 x,unsafe.Alignof(x) 等于构成数组的元素类型的对齐系数。 + +其中函数 `unsafe.Alignof` 用于获取变量的对齐系数。 对齐系数决定了字段的偏移和变量的大小,两者必须是对齐系数的整数倍。 + +# 3.合理的 struct 布局 +因为内存对齐的存在,合理的 struct 布局可以减少内存占用,提高程序性能。 +```go +type demo1 struct { + a int8 + b int16 + c int32 +} + +type demo2 struct { + a int8 + c int32 + b int16 +} + +func main() { + fmt.Println(unsafe.Sizeof(demo1{})) // 8 + fmt.Println(unsafe.Sizeof(demo2{})) // 12 +} +``` +可以看到,同样的字段,因排列顺序不同,会导致不一样的结构体大小。 + +每个字段按照自身的对齐系数来确定在内存中的偏移量,一个字段因偏移而浪费的大小也不同。 + +接下来逐个分析,首先是 demo1: +a 是第一个字段,默认是已经对齐的,从第 0 个位置开始占据 1 字节。 +b 是第二个字段,对齐系数为 2,因此,必须空出 1 个字节,偏移量才是 2 的倍数,从第 2 个位置开始占据 2 字节。 +c 是第三个字段,对齐倍数为 4,此时,内存已经是对齐的,从第 4 个位置开始占据 4 字节即可。 + +因此 demo1 的内存占用为 8 字节。 + +对于 demo2: +a 是第一个字段,默认是已经对齐的,从第 0 个位置开始占据 1 字节。 +c 是第二个字段,对齐倍数为 4,因此,必须空出 3 个字节,偏移量才是 4 的倍数,从第 4 个位置开始占据 4 字节。 +b 是第三个字段,对齐倍数为 2,从第 8 个位置开始占据 2 字节。 + +demo2 的对齐系数由 c 的对齐系数决定,也是 4,因此,demo2 的内存占用为 12 字节。 + + + +**因此,在对内存特别敏感的结构体的设计上,我们可以通过调整字段的顺序,将字段宽度从小到大由上到下排列,来减少内存的占用。** + +# 4.空结构与空数组对内存对齐的影响 +空结构与空数组在 Go 中比较特殊。没有任何字段的空 struct{} 和没有任何元素的 array 占据的内存空间大小为 0。 + +因为这一点,空 struct{} 或空 array 作为其他 struct 的字段时,一般不需要内存对齐。但是有一种情况除外:即当 struct{} 或空 array 作为结构体最后一个字段时,需要内存对齐。因为如果有指针指向该字段,返回的地址将在结构体之外,如果此指针一直存活不释放对应的内存,就会有内存泄露的问题(该内存不因结构体释放而释放)。 +```go +type demo3 struct { + a struct{} + b int32 +} +type demo4 struct { + b int32 + a struct{} +} + +func main() { + fmt.Println(unsafe.Sizeof(demo3{})) // 4 + fmt.Println(unsafe.Sizeof(demo4{})) // 8 +} +``` +可以看到,demo3{} 的大小为 4 字节,与字段 b 占据空间一致,而 demo4{} 的大小为 8 字节,即额外填充了 4 字节的空间。 \ No newline at end of file diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/3.\345\207\217\345\260\221\351\200\203\351\200\270\357\274\214\345\260\206\345\217\230\351\207\217\351\231\220\345\210\266\345\234\250\346\240\210\344\270\212.html" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/3.\345\207\217\345\260\221\351\200\203\351\200\270\357\274\214\345\260\206\345\217\230\351\207\217\351\231\220\345\210\266\345\234\250\346\240\210\344\270\212.html" index 1ddffce..6c3474c 100644 --- "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/3.\345\207\217\345\260\221\351\200\203\351\200\270\357\274\214\345\260\206\345\217\230\351\207\217\351\231\220\345\210\266\345\234\250\346\240\210\344\270\212.html" +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/3.\345\207\217\345\260\221\351\200\203\351\200\270\357\274\214\345\260\206\345\217\230\351\207\217\351\231\220\345\210\266\345\234\250\346\240\210\344\270\212.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1240,7 +1236,7 @@

                                                                                          Frequently Asked Questions (FAQ) 明确地告诉我们,我们并不需要知道变量是分配在栈(stack)上还是堆(heap)上。Golang 中的变量只要被引用就一直会存活,存储在堆上还是栈上由 Go 内部实现决定而和具体的语法没有关系。

                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 19:22:09 +2022-05-07 20:47:33
                                                                                          @@ -1285,7 +1281,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"3.减少逃逸,将变量限制在栈上","level":"1.5.3.3","depth":3,"next":{"title":"4.sync.Pool 复用对象","level":"1.5.3.4","depth":3,"path":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.md","ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.md","articles":[]},"previous":{"title":"2.struct 布局考虑内存对齐","level":"1.5.3.2","depth":3,"path":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.md","ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.md","mtime":"2022-05-08T11:22:09.377Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"3.减少逃逸,将变量限制在栈上","level":"1.5.3.3","depth":3,"next":{"title":"4.sync.Pool 复用对象","level":"1.5.3.4","depth":3,"path":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.md","ref":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.md","articles":[]},"previous":{"title":"2.struct 布局考虑内存对齐","level":"1.5.3.2","depth":3,"path":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.md","ref":"第四篇:最佳性能/2.内存管理/2.struct布局考虑内存对齐.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.md","mtime":"2022-05-07T12:47:33.228Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1295,10 +1291,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/3.\345\207\217\345\260\221\351\200\203\351\200\270\357\274\214\345\260\206\345\217\230\351\207\217\351\231\220\345\210\266\345\234\250\346\240\210\344\270\212.md" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/3.\345\207\217\345\260\221\351\200\203\351\200\270\357\274\214\345\260\206\345\217\230\351\207\217\351\231\220\345\210\266\345\234\250\346\240\210\344\270\212.md" new file mode 100644 index 0000000..cadbef5 --- /dev/null +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/3.\345\207\217\345\260\221\351\200\203\351\200\270\357\274\214\345\260\206\345\217\230\351\207\217\351\231\220\345\210\266\345\234\250\346\240\210\344\270\212.md" @@ -0,0 +1,268 @@ +变量逃逸一般发生在如下几种情况: +- 变量较大(栈空间不足) +- 变量大小不确定(如 slice 长度或容量不定) +- 返回地址 +- 返回引用(引用变量的底层是指针) +- 返回值类型不确定(不能确定大小) +- 闭包 +- 其他 + +知道变量逃逸的原因后,我们可以有意识地避免变量发生逃逸,将其限制在栈上,减少堆变量的分配,降低 GC 成本,可提高程序性能。 + +# 1.局部切片尽可能确定长度或容量 +如果使用局部切片时,已知切片的长度或容量,请使用常量或数值字面量来定义。 +```go +package main + +func main() { + number := 10 + s1 := make([]int, 0, number) + for i := 0; i < number; i++ { + s1 = append(s1, i) + } + s2 := make([]int, 0, 10) + for i := 0; i < 10; i++ { + s2 = append(s2, i) + } +} +``` +我们来看一下编译器编译时对上面两个切片的优化决策。 +```shell + go build -gcflags="-m -m -l" main.go +# command-line-arguments +./main.go:5:12: make([]int, 0, number) escapes to heap: +./main.go:5:12: flow: {heap} = &{storage for make([]int, 0, number)}: +./main.go:5:12: from make([]int, 0, number) (non-constant size) at ./main.go:5:12 +./main.go:5:12: make([]int, 0, number) escapes to heap +./main.go:9:12: make([]int, 0, 10) does not escape +``` +从输出结果可以看到,使用变量(非常量)来指定切片的容量,会导致切片发生逃逸,影响性能。指定切片的长度时也是一样的,尽可能使用常量或数值字面量。 + +下面看下二者的性能差异。 +```go +// sliceEscape 发生逃逸,在堆上申请切片 +func sliceEscape() { + number := 10 + s1 := make([]int, 0, number) + for i := 0; i < number; i++ { + s1 = append(s1, i) + } +} + +// sliceNoEscape 不逃逸,限制在栈上 +func sliceNoEscape() { + s1 := make([]int, 0, 10) + for i := 0; i < 10; i++ { + s1 = append(s1, i) + } +} + +func BenchmarkSliceEscape(b *testing.B) { + for i := 0; i < b.N; i++ { + sliceEscape() + } +} + +func BenchmarkSliceNoEscape(b *testing.B) { + for i := 0; i < b.N; i++ { + sliceNoEscape() + } +} +``` +运行上面的基准测试结果如下: +```shell +go test -bench=BenchmarkSlice -benchmem main/copy +goos: darwin +goarch: amd64 +pkg: main/copy +cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz +BenchmarkSliceEscape-12 43268738 27.40 ns/op 80 B/op 1 allocs/op +BenchmarkSliceNoEscape-12 186127288 6.454 ns/op 0 B/op 0 allocs/op +PASS +ok main/copy 4.402s +``` +# 2.返回值 VS 返回指针 +值传递会拷贝整个对象,而指针传递只会拷贝地址,指向的对象是同一个。传指针可以减少值的拷贝,但是会导致内存分配逃逸到堆中,增加垃圾回收(GC)的负担。在对象频繁创建和删除的场景下,返回指针导致的 GC 开销可能会严重影响性能。 + +一般情况下,对于需要修改原对象,或占用内存比较大的对象,返回指针。对于只读或占用内存较小的对象,返回值能够获得更好的性能。 + +下面以一个简单的示例来看下二者的性能差异。 +```go +type St struct { + arr [1024]int +} + +func retValue() St { + var st St + return st +} + +func retPtr() *St { + var st St + return &st +} + +func BenchmarkRetValue(b *testing.B) { + for i := 0; i < b.N; i++ { + _ = retValue() + } +} + +func BenchmarkRetPtr(b *testing.B) { + for i := 0; i < b.N; i++ { + _ = retPtr() + } +} +``` +基准测试结果如下: +```shell +go test -gcflags="-l" -bench=BenchmarkRet -benchmem main/copy +goos: darwin +goarch: amd64 +pkg: main/copy +cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz +BenchmarkRetValue-12 5194722 216.2 ns/op 0 B/op 0 allocs/op +BenchmarkRetPtr-12 1342947 893.6 ns/op 8192 B/op 1 allocs/op +PASS +ok main/copy 3.865s +``` + +# 3.小的拷贝好过引用 +小的拷贝好过引用,什么意思呢,就是尽量使用栈变量而不是堆变量。下面举一个反常识的例子,来证明小的拷贝比在堆上创建引用变量要好。 + +我们都知道 Go 里面的 Array 以 pass-by-value 方式传递后,再加上其长度不可扩展,考虑到性能我们一般很少使用它。实际上,凡事无绝对。有时使用数组进行拷贝传递,比使用切片要好。 +```go +// copy/copy.go + +const capacity = 1024 + +func arrayFibonacci() [capacity]int { + var d [capacity]int + for i := 0; i < len(d); i++ { + if i <= 1 { + d[i] = 1 + continue + } + d[i] = d[i-1] + d[i-2] + } + return d +} + +func sliceFibonacci() []int { + d := make([]int, capacity) + for i := 0; i < len(d); i++ { + if i <= 1 { + d[i] = 1 + continue + } + d[i] = d[i-1] + d[i-2] + } + return d +} +``` +下面看一下性能对比。 +```go +func BenchmarkArray(b *testing.B) { + for i := 0; i < b.N; i++ { + _ = arrayFibonacci() + } +} + +func BenchmarkSlice(b *testing.B) { + for i := 0; i < b.N; i++ { + _ = sliceFibonacci() + } +} +``` +运行上面的基准测试,将得到如下结果。 +```shell +go test -bench=. -benchmem -gcflags="-l" main/copy +goos: darwin +goarch: amd64 +pkg: main/copy +cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz +BenchmarkArray-12 692400 1708 ns/op 0 B/op 0 allocs/op +BenchmarkSlice-12 464974 2242 ns/op 8192 B/op 1 allocs/op +PASS +ok main/copy 3.908s +``` +从测试结果可以看出,对数组的拷贝性能却比使用切片要好。为什么会这样呢? + +`sliceFibonacci()`函数中分配的局部变量切片因为要返回到函数外部,所以发生了逃逸,需要在堆上申请内存空间。从测试也过也可以看出,`arrayFibonacci()`函数没有内存分配,完全在栈上完成数组的创建。这里说明了对于一些短小的对象,栈上复制的成本远小于在堆上分配和回收的成本。 + +需要注意,运行上面基准测试时,传递了禁止内联的编译选项 "-l",如果发生内联,那么将不会出现变量的逃逸,就不存在堆上分配内存与回收的操作了,二者将看不出性能差异。 + +编译时可以借助选项`-gcflags=-m`查看编译器对上面两个函数的优化决策。 +```shell +go build -gcflags=-m copy/copy.go +# command-line-arguments +copy/copy.go:5:6: can inline arrayFibonacci +copy/copy.go:17:6: can inline sliceFibonacci +copy/copy.go:18:11: make([]int, capacity) escapes to heap +``` +可以看到,arrayFibonacci() 和 sliceFibonacci() 函数均可内联。sliceFibonacci() 函数中定义的局部变量切片逃逸到了堆。 + +**那么多大的变量才算是小变量呢?** 对 Go 编译器而言,超过一定大小的局部变量将逃逸到堆上,不同 Go 版本的大小限制可能不一样。一般是 < 64KB,局部变量将不会逃逸到堆上。 + +# 4.返回值使用确定的类型 +如果变量类型不确定,那么将会逃逸到堆上。所以,函数返回值如果能确定的类型,就不要使用 interface{}。 + +我们还是以上面斐波那契数列函数为例,看下返回值为确定类型和 interface{} 的性能差别。 +```go +const capacity = 1024 + +func arrayFibonacci() [capacity]int { + var d [capacity]int + for i := 0; i < len(d); i++ { + if i <= 1 { + d[i] = 1 + continue + } + d[i] = d[i-1] + d[i-2] + } + return d +} + +func arrayFibonacciIfc() interface{} { + var d [capacity]int + for i := 0; i < len(d); i++ { + if i <= 1 { + d[i] = 1 + continue + } + d[i] = d[i-1] + d[i-2] + } + return d +} +``` +```go +func BenchmarkArray(b *testing.B) { + for i := 0; i < b.N; i++ { + _ = arrayFibonacci() + } +} + +func BenchmarkIfc(b *testing.B) { + for i := 0; i < b.N; i++ { + _ = arrayFibonacciIfc() + } +} +``` +运行上面的基准测试结果如下: +```shell +go test -bench=. -benchmem main/copy +goos: darwin +goarch: amd64 +pkg: main/copy +cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz +BenchmarkArray-12 832418 1427 ns/op 0 B/op 0 allocs/op +BenchmarkIfc-12 380626 2861 ns/op 8192 B/op 1 allocs/op +PASS +ok main/copy 3.742s +``` +可见,函数返回值使用 interface{} 返回时,编译器无法确定返回值的具体类型,导致返回值逃逸到堆上。当发生了堆上内存的申请与回收时,性能会差一点。 + +# 5.小结 +栈上分配内存比在堆中分配内存有更高的效率。因为栈上分配的内存不需要 GC 处理,函数返回后就会直接释放,而堆上分配的内存使用完毕会交给 GC 处理。在知道常见的变量逃逸场景后,我们在编码时可以有意识地避免变量发生逃逸,尽可能地使用栈空间,而非堆空间。 + +以上仅列出了部分变量发生逃逸的情形。实际上,Go 编译器对变量的逃逸分析决策远比我们想像的要复杂。我们只能尽可能地去勾勒而无以绘其全貌。Go 官方也在 [Frequently Asked Questions (FAQ)](https://go.dev/doc/faq) 明确地告诉我们,我们并不需要知道变量是分配在栈(stack)上还是堆(heap)上。Golang 中的变量只要被引用就一直会存活,存储在堆上还是栈上由 Go 内部实现决定而和具体的语法没有关系。 \ No newline at end of file diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/4.sync.Pool\345\244\215\347\224\250\345\257\271\350\261\241.html" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/4.sync.Pool\345\244\215\347\224\250\345\257\271\350\261\241.html" index 8f38013..6cf126f 100644 --- "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/4.sync.Pool\345\244\215\347\224\250\345\257\271\350\261\241.html" +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/4.sync.Pool\345\244\215\347\224\250\345\257\271\350\261\241.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1127,7 +1123,7 @@

                                                                                          fmt.Printf()的调用是非常频繁的,利用 sync.Pool 复用 pp 对象能够极大地提升性能,减少内存占用,同时降低 GC 压力。

                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 19:22:09 +2022-05-07 20:50:26
                                                                                          @@ -1168,7 +1164,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"4.sync.Pool 复用对象","level":"1.5.3.4","depth":3,"next":{"title":"3.并发编程","level":"1.5.4","depth":2,"ref":"","articles":[{"title":"1.关于锁","level":"1.5.4.1","depth":3,"path":"第四篇:最佳性能/3.并发编程/1.关于锁.md","ref":"第四篇:最佳性能/3.并发编程/1.关于锁.md","articles":[]},{"title":"2.限制协程数量","level":"1.5.4.2","depth":3,"path":"第四篇:最佳性能/3.并发编程/2.限制协程数量.md","ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.md","articles":[]},{"title":"3.使用 sync.Once 避免重复执行","level":"1.5.4.3","depth":3,"path":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.md","ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.md","articles":[]},{"title":"4.使用 sync.Cond 通知协程","level":"1.5.4.4","depth":3,"path":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.md","ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.md","articles":[]}]},"previous":{"title":"3.减少逃逸,将变量限制在栈上","level":"1.5.3.3","depth":3,"path":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.md","ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.md","mtime":"2022-05-08T11:22:09.377Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"4.sync.Pool 复用对象","level":"1.5.3.4","depth":3,"next":{"title":"3.并发编程","level":"1.5.4","depth":2,"ref":"","articles":[{"title":"1.关于锁","level":"1.5.4.1","depth":3,"path":"第四篇:最佳性能/3.并发编程/1.关于锁.md","ref":"第四篇:最佳性能/3.并发编程/1.关于锁.md","articles":[]},{"title":"2.限制协程数量","level":"1.5.4.2","depth":3,"path":"第四篇:最佳性能/3.并发编程/2.限制协程数量.md","ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.md","articles":[]},{"title":"3.使用 sync.Once 避免重复执行","level":"1.5.4.3","depth":3,"path":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.md","ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.md","articles":[]},{"title":"4.使用 sync.Cond 通知协程","level":"1.5.4.4","depth":3,"path":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.md","ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.md","articles":[]}]},"previous":{"title":"3.减少逃逸,将变量限制在栈上","level":"1.5.3.3","depth":3,"path":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.md","ref":"第四篇:最佳性能/2.内存管理/3.减少逃逸,将变量限制在栈上.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/2.内存管理/4.sync.Pool复用对象.md","mtime":"2022-05-07T12:50:26.062Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1178,10 +1174,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/4.sync.Pool\345\244\215\347\224\250\345\257\271\350\261\241.md" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/4.sync.Pool\345\244\215\347\224\250\345\257\271\350\261\241.md" new file mode 100644 index 0000000..dc66edf --- /dev/null +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/2.\345\206\205\345\255\230\347\256\241\347\220\206/4.sync.Pool\345\244\215\347\224\250\345\257\271\350\261\241.md" @@ -0,0 +1,144 @@ +# 1.简介 +sync.Pool 是 sync 包下的一个组件,可以作为保存临时取还对象的一个“池子”。个人觉得它的名字有一定的误导性,因为 Pool 里装的对象可以被无通知地被回收,可能 sync.Cache 是一个更合适的名字。 + +sync.Pool 是可伸缩的,同时也是并发安全的,其容量仅受限于内存的大小。存放在池中的对象如果不活跃了会被自动清理。 + +# 2.作用 +对于很多需要重复分配、回收内存的地方,sync.Pool 是一个很好的选择。频繁地分配、回收内存会给 GC 带来一定的负担,严重的时候会引起 CPU 的毛刺,而 sync.Pool 可以将暂时不用的对象缓存起来,待下次需要的时候直接使用,不用再次经过内存分配,复用对象的内存,减轻 GC 的压力,提升系统的性能。 + +一句话总结:用来保存和复用临时对象,减少内存分配,降低 GC 压力。 + +# 3.如何使用 +sync.Pool 的使用方式非常简单,只需要实现 New 函数即可。对象池中没有对象时,将会调用 New 函数创建。 + +假设我们有一个“学生”结构体,并复用改结构体对象。 +```go +type Student struct { + Name string + Age int32 + Remark [1024]byte +} + +var studentPool = sync.Pool{ + New: func() interface{} { + return new(Student) + }, +} +``` +然后调用 Pool 的 Get() 和 Put() 方法来获取和放回池子中。 +```go +stu := studentPool.Get().(*Student) +json.Unmarshal(buf, stu) +studentPool.Put(stu) +``` +- Get() 用于从对象池中获取对象,因为返回值是 interface{},因此需要类型转换。 +- Put() 则是在对象使用完毕后,放回到对象池。 + +# 4.性能差异 +我们以 bytes.Buffer 字节缓冲器为例,利用 sync.Pool 复用 bytes.Buffer 对象,避免重复创建与回收内存,来看看对性能的提升效果。 +```go +var bufferPool = sync.Pool{ + New: func() interface{} { + return &bytes.Buffer{} + }, +} + +var data = make([]byte, 10000) + +func BenchmarkBufferWithPool(b *testing.B) { + for n := 0; n < b.N; n++ { + buf := bufferPool.Get().(*bytes.Buffer) + buf.Write(data) + buf.Reset() + bufferPool.Put(buf) + } +} + +func BenchmarkBuffer(b *testing.B) { + for n := 0; n < b.N; n++ { + var buf bytes.Buffer + buf.Write(data) + } +} +``` +测试结果如下: +```shell +go test -bench=. -benchmem main/pool +goos: darwin +goarch: amd64 +pkg: main/pool +cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz +BenchmarkBufferWithPool-12 11987966 97.12 ns/op 0 B/op 0 allocs/op +BenchmarkBuffer-12 1246887 1020 ns/op 10240 B/op 1 allocs/op +PASS +ok main/pool 3.510s +``` +这个例子创建了一个 bytes.Buffer 对象池,每次只执行 Write 操作,及做一次数据拷贝,耗时几乎可以忽略。而内存分配和回收的耗时占比较多,因此对程序整体的性能影响更大。从测试结果也可以看出,使用了 Pool 复用对象,每次操作不再有内存分配。 + +# 5.在标准库中的应用 +Go 标准库也大量使用了 sync.Pool,例如 fmt 和 encoding/json。以 fmt 包为例,我们看下其是如何使用 sync.Pool 的。 + +我们可以看一下最常用的标准格式化输出函数 Printf() 函数。 +```go +// Printf formats according to a format specifier and writes to standard output. +// It returns the number of bytes written and any write error encountered. +func Printf(format string, a ...interface{}) (n int, err error) { + return Fprintf(os.Stdout, format, a...) +} +``` +继续看 Fprintf() 的定义。 +```go +// Fprintf formats according to a format specifier and writes to w. +// It returns the number of bytes written and any write error encountered. +func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) { + p := newPrinter() + p.doPrintf(format, a) + n, err = w.Write(p.buf) + p.free() + return +} +``` +Fprintf() 函数的参数是一个 io.Writer,Printf() 传的是 os.Stdout,相当于直接输出到标准输出。这里的 newPrinter 用的就是 sync.Pool。 +```go +// go version go1.17 darwin/amd64 + +// pp is used to store a printer's state and is reused with sync.Pool to avoid allocations. +type pp struct { + buf buffer + ... +} + +var ppFree = sync.Pool{ + New: func() interface{} { return new(pp) }, +} + +// newPrinter allocates a new pp struct or grabs a cached one. +func newPrinter() *pp { + p := ppFree.Get().(*pp) + p.panicking = false + p.erroring = false + p.wrapErrs = false + p.fmt.init(&p.buf) + return p +} + +// free saves used pp structs in ppFree; avoids an allocation per invocation. +func (p *pp) free() { + // Proper usage of a sync.Pool requires each entry to have approximately + // the same memory cost. To obtain this property when the stored type + // contains a variably-sized buffer, we add a hard limit on the maximum buffer + // to place back in the pool. + // + // See https://golang.org/issue/23199 + if cap(p.buf) > 64<<10 { + return + } + + p.buf = p.buf[:0] + p.arg = nil + p.value = reflect.Value{} + p.wrappedErr = nil + ppFree.Put(p) +} +``` +`fmt.Printf()`的调用是非常频繁的,利用 sync.Pool 复用 pp 对象能够极大地提升性能,减少内存占用,同时降低 GC 压力。 \ No newline at end of file diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/1.\345\205\263\344\272\216\351\224\201.html" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/1.\345\205\263\344\272\216\351\224\201.html" index d2196cc..2f8a76f 100644 --- "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/1.\345\205\263\344\272\216\351\224\201.html" +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/1.\345\205\263\344\272\216\351\224\201.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1452,7 +1448,7 @@

                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 19:22:09 +2022-05-07 20:57:39 @@ -1493,7 +1489,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"1.关于锁","level":"1.5.4.1","depth":3,"next":{"title":"2.限制协程数量","level":"1.5.4.2","depth":3,"path":"第四篇:最佳性能/3.并发编程/2.限制协程数量.md","ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.md","articles":[]},"previous":{"title":"3.并发编程","level":"1.5.4","depth":2,"ref":"","articles":[{"title":"1.关于锁","level":"1.5.4.1","depth":3,"path":"第四篇:最佳性能/3.并发编程/1.关于锁.md","ref":"第四篇:最佳性能/3.并发编程/1.关于锁.md","articles":[]},{"title":"2.限制协程数量","level":"1.5.4.2","depth":3,"path":"第四篇:最佳性能/3.并发编程/2.限制协程数量.md","ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.md","articles":[]},{"title":"3.使用 sync.Once 避免重复执行","level":"1.5.4.3","depth":3,"path":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.md","ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.md","articles":[]},{"title":"4.使用 sync.Cond 通知协程","level":"1.5.4.4","depth":3,"path":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.md","ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/3.并发编程/1.关于锁.md","mtime":"2022-05-08T11:22:09.378Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"1.关于锁","level":"1.5.4.1","depth":3,"next":{"title":"2.限制协程数量","level":"1.5.4.2","depth":3,"path":"第四篇:最佳性能/3.并发编程/2.限制协程数量.md","ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.md","articles":[]},"previous":{"title":"3.并发编程","level":"1.5.4","depth":2,"ref":"","articles":[{"title":"1.关于锁","level":"1.5.4.1","depth":3,"path":"第四篇:最佳性能/3.并发编程/1.关于锁.md","ref":"第四篇:最佳性能/3.并发编程/1.关于锁.md","articles":[]},{"title":"2.限制协程数量","level":"1.5.4.2","depth":3,"path":"第四篇:最佳性能/3.并发编程/2.限制协程数量.md","ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.md","articles":[]},{"title":"3.使用 sync.Once 避免重复执行","level":"1.5.4.3","depth":3,"path":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.md","ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.md","articles":[]},{"title":"4.使用 sync.Cond 通知协程","level":"1.5.4.4","depth":3,"path":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.md","ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.md","articles":[]}]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/3.并发编程/1.关于锁.md","mtime":"2022-05-07T12:57:39.354Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1503,10 +1499,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/1.\345\205\263\344\272\216\351\224\201.md" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/1.\345\205\263\344\272\216\351\224\201.md" new file mode 100644 index 0000000..f540beb --- /dev/null +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/1.\345\205\263\344\272\216\351\224\201.md" @@ -0,0 +1,489 @@ +# 1.无锁化 +加锁是为了避免在并发环境下,同时访问共享资源产生的安全问题。那么,在并发环境下,是否必须加锁?答案是否定的。并非所有的并发都需要加锁。适当地降低锁的粒度,甚至采用无锁化的设计,更能提升并发能力。 + +无锁化主要有两种实现,无锁数据结构和串行无锁。 + +## 1.1 无锁数据结构 +利用硬件支持的原子操作可以实现无锁的数据结构,原子操作可以在 lock-free 的情况下保证并发安全,并且它的性能也能做到随 CPU 个数的增多而线性扩展。很多语言都提供 CAS 原子操作(如 Go 中的 atomic 包和 C++11 中的 atomic 库),可以用于实现无锁数据结构,如无锁链表。 + +我们以一个简单的线程安全单向链表的插入操作来看下无锁编程和普通加锁的区别。 +```go +package list + +import ( + "fmt" + "sync" + "sync/atomic" + + "golang.org/x/sync/errgroup" +) + +// Node 链表节点 +type Node struct { + Value interface{} + Next *Node +} + +// +// 有锁单向链表的简单实现 +// + +// WithLockList 有锁单向链表 +type WithLockList struct { + Head *Node + mu sync.Mutex +} + +// Push 将元素插入到链表的首部 +func (l *WithLockList) Push(v interface{}) { + l.mu.Lock() + defer l.mu.Unlock() + n := &Node{ + Value: v, + Next: l.Head, + } + l.Head = n +} + +// String 有锁链表的字符串形式输出 +func (l WithLockList) String() string { + s := "" + cur := l.Head + for { + if cur == nil { + break + } + if s != "" { + s += "," + } + s += fmt.Sprintf("%v", cur.Value) + cur = cur.Next + } + return s +} + +// +// 无锁单向链表的简单实现 +// + +// LockFreeList 无锁单向链表 +type LockFreeList struct { + Head atomic.Value +} + +// Push 有锁 +func (l *LockFreeList) Push(v interface{}) { + for { + head := l.Head.Load() + headNode, _ := head.(*Node) + n := &Node{ + Value: v, + Next: headNode, + } + if l.Head.CompareAndSwap(head, n) { + break + } + } +} + +// String 有锁链表的字符串形式输出 +func (l LockFreeList) String() string { + s := "" + cur := l.Head.Load().(*Node) + for { + if cur == nil { + break + } + if s != "" { + s += "," + } + s += fmt.Sprintf("%v", cur.Value) + cur = cur.Next + } + return s +} +``` +上面的实现有几点需要注意一下: + +(1)无锁单向链表实现时在插入时需要进行 CAS 操作,即调用`CompareAndSwap()`方法进行插入,如果插入失败则进行 for 循环多次尝试,直至成功。 + +(2)为了方便打印链表内容,实现一个`String()`方法遍历链表,且使用值作为接收者,避免打印对象指针时无法生效。 +> 5. If an operand implements method String() string, that method will be invoked to convert the object to a string, which will then be formatted as required by the verb (if any). + +我们分别对两种链表做一个并发写入的操作验证一下其功能。 +```go +package main + +import ( + "fmt" + + "main/list" +) + +// ConcurWriteWithLockList 并发写入有锁链表 +func ConcurWriteWithLockList(l *WithLockList) { + var g errgroup.Group + // 10 个协程并发写入链表 + for i := 0; i < 10; i++ { + i := i + g.Go(func() error { + l.Push(i) + return nil + }) + } + _ = g.Wait() +} + +// ConcurWriteLockFreeList 并发写入无锁链表 +func ConcurWriteLockFreeList(l *LockFreeList) { + var g errgroup.Group + // 10 个协程并发写入链表 + for i := 0; i < 10; i++ { + i := i + g.Go(func() error { + l.Push(i) + return nil + }) + } + _ = g.Wait() +} + +func main() { + // 并发写入与遍历打印有锁链表 + l1 := &list.WithLockList{} + list.ConcurWriteWithLockList(l1) + fmt.Println(l1) + + // 并发写入与遍历打印无锁链表 + l2 := &list.LockFreeList{} + list.ConcurWriteLockFreeList(l2) + fmt.Println(l2) +} +``` +注意,多次运行上面的`main()`函数的结果可能会不相同,因为并发是无序的。 +``` +8,7,6,9,5,4,3,1,2,0 +9,8,7,6,5,4,3,2,0,1 +``` +下面再看一下链表 Push 操作的基准测试,对比一下有锁与无锁的性能差异。 +```go +func BenchmarkWriteWithLockList(b *testing.B) { + l := &WithLockList{} + for n := 0; n < b.N; n++ { + l.Push(n) + } +} +BenchmarkWriteWithLockList-8 14234166 83.58 ns/op + +func BenchmarkWriteLockFreeList(b *testing.B) { + l := &LockFreeList{} + for n := 0; n < b.N; n++ { + l.Push(n) + } +} +BenchmarkWriteLockFreeList-8 15219405 73.15 ns/op +``` +可以看出无锁版本比有锁版本性能高一些。 + +## 1.2 串行无锁 +串行无锁是一种思想,就是避免对共享资源的并发访问,改为每个并发操作访问自己独占的资源,达到串行访问资源的效果,来避免使用锁。不同的场景有不同的实现方式。比如网络 I/O 场景下将**单 Reactor 多线程模型**改为**主从 Reactor 多线程模型**,避免对同一个消息队列锁读取。 + +这里我介绍的是后台微服务开发经常遇到的一种情况。我们经常需要并发拉取多方面的信息,汇聚到一个变量上。那么此时就存在对同一个变量互斥写入的情况。比如批量并发拉取用户信息写入到一个 map。此时我们可以将每个协程拉取的结果写入到一个临时对象,这样便将并发地协程与同一个变量解绑,然后再将其汇聚到一起,这样便可以不用使用锁。即独立处理,然后合并。 + +![在这里插入图片描述](https://img-blog.csdnimg.cn/b9043e7366bb491eb5ae1c7243c0b04b.png) + +为了模拟上面的情况,简单地写个示例程序,对比下性能。 +```go +import ( + "sync" + + "golang.org/x/sync/errgroup" +) + +// ConcurWriteMapWithLock 有锁并发写入 map +func ConcurWriteMapWithLock() map[int]int { + m := make(map[int]int) + var mu sync.Mutex + var g errgroup.Group + // 10 个协程并发写入 map + for i := 0; i < 10; i++ { + i := i + g.Go(func() error { + mu.Lock() + defer mu.Unlock() + m[i] = i * i + return nil + }) + } + _ = g.Wait() + return m +} + +// ConcurWriteMapLockFree 无锁并发写入 map +func ConcurWriteMapLockFree() map[int]int { + m := make(map[int]int) + // 每个协程独占一 value + values := make([]int, 10) + // 10 个协程并发写入 map + var g errgroup.Group + for i := 0; i < 10; i++ { + i := i + g.Go(func() error { + values[i] = i * i + return nil + }) + } + _ = g.Wait() + // 汇聚结果到 map + for i, v := range values { + m[i] = v + } + return m +} +``` +看下二者的性能差异: +```go +func BenchmarkConcurWriteMapWithLock(b *testing.B) { + for n := 0; n < b.N; n++ { + _ = ConcurWriteMapWithLock() + } +} +BenchmarkConcurWriteMapWithLock-8 218673 5089 ns/op + +func BenchmarkConcurWriteMapLockFree(b *testing.B) { + for n := 0; n < b.N; n++ { + _ = ConcurWriteMapLockFree() + } +} +BenchmarkConcurWriteMapLockFree-8 316635 4048 ns/op +``` + +# 2.减少锁竞争 +如果加锁无法避免,则可以采用分片的形式,减少对资源加锁的次数,这样也可以提高整体的性能。 + +比如 Golang 优秀的本地缓存组件 [bigcache](https://github.com/allegro/bigcache) 、[go-cache](https://github.com/patrickmn/go-cache)、[freecache](https://github.com/coocood/freecache) 都实现了分片功能,每个分片一把锁,采用分片存储的方式减少加锁的次数从而提高整体性能。 + +以一个简单的示例,通过对`map[uint64]struct{}`分片前后并发写入的对比,来看下减少锁竞争带来的性能提升。 +```go +var ( + num = 1000000 + m0 = make(map[int]struct{}, num) + mu0 = sync.RWMutex{} + m1 = make(map[int]struct{}, num) + mu1 = sync.RWMutex{} +) + +// ConWriteMapNoShard 不分片写入一个 map。 +func ConWriteMapNoShard() { + g := errgroup.Group{} + for i := 0; i < num; i++ { + g.Go(func() error { + mu0.Lock() + defer mu0.Unlock() + m0[i] = struct{}{} + return nil + }) + } + _ = g.Wait() +} + +// ConWriteMapTwoShard 分片写入两个 map。 +func ConWriteMapTwoShard() { + g := errgroup.Group{} + for i := 0; i < num; i++ { + g.Go(func() error { + if i&1 == 0 { + mu0.Lock() + defer mu0.Unlock() + m0[i] = struct{}{} + return nil + } + mu1.Lock() + defer mu1.Unlock() + m1[i] = struct{}{} + return nil + }) + } + _ = g.Wait() +} +``` +看下二者的性能差异: +```go +func BenchmarkConWriteMapNoShard(b *testing.B) { + for i := 0; i < b.N; i++ { + ConWriteMapNoShard() + } +} +BenchmarkConWriteMapNoShard-12 3 472063245 ns/op + +func BenchmarkConWriteMapTwoShard(b *testing.B) { + for i := 0; i < b.N; i++ { + ConWriteMapTwoShard() + } +} +BenchmarkConWriteMapTwoShard-12 4 310588155 ns/op +``` +可以看到,通过对分共享资源的分片处理,减少了锁竞争,能明显地提高程序的并发性能。可以预见的是,随着分片粒度地变小,性能差距会越来越大。当然,分片粒度不是越小越好。因为每一个分片都要配一把锁,那么会带来很多额外的不必要的开销。可以选择一个不太大的值,在性能和花销上寻找一个平衡。 + +# 3.优先使用共享锁而非互斥锁 +如果并发无法做到无锁化,优先使用共享锁而非互斥锁。 + +所谓互斥锁,指锁只能被一个 Goroutine 获得。共享锁指可以同时被多个 Goroutine 获得的锁。 + +Go 标准库 sync 提供了两种锁,互斥锁(sync.Mutex)和读写锁(sync.RWMutex),读写锁便是共享锁的一种具体实现。 + +## 3.1 sync.Mutex +互斥锁的作用是保证共享资源同一时刻只能被一个 Goroutine 占用,一个 Goroutine 占用了,其他的 Goroutine 则阻塞等待。 + + + +sync.Mutex 提供了两个导出方法用来使用锁。 +```go +Lock() // 加锁 +Unlock() // 释放锁 +``` +我们可以通过在访问共享资源前前用 Lock 方法对资源进行上锁,在访问共享资源后调用 Unlock 方法来释放锁,也可以用 defer 语句来保证互斥锁一定会被解锁。在一个 Go 协程调用 Lock 方法获得锁后,其他请求锁的协程都会阻塞在 Lock 方法,直到锁被释放。 + +## 3.2 sync.RWMutex +读写锁是一种共享锁,也称之为多读单写锁 (multiple readers, single writer lock)。在使用锁时,对获取锁的目的操作做了区分,一种是读操作,一种是写操作。因为同一时刻允许多个 Gorouine 获取读锁,所以是一种共享锁。但写锁是互斥的。 + +一般来说,有如下几种情况: +- 读锁之间不互斥,没有写锁的情况下,读锁是无阻塞的,多个协程可以同时获得读锁。 +- 写锁之间是互斥的,存在写锁,其他写锁阻塞。 +- 写锁与读锁是互斥的,如果存在读锁,写锁阻塞,如果存在写锁,读锁阻塞。 + +![在这里插入图片描述](https://img-blog.csdnimg.cn/39bdca17ce704f2e957d3422a08af082.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5oGL5Za15aSn6bKk6bG8,size_20,color_FFFFFF,t_70,g_se,x_16) +sync.RWMutex 提供了五个导出方法用来使用锁。 +```go +Lock() // 加写锁 +Unlock() // 释放写锁 +RLock() // 加读锁 +RUnlock() // 释放读锁 +RLocker() Locker // 返回读锁,使用 Lock() 和 Unlock() 进行 RLock() 和 RUnlock() +``` +读写锁的存在是为了解决读多写少时的性能问题,读场景较多时,读写锁可有效地减少锁阻塞的时间。 + +## 3.3 性能对比 +大部分业务场景是读多写少,所以使用读写锁可有效提高对共享数据的访问效率。最坏的情况,只有写请求,那么读写锁顶多退化成互斥锁。所以优先使用读写锁而非互斥锁,可以提高程序的并发性能。 + +接下来,我们测试三种情景下,互斥锁和读写锁的性能差异。 +- 读多写少(读占 80%) +- 读写一致(各占 50%) +- 读少写多(读占 20%) + + +首先根据互斥锁和读写锁分别实现对共享 map 的并发读写。 +```go +// OpMapWithMutex 使用互斥锁读写 map。 +// rpct 为读操作占比。 +func OpMapWithMutex(rpct int) { + m := make(map[int]struct{}) + mu := sync.Mutex{} + var wg sync.WaitGroup + for i := 0; i < 100; i++ { + i := i + wg.Add(1) + go func() { + defer wg.Done() + mu.Lock() + defer mu.Unlock() + // 写操作。 + if i >= rpct { + m[i] = struct{}{} + time.Sleep(time.Microsecond) + return + } + // 读操作。 + _ = m[i] + time.Sleep(time.Microsecond) + }() + } + wg.Wait() +} + +// OpMapWithRWMutex 使用读写锁读写 map。 +// rpct 为读操作占比。 +func OpMapWithRWMutex(rpct int) { + m := make(map[int]struct{}) + mu := sync.RWMutex{} + var wg sync.WaitGroup + for i := 0; i < 100; i++ { + i := i + wg.Add(1) + go func() { + defer wg.Done() + // 写操作。 + if i >= rpct { + mu.Lock() + defer mu.Unlock() + m[i] = struct{}{} + time.Sleep(time.Microsecond) + return + } + // 读操作。 + mu.RLock() + defer mu.RUnlock() + _ = m[i] + time.Sleep(time.Microsecond) + }() + } + wg.Wait() +} +``` +入参 rpct 用来调节读操作的占比,来模拟读写占比不同的场景。rpct 设为 80 表示读多写少(读占 80%),rpct 设为 50 表示读写一致(各占 50%),rpct 设为 20 表示读少写多(读占 20%)。 +```go +func BenchmarkMutexReadMore(b *testing.B) { + for i := 0; i < b.N; i++ { + OpMapWithMutex(80) + } +} + +func BenchmarkRWMutexReadMore(b *testing.B) { + for i := 0; i < b.N; i++ { + OpMapWithRWMutex(80) + } +} + +func BenchmarkMutexRWEqual(b *testing.B) { + for i := 0; i < b.N; i++ { + OpMapWithMutex(50) + } +} + +func BenchmarkRWMutexRWEqual(b *testing.B) { + for i := 0; i < b.N; i++ { + OpMapWithRWMutex(50) + } +} + +func BenchmarkMutexWriteMore(b *testing.B) { + for i := 0; i < b.N; i++ { + OpMapWithMutex(20) + } +} + +func BenchmarkRWMutexWriteMore(b *testing.B) { + for i := 0; i < b.N; i++ { + OpMapWithRWMutex(20) + } +} +``` +执行当前包下的所有基准测试,结果如下: +```shell +dablelv@DABLELV-MB0 mutex % go test -bench=. +goos: darwin +goarch: amd64 +pkg: main/mutex +cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz +BenchmarkMutexReadMore-12 2462 485917 ns/op +BenchmarkRWMutexReadMore-12 8074 145690 ns/op +BenchmarkMutexRWEqual-12 2406 498673 ns/op +BenchmarkRWMutexRWEqual-12 4124 303693 ns/op +BenchmarkMutexWriteMore-12 1906 532350 ns/op +BenchmarkRWMutexWriteMore-12 2462 432386 ns/op +PASS +ok main/mutex 9.532s +``` +可见读多写少的场景,使用读写锁并发性能会更优。可以预见的是如果写占比更低,那么读写锁带的并发效果会更优。 + +这里需要注意的是,因为每次读写 map 的操作耗时很短,所以每次睡眠一微秒(百万分之一秒)来增加耗时,不然对共享资源的访问耗时,小于锁处理的本身耗时,那么使用读写锁带来的性能优化效果将变得不那么明显,甚至会降低性能。 \ No newline at end of file diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/2.\351\231\220\345\210\266\345\215\217\347\250\213\346\225\260\351\207\217.html" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/2.\351\231\220\345\210\266\345\215\217\347\250\213\346\225\260\351\207\217.html" index 468ac29..5f3f3dd 100644 --- "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/2.\351\231\220\345\210\266\345\215\217\347\250\213\346\225\260\351\207\217.html" +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/2.\351\231\220\345\210\266\345\215\217\347\250\213\346\225\260\351\207\217.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1206,7 +1202,7 @@

                                                                                          4.小结

                                                                                          Golang 为并发而生。Goroutine 是由 Go 运行时管理的轻量级线程,通过它我们可以轻松实现并发编程。Go 虽然轻量,但天下没有免费的午餐,无休止地开辟大量 Go 程势必会带来性能影响,甚至程序崩溃。所以,我们应尽可能的控制协程数量,如果有需要,请复用它。

                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 19:22:09 +2022-05-07 20:59:41
                                                                                          @@ -1251,7 +1247,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"2.限制协程数量","level":"1.5.4.2","depth":3,"next":{"title":"3.使用 sync.Once 避免重复执行","level":"1.5.4.3","depth":3,"path":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.md","ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.md","articles":[]},"previous":{"title":"1.关于锁","level":"1.5.4.1","depth":3,"path":"第四篇:最佳性能/3.并发编程/1.关于锁.md","ref":"第四篇:最佳性能/3.并发编程/1.关于锁.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/3.并发编程/2.限制协程数量.md","mtime":"2022-05-08T11:22:09.378Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"2.限制协程数量","level":"1.5.4.2","depth":3,"next":{"title":"3.使用 sync.Once 避免重复执行","level":"1.5.4.3","depth":3,"path":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.md","ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.md","articles":[]},"previous":{"title":"1.关于锁","level":"1.5.4.1","depth":3,"path":"第四篇:最佳性能/3.并发编程/1.关于锁.md","ref":"第四篇:最佳性能/3.并发编程/1.关于锁.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/3.并发编程/2.限制协程数量.md","mtime":"2022-05-07T12:59:41.679Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1261,10 +1257,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/2.\351\231\220\345\210\266\345\215\217\347\250\213\346\225\260\351\207\217.md" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/2.\351\231\220\345\210\266\345\215\217\347\250\213\346\225\260\351\207\217.md" new file mode 100644 index 0000000..5eab4e4 --- /dev/null +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/2.\351\231\220\345\210\266\345\215\217\347\250\213\346\225\260\351\207\217.md" @@ -0,0 +1,238 @@ +# 1.协程数过多的问题 +## 1.1 程序崩溃 +Go 程(goroutine)是由 Go 运行时管理的轻量级线程。通过它我们可以轻松实现并发编程。但是当我们无限开辟协程时,将会遇到致命的问题。 +```go +func main() { + var wg sync.WaitGroup + for i := 0; i < math.MaxInt32; i++ { + wg.Add(1) + go func(i int) { + defer wg.Done() + fmt.Println(i) + time.Sleep(time.Second) + }(i) + } + wg.Wait() +} +``` +这个例子实现了 math.MaxInt32 个协程的并发,`2^31 - 1` 约为 20 亿个,每个协程内部几乎没有做什么事情。正常的情况下呢,这个程序会乱序输出 0 ~ 2^31-1 个数字。 + +程序会像预期的那样顺利的运行吗? +```shell +go run main.go +... +108668 +1142025 +panic: too many concurrent operations on a single file or socket (max 1048575) + +goroutine 1158408 [running]: +internal/poll.(*fdMutex).rwlock(0xc0000ae060, 0x0) + /usr/local/go/src/internal/poll/fd_mutex.go:147 +0x11b +internal/poll.(*FD).writeLock(...) + /usr/local/go/src/internal/poll/fd_mutex.go:239 +internal/poll.(*FD).Write(0xc0000ae060, {0xc12cadf690, 0x8, 0x8}) + /usr/local/go/src/internal/poll/fd_unix.go:262 +0x72 +os.(*File).write(...) + /usr/local/go/src/os/file_posix.go:49 +os.(*File).Write(0xc0000ac008, {0xc12cadf690, 0x1, 0xc12ea62f50}) + /usr/local/go/src/os/file.go:176 +0x65 +fmt.Fprintln({0x10c00e0, 0xc0000ac008}, {0xc12ea62f90, 0x1, 0x1}) + /usr/local/go/src/fmt/print.go:265 +0x75 +fmt.Println(...) + /usr/local/go/src/fmt/print.go:274 +main.main.func1(0x0) + /Users/dablelv/work/code/test/main.go:16 +0x8f +... +``` +运行的结果是程序直接崩溃了,关键的报错信息是: +``` +panic: too many concurrent operations on a single file or socket (max 1048575) +``` +对单个 file/socket 的并发操作个数超过了系统上限,这个报错是 fmt.Printf 函数引起的,fmt.Printf 将格式化后的字符串打印到屏幕,即标准输出。在 Linux 系统中,标准输出也可以视为文件,内核(Kernel)利用文件描述符(File Descriptor)来访问文件,标准输出的文件描述符为 1,错误输出文件描述符为 2,标准输入的文件描述符为 0。 + +简而言之,系统的资源被耗尽了。 + +那如果我们将 fmt.Printf 这行代码去掉呢?那程序很可能会因为内存不足而崩溃。这一点更好理解,每个协程至少需要消耗 2KB 的空间,那么假设计算机的内存是 4GB,那么至多允许 4GB/2KB = 1M 个协程同时存在。那如果协程中还存在着其他需要分配内存的操作,那么允许并发执行的协程将会数量级地减少。 + +## 1.2 协程的代价 +前面的例子过于极端,一般情况下程序也不会无限开辟协程,旨在说明协程数量是有限制的,不能无限开辟。 + +如果我们开辟很多协程,但不会导致程序崩溃,可以吗?如果真要这么做的话,我们应该清楚地知道,协程虽然轻量,但仍有开销。 + +Go 的开销主要是三个方面:创建(占用内存)、调度(增加调度器负担)和删除(增加 GC 压力)。 + +- 内存开销 + +空间上,一个 Go 程占用约 2K 的内存,在源码 src/runtime/runtime2.go里面,我们可以找到 Go 程的结构定义type g struct。 + +- 调度开销 + +时间上,协程调度也会有 CPU 开销。我们可以利用runntime.Gosched()让当前协程主动让出 CPU 去执行另外一个协程,下面看一下协程之间切换的耗时。 +```go +const NUM = 10000 + +func cal() { + for i := 0; i < NUM; i++ { + runtime.Gosched() + } +} + +func main() { + // 只设置一个 Processor + runtime.GOMAXPROCS(1) + start := time.Now().UnixNano() + go cal() + for i := 0; i < NUM; i++ { + runtime.Gosched() + } + end := time.Now().UnixNano() + fmt.Printf("total %vns per %vns", end-start, (end-start)/NUM) +} +``` +运行输出: +``` +total 997200ns per 99ns +``` +可见一次协程的切换,耗时大概在 100ns,相对于线程的微秒级耗时切换,性能表现非常优秀,但是仍有开销。 + +- GC 开销 + 创建 Go 程到运行结束,占用的内存资源是需要由 GC 来回收,如果无休止地创建大量 Go 程后,势必会造成对 GC 的压力。 +```go +package main + +import ( + "fmt" + "runtime" + "runtime/debug" + "sync" + "time" +) + +func createLargeNumGoroutine(num int, wg *sync.WaitGroup) { + wg.Add(num) + for i := 0; i < num; i++ { + go func() { + defer wg.Done() + }() + } +} + +func main() { + // 只设置一个 Processor 保证 Go 程串行执行 + runtime.GOMAXPROCS(1) + // 关闭GC改为手动执行 + debug.SetGCPercent(-1) + + var wg sync.WaitGroup + createLargeNumGoroutine(1000, &wg) + wg.Wait() + t := time.Now() + runtime.GC() // 手动GC + cost := time.Since(t) + fmt.Printf("GC cost %v when goroutine num is %v\n", cost, 1000) + + createLargeNumGoroutine(10000, &wg) + wg.Wait() + t = time.Now() + runtime.GC() // 手动GC + cost = time.Since(t) + fmt.Printf("GC cost %v when goroutine num is %v\n", cost, 10000) + + createLargeNumGoroutine(100000, &wg) + wg.Wait() + t = time.Now() + runtime.GC() // 手动GC + cost = time.Since(t) + fmt.Printf("GC cost %v when goroutine num is %v\n", cost, 100000) +} +``` +运行输出: +```shell +GC cost 0s when goroutine num is 1000 +GC cost 2.0027ms when goroutine num is 10000 +GC cost 30.9523ms when goroutine num is 100000 +``` +当创建的 Go 程数量越多,GC 耗时越大。 + +上面的分析目的是为了尽可能地量化 Goroutine 的开销。虽然官方宣称用 Golang 写并发程序的时候随便起个成千上万的 Goroutine 毫无压力,但当我们起十万、百万甚至千万个 Goroutine 呢?Goroutine 轻量的开销将被放大。 + +### 2.2 限制协程数量 +系统地资源是有限,协程是有代价的,为了保护程序,提高性能,我们应主动限制并发的协程数量。 + +可以利用信道 channel 的缓冲区大小来实现。 +```go +func main() { + var wg sync.WaitGroup + ch := make(chan struct{}, 3) + for i := 0; i < 10; i++ { + ch <- struct{}{} + wg.Add(1) + go func(i int) { + defer wg.Done() + log.Println(i) + time.Sleep(time.Second) + <-ch + }(i) + } + wg.Wait() +} +``` +上例中创建了缓冲区大小为 3 的 channel,在没有被接收的情况下,至多发送 3 个消息则被阻塞。开启协程前,调用`ch <- struct{}{}`,若缓存区满,则阻塞。协程任务结束,调用 <-ch 释放缓冲区。 + +sync.WaitGroup 并不是必须的,例如 Http 服务,每个请求天然是并发的,此时使用 channel 控制并发处理的任务数量,就不需要 sync.WaitGroup。 + +运行结果如下: +```shell +2022/03/06 20:37:02 0 +2022/03/06 20:37:02 2 +2022/03/06 20:37:02 1 +2022/03/06 20:37:03 3 +2022/03/06 20:37:03 4 +2022/03/06 20:37:03 5 +2022/03/06 20:37:04 6 +2022/03/06 20:37:04 7 +2022/03/06 20:37:04 8 +2022/03/06 20:37:05 9 +``` +从日志中可以很容易看到,每秒钟只并发执行了 3 个任务,达到了协程并发控制的目的。 + +# 3.协程池化 +上面的例子只是简单地限制了协程开辟的数量。在此基础之上,基于对象复用的思想,我们可以重复利用已开辟的协程,避免协程的重复创建销毁,达到池化的效果。 + +协程池化,我们可以自己写一个协程池,但不推荐这么做。因为已经有成熟的开源库可供使用,无需再重复造轮子。目前有很多第三方库实现了协程池,可以很方便地用来控制协程的并发数量,比较受欢迎的有: +- [Jeffail/tunny](https://github.com/Jeffail/tunny) +- [panjf2000/ants](https://github.com/panjf2000/ants) + +下面以 panjf2000/ants 为例,简单介绍其使用。 + +ants 是一个简单易用的高性能 Goroutine 池,实现了对大规模 Goroutine 的调度管理和复用,允许使用者在开发并发程序的时候限制 Goroutine 数量,复用协程,达到更高效执行任务的效果。 +```go +package main + +import ( + "fmt" + "time" + + "github.com/panjf2000/ants" +) + +func main() { + // Use the common pool + for i := 0; i < 10; i++ { + i := i + ants.Submit(func() { + fmt.Println(i) + }) + } + time.Sleep(time.Second) +} +``` +使用 ants,我们简单地使用其默认的协程池,直接将任务提交并发执行。默认协程池的缺省容量 math.MaxInt32。 + +如果自定义协程池容量大小,可以调用 NewPool 方法来实例化具有给定容量的池,如下所示: +```go +// Set 10000 the size of goroutine pool +p, _ := ants.NewPool(10000) +``` +# 4.小结 +Golang 为并发而生。Goroutine 是由 Go 运行时管理的轻量级线程,通过它我们可以轻松实现并发编程。Go 虽然轻量,但天下没有免费的午餐,无休止地开辟大量 Go 程势必会带来性能影响,甚至程序崩溃。所以,我们应尽可能的控制协程数量,如果有需要,请复用它。 \ No newline at end of file diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/3.\344\275\277\347\224\250sync.Once\351\201\277\345\205\215\351\207\215\345\244\215\346\211\247\350\241\214.html" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/3.\344\275\277\347\224\250sync.Once\351\201\277\345\205\215\351\207\215\345\244\215\346\211\247\350\241\214.html" index 35c48e9..df47bb5 100644 --- "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/3.\344\275\277\347\224\250sync.Once\351\201\277\345\205\215\351\207\215\345\244\215\346\211\247\350\241\214.html" +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/3.\344\275\277\347\224\250sync.Once\351\201\277\345\205\215\351\207\215\345\244\215\346\211\247\350\241\214.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1146,7 +1142,7 @@

                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 19:22:09 +2022-05-07 21:02:49 @@ -1191,7 +1187,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"3.使用 sync.Once 避免重复执行","level":"1.5.4.3","depth":3,"next":{"title":"4.使用 sync.Cond 通知协程","level":"1.5.4.4","depth":3,"path":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.md","ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.md","articles":[]},"previous":{"title":"2.限制协程数量","level":"1.5.4.2","depth":3,"path":"第四篇:最佳性能/3.并发编程/2.限制协程数量.md","ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.md","mtime":"2022-05-08T11:22:09.379Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"3.使用 sync.Once 避免重复执行","level":"1.5.4.3","depth":3,"next":{"title":"4.使用 sync.Cond 通知协程","level":"1.5.4.4","depth":3,"path":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.md","ref":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.md","articles":[]},"previous":{"title":"2.限制协程数量","level":"1.5.4.2","depth":3,"path":"第四篇:最佳性能/3.并发编程/2.限制协程数量.md","ref":"第四篇:最佳性能/3.并发编程/2.限制协程数量.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.md","mtime":"2022-05-07T13:02:49.997Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1201,10 +1197,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/3.\344\275\277\347\224\250sync.Once\351\201\277\345\205\215\351\207\215\345\244\215\346\211\247\350\241\214.md" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/3.\344\275\277\347\224\250sync.Once\351\201\277\345\205\215\351\207\215\345\244\215\346\211\247\350\241\214.md" new file mode 100644 index 0000000..2e2d3e7 --- /dev/null +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/3.\344\275\277\347\224\250sync.Once\351\201\277\345\205\215\351\207\215\345\244\215\346\211\247\350\241\214.md" @@ -0,0 +1,155 @@ +# 1.简介 +sync.Once 是 Go 标准库提供的使函数只执行一次的实现,常应用于单例模式,例如初始化配置、保持数据库连接等。作用与 init 函数类似,但有区别。 +- init 函数是当所在的 package 首次被加载时执行,若迟迟未被使用,则既浪费了内存,又延长了程序加载时间。 +- sync.Once 可以在代码的任意位置初始化和调用,因此可以延迟到使用时再执行,并发场景下是线程安全的。 + +在多数情况下,sync.Once 被用于控制变量的初始化,这个变量的读写满足如下三个条件: +- 当且仅当第一次访问某个变量时,进行初始化(写); +- 变量初始化过程中,所有读都被阻塞,直到初始化完成; +- 变量仅初始化一次,初始化完成后驻留在内存里。 + +# 2.原理 +sync.Once 用来保证函数只执行一次。要达到这个效果,需要做到两点: +- 计数器,统计函数执行次数; +- 线程安全,保障在多 Go 程的情况下,函数仍然只执行一次,比如锁。 + +## 2.1 源码 +下面看一下 sync.Once 结构,其有两个变量。使用 done 统计函数执行次数,使用锁 m 实现线程安全。果不其然,和上面的猜想一致。 +```go +// Once is an object that will perform exactly one action. +// +// A Once must not be copied after first use. +type Once struct { + // done indicates whether the action has been performed. + // It is first in the struct because it is used in the hot path. + // The hot path is inlined at every call site. + // Placing done first allows more compact instructions on some architectures (amd64/386), + // and fewer instructions (to calculate offset) on other architectures. + done uint32 + m Mutex +} +``` +sync.Once 仅提供了一个导出方法 Do(),参数 f 是只会被执行一次的函数,一般为对象初始化函数。 +```go +// go version go1.17 darwin/amd64 + +// Do calls the function f if and only if Do is being called for the +// first time for this instance of Once. In other words, given +// var once Once +// if once.Do(f) is called multiple times, only the first call will invoke f, +// even if f has a different value in each invocation. A new instance of +// Once is required for each function to execute. +// +// Do is intended for initialization that must be run exactly once. Since f +// is niladic, it may be necessary to use a function literal to capture the +// arguments to a function to be invoked by Do: +// config.once.Do(func() { config.init(filename) }) +// +// Because no call to Do returns until the one call to f returns, if f causes +// Do to be called, it will deadlock. +// +// If f panics, Do considers it to have returned; future calls of Do return +// without calling f. +// +func (o *Once) Do(f func()) { + // Note: Here is an incorrect implementation of Do: + // + // if atomic.CompareAndSwapUint32(&o.done, 0, 1) { + // f() + // } + // + // Do guarantees that when it returns, f has finished. + // This implementation would not implement that guarantee: + // given two simultaneous calls, the winner of the cas would + // call f, and the second would return immediately, without + // waiting for the first's call to f to complete. + // This is why the slow path falls back to a mutex, and why + // the atomic.StoreUint32 must be delayed until after f returns. + + if atomic.LoadUint32(&o.done) == 0 { + // Outlined slow-path to allow inlining of the fast-path. + o.doSlow(f) + } +} + +func (o *Once) doSlow(f func()) { + o.m.Lock() + defer o.m.Unlock() + if o.done == 0 { + defer atomic.StoreUint32(&o.done, 1) + f() + } +} +``` +抛去大段的注释,可以看到 sync.Once 实现非常简洁。Do() 函数中,通过对成员变量 done 的判断,来决定是否执行传入的任务函数。执行任务函数前,通过锁保证任务函数的执行和 done 的修改是一个互斥操作。在执行任务函数前,对 done 做一个二次判断,来保证任务函数只会被执行一次,done 只会被修改一次。 + +## 2.2 done 为什么是第一个字段? +从字段 done 前有一段注释,说明了done 为什么是第一个字段。 + +done 在热路径中,done 放在第一个字段,能够减少 CPU 指令,也就是说,这样做能够提升性能。 + +热路径(hot path)是程序非常频繁执行的一系列指令,sync.Once 绝大部分场景都会访问 o.done,在热路径上是比较好理解的。如果 hot path 编译后的机器码指令更少,更直接,必然是能够提升性能的。 + +为什么放在第一个字段就能够减少指令呢?因为结构体第一个字段的地址和结构体的指针是相同的,如果是第一个字段,直接对结构体的指针解引用即可。如果是其他的字段,除了结构体指针外,还需要计算与第一个值的偏移(calculate offset)。在机器码中,偏移量是随指令传递的附加值,CPU 需要做一次偏移值与指针的加法运算,才能获取要访问的值的地址。因为,访问第一个字段的机器代码更紧凑,速度更快。 + +>参考 [What does “hot path” mean in the context of sync.Once? - StackOverflow](https://stackoverflow.com/questions/59174176/what-does-hot-path-mean-in-the-context-of-sync-once) + +# 3.性能差异 +我们以一个简单示例,来说明使用 sync.Once 保证函数只会被执行一次和多次执行,二者的性能差异。 + +考虑一个简单的场景,函数 ReadConfig 需要读取环境变量,并转换为对应的配置。环境变量在程序执行前已经确定,执行过程中不会发生改变。ReadConfig 可能会被多个协程并发调用,为了提升性能(减少执行时间和内存占用),使用 sync.Once 是一个比较好的方式。 +```go +type Config struct { + GoRoot string + GoPath string +} + +var ( + once sync.Once + config *Config +) + +func ReadConfigWithOnce() *Config { + once.Do(func() { + config = &Config{ + GoRoot: os.Getenv("GOROOT"), + GoPath: os.Getenv("GOPATH"), + } + }) + return config +} + +func ReadConfig() *Config { + return &Config{ + GoRoot: os.Getenv("GOROOT"), + GoPath: os.Getenv("GOPATH"), + } +} +``` +我们看下二者的性能差异。 +```go +func BenchmarkReadConfigWithOnce(b *testing.B) { + for i := 0; i < b.N; i++ { + _ = ReadConfigWithOnce() + } +} + +func BenchmarkReadConfig(b *testing.B) { + for i := 0; i < b.N; i++ { + _ = ReadConfig() + } +} +``` +执行测试结果如下: +```shell +go test -bench=. main/once +goos: darwin +goarch: amd64 +pkg: main/once +cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz +BenchmarkReadConfigWithOnce-12 670438965 1.732 ns/op +BenchmarkReadConfig-12 13339154 87.46 ns/op +PASS +ok main/once 3.006s +``` +sync.Once 中保证了 Config 初始化函数仅执行了一次,避免了多次重复初始化,在并发环境下很有用。 \ No newline at end of file diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/4.\344\275\277\347\224\250sync.Cond\351\200\232\347\237\245\345\215\217\347\250\213.html" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/4.\344\275\277\347\224\250sync.Cond\351\200\232\347\237\245\345\215\217\347\250\213.html" index 3d34459..637ae3b 100644 --- "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/4.\344\275\277\347\224\250sync.Cond\351\200\232\347\237\245\345\215\217\347\250\213.html" +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/4.\344\275\277\347\224\250sync.Cond\351\200\232\347\237\245\345\215\217\347\250\213.html" @@ -8,7 +8,7 @@ - + @@ -17,10 +17,6 @@ - - - - @@ -1190,7 +1186,7 @@

                                                                                          powered by Gitbook该文章修订时间: -2022-05-08 22:45:54 +2022-05-09 20:35:37 @@ -1235,7 +1231,7 @@

                                                                                          No results matching " var gitbook = gitbook || []; gitbook.push(function() { - gitbook.page.hasChanged({"page":{"title":"4.使用 sync.Cond 通知协程","level":"1.5.4.4","depth":3,"next":{"title":"参考文献","level":"1.6","depth":1,"path":"参考文献.md","ref":"参考文献.md","articles":[]},"previous":{"title":"3.使用 sync.Once 避免重复执行","level":"1.5.4.3","depth":3,"path":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.md","ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.md","articles":[]},"dir":"ltr"},"config":{"plugins":["insert-logo","custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false},"insert-logo":{"style":"background: none; max-height: 100px;","url":"https://dablelv.github.io/go-coding-advice/assets/images/logo.jpg"}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.md","mtime":"2022-05-08T14:45:54.544Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-22T14:47:45.490Z"},"basePath":"../..","book":{"language":""}}); + gitbook.page.hasChanged({"page":{"title":"4.使用 sync.Cond 通知协程","level":"1.5.4.4","depth":3,"next":{"title":"参考文献","level":"1.6","depth":1,"path":"参考文献.md","ref":"参考文献.md","articles":[]},"previous":{"title":"3.使用 sync.Once 避免重复执行","level":"1.5.4.3","depth":3,"path":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.md","ref":"第四篇:最佳性能/3.并发编程/3.使用sync.Once避免重复执行.md","articles":[]},"dir":"ltr"},"config":{"plugins":["custom-favicon","splitter","disqus","tbfed-pagefooter","github","code","sidebar-style","anchor-navigation-expand","popup","livereload"],"styles":{"website":"styles/website.css"},"pluginsConfig":{"sidebar-style":{"author":"","title":"Go 编码建议"},"tbfed-pagefooter":{"copyright":"","modify_label":"该文章修订时间:","modify_format":"YYYY-MM-DD HH:mm:ss"},"disqus":{"useIdentifier":false,"shortName":"go-coding-advice"},"github":{"url":"https://github.com/dablelv/go-coding-advice"},"livereload":{},"splitter":{},"search":{},"popup":{},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"code":{"copyButtons":true},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"favicon":"assets/images/favicon.ico","custom-favicon":{},"anchor-navigation-expand":{"associatedWithSummary":true,"float":{"floatIcon":"fa fa-navicon","level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"mode":"float","multipleH1":true,"pageTop":{"level1Icon":"","level2Icon":"","level3Icon":"","showLevelIcon":false},"printLog":false,"showGoTop":true,"showLevel":false},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","author":"Dablelv","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"title":"Go 编码建议","links":{"sidebar":{"个人站点":"https://dablelv.github.io/dablelvweb","CSDN 主页":"https://dablelv.blog.csdn.net","GitHub 主页":"https://github.com/dablelv","本书 GitHub 地址 ":"https://github.com/dablelv/go-coding-advice"}},"gitbook":"*"},"file":{"path":"第四篇:最佳性能/3.并发编程/4.使用sync.Cond通知协程.md","mtime":"2022-05-09T12:35:37.005Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2022-05-24T02:05:13.082Z"},"basePath":"../..","book":{"language":""}}); }); @@ -1245,10 +1241,6 @@

                                                                                          No results matching " - - - - diff --git "a/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/4.\344\275\277\347\224\250sync.Cond\351\200\232\347\237\245\345\215\217\347\250\213.md" "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/4.\344\275\277\347\224\250sync.Cond\351\200\232\347\237\245\345\215\217\347\250\213.md" new file mode 100644 index 0000000..1aee5f1 --- /dev/null +++ "b/docs/\347\254\254\345\233\233\347\257\207\357\274\232\346\234\200\344\275\263\346\200\247\350\203\275/3.\345\271\266\345\217\221\347\274\226\347\250\213/4.\344\275\277\347\224\250sync.Cond\351\200\232\347\237\245\345\215\217\347\250\213.md" @@ -0,0 +1,216 @@ +# 1.简介 +sync.Cond 是基于互斥锁/读写锁实现的条件变量,用来协调想要访问共享资源的那些 Goroutine。当共享资源的状态发生变化的时候,sync.Cond 可以用来通知等待条件发生而阻塞的 Goroutine。 + +sync.Cond 基于互斥锁/读写锁,那它和互斥锁的区别是什么呢? + +互斥锁 sync.Mutex 通常用来保护共享的临界资源,条件变量 sync.Cond 用来协调想要访问共享资源的 Goroutine。当共享资源的状态发生变化时,sync.Cond 可以用来通知被阻塞的 Goroutine。 + +# 2.使用场景 +sync.Cond 经常用在多个 Goroutine 等待,一个 Goroutine 通知(事件发生)的场景。如果是一个通知,一个等待,使用互斥锁或 channel 就能搞定了。 + +我们想象一个非常简单的场景: + +有一个协程在异步地接收数据,剩下的多个协程必须等待这个协程接收完数据,才能读取到正确的数据。在这种情况下,如果单纯使用 chan 或互斥锁,那么只能有一个协程可以等待,并读取到数据,没办法通知其他的协程也读取数据。 + +这个时候,就需要有个全局的变量来标志第一个协程数据是否接受完毕,剩下的协程,反复检查该变量的值,直到满足要求。或者创建多个 channel,每个协程阻塞在一个 channel 上,由接收数据的协程在数据接收完毕后,逐个通知。总之,需要额外的复杂度来完成这件事。 + +Go 语言在标准库 sync 中内置一个 sync.Cond 用来解决这类问题。 + +# 3.实现原理 +sync.Cond 内部维护了一个等待队列,队列中存放的是所有在等待这个 sync.Cond 的 Go 程,即保存了一个通知列表。sync.Cond 可以用来唤醒一个或所有因等待条件变量而阻塞的 Go 程,以此来实现多个 Go 程间的同步。 + +sync.Cond 的定义如下: +```go +// Cond implements a condition variable, a rendezvous point +// for goroutines waiting for or announcing the occurrence +// of an event. +// +// Each Cond has an associated Locker L (often a *Mutex or *RWMutex), +// which must be held when changing the condition and +// when calling the Wait method. +// +// A Cond must not be copied after first use. +type Cond struct { + noCopy noCopy + + // L is held while observing or changing the condition + L Locker + + notify notifyList + checker copyChecker +} +``` +每个 Cond 实例都会关联一个锁 L(互斥锁 *Mutex,或读写锁 *RWMutex),当修改条件或者调用 Wait 方法时,必须加锁。 + +sync.Cond 的四个成员函数定义如下: +```go +// NewCond returns a new Cond with Locker l. +func NewCond(l Locker) *Cond { + return &Cond{L: l} +} +``` +NewCond 创建 Cond 实例时,需要关联一个锁。 +```go +// Wait atomically unlocks c.L and suspends execution +// of the calling goroutine. After later resuming execution, +// Wait locks c.L before returning. Unlike in other systems, +// Wait cannot return unless awoken by Broadcast or Signal. +// +// Because c.L is not locked when Wait first resumes, the caller +// typically cannot assume that the condition is true when +// Wait returns. Instead, the caller should Wait in a loop: +// +// c.L.Lock() +// for !condition() { +// c.Wait() +// } +// ... make use of condition ... +// c.L.Unlock() +// +func (c *Cond) Wait() { + c.checker.check() + t := runtime_notifyListAdd(&c.notify) + c.L.Unlock() + runtime_notifyListWait(&c.notify, t) + c.L.Lock() +} +``` +Wait 用于阻塞调用者,等待通知。 + +调用 Wait 会自动释放锁 c.L,因为 Wait() 会将主调加入条件变量的通知列表,需要修改条件变量,所以主调在调用 Wait() 前需要对条件变量进行上锁,主调加入条件变量的通知列表后再解锁。 + +执行`runtime_notifyListWait`会挂起调用者所在的 Goroutine。如果其他协程调用了 Signal 或 Broadcast 唤醒了该协程,那么 Wait 方法在结束阻塞时,会重新给 c.L 加锁,并且继续执行 Wait 后面的代码。 + +主调对条件的检查,使用了 for !condition() 而非 if,是因为当前协程被唤醒时,条件不一定符合要求,需要再次 Wait 等待下次被唤醒。为了保险起,使用 for 能够确保被唤醒后条件一定符合后,再执行后续的代码。 +```go +// Signal wakes one goroutine waiting on c, if there is any. +// +// It is allowed but not required for the caller to hold c.L +// during the call. +func (c *Cond) Signal() { + c.checker.check() + runtime_notifyListNotifyOne(&c.notify) +} + +// Broadcast wakes all goroutines waiting on c. +// +// It is allowed but not required for the caller to hold c.L +// during the call. +func (c *Cond) Broadcast() { + c.checker.check() + runtime_notifyListNotifyAll(&c.notify) +} +``` +Signal 只唤醒任意 1 个等待条件变量 c 的 goroutine,无需锁保护。Broadcast 唤醒所有等待条件变量 c 的 goroutine,无需锁保护。 + +# 4.使用示例 +我们实现一个简单的例子,三个协程调用 Wait() 等待,另一个协程调用 Broadcast() 唤醒所有等待的协程。 +```go +var done = false + +func read(name string, c *sync.Cond) { + c.L.Lock() + for !done { + c.Wait() + } + fmt.Println(name, "starts reading") + c.L.Unlock() +} + +func write(name string, c *sync.Cond) { + fmt.Println(name, "starts writing") + time.Sleep(time.Second) + done = true + fmt.Println(name, "wakes all") + c.Broadcast() +} + +func main() { + cond := sync.NewCond(&sync.Mutex{}) + + go read("reader1", cond) + go read("reader2", cond) + go read("reader3", cond) + write("writer", cond) + + time.Sleep(time.Second * 3) +} +``` +- done 即多个 Goroutine 阻塞等待的条件。 +- read() 调用 Wait() 等待通知,直到 done 为 true。 +- write() 接收数据,接收完成后,将 done 置为 true,调用 Broadcast() 通知所有等待的协程。 +- write() 中的暂停了 1s,一方面是模拟耗时,另一方面是确保前面的 3 个 read 协程都执行到 Wait(),处于等待状态。main 函数最后暂停了 3s,确保所有操作执行完毕。 + +运行结果如下,注意 reader 的打印顺序是随机的。 +```shell +$ go run main.go +writer starts writing +writer wakes all +reader3 starts reading +reader1 starts reading +reader2 starts reading +``` +更多关于 sync.Cond 的讨论可参考 [How to correctly use sync.Cond? - StackOverflow](https://stackoverflow.com/questions/36857167/how-to-correctly-use-sync-cond)。 + +# 5.注意事项 +- sync.Cond 不能被复制 + +sync.Cond 不能被复制的原因,并不是因为其内部嵌套了 Locker。因为 NewCond 时传入的 Mutex/RWMutex 指针,对于 Mutex 指针复制是没有问题的。 + +主要原因是 sync.Cond 内部是维护着一个 Goroutine 通知队列 notifyList。如果这个队列被复制的话,那么就在并发场景下导致不同 Goroutine 之间操作的 notifyList.wait、notifyList.notify 并不是同一个,这会导致出现有些 Goroutine 会一直阻塞。 + +- 唤醒顺序 + +从等待队列中按照顺序唤醒,先进入等待队列,先被唤醒。 + +- 调用 Wait() 前要加锁 + +调用 Wait() 函数前,需要先获得条件变量的成员锁,原因是需要互斥地变更条件变量的等待队列。在 Wait() 返回前,会重新上锁。重新上锁的原因是主调在 Wait 后会进行解锁操作,避免重复解锁引发 panic。 + +- sync.Cond 和 channel 的区别? + +实际上,我们可以使用无缓冲 channel 充当条件变量实现 Go 程同步。通过 close(ch) 表示广播通知,其他的 Goroutine 使用 for select 结构来接收通知就行了。 + +还是以上面给出的同步示例,这里换作 channel 来实现。 +```go +var done = false +var ch = make(chan struct{}) + +func read(name string) { + for !done { + select { + case <-ch: + } + } + fmt.Println(name, "starts reading") +} + +func write(name string) { + fmt.Println(name, "starts writing") + time.Sleep(time.Second) + done = true + fmt.Println(name, "wakes all") + close(ch) +} + +func main() { + go read("reader1") + go read("reader2") + go read("reader3") + write("writer") + + time.Sleep(time.Second * 3) +} +``` +运行输出如下,注意 reader 的打印顺序是随机的。 +```shell +$ go run main.go +writer starts writing +writer wakes all +reader1 starts reading +reader3 starts reading +reader2 starts reading +``` +既然 channel 可以实现,看起来代码更加简洁,那么 sync.Cond 的存在还有必要吗? + +实际上 sync.Cond 与 Channel 是有区别的,channel 定位于通信,用于一发一收的场景,sync.Cond 定位于同步,用于一发多收的场景。虽然 channel 可以通过 close 操作来达到一发多收的效果,但是 closed 的 channel 已无法继续使用,而 sync.Cond 依旧可以继续使用。这可能就是“全能”与“专精”的区别。 \ No newline at end of file diff --git a/styles/website.css b/styles/website.css index 1e502a0..32807f9 100644 --- a/styles/website.css +++ b/styles/website.css @@ -1,8 +1,4 @@ .custom-link{ text-align: center; font-weight: bold; -} - -.active, span{ - font-weight: bold; } \ No newline at end of file