后端基础day1-golang基础|青训营笔记

196 阅读4分钟

这是我参与「第五届青训营」伴学笔记创作活动的第1天。本篇为第五届字节跳动青训营-寒假专场-后端基础课程的笔记。笔记内容分为课程内容、案例实践、作业总结三块。

课程链接:juejin.cn/course/byte…

演示项目:github.com/wangkechun/…

课程内容

大略介绍了golang的基础知识,详细介绍了三个案例。课程内容还是很硬的,即便是对golang有点了解,还是觉得有难度。golang基础知识靠自学,如有其他语言基础,上手应该很快。

案例实践

重点记录案例实践的内容。在上课的过程中,本人把前两个案例的代码都打了一遍,第三个案例没有深入,只是看了代码。因此只做重点记录,完整代码参考老师给的项目链接。

案例1:猜数字

内容:随机生成数字,输入猜测,正确则结束,错误则提示大或小,并循环继续。 重点在于输入的处理。

reader := bufio.NewReader(os.Stdin)
input, err := reader.ReadString('\n')

通过上述代码可得到一行的数据,实际就是读取到'\n'结束。因为输入的最后,需要enter回车。

input = strings.TrimSuffix(input, "\n")

删除一行数据里换行符。 非常顺利地在windows里报错,原因是:

  • Unix 系统中:每行结尾只有 "<换行>",即 "\n";
  • Windows 系统中:每行结尾是 "<回车><换行>",即 "\r\n";
  • Mac 系统中:每行结尾是 "<回车>",即 "\r"。

在windows环境下,按照课程内容中的读取到“\n”再去除“\n”,最后的结果是“数字\r”。解决方案是去除"\r\n",或直接读取到“\r”再去除“\r”。

案例2:翻译词典

该案例需要爬取彩云小译的请求数据,输入中文,点击翻译,右键检查在network选项中找名为dict的post请求。

fanyi.caiyunapp.com

随后利用在线的爬虫转换工具进行转换,复制curl即可。windows系统在复制时有cmd和bash两个选项。在windows环境下,命令行程序是cmd.exe、powershell;在linux环境下,命令行程序是bash。本案例应该复制为bash样式的cURL。

image.png

在dict的post请求之前,还有option请求,暂不深究。

生成golang代码,复制粘贴。代码结构为创建请求,设置请求头,发起请求,读取响应。在创建请求之前,设定数据类型,通过data去创建请求,降低内存消耗。发起请求即调用客户端实例的do方法,最后得到 request.body。

构造对应的结构体,使用MarshalIndent对json数据结构化。由于结构体比较复杂,可利用在线的转换工具,将json转换为对应的golang结构体。

整个案例的思路可分为:“请求”结构体创建请求,利用curl生成爬虫,利用json转换“数据”结构体,发送请求得到body数据,反序列化,筛选需要的信息。各部分包括对应的错误处理、检测状态等。

案例3:sockets5代理

Socks5协议工作原理:

image.png

Tcp echo server:简单的tcp数据转发

创建监听端口服务,服务接受请求返回连接,处理连接。在连接过程中读取字节并且写入。运行过程中老师使用了nc命令,windows使用nc命令需要下载netcat并配置,本人比较懒,没有运行。

后续部分看了下代码,能力有限,也懒得深究了。

作业总结

作业:

image.png

都没写,只是想了想。 第一题提示用scanf去写了,样式跟c语言差不多。 第二题增加一种翻译引擎,在给出的案例代码里,老师已经将请求部分整合成query函数了。可以照葫芦画瓢,再找个引擎,对着样式塞拉斯一遍,给出要翻译的word,调用两个函数即可。 第三题是第二题的延伸,要求提高响应速度,也就是谁先给出答案就用谁。我的想法是开两个go程,可以都接数据,然后只显示第一个。也可以接受最快的,阻塞后来的,可能要用到channel。具体也没有动手,所以也只是想一想,纸上谈兵地写出来。 一切都是为了刷青豆啊。

总结:

青训营的基础课程还是很顶的,起码比自学找的课程含金量高不少。可能这就是知识付费的力量,虽然青训营可以白嫖。书上多是重视理论,会讲的很底层,但青训营的课程就相对很有针对性。对golang有兴趣的话,这次字节搞的青训营价值就很大。就是青豆规则让人头大。