教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 Golang | 使用接口实现多态

Golang | 使用接口实现多态

发布时间:2022-02-26   编辑:jiaochengji.com
教程集为您提供Golang | 使用接口实现多态等资源,欢迎您收藏本站,我们将为您提供最新的Golang | 使用接口实现多态资源
<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>

需求:对一组int类型的数据去重,并取出能同时被2和3整除的数据。

<pre><code class="lang-go hljs"><span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token string">"fmt"</span> <span class="token comment">/* 1. 联系接口实现多态 2. 数组去重 3. 根据给定值对去重后的数组进行筛选 */</span> <span class="token comment">// 创建一个接口,包含两个方法</span> <span class="token keyword">type</span> Filter <span class="token keyword">interface</span> <span class="token punctuation">{</span> <span class="token function">About</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token builtin">string</span> <span class="token function">Process</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span> <span class="token punctuation">}</span> <span class="token comment">// 定义一个Struct对象</span> <span class="token keyword">type</span> UniqueFilter <span class="token keyword">struct</span><span class="token punctuation">{</span><span class="token punctuation">}</span> <span class="token comment">// 为UniqueFilter对象添加About方法</span> <span class="token keyword">func</span> <span class="token punctuation">(</span>UniqueFilter<span class="token punctuation">)</span> <span class="token function">About</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 keyword">return</span> <span class="token string">"去除重复值"</span> <span class="token punctuation">}</span> <span class="token comment">// 为UniqueFilter对象添加Process方法</span> <span class="token keyword">func</span> <span class="token punctuation">(</span>UniqueFilter<span class="token punctuation">)</span> <span class="token function">Process</span><span class="token punctuation">(</span>inputs <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> outs <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">int</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token function">len</span><span class="token punctuation">(</span>inputs<span class="token punctuation">)</span><span class="token punctuation">)</span> tmp <span class="token operator">:=</span> <span class="token function">make</span><span class="token punctuation">(</span><span class="token keyword">map</span><span class="token punctuation">[</span><span class="token builtin">int</span><span class="token punctuation">]</span><span class="token builtin">bool</span><span class="token punctuation">)</span> <span class="token keyword">for</span> <span class="token boolean">_</span><span class="token punctuation">,</span> v <span class="token operator">:=</span> <span class="token keyword">range</span> inputs <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token operator">!</span>tmp<span class="token punctuation">[</span>v<span class="token punctuation">]</span> <span class="token punctuation">{</span> tmp<span class="token punctuation">[</span>v<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token boolean">true</span> outs <span class="token operator">=</span> <span class="token function">append</span><span class="token punctuation">(</span>outs<span class="token punctuation">,</span> v<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> outs <span class="token punctuation">}</span> <span class="token comment">// 定义一个int类型对象</span> <span class="token keyword">type</span> MultipleFilter <span class="token builtin">int</span> <span class="token comment">// 为int类型对象实现About方法</span> <span class="token keyword">func</span> <span class="token punctuation">(</span>mf MultipleFilter<span class="token punctuation">)</span> <span class="token function">About</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 keyword">return</span> fmt<span class="token punctuation">.</span><span class="token function">Sprintf</span><span class="token punctuation">(</span><span class="token string">"保留%v的倍数"</span><span class="token punctuation">,</span> mf<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment">// 为int类型对象实现Process方法</span> <span class="token keyword">func</span> <span class="token punctuation">(</span>mf MultipleFilter<span class="token punctuation">)</span> <span class="token function">Process</span><span class="token punctuation">(</span>inputs <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> outs <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">int</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token function">len</span><span class="token punctuation">(</span>inputs<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> v <span class="token operator">:=</span> <span class="token keyword">range</span> inputs <span class="token punctuation">{</span> <span class="token keyword">if</span> v<span class="token operator">%</span><span class="token function">int</span><span class="token punctuation">(</span>mf<span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">0</span> <span class="token punctuation">{</span> outs <span class="token operator">=</span> <span class="token function">append</span><span class="token punctuation">(</span>outs<span class="token punctuation">,</span> v<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> outs <span class="token punctuation">}</span> <span class="token comment">// 在多态特性的帮助下,只需要一个filteAndPrint函数,传入接口和原数据,返回处理结果</span> <span class="token keyword">func</span> <span class="token function">filterAndPrint</span><span class="token punctuation">(</span>f Filter<span class="token punctuation">,</span> unfiltered <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span> <span class="token punctuation">{</span> filter <span class="token operator">:=</span> f<span class="token punctuation">.</span><span class="token function">Process</span><span class="token punctuation">(</span>unfiltered<span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>f<span class="token punctuation">.</span><span class="token function">About</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">":\n\t"</span><span class="token punctuation">,</span> filter<span class="token punctuation">)</span> <span class="token keyword">return</span> filter <span class="token punctuation">}</span> <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> numbers <span class="token operator">:=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">{</span><span class="token number">23</span><span class="token punctuation">,</span> <span class="token number">34</span><span class="token punctuation">,</span> <span class="token number">23</span><span class="token punctuation">,</span> <span class="token number">234</span><span class="token punctuation">,</span> <span class="token number">45</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">23</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">53</span><span class="token punctuation">,</span> <span class="token number">32</span><span class="token punctuation">,</span> <span class="token number">23</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">34</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">34</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">2</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 string">"\n\t"</span><span class="token punctuation">,</span> numbers<span class="token punctuation">)</span> <span class="token comment">// 三个对象被包裹在一个列表中</span> filters <span class="token operator">:=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span>Filter<span class="token punctuation">{</span> UniqueFilter<span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token function">MultipleFilter</span><span class="token punctuation">(</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token function">MultipleFilter</span><span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token punctuation">}</span> <span class="token comment">// 循环列表,依次传入处理对象和数据</span> <span class="token keyword">for</span> <span class="token boolean">_</span><span class="token punctuation">,</span> v <span class="token operator">:=</span> <span class="token keyword">range</span> filters <span class="token punctuation">{</span> <span class="token comment">// 将处理结果保存,传入下一次循环体中,进行下一次循环处理</span> numbers <span class="token operator">=</span> <span class="token function">filterAndPrint</span><span class="token punctuation">(</span>v<span class="token punctuation">,</span> numbers<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> 到此这篇关于“Golang | 使用接口实现多态”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
golang 接口的定义和实现
2020-10-18Go语言接口
Go语言接口interface
golang实现接口类和多态的一种做法
golang判断变量的类型
Go语言的空接口,接口类型断言
golang 的接口实现
关于Golang的那些事(六) -- 接口
golang 接口_Golang之接口
Go语言空接口类型(interface{})

[关闭]
~ ~