这是我参与「第三届青训营 -后端场」笔记创作活动的的第一篇笔记
主要内容
-
什么是Go语言
-
基础语法
-
三个例子
1. Go语言的特点
Go语言是一个静态类型的编译型语言,对并发支持优秀,性能好,开发效率高。
2. 基础语法
可以去看更详细的文档
3. 例子
3.2 在线词典
从在线翻译网站(彩云小译)抓POST包。
-
开发者工具-NetWork-点击翻译后找到对应请求
-
复制请求:Cpoy as cURL
-
Convert curl to Go,转成Go可运行的代码,可能需要手动改正错误。
-
发起请求,接受并解析response body,JSON转Golong Struct
-
打印结果
部分代码解读:
创建请求:
// 设置相关参数,如teOut client := &http.Client{} // 创建数据流而不是字符串,因为body可能很大,需要节省内存 var data = strings.NewReader(`{"trans_type":"en2zh","source":"good"}`) req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/dict", data)如下形式设置请求头:
req.Header.Set("Connection", "keep-alive")发起请求和读取响应:
// 发起请求 resp, err := client.Do(req) // 错误判断 if err != nil { log.Fatal(err) } // 响应Body同样是流,为防止资源泄露,需要Close() defer resp.Body.Close() // 得到JSON bodyText, err := ioutil.ReadAll(resp.Body) if err != nil { log.Fatal(err) }序列化JSON:
结构体成员Tag,json开头键名对应的值用于控制encoding/json包的编码和解码的行为
type DictRequest struct { TransType string `json:"trans_type"` Source string `json:"source"` UserID string `json:"user_id"` }初始化和转JSON:
request := DictRequest{TransType: "en2zh", Source: "good"} buf, err := json.Marshal(request) if err != nil { log.Fatal(err) } var data = bytes.NewReader(buf)将JSON格式的respon写入结构体:
var dictResponse DictResponse err = json.Unmarshal(bodyText, &dictResponse)打印:
// 加上判断状态码 if resp.StatusCode != 200 { log.Fatal("bad StatusCode:", resp.StatusCode, "body", string(bodyText)) } // 打印 fmt.Println(word, "UK:", dictResponse.Dictionary.Prons.En, "US:", dictResponse.Dictionary.Prons.EnUs) for _, item := range dictResponse.Dictionary.Explanations { fmt.Println(item) }
3.3 socks5代理
先学习了socks5协议:
之后实现了认证和建立连接