Skip to content

ibarryyan/golang-tips-100

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

《Go小技巧&易错点100例》

公众号

image-20231112185924824

《Go小技巧&易错点100例》 博客专栏,主要是总结一下自己Coding过程中遇到的问题以及平时读一些博客的所得,因为做Gopher也有了一段时间了,相比Java,有些问题想要利用搜索引擎排查出来可能不是那么的迅速,所以在这里以文章的形式总结出来,也方便各位Gopher们能够顺利的解决所遇到的问题,并能够习得一些小技巧。

专栏目录

Golang Tips Go基础知识 Go框架技术 Go项目实践 Go优化实践
专栏的主要内容,主要是收集和总结Go开发中常见的小技巧和易错点,内容短小精炼,每篇文章大概会提供1~4个知识点 Go语言的基础知识,包括语法、原理等等,主要是全篇围绕一个知识点进行讲解 Go语言与常见框架的整合使用,提供基本的整合和使用方式 一些作者自己的小项目,主要是用Go语言进行开发,按照自己的想法进行实现 Go项目中常见的优化实践,包括编码的优化、排查问题工具的使用等等
专栏大纲 Go基础知识 Go框架技术 Go项目实践 Go优化实践

Go语言最新排名TIOBE

image-20231112185924824

AI时代Go语言学习路线:博客链接

loading-ag-2256

相关学习资源:

Golang Tips 100

专栏大纲

image-20231112190005980

在线地址(更新到第30篇)Go小技巧&易错点100例专栏

订阅地址

CSDN《Go语言小技巧&易错点100例》

微信公众号Go小技巧&易错点100例

扫码订阅

image-20231112190005980

更新进度

