HTTP 2.0

HTTP/2 (原本的名字是 HTTP/2.0) 是万维网使用的 HTTP 网络协议的第二个主要版本。HTTP/2 提供了更快的速度和更好的用户体验。 特性 使用二进制格式传输数据,而不是文本。使得在解析和优化扩展上更为方便。 多路复用,所有的请求都是通过一个 TCP 连接并发完成。 对消息头采用 HPACK 进行压缩传输,能够节省消息头占用的网络的……

阅读全文

Websocket 总结

是什么 WebSocket 是通过单个 TCP 连接提供全双工(双向通信)通信信道的计算机通信协议。 在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。——长链接,直到关闭 在 WebSocket 出现之前,为了实现即时通信,采用的技术都是“轮询”,即在特……

阅读全文

Restful 总结

是什么 REST(REpresentational State Transfer) 这个概念,首次出现是在 2000 年 Roy Thomas Fielding(他是 HTTP 规范的主要编写者之一)的博士论文中,它指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful 的。 要理解什么是 REST,我们需要理解下面几个概念: 资源(Resources) REST 是"表现层状……

阅读全文

Hugo github.io 无样式问题

hugo 建站后,生成静态页面并上传 github 仓库,无法正常显示主题样式 hugo --theme=ananke --baseUrl="http://TomatoAres.github.io/" 将上述命令中的 http 改为 https 即可解决 hugo --theme=ananke --baseUrl="https://TomatoAres.github.io/" 参考:使用 Hugo 搭建个人博客……

阅读全文

go test 工具的简单介绍和使用

简单介绍 go test 子命令是 Go 语言包的测试驱动程序,在一个包目录中,以*_test.go 命名方式的文件,是 go test 编译的目标(不是 go build) 在*_test.go 文件中,三种函数需要特殊对待,即功能测试函数、基准测试函数和示例函数: 功能测试函数:以 Test 前缀命名的函数,用来检测一些程序逻辑的正……

阅读全文

golang struct 能否比较

分情况讨论 同一个 struct 实例化出来的不同对象 关键看 里边有没有不可比较的字段类型 不同struct 实例化出来的对象 是否可以强制转换——所有字段类型都可以转 是否包含:不可比较类型 可排序、可比较和不可比较 安装官方文档,可比较的类型 必须是 Assignability 可赋值性的 可排序的数据类型有三种,Integer,Flo……

阅读全文

slice 相关一道题

package main import ( "encoding/json" "fmt" ) type AutoGenerated struct { Age int `json:"age"` Name string `json:"name"` Child []int `json:"child"` } func main() { jsonStr1 := `{"age": 14,"name": "potter", "child":[1,2,3]}` a := AutoGenerated{} json.Unmarshal([]byte(jsonStr1), &a) aa := a.Child fmt.Println(aa) // output:[1,2,3] jsonStr2 := `{"age": 12,"name": "potter", "child":[3,4,5,7,8,9]}` json.Unmarshal([]byte(jsonStr2), &a) fmt.Println(aa) // output: [3,4,5] // fmt.Println(a.Child) // output: [3,4,5,7,8,9] } 解释 type AutoGenerated struct { Child []int } Then you do a := AutoGenerated{} // (1) jsonStr1 := `{"age": 14,"name": "potter", "child":[1,2,3]}` json.Unmarshal([]byte(jsonStr1), &a) // (2) aa := a.Child // (3) fmt.Println(aa) jsonStr2 := `{"age": 12,"name": "potter", "child":[3,4,5,7,8,9]}` json.Unmarshal([]byte(jsonStr2), &a) // (4) fmt.Println(aa) So, what happens: You create a variable, a, of type AutoGenerated which is initialized to the zero value for its type. Because of that, its Child field, which is a slice, is initialized to the zero value……

阅读全文

TCP 总结

通信过程 ![通信过程](/image/network/tcp 通信过程。png) 服务端: socket:建立 socket bind:绑定服务端 ip listen:开始监听 accept:等待连接(阻塞) read/write:通信 close:关闭连接 三次握手——建立通信过程 参考:TCP 的三次握手与四次挥……

阅读全文