[解決済み] interface{}をint型に変換する
2022-08-22 02:56:32
質問
JSONから値を取得してint型にキャストしようとしているのですが、うまくいきませんし、正しい方法がわかりません。
以下はエラーメッセージです。
...cannot convert val (type interface {}) to type int: need type assertion
そして、そのコード。
var f interface{}
err = json.Unmarshal([]byte(jsonStr), &f)
if err != nil {
utility.CreateErrorResponse(w, "Error: failed to parse JSON data.")
return
}
m := f.(map[string]interface{})
val, ok := m["area_id"]
if !ok {
utility.CreateErrorResponse(w, "Error: Area ID is missing from submitted data.")
return
}
fmt.Fprintf(w, "Type = %v", val) // <--- Type = float64
iAreaId := int(val) // <--- Error on this line.
testName := "Area_" + iAreaId // not reaching here
どのように解決するのですか?
の代わりに
iAreaId := int(val)
を使いたい場合は 型のアサーション :
iAreaId := val.(int)
iAreaId, ok := val.(int) // Alt. non panicking version
ができない理由は 変換 ができない理由は、参照された仕様の部分にあるこれらの規則です。
変換は、以下のような形式の式です。
T(x)
ここでT
は型でありx
はT型に変換可能な式である。
...
<ブロッククオート定数でない値xは、これらのどの場合にもT型に変換することができます。
- xはTに代入可能である。
- xの型とTは同じ基礎型を持つ。
- x の型と T は無名のポインタ型で、それらのポインタベース型は同一の基礎となる型を持っています。
- x の型と T は共に整数型または浮動小数点型です。
- x の型と T は両方とも複素数型です。
- xは整数またはバイトやルーンのスライスで、Tは文字列型です。
- xは文字列で、Tはバイトまたはルーンのスライスです。
しかし
iAreaId := int(val)
は ではない 1.~7.のいずれかの場合です。
関連
-
[解決済み] Goでint値をstringに変換する方法は?
-
[解決済み] ゼロ終端のバイト配列を文字列に変換するにはどうすればよいですか?
-
[解決済み] time.Sleepを使わずにすべてのゴルーチンが終了するのを待つには?
-
[解決済み] ゴルーチンの停止方法
-
[解決済み] Goを使って大きなファイルを効率よくダウンロードするにはどうしたらいいですか?
-
[解決済み] オブジェクトのプロパティを二重引用符で囲んで使用するには?
-
[解決済み] GolangでMkdirを使ってネストされたディレクトリを作成するには?
-
[解決済み] reflectを使用して、構造体フィールドの値を設定するにはどうすればよいですか?
-
[解決済み] GoのToString()関数
-
[解決済み] マップから構造体への変換
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] サーバーでSSLが有効になっていない
-
[解決済み] time.Sleepを使わずにすべてのゴルーチンが終了するのを待つには?
-
[解決済み] intをint64に変換するには?
-
[解決済み] ゴルーチンの停止方法
-
[解決済み] Goを使って大きなファイルを効率よくダウンロードするにはどうしたらいいですか?
-
[解決済み] スライスを宣言するのか、スライスを作るのか?
-
[解決済み] GolangでMkdirを使ってネストされたディレクトリを作成するには?
-
[解決済み] 単一値コンテキストにおける複数値
-
[解決済み] GoのToString()関数
-
[解決済み] Goプログラムで静的リソースをバンドルする最良の方法は何ですか?