在 Golang 中取消引用地图索引

我目前正在学习 Go,我制作了这个简单粗暴的清单程序,只是为了修改结构和方法以了解它们是如何工作的。在驱动程序文件中,我尝试从收银台类型的项目映射中调用方法和项目类型。我的方法有指针接收者直接使用结构而不是复制。当我运行程序时出现此错误.\driver.go:11: cannot call pointer method on f[0]

    .\driver.go:11: cannot take the address of f[0]


库存.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


墨色风雨
浏览 211回答 3
3回答

蓝山帝景

虽然其他答案很有用,但我认为在这种情况下,最好让非变异函数不带指针:func (i item) GetName() string{    return i.itemName}func (i item) GetAmount() int{    return i.amount}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go