登录
首页 >  Golang >  Go问答

在 Go 中如何使用 Err 的 goto 标签

来源:stackoverflow

时间:2024-02-21 12:36:23 151浏览 收藏

哈喽!今天心血来潮给大家带来了《在 Go 中如何使用 Err 的 goto 标签》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

我想使用标签来最小化错误部分,如下所示:

package main
import (
    "fmt"
    consul "github.com/hashicorp/consul/api"
    "os"
)
func main(){
    client,err := consul.newclient(consul.defaultconfig())
    if err != nil {
        goto err
    }
    agent := client.agent()
    checkreg := agent.agentcheckregistration{
        id:   "test-check",
        name: "test-check",
        notes: "some test check",
    }
    if err = agent.checkregister(checkreg); err !=nil{
        goto err
    }
err:
    fmt.println(err)
    os.exit(2)
}

所以我可以有一个地方将所有错误处理放在一个地方,但似乎不起作用

./agent.CheckRegister.go:10:8: goto Err jumps over declaration of checkReg at 
./agent.CheckRegister.go:13:19: agent.AgentCheckRegistration undefined (type *api.Agent has no field or method AgentCheckRegistration)

有没有办法使用 goto 使其工作?


解决方案


编译器抱怨的原因在 Go spec 中定义:

执行“goto”语句不得导致任何变量出现 进入不在 goto 点范围内的范围。 例如这个例子:

goto l  // bad  
  v := 3
l:

是错误的,因为跳转到标签 l 跳过了 v 的创建。

因此您需要重组代码。如果您想继续在此处使用 goto(而不是 if-else 语句),那么您必须将所有声明向上移动。

请注意,您可以像这样拆分它:

var v Type
   ...
L: ...
   v = FunctionThatReturnsType()

这里goto l应该没问题。

好了,本文到此结束,带大家了解了《在 Go 中如何使用 Err 的 goto 标签》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>