一、Go 简介
1.1 Go 特性
-
高性能、高并发
-
语法简单、学习曲线平缓
-
丰富标准库
-
完善的工具链
-
静态链接
-
快速编译
-
跨平台
-
垃圾回收
1.2 Go 应用
-
从字节跳动看:字节已经全面拥抱了 go 语言,公司内部有上万个微服务使用 golang 来编写,不久前也开源了 GO RPC 框架 KiteX 。
-
从招聘数据看:腾讯、百度、美团、滴滴、深信服、平安、 OPPO 、知乎、去哪儿、360、金山、微博、哔哩哔哩、七牛、 PingCAP 等公司也在大量使用;在国外,Google 、 Facebook 等公司也在大量使用 Go 语言。
-
从业务维度看:Go语言已经在云计算、微服务、大数据、区块链、物联网等领域蓬勃发展,尤其是在云计算、微服务等领域已经有较高的市场占有率; Docker 、 Kubernetes 、 Istio 、 etcd 等几乎所有云原生组件都是用Go实现的。
1.3 字节选择 Go 的原因
-
1.最初使用的 Python ,性能不佳
-
2.C++不太适合在线 Web 业务
-
3.早期团队非 Java 背景
-
4.Go 的性能较好
-
5.Go 部署简单、学习成本低
-
6.内部 RPC 和 HTTP 框架的推广
二、Go 入门
2.1 Go 安装
访问 go.dev/ 或访问 studygolang.com/dl,选择对应平台下载安装
2.2 Go 开发环境
-
基于云的开发环境:gitpod.IO在线编程环境,需要GitHub账号
-
集成开发环境:Vs Code(免费)或者Goland(收费)
2.3 编写HelloWorld程序
每个Go程序都是由包构成,程序从main包开始运行。通过import语句导入fmt包用来进行格式化输出。fmt包中格式化输出字符串的函数有Printf、Sprintf、Fprintf等,读取格式化字符串的函数有Scanf、Sscanf、Fscanf等。
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello World")
}
2.4 变量
-
Go是强类型语言,变量类型主要有整型、浮点型、布尔型、字符串等,其中字符串是内置类型,可以直接用+和=操作。
-
Go运算符的优先级大部分与C/C++类似。
-
Go变量的声明有两种:
-
var声明,可以写在函数体外,可以自动推导类型
-
:=声明,不能在函数体外面使用,需要指定类型
2.5 常量
用const进行声明,常量没有确定类型,会根据上下文自动确定类型。
2.6 if else 语句
Go中的if else语句与C/C++类似,主要有两个不同点:
-
if后没有括号()
-
if必须接大括号{}
2.7 循环语句
Go中只有for循环,用法和C/C++类似。
2.8 switch 语句
Go中的switch与C/C++类似,主要有三个不同点:
-
switch关键字后不接()
-
不需要break语句,自动中断
-
case几乎没有限制,可以使用任意变量类型乃至判断语句
2.9 数组
Go中的数组是一个具有编号且长度固定的元素序列,实际并不常用。
2.10 切片
通过make([]type, len, cap)函数创建一个左闭右开的切片,使用append追加元素,不支持负数索引。原理上,切片存储了一个长度和容量以及指向底层数组的指针,容量不够会扩容返回新的切片。
2.11 Map
Go中的map是完全无序的,遍历将按随机顺序输出。GoMap是一个映射,存储键值对,可以用make函数创建。
三、Go的实战
3.1 猜谜游戏
生成随机数(需要选种子),读取用户输入,实现判断逻辑,实现游戏循环。
3.2 在线词典
抓包,将参数序列化后加入请求参数中,生成go代码,将响应信息转换为Go语言Json对象,JSON转Golang Struct,将响应信息反序列化。
3.3 socks5代理
计网原理,代理机制,TCP echo sever,请求阶段,relay阶段。