【golang】第二节课课程代码笔记小结 | 青训营笔记

156 阅读2分钟

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

这节课主要介绍了工程项目中一些基本的规范,最后带着做了一个web项目

工程项目中,与平常的项目不一样的点主要在于:

1、更需要注意性能

golang中提供创建协程的方法,协程是比线程还要小的单位,用于多核cpu的并行工作

func CalSqure(){
   src :=make(chan int)//创建通道
   dest := make(chan int,3)//有缓冲的通道
   go func(){
      defer close(src)
      for i := 0; i<10;i++{
         src <-i
      }//把生成的数送到src channel
   }()
   go func(){
      defer close(dest)
      for i :=range src{
         dest <- i*i
      }
   }()
   for i := range dest{
      println(i)
   }
   //defer 是FILO的操作 这里是先指先关dest才能关src
}

这一段代码中,体现了几个语法: 第一,通道的创建。golang中推荐使用通信的方式共享内存,而非使用共享内存的方式实现通信。第二,把生成的数送入通道可以使用<-的方法。第三,defer语法,可以用于实现类似于栈的FILO实现,在这个案例中,也就是会先等dest通道关闭之后,src通道才会关闭

2、需要注重依赖管理

目前,golang中主要依靠go module实现依赖管理,通过go.mod文件管理依赖包版本,通过Proxy中心仓库管理依赖库,通过go get/go mod指令工具管理依赖包

3、需要进行单元测试

源文件以.go结尾,测试文件以_test.go结尾,test文件里要import ("testing")

然后函数名要格式为:TestXxxx,比如func TestHelloTom(t *tesing.T)

还可以用Mock(打桩函数)

最后是一个本地web服务的实战演练,包含需求设计,代码设计和测试运行(对抖音项目有参考价值) 需求:展示话题(标题和文字描述)和回帖列表,不考虑前端页面实现,话题和回帖数据用文件存储(不用数据库)

第一步,需求分析:

首先,要从需求中,抽象出实体,并确定实体的属性。在这个项目里,实体有两个:话题(Topic)和帖子(Post) ,是一对多的关系

第二步,确定分层结构。可以分为:

Repository数据层(外部数据的增删改查)【关联底层数据模型,处理数据Model】

Service逻辑层(处理核心业务逻辑输出)【处理核心业务Entity,并送给视图层】

Controller视图层(处理和外部的交互逻辑)【负责处理和外部的交互逻辑,处理视图view】

第三步,可以确定基础组件和工具,用Gin(高性能go web框架) 【基于Gin搭建web服务器】和go mod【因为引进了Gin(web框架),所以得用go mod依赖管理,先用go mod初始化go mod管理配置文件,然后go get获取Gin依赖】