这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
一、重点内容
- 并发编程
- 依赖管理
- 实践部分
- MySQL环境部署
二、并发编程
- goroutine
goroutine是Go语言中的轻量级线程实现,Go程序会智能地将goroutine中的任务分配给每个CPU。- 创建一个goroutine
go 函数名(参数列表)
- 创建一个goroutine
- channel
channel是Go语言中一种特殊的类型。在任何时候,同时只能有一个goroutine访问通道,获取或发送数据。- 声明一个channel
var 通道变量 chan 通道类型 - 另一种方法
make(chan 通道类型[,通道缓冲区大小])设定缓冲区大小可以避免生产者速度比消费者快而通道阻塞的情况。
- 声明一个channel
- sync.Mutex
Mutex是一种锁,当一个goroutine获得锁后,其他goroutine只能等待释放锁。- 声明锁
var lock sync.Mutex - 加锁
lock.Lock() - 解锁
lock.Unlock()
- 声明锁
- WaitGroup
WaitGroup又称等待组,等待组内维护一个计数器- 声明等待组
var wg sync.WaitGroup - 改变等待组的计数
wg.Add(5)wg.Done()wg.Add(-1) - 进入阻塞状态
wg.Wait()
- 声明等待组
三、依赖管理
目前Go语言的依赖管理主要使用Go Module
- 配置文件,描述依赖
在新创建的项目下生成一个初始go.mod文件- 命令
go mod init hello
- 命令
- Proxy
国内的代理服务器设置方法- 命令
go env -w GOPROXY=https://goproxy.cn,direct
- 命令
- 本地工具
使用命令下载指定版本的依赖包- 命令
go get
- 命令
四、实践部分
在项目实践部分,我关注到了项目构建中需要配置数据库,实现数据层的MySQL数据库连接需要在本地构建MySQL环境,并且提前导入example.sql文件。
- MySQL构建
- 下载 MySQL安装包 在Windows环境部署
- 设置环境变量,使
mysql命令全局有效 - 从项目目录下找到
example.sql,输入命令mysql -u用户名 -p密码 < /path/to/example.sql - 修改
repository下db_init.go中的dsn,使其用户名和密码符合本机环境
- 课后作业
- 支持发布帖子
- 本地Id生成需要保证不重复、唯一性
- Append文件,更新索引,注意Map的并发安全问题
五、个人总结
这是我参加第五届青训营伴学笔记创作活动的第2天。今天课程内容比较多,所以学习的比较吃力,特别是在理解项目的三层结构上,需要结合代码明白数据层、逻辑层和视图层的作用和意义。