首页 > 后端开发 > Golang > 为什么对于相同的 Go `time.Time` 结构, `==` 返回 `false`?

为什么对于相同的 Go `time.Time` 结构, `==` 返回 `false`?

Mary-Kate Olsen
发布: 2024-12-17 21:50:16
原创
357 人浏览过

Why Does `==` Return `false` for Identical Go `time.Time` Structs?

为什么 == 对于具有相同日期和时间的时间结构体返回 false?

在 Go 中,time.Time 是一个包含字段的结构体代表日期、时间和时区。使用 == 比较两个 time.Time 值时,需要注意的是,不仅比较日期和时间,还比较位置。

== 运算符比较结构体的所有非空白字段,包括指向位置字段(*Location)的指针。虽然两个位置可能代表相同的时区,但它们可能驻留在不同的内存地址。

因此,在比较共享相同日期和时间但在不同位置创建的两个 time.Time 值时,此即使时刻相等,也会导致 == 返回 false。

示例:

考虑以下内容code:

import (
    "fmt"
    "time"
)

func main() {
    t1 := time.Date(2016, 4, 14, 1, 30, 30, 222000000, time.UTC)
    t2 := time.Date(2016, 4, 14, 1, 30, 30, 222000000, time.Local)

    fmt.Println(t1.Equal(t2)) // true (compares date and time only)
    fmt.Println(t1 == t2)      // false (also compares location pointers)
}
登录后复制

这里,t1 和 t2 代表同一时刻,但 t1 为 UTC,而 t2 为本地时区。当使用 .Equal() 比较 t1 和 t2 时(忽略位置),返回 true。但是,由于位置指针不同,使用 == 会产生 false。

解决方法:

严格基于日期和时间来比较 time.Time 值。应使用 equal() 方法而不是 ==。或者,您可以通过调用 t.In(t.Location()) 来手动确保两个 time.Time 值共享相同的位置指针。

以上是为什么对于相同的 Go `time.Time` 结构, `==` 返回 `false`?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板