我有这样的功能:
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) }
我试图根据类型返回不同类型的字符串。我只是停留在如何编写一个接受不同类型参数的函数上。
您可以将接口类型用作参数,在这种情况下,可以使用实现给定接口的任何类型来调用函数。在Go类型中,如果类型具有接口的方法,则它们会自动实现任何接口。因此,如果您想接受所有可能的类型,则可以使用空接口(interface{}),因为所有类型都可以实现该接口。无需对您的功能进行其他修改。
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" } }
您还可以使用反射包来研究接口变量的类型。例如:
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")) }
将打印
整型 串
整型
串