【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 开发。
【Go语言Web开发】在 Go 中验证 HTTP JSON 请求
在选择您希望如何公开您的 Go 服务时,在 gRPC 和 HTTP 之间进行选择可能是一个相当困难的选择。 gRPC 为您提供了更高性能的网络传输,而围绕它的工具仍然落后于您更标准的基于 HTTP 的 API。
在本教程中,我们将研究如何利用 go-playground/validator 包来提高 API 和 UX 组件的安全性。
gRPC 服务中的验证
我喜欢 gRPC 服务开发的关键之一是通过 protobuf 定义对服务消费者施加的严格性。获得此设置的工具可以说更复杂一些,并且需要更长的时间,但一旦到位,它有助于确保消费者向您发送您期望的有效负载。
HTTP 替代方案
不过值得庆幸的是,有一种方法可以对传入 Go 服务的 HTTP JSON 请求实施某种程度的严格性。我们可以在我们的 HTTP 服务中使用一种称为 JSON 请求验证的技术,它可以有效地确保传入的请求在我们的服务处理之前通过一系列检查。
一个简单的例子
例如,让我们看一下处理诸如配置新用户帐户之类的任务的用户管理系统。我们通常会有一个看起来有点像这样的端点来创建新用户:
【Go语言高级开发】Go 泛型入门 - 教程
泛型。
在 Go 语言中添加泛型必须是 Go 社区最具争议的话题之一。
从一开始,我就喜欢 Go 的明确性和为我作为开发人员提供的简单性。我知道,查看函数签名,我将期望在该函数的主体中使用什么类型,并且我通常会知道要注意什么。
添加泛型后,我们的代码库变得更加复杂。我们不再有那种简单明了的东西,我们必须做一些推理和挖掘才能真正知道传递给我们的新函数的是什么。
概述
现在,本文的目的不是争论该语言最新添加的细节,而是尝试为您提供所需的一切,以便在您自己的 Go 应用程序中启动和运行泛型.
入门
在我们开始之前,您需要在本地机器上安装 go1.18beta1。如果你已经安装了 go,你可以通过运行:
$ go install golang.org/dl/go1.18beta1@latest
$ go1.18beta1 download
成功运行这两个命令后,您应该能够在终端中运行 go1.18beta1:
【Go语言高级开发】使用 WebAssembly 和 Go 编写前端 Web 框架
JavaScript 前端框架无疑有助于突破以前在浏览器上下文中可能实现的界限。越来越复杂的应用程序已经出现在 React、Angular 和 VueJS 之类的基础上,仅举几例,而且有一个众所周知的笑话,即新的前端框架似乎每天都在问世。
然而,这种发展速度对于世界各地的开发者来说是一个非常好的消息。对于每一个新框架,我们都发现了更好的处理状态的方法,或者使用影子 DOM 之类的东西有效地渲染。
然而,最新的趋势似乎是朝着用 JavaScript 以外的语言编写这些框架并将它们编译到 WebAssembly 中。多亏了 Lin Clark 之类的人,我们开始看到 JavaScript 和 WebAssembly 通信方式的重大改进,而且随着 WebAssembly 开始在我们的生活中变得更加突出,我们无疑会看到更多重大改进。
介绍
因此,在本教程中,我认为构建一个非常简单的前端框架的基础是一个好主意,该框架用 Go 编写,可编译成 WebAssembly。至少,这将包括以下功能:
【Go语言高级开发】Go 中的安全编码 - 输入验证
介绍
首先,我要感谢 Elliot Forbes 有机会在这个领域进行合作。我的名字是阿卜杜拉·加西亚。我是一位经验丰富的安全工程师,在广泛的行业领域拥有十多年的成功设计和交付高质量解决方案的经验;对于好奇的人,您可以在 LinkedIn 中找到更多详细信息。我也是一名神经科学家,专注于结合虚拟现实、ML 和假肢的运动神经康复的脑机接口 (BCI)。最后,在业余时间,我喜欢风景/城市/街头摄影(https://abdullahgarcia.myportfolio.com)、旅行、烹饪/烘焙以及各种运动……等等。
本文是几篇文章中的第一篇,其目标是:
- 了解无论您使用哪种编码语言都适用的通用安全编码最佳实践。
- 了解使用 Go 编码时如何应对 OWASP 十大(2017)安全风险。
特别是这个:
【Go语言高级开发】Go 指针教程
在本教程中,我们将介绍 Go 中的指针以及如何在自己的 Go 程序中使用它们。我们将介绍最佳实践,并介绍一些最常见的指针用例。
在本教程结束时,您将对指针以及如何使用它们有一个扎实的理解。
介绍
在 Go 中,当我们调用一个函数并将一堆参数传递给该函数时,该语言会创建参数的副本,然后在所述函数中使用这些副本。例如:
main.go
package main
import "fmt"
func myTestFunc(a int) {
a += 3
fmt.Println(a)
}
func main() {
a := 2
myTestFunc(a)
fmt.Println(a) // prints out 2
}
在上面的代码中,myTestFunc 接收一个整数变量,并对其进行复制,以便在函数体的上下文中使用。我们对 myTestFunc 中的 a 所做的任何更改都只会保留在 myTestFunc 函数的主体中。
现在,假设我们想调用 myTestFunc 并更新原来的 a 变量并将 3 添加到它?