golang 扫描字符串或整数

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


GCT1015
浏览 187回答 1
1回答

慕斯709654

你的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)}您必须传入一个指向接口参数的指针,因此在&此处使用 use 运算符。var firstName stringgetUserInput(&firstName)var age intgetUserInput(&age)如果您尝试扫描错误的类型,您会丢失输入,或者仅读取部分输入。如果您想扫描多种类型,通常最好从标准输入读取令牌,并根据您想要的类型进行检查。然后,您不仅可以获得用于比较的输入,而且还可以生成有用的错误消息。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go