国内 Wireshark 安装
wireshark 是一款网络协议分析器,使用这个工具能够让我们深层次的观察到网络数据传输过程中发生的一切,包括 ICMP、TCP、UDP、SSL 等协议的细节,但是因为官方下载资源地址为国外,在国内它的下载速度十分慢,虽然资源包大小不大,但是动不动得下载好几个小时。
不过好在国内有对应的下载镜像,比如清华大学的下载镜像源:
https://mirrors.tuna.tsinghua.edu.cn/wireshark/
wireshark 是一款网络协议分析器,使用这个工具能够让我们深层次的观察到网络数据传输过程中发生的一切,包括 ICMP、TCP、UDP、SSL 等协议的细节,但是因为官方下载资源地址为国外,在国内它的下载速度十分慢,虽然资源包大小不大,但是动不动得下载好几个小时。
不过好在国内有对应的下载镜像,比如清华大学的下载镜像源:
https://mirrors.tuna.tsinghua.edu.cn/wireshark/
| command | desc |
|---|---|
| w | 移动到下一个 word[^1] 的开头 |
| e | 移动到下一个 word 的结尾 |
| W | 移动到下一个 WORD 的开头 |
| E | 移动到下一个 WORD 的结尾 |
| b | 移动到上一个 word 的开头 |
| B | 移动到上一个 WORD 的开头 |
| ge | 移动到上一个 word 的结尾 |
| gE | 的移动到上一个 WORD 的结尾 |
| f{char}[^2] | 移动到当前行下一个 char 出现的位置 |
| F{char} | 移动到当前行上一个 char 出现的位置 |
| t{char} | 移动到当前行下一个 char 出现的前一个位置 |
| T{char} | 移动到当前行上一个 char 出现的前一个位置 |
| 0 | 移动到当前行的第一个字符位置 |
| ^ | 移动到当前行的第一个非空字符的位置 |
| $ | 移动到当前行的最后一个位置 |
| g_ | 移动到当前行的最后一个非空字符的位置 |
| { | 移动到下一个段落 |
| } | 移动到上一个段落 |
| /{pattern} | 搜索下一个符合的单词[^3] |
| ?{pattern} | 搜索上一个符合的单词 |
| gg | 移动到文件的最上方 |
| {line}gg | 移动到指定的行数 |
| G | 移动到文件的末尾 |
| % | 移动到匹配 ({[]}) 的位置[^4] |
| dd | 删除整行 |
| D | 删除到结尾的字符,相当于 d$ |
使用 dlv 可以方便的对 go 生成的二进制文件进行 debug,以下面的代码 main.go 为例讲解 dlv 的使用
1 | package main |
宏可以帮助我们减少重复代码的编写,在 Rust 中有两种宏定义,
其中,声明宏只是简单的 token 替换,我们无法知道代码结构中的其他信息,过程宏可以获取更加详细的数据,比如我们可以获取结构体中字段的名称,类型等等。
在调用函数的时候,可能参数比较多,但是我们只需要修改其中的几个特定参数就可以满足我们的需求,而其他的参数我们希望保持不变,但是 Rust 和 Go 一样,函数调用中不支持默认参数,所以我们必须另寻他法,那么第一感觉我们是不是可以采用 Go 中的 选项模式呢?
虽然 Rust 函数中并不支持变参数传递,但是我们可以通过 宏 来间接达到相同的功能,代码如下