MST

星途 面试题库

面试题:Go函数链式调用中处理错误传递

在Go语言实现函数链式调用时,如果某个中间函数可能返回错误,应该如何设计链式调用结构,使得错误能够正确传递并被最终调用者处理?请编写代码示例说明。
31.5万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
)

// 定义一个结构体
type Chain struct {
    value int
}

// 第一个函数
func StartChain(value int) *Chain {
    return &Chain{value: value}
}

// 中间函数,可能返回错误
func (c *Chain) MiddleFunction() (*Chain, error) {
    if c.value < 0 {
        return nil, fmt.Errorf("value cannot be negative")
    }
    c.value = c.value * 2
    return c, nil
}

// 最后一个函数
func (c *Chain) EndFunction() int {
    return c.value
}

func main() {
    result, err := StartChain(5).MiddleFunction()
    if err != nil {
        fmt.Println("Error:", err)
        return
    }
    finalResult := result.EndFunction()
    fmt.Println("Final result:", finalResult)
}

在上述代码中:

  1. StartChain 函数初始化 Chain 结构体。
  2. MiddleFunction 函数在进行计算前检查 value 是否为负数,如果是则返回错误,否则对 value 进行操作并返回自身和 nil 错误。
  3. EndFunction 函数返回最终计算结果。
  4. main 函数中,先调用 StartChain,然后链式调用 MiddleFunction 并检查错误,如果没有错误则继续调用 EndFunction 获取最终结果。这样就实现了在链式调用中正确传递和处理错误。