2016-06-14 4 views
2

以下のような文字列またはintを入力する関数を作成しようとしていますが、その方法を見つけることができません... 私がやっていることはわかりません行くにかかわらず、かなり新しい....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 
} 

し、それにのようなもの(これはしかし動作しません!)を使用する:あなたのdefault場合は最初なので、他に何もすることができます

var firstName string 
getUserInput(firstName) 

var age int 
getUserInput(age) 

答えて

4

をこれまでに一致します。最後にそれを入れてください。値をスキャンすることはできません。ポインタが必要です。したがって、タイプスイッチケースを対応するポインタに変更してください。

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からトークンを読み取り、必要なタイプと照合する方がよい場合がよくあります。比較のための入力だけでなく、有用なエラーメッセージを生成する必要があります。
関連する問題