Go知识点总结
本文档汇总了Go语言学习和开发中的重要知识点,为Go语言学习者和开发者提供全面的参考资料。
📋 目录
Go语言特性总览
语言设计理念
Go语言秉承"简洁、高效、可靠"的设计理念:
| 设计原则 | 具体体现 | 优势 |
|---|---|---|
| 简洁性 | 语法简单,关键字少 | 学习成本低,代码可读性强 |
| 高效性 | 快速编译,高性能运行时 | 开发效率高,运行性能好 |
| 并发性 | 原生支持goroutine和channel | 轻松处理高并发场景 |
| 安全性 | 内存安全,类型安全 | 减少运行时错误 |
| 工程性 | 内置工具链,标准化格式 | 团队协作效率高 |
核心特性
1. 静态类型与类型推断
// 显式类型声明
var name string = "Go"
var age int = 13
// 类型推断
name := "Go" // 推断为string
age := 13 // 推断为int
count := int64(100) // 显式类型转换2. 垃圾回收
- 自动内存管理:无需手动管理内存
- 并发GC:不影响程序运行性能
- 低延迟:适合实时应用
3. 接口系统
// 隐式接口实现
type Writer interface {
Write([]byte) (int, error)
}
// 任何实现了Write方法的类型都实现了Writer接口
type FileWriter struct{}
func (f FileWriter) Write(data []byte) (int, error) {
// 实现写入逻辑
return len(data), nil
}4. 并发模型
// Goroutine:轻量级线程
go func() {
fmt.Println("并发执行")
}()
// Channel:通信机制
ch := make(chan int)
go func() {
ch <- 42
}()
result := <-ch核心概念梳理
基础语法
变量和常量
// 变量声明的四种方式
var a int = 10 // 完整声明
var b = 20 // 类型推断
var c int // 零值初始化
d := 30 // 短变量声明
// 常量声明
const Pi = 3.14159
const (
StatusOK = iota // 0
StatusError // 1
StatusTimeout // 2
)数据类型
// 基本类型
var (
b bool = true
i int = 42
f float64 = 3.14
s string = "hello"
)
// 复合类型
var (
arr [5]int // 数组
slice []int // 切片
m map[string]int // 映射
ch chan int // 通道
ptr *int // 指针
)
// 自定义类型
type Person struct {
Name string
Age int
}流程控制
条件语句
// if语句
if x > 0 {
fmt.Println("positive")
} else if x < 0 {
fmt.Println("negative")
} else {
fmt.Println("zero")
}
// switch语句
switch day {
case "Monday":
fmt.Println("工作日")
case "Saturday", "Sunday":
fmt.Println("周末")
default:
fmt.Println("其他")
}循环语句
// for循环的三种形式
for i := 0; i < 10; i++ {
fmt.Println(i)
}
for condition {
// while循环
}
for {
// 无限循环
break
}
// range遍历
for index, value := range slice {
fmt.Printf("index: %d, value: %d\n", index, value)
}函数和方法
函数定义
// 基本函数
func add(a, b int) int {
return a + b
}
// 多返回值
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}
// 可变参数
func sum(numbers ...int) int {
total := 0
for _, num := range numbers {
total += num
}
return total
}
// 函数作为值
var operation func(int, int) int = add
result := operation(3, 4)方法定义
type Rectangle struct {
Width, Height float64
}
// 值接收者方法
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}
// 指针接收者方法
func (r *Rectangle) Scale(factor float64) {
r.Width *= factor
r.Height *= factor
}进阶知识点
并发编程深入
Goroutine池模式
type WorkerPool struct {
workers int
jobs chan Job
results chan Result
}
func NewWorkerPool(workers int) *WorkerPool {
return &WorkerPool{
workers: workers,
jobs: make(chan Job, 100),
results: make(chan Result, 100),
}
}
func (p *WorkerPool) Start() {
for i := 0; i < p.workers; i++ {
go p.worker()
}
}
func (p *WorkerPool) worker() {
for job := range p.jobs {
result := job.Process()
p.results <- result
}
}Context使用
func processWithTimeout(ctx context.Context, data string) error {
ctx, cancel := context.WithTimeout(ctx, 5*time.Second)
defer cancel()
select {
case <-time.After(10 * time.Second):
return errors.New("processing too slow")
case <-ctx.Done():
return ctx.Err()
default:
// 处理数据
return nil
}
}内存管理
内存分配策略
- 栈分配:局部变量,函数参数
- 堆分配:动态分配,逃逸分析决定
- 内存池:减少GC压力
性能优化技巧
// 1. 预分配切片容量
slice := make([]int, 0, expectedSize)
// 2. 字符串拼接优化
var builder strings.Builder
builder.WriteString("hello")
builder.WriteString(" world")
result := builder.String()
// 3. 避免不必要的内存分配
// 使用对象池
var pool = sync.Pool{
New: func() interface{} {
return make([]byte, 1024)
},
}
buf := pool.Get().([]byte)
defer pool.Put(buf)错误处理模式
标准错误处理
func processFile(filename string) error {
file, err := os.Open(filename)
if err != nil {
return fmt.Errorf("failed to open file %s: %w", filename, err)
}
defer file.Close()
// 处理文件
return nil
}自定义错误类型
type ValidationError struct {
Field string
Message string
}
func (e ValidationError) Error() string {
return fmt.Sprintf("validation failed for field %s: %s", e.Field, e.Message)
}
func validateUser(user User) error {
if user.Name == "" {
return ValidationError{
Field: "name",
Message: "name cannot be empty",
}
}
return nil
}实战经验总结
项目结构最佳实践
project/
├── cmd/ # 应用程序入口
│ └── server/
│ └── main.go
├── internal/ # 私有代码
│ ├── handler/ # HTTP处理器
│ ├── service/ # 业务逻辑
│ └── repository/ # 数据访问
├── pkg/ # 可导出的库代码
│ └── utils/
├── api/ # API定义
├── configs/ # 配置文件
├── scripts/ # 脚本文件
├── docs/ # 文档
├── go.mod
└── go.sum代码规范
命名约定
// 包名:小写,简短,有意义
package user
// 常量:驼峰命名,或全大写
const MaxRetries = 3
const API_VERSION = "v1"
// 变量:驼峰命名
var userCount int
var isAuthenticated bool
// 函数:驼峰命名,动词开头
func GetUserByID(id int) (*User, error)
func ValidateEmail(email string) bool
// 类型:驼峰命名,名词
type UserService struct{}
type HTTPClient interface{}注释规范
// Package user provides user management functionality.
package user
// User represents a user in the system.
type User struct {
ID int `json:"id"`
Name string `json:"name"`
}
// GetUserByID retrieves a user by their ID.
// It returns an error if the user is not found.
func GetUserByID(id int) (*User, error) {
// 实现逻辑
}测试策略
单元测试
func TestAdd(t *testing.T) {
tests := []struct {
name string
a, b int
expected int
}{
{"positive numbers", 2, 3, 5},
{"negative numbers", -1, -2, -3},
{"zero", 0, 5, 5},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result := Add(tt.a, tt.b)
if result != tt.expected {
t.Errorf("Add(%d, %d) = %d; want %d",
tt.a, tt.b, result, tt.expected)
}
})
}
}基准测试
func BenchmarkStringConcat(b *testing.B) {
for i := 0; i < b.N; i++ {
result := "hello" + " " + "world"
_ = result
}
}
func BenchmarkStringBuilder(b *testing.B) {
for i := 0; i < b.N; i++ {
var builder strings.Builder
builder.WriteString("hello")
builder.WriteString(" ")
builder.WriteString("world")
_ = builder.String()
}
}学习资源推荐
官方资源
- Go官网:https://golang.org/
- Go文档:https://golang.org/doc/
- Go标准库:https://golang.org/pkg/
- Go博客:https://blog.golang.org/
学习路径建议
初级阶段(1-2个月)
- 学习基础语法和数据类型
- 掌握流程控制和函数
- 理解包和模块系统
- 练习基本的程序编写
中级阶段(3-6个月)
- 深入学习并发编程
- 掌握接口和反射
- 学习错误处理最佳实践
- 了解性能优化技巧
高级阶段(6个月以上)
- 研究Go运行时和内存管理
- 学习微服务架构设计
- 掌握云原生开发
- 参与开源项目贡献
实践项目推荐
- CLI工具:命令行应用开发
- Web服务:HTTP服务器和API开发
- 微服务:分布式系统架构
- 数据处理:并发数据处理管道
- 系统工具:系统监控和运维工具
🧑🤝🧑 Rob Pike谈Google Go

