Go语言快速上手 | 青训营笔记

112 阅读1分钟

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

主要内容

  • 什么是Go语言

  • 基础语法

  • 三个例子

1. Go语言的特点

Go语言是一个静态类型的编译型语言,对并发支持优秀,性能好,开发效率高。

2. 基础语法

可以去看更详细的文档

3. 例子

3.2 在线词典

从在线翻译网站(彩云小译)抓POST包。

  1. 开发者工具-NetWork-点击翻译后找到对应请求

  2. 复制请求:Cpoy as cURL

  3. Convert curl to Go,转成Go可运行的代码,可能需要手动改正错误。

  4. 发起请求,接受并解析response body,JSON转Golong Struct

  5. 打印结果

    部分代码解读:

    创建请求:

    // 设置相关参数,如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协议:

图片 之后实现了认证和建立连接