如何更改go数组中的值?

如何更改go数组中的值?,go,Go,这就是我要做的 for _,p := range *players { for _,tp := range *tournamentPlayers{ if p.Id==tp.PlayerId { p.Points += tp.Prize } } } 当您在数组上设置范围时,第二个变量将是值的副本。因此,在修改它时,实际上并不修改存储在数组中的值 您需要使用索引: for i

这就是我要做的

for _,p := range *players {
        for _,tp := range *tournamentPlayers{
            if p.Id==tp.PlayerId {
                p.Points += tp.Prize

            }
        }
    }

当您在数组上设置范围时,第二个变量将是值的副本。因此,在修改它时,实际上并不修改存储在数组中的值

您需要使用索引:

for i := range *players {
        for _,tp := range *tournamentPlayers{
            if players[i].Id==tp.PlayerId {
                players[i].Points += tp.Prize

            }
        }
    }

您将在中找到更多信息。

当您在数组上设置范围时,第二个变量将是值的副本。因此,在修改它时,实际上并不修改存储在数组中的值

您需要使用索引:

for i := range *players {
        for _,tp := range *tournamentPlayers{
            if players[i].Id==tp.PlayerId {
                players[i].Points += tp.Prize

            }
        }
    }

您可以在中找到更多信息。

在大多数情况下,使用指向切片的指针(例如,
*[]播放器
)几乎没有什么价值(如果有的话)。您应该改为使用指针片来键入xyz(例如,
[]*Player
)。如果您这样做,您的代码将工作。当然,没有什么能阻止您使用*[]*播放器,这也会使您的代码正常工作,但如果不需要,请不要这样做。感谢您提出的使用*[]*播放器的想法。我不需要处理副本和重写大量代码在大多数情况下,如果有指向切片的指针(例如,
*[]Player
)的价值很小(如果有的话)。您应该改为使用指针片来键入xyz(例如,
[]*Player
)。如果您这样做,您的代码将工作。当然,没有什么能阻止您使用*[]*播放器,这也会使您的代码正常工作,但如果不需要,请不要这样做。感谢您提出的使用*[]*播放器的想法。我不需要修改副本和重写大量代码