后端相关笔记几个秒杀 Go 官方库的第三方开源库net/http -> fasthttpencoding/json -> jsonitergolang/protobuf -> gogo/protobufhtml/template -> valyala/quicktemplateConclusionGo web 开发前奏Web编程基础HTTP协议和RESTful结构
fasthttp号称比net/http快十倍,其优化的核心思路很简单:资源复用。
除了复用,还有其他的一些优化手段,例如尽量避免 string 与 []byte 的转换开销等。
这些优化技巧和最佳实践,在其 Github 主页上已经贴心给出:here
因为fasthttp的实现与标准库差距较大,所以它与net/http的 API 接口是不同的,这导致从net/http重构为fasthttp需要一些学习成本。
使用fasthttp的知名项目:Fiber、Gearbox、atreugo 等。
jsoniter(json-iterator)是一款快且灵活的 JSON 解析器,同时提供 Java 和 Go 两个版本。官方称 Golang 版本可以比标准库(encoding/json)快 6 倍之多。
最重要的是,它与标准库encoding/json完全兼容。
ProtoBuf 的全称是 Protocol Buffers,它是由 Google 开发和定义的与 XML、JSON 类似的一种协议格式,用于高效存储与读取结构化数据。它基于二进制,因此使用 ProtoBuf 能将数据压缩得更小。
gogo/protobuf是基于官方库golang/protobuf的增强版实现:
golang/protobuf更快地序列化与反序列化;golang/protobuf;有很多知名项目都在使用该库,例如 etcd、k8s、docker swarmkit、tidb、nakama 等。
quicktemplate启发自 Python 的 Mako 项目,是一个快速、强大且易于使用的 Go 模板渲染引擎,它的主要特性如下:
quicktemplate会先将编写的模板代码转换为 Go 语言代码,再进行编译渲染。因此,它比标准库html/template快 20 倍以上。quicktemplate的语法与 Go 语法非常类似,几乎没有学习成本。虽然quicktemplate的主要目的是生成 HTML,但它也可用于生成其他数据。
例如,使用quicktemplate可以轻松实现 JSON 和 XML 序列化,并且通过quicktemplate的序列化通常也会比通过标准库encoding/json与encoding/xml更快。
本文列出这几个库并不是让你去立刻替换官方库。例如net/http包,实际上它已经可以满足大多数使用场景。
在使用官方库时遇到了问题,我们很容易通过搜索引擎找到解决方案,或者直接向 Go 官方提 issue 。当切换为开源库时,如果遇到了问题,并不一定能及时得到处理。
官方库的 API 几乎可以保证能与 Go 版本的迭代一直兼容,而三方库可能存在潜在的版本兼容问题,这也是切换时需要考虑的问题。
本文列出来的几个开源库,它们的重点都是优化对应官方库的性能问题。我们可以从这些开源库中,学到很多实用的 Go 代码优化技巧。
当然,如果你的项目中因为这些官方库而导致了性能问题,不妨一试。
By GPT
学习Go Web开发需要掌握以下几个基础知识:
- Go语言基础知识:学习Go的语法、数据类型、控制流程等基础知识,可以通过官方文档、Go语言圣经等书籍进行学习。
- Web编程基础:了解HTTP协议、RESTful架构、Web框架等相关知识,可以通过《Web开发实战》等书籍进行学习。
- 数据库基础:学习SQL语言、数据库设计、事务处理等基础知识,可以通过《SQL必知必会》等书籍进行学习。
- 前端开发基础:学习HTML、CSS、JavaScript等基础知识,可以通过《JavaScript高级程序设计》等书籍进行学习。
x在掌握以上基础知识后,可以开始学习Go Web开发:学习Go Web框架:学习使用Go Web框架如gin、beego等进行Web开发,可以通过官方文档、视频教程等进行学习。学习数据库操作:学习使用Go进行数据库操作,可以通过ORM框架如gorm等进行学习。学习前端开发:学习如何使用前端框架如Vue、React等进行前端开发,可以通过相关书籍、视频教程等进行学习。学习Web安全:了解Web应用的安全性问题,学习如何进行防范,可以通过《Web安全之深度剖析》等书籍进行学习。
学习Web编程基础,你需要掌握以下几个方面:
xxxxxxxxxx学习HTTP协议和RESTful架构,你可以按照以下步骤进行:了解HTTP协议:HTTP协议是Web应用程序之间通信的协议,它定义了客户端和服务器之间的请求和响应格式、方法、状态码等。你可以通过《图解HTTP》等书籍进行学习。掌握HTTP方法和状态码:HTTP协议定义了多种请求方法和响应状态码,它们是进行Web应用程序开发的基础。你需要掌握常用的HTTP方法和状态码,例如GET、POST、PUT、DELETE、200、404等。学习RESTful架构:RESTful架构是一种基于HTTP协议的Web服务架构,它将每个资源都映射到一个唯一的URI,通过HTTP方法来对资源进行操作。你需要学习RESTful架构的设计原则、URI规范、HTTP方法等。可以通过《RESTful Web Services Cookbook》等书籍进行学习。实践开发RESTful API:在掌握HTTP协议和RESTful架构的基础上,你可以开始实践开发RESTful API。你需要选择一种或多种Web框架来搭建RESTful API,例如Django、Flask等。可以通过官方文档、视频教程等进行学习。了解API设计原则:设计良好的API是进行Web应用程序开发的关键。你需要了解API设计的原则,例如URI规范、请求和响应格式、版本管理等。可以通过《RESTful API 设计指南》等书籍进行学习。
HTTP协议是Web应用程序之间通信的协议,它定义了客户端和服务器之间的请求和响应格式、方法、状态码等。下面我会详细讲解HTTP协议的基本概念和原理。
HTTP协议是基于TCP/IP协议栈的应用层协议,它的目的是支持Web浏览器和Web服务器之间的通信。HTTP协议定义了客户端和服务器之间的通信格式和规则,它使用文本格式的请求和响应来传递数据。
HTTP协议的请求和响应格式如下:
HTTP请求格式:
x请求方法 请求URL HTTP协议版本请求头请求体
HTTP响应格式:
xHTTP协议版本 响应状态码 响应状态码描述响应头响应体
其中,请求方法是指客户端向服务器发送的请求方式,常用的有GET、POST、PUT、DELETE等;请求URL是指客户端请求的资源的统一资源标识符;HTTP协议版本指客户端使用的HTTP协议版本,常用的有HTTP/1.0和HTTP/1.1;请求头是指客户端发送的附加信息,例如Cookie、User-Agent等;请求体是指客户端向服务器发送的数据,例如表单数据、JSON数据等。
xTips:请求URL当客户端向服务器发送HTTP请求时,需要指定请求的资源路径和请求的方法。请求的资源路径就是URL(Uniform Resource Locator)。URL是Web资源的唯一标识符,它包含了用于访问资源的协议、主机名、端口号和资源路径等信息。URL的基本格式如下:scheme://host:port/path?query#fragment其中,各个部分的含义如下:scheme:表示访问资源的协议,通常是http或https。host:表示资源所在的主机名或IP地址。port:表示资源所在的端口号,默认为80(http协议)或443(https协议)。path:表示资源的路径,用于定位资源。query:表示查询字符串,用于向服务器传递参数。fragment:表示锚点,用于指定资源内部的位置。举个例子,假设我们要访问https://www.example.com:443/index.html页面,那么对应的URL就是:https://www.example.com:443/index.html其中,scheme为https,host为www.example.com,port为443,path为/index.html。除了普通的URL外,HTTP还支持相对URL和绝对URL。相对URL是指相对于当前资源的路径,而绝对URL是指完整的URL路径。在实际应用中,我们应该根据具体的应用场景和需求选择合适的URL路径来访问资源。
响应状态码是指服务器对客户端请求的响应状态,常用的有200、404、500等;响应状态码描述是指对响应状态码的解释说明;响应头是指服务器返回的附加信息,例如Content-Type、Content-Length等;响应体是指服务器返回的数据,例如HTML页面、JSON数据等。
2.HTTP原理
HTTP协议的原理是客户端向服务器发送请求,服务器对请求进行处理,然后返回响应。HTTP协议使用的是请求-响应模式,客户端发起请求,服务器返回响应。
具体流程如下:
HTTP协议使用TCP/IP协议进行数据传输,TCP协议保证了数据传输的可靠性和完整性,IP协议则保证了数据在网络中的传输。
3.HTTP方法和状态码
HTTP协议定义了多种请求方法和响应状态码,它们是进行Web应用程序开发的基础。
常用的HTTP方法有:
GET:获取资源,通常用于获取网页、图片等静态资源。
POST:提交数据,通常用于提交表单数据,例如登录表单、注册表单等。
常用的HTTP响应状态码有:
4.HTTP协议的特点
HTTP协议具有以下特点:
5.HTTP和HTTPS的区别
HTTP和HTTPS都是基于TCP/IP协议的应用层协议,它们之间的主要区别在于安全性和加密性。
HTTP协议在传输数据时,不对数据进行加密处理,因此容易被黑客截取和篡改,存在安全风险。而HTTPS协议在传输数据时,使用SSL/TLS协议对数据进行加密处理,保证了数据的安全性和完整性,可有效防止黑客攻击和数据泄露。
在使用HTTPS协议时,客户端和服务器之间需要进行SSL/TLS握手协议,建立安全通信信道。在握手过程中,服务器会将自己的数字证书发送给客户端,客户端会验证证书的合法性,并生成一个随机的密钥用于加密通信。
由于HTTPS协议需要进行加密和解密等额外的计算和传输工作,所以相比HTTP协议,HTTPS协议的传输速度较慢,同时也需要更高的服务器性能和更复杂的配置。
6.HTTP和WebSocket的区别
HTTP协议和WebSocket协议都是基于TCP协议的应用层协议,但是它们在传输数据的方式和实现机制上有所不同。
HTTP协议是一种请求-响应协议,客户端发送请求,服务器返回响应。HTTP协议使用短连接的方式,每次请求都需要重新建立TCP连接和发送HTTP头部信息,导致HTTP协议不适合实时通信和长连接场景。
而WebSocket协议在建立连接后,客户端和服务器之间可以双向传输数据,不需要重新建立TCP连接和发送HTTP头部信息。WebSocket协议支持长连接,可用于实时通信和在线游戏等场景。
另外,WebSocket协议在建立连接时,需要经过HTTP协议进行升级。客户端和服务器之间首先要建立一个HTTP连接,然后通过HTTP协议升级到WebSocket协议。在升级后,客户端和服务器之间的通信就变成了WebSocket协议的方式。
总之,了解HTTP协议和它的衍生协议对于Web应用程序开发和网络安全都非常重要。在实际应用中,我们应该根据具体的应用场景和需求,选择合适的协议进行数据传输和通信。