第一节课:基础语言|青训营笔记

108 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第一篇笔记

  • 介绍
    • 什么是go语言
      • 高性能、高并发
      • 语法简单、学习曲线
      • 丰富的标准库
      • 完善的工具链
      • 静态链接
      • 快速编译
      • 跨平台
      • 快速回收
    • 哪些公司在用go语言
      • 字节跳动
      • google
      • 腾讯
      • facebook
      • 美团
      • 七牛云
      • 滴滴
      • bilibili
      • 百度
      • PingCAP
    • 字节跳动为什么选择go语言
      • 最初使用的是python,由于性能问题换成了go
      • c++不适合在线web业务
      • 早起团队非java背景
      • 性能比较好
      • 部署简单,学习成本低
      • 内部rpc和http框架的推广
  • 入门
    • 开发环境
      • 安装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)
              • 两个时间相减
      • 类型转换
        • string转float
          • strconv.ParseFloat("",64)
        • string转int
          • strconv.ParseInt("",10,64)
            • 第二个参数:进制
            • 第三个参数:精度
          • strconv.Atoi("123")
      • 进程信息
        • 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序列化和反序列化
    • socks5代理
      • 代理大致的原理
        • 协商阶段
          • 客户端向代理服务器发起协商请求
          • 代理服务器返回协商结果
        • 连接请求阶段
          • 客户端先向代理服务器发送连接请求
          • 代理服务器向目标服务器转发发送请求
          • 目标服务器向代理服务器返回请求结果
          • 代理服务器向客户端转发返回请求结果
        • 数据传输阶段
          • 客户端向代理服务器发送数据
          • 代理服务器向目标服务器转发数据
          • 目标服务器向代理服务器返回响应
          • 代理服务器向客户端转发返回响应
      • linux命令