golang 泛型详解
在Go语言中,泛型的实现依靠接口(interface)和类型参数化。Go不支持传统的编译时泛型,但可以通过接口实现类似泛型的功能。
以下是一个使用接口实现类似泛型功能的例子:
package main
import (
"fmt"
)
// 定义一个接口,表示可以进行加法操作的类型
type Adder interface {
Add(interface{}) interface{}
}
// 为int类型实现Adder接口
func (a int) Add(b interface{}) interface{} {
switch b := b.(type) {
case int:
return a + b
case float64:
return float64(a) + b
default:
panic("unsupported operand type")
}
}
// 为float64类型实现Adder接口
func (a float64) Add(b interface{}) interface{} {
switch b := b.(type) {
case int:
return a + float64(b)
case float64:
return a + b
default:
panic("unsupported operand type")
}
}
func main() {
var a Adder = 10
var b Adder = 20.5
result := a.Add(b).(float64)
fmt.Println("10 + 20.5 =", result)
}
在这个例子中,我们定义了一个Adder
接口,它要求类型实现Add
方法。然后,我们为int
和float64
类型实现了这个接口。在main
函数中,我们通过接口变量调用Add
方法,实现了类似泛型的加法操作。这种方式虽然不是编译时泛型,但可以通过接口和类型断言实现类似泛型的功能。
评论已关闭