Google · Go语言之父
1. Rob,你创建了Google Go这门语言。什么是Google Go?能简明扼要的介绍一下Google Go吗?
2. Go的主要特点是什么?有什么重要功能?
3. 在我们继续话题之前,能否解释一下为什么Go编译器能达到那么快的编译速度呢?有什么法宝?
4. 让我们开始聊聊Go里的类型系统吧。Go里面有结构(struct)、有类型(type),那么Go里的类型是什么?
5. 那么这些方法只是在包内部可见喽?
6. 你的意思是,我可以给int增加方法,但是必须先使用typedef吗?
7. 你们借鉴了Ruby里开放类的思想,这很有意思。Ruby的开放类实际上是可以修改类并增加新的方法,这是有破坏性的,但是你们的方法本质上是安全的,因为创建了新的东西。
8. 你还提到了typedef,是叫typedef吧?
9. Typedef在C里是一种预处理指令吗?【编辑注/免责申明:C语言里的typedef与预处理无关】
10. 我们从底层说起吧,在Go里最小的类型是什么?
11. 但是,int这样的类型是值类型对吧.
12. 它们类似C++的引用吗?
13. 它是结构内部一个复合对象。
14. 你提到过接口比较有趣,那下面咱们就谈谈这一部分。
15. 某种程度上有点类似结构化类型系统(structural typing)
16. 你提到过类,但Go没有类,对吧。
17. 但是没有类怎么去写代码?
18. 如果我有一些行为要实现,而且想放在多个structs里,怎么去共享这些行为?
19. 如果有多重继承命名冲突的问题该怎么办?
20. 因为系统中没有根对象或根类,如果我想得到一个拥有不同类型的结构的列表,应该怎么办?
21. Go里有叫做Goroutines的东西,它们和coroutines有什么区别?不一样么?
22. 你提到你们使用了m:n线程模型,即m个coroutines映射到n个线程上?
23. Goroutines有用于通信的通道吗?
24. 你提到你们有缓存的同步通道和异步通道。
25. 每个Goroutine就像是一个小的线程,可以这么给读者解释吧。
26. 它们是轻量级的。但是每个线程同样都预分配栈空间,因而它们非常耗费资,Goroutines是怎么处理的呢?
27. 我们再来谈谈自动化方面的东西,最初你们是将Go语言作为系统级语言来推广的,一个有趣的选择是使用了垃圾回收器,但是它速度并不快或者说有垃圾回收间歇问题,如果用它写一个操作系统的话,这是非常烦人的。你们是怎么看这一问题的?
28. 有没有方法能够避免直面垃圾回收器,比如用一些大容量缓存,我们可以把数据扔进去。
29. 最后一个问题:Go是系统级语言还是应用级语言?
📚 资料包

