这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天
今天复习时翻到了以前写了但是未发布的青训营笔记,然后发现掘金内部课的部分其实有一部分删减,想了想还是按照课程的进度并结合之前的笔记做下每节课相关的总结会好一点。
课程源码:github.com/wangkechun/… 短链接:hi-hi.cn/go
前言
这节课主要是快速过一下Go语言的特性和语法以及介绍几个Go实战的小项目
Go语言的特性
- 高性能、高并发(天生支持并发)
- 语法简单、学习曲线平缓
- 完善的工具链
- 丰富的标准库
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收
哪些公司在用Go
字节、谷歌、腾讯、Facebook(现在应该叫Meta)、美团、七牛云、滴滴、B站、百度,PingCAP等等
字节选择Go的原因
- 最开始公司的业务主要是Web后端,所以最开始用的是Python,由于性能问题换成了Go
- C++不太适合在线Web业务
- 早期团队非Java背景
- 性能比较好
- 部署简单、学习成本低
- 字节内部基于Go语言的RPC和HTTP框架的推广
基础语法
有其他语言基础的用这个过一过语法就行。
Go by Example 中文版 (gobyexample-cn.github.io)
这里简单整理下和其他语言不太相同的语法特性。
- 函数支持多返回值,第二个参数常是 bool 或者 error 类型。
- 原生支持并发,通过 go 关键字可以快速简单的创建一个协程。
- 提供 chan 来进行协程间的通信,实现共享内存。
- 使用 Context 来显示传递上下文信息。
- 支持对于结构体和接口的嵌入(embedding) 以表达一种更加无缝的组合(composition)类型。和继承相比更像是持有。
课堂案例
课堂上整了三个案例
猜谜游戏
就是经典的猜数字游戏,用到了 rand 包生成随机数。其实如果最求性能的话,可以使用 fastrand。
这里就不多展开了。
在线词典
抓包案例,用到了蛮多的生成代码的网站的。
这里就整理下用到的网址和步骤吧。
fanyi.caiyunapp.com/ 彩云翻译,翻译用的网站。
按 F12 打开网络查看请求,找到处理翻译的请求,然后 copy as HTML
curlconverter.com/#go 代码生成的网址,可能会有转义导致的部分错误,删去即可。
发起请求然后打印结果即可。
SOCKS5 代理服务器
SOCKS5 代理协议,都是明文传输,一般用在防火墙策略比较严格的地方,方便内部人员访问。
代理 IP 池也有很多用 SOCKS5 协议的。
三个项目都是 clone 下来跑跑或者跟着写就行,这里不多展开了。