Go地图有重复的键

Go地图有重复的键,go,Go,我正在开发一个通过UDP接收ascii消息的小型Go程序。我想查找消息中的第一个字段,看看它是否存在于地图中。Go认为地图上不存在钥匙,但它确实存在。我可以将密钥添加到地图,它会创建一个新条目,因此我有两个具有相同密钥的条目。我做错了什么还是这是一个错误 编辑: 我简化了测试,删除了UDP和YAML 输出: TestMap: ---------- map[adc:{/bar }] Received: --------- adc Compare hex:------- |616463| |6

我正在开发一个通过UDP接收ascii消息的小型Go程序。我想查找消息中的第一个字段,看看它是否存在于地图中。Go认为地图上不存在钥匙,但它确实存在。我可以将密钥添加到地图,它会创建一个新条目,因此我有两个具有相同密钥的条目。我做错了什么还是这是一个错误

编辑: 我简化了测试,删除了UDP和YAML

输出:

TestMap: ----------
map[adc:{/bar }]

Received: ---------
adc

Compare hex:-------
|616463| |616463|

Test Name: |adc|
Test NOT found

MAP: ---------
map[adc:{/bar } adc:{/foo }]

KEY adc:---------
{/bar }

adc: {/bar }
adc: {/foo }

其中一个键有一个尾随的换行符。如果您使用
strings.TrimSpace
而不是
strings.Trim
,您将看到尾部换行符被修剪,并且没有重复。

其中一个键具有尾部换行符。如果您使用
strings.TrimSpace
而不是
strings.Trim
,您将看到尾随的换行符被修剪,并且没有重复。

正如Alexander所指出的,问题是两个键之间的长度不同。一个键的长度为3,另一个键的长度为1024。前三个字节相同,在较长的键上,其余字节为0x00


所以这两个键的字符串输出使它看起来是相同的,但这是在愚弄我。钥匙的长度不同。

正如亚历山大所指出的,问题是两个钥匙之间的长度不同。一个键的长度为3,另一个键的长度为1024。前三个字节相同,在较长的键上,其余字节为0x00


所以这两个键的字符串输出使它看起来是相同的,但这是在愚弄我。键的长度不同。

您应该删除所有UDP和其他与映射无关的内容。尝试提供简单的代码示例。尝试获取映射中键的值,并将其与
testname
的值进行比较-它们看起来可能相同,但可能不同。例如,
adc
аdа
——看起来相似,但有两个不同的字符。将您的代码示例放到play.golang.org。感谢您更新代码示例。但是,首先您要检查的不是映射键的hex。尝试将十六进制打印移动到范围内。第二。我想问题在于你获取测试名称的方式。尝试打印len(testname)-可能0字节根本不打印,因此您认为它只是“adc”,但实际上是“adc\x0\0…”密钥长度是问题所在。一个是len=3,另一个是len=1024。谢谢你的帮助!您应该删除所有UDP和其他与映射无关的内容。尝试提供简单的代码示例。尝试获取映射中键的值,并将其与
testname
的值进行比较-它们看起来可能相同,但可能不同。例如,
adc
аdа
——看起来相似,但有两个不同的字符。将您的代码示例放到play.golang.org。感谢您更新代码示例。但是,首先您要检查的不是映射键的hex。尝试将十六进制打印移动到范围内。第二。我想问题在于你获取测试名称的方式。尝试打印len(testname)-可能0字节根本不打印,因此您认为它只是“adc”,但实际上是“adc\x0\0…”密钥长度是问题所在。一个是len=3,另一个是len=1024。谢谢你的帮助!如果使用TrimSpace,它仍然不起作用。没有新线。问题是两个键之间的字节数不同。是的,没错。。。对你的答案投了赞成票:)(TrimSpace确实对我有效……也许我的测试运行中额外的字节是换行符是一种侥幸)如果你使用TrimSpace,它仍然不起作用。没有新线。问题是两个键之间的字节数不同。是的,没错。。。对你的答案投了赞成票:)(TrimSpace确实对我有效……也许我的测试运行中额外的字节是换行符是一种侥幸)
TestMap: ----------
map[adc:{/bar }]

Received: ---------
adc

Compare hex:-------
|616463| |616463|

Test Name: |adc|
Test NOT found

MAP: ---------
map[adc:{/bar } adc:{/foo }]

KEY adc:---------
{/bar }

adc: {/bar }
adc: {/foo }