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)
}
我试图根据类型返回不同类型的字符串。我只是停留在如何编写一个接受不同类型参数的函数的问题上
接口{}
类型变量作为函数的参数。在函数中,可以使用类型断言检查参数的实际类型并打印输出您可以使用接口类型作为参数,在这种情况下,您可以使用实现给定接口的任何类型调用函数。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语句的范围,并且我不能在该范围之外使用它