Go的模板实现
在go里面,并没有C++中的模板的概念,但是,这一概念可以使用接口来进行实现:
type Value interface{}
type Element struct{
value Value
pNext *Element
}
type List struct {
pHead *Element;
}
上述代码展示了实现具有模板特点的类型的定义方式:
简单看看代码,该代码实现的是一个值的类型可变的链表结构,通过interface实现了链表的通用性(具体原因是每种数据结构都有默认的空接口实现)。
同理,如果想要定义接受多种参数的函数或者方法,可以用同样的方法实现:
type e interface{}
func mult2(f e)e{
switch f.(type){
case int:
return f.(int)*2
case string:
return f.(string) + f.(string) + f.(string)
}
return f
}
func Map(n []e, f func(e) e) []e{
m := make( []e, len(n) )
for k, v := range n {
m[k] = f(v)
}
return m
}