一、猜谜游戏
通过rand生成随机数;再用生成随机数种子的方式使得每次生成的数都不一样(这一步我也不是很懂);后读取用户输入的数(可以有多种方式);再实现逻辑判断,提示用户猜的数是太大还是太小;最后是实现循环,使得猜数猜错时不断进行到猜对为止
fmt.Println("请猜一个1到100之间的整数:")
var guess int
for {
_, err := fmt.Scanf("%d\n", &guess)
if err != nil {
fmt.Println("无效的输入,请重新输入整数:")
continue
}
能会存在可能每次会生成固定的数字,为了避免此情况。我们根据课程所提示那样,用时间戳来初始化随机数种子(time.now.unix)
在修改代码的时候要注意 Go 语言的间接性,所以在修改之后需要删除之前import引入的部分库,存在任何导入未使用的包或者变量都会编译报错
二、在线词典
通过彩云翻译的例子,制作了一个使用百度翻译Api的在线词典,如下:
1.抓包 2.代码生成 3.解析response 4.通过cmd命令窗口运行go文件
type request struct {
query string
from string
to string
appid string
salt string
sign string
}
type response struct {
From string `json:"from"`
To string `json:"to"`
TranslateResult []struct {
Src string `json:"src"`
Dst string `json:"dst"`
} `json:"trans_result"`
}
func query(query string) (response, error) {
request := request{
query: query,
from: "auto",
to: "zh",
appid: appid,
salt: salt,
sign: getSign(query),
}
data := url.Values{}
data.Set("q", request.query)
data.Set("from", request.from)
data.Set("to", request.to)
data.Set("appid", request.appid)
data.Set("salt", request.salt)
data.Set("sign", request.sign)
u, err := url.ParseRequestURI(host)
if err != nil {
log.Fatal(err)
return DictResponse{}, errors.New("bad response")
}
u.RawQuery = data.Encode()
req, err := http.NewRequest("GET", u.String(), nil)
if err != nil {
log.Fatal(err)
return DictResponse{}, errors.New("bad response")
}
client := &http.Client{}
req.Header.Add("Accept", "*/*")
req.Header.Add("Host", "fanyi-api.baidu.com")
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
resp, err := client.Do(req)
if resp.StatusCode != 200 {
log.Fatal("bad StatusCode", resp.StatusCode)
return DictResponse{}, errors.New("bad response")
}
if err != nil {
log.Fatal(err)
return DictResponse{}, errors.New("bad response")
}
defer resp.Body.Close()
bodytext, err := io.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
return DictResponse{}, errors.New("bad response")
}
var response DictResponse
err = json.Unmarshal(bodytext, &response)
if err != nil {
log.Fatal(err)
return DictResponse{}, errors.New("bad response")
}
return response, nil
}
三、心得
猜字谜还是比较简单的,在学校已经通过其他语言反复实现过,但是彩云这个实践内容第一次接触,还是比较新奇,对于很多小知识点都要反复查找材料,去慢慢熟悉弄懂,还是较为困难,总而言之,也只是照葫芦画瓢出来的,以后也要反复磨练方可