我试图在像这样的结构中存储时间
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示例
答案 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()
}
}