这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记
1、go语言基本语法介绍
此处不展开,可以查阅代码
2、项目实战
1、猜谜游戏
程序首先生成随机整数,然后玩家进行猜测。玩家每输入一个数字,程序都会告诉玩家猜测的数是大于该数还是小于该数。
2、在线词典
实现一个客户端形态的词典程序,用户输入要查询的词典,然后我们调用翻译网站的api接口进行翻译并将结果展示给用户,其实这个更类似于一个爬虫。
我们首先以彩云小译为例,在chrome浏览器下,按f12打开开发者模式,然后发送请求,并抓包。
抓包后,访问 curlconverter.com/#go 将curl命令转为go代码 然后在go代码里修改待翻译的单词即可
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`{"trans_type":"en2zh","source":"hello"}`)
req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/dict", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Accept", "application/json, text/plain, */*")
req.Header.Set("Accept-Language", "zh-CN,zh;q=0.9")
req.Header.Set("Connection", "keep-alive")
req.Header.Set("Content-Type", "application/json;charset=UTF-8")
req.Header.Set("Origin", "https://fanyi.caiyunapp.com")
req.Header.Set("Referer", "https://fanyi.caiyunapp.com/")
req.Header.Set("Sec-Fetch-Dest", "empty")
req.Header.Set("Sec-Fetch-Mode", "cors")
req.Header.Set("Sec-Fetch-Site", "cross-site")
req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36")
req.Header.Set("X-Authorization", "token:qgemv4jr1y38jyq6vhvi")
req.Header.Set("app-name", "xy")
req.Header.Set("os-type", "web")
req.Header.Set("sec-ch-ua", `" Not A;Brand";v="99", "Chromium";v="102", "Google Chrome";v="102"`)
req.Header.Set("sec-ch-ua-mobile", "?0")
req.Header.Set("sec-ch-ua-platform", `"Windows"`)
resp, err := client.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
bodyText, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", bodyText)
}
homework扩展,扩展其他翻译接口,我选用了爱词霸,这两个api并行请求,然后最后都收到响应后一起返回,可以让词典的结果更丰满。
3、 sock5
这个项目是自己实现一个简单的socks5协议
socks5分为4个阶段:协商握手、认证、请求、ralay
请求的时候要带上 协议版本号、请求类型 代理服务器向目标服务器发起请求,然后代理服务器再把响应返回给用户浏览器,代理服务器不关心信息的细节,不管是http还是tcp流量都能转发。
这个项目是自己实现一个简单的socks5协议
socks5分为4个阶段
协商握手、认证、请求、ralay
请求的时候要带上 协议版本号、请求类型 代理服务器向目标服务器发起请求,然后代理服务器再把响应返回给用户浏览器
代理服务器不关心信息的细节,不管是http还是tcp流量都能转发