这是我参与「第三届青训营 -后端场」笔记创作活动的第一篇笔记
- 介绍
- 什么是go语言
- 高性能、高并发
- 语法简单、学习曲线
- 丰富的标准库
- 完善的工具链
- 静态链接
- 快速编译
- 跨平台
- 快速回收
- 哪些公司在用go语言
- 字节跳动
- 腾讯
- 美团
- 七牛云
- 滴滴
- bilibili
- 百度
- PingCAP
- 字节跳动为什么选择go语言
- 最初使用的是python,由于性能问题换成了go
- c++不适合在线web业务
- 早起团队非java背景
- 性能比较好
- 部署简单,学习成本低
- 内部rpc和http框架的推广
- 什么是go语言
- 入门
- 开发环境
- 安装golang
- 集成开发环境goland
- 基础语法
- 变量
- var a, b = 1, 1
- a := 1
- 常量
- const a = b
- 循环
- if else
- for循环
- continue
- switch case
- 成功匹配一个case直接退出,不会一次执行后续的case
- switch可以使用任意类型
- 数组
- var a [5]int
- 切片
- a := make([]int, 3)
- a := make([]int, 3, 4)
- map
- a := make(map[int]int, 3)
- delete(a, 1)
- 遍历时顺序随机
- range
- 切片
- for i, v := range a
- map
- for k, v := range a
- 切片
- 函数
- func operate(a, b int) (int, int) {...}
- 参数类型后置
- 可返回多个参数
- 多个参数返回需要括号
- 指针
- 函数调用时可以修改形参
- 结构体
- type Person struct {}
- 结构体方法
- func(p Person) eat(food string) {...}
- 错误处理
- if err != nil {...}
- 字符串操作
- s := "abc"
- len(s)
- cap(s)
- strings.Contains(s, "aaa")
- strings.Count(s, "aaa")
- strings.Index(s, "aaa")
- strings.Join([]string{"a", "b"}, "aa")//"abaa"
- strings.Repeat(s, 2)//"abcabc"
- strings.Split("a-b-c", "-")//[a b c]
- strings.ToLower(s)
- strings.ToUpper(s)
- 字符串格式化
- fmt.Println()
- fmt.Printf
- %v打印变量值
- %+v打印字段名和值
- %#v打印结构体名、字段名和值
- json处理
- a是一个结构体变量
- buf, err := json.Marshal(a)
- json.Unmarshal
- fmt.Println(buf)
- fmt.Println(string(buf))
- 时间处理
- time包
- time.Now()
- time.Date
- t := time.Date
- t.Year
- t.Month
- ...
- t1.Sub(t2)
- 两个时间相减
- time包
- 类型转换
- string转float
- strconv.ParseFloat("",64)
- string转int
- strconv.ParseInt("",10,64)
- 第二个参数:进制
- 第三个参数:精度
- strconv.Atoi("123")
- strconv.ParseInt("",10,64)
- string转float
- 进程信息
- os.Setenv("", "")
- os.Getenv("")
- 变量
- 标准库
- 开发环境
- 实战
- 猜谜游戏
- 生成随机数
- rand.Seed(time.Now().UnixNao())
- rand.Intn(maxNum)
- 获取输入
- read := bufio.NewReader(os.Stdin)
- input, err := read.ReadString('\n')//读入一行
- input = strings.TrimSuffix(input, '\n')//去掉末尾的换行
- num, err := strconv.Atoi(input)
- 生成随机数
- 命令行字典
- go的http连接请求
- client := &http.Client{}
- req, err := http.Request(Method, URL, Data)//创建请求
- resp, err := client.Do(req)//发起请求
- defer resp.Body.Close()
- bodyText, err := ioutil.ReadAll(resp.Body)//读取响应
- json序列化和反序列化
- go的http连接请求
- socks5代理
- 代理大致的原理
- 协商阶段
- 客户端向代理服务器发起协商请求
- 代理服务器返回协商结果
- 连接请求阶段
- 客户端先向代理服务器发送连接请求
- 代理服务器向目标服务器转发发送请求
- 目标服务器向代理服务器返回请求结果
- 代理服务器向客户端转发返回请求结果
- 数据传输阶段
- 客户端向代理服务器发送数据
- 代理服务器向目标服务器转发数据
- 目标服务器向代理服务器返回响应
- 代理服务器向客户端转发返回响应
- 协商阶段
- linux命令
- nc
- curl
- GET
- curl -v localhost:1234
- PUT
- curl -v localhost:1234 -XPUT -d "this is put method"
- GET
- 代理大致的原理
- 猜谜游戏