how does go implement closures