无法在赋值中使用 make(Entry, 0, 100) (类型 Entry)作为类型 Map
短信预约 -IT技能 免费直播动态提醒
来到编程网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《无法在赋值中使用 make(Entry, 0, 100) (类型 Entry)作为类型 Map》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发!
问题内容尝试实现 go map,代码如下:
package gomap
type entry struct {
stockname string
stockvalue float64
}
type bucket []entry
type map [4]bucket
type bucketelementposition [4]int
var emptyposition = bucketelementposition{0, 0, 0, 0}
func newmap() map {
return map{} // [(nil,0,0), (nil,0,0), (nil,0,0), (nil,0,0)]
}
func insert(m []map, key string, value float64) { // m is sliceofslices type
bucketnumber := (key[0] - 'a') / 7
if cap(m[bucketnumber]) == 0 { // first insert, so create the backing array
m[bucketnumber] = make([]entry, 0, 100)
}
}
package main
import (
"fmt"
"github.com/myhub/cs61a/gomap"
)
func main() {
var stockdata = gomap.newmap()
gomap.insert(stockdata[:], "aapl", 94.56)
}
m[bucketnumber] = make([]entry, 0, 100)
给出错误:
cannot use make([]Entry, 0, 100) (type []Entry) as type Map in assignment
如何将 stockdata
的切片头传递给 insert()
函数?
解决方案
使用指向 map
的指针
m
的类型为 []map
,因此 m[bucketnumber]
的类型将为 map
,而不是 bucket
。
将 m
的类型更改为 *map
并在使用时取消引用:
func insert(m *map, key string, value float64) { // m is sliceofslices type
bucketnumber := (key[0] - 'a') / 7
if cap((*m)[bucketnumber]) == 0 { // first insert, so create the backing array
(*m)[bucketnumber] = make([]entry, 0, 100)
}
}
并传递stockdata
的地址:
gomap.insert(&stockdata, "aapl", 94.56)
但请注意,go 中的数组是次要的。如果您使用切片而不是数组(以及指向数组的指针),代码会更简单,而且可能更高效。
导出 bucket
并使用 []bucket
如果您可以导出bucket
,那么您可以将m
的类型更改为[]bucket
:
func insert(m []bucket, key string, value float64) { // m is sliceofslices type
bucketnumber := (key[0] - 'a') / 7
if cap(m[bucketnumber]) == 0 { // first insert, so create the backing array
m[bucketnumber] = make([]entry, 0, 100)
}
}
并称其为:
Insert(stockData[:], "AAPL", 94.56)
今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注编程网公众号,一起学习编程~
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341