Golang Go语言中 新手请教大家一个语法疑问~ err.(func()string) 这是什么写法什么意思~
Golang Go语言中 新手请教大家一个语法疑问~ err.(func()string) 这是什么写法什么意思~
package main
import (
“fmt”
“reflect”
)
func main() {
defer func() {
if err := recover(); err != nil{
fmt.Println("++++")
fmt.Println(err)
f := err.(func()string)
fmt.Println(err,f(),reflect.TypeOf(err).Kind().String())
}else {
fmt.Println(“fatal”)
}
}()
defer func() {
panic(func() string {
return "defer panic"
})
}()
panic("panic")
}
更多关于Golang Go语言中 新手请教大家一个语法疑问~ err.(func()string) 这是什么写法什么意思~的实战教程也可以访问 https://www.itying.com/category-94-b0.html
defer 是倒序执行的,你在首先在第一个 defer 里面 panic 了一个 func,然后再在第二个 defer 拿这个 func。话说,我还是第一次见到 panic function 的
更多关于Golang Go语言中 新手请教大家一个语法疑问~ err.(func()string) 这是什么写法什么意思~的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
recover() 返回的是一个 interface{}
对 interface{}的类型可以进行一个 type assertion 的操作, 参考 https://golang.org/ref/spec#Type_assertions
这里就是对 err 这个变量,尝试转换成一个 func()string 的函数类型
断言,我是解析 json 时候学到的。
你好!在Go语言中,err.(func()string)
这种写法实际上是不正确的,它看起来像是尝试对 err
进行类型断言(type assertion)或类型转换,但是格式有误。
首先,类型断言的基本语法是 x.(T)
,其中 x
是接口类型的变量,T
是断言的目标类型。如果 x
确实存储了 T
类型的值,那么类型断言会成功并返回该值(类型为 T
而不是接口类型)。如果 x
没有存储 T
类型的值,类型断言会失败并引发运行时恐慌(panic)。
然而,func()string
是一个函数类型,表示一个无参数且返回 string
类型值的函数。在Go中,你不能直接将一个变量(特别是错误类型的变量,如 err
)断言为函数类型,因为这两者在Go的类型系统中是完全不同的类别。
如果你的目的是检查 err
是否为某种特定类型的错误,并获取该错误类型的特定字段或方法,你应该这样做:
if e, ok := err.(specificErrorType); ok {
// 使用 e 的特定字段或方法
} else {
// 处理其他类型的错误
}
其中 specificErrorType
是你想要断言的错误类型。
总之,err.(func()string)
这种写法是错误的,可能是对类型断言的误解。希望这能帮助你更好地理解Go语言中的类型断言和错误处理!