当前位置: > > > > GoLang 附加到嵌套切片
GoLang 附加到嵌套切片
来源:stackoverflow
2024-04-28 23:48:34
0浏览
收藏
大家好,我们又见面了啊~本文《GoLang 附加到嵌套切片》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~
问题内容
在 golang 中,具有以下结构和方法,我尝试附加到属于嵌套在另一个结构中的结构的切片:
/* tiers agent struct */
type agent struct {
registration string
}
/* tiers queue struct */
type queue struct {
name string
agents []agent
}
/* tiers struct */
type tiers struct {
queues []queue
}
func (q *queue) addagent (agent_registration string) {
q.agents = append(q.agents, agent{registration: agent_registration})
}
func (t *tiers) addqueue(queue_name string, agent_registration string) {
var cur_queue *queue
found_queue := false
/* find queue by queue name */
for _ , queue := range t.queues {
if queue.name == queue_name {
found_queue = true
cur_queue = &queue
}
}
/* if queue not found, create a new one */
if found_queue == false {
t.queues = append(t.queues, queue{name: queue_name})
cur_queue = &(t.queues[len(t.queues)-1])
}
/* add agent to queue (add tier) */
cur_queue.addagent(agent_registration)
}
我的业务规则是,我将收到大量 {queue_name, agent_name} 对,并且我想构建一个结构,将共享相同“queue_name”的所有代理分组。所以,最终我想要这样的东西:
队列1:[‘代理1’,’代理2’,’代理3’,…] 队列2:[‘agent4’,’agent5’,…]
我正在使用上面提到的结构对此进行建模。问题是当我尝试将代理添加到队列时,只有最后一个插入仍然存在。示例:
tiers.AddQueue('suport@default', '1000@default')
tiers.AddQueue('suport@default', '1003@default')
tiers.AddQueue('suport@default', '1001@default')
输出:{[{support@default [{1001@default}]}]}
当我想要的是输出时:
输出:{[{support@default [{1000@default},{1003@default}, {1001@default}]}]}
块引用>
解决方案
你的问题是这样的:
for _ , queue := range t.queues {
将值从 t.queues 复制到 queue,然后获取该副本的地址:
cur_queue = &queue
最终修改副本,同时将 t.queues 切片中的 queue 单独保留。
一个简单的解决方案是使用 for i := range ... 形式的循环,并获取切片中 queue 的地址而不是副本:
for i := range t.queues {
if t.queues[i].name == queue_name {
found_queue = true
cur_queue = &t.queues[i]
}
}
您还可以使用指针切片并返回到您的
for _ , queue := range t.queues {
循环中 queue 已经是一个指针。
一旦发现某些内容,您可能希望尽早将 break 退出循环。如果 t.queues 预计会很大,您可能需要切换到地图,这样就不会进行太多的线性搜索。
终于介绍完啦!小伙伴们,这篇关于《GoLang 附加到嵌套切片》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~米云公众号也会发布Golang相关知识,快来关注吧!
