对Golang一知半解?这里是上百篇掘金Golang优质文章| Go主题月

31,132

一、Go语言的起源、发展以及普及

1. 学习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语言开源项目

  1. xgen-编写XSD工具基础库,可将XML模式定义为多语言类型或声明的代码
  2. GQLEngine-高性能Go语言的GraphQL服务端落地框架
  3. Orange 一款基于Golang语言的Web开发框架
  4. Go-admin -基于Golang快速搭建可视化数据管理后台的框架
  5. Go-snowflake Go语言实现的snowflake算法,为分布式系统实现唯一ID,单机测试1s可生成20id
  6. KubeVela 一个简单易用且高度可扩展的应用管理平台与核心引擎
  7. TiDB 见识过mysql性能瓶颈之后你会想要选择的一款数据库
  8. EasyMIDI EasyMidi是一个简单可靠的库,用于处理标准Midi文件(SMF)。

1.6 Go语言环境安装

下载地址: www.golangtc.com/download

GOPATH

二、Go工作环境设置

1. 编辑器

- Jetbrains GoLand  强烈推荐
- Jetbrains IDEA + go插件
- VS Code
- Atom
- liteide
- Sublime Text

2. 依赖管理

- glide
	- 安装:<https://glide.sh/>
	- 初始化
	- 依赖下载
- mod

3. Go源码发布

三、包、函数、变量、常量、数据类型

1. 包相关

Go语言json包的使用技巧

1.1 包

拜拜了,GOPATH君!新版本Golang的包管理入门教程

Go的包管理工具(一)

Go 语言标准库 text/template 包深入浅出

Go 语言闭包详解

Go 包管理工具 govendor 使用指南

1.2 第三方包

1.3 导入语句

1.3.1 分组导入语句

1.3.2 多个导入语句

1.4 导出名

Go语法之包、导入包、导出名

2. 函数相关

Go语言从入门到精通:函数

2.1 函数操作

[译] 解析 Go 中的函数调用

[译] Go 函数调用 Redux

Go中的init函数

Golang中函数传参存在引用传递吗?

Golang 函数式编程简述

从内存分配策略(堆、栈)的角度分析,函数传递指针真的比传值效率高吗?

一篇文章 说清楚 Go语言里的函数

2.2 函数多返回值

通过汇编看golang函数的多返回值 | 🏆 技术专题第二期征文

2.3 函数值

2.3.1 函数的闭包

Go 语言闭包详解

go 学习笔记之仅仅需要一个示例就能讲清楚什么闭包

GO-三个方面理解闭包

Go 语言中的闭包实现

3. 变量

3.1 变量简介

Golang环境变量设置详解

Go初始化变量的招式

Golang并发之共享内存变量

Golang从零开始:命名规范、变量和常量

【Go学习之路】Go变量

CGO_ENABLED环境变量对Go静态编译机制的影响

golang面试题:reflect(反射包)如何获取字段tag?为什么json包不能导出私有变量的tag?

3.2变量的初始化

3.3短变量声明

GO的短变量声明

3.4 零值

没有明确初始值的变量声明会被赋予他们的零值

编程书说的“Go程序员应该让聚合类型的零值也具有意义”是在讲什么

Golang 零值、空值与空结构

  • 零值是:
    • 数值类型为0
    • 布尔类型为false
    • 字符串为""(空字符串)
  • 零值和空值的关系
  • 零值的空值的区别

4. 常量

4.1 常量

Golang从零开始(二):命名规范、变量和常量

Golang学习——常量const和iota

golang进阶一:类型比较,常量,nil

4.2 数值常量

5. 基本类型

5.1 bool

5.2 string

Go之如何截取string字符串?截取英文与中文字符串

Go系列 string、bytes、rune的区别

详解Go regexp包中 ReplaceAllString 的用法

Go之int整数与string字符串相互转换

golang中你不知道的 string

Go 标准库介绍一: strings

golang的fmt包String(),Error(),Format(),GoString()的接口实现

5.3 int int8 int16 int32 int64uint uint8 uint16 uint32 uint64 uintptr

Golang 中 int,int64 和字符串互转(译文)

原来这才是 Go Interface

Golang interface接口深入理解

从goim定制, 浅谈 go interface 解耦合与gRPC

golang面试题:能说说uintptr和unsafe.Pointer的区别吗?

Golang中MulUintptr实现原理

5.4 byte // uint8 的别名

Go系列 string、bytes、rune的区别

Go之[]byte字节数组与string字符串相互转换

Strings、bytes and runes -- 就要学习 Go 语言

go中的strings, bytes, runes 和 characters

5.5 rune unicode码点

Go系列 string、bytes、rune的区别

Golang 中 runes 和 字符串互转(译文)

Strings、bytes and runes -- 就要学习 Go 语言

Golang 中[]byte, string和[]rune的相互转化的底层原理和剖析

5.6 float32 float64

5.7complex64 complex128

5.8 类型转换

Go基础类型转换

golang中的四种类型转换总结

Golang 中一个 time.Duration 相关类型转换问题

5.9 类型推倒

四、流程控制语句

流程控制语句:for、if、else、switch、defer

1. 循环语句

1.1 for

1.1.1 for循环

昨天那个在for循环里append元素的同事,今天还在么?

Golang 高并发编程For循环中使用Goroutine最容易犯的错误

Go语言性能优化- For Range 性能研究

[Golang]这几个for-range的坑,你必须要会呀,铁汁

1.1.2 初始化语句

1.1.3 条件表达式

