问题标签 [go-map]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
49 浏览

go - 构建多维数组响应

我正在尝试创建这样的响应:

以下是我为此编写的脚本:

main.go

get_http_methods.go

但是此脚本显示以下错误。我该如何解决这个错误?请指教。

不能使用 SearchMethod(filename) (type map[string][]string) 作为 type []string in assignment go

错误出现在这一行 allcontrollers[filename] = SearchMethod(filename)

0 投票
2 回答
71 浏览

for-loop - 在 Go 中循环切片以创建地图

我正在遍历 Go 中的一个切片,该切片由我制作的名为 Product 的结构组成。

我想将此切片转换为地图,以便产品 ID 是键,产品是值。

这是我创建的结构。

这是我创建的功能...

还有更多代码,但除了 for 循环之外,所有代码都可以正常工作。当我在 for 循环中打印出 prod 映射时,它确实会单独检查 productList 中的每一项(190 项),但它只会返回一项 - 最后一项。我应该以某种方式将每次迭代附加到地图上吗?我在视频教程旁边进行编码,并拥有教程视频中的源文件,与他们的代码相比,我的代码找不到任何问题......

0 投票
1 回答
87 浏览

go - 在 Go 中将 msgp 与接口和映射一起使用

我有一个使用接口作为键的地图。地图是这样定义的MyMap map[Signature]Packets。接口是Signature,并且将有两个结构AB实现这个接口。我也msgp用来序列化这两个结构。

我的问题是msgp自动生成使用指针作为函数接收器类型的方法,我认为这会使键Signature接收指针。如果是这种情况,那么键每次都会不同,因为指针不同,即使基础值相同。因此,每次,我都会创建一个新条目,而不是找到现有条目并对其进行修改。

我想知道:

  1. 有没有办法强制msgp使用具体类型的函数接收器来生成方法?目前,我只能将自动生成的方法的函数接收器修改为MarshalMsg具体UnmarshalMsg类型(AB代替*A*B)。通过这样做,地图的键是 typeA或 type B,并且地图MyMap工作正常。但是,我知道我不应该修改自动生成的代码。所以,我想知道是否有一种可接受的方式来做到这一点。
  2. 如果没有办法做 1.,是否有任何解决方法来解决这个问题?我真的需要地图键的一些多态特性,使用msgp.

更新 1(4 月 12 日):感谢您分享您的想法并提供解决方案。以下是关于我的问题的一些细节。

  1. 背景是地图用于收集不同的网络事件。实现接口的两个结构SignatureEventSignatureIPv4EventSignatureIPv6

并且Signature持有在 IPv4 和 IPv6 数据之间共享的通用方法。因此,本质上,我想在运行时收集和分组相应的 IPv4/v6 事件。地图的关键是识别同一个源,地图的价值是收集不同目的地的事件。

  1. msgp我正在使用的库是这个https://pkg.go.dev/github.com/tinylib/msgp@v1.1.5/msgp

  2. 如果我错了,请纠正我。对于 Go 中的组合,如果方法集中的方法之一具有指针类型的函数接收器,那么实例只会是指针类型吗?所以在这里,就像我一样

每当我Signature用来接收结构EventSignatureIPv6时,结构只会是类型*EventSignatureIPv6

0 投票
1 回答
94 浏览

go - 考虑到元素数量将小于 500,从字符串切片中删除是否比具有虚拟值的字符串映射更快

我将从框架中一一接收字符串,我需要将它们保存在某个容器中并稍后删除其中一些。现在我有两个选择:-

  1. 创建一段字符串,然后通过查找删除一些项目
  2. 使用 key=string 和 data=dummy 数据创建字符串映射,以便轻松删除

所以我个人更喜欢第二种选择。这是正确的选择吗?我们有更好的办法吗?

0 投票
0 回答
59 浏览

go - 使用带有空接口的地图作为 KEY 是否存在任何编程缺陷

以这种方式使用地图是否有任何编程缺陷:

