Go 函数点符号

den*_*bit 4 go

我想建立这个:

finalResult, err := Function1(whatever type)
    .Function2(whatever type)
    .Function3(whatever type)
Run Code Online (Sandbox Code Playgroud)

类似于 JavaScript 中的 Promise,但概念不一定相同。或者类似于Java中的嵌套方法。我只是假装避免为相同的任务编写更多代码。

我不想这样做:

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 {...}
Run Code Online (Sandbox Code Playgroud)

我一直在尝试使用结构和接口的多个选项,但我无法得到任何结果。

如果我的语法有错误,我深表歉意。我的英语水平还不太好。

谢谢,

大卫

edu*_*911 5

我认为你指的是 Fluent API 设计模式。在 Go 中,您一遍又一遍地返回相同的对象或结构。

此模式不允许您返回元组或多个返回类型。您只能返回一个对象。

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)
}
Run Code Online (Sandbox Code Playgroud)

编辑:sberry 的答案有一个好主意。在结构本身上添加错误状态Object,这可以允许您检查每个 func 调用中的错误。


由于您是新手,请记住评估所有答案并标记您认为可以引导您找到答案的最佳答案。