1

まだ存在しない場合にスライスに新しい要素を追加する次のコードがあります。存在する場合は、新しい要素を追加するのではなく、既存の要素の qty プロパティをインクリメントする必要があります。

package main

import (
    "fmt"
)

type BoxItem struct {
    Id int
    Qty int
}

type Box struct {
    BoxItems []BoxItem
}

func (box *Box) AddBoxItem(boxItem BoxItem) BoxItem {

    // If the item exists already then increment its qty
    for _, item := range box.BoxItems {
        if item.Id == boxItem.Id {
             item.Qty++
             return item
        }
    }

    // New item so append
    box.BoxItems = append(box.BoxItems, boxItem)
    return boxItem
}


func main() {

    boxItems := []BoxItem{}
    box := Box{boxItems}

    boxItem := BoxItem{Id: 1, Qty: 1}

    // Add this item 3 times its qty should be increased to 3 afterwards
    box.AddBoxItem(boxItem)
    box.AddBoxItem(boxItem)
    box.AddBoxItem(boxItem)


    fmt.Println(len(box.BoxItems))  // Prints 1 which is correct

    for _, item := range box.BoxItems {
        fmt.Println(item.Qty)  // Prints 1 when it should print 3
    }
}

問題は、数量が正しく増加しないことです。提供された例では 3 であるべき場合、常に 1 で終了します。

コードをデバッグしたところ、インクリメント セクションに達したように見えますが、値が項目に保持されていません。

ここで何が問題なのですか?

4

3 に答える 3