LoginSignup
0

More than 3 years have passed since last update.

Sliceの値を構造体に表す方法

Last updated at Posted at 2019-11-25

初めまして、初投稿となります。
最近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をループに突っ込んで上げると
一回のループで一個ずつ入ってくれるはず(´・ω・`)

以上!!

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0