Go语言基础语法 | 青训营笔记

107 阅读3分钟

Go语言基础语法 | 青训营笔记

笔记都是上课的时候边听边记的,更多只是标记一个知识点,更多具体内容还是得google或者查阅更多资料。比如这里的Go语言语法等,如果以后想要将Go当作主力语言,就应该按照官方给出的资料去仔细看,多敲demo。

个人认为本次训练营对我来说比较适合,报名青训营的初衷也是借此去学习Go和Go web的东西,以下就是我的上课笔记了。

什么是Go

  • 高性能,高并发
  • 语法简单,学习曲线平缓
  • 丰富的标准库
  • 静态链接
  • 快速编译
  • 跨平台
  • 垃圾回收

字节为什么拥抱Go

  • 开始用的python,性能不行
  • 早期团队非Java背景

Go入门:我个人是使用的WSL环境,用VSCode和GoLand都可以连接远程,很方便,在Linux下开发遇到问题也很好解决

  • 安装GoLang
  • IDE

基础语法

  • Hello,World
  • 变量
  • 循环
  • 分支
  • switch
  • 数组
  • 切片slice
  • map
  • range
  • 函数(多值返回)
  • 指针
  • 结构体
  • 结构体方法(类比类成员函数)
  • 错误处理(多值)
  • 字符串操作(标准库函数)
  • 字符串格式化
  • JSON处理
  • 时间处理
  • 数字解析(strconv包)
  • 进程信息

猜谜游戏(和下面两个项目一样,具体代码可以去看GitHub的项目)

  • 设置好随机数种子(可以直接看Go文档)
  • 读取用户输入
  • 实现游戏循环

在线词典

  • 主要是学会如何发送HTTP请求
  • 第三方API,调彩云的接口
  • copy as curl,用curl来发送请求
  • 然后用这个curl命令去生成Go代码

SOCKS5代理

  • 实现代理服务器
  • 包括SOCKS的原理

Go语言入门-工程实践

  • 语言进阶

    • 并发编程

    • Goroutine(这个应该算是Go语言的特色,可以着重关注一下实现原理)

      • 协程:用户态,轻量级线程
      • 线程:内核态,线程跑多个协程
    • 通过通信共享内存而不是通过共享内存实现通信CSP(Communicating Sequential Process)

    • Channel——无缓冲和有缓冲

    • 对比测试用锁和不用锁,sync.Mutex

    • sleep不优雅,可以使用WaitGroup

  • 依赖管理

    • 背景:站在巨人的肩膀上

    • 演进:GOPATH、Go Vendor、Go Module

      • 不同环境(项目)依赖的版本不同
      • 控制依赖库的版本
      • GOPATH:环境变量;所有代码依赖src目录下的代码;弊端:无法实现package得到多版本控制
      • Go Vendor:增加一个Vendor目录,增加一个副本,通过每个项目引入一个依赖的副本解决了多个项目需要同一个package的依赖冲突问题
      • Go Module:终极目标:定义版本规则和管理项目依赖关系
    • 依赖管理三要素:

      • 配置文件,描述依赖 go.mod(version、indirect、incompatible、依赖图、依赖分发-回源)
      • 中心仓库管理依赖库 Proxy(通过GOPROXY控制服务站点)
      • 本地工具 go get/mod
  • 测试

    回归测试——集成测试——单元测试(覆盖率变大,成本却在降低)testing包

    • 单元测试

      • 依赖:外部依赖——稳定&幂等
    • Mock测试

      • monkey包,开源Mock测试包,为一个函数打桩/为一个方法打桩
      • 不依赖本地文件
    • 基准测试

  • 项目实战(社区话题页面)

    • 项目需求、需求拆解、逻辑设计、代码实现