closures are a mandatory language feature... go had them from the beginning
really cool thing for building work queues you can put closures into a channel, and the channel can be buffered so the load/unload sequence can be disjoint
closures are really cool for dynamic execution too, just have to create functions that initialise parameters and then you can construct a giant closure made out of many little closures that all runs in one go... this is used extensively in "Immediate Mode GUI" designs in go
and because go is go, you can also use closures for defer statements (that run before a function returns) or you can have a closure inside a function that spawns a goroutine - pretty much essential for any case where you have a second stage process so the main thread digs out data, then a second thread can assemble it, and when the main thread is finished, spawn a job on the collection that was assembled... i'm in the middle of debugging one of these... got some stray strange indexes popping up that i can't trace