这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
猜数游戏
1. 如何生成随机数?
maxNum := 100
secretNumber := rand.Intn(maxNum)
fmt.Println("The secret number is ", secretNumber)
复制代码
但是我们可以发现,这样每次生成的随机数都是一样的
如果想要每次生成的数字都不相同,需要我们设置一个随机数种子,一般做法是使用一个时间戳来初始化随机数种子
maxNum := 100
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)
fmt.Println("The secret number is ", secretNumber)
复制代码
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
}
}
复制代码
在线词典
1、生成代码
按键盘上的F12键或者鼠标右键点击检查,打开浏览器开发者工具,并在其中选择网络选项。
然后Ctrl+R
找到叫做dict的请求
可以发现有两个dict,这是我们选择请求方法为POST的请求
右键dict赋值cURL(bash)
然后使用网站Convert curl to Go (curlconverter.com),将cURL转换成Go语言
进入网站将刚刚复制好的cURL粘贴进去,并选择Go语言
然后将下面的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"}`)
复制代码
所以为了能够自定义查询的单词,我们可以定义一个结构体,这个结构体和我们要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中的结构体。 将刚刚彩云小译中的“预览”中的值复制下来
然后使用JSON转Golang Struct - 在线工具 - OKTools进行转换,并选择其中的嵌套转换
将右边的结构体复制到Go中即可