Implementing a try-catch-like block in Go

本文介绍了一种使用类似Javatry-catch的结构在Go语言中处理错误和异常的方法,包括ctxTry、ctxCatch、Exception等类型以及Try、Catch和Finally函数的用法。示例展示了如何在函数执行前后进行错误捕获和最终清理操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

It is a sample of java-style try-catch-like implement in go. just so so.

type public struct {
	error
	any
}

type ctxTry struct {
	public
}

type Exception struct {
	public
}

type ctxCatch struct {
	public
}

func (c *ctxCatch) Finally(fn func(e *Exception)) {
	fn((*Exception)(c))
}

func (c *ctxTry) Catch(fn func(e *Exception) error) *ctxCatch {
	return &ctxCatch{public{error: fn((*Exception)(c))}}
}

func (c *ctxTry) Finally(fn func(e *Exception)) {
	fn((*Exception)(c))
}

type Context interface {
	Finally(e *Exception)
}

func Try(fn func() error) (c *ctxTry) {
	defer func() {
		if err := recover(); err != nil {
			c = new(ctxTry)
			marshal, _ := json.Marshal(err)
			c.public = public{error: errors.New(string(marshal))}
		}
	}()
	err := fn()
	return &ctxTry{public{error: err}}
}

func demo() {
	Try(func() error {
		return nil
	}).Catch(func(e *Exception) error {

		return nil
	}).Finally(func(e *Exception) {

	})

	Try(func() error {
		return nil
	}).Finally(func(e *Exception) {

	})
}

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

metabit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值