web-dev-qa-db-ja.com

strconv.Atoi()文字列が与えられたときにエラーを投げる

URLを介して渡された変数(timesという名前のGET変数)でstrconvを使用しようとすると、GoLangはコンパイル時に次のように失敗します。

単一値コンテキストでの複数値strconv.Atoi()

ただし、私が反映するとき、TypeOfは文字列を型として取得しますが、これは正しい型の引数です

私はこの問題を数時間修正しようとしています。私は新しいのですが、この問題にかなり不満を感じています。私は最終的に助けを求めることにしました。フィードバックをいただければ幸いです。

func numbers(w http.ResponseWriter, req *http.Request) {
  fmt.Println("GET params were:", req.URL.Query()); 
  times := req.URL.Query()["times"][0]
  time := strconv.Atoi(times)

  reflect.TypeOf(req.URL.Query()["times"][0]) // returns string
}
14
dead beef

エラーは strconv.Atoiintおよびerror)は、単一値コンテキスト(timeへの割り当て)で使用されます。コードを次のように変更します。

   time, err := strconv.Atoi(times)
   if err != nil {
      // handle error
   }
41
Cerise Limón

これは回答されており、質問はかなり古いものですが、受け入れられた回答を補完するのは良いことだと思いました。

質問のように関数が複数の値を返す場合、値のいずれかが不要な場合は、次のように空白識別子_を使用して破棄できます。

num, _ := strconv.Atoi(numAsString)

これは、変換された数値をnumに保存しますが、空白の識別子に割り当てることでエラーを破棄します。

ただし、値が_に割り当てられると、再び参照することはできません。つまり.

num, _ := strconv.Atoi(numAsString)
fmt.Println(_) // won't compile. cannot reference _