Golang中的方法链

虽然在Golang中,在某些情况下进行方法改变并不是一个好的习惯,但如果你把你的方法连锁起来,那就很有用了。
这背后的原因是不同的异常处理方式,在另一种编程语言中,在一个chan函数中出现异常时,它会抛出异常,其他方法不会被运行。
在这篇文章中,我将展示我们如何在Golang中实现它。
假设我想有一个应用注册表,想动态地添加客户:

package mainimport ("errors""fmt""log"
)type (ClientA struct {}ClientB struct {}ClientC struct {}
)type Registry struct {ca  *ClientAcb  *ClientBcc  *ClientCerr error
}func (r *Registry) withClientA() *Registry {if r.err != nil {return r}fmt.Println("client A initialed")r.ca = &ClientA{}return r
}func (r *Registry) withClientB() *Registry {if r.err != nil {return r}r.err = errors.New("error at initial client B")return r
}func (r *Registry) withClientC() *Registry {if r.err != nil {return r}fmt.Println("client C initialed")r.cc = &ClientC{}return r
}func main() {c := Registry{}d := c.withClientA().withClientB().withClientC()if d.err != nil {log.Fatalf("can not initial Clients due to %v", d.err)}
}

output:

client A initialed
2023/02/22 23:14:04 can not initial Clients due to error at initial client B

如果你运行它,你可以看到,由于ClientB初始化时的一个故意的错误,该方法链将被失败,错误将被缓存在注册表中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/658756.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

广告营销为什么需要使用代理IP

在广告营销中使用代理IP有几个主要原因 绕过限制和封禁 某些广告平台或网站可能会限制或封禁特定IP地址或IP地址范围,以防止滥用或欺诈行为。使用代理IP可以帮助您绕过这些限制,使您能够在被封禁的IP范围之外进行广告投放。 地理定位和目标市场 广告…

MySQL中 GROUP BY 语句的优化

在数据库查询中,GROUP BY语句允许我们按某些字段对数据集进行分组,并在每个分组上应用聚合函数。但是,当处理大量数据时,如果不加优化,GROUP BY操作可能会导致性能问题。特别是在MySQL这样的数据库系统中,如…

知识点积累系列(六)操作系统(Linux+Windows+MacOS)篇【持续更新】

云原生学习路线导航页(持续更新中) 本文是 知识点积累 系列文章的第六篇,记录日常学习中遇到的 操作系统相关 的知识点,包括 Linux、Windows、MacOS等 1.Linux相关 1.1.shell脚本 1.2.命令相关 1.2.1.vim命令 1.2.2.nslookup命…

【openwtr】

openwtr clash openwtrclash 报错: 源文件duplicate src declaration 换源

Java常见算法题解析面试题(下)

