在 Go 1.18 中使用泛型检查回文

在阅读了几篇关于 Go 1.18 中泛型的文章和视频之后,我对使用它创建一个可以接受字符串和整数的回文检查函数产生了兴趣。

首先,我创建了一个名为 palindrome 的新项目和一个新包(也称为 palindrome)。然后我创建了一个名为 signedOrString的约束 ,它可以接收带符号的(int、int8、int16、int32 和int64)或字符串。此外,我创建了一个函数来检查它是否是回文。

这是一个非常好的功能,因为我们不必重新创建对每种数据类型执行相同操作的函数。

然后我想升级功能,直接从单词或数字中检查回文,而不是从切片中。我再次[……]

继续阅读

介绍 Bun:一个 Golang ORM

SQL 优先

Bun 是用于 PostgreSQL、MySQL/MariaDB、MSSQL 和 SQLite的SQL 优先 Golang ORM 。

SQL-first 意味着您可以在 Go 中编写 SQL 查询,例如,这个 Bun 查询:

生成以下 SQL:

? SQL 仍然存在,但由于占位符,Bun 可以帮助您生成长查询,同时防止 SQL 注入:

使用 Bun,您可以编写非常复杂的查询,例如,以下 Bun 查询:

生成以下 SQL:

结构和表

Bun 允许您使用基于结构的模型将 Go 结构映射到数据库表,例如,以[……]

继续阅读

分类: Go标签:

如何在 Go 中创建动态管道路由

在观看了一些关于 Go 的视频教程后,我想知道是否可以创建具有动态路由的管道。受 Go 中的 Builder 设计模式和 Optional Pattern 的启发,我想出了一个想法来实现它。

怎么做 ?

想象一下我们在一家汽车厂,一种车型有几种类型。在生产同一车型的汽车时,会有一些相同的制造步骤,例如底盘和车身的制造,然后每种类型都会添加一组不同的功能。我们将创建的管道有一个如下所示的流程图,在“车身”管道之后,可以直接构建汽车或根据其类型添加功能。

管道包

首先,我们将创建一个汽车结构,其中包含几个字段,例如基础、车身、特征 A、特征 B 和特征 C。之后,我们将[……]

继续阅读

Golang 中的 ES7 风格的 Async/Await 实现

前言

我最近在学习 Golang。我对 Golang 感兴趣的是goroutine + channel并发模型。在 Golang 中,我们使用 goroutine 执行异步任务,而这些 goroutine 通过名为Channel.

作为一个前端开发者,我发现 Golang 中的 goroutine + channel 模型很像 Javascript 中的事件循环。

  • Javascript V8 引擎使用主线程执行同步代码,而 Golang 使用主 goroutine。
  • Javascript V8 引擎维护一个线程池来执行异步代码,而 Golang 使用多个 goroutine。
  • J[……]

    继续阅读

每个开发人员都需要知道的 3 个 Golang 陷阱

我希望我早知道的 Golang 中的 3 个陷阱

在过去的一年里,我们一直在开发一个复杂的半实时生产系统。我们决定用 Golang 编写它。我们在 Go 方面几乎没有经验,所以你可能会想象这不是微不足道的。

快进一年:该系统正在生产中运行,并成为 ClimaCell 产品的主要支柱之一。

精通意味着您有足够的经验来了解您正在使用的平台的陷阱以及如何避免它们。

我想描述我们在使用 Golang 的过程中遇到的三个陷阱,希望它能帮助您避免它们。

范围可变性

考虑以下示例:

我们有一个保存结构实例的通道。我们用操作符遍历通道  range。[……]

继续阅读

Go 中的泛型编程

介绍

与其他编译语言相比,Go 中的泛型编程一直很尴尬。在 Go 中实现它的最流行的方法是使用接口、类型转换和代码生成。但每种方法都有其明显的局限性。例如,使用接口需要为每种数据类型实现一个接口。类型转换会导致潜在的运行时错误。而在代码生成的情况下,我们必须编写生成器,这需要花费大量时间。

本文的主要目标是了解泛型在 Go 中的工作原理,并将其性能与 Go 中以前的泛型编程方法进行比较。我将实现一个流行的函数“ Map ”,它遍历数据数组并使用回调函数转换每个元素。

文章代码示例存储在Github 存储库中。

去泛型函数

在 1.18 版本的[……]

继续阅读

分类: Go

如何使用断言作用域在 C# 中执行多个断言

在 C# 中使用断言作用域执行多个断言

Fluent Assertions是一个 .NET 库,它提供了一系列有用的扩展方法,使我们能够以更自然的方式测试我们的 C# 代码。

例如,假设我们正在测试字符串的输出。如果没有 Fluent Assertions,我们可能会这样写:

如果我们要使用 Fluent Assertions 编写这个测试,我们可以这样做:

看?更自然?

引入断言范围

让我们使用一个更广泛的例子。假设我有一个生成购物清单的类,如下所示:

对于更复杂的单元测试,我们可能希望对多个属性进行断言,如下所示:

这种方法很[……]

继续阅读

如何将 C# Azure.Data.Tables SDK 与 Azure Cosmos DB 结合使用

上个月,Azure SDK 团队发布了一个用于 .NET、Java、JS/TS 和 Python 的 Azure 表的新库。此版本使 Table SDK 与其他Azure SDK保持一致,它们使用特定的 Azure Core 包来处理请求、错误和凭据。

Azure Cosmos DB 提供了一个表 API产品,它本质上是增强版的 Azure 表存储!如果您需要全球分布式的表存储服务,Azure Cosmos DB 应该是您的首选。

如果要在 Azure Cosmos DB 表 API 和常规 Azure 表存储之间做出选择,我建议阅读以下文章。

在本文中,我将向您展示如何使用[……]

继续阅读

如何在 C# 中使用枚举和位移位制作标志

在考虑要写的帖子时,从某个电视节目中想到了标题“Fun with Flags” ,我想知道如何将其与编程联系起来。C# 中有通过属性的枚举标志Flags,所以也许这是我可以写的。也就是说,我想做一些比一些关于使用枚举的单调帖子更有创意的事情,即使最终结果并不实用。

相反,我决定用枚举在 C#中制作真正的52357729848标志 – 将数字变成标志:

德国国旗

我给自己提出了一些要求:

  • 我需要能够生成多个标志
  • 我想通过枚举将有关标志的所有内容编码为单个值

也有技术限制,因为我无法在枚举中存储大量数据,需要做出妥协。枚举可以由几种不同的类型支持,但我选择了long[……]

继续阅读

如何在 .NET 中操作 DateTime 以帮助您更好地编码

好的,我将取消夸张,作为一名工程师,在我这么多年(读到我感觉自己老了)时,我遇到了一个问题,我的代码包含一个DateTime.Nowor DateTime.UtcNow。当我编写测试时,我无法验证实际时间,因为从代码运行到我的测试开始验证已经过去了几毫秒。这不是一个大问题,但很烦人,因为我喜欢验证所有内容以确保我不会意外地在其他地方操纵这些值。

对此有一个简单的解决方案,在我详细说明我使用的解决方案之前,我需要指出这方面的灵感。TL;DR 是您可以使用我的SimpleDateTimeProvider NuGet 包来帮助您解决这个问题。代码的实现如下。

解决方案[……]

继续阅读