add a Cancel interface to do it golang way