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
}