跳转到主要内容

【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 运行该实例。

【Go语言高级开发】Go WebAssembly 教程 - 构建计算器教程

更新 - 本教程中的代码已更新以适用于 Go v1.12 中的重大更改

欢迎大家! 刚刚发布的 Go v1.11 包含了 WebAssembly 的实验性端口,我想看看我们如何编写自己的 Go 程序直接编译到 WebAssembly 会很棒!

因此,在本文中,我们将构建一个非常简单的计算器,让我们了解如何编写可以暴露给前端的函数、评估 DOM 元素并随后使用来自任何结果的结果更新任何 DOM 元素 我们调用的函数。

希望这将向您展示如何为您的前端应用程序编写和编译您自己的基于 Go 的程序。

注意 - 如果您还没有从开头猜到,则需要 Go v1.11 才能使本教程正常工作!

视频教程


如果您想支持我和我的努力,请查看本教程的视频版本并订阅我的频道!

https://youtu.be/4kBvvk2Bzis

介绍


那么这对 Go 和 Web 开发人员来说究竟意味着什么呢?好吧,它使我们能够使用 Go 语言编写我们的前端 Web 应用程序,以及随后的所有很酷的功能,例如它的类型安全、goroutines 等等。

【Go语言中级开发】使用 AES 进行加密和解密 - 教程

目标


在本教程结束时,您将能够……

  • 使用 AES 加密文本 - Go 中的高级加密标准
  • 然后,我们将研究将此加密消息写入文件
  • 最后,我们将看看如何使用共享密钥解密此消息

由此,您应该能够构建自己的简单加密系统,该系统可以执行各种操作,例如加密文件系统上的文件并使用只有您知道的密码来保护它们,或者为您正在工作的系统的各个部分添加简单加密上。

介绍


我们将从查看 AES 或高级加密标准开始,因为这是我们将用于加密和解密 Go 程序中的信息的标准。

然后我们将构建一个非常简单的加密程序,它将从命令行接收一个密码短语,并将其与 AES 结合使用来加密一段文本。

完成此操作后,我们将创建一个对应程序,该程序将使用我们用于加密文本的相同密码来解密这段文本。

AES - 高级加密标准


因此,AES 或高级加密标准是一种对称密钥加密算法,最初由两位比利时密码学家 Joan Daemen 和 Vincent Rijmen 开发。