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条)

报告相同问题?

悬赏问题

  • ¥15 如何通过交互分析得出某高危患者对放疗获益更多
  • ¥15 相关性分析中,p<0.05, r=0.29,怎么评价相关性呢
  • ¥15 docker部署Mongodb后输入命令报错?
  • ¥15 将下列流程图转变成python程序代码
  • ¥15 我需要全国每个城市的最新小区名字等数据。
  • ¥15 开发一个小区生态的小程序
  • ¥15 如何解决Excel中dependent dropdown list 的问题
  • ¥15 MddBootstrapInitialize2失败
  • ¥15 LCD Flicker
  • ¥15 esp32在micropython环境下使用ssl/tls连接mqtt服务器出现以下报错Connected on 192.168.154.223发生意外错误: 5无法连接到 MQTT 代理,如何解决?