面试题答案
一键面试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)
}
在上述代码中:
StartChain
函数初始化Chain
结构体。MiddleFunction
函数在进行计算前检查value
是否为负数,如果是则返回错误,否则对value
进行操作并返回自身和nil
错误。EndFunction
函数返回最终计算结果。- 在
main
函数中,先调用StartChain
,然后链式调用MiddleFunction
并检查错误,如果没有错误则继续调用EndFunction
获取最终结果。这样就实现了在链式调用中正确传递和处理错误。