返回介绍

11.10 揪出隐藏的代码

发布于 2024-08-14 12:50:31 字数 3282 浏览 0 评论 0 收藏 0

不能执行的 Go 代码是逻辑错误,因此由开发者或一个 Go 编译器的正常执行操作来解决这个问题是相当困难的。简单讲,除了无法执行此代码外,对于隐藏代码没有任何问题!

看一下下面保存在 cannotReach.go 中的代码:

package main
import (
    "fmt"
)

func f1() int {
    fmt.Println("Entering f1()")
    return -10
    fmt.Println("Exiting f1()")
    return -1
}

func f2() int {
    if true {
        return 10
    }
    fmt.Println("Exiting f2()")
    return 0
}

func main() {
    fmt.Println(f1())
    fmt.Println("Exiting program...")
}

cannotReach.go 的代码没有语法错误。因此,您可以执行 cannotReach.go,编译器不会报任何错误:

$ go run cannotReach.go
Entering f1()
-1
Exiting program...

注意程序中的 f2() 从来没有被执行。然而,这很容易猜到下面的 f2() 没有执行的原因是之前的 if 语句总是 true

fmt.Println("Exiting f2()")
return 0

因此,对于这个问题您能做什么呢?您可以执行下面的 go tool vet

$ go tool vet cannotReach.go
cannotReach.go:10: unreachable code

这个输出告诉我们有不可到达代码在程序的第10行。现在我们来从函数 f1() 中移除 return -10 语句,再执行 go tool vet

$ go tool vet cannotReach.go

这里没有新的错误信息,尽管在 f2() 函数中仍有隐藏代码。这意味着 go tool vet 无法捕获每种可能的逻辑错误。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文