Go语言中提供了一些方法来处理类似的泛型函数。
1。使用类型断言
2。Go语言反射功能
3。自定义类型接口和类型
package main
import (
"fmt"
)
func max(first interface{}, rest ...interface{}) interface{} {
max := first
for _, v := range rest {
switch v := v.(type) {
case int:
if v > max.(int) {
max = v
}
case float64:
if v > max.(float64) {
max = v
}
}
}
return max
}
func main() {
fmt.Println(max(1,2 ,3, 6, 7, 8))
fmt.Println(max(2.1, 3.4, 6.7, 9.1))
}
package main
import (
"fmt"
"reflect"
)
func index(slice interface{}, v interface{}) int {
if slice := reflect.ValueOf(slice); slice.Kind() == reflect.Slice {
for i := 0; i < slice.Len(); i++ {
if reflect.DeepEqual(v, slice.Index(i).Interface()){
return i
}
}
}
return -1
}
func main() {
slice1 := []int{0, 4, 5, 7, 9 }
fmt.Println(index(slice1, 7))
slice2 := []float64{1.1, 7.8, 3.4, 9.0 }
fmt.Println(index(slice2, 9.0))
slice3 := []interface{}{0, 3, 4, 5, "abc", 6 }
fmt.Println(index(slice3, "abc"))
}
package main
import(
"fmt"
)
//接口
type MyType interface {
Equal(a int, b interface{}) bool
Len() int
}
//返回切片下标位置
func index(slice MyType, b interface{}) int {
for i := 0; i < slice.Len(); i++ {
if slice.Equal(i, b) {
return i
}
}
return -1
}
//自定义类型IntType实现MyType接口
type IntType []int
func (slice IntType) Equal(i int, b interface{}) bool {
return slice[i] == b.(int)
}
func (slice IntType) Len() int {
return len(slice)
}
//自定义类型FloatType实现MyType接口
type FloatType []float64
func (slice FloatType) Equal(i int, b interface{}) bool {
return slice[i] == b.(float64)
}
func (slice FloatType) Len() int {
return len(slice)
}
func main() {
slice := IntType {1, 2, 3, 4, 5 }
fmt.Println(index(slice, 5))
slice2 := FloatType{1.2, 6.2, 3.4, 7.8}
fmt.Println(index(slice2, 7.8))
}