📕 书籍
入门
《Go语言趣学指南》
《Go语言从入门到进阶实战》
进阶
《Go语言高并发与微服务实战》
📖 文章
💽 视频
| title | Link |
|---|---|
| 【golang云原生】 golang实现行程码、健康码识别 | 点击观看 |
| 【golang云原生】 golang 实现ping网络指令 | 点击观看 |
| 【golang云原生】golang 借助公有云实现点播转直播 | 点击观看 |
| 【golang云原生】如何使用gin框架构建web项目脚手架 | 点击观看 |
| 【golang云原生】 为什么jwt会被广泛应用 | 点击观看 |
| 【golang云原生】 golang实现生产者消费者模式 | 点击观看 |
| 【golang云原生】 go语言UDP网络编程之发送DNS请求 | 点击观看 |
| 【golang云原生】 go语言快速实现一个web互动直播(一) | 点击观看 |
| 【golang云原生】go语言快速实现一个web互动直播(二) | 点击观看 |
| 【golang云原生】golang实现文件上传到对象存储 | 点击观看 |
| 【golang云原生】论一款强大的验证组件在web开发中的重要性 | 点击观看 |
| 【golang云原生】golang配合公有云实现机器人流量的拦截 | 点击观看 |
| 【golang云原生】golang面试题实现一个内存缓存系统 | 点击观看 |
| 【golang云原生】最受欢迎的开源日志框架logrus实战应用 | 点击观看 |
| 【golang云原生】基于公有云快速实现邮件推送 | 点击观看 |
🏗 开源项目(段位纯属分类管理,不分先后)
王者段位
| 项目 | 简介 |
|---|---|
| docker | 无人不知的虚拟化平台,开源的应用容器引擎,借助该引擎,开发者可以打包他们的应用,移植到任何平台上。 |
| golang | go本身,也是用go语言实现的,包括他的编译器,要研究go源代码的可以看此项目录 |
| kubernetes | Google出品,用于调度和管理docker的开源容器管理系统,利用他,可以方便的管理你的docker实例,哪怕非常多,也是目前最流行的docker管理系统。 |
| gogs | 一款基于git的代码托管系统,类似于github和gitlab,不过其小巧易用,功能强大,部署方便,也有不少用户在使用。 |
| syncthing | 开源的文件同步系统,它使用了其独有的对等自由块交换协议,速度很快,据说可以替换BitTorrent Sync。 |
| grafana | 一款开源监控度量的看板系统,可以接Graphite、Elasticsearch、InfluxDB等数据源,定制化很高。 |
| etcd | 一款分布式的,可靠的K-V存储系统,使用简单,速度快,又安全。 |
| hub | 一款更便捷使用github的工具,包装并且扩展了git,提供了很多特性和功能,使用和git差不多。 |
| influxdb | 可伸缩的数据库,使用场景主要用来存储测量数据,事件点击以及其他等实时分析数据,用来做监控性能很不错。 |
| caddy | 快速的,跨平台的HTTP/2 Web服务器。 |
| beego | 国产开源的高性能Web框架,让你快速的开发Go Web应用服务,谢大主笔。 |
| martini | 也是一款不错的Web框架。 |
| cayley | Google开源的图数据库,这是一个NoSql数据库,适合处理复杂的,但是结构化低的数据,适用于社交网络,推荐系统等。 |
| nsq | 一款开源的实时的,分布式的消息中间件系统。 |
| codis | Codis是一个分布式Redis解决方案,其实就是一个数据库代理,让你在使用Redis集群的时候,就像使用单机版的Redis是一样的,对开发者透明。 |
| delve | 这个Go开发者都知道,一款go应用开发的调试工具。 |
| cobra | cobra是一个命令行go库,可以让你创建非常强大的,现代的CLI命令行应用。 |
| megaease/easegress | 云本地流量编排系统 |
大师段位
| 项目 | 简介 |
|---|---|
| Viper | Viper 是一个完整的 Go 应用配置解决方案。 |
| echo | 高性能、极简主义的 Go Web 框架 |
| uber-go/fx | 一个基于依赖注入的 Go 应用框架。 |
| Swagger | 生成器、UI 和验证 |
| Logrus | Logrus 是一个适用于 Go(golang) 的结构化记录器,与标准库记录器完全 API 兼容。 |
| mockery | Golang 的模拟代码自动生成器 |
| migrate | 用 Go 编写的数据库迁移。作为 CLI 使用或作为库导入。 |
| NSQ | 消息传递 |
| sqlx | sqlx 是一个库,它在 Go 的标准 database/sql 库上提供了一组扩展。 |
| Macaron | 一款具有高生产力和模块化设计的 Go Web 框架 |
| Gin | 轻量 Web 框架 |
| zinx | TCP并发服务器框架 |
| Negroni | Web 中间件 |
| csrf | CSRF 中间件 |
| handlers | Go的net/http包的有用处理程序集合 |
| SizedWaitGroup | 并发控制 |
| concurrent | 并发工具包 |
| grab | 文件下载 |
| go-netty | 网络框架 |
钻石段位
| 项目 | 简介 |
|---|---|
| gorilla/websocket | Go的一个快速、经过良好测试和广泛使用的WebSocket实现。 |
| nhooyr/websocket | 常用的Go WebSocket库 |
| websocketd | Go 开发的一键搭建 WebSocket 服务器命令行工具 |
| ws | WebSocket 开发包 |
| melody | WebSocket 服务框架 |
| neffos | 一个现代的、快速的、可扩展的websocket框架,带有优雅的Go API |
| fastws | fastttp和net/http的快速WebSocket实现。默认支持并发读写操作。 |
| Centrifugo | 实时消息服务器,可以与任何语言编写的应用程序后端结合使用 |
| goim | 支持集群的 im 及实时推送服务 |
| Tinode | 即时消息服务器,通过 websocket/JSON 或 gRPC/TCP 等协议传输 |
| WebRTC | WebRTC 实现 |
| Berty | 安全的点对点通讯软件 |
| Keybase | 即时通讯工具 Keybase 全平台客户端 |
| golang/protobuf | Go 版本的 Protocol Buffers |
| gogo/protobuf | golang/protobuf 的扩展替代品 |
| Objx | 操作 map、slice、JSON 等数据的包 |
| gorilla/rpc | 构建基于 HTTP 的 RPC 服务,比如 JSON-RPC |
| Twirp | 基于 Protobuf 的 RPC 框架,与 gRPC 类似 |
铂金段位
| 项目 | 简介 |
|---|---|
| dubbo-go | Apache Dubbo Go 语言实现,架起 Java 和 Golang 之间的桥梁,与 gRPC/Spring Cloud 生态互联互通,带领 Java 生态享受云原生时代的技术红利 |
| NSQ | 实时分布式消息平台 |
| NATS | 云原生消息中间件 |
| sarama | Kafka 客户端 |
| InfluxDB | 时间序列数据库 |
| Thanos | 支持 Prometheus 简化部署、高可用、分布式存储 |
| CockroachDB | 分布式 SQL 数据库 |
| RadonDB | 基于 MySQL 研发的新一代分布式关系型数据库 |
| TiDB | 分布式关系型数据库,兼容 MySQL 协议 |
| AresDB | Uber 开源的 GPU 驱动的实时分析存储&查询引擎 |
| leveldb | LevelDB 的 Go 实现 |
| GCache | golang的内存缓存库。支持多种驱逐政策:LRU、LFU、ARC |
| go-cache | Go的内存键:值存储/缓存(类似于Memcached)库,适用于单机应用程序。 |
| groupcache | 分布式缓存 |
| cachego | 支持 Redis、Bolt 等缓存接口 |
| go-tagexpr | 字节跳动开源的结构体标签表达式解释器 |
| goav | FFmpeg 视频处理 |
| rosedb | 基于 bitcask 的 k-v 存储模型,高效、快速、简洁 |
🖼 大厂实战分享ppt
- Go in TiDB
- Go 如何助力企业进行微服务转型
- Golang 内存管理探微&mdash&mdash,如何高效使用 Golang 内存以及腾讯云实战-杨晖
- Golang主动式内存缓存的优化探索之路
- Golang在百万亿搜索引擎中的应用
- Golang在阿里巴巴调度系统Sigma中的实践
- Go在大数据开发中的经验总结
- Go在探探后端的工程实践
- Go在证券行情系统中的应用
- Go微服务实战
- Go打造亿级实时分布式平台
- Go语言在讯联扫码支付系统中的成功实践
- Go语言在证券期货行情系统中的实践
- Go语言的抢占式调度
- Improving Go Backend Developer Experience in Grab
- Processing XML and Spreadsheet Data in Go
- The Zen of Go
- Tracing in TiDB
- goplus-gopher-china
- 云原生技术在2B交付中的实践
- 利用夜莺扩展能力打造全方位监控系统
- 基于 Golang 构建高可扩展的云原生 PaaS 平台
- 基于Kubernetes的私有云实战
- 大规模场景下Kubernetes Service负载均衡性能优化
- 天猫DevOps转型实践
- 如何用Go模拟CPU
- 字节跳动在 Go 网络库上的实践
- 深入Go Module
- 深入理解BFE
- 罗辑思维Go语言微服务改造实践
- 谈如何构建易于拆分的单体应用
- 跨境电商的Go服务治理实践
- 阿里巴巴新一代基于 Go 的云原生应用引擎实践
📄 论文与理论分析
| Title | Translation(参考) | Company |
|---|---|---|
| 《Acme: A User Interface for Programmers》 | 程序员的用户界面 | AT&T,贝尔实验室 |
| 《Understanding Real-World Concurrency Bugs in Go》 | 了解真实go中的并发bug | 宾夕法尼亚州立大学 |
| 《A Formal Model of the Kubernetes Container Framework》 | Kubernetes容器框架的形式化模型 | 奥斯陆大学 |
| 《Running Cloud Native Applications on DigitalOcean Kubernetes》 | 在DigitalOcean Kubernetes上运行云本地应用 | 未知 |
| 《Kubernetes as an Availability Manager for Microservice Applications》 | Kubernetes作为微服务应用程序的可用性管理器 | 康科迪亚大学 |
| 《Borg, Omega, and Kubernetes》 | Borg、Omega 和 Kubernetes | |
| 《A Raft-based HTAP Database》 | 基于raft的HTAP数据库 | VLDB基金会论文集 |
| 《For Reproducible Environments and Containerized Applications》 | 用于可复制环境和容器化应用程序 | 圣克劳德州立大学 |
| 《Escape from Escape Analysis of Golang》 | golang逃离分析 | 清华大学 |
| 《Using gRPC with Go》 | 在Go中使用gRPC | 未知 |
☁ 云原生
这里我们讲云原生,主要目的是为了大家如何利用云原生技术,快速地使用go语言开发。而不是研究云原生本身的技术。
我们以腾讯云为例,列举腾讯云为我们提供的云原生接口项目:(列举部分我们常见的)
- 实时音视频
- 混流转码
- 房间管理
- 其他接口
- 通话质量监控
- 云点播
- 视频处理
- 参数模板
- 其他接口
- 任务流
- 分发
- 媒资管理
- 视频上传
- 事件通知
- AI 样本管理
- 视频分类
- 任务管理
- 域名管理
- 数据统计
- 视频处理
- 视频处理
- 工作流管理
- 其他接口
- 解析事件通知
- AI 样本管理
- 参数模板
- 任务管理
- 腾讯云剪
- 平台管理
- 项目管理
- SaaS 平台管理
- Headless媒体合成
- 任务管理
- 视频编辑项目
- 媒体资源管理
- 媒资授权
- 团队管理
- 分类管理
- 登录态管理
- 其他接口
- 智能编辑
- 画质重生任务
- 媒体质检任务
- 编辑理解
- 编辑处理
- 即时通信 IM
- 获取云通信 IM 的 SDKAppid
- 短信
- 短信统计
- 发送短信
- 拉取状态
- 短信模板
- 短信签名
- 分布式消息队列
- 集群
- 命名空间
- 主题
- 消息
- CMQ管理
- CMQ消息
- 其他接口
- 生产消费
- 消息队列 Ckafka
- 主题
- ACL
- 实例
- 路由
- 其他接口
- 验证码
- 控制台
- 服务器
- 文本内容安全
- 图片内容检测
- 图片内容审核
- 图片内容检测
- 音频内容检测
- 创建音频审核任务
- 查看任务详情
- 查看审核任务列表
- 短音频识别接口
- 取消任务
- 视频内容安全
- 查看审核任务列表
- 查看任务详情
- 创建视频审核任务
- 取消任务
- 文字识别
- 通用文字识别
- 卡证文字识别
- 票据单据识别
- 汽车场景识别
- 行业文档识别
- 智能扫码
- 营业执照核验
- 增值税发票核验
- 图像分析
- 图像理解
- 图像处理
- 图像审核
- 图像质量检测
- 智能识图
- 商品识别
- 语音识别
- 语音流异步识别
- 录音文件识别
- 一句话识别
- 自学习
- 热词
- 语音合成
- 长文本语音合成
- 通用语音合成
- 智能语音服务
- 语音合成
- 其他接口
- 语音识别
- 云直播
- 水印管理
- 证书管理
- 录制管理
- 直播流管理
- 延播管理
- 直播拉流
- 直播转码
- 截图鉴黄
- 鉴权管理
- 域名管理
- 直播回调
- 统计查询
- 实时日志
- 直播混流
- 小程序 · 云直播
- live
- 其他接口
- 直播
- 人脸识别
- 人脸检测与分析
- 五官定位
- 人脸比对
- 人员库管理
- 人脸搜索
- 人脸验证
- 人脸静态活体检测(高精度版)
- 人脸静态活体检测
- 人员查重
- 内容安全
- 内容安全
- 图片内容安全
- 文本内容安全
- 自定义识别
- 自然语言处理
- 向量技术
- 词法分析
- 句法分析
- 篇章分析
- 知识图谱
- 对话机器人
......
📥 源码下载
Go官网下载地址:https://golang.org/dl/
Go官方镜像站(推荐):https://golang.google.cn/dl/
🏃♂ 开启Go语言学习之旅,从"Hello World"开始!

