【发布时间】:2018-12-18 21:00:57
【问题描述】:
我正在使用 https://golang.org/pkg/container/list/ 在 Golang 中对我的 LRU 缓存解决方案进行微优化。我的解决方案通过使用map[int]*list.Element,其中每个list.List list.Element 是[]int,[0] 是关键,[1] 是价值。
我正在尝试从[]int 移动到[2]int 以进行优化,但是我遇到了在ee := e.Value.([2]int) 之后修改固定大小数组的问题(注意[2]int 类型为固定大小的数组),不再修改list.Element 中的基础值,不像ee := e.Value.([]int) 的情况(注意[]int 类型),我认为这很有意义,因为切片是基于引用的,而固定大小的数组基于复制的值。
我尝试过e.Value.([2]int)[1] = … 之类的东西,以及与:= &e.Value… 的各种组合,以及从[2]int 转换为[]int,但这都会导致编译器错误。
问:有没有办法将container/list 与嵌入式数组一起使用,并就地修改所述固定大小的数组?
【问题讨论】:
-
还尝试了
[:]技巧——找回Line 38: invalid operation e.Value.([2]int)[:] (slice of unaddressable value)
标签: arrays list go interface micro-optimization