那么如何比较两个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>
<blockquote class="layui-elem-quote" style="width: 100%;overflow:hidden">
作者: wang52755
链接: https://blog.csdn.net/wang52755/article/details/110387164
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
</blockquote>
到此这篇关于“Go 语言中如何比较两个map[string]interface{}是否相等”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!
您可能感兴趣的文章:
Go基础编程:Map
golang中map的一些注意事项
Golang之struct能不能比较
基于类型系统的面向对象编程语言Go
关于golang面向接口
go 获取函数地址_Go语言基础--接口浅析
浅析go中的类型比较
Go 语言中如何比较两个map[string]interface{}是否相等
Go语言面组合式向对象编程基础总结
golang map 初始化 和 使用