Go语言入门-工程实践 | 青训营笔记

92 阅读2分钟

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

一、语言进阶

  • 并行 VS 并发

    • Go可以充分发挥多核优势,高效运行

    • 多线程程序在一个核的cpu上面运行

    • 多线程程序在多个核的cpu运行..

  • Gotoutine

    • 协程(用户态)

      • 轻量级线程

      • 栈MB级别

    • 线程(内核态)

      • 线程跑多个程序

      • 栈KB级别

  • CSP

    • 提倡通过通信共享内存而不是通过共享内存而实现通信
  • Channel

    • make(chan 元素类型 , [缓冲大小])

    • 无缓冲通道 make(chan int)

    • 有缓冲通道 make(chan int, 2)

  • 并发安全 Lock

  • WaitGroup

二、依赖管理

  • 依赖管理演变进程

    • GOPATH、GO Vendor、Go Moudle

    • GOPATH 环境变量

      • bin 项目编译的二进制文件

      • pkg 项目编译产生的中间产物,加速编译

      • src 项目源码(项目代码直接依赖src中的代码)

      • go get下载最新版本的包到src目录下面

      • 弊端 无法实现package的多版本控制

    • Go Vendor

      • README.md

      • dao

      • handle

      • main.go

      • service

      • vendor 项目中的所有依赖包放到此位置,每个项目引入一份依赖的副本,解决了多个项目需要同一个package依赖的冲突问题。

      • 问题:无法控制依赖的版本,更新项目时可能出现依赖冲突的问题,导致编译出错。

    • Go Moudule

      • 通过go.mod文件管理依赖包版本

      • 通过 go get/go mod指令命令管理依赖包

      • 配置文件,描述依赖 go.mod

      • 中心仓库管理依赖库 Proxy

      • 本地工具 go get/mod

      • go get

        • @update 默认

        • @none 删除依赖

        • @1.1.2 tag版本,语义版本

        • @23dfdd5 特定的commit

      • go mod

        • go init 初始化,创建go.mod文件

        • download 下载模块到本地缓存

        • tidy 增加需要的依赖,删除不需要的依赖

      • 依赖管理三要素

        • 配置文件,描述依赖 go.mod

        • 中心仓库管理依赖库 Proxy

        • 本地工具 go get/mod

三、测试

  • 回归测试

  • 集成测试

  • 单元测试

    • 所有测试文件以_test.go结尾

    • func TestXxx(*testing.T)

    • 初始化逻辑放到TestMain中

  • 基准测试

四、项目实践

  • 需求分析

  • 需求用例

  • ER 图

  • 分层结构

    • 数据层:数据Model,外部数据的增删改查

    • 逻辑层:业务Enity,处理核心业务逻辑输出

    • 视图层:视图view,处理和外部的交互逻辑

  • 组件工具

  • Repository

  • Repository-index

  • Repository-查询

  • Service

  • Controller

  • Router

  • 运行