GO语言工程实践课后作业:实现思路、代码以及路径记录;
JSON: JavaScript Object Notation [javasript对象表示法]。JSON是存储和交换文本信息的语法,类似XML
1. 猜谜游戏 随机数生成,玩家猜测,系统并给出猜测与答案之间的大小比较,并最终玩家猜出随机数获胜。
第一步应用math/rand包,设计随机数种子(启动的时间戳来初始化随机数种子),生成随机数;
【rand.Seed(time.Now().UnixNano())】
第二步读取用户输入并将string转换成数字;
【input, err :=reader.ReadString(‘\n’)
Input =string.TrimSuffix(input,”\n”)
Guess, err := strconv.Atoi(input)】
第三步 实现判断逻辑,将猜测数值和答案相比较,相等则赢,大了或者小了都会相应得到相应回复
【if guess> number { }
Else if guess<number{ }
Else { }】
第四步 实现游戏循环 将判断逻辑置入for循环
【for{ }】
2. 在线词典 实现 在命令行查询一个单词,通过调用第三方API查询单词的翻译并打印出来(发送HTTP请求,解析JSON)
第一步 抓包 (打开相关网页,右键检查打开浏览器开发者工具,此时点一下翻译按钮,浏览器会发送一系列请求,我们能很轻松找到那个用来查询单词的请求,这是HTTP的post请求,请求的post较为复杂有十来个,请求头是一个JSON里面有两个字段,一个代表要从什么语言转化成什么语言,source就是要查询的单词,API的返回结果里面会有Wiki和dictionary两个字段,我们需要用的结果主要在dictionary.Explanations字段里面,其他有些字段里面还包括音标等信息)
第二步 代码生成(需要去Golang里面去发送这个请求,简单的方式来生成代码,右键浏览器里的copy as curl,copy之后在终端中黏贴一下curl命令,可以成功返回一大串json,打开一个网站黏贴curl请求,在右边语言选择GO语言就可以看到一串很长的代码,直接把他copy到编辑器里,有几个header比较复杂,生成代码有转义导致的编译错误,删掉这几行即可)
第三步生成request body(生成一段json,常用的方式是我们先构造出来一个结构体,这个结构体和我们需要生成的JSON的结构是一一对应的,我们现需要的结构体包含三个字段,初始化每个结构体成员,再调用JSON.marchaler来得到这个序列化后的字符串,字节数组)
【var data =strings,NewReader(‘{“trans_type”:”en2zh.”source”:”good”}”)
Request :=DictRequest{TransType:”en2zh”,source:”good”}
Buf,err :=json.Marshal(request)
If err !=nil { log.Fatal(err) }
Var data =bytes.NewReader(buf) 】
第三步 解析response body(写个结构体,把返回的JSON反序列化到结构体里面,技巧 打开网站【oktools.net/json2go】把JS… 转换嵌套是让我们生成的代码更加紧凑,先定一个response结构体对象,用JSON.unmarshal把body反序列化到这个结构体中,并试图打印出来,修改代码为打印response里面的特定字段)
第四步 完善代码(把代码主体改为一个query函数,查询的单词作为参数传递出来,写main函数,首先判断一下命令和参数的个数,是否是两个是两个则执行query函数)
3. SOCKS5代理介绍
明文传输,协议历史比较久远,诞生于互联网早期,它的用途比如说某些企业的内网为了确保安全性,有很严格的防火墙策略,但是带来的副作用就是访问某些资源会很麻烦,sock5相当于在防火墙开了个口子,让授权的用户可以通过单个端口去访问内部的所有资源,实际上很多翻墙软件,最终暴露的也是一个sock5协议的端口。爬取过程中很容易会遇到IP访问频率超过限制,这时候很多人就会去网上找一些代理IP池,这些代理IP池里面很多代理的协议就是sock5