GO HTTP1.1 与 HTTP2.0 的使用和简单分析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GO HTTP1.1 与 HTTP2.0 的使用和简单分析相关的知识,希望对你有一定的参考价值。
参考技术A 测试结果我们设定服务端处理一次请求需要 10 ms,我们可以得到三个信息
所以我们可以得到结论,对于一个稳定的服务器,HTTP1.1 单位时间的处理效率和连接数成正比,需要更高的处理效率就必须不断的增加 TCP 连接。因为 HTTP1.1 的请求遵循 FIFO。
测试结果
GO HTTP2.0 我没有找到设置连接池数量的地方,但是在测试中执行
发现连接数量一直是 4 个,同时我们可以看到,仅仅 4 个 TCP 连接,就能在并发达到 200 的时候 1s 内执行 2w 次请求。效率远超 HTTP1.1,且不需要更多的 TCP 连接。
Go 包管理
Go中的包是什么?其实就是一个目录,用来把go文件组织起来便于归类、复用等,Go语言中包名和文件所在的目录名是一样的。
Go中包如何命名的?遵循简洁、小写、与go文件所在目录同名的原则。
如何导入包?import关键字来导入包,比如使用go自带的http包,需导入net/http即全路径(net为顶级包,http包在net里面)。
如何导入多个包?使用一对花括号包好的导入块,每个包单独占一行。
如何导入远程包?前提是必须是该包托管在一个分布式的版本控制系统上,比如Github、Bitbucket等,并且是public权限。
顶级包一般如何命名?由于需要全路径导入,为避免与他人重,故一般采用域名作为顶级包的方式。
没有域名怎么办?what???必须github.com,在github上必须有一个自己账号,没有必须赶紧申请一个。
Go中的main包?go中一个包名若声明为main相当于告诉go编译程序,这是一个可执行的程序,故编译程序就会尝试把它编译成
一个二进制的可执行文件。main包一定包含main()函数,作为程序入口。
注:go中,同时满足main包和包含main()函数,才会被编译成一个可执行文件,且其名字就是该main包的go文件所在目录的名字。
Go中重要的环境变量?GOROOT(安装Go的路径)、GOPATH(自己定义的开发者工作区间)。比如我的go安装在:/opt/go,开发
目录是:/home/admin/go。
编译时候如何找导入的包?先在GOROOT里搜索,其次GOPATH,即编译器使用这两个路径加上import导入的相对全路径来查找,
一旦找到,立即停止,若未找到,编译异常。
编译时候如何找远程包导入?现在GOPATH下搜索,未找到就使用go get工具从版本控制系统比如Github上获取,并且把获取到的源代码
存储在GOPATH目录下对应的URL的目录里,供编译使用。
导入的包名有重复的咋办?对导入的包重新命名,即命名导入(在导入时候,在包名左侧,起一个新的包名即可)。比如:myfmt "mylib/fmt"
导入一个包又不想使用它咋办?Go语言规定,导入的包必须使用,否则报编译错误。可用空白标识符_来重命名导入的包即可被忽略。
Go中包的init函数?每个包可有任意多个init函数,且都会在main函数之前执行。init函数通常用来初始化变量、设置包或者其他需要在
程序执行前的引导工作。比如:空白标识符_导入一个包,目的就是想执行该包里的init函数。
例子:Go语言为统一关于数据库的访问,使用database/sql抽象一层数据库的操作,可以满足我们操作MYSQL、Postgre等数据库,其
作用是不管使用这些数据库的哪一个驱动,编码操作都一样。原理是:定义了init函数,程序运行之前把实现好的驱动注册到sql包里。
以上是关于GO HTTP1.1 与 HTTP2.0 的使用和简单分析的主要内容,如果未能解决你的问题,请参考以下文章
Linux-http1.0-http1.1-http2.0区别