Mat*_*hew 4 string int scanf go
我正在尝试编写一个函数来输入字符串或整数,如下所示,但是找不到解决方法……不确定我在做什么,还很新。
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
}
Run Code Online (Sandbox Code Playgroud)
然后使用类似的东西(这是行不通的!):
var firstName string
getUserInput(firstName)
var age int
getUserInput(age)
Run Code Online (Sandbox Code Playgroud)
您的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)
}
Run Code Online (Sandbox Code Playgroud)
您必须传递一个指向接口参数的指针,因此请在&
此处使用use 运算符。
var firstName string
getUserInput(&firstName)
var age int
getUserInput(&age)
Run Code Online (Sandbox Code Playgroud)