go语言http库的简单介绍

go语言聊天室实现(六)创建HTTP连接,并升级为长连接我们在mian函数中go语言http库,首先初始化配置文件 , 然后新建http连接 。
这个连接创建之后,监听服务器go语言http库的9999端口 。如果urlgo语言http库的路径后缀为 "/ws",就转发到ws/ws.go中的IndexHandler方法中 。
这个方法中首先我们创建一个websocket的Upgrader实例,然后我们使用Upgrader的upgrade方法来升级一下我们的连接为长连接 。
升级完成之后会返回一个*websocket.Conn的连接,我们之后所有的关于连接的操作,都是基于该conn的 。
在该连接完成之后 , 我们将连接存放到一个名为Client的map中 , 以便之后管理更为方便 。
之后,我们启动一个goroutine来读取连接中发送的信息内容,再根据内容进行相应的操作 。
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仓库里 。使用语法跟第三种方式有点类似,比较有条理,有利于阅读 。
golang的http请求怎么判断保存的json文件是否为空json格式可以算go语言http库我们日常最常用的序列化格式之一了go语言http库,Go语言作为一个由Google开发,号称互联网的C语言的语言,自然也对JSON格式支持很好 。官方提供的Json解析包已经非常强大,我们接下来讲解Json的序列化与反序列化操作 。另外还有一些第三方的Json解析库,也能够高效的操作Json对象 , 比如simplejson,ffjson等 。下面是两个比较重要的函数go语言http库:
? Json Marshal:将数据编码成json字符串
Marshal 用于将struct对象序列化到json对象中 。v是interface{}类型,任何类型都实现了空接口 。
1:tag中的第一个参数是用来指定别名,比如Name 指定别名为 username `json:"username"`
2:如果不想指定别名但是想指定其他参数用逗号来分隔,omitempty 指定到一个field时,如果在赋值时对该属性未赋值或者对该属性赋值为 zero value,那么将Person序列化成json时会忽略该字段
3:- 指定到一个field时,无论有没有值,将Person序列化成json时都会忽略该字段

推荐阅读