Go Result
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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论