Step 1:了解源代码目录结构

| 文件名 | 文件属性 |
|---|---|
| AUTHORS | 文件,官方 Go语言作者列表 |
| CONTRIBUTORS | 文件,第三方贡献者列表 |
| LICENSE | 文件,Go语言发布授权协议 |
| PATENTS | 文件,专利 |
| README | 文件,README文件,大家懂的。提一下,经常有人说:Go官网打不开啊,怎么办?其实,在README中说到了这个。该文件还提到,如果通过二进制安装,需要设置GOROOT环境变量;如果你将Go放在了/usr/local/go中,则可以不设置该环境变量(Windows下是C:\go)。当然,建议不管什么时候都设置GOROOT。另外,确保$GOROOT/bin在PATH目录中。 |
| VERSION | 文件,当前Go版本 |
| api | 目录,包含所有API列表,方便IDE使用 |
| doc | 目录,Go语言的各种文档,官网上有的,这里基本会有,这也就是为什么说可以本地搭建”官网”。这里面有不少其他资源,比如gopher图标之类的。 |
| favicon.ico | 文件,官网logo |
| include | 目录,Go 基本工具依赖的库的头文件 |
| lib | 目录,文档模板 |
| misc | 目录,其他的一些工具,相当于大杂烩,大部分是各种编辑器的Go语言支持,还有cgo的例子等 |
| robots.txt | 文件,搜索引擎robots文件 |
| src | 目录,Go语言源码:基本工具(编译器等)、标准库 |
| test | 目录,包含很多测试程序(并非_test.go方式的单元测试,而是包含main包的测试),包括一些fixbug测试。可以通过这个学到一些特性的使用。 |
Step 2:Golang开发后台掌握哪些知识点?
这里我给大家整理归纳为四大块,分别是语法、中间件、后端开发、云原生。
我们通过这个四个板块的学习,逐步进阶成一个可以从事后端服务器开发的工程师。

