私は現在、Goを学習しています。このシンプルで粗在庫のプログラムは、構造とメソッドを使ってどのように動作するかを理解するだけです。ドライバファイルでは、キャッシャータイプのアイテムマップからアイテムタイプとアイテムタイプを呼び出そうとします。私のメソッドは、コピーを作成するのではなく、構造体を直接使うためのポインタ・レシーバを持っています。私はプログラムを実行すると、私はこのエラーを取得する.\driver.go:11: cannot call pointer method on f[0] .\driver.go:11: cannot take the address of f[0]
ゴランのマップインデックスを間接的に参照する
Inventory.go:
package inventory
type item struct{
itemName string
amount int
}
type Cashier struct{
items map[int]item
cash int
}
func (c *Cashier) Buy(itemNum int){
item, pass := c.items[itemNum]
if pass{
if item.amount == 1{
delete(c.items, itemNum)
} else{
item.amount--
c.items[itemNum] = item
}
c.cash++
}
}
func (c *Cashier) AddItem(name string, amount int){
if c.items == nil{
c.items = make(map[int]item)
}
temp := item{name, amount}
index := len(c.items)
c.items[index] = temp
}
func (c *Cashier) GetItems() map[int]item{
return c.items;
}
func (i *item) GetName() string{
return i.itemName
}
func (i *item) GetAmount() int{
return i.amount
}
Driver.go:
package main
import "fmt"
import "inventory"
func main() {
x := inventory.Cashier{}
x.AddItem("item1", 13)
f := x.GetItems()
fmt.Println(f[0].GetAmount())
}
本当に私の問題に関連するコードの一部がGetAmount
です機能がinventory.go
で、印刷文がdriver.go
の場合