gpt4 book ai didi

Golang 结构成员存储时间不持有值(value)

转载 作者:IT王子 更新时间:2023-10-29 02:29:42 26 4
gpt4 key购买 nike

我正在尝试将时间存储在这样的结构中

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())
}

在调用 Update 开始时,GoTime 始终为 0。它永远不会保持它的值(value)。

这是一个playground例子

最佳答案

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

Playground 示例的修订版:

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()
}
}

关于Golang 结构成员存储时间不持有值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36589364/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com