Golang基础课笔记 | 青训营笔记

84 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

一、本堂课重点内容:

本堂课分文三个板块 1、Go语言简介 2、Go语言入门(包括开发环境的配置、通过示例代码讲解基础语法、以及一些标准库) 3、Go语言项目实战(猜谜游戏、命令行词典、SOCKS5代理)

二、详细知识点介绍:

Go语言的优点:
  • 高性能、高并发:Go语言可以很简单的实现高并发编程。由于我主要学的是C++,并且做过C++实现的高并发编程项目,因此可以深刻体会到GO语言高并发编程的方便,只需要go关键字就可以开一个协程,并且协程的效率比线程更高,channel更是能方便的完成协程间通信。
  • 语法简单、学习曲线平缓:关键词少,能快速上手
  • 丰富的标准库:一个C++实现的WEB服务器最简单也要几十行,而GO语言只需几行,得益于标准库的封装
  • 完善的工具链:Github上有非常多的GO语言轮子,许多云原生相关框架都由GO语言开发,生态较好
  • 静态编译
  • 快速编译
  • 跨平台
  • 垃圾回收

由于以上优点以及其他未提及的优点,GO语言出现在越来越多的大厂中成为主流语言。

三、实践练习例子:

有三个实践练手项目,下面介绍一下思路

猜谜游戏

通过rand.Seed()函数,传入time.Now().UnixNano()参数实现根据当前时间确定随机生成数种子生成随机数,作为最终答案。 通过bufio包的NewReader(os.Stdin)定义标准输入流,从命令行输入,然后将读入的字符串处理,转换为数字进行逻辑判断,循环直到命中结果 总结:锻炼基础语法的Demo,知道了GO语言定义读入流以及生成随机数的方法

命令行词典

通过浏览器F12抓包,找到POST请求,了解HTTP请求格式。然后根据该格式生成请求,用json.Marshal转换为json格式生成请求行,由于HTTP包有非常多的键值对,手写起来非常麻烦,于是用代码自动生成工具自动生成GO语言代码,然后发送该请求。 由于接受的HTTP包为json格式,需要用json.Unmarshal反序列化到程序的结构体中保存,接受的结构体很复杂,同样需要代码生成工具生成代码(根据Preview),最后打印其中需要的字段到命令行即可 总结:知道了代码生成工具的存在,能够方便的生成HTTP请求以及解析保存HTTP请求,深刻了对HTTP包结构的认识

SOCKS5代理

SOCKS5代理的流程: 客户端与代理服务器协商(程序中的auth()方法),SOCKS的版本,支持哪些METHODS,代理服务器收到后回复版本以及METHOD(这里传入0x00,表示不需要认证) 然后客户端向代理服务器发送connect请求,告知服务器的地址(支持IPv4、IPv6、Host形式),然后代理服务器TCP三次握手连接到目标服务器。 此时客户端服务器的信息即可通过代理服务器进行双向转发

四、课后个人总结: GO语言非常简洁方便,代码简洁如同Python,但性能缺远超于Python,当下云原生大火的Docker、K8s均由GO语言编写,因此我认为GO语言有非常好的前景。课上的内容也只是一个初步的了解,想要学好这门语言还要私底下花功夫学习学习。