下面我们简单介绍中间件和云原生:
中间件
MySQL、Redis、MongoDB、Kafka这些常见的中间件,这里我们不做赘述。我们着重简述下Gin、etcd、ElasticSearch、gRPC。
Gin
Gin是一个用Go (Golang)编写的HTTP web框架。它具有一个类似martinii的API,性能要好得多——快了40倍。
官方Github项目:https://github.com/gin-gonic/ginetcd
Etcd是一种强一致性的分布式键值存储,它提供了一种可靠的方法来存储需要被分布式系统或机器集群访问的数据。它可以在网络分区期间优雅地处理leader选举,并且可以容忍机器故障,即使是leader节点。
官网:https://etcd.io/ElasticSearch
Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。
官网:https://www.elastic.co/cn/elasticsearch/gRPC
gRPC是一个现代的开源高性能远程过程调用(Remote Procedure Call, RPC)框架,可以在任何环境中运行。通过对负载平衡、跟踪、运行状况检查和身份验证的可插拔支持,它可以有效地连接数据中心内和跨数据中心的服务。它也适用于分布式计算的最后一英里,将设备、移动应用程序和浏览器连接到后端服务。
官网:https://grpc.io/
云原生
微服务
微服务是一种软件架构风格,它是以专注于单一责任与功能的小型功能区块为基础,利用模块化的方式组合出复杂的大型应用程序,各功能区块使用与语言无关的API集相互通信。DevOps
DevOps是一种重视“软件开发人员”和“IT运维技术人员”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。持续部署
持续部署,是一种软件工程方法,意指在软件开发流程中,以自动化方式,频繁而且持续性的,将软件部署到生产环境中,使软件产品能够快速的发展。 持续部署可以整合到持续整合与持续交付(Continuous delivery)的流程之中。容器化
容器化是软件开发的一种方法,通过该方法可将应用程序或服务、其依赖项及其配置(抽象化为部署清单文件)一起打包为容器映像。 容器化应用程序可以作为一个单元进行测试,并可以作为容器映像实例部署到主机操作系统 (OS)。
Step 3:如何高效地学习Go?
想要高效地的学习Golang,单单知道学习哪几个板块,是远远不够的。我们还需要将每个板块的知识点进一步细化。
——成功与失败之间,最重要的是不容忽视的细节
那么开始进一步完善之前的知识点:

