我想知道这是否是创建“通用”(是的,我知道,GoLang 中的一个敏感词)列表并将其传递给 FindAll 函数的方法。


这是我的尝试:


package main


import (

    "container/list"

    "fmt"

    "strings"

)


func FindAll(lst *list.List, p func(interface{}) bool) *list.List {

    ans := list.New()


    for i := lst.Front(); i != nil; i = i.Next() {

        if p(i.Value) {

            ans.PushBack(i.Value)

        }

    }

    return ans

}


func ConvertToInt(p func(int) bool) func(interface{}) bool {

    return func(v interface{}) bool {

        if value, ok := v.(int); ok {

            if p(value) {

                return true

            } else {

                return false

            }

        } else {

            return false

        }

    }

}


func IsEven(n int) bool {

    if n%2 == 0 {

        return true

    }

    return false

}


func ConvertoString(p func(s string) bool) func(interface{}) bool {

    return func(v interface{}) bool {

        if value, ok := v.(string); ok {

            if p(value) {

                return true

            } else {

                return false

            }

        } else {

            return false

        }

    }

}


func IsHello(str string) bool {

    if strings.ToLower(str) == "hello" {

        return true

    } else {

        return false

    }

}


func main() {

    fmt.Println("Find All Programs!\n\n")


    lsti := list.New()


    for i := 0; i < 11; i++ {

        lsti.PushBack(i)

    }


    ansIsEven := FindAll(lsti, ConvertToInt(IsEven))


    for i := ansIsEven.Front(); i != nil; i = i.Next() {

        if value, ok := i.Value.(int); ok {

            fmt.Printf("Found even: %d\n", value)

        } else {

            fmt.Println("Huh! What's that?")

        }

    }


}

我已经玩了一段时间了,并认为在我说服自己它是正确的之前,我最好得到围棋专家的建议。