# How to multiply duration by integer in GO? [SOLVED]

Written By - Tuan Nguyen

In this tutorial, we will walk through some examples of converting int to `time.Duration` and doing some operations (division, multiply) with it. The built-in package time in Golang provides functionality for measuring and displaying time. The calendrical calculations always assume a Gregorian calendar, with no leap seconds.

`type Duration int64`: A Duration represents the elapsed time between two instants as an int64 nanosecond count. The representation limits the largest representable duration to approximately 290 years.

The millisecond, second, minute,.. are `time.Duration` type:

``````type Duration int64

const (
Nanosecond  Duration = 1
Microsecond          = 1000 * Nanosecond
Millisecond          = 1000 * Microsecond
Second               = 1000 * Millisecond
Minute               = 60 * Second
Hour                 = 60 * Minute
)
``````

These are all `time.Duration` type, but underneath it's an int64 that may be used by a numeric untyped integer and is assignable.

## Can we multiply time.Duration by an integer (int32)?

The example below prints out a message and sleep for a few second then print the next message:

``````package main

import (
"fmt"
"time"
)

func main() {
var timeout = 3
fmt.Println("This is the first message!")

// sleep for 3 second
time.Sleep(timeout * time.Second)

fmt.Println("This is the second message!")
}``````

Output:

```# command-line-arguments
.\duration.go:13:13: invalid operation: timeout * time.Millisecond (mismatched types int and time.Duration)```

The program has crashed because numeric operations require the same input type unless they include shifts or untyped constants. In this example, we can not multiply a `time.Duration` by an integer.

## Example 1: Multiply time.Duration by a constant

In this example, we will declare a constant and try to multiply a duration by this constant:

``````package main

import (
"fmt"
"time"
)

const timeout = 3

func main() {

fmt.Println("This is the first message!")

// sleep for 3 second
time.Sleep(timeout * time.Second)

fmt.Println("This is the second message!")
}
``````

The compiler knows the underlying type of duration is `int64.` Literals and constants are untyped unless the type is expressly defined until they are used. In this case, `timeout` is a constant without a type. The implicit conversion of its type to `time.Duration`. This application will print the results:

## Example 2: Multiply a time.Duration by an untyped literal constant

In this example, we will use an untyped literal constant with a default type of integer, it has an ideal type.

``````package main

import (
"fmt"
"time"
)

func main() {
fmt.Println("This is the first message!")
time.Sleep(3 * time.Second)
fmt.Println("This is the second message!")
}
``````

The output will be the same as the example 2. Noted that: `3 * time.Second` can be directly calculated because Go converts the untyped constants to numeric types automatically. Here, it converts `3` to `time.Duration` automatically, because it's an alias to Int64.

## Example 3: Convert an int variable to time.Duration

In the example below, we will declare an int variable and then convert it to a `time.Duration.` Finally, we multiply it by the `time.Duration`:

``````package main

import (
"fmt"
"time"
)

func main() {
fmt.Println("This is the first message!")

// sleep for 3 second
timeout := 3
// convert int to time.Duration
time.Sleep(time.Duration(timeout) * time.Second)

fmt.Println("This is the second message!")
}
``````

We have the same output as example 1.

## Summary

In Golang, unlike other languages, `time.Duration` has its own type. Integer and `time.Duration` are two different types, so the multiplication of them results in an error and crashing of the code. The solution is using a constant or converting int to `<span class="mini-code">time.Duration</span>` by using `<span class="mini-code">time.Duration()</span>` function and then multiplying them.

## References

Didn't find what you were looking for? Perform a quick search across GoLinuxCloud

If my articles on GoLinuxCloud has helped you, kindly consider buying me a coffee as a token of appreciation. For any other feedbacks or questions you can either use the comments section or contact me form.