Go 如何使函数接受多种类型?

Go 如何使函数接受多种类型?,go,Go,我有这样一个功能: package main import "flag" import "fmt" func print_out_type(x anything) string { switch v := x.(type) { case string: return "A string" case int32: return "An

我有这样一个功能:

package main
import "flag"
import "fmt"

func print_out_type(x anything) string {
    switch v := x.(type) {
        case string:
             return "A string"
        case int32:
             return "An Integer"
        default:
             return "A default"
    }
}

func main() {
    wordPtr := flag.String("argument1", "foo", "a String")
    numPtr := flag.Int("argument2", 42, "an Integer")
    flag.Parse()
    fmt.Println("word: ", *wordPtr)
    fmt.Println("number: ", *numPtr)
}
我试图根据类型返回不同类型的字符串。我只是停留在如何编写一个接受不同类型参数的函数的问题上

  • 首先,如果您使用的是类型断言,则需要检查此操作是否成功<代码>例如:值,ok:=温度(int)
  • 其次,可以使用
    接口{}
    类型变量作为函数的参数。在函数中,可以使用类型断言检查参数的实际类型并打印输出

  • 您可以使用接口类型作为参数,在这种情况下,您可以使用实现给定接口的任何类型调用函数。In-Go类型自动实现任何接口(如果它们具有接口的方法)。所以,如果您想接受所有可能的类型,可以使用空接口(
    interface{}
    ),因为所有类型都实现了这一点。不需要对函数进行其他修改

    func print_out_type(x interface{}) string {
        switch v := x.(type) {
            case string:
                 return "A string"
            case int32:
                 return "An Integer"
            default:
                 return "A default"
        }
    }
    
    您还可以使用reflect包来研究接口变量的类型。例如:

    func print_out_type(x interface{}) string {
        return reflect.TypeOf(x).String()
    }
    
    func main() {
        fmt.Println(print_out_type(42))
        fmt.Println(print_out_type("foo"))
    }
    
    将打印

    int


    func打印输出类型(x接口{})字符串
    使用
    interface{}
    作为类型。这是一个空接口;任何类型都可以实现它。请务必在Go上完成任何像样的教程,因为这是一件非常基本的事情。您不需要带有类型开关的类型断言。OP没有使用类型断言,他也不应该使用。如何获取发送到变量的值并在函数中使用它?我正在使用data:=x(ConcreteType),但这将包含switch语句的范围,并且我不能在该范围之外使用它