警告:去新手.我有这样的功能:
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)
}
Run Code Online (Sandbox Code Playgroud)
我试图根据类型返回不同类型的字符串.我只是陷入了如何编写一个接受不同类型参数的函数的问题.任何帮助表示赞赏.
jus*_*ius 18
您可以使用接口类型作为参数,在这种情况下,您可以使用任何实现给定接口的类型调用该函数.在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"
}
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用反射包来研究接口变量的类型.例如:
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"))
}
Run Code Online (Sandbox Code Playgroud)
会打印
INT
串
小智 9
从 Go 1.18 开始。您可以使用泛型来指定函数中可以使用哪些类型。
func print_out_type[T any](x T) string {
return fmt.Sprintf("%T", x)
}
Run Code Online (Sandbox Code Playgroud)
https://go.dev/doc/tutorial/generics
| 归档时间: |
|
| 查看次数: |
9710 次 |
| 最近记录: |