Help us understand the problem. What is going on with this article?

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

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

以上!!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした