我目前正在学习Go,我制作了这个简单而又粗糙的库存程序,只是为了修改结构和方法以了解它们的工作原理。在驱动程序文件中,我尝试从Cashier类型的项目映射中调用方法和项目类型。我的方法具有指针接收者,可以直接使用结构而不是进行复制。当我运行程序时,出现此错误.\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
和print语句driver.go
地图条目无法寻址(因为其地址可能会在地图增长/缩小期间发生变化),因此您无法在其上调用指针接收器方法。
此处详细信息:https :
//groups.google.com/forum/?fromgroups=#!topic/ golang-nuts/
4_pabWnsMp0
问题内容: 我已经在“ Go编程语言”中读到“无论哈希表有多大,平均都可以使用恒定数量的键比较来检索给定的键”。我不确定这在内部实现方面意味着什么。这是否意味着它会搜索每个键,直到找到匹配项,或者内部使用某种类型的二进制(或其他)搜索算法? 例如,如果我有一个具有2,000个键的地图,那么它“平均”是否需要查看1,000才能找到匹配项?或者它只像二进制搜索那样只查看11(log2 n)? 谢谢,本
问题内容: 我正在尝试在Go中找到“ @”字符串字符,但找不到解决方法。我知道如何索引像“ HELLO [1]”这样的字符,它将输出“ E”。但是我试图找到找到的字符的索引号。 在Python中,我可以通过以下方式进行操作: 因此,在使用“ @”定界符时,字符将返回“字符”,而Arefun将返回“ arefun”。我一直在努力寻找解决方案达数小时之久,但似乎无法在Golang中找到正确的解决方案。
我的主键是一个名为“ID”的字段 我在表中的字段“group_number”上添加了一个辅助索引 我通过二级索引进行查询,如下所示: 然而;我得到错误“ValidationException:query condition missed key schema Element:ID” DynamoDB只允许查询主键吗?我的印象是您使用“getitem”作为主键,因为如果您使用一个主键,只有一个记录可
问题内容: PostgreSQL 9.4 我正好遇到称为节点,并提到所谓的底层位图数据结构的概念,在这个岗位。据我所知,不支持创建位图索引。 问题: 因此,每当需要使用位图数据结构来执行时,我们需要首先构建它,或者PostgreSQL在构建索引期间创建它,并在表发生变化时重新构建它吗? 问题答案: 页面位图是为每个查询动态创建的。它不会被缓存或重复使用,并在位图索引扫描结束时被丢弃。 事先创建页面
问题内容: 据我了解,地图是Go中的参考类型。因此,分配将进行浅表复制。我计划在golang中进行Maps的递归深层复制。递归,因为我正在处理一个包含JSON的未编组内容的映射。 错误:无法使用(* dest)[key]的地址。(map [string] interface {})我该如何解决?还有其他方法可以绘制深层地图吗? 我在golang的map的内部入门,也将很有用。 问题答案:
问题内容: 为了在模板中使用‘s’ 关键字,我想在使用进行迭代时获取地图条目的索引。有什么办法吗?我的地图具有以下结构: 问题答案: 您不仅可以使用模板操作来执行此操作,还可以注册一个提供必要帮助的函数。 您可以注册一个返回一个函数(闭包)的函数,该函数在每次调用时都会改变其返回值(确切地说,“奇数”和“偶数”索引的交替方式): 我将其命名为不与ravel的碰撞。使用它: 输出(在Go Playg