In Go, you can encounter different behaviors when attempting to perform operations on time durations, floats, and untyped constants. Here's a closer look at two similar lines of code and why one works but the other doesn't.
The expression time.Hour / 73.0 is a short variable declaration. The right-hand side expression is a division between a time.Duration (constant value for an hour) and an untyped numeric constant (73.0).
Since time.Duration is an integer type (int64), the untyped constant is converted to a time.Duration (without loss of precision). Therefore, the division will result in a time.Duration value, which can be used to sleep for the specified fraction of an hour.
In contrast, the expression time.Hour / d fails because d is not of the correct type.
In the first line, d is declared as a float64 due to the type deduced from the untyped constant 73.0. However, when you attempt to divide time.Hour (a time.Duration) by d (a float64), Go raises a type mismatch error because you cannot operate on different types directly.
To make this line work, you need to convert d to a time.Duration. There are several ways to do this:
Alternatively, you can convert time.Hour to a float64, perform the division, and convert the result back to a time.Duration:
d := 73.5 s := time.Duration(float64(time.Hour) / d)
Untyped constants can take on different types depending on the context in which they are used. In this case, the untyped constant 73.0 takes the type float64 because it is used in an expression where it is assigned to the float64 variable d. However, in the expression time.Hour / 73.0, the constant is converted to a time.Duration because it is used in an operation with a time.Duration value.
The above is the detailed content of Why Does `time.Hour / 73.0` Work in Go, But `time.Hour / d` Fail?. For more information, please follow other related articles on the PHP Chinese website!