我很抱歉我的英语。 我有两个关于go语言代码的问题。这是我的程序。 该程序控制“数据库”中昵称的存在。Go(Golang) - 转到主要和打印主题goto的定义
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.")
}
}
我的问题是:
使用恢复功能(RCV()),在它的结束,召回的main()函数运行像另一个线程发送?主体main()函数在执行第二个函数或每当引发恐慌时结束,recover函数创建另一个进程? (例如:如果输入的昵称错误5次,则会启动5个主要函数,所以6个主要运行函数?)如果创建多次执行main(),是否有方法来打印线程/进程ID或类似的东西?
我使用了INSERT标签和goto构造。我可以在主函数之外使用goto(例如:在rcv()函数的末尾返回到主函数的顶部)? 我可以使用goto语句,而不是调用main()函数在RCV()结束
您是否尝试过?从规范“标签的范围是它声明的函数的主体,并排除任何嵌套函数的主体”。 – JimB
我已经尝试在rcv()函数中插入goto INSERT,但是说我没有声明标签。 – mx88
是的,所以没有回答这个问题?我不明白问题1,你没有创建任何新的进程或线程,甚至没有goroutines。虽然我会推荐构造这个表单的另一个函数,就像调用main()一样,这个函数很少引起混淆,因为你为什么要这么做。 – JimB