golang扫描字符串或int

时间:2016-06-14 13:15:49

标签: string go int scanf

我试图编写一个函数来输入字符串或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)

1 个答案:

答案 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)
  • 如果您尝试扫描错误的类型,则会丢失输入,或只读取部分输入。如果要扫描多种类型,通常最好从stdin读取令牌,并根据所需类型进行检查。您不仅可以使用输入进行比较,还可以使用它来生成有用的错误消息。