Go语言学习笔记3 | 豆包MarsCode AI刷题

108 阅读3分钟

昨天的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命令。

image.png

之所以有很多这个sug命令,是因为百度翻译输入一个字符就翻译一次,挺离谱的。选择最后一个,复制cURL(bash)。(cmd的那个网站好像不能用)得到了代码以及实现结果如下:

image.png

下面我想把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的显示(这步没有啥改动地方,照着写就行),得到的结果如下:

image.png

在最后的完善部分,我发现我的思想还停留在以前的想法,想着输入一个good,应该执行go run /cloudide/workspace/houduanrumen---Go-yuyanyuanliyushijian/02-Go语言的实战案例/02-simpledict/v4/main.go good(我是纯在AI练中学写)

image.png

现在只需要修改输出的部分就行了,这个时候,破防了,我发现这个并不是翻译功能,只是一个类似预览功能(啊啊啊啊啊啊),算了,就这样吧,心累了(QAQ),最后的结果如下:

image.png