ws无法连接时停止频道

Ray*_*n D 5 multithreading channel go websocket

我有下面的代码可以正常工作,问题是当连接socket.Connect() 失败时我想停止进程,我尝试使用以下代码,但是它不起作用,即如果套接字连接失败,程序仍然运行。我想发生的是,如果connect失败,过程将停止,并且通道会消失……我在这里缺少什么?

func run (appName string) (err error) {


        done = make(chan bool)
        defer close(done)


        serviceURL, e := GetContext().getServiceURL(appName)

        if e != nil {
            err = errors.New("process failed" + err.Error())
            LogDebug("Exiting %v func[err =%v]", methodName, err)
            return err
        }

        url := "wss://" + serviceURL + route


        socket := gowebsocket.New(url)
        addPass(&socket, user, pass)


        socket.OnConnectError = OnConnectErrorHandler
        socket.OnConnected = OnConnectedHandler
        socket.OnTextMessage = socketTextMessageHandler
        socket.OnDisconnected = OnDisconnectedHandler

        LogDebug("In %v func connecting to URL  %v", methodName, url)
        socket.Connect()

        jsonBytes, e := json.Marshal(payload)
        if e != nil {
            err = errors.New("build process failed" + e.Error())
            LogDebug("Exiting %v func[err =%v]", methodName, err)
            return err
        }

        jsonStr := string(jsonBytes)

        LogDebug("In %v Connecting to payload JSON is  %v", methodName, jsonStr)
        socket.SendText(jsonStr)

        <-done
        LogDebug("Exiting %v func[err =%v]", methodName, err)
        return err

    }


    func OnConnectErrorHandler(err error, socket gowebsocket.Socket) {
        methodName := "OnConnectErrorHandler"
        LogDebug("Starting %v parameters [err = %v , socket = %v]", methodName, err, socket)
        LogInfo("Disconnected from server ")
        done <- true
    }
Run Code Online (Sandbox Code Playgroud)

该进程应为运行大约60-90sec 的进程打开一个ws连接(例如执行npm install),并通过web socket及其完成时间获取进程的日志,当然要处理可能出现的问题,例如网络问题或运行Windows时出现的一些错误处理