语法
- 语法基础
- 错误处理
- 包定义以及导入
- 结构体
- 反射原理
- 值传递、引用传递、defer函数
- 并发编程
- goroutine
- 锁
- 通道channel
- runtime包
- Context使用原则
- 网络编程
- tcp/udp编程
- http实现
- websocket
- 源码掌握
- GC机制
- 调度器
- 定时器
- map与切片
- 第三方测试框架
- goconvey
- gostub
- gomock
- monkey

中间件
- MySQL
- golang的CRUD
- jmorion/sqlx包
- 连接池
- 异步mysql
- Gin
- RESTful API
- URL查询参数
- query接收数组和Map
- 表单参数
- 上传文件
- 分组路由routel以及中间件授权
- json、struct、xml、yaml、protobuf渲染
- Redis
- go-redis
- get/set/zset操作
- 连接池
- 分布式锁
- MongoDB
- MongoDB-driver
- BSON解析
- CRUD操作
- 文档管理
- 连接池
- Kafka
- saram包
- 同步、异步
- zstd压缩算法
- 横向扩展
- go实现生产消费者
- topic和partition
- 消息分发策略
- 分区副本机制
- etcd
- 原理
- 分布式锁
- etcd操作
- 服务发现于注册
- ElasticSearch
- es服务器
- go- elasticsearch包
- node于cluster
- Index于Document
- 检测与配置
- gRPC
- protoc-gen-go开发包
- .proto文件
- gRPC Service Stub
- rpc接口设计
- 通信模式
- 拦截器
- 多路复用
- 负载均衡
- 安全认证

