后端相关笔记

后端相关笔记几个秒杀 Go 官方库的第三方开源库net/http -> fasthttpencoding/json -> jsonitergolang/protobuf -> gogo/protobufhtml/template -> valyala/quicktemplateConclusionGo web 开发前奏Web编程基础HTTP协议和RESTful结构

 

几个秒杀 Go 官方库的第三方开源库

net/http -> fasthttp

地址

fasthttp号称比net/http快十倍,其优化的核心思路很简单:资源复用。

除了复用,还有其他的一些优化手段,例如尽量避免 string 与 []byte 的转换开销等。

这些优化技巧和最佳实践,在其 Github 主页上已经贴心给出:here

因为fasthttp的实现与标准库差距较大,所以它与net/http的 API 接口是不同的,这导致从net/http重构为fasthttp需要一些学习成本。

使用fasthttp的知名项目:Fiber、Gearbox、atreugo 等。

encoding/json -> jsoniter

jsoniter(json-iterator)是一款快且灵活的 JSON 解析器,同时提供 Java 和 Go 两个版本。官方称 Golang 版本可以比标准库(encoding/json)快 6 倍之多。

benchmark

最重要的是,它与标准库encoding/json完全兼容。

golang/protobuf -> gogo/protobuf

here

ProtoBuf 的全称是 Protocol Buffers,它是由 Google 开发和定义的与 XML、JSON 类似的一种协议格式,用于高效存储与读取结构化数据。它基于二进制,因此使用 ProtoBuf 能将数据压缩得更小。

gogo/protobuf是基于官方库golang/protobuf的增强版实现:

有很多知名项目都在使用该库,例如 etcd、k8s、docker swarmkit、tidb、nakama 等。

html/template -> valyala/quicktemplate

here

quicktemplate启发自 Python 的 Mako 项目,是一个快速、强大且易于使用的 Go 模板渲染引擎,它的主要特性如下:

虽然quicktemplate的主要目的是生成 HTML,但它也可用于生成其他数据。

例如,使用quicktemplate可以轻松实现 JSON 和 XML 序列化,并且通过quicktemplate的序列化通常也会比通过标准库encoding/jsonencoding/xml更快。

Conclusion

本文列出这几个库并不是让你去立刻替换官方库。例如net/http包,实际上它已经可以满足大多数使用场景。

在使用官方库时遇到了问题,我们很容易通过搜索引擎找到解决方案,或者直接向 Go 官方提 issue 。当切换为开源库时,如果遇到了问题,并不一定能及时得到处理。

官方库的 API 几乎可以保证能与 Go 版本的迭代一直兼容,而三方库可能存在潜在的版本兼容问题,这也是切换时需要考虑的问题。

本文列出来的几个开源库,它们的重点都是优化对应官方库的性能问题。我们可以从这些开源库中,学到很多实用的 Go 代码优化技巧。

当然,如果你的项目中因为这些官方库而导致了性能问题,不妨一试。

Go web 开发前奏

By GPT

学习Go Web开发需要掌握以下几个基础知识:

  1. Go语言基础知识:学习Go的语法、数据类型、控制流程等基础知识,可以通过官方文档、Go语言圣经等书籍进行学习。
  2. Web编程基础:了解HTTP协议、RESTful架构、Web框架等相关知识,可以通过《Web开发实战》等书籍进行学习。
  3. 数据库基础:学习SQL语言、数据库设计、事务处理等基础知识,可以通过《SQL必知必会》等书籍进行学习。
  4. 前端开发基础:学习HTML、CSS、JavaScript等基础知识,可以通过《JavaScript高级程序设计》等书籍进行学习。

Web编程基础

学习Web编程基础,你需要掌握以下几个方面:

  1. HTML和CSS:HTML是用来描述网页结构和内容的标记语言,CSS用来描述网页的样式和布局。你需要学习HTML的基本标签,了解如何使用CSS来美化网页。可以通过《HTML与CSS设计与构建网站》等书籍进行学习。(done)
  2. JavaScript:JavaScript是一种常用的脚本语言,用于在网页中添加动态效果、交互行为等。你需要学习JavaScript的基础语法、DOM操作和事件处理等。可以通过《JavaScript高级程序设计》等书籍进行学习。稍后
  3. HTTP协议和RESTful架构:HTTP协议是Web应用程序之间通信的协议,RESTful架构是一种基于HTTP协议的Web服务架构。你需要了解HTTP协议的请求和响应过程,以及RESTful架构的设计原则。可以通过《图解HTTP》等书籍进行学习。
  4. Web框架:Web框架是用于简化Web应用程序开发的工具,它提供了许多常用的功能和组件,例如路由、中间件、模板引擎等。你需要学习一种或多种Web框架的使用,例如Django、Flask等。可以通过官方文档、视频教程等进行学习。
  5. 数据库:Web应用程序通常需要使用数据库来存储和管理数据。你需要了解如何使用SQL语言进行数据库操作,以及如何使用ORM框架来简化数据库操作。可以通过《SQL必知必会》等书籍进行学习。

HTTP协议和RESTful结构

HTTP协议是Web应用程序之间通信的协议,它定义了客户端和服务器之间的请求和响应格式、方法、状态码等。下面我会详细讲解HTTP协议的基本概念和原理。

  1. HTTP基本概念

HTTP协议是基于TCP/IP协议栈的应用层协议,它的目的是支持Web浏览器和Web服务器之间的通信。HTTP协议定义了客户端和服务器之间的通信格式和规则,它使用文本格式的请求和响应来传递数据。

HTTP协议的请求和响应格式如下:

HTTP请求格式:

HTTP响应格式:

其中,请求方法是指客户端向服务器发送的请求方式,常用的有GET、POST、PUT、DELETE等;请求URL是指客户端请求的资源的统一资源标识符;HTTP协议版本指客户端使用的HTTP协议版本,常用的有HTTP/1.0和HTTP/1.1;请求头是指客户端发送的附加信息,例如Cookie、User-Agent等;请求体是指客户端向服务器发送的数据,例如表单数据、JSON数据等。

 

响应状态码是指服务器对客户端请求的响应状态,常用的有200、404、500等;响应状态码描述是指对响应状态码的解释说明;响应头是指服务器返回的附加信息,例如Content-Type、Content-Length等;响应体是指服务器返回的数据,例如HTML页面、JSON数据等。

2.HTTP原理

HTTP协议的原理是客户端向服务器发送请求,服务器对请求进行处理,然后返回响应。HTTP协议使用的是请求-响应模式,客户端发起请求,服务器返回响应。

具体流程如下:

  1. 客户端向服务器发送HTTP请求。
  2. 服务器接收到HTTP请求后,对请求进行处理,例如查找请求的资源、验证用户身份等。
  3. 服务器向客户端发送HTTP响应,响应中包含状态码、响应头和响应体等信息。
  4. 客户端接收到HTTP响应后,根据响应中的信息进行处理,例如解析HTML页面、渲染页面等。

HTTP协议使用TCP/IP协议进行数据传输,TCP协议保证了数据传输的可靠性和完整性,IP协议则保证了数据在网络中的传输。

3.HTTP方法和状态码

HTTP协议定义了多种请求方法和响应状态码,它们是进行Web应用程序开发的基础。

常用的HTTP方法有: