对不起我的英语。 我有两个关于go语言代码的问题。这是我的计划。 该程序控制“数据库”中昵称的存在。
package main
import "fmt"
func rcv(){
if r := recover() ; r != nil {
fmt.Println("retry.")
main()
}
}
func main(){
defer rcv()
INSERT:
fmt.Println("Insert a nickname: ")
var s string
fmt.Scanln(&s)
switch {
case len(s) <= 0 :
fmt.Println(fmt.Errorf("error empty"))
goto INSERT
case s=="mark"||s=="andrea":
fmt.Println("Accept, the nickname is",s)
default :
fmt.Println("ATTENTION, nickname not found")
panic("Error.")
}
}
我的问题是:
使用recover函数(rcv()),在它结束时,调用main()会像另一个线程一样运行吗?主要的main()函数在执行第二个函数时结束,或者每当引发恐慌时,恢复函数会创建另一个进程吗? (例如:如果输入昵称错误5次,则启动5个主要功能,所以6个主要运行函数?)如果创建main()的多个执行,是否有办法打印线程/进程ID或类似的东西
我使用了INSERT标签和goto构造。我可以在main函数之外使用goto(例如:在rcv()函数的末尾返回到main函数的顶部)? 我可以使用goto而不是在rcv()的末尾调用main()函数
答案 0 :(得分:0)
在退出范围之前延迟语句执行功能。因此在执行defer-func时会保留一堆caller-func。
jest-css-modules
而崩溃
“goto”语句将控制转移到具有相同函数的相应标签的语句。
所以你不能在外面写func。
如何返回main()函数的开头?
func foo() (err error) {
defer func() {
err = io.EOF
}()
}