我正在做一些测试并尝试测试某些函数类型的相等性。我有https://play.golang.org/p/GeE_YJF5lz:
package main
import (
"fmt"
"reflect"
)
type myStruct struct {
f []someFunc
}
type someFunc func(a string) bool
var sf1 someFunc = func(a string) bool {
return true
}
var sf2 someFunc = func(a string) bool {
return false
}
func main() {
a := []someFunc{sf1, sf2}
b := []someFunc{sf1, sf2}
fmt.Println(reflect.DeepEqual(a, b)) // false
m := &myStruct{
f: []someFunc{sf1, sf2},
}
n := &myStruct{
f: []someFunc{sf1, sf2},
}
fmt.Println(reflect.DeepEqual(m, n)) // false
}
我没有能够在文档中找到关于比较函数的任何内容,并且知道我必须遗漏一些重要的内容,以便为什么反映.DeepEqual并不适合它们。
答案 0 :(得分:0)
你可以比较这样的函数,在这里阅读更多关于函数表示的信息:http://golang.org/s/go11func
public String replace(char oldChar, char newChar)
例如:这只是您的起点。
func funcEqual(a, b interface{}) bool {
av := reflect.ValueOf(&a).Elem()
bv := reflect.ValueOf(&b).Elem()
return av.InterfaceData() == bv.InterfaceData()
}
输出:
func main() {
a := []someFunc{sf1, sf2}
b := []someFunc{sf1, sf2}
for idx, f := range a {
fmt.Println("Index: ", idx, funcEqual(f, b[idx]))
}
}