【Go语言中级开发】在 Go 中构建实时 YouTube 订阅者监视器
欢迎大家! 在本教程中,我们将获得一些乐趣,我们将在 Go 中创建一个实时的 YouTube 统计监控系统。
因此,我们将在本教程中研究许多不同的主题,例如创建 WebSocket 服务器和使用 WebSockets 与前端应用程序进行实时通信,以及如何与现有的 REST API 进行交互以 获取我们需要的订阅者统计信息。
目标
在本教程结束时:
- 您将对如何在自己的 Go 应用程序中使用 WebSockets 有更好的理解。
- 您将了解如何与 YouTube API 交互以检索您自己的 YouTube 频道的统计信息。
先决条件
- 您需要在开发机器上安装 Go 版本 1.11+。
视频教程
如果您愿意,本教程可在此处以视频格式提供:
https://youtu.be/n3BQLHtsrkM
入门
首先,我们要创建一个新目录来工作。我们将其命名为 youtube-stats/。
【Go语言容器化】Go 多阶段 Docker 教程
欢迎各位码农!在本教程中,我们将研究多阶段 Docker 镜像以及如何使用它们来最小化生产 Go 应用程序所需的容器大小。
在本教程结束时,我们将涵盖以下概念:
- 什么是多阶段 Dockerfile。
- 我们如何为我们的 Go 应用程序构建简单的多阶段 Dockerfile
Docker 是一种强大的容器化技术,可用于轻松启动隔离且可重现的环境,在其中构建和运行我们的应用程序。它越来越受欢迎,越来越多的云服务提供商提供本地 docker 支持,让您可以轻松部署容器化应用程序,让全世界看到!
注意 - 本教程是我之前的 Go + Docker 教程的后续,可以在此处找到:使用 Docker 容器化您的 Go 应用程序
多阶段 Dockerfile 的需求是什么?
为了了解多阶段 Dockerfile 为何有用,我们将创建一个简单的 Dockerfile,它具有一个阶段来构建和运行我们的应用程序,另一个 Dockerfile 具有构建器阶段和生产阶段。
一旦我们创建了这两个不同的 Dockerfile,我们应该能够比较它们,并希望自己看到多阶段 Dockerfile 比它们更简单的对应物更受欢迎!
【Go语言容器化】使用 Docker 容器化您的 Go 应用程序 - 教程
Docker 是一项真正出色的技术,它允许我们在一个简单的 Dockerfile 中指定我们希望所有应用程序存在的环境。 这有效地允许更轻松的协作,并使我们摆脱了在全球开发团队中非常普遍的“它在我的机器上工作”的问题。
因此,我觉得写一篇关于如何使用 Docker 容器化技术有效地容器化 Go 应用程序的教程是一个好主意。
在本教程结束时,您应该能够很好地掌握以下内容:
- Docker 的基础知识以及它对我们开发人员的用处
- 为你的 Go 应用程序编写一个简单的 Dockerfile
- 最后,我们将看看如何轻松地将这些应用程序部署到 DigitalOcean
为什么选择数字海洋? 我们会偷偷地希望他们开始赞助我即将发布的一些视频教程,这样我就可以开始全职专注于编写内容了! :D
视频教程
https://youtu.be/lIbdPrUpGz4
为什么选择 Docker?
在过去的几年里,我在许多不同的环境中多次被问到这个问题,并且我已经向各种经验水平的开发人员讨论了这项特殊的技术。
【Go语言中级开发】在 Go 中读取和写入文件
注意 - 如果你对在 Go 中使用 JSON 感兴趣,你可能也喜欢我的其他教程 - Go JSON 教程
在本教程中,我们将了解如何使用 go 编程语言有效地读取和写入文件系统中的文件。
我们将用于读取和写入这些文件的方法将与文件格式无关。这意味着您将能够使用我们将介绍的技术来读取和写入 .txt、.csv、.xls 等,这些文件的唯一不同之处在于其结构您写入每种文件类型的数据。
读取文件
为了读取本地文件系统上的文件,您必须使用 io/ioutil 模块。您首先必须通过调用 ioutil.ReadFile("/path/to/my/file.ext") 将文件的内容拉入内存,这将获取您希望读取的文件的路径唯一的参数。这将返回文件的数据,或者可以像您通常处理 go 中的错误一样处理的错误。
创建一个名为 main.go 的新文件以及另一个名为 localfile.data 的文件。将一段随机文本添加到 .data 文件中,以便我们完成的 go 程序可以读取一些内容,然后执行以下操作:
【Go语言中级开发】在 Go 1.11 中使用临时文件和目录
Go 1.11 带来了一些非常酷的新功能,例如实验性的 Go Modules 功能,以及使用 ioutil 包中的新 TempFile 和 TempDir 函数创建临时文件和目录的能力。
从这些函数调用创建的临时文件和目录是全局唯一的,这很棒,因为它简化了我们在 Go 程序中处理数百甚至数千个文件的方式。
在本教程中,我们将研究如何在自己的 Go 程序和一些潜在用例中使用它们。
创建临时文件
让我们从新的 TempFile 函数开始。假设我们正在创建一个对象识别系统,它可以提取数千张汽车图片并将它们用作训练集。
对于我们拉入的每辆汽车,我们都希望创建一个具有唯一名称的临时文件,我们不一定关心。
【Go语言中级开发】Go 接受接口返回结构
欢迎地鼠!在本文中,我们将介绍接受接口和返回结构的概念,以及这如何帮助改进您的代码,使其更具可测试性和可维护性。
概述
在编写 Go 应用程序时,我想记住的关键事项之一是“我怎样才能使这个特定的功能尽可能地可测试?”。
对于更复杂的应用程序,能够在我们的应用程序中使用所有不同的代码路径可能有点像噩梦,这取决于我们构建某些组件的方式。
在本文中,我将首先演示一种接受指向结构的指针的方法,以及这如何限制我们测试事物的能力。然后,我们将看看如何通过一些细微的更改来改进代码,这些更改应该使我们能够做一些花哨的事情,比如使用 mock 和 fake 对我们的代码进行单元测试。
传递指针
让我们首先看一个不遵循接受接口的包的标准示例,返回结构的咒语。
在这个例子中,我们将在我们的应用程序中定义一个用户包,它需要某种形式的数据库来获取用户,然后,在一些业务逻辑之后,它将能够持久化所做的任何更改。
【Go语言中级开发】Go 开发者的任务文件
欢迎Gophers!在本教程中,我将展示如何在 Go 应用程序开发中利用 Taskfiles 来获得名利。
(免责声明):本文是在 CircleCI 中采用 Taskfiles 来帮助他们采用 Go 的。我不能因为发现 Taskfiles 而获得任何功劳,因为这是另一个突出优势的团队。
如果您已经加入 Go 社区一段时间,您可能熟悉在 Go 应用程序中使用 Makefile 或类似的构建工具,您甚至可能选择了某种形式的脚本来捕获一些较长的命令以便更轻松发展。
你们当中的受虐狂甚至可能刚刚将所有常规命令都记入了记忆中。如何记住所有不同的构建参数和设置超出了我的范围,但对你能够记住的严重赞誉。
但毫无疑问,Taskfiles 是我最喜欢的新方法之一,它可以在一个地方捕获一些我必须在日常开发活动中运行的更繁琐的命令。
示例任务文件
让我们快速看一下在 taskfile.dev 主页上演示的示例 Taskfile.yml -
【Go语言高级开发】Go 闭包简介 - 教程
在本教程中,我们将研究 Go 中的闭包。我们将介绍它们背后的理论,并研究如何在自己的 Go 应用程序中使用它们。
闭包 - 理论
所以,让我们深入理论。
我们可以在任何支持函数作为一等对象的编程语言中创建和使用闭包。 Go,恰好是这样一种语言,否则这篇文章将毫无意义。
因此,闭包的技术定义是闭包是一种使用具有一流功能的语言实现词法范围名称绑定的技术 - 维基百科。
现在,别担心,当我第一次读到这篇文章时,我有点挠头,不得不考虑一下。
用外行的话来说,闭包是一个函数值,它能够引用与它的主体一起布置的变量。
注意 - 重要的是要注意闭包和匿名函数之间的明显区别,这些区别通常被误认为是闭包。您可以在此处了解有关匿名函数的更多信息:Go Anonymous Functions
一个简单的例子
让我们创建一个非常简单的闭包示例,希望能阐明它是如何工作的。
我们将从创建一个名为 getLimit() 的非常简单的函数开始,这将是本例中的闭包。
这将包含一个 int 类型的限制变量,该变量将设置为 10。每次调用 limit()
main.go
【Go语言高级开发】Go 程序基准测试简介
在本文中,我们将看看基准测试。更具体地说,我们将研究如何对基于 Go 的程序进行基准测试。
在性能很重要的时候,能够对程序的执行方式进行基准测试并分析潜在的瓶颈在哪里,真的很有价值。通过了解这些瓶颈所在的位置,我们可以更有效地确定将工作重点放在哪里,以提高我们系统的性能。
注意 - 需要注意的是,性能调整通常应在系统启动并运行后进行。
“过早的优化是万恶之源”——Donald Knuth
在本教程中,我们将研究如何为非常简单的函数执行标准基准测试,然后转向更高级的示例,最后研究如何生成看起来很酷的火焰图。
先决条件
- 您需要在开发机器上安装 Go 版本 1.11+。
一个简单的基准测试
在 Go 中,基准测试可以与标准单元测试一起编写。这些基准函数应以“Benchmark”为前缀,后跟函数名称,与您为测试函数添加前缀 Test 的方式相同。
让我们从我们之前的测试文章中获取我们的代码,并尝试为此编写一个简单的基准函数。创建一个名为 main.go 的新文件并将以下代码添加到该文件中:
【Go语言数据库开发】Redis 和 Go 入门 - 教程
大家好,在本教程中,我们将研究如何有效地使用 Redis 作为 Go 应用程序的后端解决方案。
先决条件
如果你想在本地机器上学习本教程,你需要在你的机器上安装以下内容:
- Docker - 这将需要运行 redis 的本地实例,如果您已经有 redis 服务,则不需要 Docker。
- Go 版本 1.12+ - 我们将使用 Go 模块来管理我们项目的依赖项
- 文本编辑器,例如 Visual Studio Code
为什么选择 Redis?
Redis 是一个出色的开源内存数据结构存储,可用于各种用途,例如应用程序的数据库、缓存服务甚至消息代理。
它支持各种不同的数据结构,并且非常灵活和快速。如果您关心弹性等问题,那么您会很高兴听到它具有内置复制功能,并且可以在集群设置中运行,以确保您的应用程序不依赖于单个实例。
然而,出于本教程的目的,我们将使用一个本地运行的 redis 实例来保持它的美观和简单,我们将使用 Docker 运行该实例。