教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 Go 语言中如何比较两个map[string]interface{}是否相等

Go 语言中如何比较两个map[string]interface{}是否相等

发布时间:2022-02-08   编辑:jiaochengji.com
教程集为您提供Go 语言中如何比较两个map[string]interface{}是否相等等资源,欢迎您收藏本站,我们将为您提供最新的Go 语言中如何比较两个map[string]interface{}是否相等资源
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"/></svg>

<h3>Go 语言中如何比较两个map[string]interface{}是否相等</h3> <ul><li>Go语言中Map是无序的</li><li>Go interface{}无法比较是否相等</li><li>那么如何比较两个map[string]interface{} 是否相等呢?</li></ul>

<h1>Go语言中Map是无序的</h1>

再Go语言中,Map是一个内置类型,它将键与值绑定在一起,可以通过键获取响应的值。
由于Go Map内部不存储机制是以key为hash的结构来实现的,所以顺序是混乱的。
举例说明:在两次遍历中读取数据的顺序是不一样的。

<pre><code class="lang-go hljs"><span class="token keyword">func</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> a <span class="token operator">:=</span> <span class="token keyword">map</span><span class="token punctuation">[</span><span class="token builtin">string</span><span class="token punctuation">]</span><span class="token keyword">interface</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">{</span> <span class="token string">"orange"</span><span class="token punctuation">:</span> <span class="token string">"1"</span><span class="token punctuation">,</span> <span class="token string">"apple"</span><span class="token punctuation">:</span> <span class="token string">"2"</span><span class="token punctuation">,</span> <span class="token string">"banana"</span><span class="token punctuation">:</span> <span class="token string">"3"</span><span class="token punctuation">,</span> <span class="token punctuation">}</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token string">"第一遍:"</span><span class="token punctuation">)</span> <span class="token keyword">for</span> k<span class="token punctuation">,</span> v <span class="token operator">:=</span> <span class="token keyword">range</span> a <span class="token punctuation">{</span> fmt<span class="token punctuation">.</span><span class="token function">Print</span><span class="token punctuation">(</span>k <span class="token operator"> </span> <span class="token string">" : "</span><span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>v<span class="token punctuation">)</span> <span class="token punctuation">}</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token string">"第二遍:"</span><span class="token punctuation">)</span> <span class="token keyword">for</span> k<span class="token punctuation">,</span> v <span class="token operator">:=</span> <span class="token keyword">range</span> a <span class="token punctuation">{</span> fmt<span class="token punctuation">.</span><span class="token function">Print</span><span class="token punctuation">(</span>k <span class="token operator"> </span> <span class="token string">" : "</span><span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>v<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre>

执行结果:

<pre><code class="lang-go hljs">第一遍: apple <span class="token punctuation">:</span> <span class="token number">2</span> banana <span class="token punctuation">:</span> <span class="token number">3</span> orange <span class="token punctuation">:</span> <span class="token number">1</span> 第二遍: banana <span class="token punctuation">:</span> <span class="token number">3</span> orange <span class="token punctuation">:</span> <span class="token number">1</span> apple <span class="token punctuation">:</span> <span class="token number">2</span> </code></pre>

因为Go中的Map是无序的,所以每次读取都不一样。

<h1>
Go interface{}无法比较是否相等</h1>

Go 语言中两个 interface{} 是无法比较是否相等的。因为类型不确定,任何类型的数据都可以被塞到interface{}中。

<h1>
那么如何比较两个map[string]interface{} 是否相等呢?</h1>

首先,我们可以将它们转化为 json 字符串来比较即可,但是因为Map是无序的,所以转化的json字符串不一定会一模一样。(当然,你也可以用反射来做,但是代码量多,麻烦。)

所以我们可以将其转化成顺序一样的 slice ,然后再转化未 json 。 这样就确保的json可以一样了。

代码如下:

<pre><code class="lang-go hljs"><span class="token keyword">func</span> <span class="token function">CompareTwoMapInterface</span><span class="token punctuation">(</span>data1 <span class="token keyword">map</span><span class="token punctuation">[</span><span class="token builtin">string</span><span class="token punctuation">]</span><span class="token keyword">interface</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span> data2 <span class="token keyword">map</span><span class="token punctuation">[</span><span class="token builtin">string</span><span class="token punctuation">]</span><span class="token keyword">interface</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token builtin">bool</span> <span class="token punctuation">{</span> keySlice <span class="token operator">:=</span> <span class="token function">make</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">string</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span> dataSlice1 <span class="token operator">:=</span> <span class="token function">make</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token keyword">interface</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span> dataSlice2 <span class="token operator">:=</span> <span class="token function">make</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token keyword">interface</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token keyword">for</span> key<span class="token punctuation">,</span> value <span class="token operator">:=</span> <span class="token keyword">range</span> data1 <span class="token punctuation">{</span> keySlice <span class="token operator">=</span> <span class="token function">append</span><span class="token punctuation">(</span>keySlice<span class="token punctuation">,</span> key<span class="token punctuation">)</span> dataSlice1 <span class="token operator">=</span> <span class="token function">append</span><span class="token punctuation">(</span>dataSlice1<span class="token punctuation">,</span> value<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">for</span> <span class="token boolean">_</span><span class="token punctuation">,</span> key <span class="token operator">:=</span> <span class="token keyword">range</span> keySlice <span class="token punctuation">{</span> <span class="token keyword">if</span> data<span class="token punctuation">,</span> ok <span class="token operator">:=</span> data2<span class="token punctuation">[</span>key<span class="token punctuation">]</span><span class="token punctuation">;</span> ok <span class="token punctuation">{</span> dataSlice2 <span class="token operator">=</span> <span class="token function">append</span><span class="token punctuation">(</span>dataSlice2<span class="token punctuation">,</span> data<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token boolean">false</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> dataStr1<span class="token punctuation">,</span> <span class="token boolean">_</span> <span class="token operator">:=</span> json<span class="token punctuation">.</span><span class="token function">Marshal</span><span class="token punctuation">(</span>dataSlice1<span class="token punctuation">)</span> dataStr2<span class="token punctuation">,</span> <span class="token boolean">_</span> <span class="token operator">:=</span> json<span class="token punctuation">.</span><span class="token function">Marshal</span><span class="token punctuation">(</span>dataSlice2<span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token function">string</span><span class="token punctuation">(</span>dataStr1<span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token function">string</span><span class="token punctuation">(</span>dataStr2<span class="token punctuation">)</span> <span class="token punctuation">}</span> </code></pre> 到此这篇关于“Go 语言中如何比较两个map[string]interface{}是否相等”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
Go基础编程:Map
golang中map的一些注意事项
Golang之struct能不能比较
基于类型系统的面向对象编程语言Go
关于golang面向接口
go 获取函数地址_Go语言基础--接口浅析
浅析go中的类型比较
Go 语言中如何比较两个map[string]interface{}是否相等
Go语言面组合式向对象编程基础总结
golang map 初始化 和 使用

[关闭]
~ ~