关于变量在 if-else 条件表达式里的作用域范围

1.1.4 循环条件

1.1.5 后置语句

2. 判断语句

2.1 IF

2.1.1 if 的简短语句

2.1.2 if 和 else

2.2 switch

Go 语言流程控制:switch-case

[译] part 10: golang switch 语句

switch 的求值顺序

3. 后置调用 - defer

3.1 defer

   包含该defer语句的函数执行完毕时,defer后的函数才会被执行 -推迟调用
   在一个函数中执行多条defer语句,它们的执行顺序与声明顺序相反。

3.1.1 原理

  推迟的函数调用会被压入一个中。当外层函数返回时,被推迟的函数会按照后进先出的顺序调用。

Go 延迟函数 defer 详解

go 学习笔记之咬文嚼字带你弄清楚 defer 延迟函数

五、底层数据结构

1. 指针

   Go 拥有指针。指针保存了值的内存地址。

Golang研学:在用好Golang指针类型

彻底学会 Go 指针 -- 就要学习 Go 语言

Golang中range指针数据的坑

Golang 指针:使用方法、特点 和 运算

Go之反射实现类型与指针拷贝

2. 结构体

   一个结构体(struct)就是一组字段(field)。

golang | Go语言入门教程——结构体初始化与继承

15. 理解 Go 语言面向对象编程:结构体与继承

包罗万象的结构体 -- 就要学习 Go 语言

Golang自定义结构体转map

2.1 结构体字段

  结构体字段使用点号来引用

Golang自定义结构体转map

2.2 结构体指针

  结构体字段可以通过结构体指针来访问

2.3 结构体声明

  结构体声明可以通过直接列出字段的值来新分配一个结构体。

3. 数组

  类型[n]T表示拥有n个T类型的值的数组。

Go如何对数组切片进行去重

《快学 Go 语言》第 4 课 —— 低调的数组

Go切片与C数组转换

Go之[]byte字节数组与string字符串相互转换juejin.cn/post/684490…

4. 切片

  每个数组的大小都是固定的。而切片则为数组元素提供动态大小的、灵活的视角。在实践中,切片比数组更常用。

深度解析 Go 语言中「切片」的三种特殊状态

(正经版)面试官:切片作为函数参数是传值还是传引用?

Go 切片使用注意事项

如何在Go中使用切片容量和长度

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形式可遍历切片或映射。

5. 映射(map)

gin 自动映射参数及自动校验

PHP转Go系列:map映射

5.1 映射的文法

5.2 修改映射

五、方法和接口

1. 方法

  • 指针接收者
  • 方法与指针重定向
  • 选择值或指针作为接收者

2. 接口

2.1 接口理解

Golang interface接口深入理解

Go 语言接口详解(一)

Go 语言接口详解(二)

2.2 接口与隐式形式

2.3 接口值

2.3.1 nil 的接口值

Go “一个包含nil指针的接口不是nil接口”踩坑

2.3.2 空接口

31. 说说 Go 语言中的空接口

2.4 接口类型断言

14. Go 语言中的类型断言是什么?

聊聊golang的类型断言

2.5 接口类型选择

2.6 Stringer

六、错误异常

1. 错误

Go语言(golang)的错误(error)处理的推荐方案

Golang error 的突围

[译] Part 31: golang 中的自定义 error

[译] Go 1.13 errors 包错误处理

七、IO读取

1. Reader

Golang 最细节篇 —— Reader,ReaderAt 的区别,你如果是做存储的,可千万别搞错了;

2. 图像

golang 图像验证码 转载

3. 阻塞&非阻塞

在Golang中各种永远阻塞的姿势

Golang 实现轻量、快速的基于 Reactor 模式的非阻塞 TCP 网络库

4. 同步vs异步

面试官让我用channel实现sync包里的同步锁,是不是故意为难我?

Visual Studio Live Share - 和你的队友同步共享代码,即时编辑

kingtask:一个由 Go 开发的轻量级的异步定时任务系统

用一个简易的 web chat 说说 Python、Golang、Nodejs 的异步

5. Select

深入理解go-channel和select的原理

八、并发

1. 协程相关

Golang 的 协程调度机制 与 GOMAXPROCS 性能调优

Go并发调度器解析之实现一个协程池 转载

2. 原子性、可见性、有序性

Golang 并发编程核心—内存可见性

3. 并发控制

深入golang之---goroutine并发控制与通信

Go 译文之通过 context 实现并发控制

go并发之goroutine和channel,并发控制入门篇

九、语言特性

1. Goroutine

2. Channel

go语言之行--golang核武器goroutine调度原理、channel详解

Golang —— goroutine(协程)和channel(管道)

深入理解Golang之channel

3. GMP模型

深入理解Golang之channel

Golang调度器的GMP模型

go并发奥秘:GMP模型

动图图解!GMP模型里为什么要有P?

十、框架

1. Web框架

慢聊Go之Go常见的Web 开发框架|Go主题月

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. 微服务框架

2.1 go-kit

2.2 Micro

2.3 go-zero

2.4 gRPC

Go RPC入门指南1:RPC的使用边界在哪里?如何实现跨语言调用

十一、性能剖析

1. Go语言性能分析

go pprof 性能分析

Go 程序性能分析 101

golang 使用pprof和go-torch做性能分析

多维度思考:如何提高项目的开发时间、提高安全性、提高运行速度,从多个维度带来的一些思考。

十二、问题排查

十三、Golang面试

Go语言控制CPU占用率呈正弦曲线 | Go主题月