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 请问为什么我配置IPsec后PC1 ping不通 PC2,抓包出来数据包也并没有被加密
  • ¥200 求博主教我搞定neo4j简易问答系统,有偿
  • ¥15 nginx的使用与作用
  • ¥100 关于#VijeoCitect#的问题,如何解决?(标签-ar|关键词-数据类型)
  • ¥15 一个矿井排水监控系统的plc梯形图,求各程序段都是什么意思
  • ¥50 安卓10如何在没有root权限的情况下设置开机自动启动指定app?
  • ¥15 ats2837 spi2从机的代码
  • ¥200 wsl2 vllm qwen1.5部署问题
  • ¥100 有偿求数字经济对经贸的影响机制的一个数学模型,弄不出来已经快要碎掉了
  • ¥15 数学建模数学建模需要