21.回文数。【了解】 问题描述:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。 public class lianxi { public static void main(String[] args) { Scanner s new Scanner(Sys…

GPT-4 Vision调试任何应用,即使缺少文本日志 升级Streamlit七

GPT-4 Vision 系列: 翻译: GPT-4 with Vision 升级 Streamlit 应用程序的 7 种方式一翻译: GPT-4 with Vision 升级 Streamlit 应用程序的 7 种方式二翻译: GPT-4 Vision静态图表转换为动态数据可视化 升级Streamlit 三翻译: GPT-4 Vision从图像转换为完全可编辑的表格 升级St…

本地配置Joplin Server用于Joplin笔记同步并实现公网远程访问

文章目录 1. 安装Docker2. 自建Joplin服务器3. 搭建Joplin Sever4. 安装cpolar内网穿透5. 创建远程连接的固定公网地址 Joplin 是一个开源的笔记工具,拥有 Windows/macOS/Linux/iOS/Android/Terminal 版本的客户端。多端同步功能是笔记工具最重要的功能,…

LabVIEW潜油电泵数据采集系统

LabVIEW潜油电泵数据采集系统 介绍一个基于LabVIEW的潜油电泵数据采集系统。该系统目的是通过高效的数据采集和处理,提高潜油电泵的性能监控和故障诊断能力。 系统由硬件和软件两部分组成。硬件部分主要包括数据采集卡、传感器和电泵等,而软件部分则是…

IMX6LL|打造自己的驱动总线

xbus:打造自属的驱动总线 驱动总线 软件与硬件代码分离,提高程序的复用性 device–关联硬件代码driver_devices–关联软件代码bus_type–统一管理、设置match匹配规则 设备驱动模型体现分离思想 bus-xbus-devices-drivers 总线管理 buses_init()函…

鸿蒙系统扫盲(七):勘误补充总结,收个尾

这是笔者鸿蒙扫盲系列的最后一篇了,准备对过去的六篇扫盲系列文章,错误的地方做一些勘误,并且补充更新一些朋友们感兴趣的知识,最后收个尾。 1.勘误,编译型语言和解释型语言 在鸿蒙系统扫盲(五&#xff0…

网工内推 | 网络安全工程师专场,大平台,六险一金

01 汽车之家 招聘岗位:高级网络安全工程师 职责描述: 1、负责公司网站、系统与产品的漏洞扫描、渗透测试与安全评估工作; 2、负责公司安全系统与安全设备的运维,负责公司网络安全监控管理; 3、负责公司安全事件的应急…

社区投稿|Desig质押聚合器功能,帮助用户选出更适合的质押策略

在Sui上,不同的质押协议提供收益各异的产品,因此用户面临着众多可以质押token的协议,眼花缭乱无从选择。Desig质押聚合器功能现已整合到Desig钱包扩展中,极大地简化了寻找质押策略的流程。事实上,其智能质押功能支持完…

记录:Windows上QML程序打包

0.本文修改记录 (2019-9-3) 修改了VC环境相关的内容 (2020-3-5) 修改了QML模块相关的内容 (2022-8-31)one-rabbit大佬指出打包命令的参数错误,根据文档可知:qmldir应该为exe对应项…

使用C++操作Matlab中的mat文件

matlab提供读写MAT文件的头文件和库函数,下面列出这些文件的路径,其中matlabroot指matlab安装的路径,arch来识别平台架构 头文件在matlabroot\extern\include库函数在matlabroot\bin\win64例程在matlabroot\extern\examples\eng_mat头文件 …

力扣(leetcode)第136题只出现一次的数字(Python)

136.只出现一次的数字 题目链接:136.只出现一次的数字 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题,…

transformer_位置编码代码笔记

transformer_位置编码代码笔记 transformer输入的序列中,不同位置的相同词汇可能会表达不同的含义,通过考虑位置信息的不同来区分序列中不同位置的相同词汇。 位置编码有多种方式,此处仅记录正余弦位置编码 正余弦位置编码公式如下&#x…

宠物用品/宠物自动饮水机方案

宠物自动饮水机方案原理 宠物自动饮水机,也叫做智能宠物饮水机,是一种为宠物设计的智能化饮水器。应用核心主要在于智能化水泵控制,以及外围传感器电路。 宠物自动饮水机使用方便,不用频繁的换水。另外,自来水的水质可…

(6)Elastix图像配准:可视化配准工具

文章目录 前言一、配准工具1.1、基于Elastix的可视化配准工具1.1.1、elastix-napari:基于napari的Elastix图像配准1.1.2、SlicerElastix:基于3D slice的Elastix图像配准1.1.3、BIRDS:基于ImageJ的Elastix双通道图像配准 1.2、基于ITK开发的配…

「HDLBit题解」Finding bugs in code

本专栏的目的是分享可以通过HDLBits仿真的Verilog代码 以提供参考 各位可同时参考我的代码和官方题解代码 或许会有所收益 题目链接:Bugs mux2 - HDLBits module top_module (input sel,input [7:0] a,input [7:0] b,output [7:0] out );assign out sel ? a : b…

微信小程序如何实现点击上传图片功能

如下所示,实际需求中常常存在需要点击上传图片的功能,上传前显示边框表面图片显示大小,上传后将图形缩放到边框大小。 实现如下: .wxml <view class="{{img_src==?blank-area:}}" style="width:100%;height:40%;display:flex;align-items: center;jus…