Recently, while working on a post about Kubernetes Operators, I faced an issue with “time multiplication” and couldn’t understand why Go did what it did. If you have some background with Kubernetes Operators, I recommend checking out the issue itself. If you are focussed on just Go, here’s the code:
package main
import (
	"fmt"
	"time"
)
func main() {
	d := 5 * time.Second
	fmt.Println(d)
	fmt.Println(d * time.Second)
}
and here’s the output:
$ go run ./main.go
5s
1388888h53m20s
I expected the second fmt.Println output to print 5s as well. 1388888h53m20s made no sense to me! I ended up
pinging on the Gophers Slack and got an answer
which surprised me.
The reason for this output is how time.Second is declared in the standard library’s
time package
- it’s an integer with the value 10^9. So the expression inside second fmt.Println would translate to
5 * 10^9 * 10^9 and the result of
that would be printed by the
String method.
That’s it Link to heading
I had a hunch while posting the GitHub issue on operator-sdk repository, but I couldn’t think of a possible cause till I saw the first response to my query. That was a pretty neat thing I recently learned about Go.