gpt4 book ai didi

go - 不可能类型开关案例 : ErrorType (type reflect. 类型)不能有动态类型 *os.SyscallError(缺少对齐方法)

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

尝试确定连接错误是什么并将值返回给程序。

d := net.Dialer{Timeout: 20*time.Second}
conn, errors := d.Dial("tcp", fmt.Sprintf("%v:%v", host, port))
if errors != nil {
if oerr, ok := errors.(*net.OpError); ok {
ErrorType := reflect.TypeOf(oerr.Err)
switch ErrorType.(type) {
case *os.SyscallError:
fmt.Println("connect: connection timed out to", host, "on port", port )
case *poll.TimeoutError:
fmt.Println("connect: connection refused to", host, "on port", port )
default:
panic("Unknown connection errot")
}
}
} else {
fmt.Println("connect: connection successful to", host, "on port", port )
}

if conn != nil {
conn.Close()
}

获取跟随误差#命令行参数./main.go:33:9: 不可能的类型转换案例:ErrorType(类型 reflect.Type)不能有动态类型 *os.SyscallError(缺少 Align 方法)./main.go:35:15: undefined: 轮询

最佳答案

你不需要在这里使用reflect。您只需要类型断言语言构造:

    conn, errors := d.Dial("tcp", fmt.Sprintf("%v:%v", host, port))
if oerr, ok := errors.(*net.OpError); ok {
switch oerr.Err.(type) {
case os.SyscallError:
...
}
}

请记住,您不能对 poll.TimeoutError 进行 case,因为 poll 包是内部的,您无法导入它。不管以上所有,如果你想检查,如果错误与超时有关,你应该使用 net.OpError 上定义的 Timeout 方法

关于go - 不可能类型开关案例 : ErrorType (type reflect. 类型)不能有动态类型 *os.SyscallError(缺少对齐方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52459245/

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