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

猜数游戏

1. 如何生成随机数?

        maxNum := 100
	secretNumber := rand.Intn(maxNum)
	fmt.Println("The secret number is ", secretNumber)
复制代码

但是我们可以发现,这样每次生成的随机数都是一样的

image.png

如果想要每次生成的数字都不相同,需要我们设置一个随机数种子,一般做法是使用一个时间戳来初始化随机数种子

        maxNum := 100
	rand.Seed(time.Now().UnixNano())
	secretNumber := rand.Intn(maxNum)
	fmt.Println("The secret number is ", secretNumber)
复制代码

image.png

2. 读取用户输入

    fmt.Println("Please input your guess")
    reader := bufio.NewReader(os.Stdin)
    input, err := reader.ReadString('\n')
    if err != nil {
            fmt.Println("An error occured while reading input. Please try again", err)
            return
    }
    input = strings.Trim(input, "\r\n")

    guess, err := strconv.Atoi(input)
    if err != nil {
            fmt.Println("Invalid input. Please enter an integer value")
            return
    }
    fmt.Println("You guess is", guess)

复制代码

3、加入循环,判断数字是否正确

	maxNum := 100
	rand.Seed(time.Now().UnixNano())
	secretNumber := rand.Intn(maxNum)
	// fmt.Println("The secret number is ", secretNumber)

	fmt.Println("Please input your guess")
	reader := bufio.NewReader(os.Stdin)
	for {
		input, err := reader.ReadString('\n')
		if err != nil {
			fmt.Println("An error occured while reading input. Please try again", err)
			continue
		}
		input = strings.Trim(input, "\r\n")

		guess, err := strconv.Atoi(input)
		if err != nil {
			fmt.Println("Invalid input. Please enter an integer value")
			continue
		}
		fmt.Println("You guess is", guess)
		if guess > secretNumber {
			fmt.Println("Your guess is bigger than the secret number. Please try again")
		} else if guess < secretNumber {
			fmt.Println("Your guess is smaller than the secret number. Please try again")
		} else {
			fmt.Println("Correct, you Legend!")
			break
		}
	}

复制代码

image.png

在线词典

1、生成代码

image.png 按键盘上的F12键或者鼠标右键点击检查,打开浏览器开发者工具,并在其中选择网络选项。

image.png 然后Ctrl+R

image.png 找到叫做dict的请求

image.png 可以发现有两个dict,这是我们选择请求方法为POST的请求

image.png 右键dict赋值cURL(bash)

image.png 然后使用网站Convert curl to Go (curlconverter.com),将cURL转换成Go语言 进入网站将刚刚复制好的cURL粘贴进去,并选择Go语言

image.png 然后将下面的Go语言代码复制到我们的编译器中

package main

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

func main() {
	client := &http.Client{}
	var data = strings.NewReader(`{"trans_type":"en2zh","source":"hello"}`)
	req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/dict", 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("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.55")
	req.Header.Set("x-authorization", "token:qgemv4jr1y38jyq6vhvi")
	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)
}
复制代码

2、生成request body

可以看到,由于在彩云小译中翻译的单词是hello,所以后续的cURL以及拿到的Go语言代码中的"source"的键值依旧是"hello"

var data = strings.NewReader(`{"trans_type":"en2zh","source":"hello"}`)
复制代码

image.png 所以为了能够自定义查询的单词,我们可以定义一个结构体,这个结构体和我们要JSON的结构是一一对应的。

type DictRequest struct {
    TransType string `json:"trans_type"`
    Source string `json:"source"`
}
复制代码

这样在主函数中我们可以自定义翻译请求,通过字节传递

request := DictRequest{TransType: "en2zh", Source: "good"}
buf, err := json.Marshal(request)
if err != nil {
   log.Fatal(err)
}
var data = bytes.NewReader(buf)
复制代码

将传回来的JSON转换成Go中的结构体。 将刚刚彩云小译中的“预览”中的值复制下来

image.png 然后使用JSON转Golang Struct - 在线工具 - OKTools进行转换,并选择其中的嵌套转换

image.png 将右边的结构体复制到Go中即可

4、命令行输入单词并查询

image.png