gpt4 book ai didi

go - 在延迟恢复时设置变量

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

根据示例(例如 getting panic() argument in defer function in GO lang )我已经看到,我希望它能工作,但事实并非如此。强制错误时,err 返回字符串保持空白,尽管打印 err 字符串显示预期的错误。

我确定我遗漏了一些明显的东西,但找不到它。有一点帮助吗?

// expected error example:
// chk, err := equal("a", map[string]string{"a"})
//
func Equal(a interface{}, b interface{}) (check bool, err string) {
defer func() {
if catch := recover(); catch != nil {
check = false

// this prints
fmt.Printf("%v\n", catch)

err = fmt.Sprint(catch)
}
}()

return a == b, ""
}

顺便说一句:

go version go1.2.1 linux/amd64

最佳答案

正如@nos 所指出的,这里没有 panic 。

此示例按预期工作:

package main

import "fmt"

func equal(a interface{}, b interface{}) (check bool, err string) {
defer func() {
if catch := recover(); catch != nil {
check = false
fmt.Printf("recover: %v\n", catch)
err = fmt.Sprint(catch)
} else {
fmt.Printf("recover: none\n")
}
}()

return a == b, ""
}

func main() {
chk, err := equal("a", "a")
fmt.Printf("a == a\n")
fmt.Printf("chk: %v\n", chk)
fmt.Printf("err: %v\n", err)
fmt.Println()

chk, err = equal("a", 1)
fmt.Printf("a == 1\n")
fmt.Printf("chk: %v\n", chk)
fmt.Printf("err: %v\n", err)
fmt.Println()

chk, err = equal([]int{1}, []int{1})
fmt.Printf("[]int{1}, []int{1}\n")
fmt.Printf("chk: %v\n", chk)
fmt.Printf("err: %v\n", err)
}

// Output:
//
// recover: none
// a == a
// chk: true
// err:
// recover: none
//
// a == 1
// chk: false
// err:
// recover: runtime error: comparing uncomparable type []int
//
// []int{1}, []int{1}
// chk: false
// err: runtime error: comparing uncomparable type []int

关于go - 在延迟恢复时设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23571764/

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