On Friday, November 1, 2019 at 10:30:50 AM UTC-4, Shulhan wrote: > > > On Fri, 1 Nov 2019, 21:07 burak sarac, <bura...@gmail.com <javascript:>> > wrote: > >> I have a go routine running something like 'hash.sum(data)' using import >> "hash" that I want to terminate immediately in case of user wants to >> kill, I can not send channel to notify. >> > > > I have not tried this, but you can use a combination of defer, panic and > recover to unroll the process. > > The recover function is inside calculate, and the for-loop is running in > goroutine before calculate. > > defer func() { recover() } > go loop() > calculate() > > Inside the loop() you will call panic("terminate"). > > -- Shulhan >
Shulhan - I think the point was that Burak does not have control over the code for the function that we want to interrupt. So he has no ability to insert a panic. Burak - I do not believe there is a generic way to interrupt a function or goroutine which does not take a Context, or have some other interruption method baked in. I know the idea of being able to "kill" a goroutine has been discussed before, and has generally gone nowhere. It might be useful to have more details of the call, and to understand why you need to interrupt this function. Assuming the hash.sum() you refer to takes a []byte, then how long could it reasonably take? The best bet might be to simply let it finish and ignore the result. Of course, if the function is being sourced off an io.Reader(), or something like that, then you might be able to interrupt the stream by wrapping the interface with some of your own code. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/e9464b1d-f753-4df4-9d29-e6d19cf870d2%40googlegroups.com.