分享一个关于 Go 错误处理的新提案

在比较一段长的时间里,Go 的错误处理已经没有什么特别的进展和新改进了。看着已经到了瓶颈期。

今天在 GitHub 上学习时,看到 Go 社区里有人提了个错误处理的优化提案《proposal: Go 2: Error-Handling Paradigm with !err Grammar Sugar》,也是引入新的语法来解决该问题。

大家一起来看看,也集思广益一下。原提案作者的目的是新增一个 listen 关键字和配合管道符等语法来实现新的错误处理。

原本的 Go1 代码,我们在处理错误时需要使用 if err != nil。如下代码:

func copy(src, dst string) (int64, error) {r, err := os.Open("input.txt")if err != nil {return 0, err}defer r.Close()w, err := os.Create("output.txt")if err != nil {return 0, err}defer w.Close()if _, err = io.Copy(w, r); err != nil {return 0, err}return 0, err
}

本提案的变化是:新增一个 listen 关键字,用于监听 err 变量,再配合 "|" 管道符来实现新的错误处理机制。

如下演示代码:

listen: err {if err != nil  {return 0, err}return 0, nil
}()func copy(src, dst string) (int64, error) {listen:r, err := os.Open("input.txt")defer r.Close()w, err := os.Create("output.txt")defer w.Close()_, err = io.Copy(w, r) 
}

listen 关键字监听了 err 变量,再在上述的代码块中进行统一的错误逻辑处理。

如果是多个 err 变量,会是如下处理方式:

listen: err | err2 {if err != nil  {return 0, err}return 0, nil
}()

增加了管道符,同时对 err 和 err2 变量进行监听和处理。

本提案还在等待作者补充更多的语言变更的实现细节。不过截至目前为止,吐槽是不少的。

大家对此有没有更好的建议和想法呢?

Go 的新错误处理的改造方向真的是让人头大。我这边有记载被 ban 的错误处理合集都已经有许多了。停滞不前中。

拓展详谈

作为一组数字技术工具平台,能基于图形化拖拽、参数化配置等更为高效的方式,实现快速构建、数据编排、连接生态、中台服务等。通过少量代码或不用代码实现数字化转型中的场景应用创新。它能缓解甚至解决庞大的市场需求与传统的开发生产力引发的供需关系矛盾问题,是数字化转型过程中降本增效趋势下的产物。

一般而言,小的需求可以选择无代码平台;高度复杂核心的企业系统建议选择企业级低代码开发平台(比如 JNPF 快速开发平台)。

JNPF 快速发平台采用的是前后分离框架(SpringBoot+Mybatis-plus+Ant-Design+Vue3)。代码生成器依赖性低,灵活的扩展能力,可灵活实现二次开发。它预置大量开箱即用的功能,提供了用户友好的开放接口,可以轻松与各种构建工具和 IDE 集成。还支持插件和自定义规则,使得开发人员可以根据项目的特定需求和标准对其进行定制化配置。

应用体验:www.jnpfsoft.com?csdn ,可自行尝试!

通过它,编码薄弱的 IT 人士也能自己搭建个性化的管理应用,降低技术门槛。开发者仅需少量代码或无需代码就可以开发出各类应用管理系统,由于多数采用组件和封装的接口进行开发,使得开发效率大幅提升。

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

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

相关文章

【PyTorch】(五)模型训练

文章目录 1. 基本步骤 1. 基本步骤 for epoch in range(num_epochs):for _X, _y in dataloader:# 将数据转移到GPU_X, _y _X.to(device), _y.to(device)# 前向传播计算损失loss criterion(model(_X).reshape(_y.shape), _y)# 清空优化器梯度缓存optimizer.zero_grad()# 误差…

SELinux refpolicy详解(7)

接前一篇文章:SELinux refpolicy详解(6) 三、refpolicy内容详解 1. README 文件路径:refpolicy源码根目录/README。 文件内容如下: 1) Reference Policy make targets:General Make targets:install-src Install …

【Skynet 入门实战练习】分布式 ID | 雪花算法 | 缓存设计 | LRU算法 | 数据库

文章目录 前言雪花算法LRU 算法缓存模块数据库测试逻辑 前言 本节实现了 分布式 ID 生成系统,采用雪花算法实现唯一 ID;实现缓存架构,采用 LRU (最近最少使用)算法。 雪花算法 分布式 ID 生成算法的有很多种&#x…

Redis——某马点评day01——短信登录

