登录
首页 >  Golang >  Go问答

os.Exit 后不应标记无法访问的代码

来源:stackoverflow

时间:2024-04-13 18:54:34 138浏览 收藏

偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《os.Exit 后不应标记无法访问的代码》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!

问题内容

转到1.12窗口

在 os.exit 之后而不是之前错放了 fmt.println, 这不应该导致编译器失败或者至少发出警告吗?

package main

import (
    "fmt"
    "os"
)

func main() {
    fmt.Println("Hello, playground")
    os.Exit(0)
    fmt.Println("Good By, playground")
}

解决方案


os.Exit() 就像任何其他函数一样,编译器不应该知道它终止应用程序,因此后面的其余代码是无法访问的。 os.exit() 只是一个示例,还有更多示例,例如 log.Fatal()(调用 os.exit())。更不用说您还可以创建一个调用其中一个的函数,编译器应该走多远才能检测所有或大部分这些?

更进一步,go 编译器不会检测也不会标记“真正”无法访问的代码。使用 return 语句时的以下变化对编译器来说甚至可能是显而易见的:

func main() {
    fmt.println("hello, playground")
    return
    fmt.println("good by, playground")
}

但它编译和运行得很好,并输出(在 Go Playground 上尝试一下):

hello, playground

因此编译器不会检测到无法访问的代码,但 go vet 会检测到,这也是由 go 演示运行的,因此您可以看到应用程序的输出前缀为:

./prog.go:10:2: unreachable code
Go vet exited.

这个问题之前已经提出过,请参阅 cmd/gc: report unreachable code #9501。robert grisemer 的回应是:

本篇关于《os.Exit 后不应标记无法访问的代码》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

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