《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
AI时代Go语言学习路线:博客链接
相关学习资源:
在线地址(更新到第30篇):Go小技巧&易错点100例专栏
CSDN:《Go语言小技巧&易错点100例》
微信公众号:Go小技巧&易错点100例
扫码订阅:
标题 | 代码 | 关键词 | 数量 | 难度 |
---|---|---|---|---|
开篇词 | - | 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语言内存模型 | Go内存模型、goroutine | ⭐⭐ |
Go错误处理方式真的不好吗? | 错误处理 | ⭐⭐ |
莫非这就是Go最佳协程池 | goroutine、池化思想 | ⭐⭐ |
原来go build命令有这么多学问 | 编译原理 | ⭐⭐ |
Go程序最多能创建多少个协程? | goroutine的销毁、线程、内存、协程 | ⭐⭐⭐ |
搞懂Go泛型,看这一篇就够了 | 泛型 | ⭐⭐ |
搞懂策略模式和模板方法模式 | 策略模式、模板方法模式 | ⭐ |
浅谈Go语言Optional模式和Builder模式 | Optional模式、Builder模式 | ⭐ |
函数式编程能有多优雅? | 函数式编程 | ⭐⭐ |
为什么说组合优于继承? | 面向对象 | ⭐⭐ |
浅谈Go语言深拷贝与浅拷贝 | 面向对象 | ⭐⭐ |
快来看!你的Go代码还能更优雅 | 面向对象 | ⭐⭐ |
Go语言的Fan-In并发模式 | 并发 | ⭐⭐ |
一文搞懂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程序出问题了?有pprof! | pprof | ⭐⭐⭐ |
听说它可以让代码更优雅 | 静态检查 | ⭐⭐ |
项目 | 技术点 | 难度 |
---|---|---|
Go二维码小游戏 | 二维码生成 | ⭐⭐ |
文件传输工具 | TCP、哈希计算 | ⭐⭐ |
SDK Demo | SDK设计、HTTP | ⭐ |
Beego RequestId 中间件 | Beego | ⭐ |
Github OAuth Demo | OAuth2.0 | ⭐ |
有问题或建议可以提交issue,也可以微信公众号进行留言
感谢JetBrains提供的IDE支持