标题 代码 关键词 数量 难度
开篇词 - 0
第一篇 code 1.函数返回值屏蔽
2.context继承特性
3.禁止main函数退出
4.map值的遍历次序函数
关键词:context、map
4
第二篇 code 5.fallthrough关键字
6.简式变量声明仅能在函数内部使用
7.防止main函数提前退出
8.包循环依赖错误fallthrough
关键词:变量声明、函数、包依赖
4 ⭐⭐⭐
第三篇 code 9.Go项目中对依赖库版本的升级与降级
10.goroutine异常
11.Go中slice作为参数是值传递
关键词:goroutine、slice
3
第四篇 code 12.Go omitempty关键字
13.JSON Marshal需要注意的问题
14.Go iota关键字
关键词:omitempty、json、iota
3
第五篇 code 15.goroutine控制并发数量的方式
16.Go发起HTTP请求
17.断言
关键词:goroutine、HTTP、断言
3 ⭐⭐
第六篇 code 18.pprof查看运行时状态信息
19.goruntine使用后的销毁
关键词:pprof、goruntine
2 ⭐⭐⭐
第七篇 code 20.Go日志输出到文件
21.recover方式的异常处理
22.Go HTTP请求重定向
关键词:日志、HTTP、异常处理
3 ⭐⭐
第八篇 code 23.优雅的关闭Go程序
24.指针声明后未赋值前不能直接操作
25.channel方式代替time.Sleep
关键词:指针、channel
3 ⭐⭐
第九篇 code 26.遍历指针数组
27.检查nil以提升程序安全性和健壮性
关键词:指针、数组
2
第十篇 code 28.Go string的长度
29.Go优雅的Test方法
30.slice的各种截取
关键词:string、go Test、slice
3
第十一篇 code 31.Go函数式编程
32.不建议map使用指针类型作为Key
33.直接使用值为nil的slice和map
关键词:函数式编程、map、slice
3 ⭐⭐
第十二篇 code 34.Go库函数和Protobuf函数在JSON序列化Message类型结构体上的不同
35.Go HTTP全局异常处理器
关键词:HTTP、JSON序列化
2
第十三篇 code 36.Go HTTP文件上传下载
37.Go程序弹出浏览器
关键词:HTTP
2
第十四篇 code 38.init()函数的执行机制
39.sync.Once同步原语
40.Go进行保留小数的运算
关键词:init函数、并发
3 ⭐⭐⭐
第十五篇 code 41.Go程序跟踪函数的执行时间
42.Go链式编程
43.结构体值接收者和指针接收者实现接口的区别
关键词:链式编程
3 ⭐⭐
第十六篇 code 44.切片的长度和容量
45.for循环中使用defer
46.Go语言TrimLeft函数
关键词:slice、defer
3
第十七篇 code 47.Go定时任务
48.Cgo简单使用
关键词:Cgo、定时任务
2 ⭐⭐
第十八篇 code 49.使用下划线增加数字可读性
50.格式化方法中多次使用相同参数
51.数组的模糊计数
关键词:fmt
3
第十九篇 code 52.goto语法和label的使用
关键词:goto
1 ⭐⭐⭐
第二十篇 code 53.使用slice和map的内置函数
54.避免不必要的类型转换
55.优雅的字符串拼接方式
关键词:slice、map、类型转换、字符串拼接
3 ⭐⭐
第二十一篇 code 56.errors.Is方法与==两种方式进行error比较
57.带缓冲channel和无缓冲channel区别
58.defer func() 函数返回值
关键词:defer、channel
3 ⭐⭐
第二十二篇 code 59.Go有符号类型和无符号类型
60.Go数组和切片
61.Go结构体类型比较
关键词:变量类型
3
第二十三篇 code 62.Go Module控制Go版本
63.int转string注意事项
64.Go项目查看mod依赖关系
关键词:go module关键词:
3 ⭐⭐
第二十四篇 code 65.go interface{}类型校验
66.go mod tidy验签失败
关键词:interface
3
第二十五篇 code 67.使用atomic包实现无锁并发控制
68.Gin框架的中间件机制
69.搞懂nil切片和空切片
关键词:Gin、slice、并发
2 ⭐⭐
第二十六篇 code 70.string转[]byte是否会发生内存拷贝
71.Go程序获取文件的哈希值
关键词:string、文件哈希值
2
第二十七篇 code 72.Go语言中的Scan函数
73.debug.Stack()打印堆栈信息
74.Go条件编译
关键词:Scan函数、debug.Stack()、条件编译
3 ⭐⭐⭐
第二十八篇 code 75.runtime.Caller(1)获取调用者信息
76.for循环 + select{}语法
关键词:函数调用栈、select{}
2 ⭐⭐⭐
第二十九篇 code 77.可变类型比较
78.Slice 最大值与最小值
79.Map 转换为 Slice
80.Map 合并
关键词:新版内置函数
3 ⭐⭐
第三十篇 code 81.切片共享底层数组
82.获取Go函数的注释
关键词:抽象语法树、slice
2 ⭐⭐⭐
第三十一篇 code 83.Go struct内存对齐
84.使用空结构体(struct{})节省内存
关键词:内存对齐、空struct{}
2 ⭐⭐⭐
第三十二篇 code 85.sync.Map的原理和使用方式
86.实现有序的Map
关键词:map
2 ⭐⭐⭐
第三十三篇 code 87.Validator自定义校验规则
88.sync.Pool优化对象复用
89.sync.WaitGroup的正确使用
90.nil的语义陷阱
关键词:Validator、sync.Pool、sync.WaitGroup、nil的语义陷阱
4 ⭐⭐⭐
第三十四篇 code 91.sync.Mutex锁复制导致的异常
92.Go堆栈机制下容易导致的并发问题
关键词:sync.Mutex、锁复制、堆栈、goroutine
2 ⭐⭐⭐
第三十五篇 code 93.循环依赖导致栈溢出
94.无法捕获子协程的panic
关键词:循环依赖、堆栈、goroutine、panic
2 ⭐⭐⭐
第三十六篇 code 95.使用gops获取正在运行的Go进程
96.将静态文件编译到Go程序中
97.Go语言通过多重赋值实现变量值交换
关键词:gops工具、变量交换、编译
3 ⭐⭐
第三十七篇 code 98.Go结构体非导出字段不会被序列化
99.Go语言的字符串是不可变
100.代码块{}的作用范围
关键词:序列化、字符串、代码块
3 ⭐⭐
DOING

Total:100

同类内容分享

Go语言100个编程错误小抄

Go语言编程技巧

Go语言编程技巧(网页版)

Go优化指南

Go优化指南(网页版)


Go基础知识

文章 关键词 难度
浅谈Go语言内存模型 Go内存模型、goroutine ⭐⭐
Go错误处理方式真的不好吗? 错误处理 ⭐⭐
莫非这就是Go最佳协程池 goroutine、池化思想 ⭐⭐
原来go build命令有这么多学问 编译原理 ⭐⭐
Go程序最多能创建多少个协程? goroutine的销毁、线程、内存、协程 ⭐⭐⭐
搞懂Go泛型,看这一篇就够了 泛型 ⭐⭐
搞懂策略模式和模板方法模式 策略模式、模板方法模式
浅谈Go语言Optional模式和Builder模式 Optional模式、Builder模式
函数式编程能有多优雅? 函数式编程 ⭐⭐
为什么说组合优于继承? 面向对象 ⭐⭐
浅谈Go语言深拷贝与浅拷贝 面向对象 ⭐⭐
快来看!你的Go代码还能更优雅 面向对象 ⭐⭐
Go语言的Fan-In并发模式 并发 ⭐⭐
一文搞懂Go语言垃圾回收机制 垃圾回收 ⭐⭐⭐

