初めまして、初投稿となります。
最近Goを初めて約2ヶ月なのですが、まだまだ慣れない
特に配列が苦手だった私にとっては「arrayとsliceってなんぞや?」で
3日間苦しむことも…(´・ω・`)マジツレェ
##なぜsliceと構造体を使おうとしたか?
開発している時に複数の値を入力して、
Googleのdatastoreに構造体の値を出力させるものを作ろうとしていました。
いざsliceを使って何個も値を入力できるようにしたのです。
「よしできた!( ・∇・)」と思ってdatastore見たら
構造体の一箇所にsliceのデータがギッシリ詰まってましたΣ(・□・;)
[{1 1}{2 4}{3 9}{4 16}{5 25}]みたいな感じで
もう摩訶不思議アドベンチャーです
こういうので引っかかったのは私だけじゃないはずと思いたい…
##結果的にどうしたか
一度作ったsliceを別の構造体に挿入してみたって感じです
まずは簡単に構造体とsliceを作ってみます
package main
import (
"fmt"
)
type Slice struct {
Singular int //単数
Power int //累乗
}
type Store struct { //sliceの値を入れる構造体
Singular_answer int
Power_answer int
}
func main() {
slice := []Slice{} //構造体Sliceをsliceにします
for i := 1; i <= 5; i++ {
singular := i
power := i * i
fmt.Println(singular, power)
/*
1 1
2 4
3 9
4 16
5 25
*/
//appendでsliceの中にsinfularとpowerの値がそれぞれ入る
slice = append(slice, Slice{
Singular: singular,
Power: power,
})
}
fmt.Println(slice)
//[{1 1} {2 4} {3 9} {4 16} {5 25}]と値が入っていることが確認できた!
とりあえずこれで構造体からsliceにできましたね(´・ω・`)フゥ…
しかしこれでgoonを使って書き込みしたら私みたいになります
じゃあどうするべきか
//ここからが解決策
//rangeでsliceに入っている値の数ループさせます
for _, input := range slice {
slice_input := Slice{
Singular: input.Singular,
Power: input.Power,
}
fmt.Println(slice_input)
/*
{1 1}
{2 4}
{3 9}
{4 16}
{5 25}
*/
}
}
このようにあらかじめ用意しておいた構造体に
もう一度突っ込んで上げることでスッキリしました…
datastoreに突っ込む時はgoon.Putをループに突っ込んで上げると
一回のループで一個ずつ入ってくれるはず(´・ω・`)
以上!!