Why time.After in a loop retained timers before Go 1.23, and how a reusable timer avoided the resulting memory growth.