Golang 反映包“不是一种类型”

Jay*_*Jay 5 go

我正在尝试学习接口以及如何编写一个函数来处理不同的类型。我想出了这个例子,我在一个切片int或一个切片中找到最大值float32。代码如下。我不断收到此错误“t 不是类型”。有人可以告诉我出了什么问题以及我如何解决它?

package main

import "fmt"
import "reflect"

var _ = fmt.Println
var _ = reflect.TypeOf

func maxer(s interface{}) interface{} {
    v := reflect.ValueOf(s)
    t := v.Type()

    maxval := s.(t)[0]
    for _, v := range s.(t)[1:] {
        if v > maxval {
            maxval = v
        }
    }
    return maxval
}

func main() {
    fmt.Println(maxer([]int{1, 2, 3, 4}))
    fmt.Println(maxer([]float32{1.1, 2.1, 3.14, 0.1, 2.4}))
Run Code Online (Sandbox Code Playgroud)

Eve*_*man 1

我认为在这种情况下你最终需要手动处理不同的类型。AFAIK,类型断言在编译时必须是真实类型。这是我在游戏中的最佳尝试:http://play.golang.org/p/J8RdHF2MVV