github.com/fatih/structs パッケージを使用して、構造体のすべてのフィールドの値をtoValues()
関数で_[]interface{}
_に変換しています。 こちら を参照してください。これは問題なく機能しますが、最終的にはcsvパッケージを使用してcsvファイルに値を書き込みたいと思います。 csv.Write()
関数には、入力として_[]string
_が必要です。
つまり、toValues()
の出力を文字列の配列に簡単に変換するにはどうすればよいでしょうか。
すべての値が具象型string
であっても、_[]interface{}
_を_[]string
_に単純に変換することはできません。これらの2つの型のメモリレイアウト/表現は異なるためです。詳細は [] stringを[] interface {}に変換できない を参照してください。
さまざまなタイプの値をstring
値で表す方法を定義する必要があります。
最も簡単で賢明な方法は、値を反復処理し、 fmt.Sprint()
を使用してそれぞれのstring
表現を取得することです。例:
_t := []interface{}{
"zero",
1, 2.0, 3.14,
[]int{4, 5},
struct{ X, Y int }{6, 7},
}
fmt.Println(t)
s := make([]string, len(t))
for i, v := range t {
s[i] = fmt.Sprint(v)
}
fmt.Println(s)
fmt.Printf("%q\n", s)
_
出力( Go Playground で試してください):
_[zero 1 2 3.14 [4 5] {6 7}]
[zero 1 2 3.14 [4 5] {6 7}]
["zero" "1" "2" "3.14" "[4 5]" "{6 7}"]
_