Home > Backend Development > Golang > Why Does `time.Hour / 73.0` Work in Go, But `time.Hour / d` Fail?

Why Does `time.Hour / 73.0` Work in Go, But `time.Hour / d` Fail?

Patricia Arquette
Release: 2024-12-04 18:01:16
Original
279 people have browsed it

Why Does `time.Hour / 73.0` Work in Go, But `time.Hour / d` Fail?

Converting Duration to Float and Back

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 Working Line: time.Hour / 73.0

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.

The Failing Line: time.Hour / d

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.

Making It Work:

To make this line work, you need to convert d to a time.Duration. There are several ways to do this:

  • Explicit Conversion: s := time.Hour / time.Duration(d)
  • Type Casting: s := time.Hour / time.Duration(d)
  • Duration Assignment: d := time.Duration(73.0)

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)
Copy after login

Understanding Untyped Constants:

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!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template