Go Result

发布于 2024-01-02 22:17:22 字数 1324 浏览 69 评论 0

package result

type Result interface {
	IsOk() bool
	IsErr() bool
	Map(fn func(interface{}) interface{}) Result
	Chain(fn func(interface{}) Result) Result
	Extract() interface{}
}

type Ok struct {
	data interface{}
}

func (o Ok) Map(fn func(interface{}) interface{}) Result {
	ret := fn(o.data)

	return Ok{
		data: ret,
	}
}

func (o Ok) IsOk() bool {
	return true
}

func (o Ok) IsErr() bool {
	return false
}

func (o Ok) Chain(fn func(interface{}) Result) Result {
	ret := fn(o.data)
	return ret
}

func (o Ok) Extract() interface{} {
	return o.data
}


type Error struct {
	error error
}

func (e Error) Map(fn func(fn interface{}) interface{}) Result {
	return e
}

func (e Error) Chain(fn func(interface{}) Result) Result {
	return e
}

func (e Error) Extract() interface{} {
	panic(e)
}

func (e Error) IsOk() bool  {
	return false
}
func (e Error) IsErr() bool  {
	return true
}

func Of(v interface{}) Result {
	return Ok{
		data: v,
	}
}

func Err(e error) Result {
	return Error{
		error: e,
	}
}

func ToResult(data interface{}, err error) Result {
	if err != nil {
		return Err(err)
	}
	return Of(data)
}

使用方法:

func main() {
	data, err := ioutil.ReadFile("Gopkg.toml")
	ret := result.ToResult(data, err)
	result := ret.Extract()
	str := fmt.Sprintf("%s", result)
	println(str)
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

文章
评论
1145 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文