I'm learning Go currently and I made this simple and crude inventory program just to tinker with structs and methods to understand how they work. In the driver file I try to call a method from and item type from the items map of the Cashier type. My method have pointer reciever to use the structs directly instead of making copies. When I run the program I get this error .\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()) } The part of the code that really pertains to my problem is the GetAmount function in inventory.go and print statement in the driver.go