项目介绍 导入黑马点评项目 项目架构 基于Session实现登录 基本流程 实现发送短信验证码功能 controller层中 /*** 发送手机验证码*/PostMapping("code")public Result sendCode(RequestParam("phone") String phone, HttpSession session) {// 发送短信…

mysql8.0 提取json数据转为行

仅适用于mysql8.0,之前的版本不支持JSON_TABLE函数 数据结构: idnamejsonarr1张三[{"daystr": "2023-12-01","score": "53"},{"daystr": "2023-12-02","score": "78"}]2李四[{&q…

B站缓存视频M4S合并MP4(js + ffmpeg )

文章目录 B站缓存视频转MP4(js ffmpeg )1、说明 2、ffmpeg2.1 下载地址2.2 配置环境变量2.3 测试2.4 转换MP4命令 3、处理程序 B站缓存视频转MP4(js ffmpeg ) 注意:这样的方式只用于个人之间不同设备的离线观看。请…

spring boot mybatis TypeHandler 看源码如何初始化及调用

目录 概述使用TypeHandler使用方式在 select | update | insert 中加入 配置文件中指定 源码分析配置文件指定Mapper 执行query如何转换 结束 概述 阅读此文 可以达到 spring boot mybatis TypeHandler 源码如何初始化及如何调用的。 spring boot 版本为 2.7.17,my…

SQL Server 2016(创建数据表)

1、需求描述。 在名为“class”的数据库中创建表,表名称为“course”,其中要包含序号、课程、课程编号、学分、任课教师、上课地点、开始时间、结束时间、备注等列。 设置各个字段的数据类型。其中,"序号"列为标识列,从…

4-Docker命令之docker kill

1.docker kill介绍 docker kill命令是用来杀掉一个或多个正在运行中的容器。 2.docker kill用法 docker kill [参数] container [container......] [root@centos79 ~]# docker kill --helpUsage: docker kill [OPTIONS] CONTAINER [CONTAINER...]Kill one or more running…

分享几个可以免费使用GPT工具

1. 国产可以使用GPT3.5和4.0的网站,每日有免费的使用额度,响应速度,注册时不用使用手机号,等个人信息,注重用户隐私,好评! 一个好用的ChatGPT系统 ,可以免费使用3.5 和 4.0https://…

3台4核16G机器搭建K8S集群

在三台具有4核16GB内存的机器上安装Kubernetes(K8s)集群涉及到几个关键步骤。我们将一个机器设为主节点(Master)和两个工作节点(Worker)。以下是详细步骤: 1. 系统环境准备(在所有机…

企业如何做好合规管理?

近年来“合规”作为一个热点话题,频繁出现在公众视野,已然成为企业管理发展的大趋势。国家相继出台的各项合规管理标准预示着我国的企业合规管理正逐步从头部央企向民营企业扩展。因此,各大企业将合规管理作为了企业管理的首要任务。 随着中…

Mysql 行转列,把逗号分隔的字段拆分成多行

目录 效果如下源数据变更后的数据 方法第一种示例SQL和业务结合在一起使用 第二种示例SQL和业务结合在一起使用 结论 效果如下 源数据 变更后的数据 方法 第一种 先执行下面的SQL,看不看能不能执行,如果有结果,代表数据库版本是可以的&…

C语言:写一个函数,输入一个十六进制数,输出相应的十进制数

分析: 当用户运行该程序时,程序会提示用户输入一个十六进制数。用户需要在命令行中输入一个有效的十六进制数,例如:"1A3F"。 接下来,程序调用了名为 xbed 的函数,并将用户输入的十六进制数作…

_WorldSpaceLightPos0的含义 UNITY SHADER

_WorldSpaceLightPos0 为当前平行光的方向,方向是从光源到照射的方向。 因此,如果要算发现和平行光之间的夹角, 则需要首先将归一化的_WorldSpaceLightPos0去负数。这样才能继续去计算。 也就是: fixed3 reflectdirnormalize…

php获取时间和MongoDB保存时间不一致

最近遇到了问题,php获取的时间和在MongoDB中查看的时间差了8小时,原因是: PHP 与 MongoDB 的默认时区设置不同: PHP 默认可能使用服务器的本地时区,或者是在 PHP 配置文件(php.ini)中设置的时…

激光SLAM:Faster-Lio 算法编译与测试

激光SLAM:Faster-Lio 算法编译与测试 前言编译测试离线测试在线测试 前言 Faster-LIO是基于FastLIO2开发的。FastLIO2是开源LIO中比较优秀的一个,前端用了增量的kdtree(ikd-tree),后端用了迭代ESKF(IEKF&a…

VS2022 配置Qt编译环境 | winows安装Qt5.14.2 | VS2017和Qt5配置成功指南

Visual Studio 2022安装教程完文本内容较多,请耐心看完,挺有收获的,要自己多尝试哦。 文章目录 # 插件安装 如果你想用VS2022来创建QT项目,那么你首先要学会下面的操作,创建一个空白解决方案,在扩展搜索qt,并且下载两个插件(带有绿√的就是)。这里其实是一个坑:VS20…

H5 实现麦克风

要在 HTML5 中使用麦克风&#xff0c;可以使用 Web Audio API 和 getUserMedia() 方法。以下是一个简单的示例&#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>使用麦克风</title> </head> <…

智慧校园:打造未来教育新时代

智慧校园&#xff1a;打造未来教育新时代 智慧校园是指利用先进的信息技术手段&#xff0c;通过云计算、大数据分析、人工智能等技术来提升教育教学质量和管理效率的一种模式。随着科技的不断发展&#xff0c;智慧校园正成为教育领域的热门话题。本文将深入探讨智慧校园的定义、…