一.GO语言的实战学习
1.1 前言
在上文我们急速学习了Go语言的入门,今天我们来学习一下Go语言的实战
本专栏代码,源码打包下载地址如下:
https://download.csdn.net/download/weixin_52908342/87389481
二.猜谜游戏
1.导入依赖包:“math/rand”,代码如下:
import (
"fmt"
"math/rand"
)
2.main函数如下:
设置最大数:
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)
读取一行输入,并且进行撰写错误日志,代码如下:
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.先导入依赖包,代码如下:
import (
"bufio"
"fmt"
"math/rand"
"os"
"strconv"
"strings"
"time"
)
4.在刚刚代码外面加一个for 循环,实现用户可以循环输入猜数字的效果:
for {
}
5.对用户输入的值和随机数进行比较,并且对其大小进行一个友好的提示,如果相等,就输出才对了,执行break,结束大循环。退出本次游戏。
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
}
6.上述代码效果图如下:
三.在线词典例子
以云彩小译为例:
官网:https://fanyi.caiyunapp.com/
我们到这个网站里,点击翻译,去网络里查看,找到dict,找到请求方法为Post的。注意,必须为post请求。
我们找到刚刚的dict,点击右键,赋值为cURL:
使用生成代码器:curlconverter
官网如下:
https://curlconverter.com/go/
粘贴上面复制的内容,然后将下面生成的go语言代码copy带编译器里:
主要代码如下:
创建请求:
req, err := http.NewRequest("POST", "https://api.interpreter.caiyunai.com/v1/dict", data)
设置请求头:
发起请求:
resp, err := client.Do(req)
读取响应:
bodyText, err := ioutil.ReadAll(resp.Body)
成功输出json,如图:
构造结构体:
type DictRequest struct {
TransType string `json:"trans_type"`
Source string `json:"source"`
UserID string `json:"user_id"`
}
生成结构体:
我们上面输出了应该json字符串,我们复制到OKTools工具里。
如下:
生成了如下巨大的结构体:
输出我们需要的信息:
fmt.Println(word, "UK:", dictResponse.Dictionary.Prons.En, "US:", dictResponse.Dictionary.Prons.EnUs)
for _, item := range dictResponse.Dictionary.Explanations {
fmt.Println(item)
}
代码完善,将Source:后面写为变量,然后在主函数里在终端输入变量,为输入的字符串,然后返回api处理之后的结果:
如下:
最后运行结果如下: