我有一个代码,需要添加新的值。目标是同化用户和报价,为此我创建了一个结构体称为“用户报价”。
type UserQuote struct {
User models.User
QuoteNumbers []int
}
每个用户都有一些引号,但是引号需要被一个用户同化,我创建了一些循环,来获取引号,并随机同化我之前选择的用户,如果这个用户是另一种类型的结构体,这对我的问题来说并不重要,但是你需要知道它们存储在一个名为usersThatBuySweepstakeNumbersBySweepstake的切片中。
for _, quote := range availableQuotes {
rand.Seed(time.Now().UnixNano())
randomIndex := rand.Intn(len(usersThatBuySweepstakeNumbersBySweepstake))
selectedUser := usersThatBuySweepstakeNumbersBySweepstake[randomIndex]
selectedUserIsInList := false
for _, userQuote := range usersQuotes {
if userQuote.User.ID == selectedUser.ID {
userQuote.QuoteNumbers = append(userQuote.QuoteNumbers, quote)
selectedUserIsInList = true
}
}
if !selectedUserIsInList {
usersQuotes = append(usersQuotes, UserQuote{
User: selectedUser,
QuoteNumbers: []int{quote},
})
}
}
如果用户之前没有关联的引号,则不会将其插入到UserQuote结构数组中。在这种情况下,将其插入到以下代码片段中(是之前代码片段的一部分):
if !selectedUserIsInList {
usersQuotes = append(usersQuotes, UserQuote{
User: selectedUser,
QuoteNumbers: []int{quote},
})
}
正如你所看到的,“QuoteNumbers”数组已经初始化了但是,如果已经插入了,struct内部的“QuoteNumbers”数组应该被追加,这里我们有一个问题:没有追加!代码已被剪切
for _, userQuote := range usersQuotes {
if userQuote.User.ID == selectedUser.ID {
userQuote.QuoteNumbers = append(userQuote.QuoteNumbers, quote)
selectedUserIsInList = true
}
}
这段代码只插入了这个切片的第一个元素“QuoteNumbers”,后面的就不追加了。
我正在调试应用程序,并确信“append”的调用超出预期,但切片只保留了创建结构“instance”时插入的第一个元素
以下代码已被截取,所有代码已被截取,但顺序在一起:
type UserQuote struct {
User models.User
QuoteNumbers []int
}
usersQuotes := make([]UserQuote, 0)
//TODO
if len(usersThatBuySweepstakeNumbersBySweepstake) == 0 {
}
availableQuotes := GetAvailableSweepStakesNumbersNumbers(sweepStake.ID)
if availableQuotes == nil || len(availableQuotes) == 0 {
c.AbortWithStatusJSON(400, gin.H{
"message": "Não há mais números disponíveis para este sorteio",
})
}
//TODO
for _, quote := range availableQuotes {
rand.Seed(time.Now().UnixNano())
randomIndex := rand.Intn(len(usersThatBuySweepstakeNumbersBySweepstake))
selectedUser := usersThatBuySweepstakeNumbersBySweepstake[randomIndex]
selectedUserIsInList := false
for _, userQuote := range usersQuotes {
if userQuote.User.ID == selectedUser.ID {
userQuote.QuoteNumbers = append(userQuote.QuoteNumbers, quote)
selectedUserIsInList = true
}
}
if !selectedUserIsInList {
usersQuotes = append(usersQuotes, UserQuote{
User: selectedUser,
QuoteNumbers: []int{quote},
})
}
}
我的“附加”有什么问题?
1条答案
按热度按时间fae0ux8s1#
当
append
使用range
循环将元素ing到slice
时,您应该使用循环索引更新slice元素,而不是更新局部变量(在您的情况下是userQuote
):