分享一个关于 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 人士也能自己搭建个性化的管理应用,降低技术门槛。开发者仅需少量代码或无需代码就可以开发出各类应用管理系统,由于多数采用组件和封装的接口进行开发,使得开发效率大幅提升。

相关推荐
AI+程序员在路上1 小时前
VS Code 完全使用指南:下载、安装、核心功能与 内置AI 编程助手实战
开发语言·人工智能·windows·开源
invicinble1 小时前
这里对java的知识体系做一个全域的介绍
java·开发语言·python
catchadmin1 小时前
使用 PHP TrueAsync 改造 Laravel 协程异步化的可行路径
开发语言·php·laravel
wbs_scy1 小时前
【Linux 线程进阶】进程 vs 线程资源划分 + 线程控制全详解
java·开发语言
AI人工智能+电脑小能手2 小时前
【大白话说Java面试题】【Java基础篇】第15题:JDK1.7中HashMap扩容为什么会发生死循环?如何解决
java·开发语言·数据结构·后端·面试·哈希算法
KeyonY2 小时前
车联网MQTT 消息处理的高并发优化
mqtt·golang·车联网
郑州光合科技余经理2 小时前
同城O2O海外版二次开发实战:从支付网关到配送算法
开发语言·前端·后端·算法·架构·uni-app·php
南子北游3 小时前
Python学习(基础语法1)
开发语言·python·学习
张健11564096483 小时前
使用信号量限制并发数量
开发语言·c++
糯米团子7494 小时前
Web Worker
开发语言·前端·javascript