Pointers 是什么导致Go出现此故障?

Pointers 是什么导致Go出现此故障?,pointers,go,segmentation-fault,Pointers,Go,Segmentation Fault,Background:由于Go的内置JSON封送器在给定ommitempty标志时不会检查零值,因此我们尝试在需要干净地封送到JSON的结构中使用*time.time而不是time.time。这个问题很明显,我们需要非常小心地检查它在使用时是否为零。我们注意到的一件事是,在一个函数中设置了包含结构的创建时间,当我们检查数据库中的JSON时,所有时间都完全相同,只有纳秒 为了检查这是否与指针有关,或者仅仅是因为系统运行良好,我做了: 但它一直在制造恐慌: panic: runtime error:

Background:由于Go的内置JSON封送器在给定
ommitempty
标志时不会检查零值,因此我们尝试在需要干净地封送到JSON的结构中使用
*time.time
而不是
time.time
。这个问题很明显,我们需要非常小心地检查它在使用时是否为零。我们注意到的一件事是,在一个函数中设置了包含结构的创建时间,当我们检查数据库中的JSON时,所有时间都完全相同,只有纳秒

为了检查这是否与指针有关,或者仅仅是因为系统运行良好,我做了:

但它一直在制造恐慌:

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0xffffffff addr=0x0 pc=0x20314]

goroutine 1 [running]:
panic(0x112c00, 0x1040a038)
    /usr/local/go/src/runtime/panic.go:500 +0x720
main.main()
    /tmp/sandbox675251439/main.go:23 +0x314

Program exited.

我假设这与指针不断地被重新分配有关,但我的思维有障碍,我无法准确地找出问题所在。有人能解释一下这里发生了什么吗?

在您的循环中,您复制每个
计时器的值。改为这样做:

for i := range t {
    now = time.Now()
    t[i].myTime = &now
}

除了Ainar-G所说的:所有指针都是相等的,并且指向同一个变量。你真的应该弄清楚你的逻辑。最初
现在
是在循环中声明的,所以那将是一个完全不同的指针是吗?我在尝试其他方法时将它移到了外部,但没有意识到问题在于循环复制了它所使用的值。这似乎是我一直在犯的错误,然后修复,一个月后又犯了一次。令人烦恼的是,我不能发布一个固定版本,因为我认为它是10/11/09。
for i := range t {
    now = time.Now()
    t[i].myTime = &now
}