Golang | 使用接口实现多态
Posted Parker@1989
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang | 使用接口实现多态相关的知识,希望对你有一定的参考价值。
需求:对一组int类型的数据去重,并取出能同时被2和3整除的数据。
package main
import "fmt"
/*
1. 联系接口实现多态
2. 数组去重
3. 根据给定值对去重后的数组进行筛选
*/
// 创建一个接口,包含两个方法
type Filter interface
About() string
Process([]int) []int
// 定义一个Struct对象
type UniqueFilter struct
// 为UniqueFilter对象添加About方法
func (UniqueFilter) About() string
return "去除重复值"
// 为UniqueFilter对象添加Process方法
func (UniqueFilter) Process(inputs []int) []int
var outs = make([]int, 0, len(inputs))
tmp := make(map[int]bool)
for _, v := range inputs
if !tmp[v]
tmp[v] = true
outs = append(outs, v)
return outs
// 定义一个int类型对象
type MultipleFilter int
// 为int类型对象实现About方法
func (mf MultipleFilter) About() string
return fmt.Sprintf("保留%v的倍数", mf)
// 为int类型对象实现Process方法
func (mf MultipleFilter) Process(inputs []int) []int
var outs = make([]int, 0, len(inputs))
for _, v := range inputs
if v%int(mf) == 0
outs = append(outs, v)
return outs
// 在多态特性的帮助下,只需要一个filteAndPrint函数,传入接口和原数据,返回处理结果
func filterAndPrint(f Filter, unfiltered []int) []int
filter := f.Process(unfiltered)
fmt.Println(f.About(), ":\\n\\t", filter)
return filter
func main()
numbers := []int23, 34, 23, 234, 45, 3, 2, 3, 23, 3, 4, 53, 32, 23, 4, 2, 34, 2, 5, 34, 3, 4, 3, 2
fmt.Println("原数据:", "\\n\\t", numbers)
// 三个对象被包裹在一个列表中
filters := []Filter
UniqueFilter,
MultipleFilter(2),
MultipleFilter(3),
// 循环列表,依次传入处理对象和数据
for _, v := range filters
// 将处理结果保存,传入下一次循环体中,进行下一次循环处理
numbers = filterAndPrint(v, numbers)
以上是关于Golang | 使用接口实现多态的主要内容,如果未能解决你的问题,请参考以下文章