Go学习第二课 | 青训营笔记

72 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天

一、重点内容

  • 并发编程
  • 依赖管理
  • 实践部分
    • MySQL环境部署

二、并发编程

  1. goroutine
    goroutine是Go语言中的轻量级线程实现,Go程序会智能地将goroutine中的任务分配给每个CPU。
    • 创建一个goroutine go 函数名(参数列表)
  2. channel
    channel是Go语言中一种特殊的类型。在任何时候,同时只能有一个goroutine访问通道,获取或发送数据。
    • 声明一个channel var 通道变量 chan 通道类型
    • 另一种方法make(chan 通道类型[,通道缓冲区大小]) 设定缓冲区大小可以避免生产者速度比消费者快而通道阻塞的情况。
  3. sync.Mutex
    Mutex是一种锁,当一个goroutine获得锁后,其他goroutine只能等待释放锁。
    • 声明锁var lock sync.Mutex
    • 加锁lock.Lock()
    • 解锁lock.Unlock()
  4. WaitGroup
    WaitGroup又称等待组,等待组内维护一个计数器
    • 声明等待组 var wg sync.WaitGroup
    • 改变等待组的计数 wg.Add(5) wg.Done() wg.Add(-1)
    • 进入阻塞状态 wg.Wait()

三、依赖管理

目前Go语言的依赖管理主要使用Go Module

  1. 配置文件,描述依赖
    在新创建的项目下生成一个初始go.mod文件
    • 命令go mod init hello
  2. Proxy
    国内的代理服务器设置方法
    • 命令go env -w GOPROXY=https://goproxy.cn,direct
  3. 本地工具
    使用命令下载指定版本的依赖包
    • 命令 go get

四、实践部分

课程项目代码

在项目实践部分,我关注到了项目构建中需要配置数据库,实现数据层的MySQL数据库连接需要在本地构建MySQL环境,并且提前导入example.sql文件。

  1. MySQL构建
    • 下载 MySQL安装包 在Windows环境部署
    • 设置环境变量,使mysql命令全局有效
    • 从项目目录下找到example.sql,输入命令mysql -u用户名 -p密码 < /path/to/example.sql
    • 修改repositorydb_init.go中的dsn,使其用户名和密码符合本机环境
  2. 课后作业
    • 支持发布帖子
    • 本地Id生成需要保证不重复、唯一性
    • Append文件,更新索引,注意Map的并发安全问题

五、个人总结

这是我参加第五届青训营伴学笔记创作活动的第2天。今天课程内容比较多,所以学习的比较吃力,特别是在理解项目的三层结构上,需要结合代码明白数据层、逻辑层和视图层的作用和意义。