Go语言工程进阶 | 青训营笔记

109 阅读3分钟

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

一、本堂课重点内容:

从并发编程的视角解读Go语言的高性能特性;学习Go语言的依赖管理;学会单元测试;通过项目需求、需求拆解、逻辑设计、代码实现来实现真实的项目开发。

二、详细知识点介绍:

(1)从并发编程的视角解读Go语言的高性能特性

Go可以充分发挥多核优势,高效运行。当CPU为单核时,多线程程序只能依次执行,相当于串行执行,需要等待实践较久,但是当CPU为多核时,多线程程序可以同时运行,实现并行执行,提高程序运行的速度。
Channel分为无缓冲通道和有缓冲通道,其中无缓冲通道属于同步传输,容易阻塞,而有缓冲通道属于异步传输,不容易阻塞。
Sync包下的一些关键字,其中lock可以实现并发安全,waitGroup实现计数器的作用。**

(2)Go语言的依赖管理

Go 依赖管理的演进过程为:GOPATH->Go Vendor->Go Module,不同的环境依赖不同的版本。 GOPATH 无法实现package的多版本控制;Go Vendor 通过每个项目引入一份依赖的副本,解决了多个项目需要同一个package依赖的冲突问题,但无法控制依赖的版本;Go Module 定义了版本的规则和管理项目的依赖关系。
依赖管理的三要素为:配置文件,中心仓库管理依赖库,本地工具。

(3)学会单元测试

单元测试是避免事故的最后一道屏障,另外可以在较短时间内定位和修复问题。
代码覆盖率可以用来衡量代码是否经过了足够的测试,评价项目的测试水准,评价项目是否达到了高水准测试等级。
Mock测试对函数(方法)打桩测试,不再依赖本地文件。
内置的测试框架提供了基准测试的能力。

(4)项目开发实战

项目开发可以以分为三个步骤:需求设计,代码开发,测试运行。 后端开发主要分为三层:数据层(dto),逻辑层(service),视图层(controller)。
数据层主要负责外部数据的增删改查,业务逻辑层主要负责处理核心业务逻辑输出,视图层主要负责处理和外部的交互逻辑。

三、实践练习例子:

(1)快速打印 hello goroutine

package main

import (
   "fmt"
   "time"
)

func hello(i int) {
   fmt.Println("hello goroutine :" + fmt.Sprint(i))
}

func HelloGoRoutine() {
   for i := 0; i < 5; i++ {
      go func(j int) {
         hello(j)
      }(i)
   }
   time.Sleep(time.Second)
}

func main() {
   HelloGoRoutine()
}

(2)Channel测试

func CalSquare() {
   src := make(chan int)
   dest := make(chan int, 3)

   go func() {
      defer close(src)
      for i := 0; i < 10; i++ {
         src <- i
      }
   }()

   go func() {
      defer close(dest)
      for i := range src {
         src <- i * i
      }
   }()

   for i := range dest {
      fmt.Println(i)
   }
}

func main() {

   CalSquare()

}

四、课后个人总结:

项目开发的过程中,首先要确定好数据模型,建立对应的数据库,根据数据模型实例依次写service层的逻辑。Sql中构建索引很重要,通过索引可以在较大数据量的数据库中可以快速定位到目标数据。

五、引用参考:

(1)channel有缓冲和无缓冲的区别

blog.csdn.net/zhengwish/a…

(2)sql中的索引

blog.csdn.net/CrayonShinC…