这是我参与「第五届青训营 」笔记创作活动的第1天
一、本堂课重点内容:
介绍了go的最基本的标准库使用,以及给了3个实践案例
二、详细知识点介绍:
1. go基础语法包括20个基本语言结构
- hello
- var
- for
- if
- switch
- array
- slice
- map
- range
- func
- point
- struct
- strcut-method
- error
- string
- fmt
- json
- time
- strconv
- env
2. 在在线词典的实践项目中,教了如何调用网站API
网站右键检查,或者f12打开开发者选项
拿百度翻译为例,在翻译表格中填入待翻译字段,点击翻译,则会在控制台的网络中出现对应的post请求,记录了请求头以及所有负载,通过读负载的json可以看到, query即传过去的翻译字段
1. from:
en
1. to:
zh
1. query:
a single-quoted character literal safely escaped
1. transtype:
translang
1. simple_means_flag:
3
1. sign:
954998.684359
1. token:
3e08976ebb6f7b25532cfce5fb3881f6
1. domain:
common
为了将以上变为代码,右键对应请求,选择copy,copy as cURL(bash)
Convert curl to Go (curlconverter.com)
便将curl请求改为对应的语言代码
//翻译i love you 到中文, data变量即为请求消息体
package main
import (
"fmt"
"io/ioutil"
"log"
"net/http"
"strings"
)
func main() {
client := &http.Client{}
var data = strings.NewReader(`from=en&to=zh&query=I+love+you&transtype=translang&simple_means_flag=3&sign=949163.694426&token=3e08976ebb6f7b25532cfce5fb3881f6&domain=common`)
req, err := http.NewRequest("POST", "https://fanyi.baidu.com/v2transapi?from=en&to=zh", data)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Accept", "*/*")
req.Header.Set("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6")
req.Header.Set("Acs-Token", "1673597114416_1673766515263_wNOw40KHDNhlo=")
req.Header.Set("Connection", "keep-alive")
req.Header.Set("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
req.Header.Set("Cookie", "BIDUPSID=30BC3AAEF265DE6D94F78647AB0736FA; PSTM=1661747204; ")
req.Header.Set("Origin", "https://fanyi.baidu.com")
req.Header.Set("Referer", "https://fanyi.baidu.com/")
req.Header.Set("Sec-Fetch-Dest", "empty")
req.Header.Set("Sec-Fetch-Mode", "cors")
req.Header.Set("Sec-Fetch-Site", "same-origin")
req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.76")
req.Header.Set("X-Requested-With", "XMLHttpRequest")
req.Header.Set("sec-ch-ua", `"Not?A_Brand";v="8", "Chromium";v="108", "Microsoft Edge";v="108"`)
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)
}
3. socks5代理
这个实例主要是介绍了一系列io流标准库的使用方法,介绍了一下协议头的构造和拆包的go解法