denisenkomのサンプルを使用してSQL
クエリを実行していますが、http.ResponseWriter
と組み合わせて、interface{}
タイプ変換に苦しんでいます。私がやっていることに近いいくつかの記事がありますが、解決策は重い手のように思えますが、常にfmt
(私は使用していません)を使用します。http.ResponseWriter.Write with interface {}
私のクエリは動作し、結果を返します。私はその結果を表示しようとしています。
私のコードは比較的近いと思いますが、うまくいきません。私はいくつかのことを試しましたが、コンパイルさえしません。
vals := make([]interface{}, len(cols))
for i := 0; i < len(cols); i++ {
vals[i] = new(interface{})
if i != 0 {
w.Write([]byte("\t"))
}
w.Write([]byte(cols[i]))
}
for rows.Next() {
err = rows.Scan(vals...)
if err != nil {
w.Write([]byte("Row problem: " + err.Error()))
continue
}
for i := 0; i < len(vals); i++ {
if i != 0 {
w.Write([]byte("\t"))
}
//THIS IS THE PART I'M STUCK ON
switch v := vals[i].(type) {
case int:
w.Write([]byte("int!\n" + string(v)))
case int8:
w.Write([]byte("int8!\n" + string(v)))
//etc, etc
//more types
//etc, etc
case float64:
w.Write([]byte("float64!\n" + string(v))) //This fails, can't convert, will need something else
case string:
w.Write([]byte("string!\n" + v))
default:
w.Write([]byte("something else!\n"))
}
}
}
しかし、潜在的な型を動的にチェックして、それを読み込み可能なものに変換するより良い方法はありませんか?私がしたいのは、クエリの結果を吐き出すことです。これは私が何か間違っているようです。
明示的に同じタイプの場合でも、常にdefault
ケースに当たることに注意してください。