datetime - 为什么 map[time.Time]string 有时不起作用?

标签 datetime go associative-array

这是一个显示 map[time.Time]string“不起作用”的示例。

package main

import (
    "fmt"
    "time"
)

type MyDate time.Time

func NewMyDate(year, month, day int, tz time.Location) (MyDate, error) {
    return MyDate(time.Date(year, time.Month(month), day, 0, 0, 0, 0, &tz)), nil
}

func (md MyDate)ToTime() time.Time {
    return time.Time(md)
}

func main()  {
    timeMap := make(map[time.Time]string)

    md1, _ := NewMyDate(2019, 1, 1, *time.UTC)
    md2, _ := NewMyDate(2019, 1, 1, *time.UTC)

    timeMap[md1.ToTime()] = "1"
    timeMap[md2.ToTime()] = "2"

    for k, v := range timeMap {
        fmt.Println(k, v)
    }
}

输出:

2019-01-01 00:00:00 +0000 UTC 1

2019-01-01 00:00:00 +0000 UTC 2

最佳答案

func NewMyDate(year, month, day int, tz time.Location) (MyDate, error) {
  return MyDate(time.Date(year, time.Month(month), day, 0, 0, 0, 0, &tz)), nil
}

&tz是指NewMyDate参数的地址,每次调用可能不一样。在 Go 中,函数参数按值传递。

每次调用都使用相同的时区。例如,

package main

import (
    "fmt"
    "time"
)

type MyDate time.Time

func NewMyDate(year, month, day int, tz *time.Location) (MyDate, error) {
    return MyDate(time.Date(year, time.Month(month), day, 0, 0, 0, 0, tz)), nil
}

func (md MyDate) ToTime() time.Time {
    return time.Time(md)
}

func main() {
    timeMap := make(map[time.Time]string)

    md1, _ := NewMyDate(2019, 1, 1, time.UTC)
    md2, _ := NewMyDate(2019, 1, 1, time.UTC)

    timeMap[md1.ToTime()] = "1"
    timeMap[md2.ToTime()] = "2"

    for k, v := range timeMap {
        fmt.Println(k, v)
    }
}

Playground :https://play.golang.org/p/M10Xn4jsoKS

输出:

2019-01-01 00:00:00 +0000 UTC 2

关于datetime - 为什么 map[time.Time]string 有时不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54147939/

相关文章:

python - 将 df 中的列从另一个列更改为

php - 返回的 php DateTime 有什么问题?

R 创建函数添加水年列

linux - 在 bash 关联数组中使用变量作为键

datetime - y 轴上的 Matplotlib 日期

javascript - 如何在 Golang 中使用 JQuery 数据表?

go - panic 并从包裹中恢复

json - 如何根据 swagger 架构验证 JSON 架构实例?

php - 如何在字符串中回显关联数组的元素?

associative-array - 梳状与顺序中的关联数组元素访问