跳转到主要内容

【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 添加到它?

【Go语言基础】Go Map教程

在本教程中,我们将研究Go中的Map以及如何使用它们来统治世界!

我们将涵盖您需要了解的有关Map的所有内容,以便在您自己的 Go 应用程序中开始使用它们。我们将研究您在 Go 中与Map交互的所有各种方式,在本教程结束时,您将成为使用它们的大师。

Map数据结构


当您需要非常快速的键值查找时,映射是一种非常有用的数据结构。它们的使用方式非常多样化,无论使用何种底层语言,它们都是任何程序员的宝贵工具。

Go 中的 Map 可以被认为相当于 Python 中的 dict 或 Java 中的 HashMap。

Map基本语法


Go 中的映射可以使用 map 关键字后跟键类型和值类型来定义。这些类型可以是 Go 支持的任何基本类型,您可以在 Go 中使用获取Map类型的 make 关键字初始化新Map。

注意:make 内置函数需要一个可选的第二个容量参数,但是对于 Go 中的Map,这将被忽略,因为Map会自动增长和缩小

【Go语言Web开发】 Go Oauth2 教程

欢迎各位码农!在本教程中,我们将了解如何使用 go-oauth2/oauth2 包实现自己的 OAuth2 服务器和客户端。

毫无疑问,这是评论者对我的 YouTube 视频提出的最多要求的话题之一,而且我自己也觉得非常有趣。

毫无疑问,对于任何面向公共甚至私有的服务或 API 而言,安全性都是一个非常重要的特性,并且您需要非常注意它才能使其正确。

注意 - 可以在此处找到本教程的完整 github 存储库:TutorialEdge/go-oauth-tutorial

理论


因此,在我们深入研究如何编写代码之前,了解它在后台是如何工作的很重要。通常,我们有一个客户端,它首先向资源所有者发出授权请求。然后,资源所有者要么同意要么拒绝这个请求。

使用此授权授予,客户端然后将其传递给授权服务器,授权服务器将授予访问令牌。正是有了这个授予的访问令牌,我们的客户端才能访问受保护的资源,例如 API 或服务。

话虽如此,现在让我们看看如何使用这个 go-oauth2/oauth2 包来实现我们自己的授权服务器。

注意 - 如果您有兴趣查看 Oauth2 实现遵循的 RFC,可以在此处找到:RFC-6749