在看三个实践小项目时,有些含糊的地方,下来查找了些资料,有助于理解代码。
项目一:猜谜游戏
1、bufio 用来帮助处理 I/O 缓存。多次进行小量的写操作会影响程序性能。每一次写操作最终都会体现为系统层调用,频繁进行该操作将有可能对 CPU 造成伤害。而且很多硬件设备更适合处理块对齐的数据,例如硬盘。为了减少进行多次写操作所需的开支,golang 提供了 bufio.Writer。数据将不再直接写入目的地(实现了 io.Writer 接口),而是先写入缓存,当缓存写满后再统一写入目的地。
2、伪随机数rand.Seed,所以要用时间戳来随机。
3、strings.Trim(_, "\r\n") ,去除输入后自带的结尾符号
4、strconv.Atoi(_):Atoi() 函数用于将字符串类型的整数转换为 int 类型。同理有Itoa()。
5、fmt: Go语言的开发团队制定了统一的官方代码风格,并且推出了 gofmt 工具(gofmt 或 go fmt)来帮助开发者格式化他们的代码到统一的风格。gofmt 是一个 cli 程序,会优先读取标准输入,如果传入了文件路径的话,会格式化这个文件,如果传入一个目录,会格式化目录中所有 .go 文件,如果不传参数,会格式化当前目录下的所有 .go 文件。
6、package main:跟其他语言一样,一个项目文件夹里只能有一个main go,否则会报错。
项目二:在线词典
1、抓包:检查--开发人员资源--网络里,提交一个翻译后,出现dict(request:post)
2、复制代码 copy as cURL(bash)
3、curlconverter.com/ 将复制的cURL转化成GO格式,贴入代码
4、var data 同样把body内容转化成流,保护内存(以防body内容很大)
5、请求与响应:req,err=(....data)创建请求,resp, err := client.Do(req)发起请求,defer resp.Body.Close()拿到响应内容后,为了避免泄露,习惯性主动关闭
6、JSON反序列化:构造struct。第5步代码跑出会输出一段字典响应的json字符串,所以我们需要反序列化成GO语言。oktools.net/json2go 把输出的json转成go(转换-嵌套)
7、Marshal(),Unmarshal()
用结构体序列化GO-JSON请求
-
request := DictRequest{TransType: "en2zh", Source: "good"}
-
buf, err := json.Marshal(request)
用结构体反序列化Json-GO响应 -
var dictResponse DictResponse
-
err = json.Unmarshal(bodyText, &dictResponse)
8、改造代码:
-
if resp.StatusCode != 200 防止错误返空
-
改造Println格式,从一大串响应中,输出想要的格式和结果
-
交互:之前是固定的单词,改造query中的word, 从main os输入