go语言实现之 go语言 cgo( 二 )


这就是整个聊天室的实现原理 。
Go语言HTTPServer开发的六种实现学完了 net/http 和 fasthttp 两个HTTP协议接口的客户端实现,接下来就要开始Server的开发,不学不知道一学吓一跳 , 居然这两个库还支持Server的开发 , 太方便了 。
相比于Java的HTTPServer开发基本上都是使用Spring或者Springboot框架 , 总是要配置各种配置类,各种 handle 对象 。Golang的Server开发显得非常简单,就是因为特别简单 , 或者说没有形成特别统一的规范或者框架 , 我发现了很多实现方式 , HTTP协议基于还是 net/http 和 fasthttp  , 但是 handle 语法就多种多样了 。
先复习一下: Golang语言HTTP客户端实践 、 Golang fasthttp实践。
在Golang语言方面,实现某个功能的库可能会比较多,有机会还是要多跟同行交流,指不定就发现了更好用的库 。下面我分享我学到的六种Server开发的实现Demo 。
基于 net/http 实现 , 这是一种比较基础的,对于接口和 handle 映射关系处理并不优雅,不推荐使用 。
第二种也是基于 net/http  , 这种编写语法可以很好地解决第一种的问题,handle和path有了类似配置的语法,可读性提高了很多 。
第三个基于 net/http 和 github.com/labstack/echo,后者主要提供了 Echo 对象用来处理各类配置包括接口和handle映射,功能很丰富,可读性最佳 。
第四种依然基于 net/http 实现,引入了 github.com/gin-gonic/gin 的路由,看起来接口和 handle 映射关系比较明晰了 。
第五种基于 fasthttp 开发 , 使用都是 fasthttp 提供的API , 可读性尚可,handle配置倒是更像Java了 。
第六种依然基于 fasthttp,用到了 github.com/buaazp/fasthttprouter ,有点奇怪两个居然不在一个GitHub仓库里 。使用语法跟第三种方式有点类似,比较有条理,有利于阅读 。
go语言循环队列的实现队列go语言实现之的概念在 顺序队列 中go语言实现之,而使用循环队列的目的主要是规避假溢出造成的空间浪费go语言实现之,在使用循环队列处理假溢出时go语言实现之,主要有三种解决方案
本文提供后两种解决方案 。
顺序队和循环队列是一种特殊的线性表 , 与顺序栈类似,都是使用一组地址连续的存储单元依次存放自队头到队尾的数据元素,同时附设队头(front)和队尾(rear)两个指针,但我们要明白一点 , 这个指针并不是指针变量,而是用来表示数组当中元素下标的位置 。
本文使用切片来完成的循环队列,由于一开始使用三个参数的make关键字创建切片,在输出的结果中不包含nil值(看起来很舒服),而且在验证的过程中发现使用append()函数时切片内置的cap会发生变化,在消除了种种障碍后得到了一个四不像的循环队列,即设置的指针是顺序队列的指针,但实际上进行的操作是顺序队列的操作 。最后是对make()函数和append()函数的一些使用体验和小结,队列的应用放在链队好了 。
官方描述(片段)
即切片是一个抽象层 , 底层是对数组的引用 。
当我们使用
构建出来的切片的每个位置的值都被赋为interface类型的初始值nil,但是nil值也是有大小的 。
而使用
来进行初始化时,虽然生成的切片中不包含nil值,但是无法通过设置的指针变量来完成入队和出队的操作,只能使用append()函数来进行操作
在go语言中 , 切片是一片连续的内存空间加上长度与容量的标识 , 比数组更为常用 。使用 append 关键字向切片中追加元素也是常见的切片操作

推荐阅读