Go框架技术

文章 关键词 难度
WebSocket原来还能这么玩 WebSocket ⭐⭐
浅谈一下etcd的Watch机制 etcd、Watch机制 ⭐⭐
搞懂gRPC支持HTTP进行双协议通信 etcd、Watch机制 ⭐⭐

Go语言与框架(工具)集成的Demo

1)存储类

类别 集成工具 Demo 评分
MySQL go-sql-driver/mysql Demo ⭐⭐⭐⭐⭐
PostgreSQL lib/pq Demo ⭐⭐⭐⭐
Redis go-redis/redis Demo ⭐⭐⭐⭐⭐
MongoDB mongodb/mongo-go-driver Demo ⭐⭐⭐⭐
Kafka segmentio/kafka-go Demo ⭐⭐⭐⭐
Elasticsearch olivere/elastic Demo ⭐⭐⭐⭐
ORM go-gorm/gorm Demo ⭐⭐⭐⭐⭐
文件存储 minio/minio-go Demo ⭐⭐⭐⭐
缓存 patrickmn/go-cache Demo ⭐⭐⭐⭐
分布式锁 go-redsync/redsync Demo ⭐⭐⭐⭐
对象存储 aws/aws-sdk-go Demo ⭐⭐⭐⭐⭐
加密与安全 golang/crypto Demo ⭐⭐⭐⭐⭐

2)Web与RPC框架

类别 集成工具 Demo 评分
gRPC grpc/grpc-go Demo ⭐⭐⭐⭐⭐
Gin框架 gin-gonic/gin Demo ⭐⭐⭐⭐⭐
WebSocket gorilla/websocket Demo ⭐⭐⭐⭐
HTTP客户端 go-resty/resty Demo ⭐⭐⭐⭐⭐
API文档生成 swaggo/swag Demo ⭐⭐⭐⭐⭐
HTTP路由 gorilla/mux Demo ⭐⭐⭐⭐⭐

3)消息类

类别 集成工具 Demo 评分
Kafka segmentio/kafka-go Demo ⭐⭐⭐⭐
Logging sirupsen/logrus Demo ⭐⭐⭐⭐⭐
消息队列 nsqio/go-nsq Demo ⭐⭐⭐⭐

4)其他

类别 集成工具 Demo 评分
Elasticsearch olivere/elastic Demo ⭐⭐⭐⭐
Prometheus prometheus/client_golang Demo ⭐⭐⭐⭐⭐
配置管理 spf13/viper Demo ⭐⭐⭐⭐⭐
任务调度 robfig/cron Demo ⭐⭐⭐⭐
CI/CD go-cmd/cmd Demo ⭐⭐⭐⭐
分布式锁 go-redsync/redsync Demo ⭐⭐⭐⭐
命令行工具 spf13/cobra Demo ⭐⭐⭐⭐⭐
分布式追踪 opentracing/opentracing-go Demo ⭐⭐⭐⭐
并发控制 panjf2000/ants Demo ⭐⭐⭐⭐
国际化 nicksnyder/go-i18n Demo ⭐⭐⭐⭐
机器学习 gorgonia/gorgonia Demo ⭐⭐⭐⭐
区块链 ethereum/go-ethereum Demo ⭐⭐⭐⭐

Go优化实践

文章 关键词 难度
Go程序出问题了?有pprof! pprof ⭐⭐⭐
听说它可以让代码更优雅 静态检查 ⭐⭐

Go项目实践

项目 技术点 难度
Go二维码小游戏 二维码生成 ⭐⭐
文件传输工具 TCP、哈希计算 ⭐⭐
SDK Demo SDK设计、HTTP
Beego RequestId 中间件 Beego
Github OAuth Demo OAuth2.0

技术专栏


关注公众号获取最新更新

image-20231112190005980

有问题或建议可以提交issue,也可以微信公众号进行留言


请作者喝杯咖啡

image-20231112190005980


致谢

感谢JetBrains提供的IDE支持