Golang自定义超时解决方案

Golang自定义超时解决方案,go,ssh,timeout,Go,Ssh,Timeout,我需要为ssh.Dial创建一个自定义超时解决方案。我试着在sshConfig中设置超时,但它有时不起作用,这会导致整个程序挂起 connection, err := ssh.Dial("tcp", "X.X.X.X:22", sshConfig) 在某些情况下它会超时,在其他情况下它会工作。但它在特定的IP上绊倒了,什么也没做。它只是挂起整个程序 那么,我该如何为这一行代码编写自己的超时解决方案呢?这样做了,它成功了: c1 := make(chan bool, 1) go

我需要为ssh.Dial创建一个自定义超时解决方案。我试着在sshConfig中设置超时,但它有时不起作用,这会导致整个程序挂起

connection, err := ssh.Dial("tcp", "X.X.X.X:22", sshConfig)
在某些情况下它会超时,在其他情况下它会工作。但它在特定的IP上绊倒了,什么也没做。它只是挂起整个程序


那么,我该如何为这一行代码编写自己的超时解决方案呢?

这样做了,它成功了:

    c1 := make(chan bool, 1)
    go RunRequest(element, authInfo, c1)
    select {
        case <-c1:
        case <-time.After(time.Second * 4):
    }

ssh.Dial在RunRequest GoRoutine中。

配置似乎需要超时。见:

换言之:

conn, err := ssh.Dail("tcp", "X.X.X.X:22", ssh.ClientConfig{Timeout: time.Second * 4})

不要使用ssh.Dial,而是使用DialTimeout,例如:-listener,err:=net.DialTimeouttcp,192.xxx.x.xxx:8899,如果出现错误,则使用10*time.Secondnil{fmt.Printfconnection error,err.error}DialTimeout的行为类似于Dial,但需要超时。我很好奇是什么导致代码挂起。请您提供一些关于这种情况的更多信息好吗?这并没有超时,只是让挂起功能无限期地运行,这可能会占用系统资源,也可能不会占用系统资源。但如果RunRequest被阻止,它并不是“超时”RunRequest,而是让它无限期地被阻止。如果超时不起作用,找出被阻止的内容,而不是忽略它。这需要一个超时。它只是不尊重它,会无限期地挂在一些IP上。