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 fd8f125..0000000 Binary files a/docs/assets/images/logo.jpg and /dev/null differ 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 0000000..5d28c15 Binary files /dev/null and b/docs/docs/assets/images/banner.png differ diff --git a/docs/docs/assets/images/favicon.ico b/docs/docs/assets/images/favicon.ico new file mode 100644 index 0000000..22d346e Binary files /dev/null and b/docs/docs/assets/images/favicon.ico differ 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 0000000..d4de13e Binary files /dev/null and b/docs/docs/gitbook/fonts/fontawesome/FontAwesome.otf differ 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 0000000..c7b00d2 Binary files /dev/null and b/docs/docs/gitbook/fonts/fontawesome/fontawesome-webfont.eot differ diff --git a/docs/docs/gitbook/fonts/fontawesome/fontawesome-webfont.svg b/docs/docs/gitbook/fonts/fontawesome/fontawesome-webfont.svg new file mode 100644 index 0000000..8b66187 --- /dev/null +++ b/docs/docs/gitbook/fonts/fontawesome/fontawesome-webfont.svg @@ -0,0 +1,685 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ 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 0000000..f221e50 Binary files /dev/null and b/docs/docs/gitbook/fonts/fontawesome/fontawesome-webfont.ttf differ 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 0000000..6e7483c Binary files /dev/null and b/docs/docs/gitbook/fonts/fontawesome/fontawesome-webfont.woff differ 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 0000000..7eb74fd Binary files /dev/null and b/docs/docs/gitbook/fonts/fontawesome/fontawesome-webfont.woff2 differ 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 = "
"; + 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 = "
"; + + 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 0000000..b5e4c9d Binary files /dev/null and "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" differ 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.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/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" index 4266e14..05bae7c 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/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/\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" @@ -8,7 +8,7 @@ - + @@ -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 0000000..b5334bf Binary files /dev/null and "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" differ 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