gpt4 book ai didi

go - 如何避免在连续错误处理中重复自己

转载 作者:IT王子 更新时间:2023-10-29 01:57:04 24 4
gpt4 key购买 nike

我对连续错误有以下处理:

nodes, err := model.AllNodes()
if err != nil { // This error handling
pr := progressRes{ // is Just a copy of
Type: progressResponse, // error handling
Message: err.Error(), // for the next error,
MessageType: errorMessage, // what is the
Progress: 100, // best practice
} // to avoid
go response(ws, pr.json()) // repeating myself here
return // without making the code
} // complicated
links, err := model.AllLinks()
if err != nil {
pr := progressRes{
Type: progressResponse,
Message: err.Error(),
MessageType: errorMessage,
Progress: 100,
}
go response(ws, pr.json())
return
}

在不使代码复杂的情况下避免在上面的代码中重复我自己的最佳做法是什么?我可以考虑添加一个新的 func,但是我只是认为可能有一个我不知道的更好的主意。

最佳答案

如果您在多个地方重复多个步骤,正确的方法是将这些步骤抽象成一个过程,这就是编程的意义所在。这适用于错误处理以及程序的任何其他部分。

一个选项:

func allNodesAndLinks() ([]*Node, []*Link, error) {
nodes, err := model.AllNodes()
if err != nil {
return nil, nil, err
}
links, err := model.AllLinks()
if err != nil {
return nil, nil, err
}
return nodes, links, nil
}

// ...

nodes, links, err := allNodesAndLinks()
if err != nil {
pr := progressRes{
Type: progressResponse,
Message: err.Error(),
MessageType: errorMessage,
Progress: 100,
}
go response(ws, pr.json())
return
}

另一种选择:

func respondWithError(ws io.Writer, err error) {
pr := progressRes{
Type: progressResponse,
Message: err.Error(),
MessageType: errorMessage,
Progress: 100,
}
response(ws, pr.json())
}

// ...

nodes, err := model.AllNodes()
if err != nil {
go respondWithError(ws, err)
return
}
links, err := model.AllLinks()
if err != nil {
go respondWithError(ws, err)
return
}

关于go - 如何避免在连续错误处理中重复自己,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50186132/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com