go-tutorial icon indicating copy to clipboard operation
go-tutorial copied to clipboard

Go learning materials,涵盖基础、中级和高级教程

Learning notes for golang

如果发现了本项目里的问题或者想了解本项目里还没涉及到的go语言技术栈,欢迎提交issue

如果觉得本项目不错,欢迎给个Star

基础篇

  • lesson0: GitHub最流行的golang-cheat-sheet中文版本

  • lesson1: Go程序结构

  • lesson2: 数据类型:数字,字符串,bool

  • lesson3: 变量类型定义:全局变量,局部变量,多变量,零值

  • lesson4: 常量和枚举

  • lesson5: 运算操作符

  • lesson6: 控制语句if/switch

  • lesson7: 循环语句for/goto/break/continue

  • lesson8: 函数,闭包和方法

  • lesson9: 变量作用域

  • lesson10: 数组:一维数组和多维数组

  • lesson11: 指针pointer

  • lesson12: 结构体struct

  • lesson13: 切片Slice

  • lesson14: range迭代

  • lesson15: map集合

  • lesson16: 递归函数

  • lesson17: 类型转换

  • lesson18: 接口interface

  • lesson19: 协程goroutine和管道channel

  • lesson20: defer语义

  • lesson21: 并发编程之sync.WaitGroup

  • lesson22: 并发编程之sync.Once

  • lesson23: 并发编程之sync.Mutex和sync.RWMutex

  • lesson24: 并发编程之sync.Cond

  • lesson25: 并发编程之sync.Map

  • lesson26: 并发编程之原子操作sync/atomic

  • lesson27: 包Package和模块Module

  • lesson28: panic, recover运行期错误处理

  • lesson29: select语义

  • lesson30: go单元测试

  • lesson31: go性能测试

  • lesson32: go模糊测试

进阶篇

  • 常用关键字

    • 被defer的函数一定会执行么?
    • new和make的使用区别和最佳实践是什么?
    • receive-only channel和send-only channel的争议
  • 语言基础

    • Go有引用变量和引用传递么?map,channel和slice作为函数参数是引用传递么?
    • 一文读懂Go匿名结构体的使用场景
    • Go语言中fmt.Println(true)的结果一定是true么?
    • Go语言中命名函数参数和命名函数返回值的注意事项
  • 泛型

    • 泛型:Go泛型入门官方教程
    • 泛型:一文读懂Go泛型设计和使用场景
    • 泛型:Go 1.18正式版本将从标准库中移除constraints包
    • 泛型:什么场景应该使用泛型
  • Fuzzing

    • Fuzzing: Go Fuzzing入门官方教程
    • Fuzzing: 一文读懂Go Fuzzing使用和原理
  • Workspace mode工作区模式

    • Go 1.18:工作区模式workspace mode简介
    • Go 1.18:工作区模式最佳实践
  • 语言规范

  • Go开发中的常见错误

    • 第1篇:go未知枚举值
    • 第2篇:go benchmark性能测试的坑
    • 第3篇:go指针的性能问题和内存逃逸
    • 第4篇:for/switch和for/select做break操作退出的注意事项
    • 第5篇:go语言Error管理
    • 第6篇:slice初始化常犯的错误
    • 第7篇:并发编程里的Context管理
    • 第8篇:不使用-race选项做并发竞争检测
  • 高性能Go

  • Go版本演进

    • Go 1.19要来了,看看都有哪些变化:第1篇
    • Go 1.19要来了,看看都有哪些变化:第2篇
    • Go 1.19要来了,看看都有哪些变化:第3篇
    • Go 1.19要来了,看看都有哪些变化:第4篇

Go Quiz

  1. Go Quiz: 从Go面试题看slice的底层原理和注意事项

  2. Go Quiz: 从Go面试题搞懂slice range遍历的坑

  3. Go Quiz: 从Go面试题看channel的注意事项

  4. Go Quiz: 从Go面试题看channel在select场景下的注意事项

  5. Go Quiz: 从Go面试题看分号规则和switch的注意事项

  6. Go Quiz: 从Go面试题看defer语义的底层原理和注意事项第1篇

  7. Go Quiz: 从Go面试题看defer的注意事项第2篇

  8. Go Quiz: 从Go面试题看defer的注意事项第3篇

  9. Go Quiz: Google工程师的Go语言题目

  10. Go Quiz: 从Go面试题看panic注意事项第1篇

  11. Go Quiz: 从Go面试题看函数命名返回值的注意事项

  12. Go Quiz: 从Go面试题看锁的注意事项

  13. Go Quiz: 从Go面试题看变量的零值和初始化赋值的注意事项

  14. Go Quiz: 从Go面试题看数值类型的自动推导

  15. Go questions-golang.design

Go标准库

  • Go标准库之log使用详解

  • Go标准库之cmd命令使用详解

实战篇

代码规范

Web框架

Gin

  • 当前流行的Go web框架比较以及Gin介绍
  • Gin源码结构解析

RPC

gRPC

  • gRPC入门指引
  • gRPC-Go入门教程

Databases

MySQL

  • Tutorial of go-sql-driver/mysql

Redis

  • Tutorial of go-redis/redis

Docker/K8s

Document Tools

Swagger

  • gin-swagger常见问题

CI/CD

  • Jenkins教程01:安装部署

外文翻译

  1. GitHub最流行的golang-cheat-sheet中文版本

  2. 官方博文:Go开发者调研方式改变了

  3. 官方博文:什么场景应该使用泛型

  4. 官方博文:Go工作区模式最佳实践

  5. 官方博文:Go 1.18发布啦!

  6. 官方教程:Go fuzzing模糊测试

  7. 官方教程:Go泛型入门

  8. 官方博文:Go 1.18 Beta 2发布

  9. 官方博文:Go官方推出了Go 1.18的2个新教程

  10. 官方博文:支持泛型的Go 1.18 Beta 1版本正式发布

  11. 官方博文:Go开源12周年

Go环境和工具

  1. GitHub上的项目go get连不上怎么办?

  2. GoLand常用快捷键

  3. Mac的shell切换、环境变量设置以及软件安装问题

  4. Go testing缓存导致测试没执行的问题

  5. go install安装的不同Go版本的可执行程序和源码存放在哪里

  6. Mac系统查看Go开发相关的系统设置

Go Book

Go Blog

Go Video

YouTube

Go Community

  • GoCN: https://github.com/gocn/opentalk
  • Go夜读:https://github.com/talkgo/night

Go News

  • https://go.dev/blog/
  • https://twitter.com/_rsc
  • https://twitter.com/rob_pike
  • https://twitter.com/golang
  • https://twitter.com/golangweekly
  • https://twitter.com/GolangTrends

微信公众号

  • coding进阶:分享Go语言入门、中级到高级教程,以及微服务、云原生架构

    coding进阶