我试图编写一个函数来输入字符串或int,如下所示,但无法找到方法... 不知道我在做什么,还有新的......
func getUserInput(input interface{}) (int, error) {
var err error
switch t := input.(type) {
default:
fmt.Printf("unexpected type %T", t)
case int:
_, err = fmt.Scanf("%d", input)
case string:
_, err = fmt.Scanf("%s", input)
}
if err != nil {
return 0, err
}
return 0, nil
}
然后使用类似的东西(虽然这不起作用!):
var firstName string
getUserInput(firstName)
var age int
getUserInput(age)
答案 0 :(得分:4)
您的default
案例是第一位的,所以其他任何内容都无法匹敌。把它放在最后。您无法扫描到某个值,需要指针,因此请将类型切换案例更改为其指针等效项。
switch t := input.(type) {
case *int:
_, err = fmt.Scanf("%d", input)
case *string:
_, err = fmt.Scanf("%s", input)
default:
fmt.Printf("unexpected type %T", t)
}
你必须传入一个指向interface参数的指针,所以在那里使用&
运算符。
var firstName string
getUserInput(&firstName)
var age int
getUserInput(&age)