昨天的SOCKS5代理项目应该只能在本地上跑,在AI练中学中,运行程序就会只运行一行,不能进行后面的netcat操作。这个项目先暂时搁置,今天发现这个课程有课后作业,课后作业只涉及前两个案例,可能也是老师觉得第三个太难了点。
这里就先写一下课后作业吧。
第一个作业是用fmt.Scanf来实现输入功能。使用_, err := fmt.Scanf("%d", &guess)语句来替换reader := bufio.NewReader(os.Stdin)和input, err := reader.ReadString('\n')。这有点和c的scanf有点类似,前面的_, err部分,这里的下划线是表示成功读取的数据个数,不过这个案例中不需要,err表示发生的错误。通过这个句子可以直接获得int类型的输入。代码如下:
func 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")
var guess int
for {
_, err := fmt.Scanf("%d", &guess)
if err!= nil {
fmt.Println("An error occured while reading input. Please try again", err)
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
}
}
}
但是,这里还有一点细节有点问题。当我输入"asdfasdf"这样的长非数字的输入时,会出现很多句"An error occured while reading input. Please try again"。询问MarsCode AI来解决这个问题,给出了添加fmt.Scanln()的建议,但是尝试之后,还是没能解决这个问题。原因大概是输入的每个字符都会检查是不是数字,不是的话就报错。改成输入字符串的形式可能会解决这个问题,但好像有些没有必要。
第二个作业是用另一种翻译引擎来解决这个问题。我选择百度翻译进行尝试(其实第一个尝试有道翻译,但是预览中没有返回翻译信息,难绷),首先通过浏览器的检查功能找到POST命令。
之所以有很多这个sug命令,是因为百度翻译输入一个字符就翻译一次,挺离谱的。选择最后一个,复制cURL(bash)。(cmd的那个网站好像不能用)得到了代码以及实现结果如下:
下面我想把good这个输入改为输入功能,在代码中我们可以看到var data = strings.NewReader(kw=good),输入是一个"kw="加上good这个单词,所以我写了如下代码:
fmt.Print("请输入要翻译的单词:")
var word string
_, err := fmt.Scanf("%s", &word)
if err!= nil {
log.Fatal(err)
}
// 使用 fmt.Sprintf 格式化字符串
var data = strings.NewReader(fmt.Sprintf("kw=%s", word))
也可以得到相同的效果。现在,就需要处理翻译api返回的数据。这里去找oktools.net/json2go 网站来实现json转golang结构体,结果发现这个网站没了,在一阵查询后找到了代替的网站,得到结构体如下:
type JSONData struct {
Errno int `json:"errno"`
Data []struct {
K string `json:"k"`
V string `json:"v"`
} `json:"data"`
Logid int `json:"logid"`
}
再修改一下bodyText的显示(这步没有啥改动地方,照着写就行),得到的结果如下:
在最后的完善部分,我发现我的思想还停留在以前的想法,想着输入一个good,应该执行go run /cloudide/workspace/houduanrumen---Go-yuyanyuanliyushijian/02-Go语言的实战案例/02-simpledict/v4/main.go good(我是纯在AI练中学写)
现在只需要修改输出的部分就行了,这个时候,破防了,我发现这个并不是翻译功能,只是一个类似预览功能(啊啊啊啊啊啊),算了,就这样吧,心累了(QAQ),最后的结果如下: