gpt4 book ai didi

multithreading - goto out of main 和 print threads 的定义

转载 作者:数据小太阳 更新时间:2023-10-29 03:37:16 25 4
gpt4 key购买 nike

我有两个关于 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.")
}
}

我的问题是:

  1. 使用恢复函数 ( rcv () ),在它结束时,调用的 main() 像另一个线程一样运行?主体 main() 函数在第二个执行时结束,或者每当引发 panic 时,恢复函数创建另一个进程? (例如:如果输入昵称错误 5 次,又启动了 5 个主要函数,那么 6 个主要运行函数?)如果创建 main() 的多次执行,有没有办法打印线程/进程 ID 或类似的东西?

  2. 我使用了 INSERT 标签和 goto 结构。我可以在 main 函数之外使用 goto (例如:在 rcv() 函数的末尾返回到 main 函数的顶部)吗?我可以使用 goto 而不是在 rcv() 结束时调用 main() 函数

最佳答案

1。关于延迟

defer 语句在退出作用域之前执行函数。因此在执行 defer-func 时,caller-func 的堆栈仍然存在。

func foo() (err error) {
defer func() {
err = io.EOF
}()
}

它将因 stackoverflow 而崩溃

2。关于转到

参见 documentation

A "goto" statement transfers control to the statement with the corresponding label within the same function.

所以你不能标记外部函数。

3。关于问题

How do I get back to the beginning of the main () function?

package main

func Main() {
// do your main
}

func main() {
for {
Main()
}
}

关于multithreading - goto out of main 和 print threads 的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44953744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com