Go语言上手-基础语言|青训营笔记

146 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第1篇笔记

1、go语言基本语法介绍

此处不展开,可以查阅代码

2、项目实战

1、猜谜游戏

程序首先生成随机整数,然后玩家进行猜测。玩家每输入一个数字,程序都会告诉玩家猜测的数是大于该数还是小于该数。

2、在线词典

实现一个客户端形态的词典程序,用户输入要查询的词典,然后我们调用翻译网站的api接口进行翻译并将结果展示给用户,其实这个更类似于一个爬虫。

我们首先以彩云小译为例,在chrome浏览器下,按f12打开开发者模式,然后发送请求,并抓包。

image.png

抓包后,访问 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并行请求,然后最后都收到响应后一起返回,可以让词典的结果更丰满。

2.png

3、 sock5

这个项目是自己实现一个简单的socks5协议

socks5分为4个阶段:协商握手、认证、请求、ralay

请求的时候要带上 协议版本号、请求类型 代理服务器向目标服务器发起请求,然后代理服务器再把响应返回给用户浏览器,代理服务器不关心信息的细节,不管是http还是tcp流量都能转发。

这个项目是自己实现一个简单的socks5协议

socks5分为4个阶段

协商握手、认证、请求、ralay

请求的时候要带上 协议版本号、请求类型 代理服务器向目标服务器发起请求,然后代理服务器再把响应返回给用户浏览器

代理服务器不关心信息的细节,不管是http还是tcp流量都能转发

image.png