为了账号安全,请及时绑定邮箱和手机立即绑定

golang 扫描字符串或整数

golang 扫描字符串或整数

Go
GCT1015 2022-01-17 18:13:38
我正在尝试编写一个函数来输入一个字符串或 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 stringgetUserInput(firstName)var age intgetUserInput(age)
查看完整描述

1 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

你的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 string

getUserInput(&firstName)


var age int

getUserInput(&age)

如果您尝试扫描错误的类型,您会丢失输入,或者仅读取部分输入。如果您想扫描多种类型,通常最好从标准输入读取令牌,并根据您想要的类型进行检查。然后,您不仅可以获得用于比较的输入,而且还可以生成有用的错误消息。


查看完整回答
反对 回复 2022-01-17
  • 1 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号