I just spent a solid day debugging memory corruption with a Cgo library that was passing a pointer as uintptr, which failed in rare cases when the stack was copied then overwritten. The GODEBUG=efence=1 flag actually made the bug go away ... unless you make the Goroutine stacks big enough to trigger this sort of stack protection.
Two changes to efence that might be helpful for these types of bugs:
1. Make efence overwrite small allocations that are freed, to try and make memory corruption bugs more obvious.
2. Make efence increase the default Goroutine stack size to 1 page, so it can always mark stacks as inaccessible
3. Randomize the stack starting point, to trigger stack growth in different places in different runs of the program.
If these seem like reasonable suggestions, I would be happy to write a Go issue tracker item with them, and more details about my experience using this.
Evan Jones