package main
import (
"fmt"
)
func main() {
ia := []int{1, 2, 3, 8, 3}
fa := []float32{1.0, 1231.12, 33.3, 3.0}
mi := max(intSlice(ia))
mf := max(floatSlice(fa))
fmt.Println(mi, mf)
}
func max(data mySlice) (m interface{}) {
n := 0
l := data.len()
for i := 1; i < l; i++ {
if data.less(n, i) {
n = i
}
}
m = data.get(n)
return m
}
type mySlice interface {
len() int
less(i, j int) bool
get(i int) interface{}
}
type intSlice []int
func (p intSlice) len() int { return len(p) }
func (p intSlice) less(i, j int) bool { return p[i] < p[j] }
func (p intSlice) get(i int) interface{} { return p[i] }
func (p intSlice) max() interface{} { return max(p) }
type floatSlice []float32
func (p floatSlice) len() int { return len(p) }
func (p floatSlice) less(i, j int) bool { return p[i] < p[j] }
func (p floatSlice) get(i int) interface{} { return p[i] }
func (p floatSlice) max() interface{} { return max(p) }
只要实现mySlice里的几个interface就可以支持其它数据类型了。改下大小写什么的,可以做独立的包。