Go语言的实战案例|青训营笔记

164 阅读2分钟

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

猜数字游戏

  • 随机数生成

当随机数种子相同时,生成的随机数总是依次相同的。因此为了保证随机数真的随机,我们可以根据当前的时间戳来做种子生成种子

rand.Seed(time.Now().UnixNano())
  • 输入输出流
reader:=bufio.NewReader(os.Stdin)
  • 字符串格式转换

采用bufio.NewReader(os.Stdin)来读取输入流,则默认为字符串类型,因此我们需要strconv函数来转换字符串

strconv.Atoi("9")//将9(string)转变为9(int)
strconv.Itoa(9)//将9(int)转变为9(string)
package main

import (
   "bufio"
   "fmt"
   "math/rand"
   "os"
   "strconv"
   "strings"
   "time"
)

func main() {
   maxNum := 100
   rand.Seed(time.Now().UnixNano())
   secretNum := rand.Intn(maxNum)
   fmt.Println(secretNum)
   reader := bufio.NewReader(os.Stdin)
   for {
      input, err := reader.ReadString('\r')
      if err != nil {
         fmt.Println("1:Invalid Input.Please enter an integer value")
         continue
      }
      input = strings.TrimSuffix(input, "\r")
      guess, err := strconv.Atoi(input)
      if err != nil {
         fmt.Println("2:Invalid Input.Please enter an integer value", err)
         continue
      }
      fmt.Println("Your guess is", guess)
      if secretNum < guess {
         fmt.Println("Your guess is bigger.Please try again")
      } else if secretNum > guess {
         fmt.Println("Your guess is smaller.Please try again")
      } else {
         fmt.Println("Correct")
         break
      }
   }
}

在线词典

  • 打开在线翻译网页搜索单词,然后点击检查
  • 点击检查中的请求并以cURL的格式复制到[curlconverter.com/go/], 转化为go语言进行运行,可生成这个请求的json文件内容
package main

import (
   "fmt"
   "io"
   "log"
   "net/http"
   "strings"
)

func main() {
   client := &http.Client{}
   var data = strings.NewReader(`{"source":["hello",""],"trans_type":"auto2zh","request_id":"web_fanyi","media":"text","os_type":"web","dict":true,"cached":true,"replaced":true,"detect":true,"browser_id":"5b547495c678c70107aed97a98ad7647"}`)
   //创建请求
   req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/translator", data)
   if err != nil {
      log.Fatal(err)
   }
   //设置请求头
   req.Header.Set("authority", "api.interpreter.caiyunai.com")
   req.Header.Set("accept", "application/json, text/plain, */*")
   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("app-name", "xy")
   req.Header.Set("content-type", "application/json;charset=UTF-8")
   req.Header.Set("device-id", "")
   req.Header.Set("origin", "https://fanyi.caiyunapp.com")
   req.Header.Set("os-type", "web")
   req.Header.Set("os-version", "")
   req.Header.Set("referer", "https://fanyi.caiyunapp.com/")
   req.Header.Set("sec-ch-ua", `"Not_A Brand";v="99", "Microsoft Edge";v="109", "Chromium";v="109"`)
   req.Header.Set("sec-ch-ua-mobile", "?0")
   req.Header.Set("sec-ch-ua-platform", `"Windows"`)
   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("t-authorization", "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJicm93c2VyX2lkIjoiNWI1NDc0OTVjNjc4YzcwMTA3YWVkOTdhOThhZDc2NDciLCJpcF9hZGRyZXNzIjoiMjIzLjc0Ljc3LjE2NCIsInRva2VuIjoicWdlbXY0anIxeTM4anlxNnZodmkiLCJ2ZXJzaW9uIjoxLCJleHAiOjE2NzUzNDU5MTh9.H8Q-W_PYQGojVBbch9JmgOfVd6q3NXW2JZf6gs5tf3U")
   req.Header.Set("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.70")
   req.Header.Set("x-authorization", "token:qgemv4jr1y38jyq6vhvi")
   //发起请求
   resp, err := client.Do(req)
   if err != nil {
      log.Fatal(err)
   }
   defer resp.Body.Close() //返回的response的Body是一个流,需要手动关闭,避免泄露
   //读取响应
   bodyText, err := io.ReadAll(resp.Body)
   if err != nil {
      log.Fatal(err)
   }
   fmt.Printf("%s\n", bodyText)
}