Go基础 | 青训营笔记

173 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第1天

一、本堂课重点内容:

link.juejin.cn/?target=htt…

介绍了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

为了将以上变为代码,右键对应请求,选择copycopy 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解法