【Go语言开发】如何在 Go 中为错误添加额外信息
介绍
当 Go 中的函数失败时,该函数将使用错误接口返回一个值,以允许调用者处理该失败。在很多情况下,开发者会使用 fmt 包中的 fmt.Errorf 函数来返回这些值。但是,在 Go 1.13 之前,使用此函数的一个缺点是您会丢失有关可能导致返回错误的任何错误的信息。为了解决这个问题,开发人员要么使用包来提供一种将错误“包装”在其他错误中的方法,要么通过在他们的一种结构错误类型上实现 Error() 字符串方法来创建自定义错误。但是,如果您有许多不需要由调用者显式处理的错误,有时创建这些结构类型可能会很乏味,因此在 Go 1.13 中,该语言添加了一些功能以更容易处理这些情况。
一项功能是能够使用 fmt.Errorf 函数包装错误,该函数具有一个错误值,该错误值可以在以后解包以访问已包装的错误。这将错误包装功能构建到 Go 标准库中,因此不再需要使用第三方库。
此外,函数 errors.Is 和 errors.As 可以更容易地确定特定错误是否包含在给定错误中的任何位置,并且还可以让您直接访问该特定错误,而无需自己解开所有错误。
在本教程中,您将创建一个程序,该程序使用这些函数在从函数返回的错误中包含附加信息,然后创建您自己的支持包装和展开功能的自定义错误结构。
【Go语言开发】如何在 Go 中使用上下文
介绍
在开发大型应用程序时,尤其是在服务器软件中,有时除了函数独立运行所需的信息之外,了解更多关于它正在执行的环境的信息是有帮助的。例如,如果 Web 服务器函数正在处理特定客户端的 HTTP 请求,则该函数可能只需要知道客户端请求哪个 URL 来提供响应。该函数可能只将该 URL 作为参数。但是,在提供响应时总是会发生一些事情,例如客户端在收到响应之前断开连接。如果提供响应的函数不知道客户端已断开连接,则服务器软件最终可能会花费比计算永远不会使用的响应所需的更多计算时间。
在这种情况下,了解请求的上下文,例如客户端的连接状态,允许服务器在客户端断开连接后停止处理请求。这可以在繁忙的服务器上节省宝贵的计算资源,并释放它们来处理另一个客户端的请求。这种类型的信息在函数执行需要时间的其他上下文中也很有帮助,例如进行数据库调用。为了使对此类信息的普遍访问成为可能,Go 在其标准库中包含了一个上下文包。
在本教程中,您将首先创建一个在函数中使用上下文的 Go 程序。然后,您将更新该程序以在上下文中存储附加数据并从另一个函数中检索它。最后,您将使用上下文的能力来表示它已完成以停止处理其他数据。
先决条件
【Go语言基础】如何在Golang中使用JSON
介绍
在现代程序中,一个程序和另一个程序之间的通信很重要。无论是检查用户是否可以访问另一个程序的 Go 程序、获取显示在网站上的过去订单列表的 JavaScript 程序,还是从文件中读取测试结果的 Rust 程序,程序都需要一种方法来为其他程序提供数据。然而,许多编程语言都有自己的内部存储数据的方式,这是其他语言无法理解的。为了允许这些语言进行交互,需要将数据转换为他们都能理解的通用格式。其中一种格式 JSON 是一种通过 Internet 以及在同一系统中的程序之间传输数据的流行方式。
许多现代编程语言在其标准库中包含一种将数据与 JSON 相互转换的方法,Go 也是如此。通过使用 Go 提供的 encoding/json 包,您的 Go 程序还可以与任何其他可以使用 JSON 进行通信的系统进行交互。
在本教程中,您将首先创建一个程序,该程序使用 encoding/json 包将地图中的数据编码为 JSON 数据,然后更新您的程序以使用结构类型对数据进行编码。之后,您将更新您的程序以将 JSON 数据解码为映射,然后最终将 JSON 数据解码为结构类型。
先决条件
要遵循本教程,您将需要:
【Go语言Web开发】如何在Go中创建HTTP服务器
介绍
许多开发人员至少花了一些时间来创建服务器,以便在互联网上分发内容。超文本传输协议(HTTP)提供了大部分内容,无论是对猫图像的请求还是加载您正在阅读的教程的请求。Go标准库提供了内置支持,用于创建一个HTTP服务器来服务您的web内容或向这些服务器发出HTTP请求。
在本教程中,您将使用Go的标准库创建一个HTTP服务器,然后扩展服务器以从请求的查询字符串、正文和表单数据中读取数据。您还将更新程序,以使用自己的HTTP头和状态代码响应请求。
先决条件
要遵循本教程,您需要:
【Go语言高级开发】如何在Go中并发运行多个函数
介绍
Go语言的一个流行特性是它对并发性的一流支持,或者说一个程序同时做多件事情的能力。随着计算机从更快地运行单个代码流转向同时运行更多代码流,能够并发运行代码正成为编程的一个重要部分。为了更快地运行程序,程序员需要设计并发运行的程序,以便程序的每个并发部分可以独立于其他部分运行。Go中的两个特性,goroutines和channel,在一起使用时使并发更容易。Goroutines解决了在程序中设置和运行并发代码的困难,通道解决了并发运行的代码之间安全通信的困难。
在本教程中,您将探索goroutines和频道。首先,您将创建一个使用goroutines同时运行多个函数的程序。然后,您将向该程序添加通道,以便在运行的goroutines之间进行通信。最后,您将向程序中添加更多的goroutine,以模拟使用多个辅助goroutines运行的程序。
先决条件
要遵循本教程,您需要:
【Go语言基础】如何在Go语言中使用日期和时间
介绍
软件旨在使工作更容易完成,对许多人来说,这包括与日期和时间交互。日期和时间值在现代软件中随处可见。例如,跟踪汽车何时需要维修并让车主知道,跟踪数据库中的更改以创建审核日志,或者只是将一个时间与另一个时间进行比较以确定一个过程需要多长时间。因此,检索当前时间、操纵时间值以从中提取信息,并以易于理解的格式将其显示给用户是应用程序的基本属性。
在本教程中,您将创建一个Go程序来获取计算机的当前本地时间,然后以更易于阅读的格式将其打印到屏幕上。接下来,您将解释一个字符串以提取日期和时间信息。您还将转换两个时区之间的日期和时间值,以及加减时间值以确定两个时间之间的间隔。
先决条件
要遵循本教程,您需要:
- 安装1.16或更高版本。要设置此设置,请遵循操作系统的“如何安装Go”教程。
获取当前时间
在本节中,您将使用Go的时间包获得当前时间。Go标准库中的时间包提供了各种与日期和时间相关的函数,可以用来表示使用时间的特定时间点。时间类型。除了时间和日期,它还可以保存有关所表示的日期和时间所在的时区的信息。
【Go语言Web开发】如何在Go中发出HTTP请求
介绍
当一个程序需要与另一个程序通信时,许多开发人员会使用HTTP。Go的优势之一是其标准库的广度,HTTP也不例外。Go-net/http包不仅支持创建http服务器,还可以作为客户端发出http请求。
在本教程中,您将创建一个向HTTP服务器发出多种类型HTTP请求的程序。首先,您将使用默认的GoHTTP客户端发出GET请求。然后,您将增强您的程序,以使用body发出POST请求。最后,您将自定义POST请求以包含HTTP头,并添加一个超时,如果您的请求耗时过长,则会触发该超时。
先决条件
要遵循本教程,您需要:
【Go语言数据库开发】GoLang PostgreSQL示例
PostgreSQL与MySQL一样受欢迎,并提供类似的功能。它还提供了一些现成的最佳技术。在这篇文章中,我们将讨论GoLang中的PostgreSQL,并在Go中创建简单的CRUD操作。
使用Go连接到PostgreSQL数据库
这是检查我们是否成功连接的代码。现在,在检查了是否可以继续向表中插入数据之后。
我们需要使用go包管理器安装pq包:
|
【Go语言数据库开发】使用Go和PostgreSQL构建一个简单的应用程序
介绍
PostgreSQL是当今最流行的SQL数据库之一。根据官方文档,它是“一个功能强大、开源的对象关系数据库系统,经过30多年的积极开发,在可靠性、功能健壮性和性能方面赢得了良好的声誉。”
在本文中,我们将研究如何在Go应用程序中使用Postgres。
先决条件
在我们开始使用这个应用程序之前,我们需要设置以下几件事:
- Go-由于这是我们选择的编程语言,我们需要在本地环境中安装它
- PostgreSQL-我们将使用PostgreSQL作为我们的数据库。因此,出于开发目的,您需要在本地环境中安装它。然而,在生产中,您可能会考虑一个更健壮和安全的解决方案,如云服务。AWS Aurora就是一个例子。您可以从官方网站下载PostgreSQL
- pgAdmin 4-这是一个用户界面,允许我们直观地管理Postgres数据库。您可以在此处下载pgAdmin
我们将构建的内容:一个简单的待办事项应用程序
我们将构建一个全栈web应用程序,允许我们在Postgres数据库上执行CRUD操作。基本上,我们将构建一个待办应用程序。以下是完成的应用程序的外观:
【Go资源】Go资源精选中文版
收录标准
- 有深度或时效性的单篇或系列非转载的原创或翻译文章
- Github上类似awesome系列的集合类或列表类项目必须:Go强相关的,至少1k个star
其它awesome
中国区Go语言贡献者
入门到精通
- Go指南: https://tour.golang