♂ 环境安装 |
知识归纳 |
电子书籍 |
---|---|---|
精选文章 |
大佬视频 |
开源项目 |
学术论文 |
大会PPT |
☁ 云原生 |
Go官网下载地址:https://golang.org/dl/
Go官方镜像站(推荐):https://golang.google.cn/dl/
文件名 | 文件属性 |
---|---|
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测试。可以通过这个学到一些特性的使用。 |
这里我给大家整理归纳为四大块,分别是语法、中间件、后端开发、云原生。
我们通过这个四个板块的学习,逐步进阶成一个可以从事后端服务器开发的工程师。
下面我们简单介绍中间件和云原生:
MySQL、Redis、MongoDB、Kafka这些常见的中间件,这里我们不做赘述。我们着重简述下Gin、etcd、ElasticSearch、gRPC。
Gin
Gin是一个用Go (Golang)编写的HTTP web框架。它具有一个类似martinii的API,性能要好得多——快了40倍。
官方Github项目:https://github.com/gin-gonic/gin
etcd
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)。
想要高效地的学习Golang,单单知道学习哪几个板块,是远远不够的。我们还需要将每个板块的知识点进一步细化。
——成功与失败之间,最重要的是不容忽视的细节
那么开始进一步完善之前的知识点:
《Go 入门指南》
《Go语言101》
《Go语言趣学指南》
《Go语言从入门到进阶实战》
《Go语言学习笔记》
《Go语言入门经典》:hdcy
《Go语言编程》
《Go语言实战》
《Go Web 编程》
《Go语言编程入门与实战技巧》:sgro
《Go 语言圣经》
《Go专家编程》
《Go 语法树入门》
《Go语言程序设计》:flnj
《Go语言高级编程》
《Go语言核心编程》:v9fl
《Go语言高并发与微服务实战》
《Go并发编程实战》第2版:lsn0
《Go语言并发之道》:6ppw
当红开发语言Go,真的是未来的技术主流吗?
Go语言之goroutine协程详解
Golang之sync.Pool对象池对象重用机制总结
Golang的GC和内存逃逸
GO语言之垃圾回收机制
Go内存分配那些事,就这么简单
Go语言TCP Socket编程
从源码角度看 Golang 的调度
Protobuf入门
etcd的使用
深入理解 Go Map
用go实现常见的数据结构
title | Link |
---|---|
Go (Golang) Tutorial - Go语言入门教程 #1 ~ #22 | 百度网盘:btjy |
GopherCon 2017- Russ Cox - The Future of Go | 百度网盘:zx1w |
GopherCon 2018- George Tankersley - Micro optimizing Go Code | 百度网盘:tzau |
GopherCon 2018- Kat Zien - How Do You Structure Your Go Apps | 百度网盘:qmrq |
GopherCon 2018 Lightning Talk- Aidan Coyle - Lazy JSON Parsing | 百度网盘:g4f5 |
GopherCon 2018 Lightning Talk- Alan Braithwaite - Web Session Management in Go | 百度网盘:2ibm |
GopherCon 2018 Lightning Talk- Hugo Torres - Talking to the Docker Socket | 百度网盘:unlh |
GopherCon 2019- Dave Cheney - Two Go Programs, Three Different Profiling Techniques | 百度网盘:kgjj |
Let’s Go - Why I’m moving to Go Programming Language - Why GoLang has a Promising Future | 百度网盘:ewon |
Golang’s Garbage - USENIX | 百度网盘:kkl4 |
Golang REST API With Mux | 百度网盘:el4d |
Golang Crash Course | 百度网盘:v4jw |
Brad Fitzpatrick Go 1 11 and beyond | 百度网盘:yg9r |
dotGo 2015 - Rob Pike - Simplicity is Complicated | 百度网盘:594c |
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 | 未知 |
项目 | 简介 | 地址 |
---|---|---|
docker | 无人不知的虚拟华平台,开源的应用容器引擎,借助该引擎,开发者可以打包他们的应用,移植到任何平台上。 | https://github.com/docker/docker |
golang | go本身,也是用go语言实现的,包括他的编译器,要研究go源代码的可以看此项目录 | https://github.com/golang/go |
kubernetes | Google出品,用于调度和管理docker的开源容器管理系统,利用他,可以方便的管理你的docker实例,哪怕非常多,也是目前最流行的docker管理系统。 | https://github.com/kubernetes/kubernetes |
gogs | 一款基于git的代码托管系统,类似于github和gitlab,不过其小巧易用,功能强大,部署方便,也有不少用户在使用。 | https://github.com/gogits/gogs |
syncthing | 开源的文件同步系统,它使用了其独有的对等自由块交换协议,速度很快,据说可以替换BitTorrent Sync。 | https://github.com/syncthing/syncthing |
grafana | 一款开源监控度量的看板系统,可以接Graphite,Elasticsearch,InfluxDB等数据源,定制化很高。 | https://github.com/grafana/grafana |
etcd | 一款分布式的,可靠的K-V存储系统,使用简单,速度快,又安全。 | https://github.com/coreos/etcd |
hub | 一款更便捷使用github的工具,包装并且扩展了git,提供了很多特性和功能,使用和git差不多。 | https://github.com/github/hub |
influxdb | 可伸缩的数据库,使用场景主要用来存储测量数据,事件点击以及其他等实时分析数据,用来做监控性能很不错。 | https://github.com/influxdata/influxdb |
caddy | 快速的,跨平台的HTTP/2 Web服务器。 | https://github.com/mholt/caddy |
beego | 国产开源的高性能Web框架,让你快速的开发Go Web应用服务,谢大主笔。 | https://github.com/astaxie/beego |
martini | 也是一款不错的Web框架。 | https://github.com/go-martini/martini |
cayley | Google开源的图数据库,这是一个NoSql数据库,适合处理复杂的,但是结构化低的数据,适用于社交网络,推荐系统等。 | https://github.com/cayleygraph/cayley |
nsq | 一款开源的实时的,分布式的消息中间件系统。 | https://github.com/nsqio/nsq |
codis | Codis是一个分布式Redis解决方案,其实就是一个数据库代理,让你在使用Redis集群的时候,就像使用单机版的Redis是一样的,对开发者透明。 | https://github.com/CodisLabs/codis |
delve | 这个Go开发者都知道,一款go应用开发的调试工具。 | https://github.com/derekparker/delve |
cobra | cobra是一个命令行go库,可以让你创建非常强大的,现代的CLI命令行应用。 | https://github.com/spf13/cobra |
项目 | 简介 | 地址 |
---|---|---|
Viper | Viper 是一个完整的 Go 应用配置解决方案。 | https://github.com/spf13/viper |
echo | 高性能、极简主义的 Go Web 框架 | https://github.com/labstack/echo |
uber-go/fx | 一个基于依赖注入的 Go 应用框架。 | https://github.com/uber-go/fx |
Swagger | 生成器、UI 和验证 | https://github.com/go-swagger/go-swagger |
Logrus | Logrus 是一个适用于 Go(golang) 的结构化记录器,与标准库记录器完全 API 兼容。 | https://github.com/sirupsen/logrus |
mockery | Golang 的模拟代码自动生成器 | https://github.com/vektra/mockery |
migrate | 用 Go 编写的数据库迁移。作为 CLI 使用或作为库导入。 | https://github.com/golang-migrate/migrate |
NSQ | 消息传递 | https://github.com/nsqio/go-nsq |
sqlx | sqlx 是一个库,它在 Go 的标准 database/sql 库上提供了一组扩展。 | https://github.com/jmoiron/sqlx |
这里我们讲云原生,主要目的是为了大家如何利用云原生技术,快速地使用go语言开发。而不是研究云原生本身的技术。
我们以腾讯云为例,列举腾讯云为我们提供的云原生接口项目:(列举部分我们常见的)