一、Go语言的起源、发展以及普及
- 学习Go语言
译 Golang 介绍和环境安装 | Golang 教程系列| Go 主题月](juejin.cn/post/694249…)
1.1 Go语言起源
1.2 Go语言的主要特征与发展的环境
1.3 Go语言常犯错误汇总
1.4 Golang书籍推荐
- 1.4.1 Go入门指南 比较适合新手,内容相对基础一些
- 1.4.2 Go语言圣经 书如其名
- 1.4.3 Go语言中文网 找对圈子,学的更快
- 1.4.4 菜鸟教程 这个网站非常适合快速上手某门语言
- 1.4.5 Go语言高级编程 内容适合进阶
- 1.4.6 go语言原本 欧神出品,虽然号称进度只有9.9%/100%,但不妨碍它的优秀,值得一看
- 1.4.7 golang设计模式 设计模式 Golang实现,《研磨设计模式》的golang实现
- 1.4.8 Go实战开发 作者是著名的 Go 开源项目 beego 的作者,他的最佳实践非常值得阅读
- 1.4.9 Go palyground 不用搭建本地 Go 环境,在线就编写 Go 的代码
1.5 Go语言开源项目
- xgen-编写XSD工具基础库,可将XML模式定义为多语言类型或声明的代码
- GQLEngine-高性能Go语言的GraphQL服务端落地框架
- Orange 一款基于Golang语言的Web开发框架
- Go-admin -基于Golang快速搭建可视化数据管理后台的框架
- Go-snowflake Go语言实现的snowflake算法,为分布式系统实现唯一ID,单机测试1s可生成20id
- KubeVela 一个简单易用且高度可扩展的应用管理平台与核心引擎
- TiDB 见识过mysql性能瓶颈之后你会想要选择的一款数据库
- EasyMIDI EasyMidi是一个简单可靠的库,用于处理标准Midi文件(SMF)。
1.6 Go语言环境安装
下载地址: www.golangtc.com/download
GOPATH
二、Go工作环境设置
- 编辑器
1 | diff复制代码- Jetbrains GoLand 强烈推荐 |
- 依赖管理
1 | markdown复制代码- glide |
- Go源码发布
三、包、函数、变量、常量、数据类型
- 包相关
1.1 包
1.2 第三方包
1.3 导入语句
1.3.1 分组导入语句
1.3.2 多个导入语句
1.4 导出名
- 函数相关
2.1 函数操作
从内存分配策略(堆、栈)的角度分析,函数传递指针真的比传值效率高吗?
2.2 函数多返回值
通过汇编看golang函数的多返回值 | 🏆 技术专题第二期征文
2.3 函数值
2.3.1 函数的闭包
- 变量
3.1 变量简介
golang面试题:reflect(反射包)如何获取字段tag?为什么json包不能导出私有变量的tag?
3.2变量的初始化
3.3短变量声明
3.4 零值
没有明确初始值的变量声明会被赋予他们的零值
编程书说的“Go程序员应该让聚合类型的零值也具有意义”是在讲什么
- 零值是:
- 数值类型为0
- 布尔类型为false
- 字符串为””(空字符串)
- 零值和空值的关系
- 零值的空值的区别
- 常量
4.1 常量
4.2 数值常量
- 基本类型
5.1 bool
5.2 string
详解Go regexp包中 ReplaceAllString 的用法
golang的fmt包String(),Error(),Format(),GoString()的接口实现
5.3 int int8 int16 int32 int64uint uint8 uint16 uint32 uint64 uintptr
从goim定制, 浅谈 go interface 解耦合与gRPC
golang面试题:能说说uintptr和unsafe.Pointer的区别吗?
5.4 byte // uint8 的别名
Strings、bytes and runes – 就要学习 Go 语言
go中的strings, bytes, runes 和 characters
5.5 rune unicode码点
Strings、bytes and runes – 就要学习 Go 语言
Golang 中[]byte, string和[]rune的相互转化的底层原理和剖析
5.6 float32 float64
5.7complex64 complex128
5.8 类型转换
Golang 中一个 time.Duration 相关类型转换问题
5.9 类型推倒
四、流程控制语句
流程控制语句:for、if、else、switch、defer
- 循环语句
1.1 for
1.1.1 for循环
Golang 高并发编程For循环中使用Goroutine最容易犯的错误
[Golang]这几个for-range的坑,你必须要会呀,铁汁
1.1.2 初始化语句
1.1.3 条件表达式
1.1.4 循环条件
1.1.5 后置语句
- 判断语句
2.1 IF
2.1.1 if 的简短语句
2.1.2 if 和 else
2.2 switch
switch 的求值顺序
- 后置调用 - defer
3.1 defer
包含该defer语句的函数执行完毕时,defer后的函数才会被执行 -
推迟调用
在一个函数中执行多条defer语句,它们的执行顺序与声明顺序相反。
3.1.1 原理
推迟的函数调用会被压入一个
栈
中。当外层函数返回时,被推迟的函数会按照后进先出的顺序调用。
五、底层数据结构
- 指针
Go 拥有指针。指针保存了值的内存地址。
- 结构体
一个结构体(struct)就是一组字段(field)。
2.1 结构体字段
结构体字段使用点号来引用
2.2 结构体指针
结构体字段可以通过结构体指针来访问
2.3 结构体声明
结构体声明可以通过直接列出字段的值来新分配一个结构体。
- 数组
类型[n]T表示拥有n个T类型的值的数组。
Go之[]byte字节数组与string字符串相互转换juejin.cn/post/684490…
- 切片
每个数组的大小都是固定的。而切片则为数组元素提供动态大小的、灵活的视角。在实践中,切片比数组更常用。
4.1 切片定义
切片就像引用的数组,切片并不直接存储数据,它只是描述了底层数组中的一段。
4.2 切片文法
切片文法类似于没有长度的数组文法。
4.3 切片的默认行为
4.4 切片的长度与容量
4.5 nil切片
连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了。
4.6 用make创建切片
4.7 切片的切片
切片可包含任何类型,甚至包括其它的切片。
4.8 向切片追加元素
4.9 range
for循环的range形式可遍历切片或映射。
- 映射(map)
5.1 映射的文法
5.2 修改映射
五、方法和接口
- 方法
- 指针接收者
- 方法与指针重定向
- 选择值或指针作为接收者
- 接口
2.1 接口理解
2.2 接口与隐式形式
2.3 接口值
2.3.1 nil 的接口值
2.3.2 空接口
2.4 接口类型断言
2.5 接口类型选择
2.6 Stringer
六、错误异常
- 错误
[译] Part 31: golang 中的自定义 error
七、IO读取
- Reader
Golang 最细节篇 —— Reader,ReaderAt 的区别,你如果是做存储的,可千万别搞错了;
- 图像
golang 图像验证码 转载
- 阻塞&非阻塞
Golang 实现轻量、快速的基于 Reactor 模式的非阻塞 TCP 网络库
- 同步vs异步
面试官让我用channel实现sync包里的同步锁,是不是故意为难我?
Visual Studio Live Share - 和你的队友同步共享代码,即时编辑
kingtask:一个由 Go 开发的轻量级的异步定时任务系统
用一个简易的 web chat 说说 Python、Golang、Nodejs 的异步
- Select
八、并发
- 协程相关
Golang 的 协程调度机制 与 GOMAXPROCS 性能调优
- 原子性、可见性、有序性
- 并发控制
go并发之goroutine和channel,并发控制入门篇
九、语言特性
- Goroutine
- Channel
go语言之行–golang核武器goroutine调度原理、channel详解
Golang —— goroutine(协程)和channel(管道)
- GMP模型
十、框架
- Web框架
1.1 Revel
1.2 Beego
1.3 Martini
1.4 Gin Gonic
1.5 Buffalo
1.6 Goji
1.7 Tiger Tonic
1.8 Gocraft
1.9 Mango
1.10 GORM
- 微服务框架
2.1 go-kit
2.2 Micro
2.3 go-zero
2.4 gRPC
Go RPC入门指南1:RPC的使用边界在哪里?如何实现跨语言调用
十一、性能剖析
- Go语言性能分析
多维度思考:如何提高项目的开发时间、提高安全性、提高运行速度,从多个维度带来的一些思考。
十二、问题排查
十三、Golang面试
本文转载自: 掘金