后端开发
- 游戏后端
- leaf框架
- 网关、协议、日志、网络模块
- 流媒体Web后端
- Restful接口设计
- scheduler设计
- apidefs结构体
- mysql建库建表
- 小程序后端
- 公众号开发流程
- 微信消息接收与解析
- 公众号验证URL+Token
- 内网环境接口测试
- 后端程序测试脚本
- goadmin后台权限管理系统
- RESTful API设计
- Gin框架
- JWT认证
- 支持Swagger文档
- GORM对象关系映射
- 基于Casbin的RBAC访问控制模型
- goim千万级高并发推送服务
- 单个、多个、广播消息推送
- 应用心跳、tcp、keepalive、http log pulling
- 异步消息推送
- 接入层多协议
- 可拓扑架构
- 注册发现服务
- 消息协议(protobuf)
- goim推送
- grpc编程
- 腾讯云大数据
- TBDS
- 云数据仓库PostgreSQL
- 弹性MapReduce
- WeData数据开发平台

云原生
- 微服务
- go-micro原理
- rpc
- 服务间同步
- json/protobuf
- DevOps
- 项目管理 CODING-PM
- 测试管理 CODING-TM
- 制品库 CODING-AR
- 代码托管 CODING-CR
- 持续部署
- spinnake
- webhook外部对接
- 蓝绿分布/金丝雀发布
- SCF云函数
- 快速回滚
- 容器化
- Docker化部署
- k8s集群
- CVM云服务器
- TKE容器服务
🤝 鸣谢
本repo励志作为全网golang资料最全的repo,因此非常感谢各位贡献patch的朋友, 还有很多在issue里面出谋划策的朋友,为此衷心感谢。
联系专栏
零声教育,专注于c/c++Linux后台服务器开发架构技术学习提升。
每天晚上8点【免费技术直播】:分享Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习。
关注微信公众号【后台服务架构师】——【联系我们】,获取本repo最全PDF学习文档!
