Golang结构成员存储时间不保持值

时间:2016-04-13 05:30:10

标签: go time struct

我试图在像这样的结构中存储时间

type TimeTest struct {
    GoTime time.Time
}

然后我有一个更新功能,将GoTime设置为当前时间。

func (t TimeTest) Update() {
    fmt.Println(t.GoTime.String())
    t.GoTime = time.Now()
    fmt.Println(t.GoTime.String())
}

在更新调用开始时,GoTime始终为0。它从未拥有它的价值。

这是一个playground示例

1 个答案:

答案 0 :(得分:4)

定义接收函数时,可以在值或指针上定义它。如果您在某个值上定义它(如您的示例中所示),则结构的副本将传递给接收函数,因此任何更新都会丢失,因为该函数在函数完成后会被销毁。如果在指针上定义它,则传递结构本身,因此任何更新都会影响调用函数的结构的实际副本。

您的游乐场示例的修订版本:

package main

import (
    "fmt"
    "time"
)

type TimeTest struct {
    GoTime time.Time
}

func (t *TimeTest) Update() {
    fmt.Println(t.GoTime.String())
    t.GoTime = time.Now()
    fmt.Println(t.GoTime.String())

}

func main() {
    t := TimeTest{}

    for i := 0; i < 3; i++ {
        t.Update()
    }
}