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

38 阅读3分钟

昨天写了第一课的笔记,今天把《Go语言的实战案例》的笔记补上。

第一个案例是生成随机数,在王克纯老师介绍的v1版本中,老师介绍到secretNumber := rand.Intn(maxNum),这个方法每次会生成相同的随机数。但是,我在AI练中学中运行了v1版本的代码,发现并没有出现出现相同随机数的情况,每次生成的值都是不同的。

后来,我尝试secretNumber := rand.Intn(maxNum)和secretNumber1 := rand.Intn(maxNum),观察secretNumber和secretNumber1,两个变量的随机值还是不同的,这点问MarsCode AI,并没有给出清晰的解释。

然后,我在一个在线的golang编译运行网站进行尝试,发现这个随机值确实是固定的,每次生成的值相同,不过secretNumber和secretNumber1的值还是不同。挺神奇的,可能是AI练中学每次运行的时候,随机数种子可能就会变化吧。

在猜数字v2版本,通过rand.Seed(time.Now().UnixNano())这个代码,通过当前时间来初始化种子,程序运行的初始时间每次都不一样,得到的随机数种子也不同,可以生成不同的随机数。

在v3版本中,引入了bufio库,实现了输入的功能。在输入一行字符串之后,会进行input = strings.Trim(input, "\r\n")这一个操作,是删除读取字符串的最后的回车号。这个操作让我想起了在写c++的时候,读取一行字符串的时候,只读取了上一行输入的回车号,需要先用getchar()读取回车,再读取一行字符串。

在v4版本中,引入了输赢的判断。在v5版本中,引入了循环,变成一个合理的猜数字游戏。(一般用二分查找法玩这个游戏)

第二个案例是在线词典介绍,对我来说挺新颖的。

首先,在彩云小译的网站翻译一个“good”单词,通过浏览器的检查功能,查取dict操作的信息,如下图所示:

image.png

检查信息和课程中信息一致后,选中dict复制为cURL,然后进入curl to Go网站,将这个操作转换为Go语言的代码(不过结果和课程中的代码并不是完全一致),代码对比如下:

image.png

这两段代码分别在AI练中学中运行一遍,得到的结果是一样的。可能是彩云小译的网站发生了变化,界面和课程中的界面已经不一样了,但是翻译内容还是没变。

之后,在v2和v3版本,实现json序列化和反序列化。通过oktools.net /json2go网站,将十分复杂的结构体转化出来了(真是太方便了)

最后,在v4版本中,只提取我们所需要的信息,进行输出。

第三个案例是SOCKS5代理。这个项目更复杂了,以前没接触过,只知道计算机网络的三次握手协议(难绷)。原理图如下,分4个阶段(协商、认证、请求、relay)。

image.png

不过这个项目的代码还没能运行出来,在AI练中学中,输入如下指令:

image.png

能显示网络服务有了

image.png

但是后面的nc 127.0.0.1 1080不能继续输入了(或者我没找到在哪里输入)

明天继续学吧,把这个问题搞懂!