作者:empty 页数:215 出版社:empty |
这是一本开源的Go语言进阶图书,帮助初级GO程序员成为资深专家,欢迎加入-源文件组织形式章节目录每个章节文章及配图放到一个目录, 目录名称格式为 chapter xx , 其中XX表示章节序号, 不足两位以0补齐。例如, 第一章目录名为chapter 01.源码文件每个章节都对应一个源码文件,文件命名格式为”[节]-[源码文件名].md ,例如, 某章第一节的源码文件名为1.1-go_schedule.md,注:源码文件名中不再体现章,以避免章节调整时再重命名,配图每章的配图放到章目录下的images子目录中。每节的配图统一命名, 格式为 [本节关键词] -[本节图片序号] -[图片名] 。例如, 第一节第一张图命令为:chan-01-chan_queue.png建议同时保留图片原型,以便修改方便。图片原型文件命令与图片一致,只是后缀不同。画图工具本书中所有原创图片都使用P races son在线工具完成。开始阅读开始阅读木文档使用书栈(BookStack.CN) 构建《GO专家编程》这是一本开源的Go语言进阶图书,帮助初级GO程序员成为资深专家,欢迎加入-项目地址(欢迎勘误或投稿)
本章主要介绍常见的数据结构, 比如channel、slice、map等, 通过对其底层实现原理的分析, 来加深认识, 以此避免一些使用过程中的误区,木文档使用书栈(BookStack.CN) 构建7.1.前言channel是Go lang在语言层面提供的go routine间的通信方式, 比Unix管道更易用也更轻便, channel主要用于进程内各go routine间通信, 如果需要跨进程通信, 建议使用分布式系统的方法来解决,本章从源码角度分析channel的实现机制, 实际上这部分源码非常简单易读2.chan数据结构s re/run tine/chan-geh chan定义了channel的数据结构:从数据结构可以看出channel由队列、类型信息、go routine等待队列组成, 下面分别说明其原理。chan内部实现了一个环形队列作为其缓冲区, 队列的长度是创建chan时指定的。下图展示了一个可缓存6个元素的channel示意图: