douxing9228 2017-07-22 15:50
浏览 22
已采纳

Go函数点表示法

I want to build this:

finalResult, err := Function1(whatever type)
    .Function2(whatever type)
    .Function3(whatever type)

Something similar to promises in javascript but not necessarily the same concepts. Or similar to nested methods in Java. I just pretend avoid more code for the same tasks.

I don't want to do this :

result, err := new(Function1(whatever type)) //or *Function1(whatever type)
if err != nil {...}
result1, err := result.Function2(whatever type)
if err != nil {...}
finalResult, err := result1.Function3(whatever type)
if err != nil {...}

I've been trying with several options with structs and interfaces but I can't get any result.

My apology if I have a mistake in my grammar. I'm not still so good with my skill English.

Thanks,

David

  • 写回答

2条回答 默认 最新

  • dsjq62428 2017-07-22 16:56
    关注

    I think you mean the Fluent API design pattern. You return the same Object, or struct in Go, over and over.

    This pattern does not allow you to return a tuple, or multiple return types though. You can only return one object.

    https://play.golang.org/p/9PceZwi1a3

    package main
    
    import (
        "fmt"
    )
    
    type Object struct {
        Value string
        Error error
    }
    
    func (o *Object) Before(s string) *Object {
        o.Value = s + o.Value
        // add an error if you like
        // o.Error = error.New(...)
        return o
    }
    
    func (o *Object) After(s string) *Object {
        // could check for errors too
        if o.Error != nil {
            o.Value = o.Value + s
        }
        return o
    }
    
    func main() {
        x := Object{}
    
        x.
            Before("123").
            After("456").
            After("789").
            Before("0")
    
        if x.Error != nil {
            // handle error
        }
        fmt.Println(x.Value)
    }
    

    Edit: sberry's answer had a good idea. Add an Error state on the Object struct itself which could allow u to check for errors in each func call.


    Since you are new, please remember to evaluate all answers and mark the best one you believe lead you the answer.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格