45

次のように2つの単純な構造体を実装しようとしています:

package main

import (
    "fmt"
)

type MyBoxItem struct {
    Name string
}

type MyBox struct {
    Items []MyBoxItem
}

func (box *MyBox) AddItem(item MyBoxItem) []MyBoxItem {
    return append(box.Items, item)
}

func main() {

    item1 := MyBoxItem{Name: "Test Item 1"}
    item2 := MyBoxItem{Name: "Test Item 2"}

    items := []MyBoxItem{}
    box := MyBox{items}

    AddItem(box, item1)  // This is where i am stuck

    fmt.Println(len(box.Items))
}

私は何を間違っていますか?ボックス構造体で addItem メソッドを呼び出して、アイテムを渡したいだけです。

4

3 に答える 3

92

うーん... これは、Go でスライスに追加するときに最もよくある間違いです。結果をスライスに代入する必要があります。

func (box *MyBox) AddItem(item MyBoxItem) []MyBoxItem {
    box.Items = append(box.Items, item)
    return box.Items
}

また、型を定義AddItemした*MyBoxので、このメソッドを次のように呼び出しますbox.AddItem(item1)

于 2013-08-04T11:48:25.267 に答える
20
package main

import (
        "fmt"
)

type MyBoxItem struct {
        Name string
}

type MyBox struct {
        Items []MyBoxItem
}

func (box *MyBox) AddItem(item MyBoxItem) []MyBoxItem {
        box.Items = append(box.Items, item)
        return box.Items
}

func main() {

        item1 := MyBoxItem{Name: "Test Item 1"}

        items := []MyBoxItem{}
        box := MyBox{items}

        box.AddItem(item1)

        fmt.Println(len(box.Items))
}

遊び場


出力:

1
于 2013-08-04T11:39:44.670 に答える