为了清楚起见,我知道我正在做的事情可能违背了几个“最佳实践”的精神,但这不是我的问题。我特别考虑编程问题,例如由于元素大小不同导致的内存问题、哈希冲突的机会增加、由于类型断言增加导致的性能下降等。

更多信息:我需要在我的应用程序中创建一些各种数据类型的“集合”。我在 Essential Go 中看到使用集合的最佳方法是使用带有空结构的映射作为值

但是,在没有泛型的情况下,我要么需要为我希望存储在我的集合中的每种数据/元素类型创建一种新类型的 Set:

...或者,使用空接口作为 hashmap 的键:

第二个选项效果很好(你可以在这里找到我的完整代码),但我担心我忽略了一些明显的东西,以后会遇到问题。

谢谢你的帮助。

0 投票
1 回答
50 浏览

go - 在 Go Maps 中封装“并发安全”

我有一个结构,MyStruct其中包含一个地图。我想让对地图的访问对并发读写安全,但我也想坚持基础Map而不是使用sync.Map.

出于这个原因,我创建了MyStruct受互斥锁保护的插入、删除和获取方法。代码看起来像这样

到目前为止,一切都很好。

一些客户MyStruct虽然也需要循环,但myStruct.myMap我的问题来了。哪个是最好的设计来使并发安全的循环操作不在 MyStruct 的方法中执行?目前我看到 2 个选项

  1. 将地图myMap和互斥锁设为公共muMyStruct并将责任转移给客户端,以确保循环线程安全。这很简单,但不知何故,感觉好像MyStruct不太关心它的客户
  2. 保持一切私密,并添加一个方法,将地图副本返回给想要安全使用它的客户。从“封装”的角度来看,这似乎更好,但同时听起来有点沉重

还有其他可能吗?关于哪种设计更好的建议?

0 投票
3 回答
596 浏览

dictionary - 检查一个地图是否是另一个地图的子集

许多其他语言已经回答了这个问题。在带有简单地图(无嵌套)的 golang 中,如何找出一个地图是否是另一个地图的子集。例如:map[string]string{"a": "b", "e": "f"}是 的子集map[string]string{"a": "b", "c": "d", "e": "f"}。我想要一个通用的方法。我的代码:

当我想检查集合映射中是否存在子集映射键时,MapIndex返回类型的零值并使其无法与任何内容进行比较。

毕竟我可以更好地完成同样的工作吗?

0 投票
3 回答
296 浏览

go - Golang:将地图中的键附加到切片中

我遇到了这个简单的 Golang 代码,并对 Go 在这里的行为感到惊讶。有人可以解释这里发生了什么,以及如何正确编写下面的代码吗?

如您所见,我有一个map,其中键是arrayof int。我添加了几个值,然后循环遍历map,将每个键转换为 aslice并将每个键附加到类型的对象[][]int

我期待最后一行 print [[1,2,3], [0,5,4], [9,7,1], [0,2,8]],然而,令我惊讶的是,它会多次打印[[0 2 8] [0 2 8] [0 2 8] [0 2 8]], or或其他仅包含一个键的变体。[[9 7 1] [9 7 1] [9 7 1] [9 7 1]]

我的 go 版本是1.16.5

0 投票
1 回答
420 浏览

go - 带有大猩猩多路复用器的速率限制器

我正在尝试实现 http 请求限制器,以允许每个用户每秒通过其用户名发出 10 个请求。最多可以向服务器发送 10 个请求,包括正在处理的请求。以下是我参考rate-limit实现的。

我有几个担忧。

我只想要 /index.php 的限制器,而不想要 /hello 的限制器。我确实使用子路由实现了。是正确的方法吗?

限制中间件并不像我想象的那样限制。它允许 1 个成功的请求,所有其他请求都返回太多请求错误。

我在这里想念什么。?

0 投票
1 回答
94 浏览

go - map struct golang中计数器的最佳实践

我有一个不干净的代码。我想增加Counter结构,NameLike但我认为这无效。

你对这段代码有什么想法,让它干净吗?

Golang Playground的这个链接