golang 有这样一段代码go func logPrintln截图子线程运行中 for running monkeyDeviceScreenshot_continuous&monkeyWhite_scr &monkeyBlack_scr &monkeyWhite_time &monkeyBlack_time &monkeyPic_count &monkeyWhite_time_
可以通过使用goroutine和channel来实现在主程序中打印报错信息。
首先,在主程序中创建一个channel用于接收报错信息:
errChan := make(chan error)
然后,在子线程中使用defer函数捕获错误,并将错误信息发送到errChan中:
go func() {
defer func() {
if r := recover(); r != nil {
errChan <- fmt.Errorf("截图子线程发生错误: %v", r)
}
}()
log.Println("截图子线程运行中...")
for running {
monkey.Device.Screenshot_continuous(&monkey.White_scr, &monkey.Black_scr,
&monkey.White_time, &monkey.Black_time, &monkey.Pic_count, &monkey.White_time_temp, &monkey.Black_time_temp)
time.Sleep(200 * time.Millisecond)
}
log.Println("截图子线程已退出!")
}()
最后,在主程序中通过select语句监听errChan,当有报错信息时,打印出来:
select {
case err := <-errChan:
fmt.Println(err)
}
这样,当子线程遇到报错时,报错信息会被发送到errChan中,然后在主程序中通过select语句接收并打印出来。
原文地址: http://www.cveoy.top/t/topic/i5xh 著作权归作者所有。请勿转载和采集!