Go 中使用泛型任一类型进行错误处理
在 Go 1.18 中,泛型的引入提供了增强错误处理的潜力。通过创建“Either[A,B]”类型,可以表示可以是 A 类型或 B 类型的值。
这种方法不同于传统的 Go 习惯用法,即返回“正常” ' 值和错误值,其中 nil 错误表示成功返回。但是,当所需的行为是传达某个值是 A 或 B,而不是两者时,这可能会出现问题。
克服接口方法限制
尝试由于接口方法必须没有类型参数的限制,为 Switch 方法定义带有类型参数的 Either 接口并不成功。为了避免这种情况,另一种方法是引入可选性的概念。
可选性和任一类型
可选类型可以定义为具有get() 方法要么返回一个值,要么返回一个 nil 错误,如果不存在值则返回一个错误。然后可以根据可选性概念来定义 Either 类型:
type Either[A, B any] interface { is_left() bool is_right() bool find_left() Optional[A] find_right() Optional[B] }
使用这种方法,Either 类型可以实现为 Left 和 Right 变体,它们表示存在 A 类型或分别为 B。
type Left[A, B any] struct { data A } type Right[A, B any] struct { data B }
真实示例
以下示例演示行动中的 Either 类型:
var e1 Either[int, string] = left[int, string](4143) var e2 Either[int, string] = right[int, string]("G4143") ... if e1.is_left() { if l, err := e1.find_left().get(); err == nil { fmt.Printf("The int is: %d\n", l) } else { fmt.Fprintln(os.Stderr, err) } } ...
此代码有效地捕获和处理 Either 值,演示了可选性概念如何提供灵活且富有表现力的方式来处理错误或在 Go 中表示可选值。
以上是泛型如何使用任一类型改进 Go 中的错误处理?的详细内容。更多信息请关注PHP中文网其他相关文章!

本文解释了GO的软件包导入机制:命名imports(例如导入“ fmt”)和空白导入(例如导入_ fmt; fmt;)。 命名导入使包装内容可访问,而空白导入仅执行t

本文详细介绍了MySQL查询结果的有效转换为GO结构切片。 它强调使用数据库/SQL的扫描方法来最佳性能,避免手动解析。 使用DB标签和Robus的结构现场映射的最佳实践

本文解释了Beego的NewFlash()函数,用于Web应用程序中的页间数据传输。 它专注于使用newflash()在控制器之间显示临时消息(成功,错误,警告),并利用会话机制。 Lima

本文探讨了GO的仿制药自定义类型约束。 它详细介绍了界面如何定义通用功能的最低类型要求,从而改善了类型的安全性和代码可重复使用性。 本文还讨论了局限性和最佳实践

本文演示了创建模拟和存根进行单元测试。 它强调使用接口,提供模拟实现的示例,并讨论最佳实践,例如保持模拟集中并使用断言库。 文章

本文详细介绍了在GO中详细介绍有效的文件,将OS.WriteFile(适用于小文件)与OS.openfile和缓冲写入(最佳大型文件)进行比较。 它强调了使用延迟并检查特定错误的可靠错误处理。

本文使用跟踪工具探讨了GO应用程序执行流。 它讨论了手册和自动仪器技术,比较诸如Jaeger,Zipkin和Opentelemetry之类的工具,并突出显示有效的数据可视化


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

记事本++7.3.1
好用且免费的代码编辑器

Atom编辑器mac版下载
最流行的的开源编辑器

WebStorm Mac版
好用的JavaScript开发工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境