Golang学习
变量类型: var,str,map,struct,等等
要注意:定义的变量必须被使用。
结构:和其他语言一样,有 if-else,switch,while等等结构
然后就是Golang的一些特性:
首先就是高并发:
Golang有一个特殊的协程(Goroutine),可以实现高并发,比线程消耗的资源更少,效率更高,属于用户态,栈是KB级别。
然后是 Channel:
Golang是通过通信共享内存而不是通过共享内存实现通信。 其中又有两种 chan:无缓冲通道 make(chan int) 和有缓冲通道 make(chan,2) 。
Syc 线程安全:
并发安全要考虑锁Lock
有一个WaitGroup可实现锁的功能。
依赖管理
无法实现package的多版本控制? 将所有依赖包副本放在 vendor 文件下
Go Module go.mod Proxy go get/mod
版本规则
直接与间接依赖
依赖分发
测试
回归测试
集成测试
单元测试
覆盖率
Mock 打桩
基准测试
高质量编程
代码格式 注释
两个方面要注意
可以看看阿里的编程手册。
性能调优
slice预分配内存
copy代替
map预分配
strings.Buffer sreings.Builder // effictive
空结构体
atomic包 通过硬件,而不是系统调用
指针碰撞
项目做完后,都要再次优化,看有什么地方可以节省内存,提高效率,改进项目。
编译器优化
是指编译器在代码生成过程中通过一系列技术和策略来提升程序的执行效率、减少内存占用或减少编译时间等。常见的编译器优化手段有很多,其中 Beast Mode、函数内联 和 逃逸分析 都是提高程序性能的重要技术
- Beast Mode:通常是指编译器启用的极限优化模式,它会应用一系列高效的技术来最大化程序的性能,通常用于高要求的场合。
- 函数内联:通过将函数体插入到调用点,消除函数调用的开销,减少性能损失。
- 逃逸分析:分析对象是否逃逸出当前作用域,决定是分配在栈上还是堆上,从而减少内存分配和垃圾回收的负担。
数据库
database/sql
连接池 连接接口,操作接口
Gorm设计原理
GORM 是 Go 语言中非常强大和易用的 ORM 库,它封装了数据库的操作,通过结构体映射数据库表,使得开发者能够以更直观的方式进行数据库操作。它通过反射、SQL 生成、结果映射等技术简化了数据库操作,并提供了丰富的功能,适用于各种规模的应用开发。
在 GORM 中,每个数据库表通常对应一个 Go 语言的结构体。通过结构体与表的映射,GORM 可以将结构体的字段自动映射为数据库表的列。结构体类型的字段就对应了数据库表的列数据。GORM 会根据这个结构体的定义,生成适当的 SQL 语句来进行数据库的操作。