学习基础知识
掌握 Go 语言的常见概念,如变量、循环、条件语句、函数、数据类型等等。深入了解 Go 基础知识的好起点是查阅 Go 官方文档
文章链接:Go 编程语言详解:用途、特性、与 Python 和 C++ 的比较
基本语法
了解 Go 语言的基本语法,包括 Go 程序的执行方式、包引入、主函数等
Go 中的变量
变量是赋予内存位置的名称,用于存储特定类型的值。Go 语言提供了多种声明和使用变量的方式。
文章链接:Go 语言变量类型和声明详解
数据类型
Go 是一种静态类型的编程语言,这意味着每个变量在初始时都有一个定义的类型,并且只能保存该类型的值。在 Go 中,有两类数据类型:基本类型和复合类型。
文章链接:解析 Go 编程语言数据类型:bool、整数、浮点数和字符串详细介绍
For Loop
Go 语言只有一种循环结构,即 for 循环。基本的 for 循环由三个部分组成,用分号分隔:
- 初始化语句:在第一次迭代之前执行
- 条件表达式:在每次迭代之前评估
- 后置语句:在每次迭代结束时执行
文章链接:Go 语言中 For 循环:语法、使用方法和实例教程
Range
Range 与 For 循环一起用于在数组、字符串和其他数据结构中迭代每个元素。
条件语句
条件语句用于仅在某个条件为真时执行代码;Go 支持:
if
语句if / else
语句switch case
语句
文章链接:深入了解 Golang 条件语句:if、else、else if 和嵌套 if 的实用示例
Errors/Panic/Recover
为了替代添加异常处理程序,Go 的创建者利用了 Go 能够返回多个值的能力。发出错误的 Go 语言中最常用的技术是将错误作为返回的最后一个值。
Panic
通常意味着发生了意外错误。主要用于在不应该在正常操作期间发生的错误或我们无法优雅处理的错误时快速失败。
Go 中的 Panic
恢复取决于一种语言特性,称为延迟函数。Go 具有在其父函数返回时保证函数执行的能力。这会发生无论父函数返回的原因是 return
语句、函数块的结束还是 panic
。
Functions
了解 Go 中函数的工作原理,下面的资源列表将涵盖:
- 如何在 Go 中定义和调用函数?
- Go 中的命名返回值?
- 处理多个返回类型。
- Go 中不同类型的函数。
文章链接:Go 语言函数、参数和返回值详解
Packages
包是 Go 语言中最强大的部分。包的目的是通过将相关功能组合到单个单元中,从而设计和维护大量程序,以便它们易于维护和理解,并且独立于其他包程序。这种模块化允许它们进行共享和重用。在 Go 语言中,每个包都用不同的名称定义,并且该名称与其功能密切相关,如“strings”包,它包含与字符串相关的方法和函数。
文章链接:Go 语言基础:包、函数、语句和注释解析
Type Casting
Go 不支持自动类型转换,但允许类型转换,即显式更改变量类型。要了解更多关于类型转换的信息,请访问以下资源:
Type Inference
类型推断使 Go 能够检测值的类型,而无需明确指定类型,因此可以在首次声明变量时声明变量而不提供其类型的可能性。
Arrays
在 Go 中,数组是在创建数组时定义的具有相同类型的元素集合。
文章链接:Go 语言数组基础教程 - 数组的声明、初始化和使用方法
Slices
切片类似于数组,但更强大和灵活。像数组一样,切片也用于在单个变量中存储相同类型的多个值。但与数组不同,切片的长度可以根据需要增长和缩小。
文章链接:Go 语言中切片的使用和理解
Maps
映射是 Go 中的数据结构,我们在想要在键值对之间进行映射时使用它。它们在删除或添加元素方面具有灵活性。映射不允许重复条目,同时数据是无序的。
文章链接:Go 语言之 Maps 详解:创建、遍历、操作和注意事项
Make
Golang 的内置函数 make
帮助我们创建和初始化切片、映射和通道,具体取决于传递给函数的参数。
Structs
结构是用户定义的类型,帮助我们创建描述单个实体的数据集合
文章链接:Go 语言中结构体的使用和示例
Modules
Go 模块是一组相关的包,它们被一起进行版本控制和分发。它们指定了我们项目的要求,列出了所有所需的依赖项,并帮助我们跟踪安装的依赖项的具体版本。
Working with JSON
JSON(JavaScript 对象表示法)是一种简单的数据交换格式。在语法上,它类似于 JavaScript 的对象和列表。它最常用于 Web 后端与在浏览器中运行的 JavaScript 程序之间的通信,但它在许多其他地方也被使用。
Types and Type Assertions
Golang 中的类型断言提供了对接口变量的确切类型的访问。
Interfaces
Go 中的接口是一种定义一组方法的类型。如果我们有一个实现该方法集的类型(例如结构体),那么我们就有了实现该接口的类型。
Context
context
包提供了解决请求期间管理状态问题的标准方式。该包满足对请求范围数据的需求,并提供了处理截止日期、取消信号等的标准化方式。
Goroutines
Goroutines
允许我们在 Go 中编写并发程序。处理成千上万个请求的 Web 服务器或在同时进行网络请求的同时呈现新页面的网站都是并发的示例。在 Go 中,每个并发任务都称为 Goroutines
具和协议。它们帮助您在开发Web应用程序时绕过一些操作,而不是每次都重新发明轮子。使用API客户端是加快开发过程的好方法
REST
REST(表述性状态转移)API(应用程序编程接口)
Channels
通道是连接并发Goroutines的管道。您可以从一个Goroutine向通道发送值,然后从另一个Goroutine接收这些值。通道是一种通过通道操作符<-
发送和接收值的有类型导管。
Buffer
缓冲区属于Go语言的字节包,我们可以使用这些包来操作字符串的字节。
Select
select
语句让一个Goroutine等待多个通信操作。select
语句阻塞,直到其一个case
可以运行,然后执行该case
。如果有多个case
准备就绪,则它会随机选择一个。select
语句类似于switch
语句,但在select
语句中,case
语句涉及通信,即在通道上发送或接收操作。
Mutex
Go允许我们使用Goroutines并发运行代码。然而,当并发进程访问相同的数据片段时,可能导致竞态条件。Mutex
是sync
包提供的数据结构。它们可以帮助我们在数据的不同部分放置锁,以便一次只能有一个Goroutine访问它。
Building CLI Applications
与图形用户界面(GUI)不同,命令行界面(CLI)仅限于文本。云和基础架构应用程序主要基于CLI,因为它们易于自动化并具有远程功能。Go应用程序构建为单一自包含二进制文件,使得安装Go应用程序变得简单;具体来说,用Go编写的程序可以在任何系统上运行,而无需任何现有库、运行时或依赖项。而且,使用Go编写的程序具有即时启动时间,类似于C或C++,但其他编程语言无法达到。
Cobra
Cobra
是用于创建强大的现代CLI应用程序的库。
Urfave CLI
Urfave cli
是用于在Go中构建命令行应用程序的简单、快速且有趣的包。
ORMs
对象关系映射(ORM)是计算机科学中一种使用面向对象编程语言在类型系统之间转换数据的编程技术。实际上,这创建了一个“虚拟对象数据库”,因此是一种抽象层,可以从编程语言内部使用。
Gorm
GORM
是针对Golang的出色ORM库,旨在使开发人员友好。它是用于处理关系数据库的ORM库。此gorm
库是在database/sql
包的基础上开发的。ORM的概述和功能包括:全功能的ORM(几乎)
Web框架
Go语言有几个著名的Web框架,其中最常见的包括:
Beego
Beego
用于在Go中快速开发企业应用,包括RESTful API、Web应用和后端服务。它受到了Tornado、Sinatra和Flask的启发。beego
具有一些Go特定的功能,如接口和结构嵌套。
Gin
Gin
是一个用Go编写的高性能HTTP Web框架。Gin
具有类似Martini的API,并声称速度最高可达40倍。Gin
允许您在Go中构建Web应用程序和微服务。
Web Frameworks
Revel
Revel
将端点组织到控制器中。它提供简单的数据绑定和表单验证。Revel
使得在规模上使用Go模板变得简单。可以在操作之前或之后注册功能。
Echo
Echo
是一个专注于性能的、可扩展的、开源的Go Web应用框架。它是一个介于stdlib +路由器和全栈Web框架之间的极简主义Web框架。
Gorilla
Gorilla
是用于Go编程语言的Web工具包,提供有用的、可组合的包,用于编写基于HTTP的应用程序。
Go Fiber
Go Fiber
是受Express启发的Golang框架。Go Fiber
是建立在快速HTTP之上的Web框架。它可以用于处理路由/端点、中间件、服务器请求等操作。
Buffalo
Buffalo
帮助您生成一个Web项目,该项目已经连接并准备好运行,从前端(JavaScript、SCSS等)到后端(数据库、路由等)都已经连接。从那里,它提供了一种在Go中快速构建Web应用程序的简单API。
Logging
Go具有内置功能,使程序员更容易实现日志记录。第三方也构建了额外的工具,以使日志记录更加容易。
Apex
用于Go的结构化日志记录包。
Zerolog
zerolog
包提供了一个专注于JSON输出的快速且简单的记录器。Zerolog
的API旨在既提供出色的开发人员体验,又具有惊人的性能。其独特的链接API允许zerolog
通过避免分配和反射来写入JSON(或CBOR)日志事件。
Zap
在Go中进行快速、结构化、级别日志记录。
Real-time Communication
Melody
Melody
是基于github.com/gorilla/websocket
的websocket框架,它抽象出了处理websocket
的繁琐部分,让您可以编写实时应用程序。
Centrifugo
Centrifugo
是一个开源的可扩展实时消息服务器。Centrifugo
可以立即将消息传递给通过支持的传输连接的应用程序在线用户(WebSocket、HTTP流、SSE/EventSource、GRPC、SockJS、WebTransport)。Centrifugo
有通道的概念,因此它是一个面向用户的发布/订阅服务器。
API Clients
API客户端是一组从计算机上的应用程序操作的工)用于处理网站时传递用户功能。使用HTTP请求与REST API进行通信,以便用户可以导航到URL网站。这些URL可以返回存储为API的一部分的特定信息。
Heimdall
Heimdall
是一个HTTP客户端,可以帮助您的应用程序大规模进行请求。使用Heimdall
,您可以:
- 使用类似Hystrix的断路器来控制失败的请求
- 为每个请求添加同步内存重试,可选择设置自己的重试策略
- 为每个请求创建具有不同超时的客户端
- 所有HTTP方法都以流畅的接口形式公开。
Grequests
Grequests
是Python Grequests库的Golang实现。功能包括:
- 响应可以序列化为JSON和XML
- 轻松上传文件
- 轻松下载文件
- 支持以下HTTP动词GET、HEAD、POST、PUT、DELETE、PATCH、OPTIONS
GraphQL
GraphQL
是用于API的查询语言,它提供了一个服务,优先考虑仅提供客户端请求的数据而不是更多数据。此外,您无需担心破坏更改、版本控制和向后兼容性等问题,就像REST API一样。因此,您可以通过使用GraphQL
来实现您的版本并自动记录API。
GraphQL Go
Go的GraphQL包
GraphQL
Gqlgen
根据它们的文档,这是一个在不费力气的情况下构建GraphQL服务器的Golang库。
Testing Go Code
Go具有内置的测试命令,我们可以使用它来测试我们的程序。
Microservices
微服务是一种软件开发的架构方法,它允许从可部署服务中创建分布式应用程序,这些服务通过明确定义的API进行通信。它是对单体的解决方案。
Watermill
Watermill
是用于处理Go中的异步请求的事件流库。它提供多组实现用于发布/订阅。例如:您可以使用传统的发布/订阅实现,如Kafka或RabbitMQ,也可以使用HTTP或MySQL binlog,如果适合您的用例。
Rpcx
Rpcx
是类似于阿里巴巴Dubbo和微博Motan的RPC(远程过程调用)框架。使用Rpcx
的一些优势:
- 简单:易于学习、易于开发、易于集成和易于部署
- 性能:高性能(>= grpc-go)
- 跨平台:支持原始字节切片、JSON、Protobuf和MessagePack。理论上它可以与java、php、python、c/c++、node.js、c#和其他平台一起使用
- 服务发现和服务治理:支持zookeeper、etcd和consul。
Go kit
Go kit
是用于在Go中构建微服务(或优雅的单体)的编程工具包。它解决了分布式系统和应用架构中的常见问题,因此您可以专注于提供业务价值。
Micro
这是一个以API为先的开发平台。它利用微服务架构模式,并提供了一组服务,它们充当平台的构建块。
go-zero
go-zero
是一个内置了许多工程最佳实践的Web和RPC框架。它诞生于保证繁忙服务的稳定性,并且多年来一直为拥有数千万用户的站点提供服务。
Protocol Buffers
协议缓冲区(Protobuf)是一种免费、开源、语言中立、平台中立、可扩展的数据格式,用于序列化结构化数据。它类似于JSON,但更小、更快,并生成本地语言绑定。
使用协议缓冲区的一些优势包括:
- 紧凑的数据存储
- 快速解析
- 在许多编程语言中可用
- 通过自动生成的类进行优化功能
gRPC Go
gRPC
(gRPC Remote Procedure Call)的Go语言实现。
Grpc gateway
gRPC-Gateway
在gRPC服务之上创建了一层,它将充当客户端的RESTful服务。它是protoc
的插件。它读取gRPC服务定义,并生成一个将RESTful JSON API转换为gRPC的反向代理服务器。
Twirp
Twirp
是强调简单和极简的服务之间通信的框架。它从API定义文件生成路由和序列化,让您专注于应用程序的逻辑,而不是考虑HTTP方法和路径以及JSON之类的琐事。