エンジニア採用担当がプログラミング頑張る話【22日目/2ヶ月間】
こんにちは、@hiroki_maekawaです。
以下が昨日のミーティングで決まった今週の課題です。
・paizaのチュートリアル問題CとD(毎日1時間できるとこまで)
・API経由でCREATE/UPDATE/DELETEを行う
・記事100件APIの作成
・記事詳細APIの作成
・記事作成APIの作成
・記事更新APIの作成
・記事削除APIの作成
まずはpaizaのチュートリアル問題から始めました。paizaでは、スキルチェックを行うことができたり、就活ができたり、転職ができたりするプラットフォームのようです。以前転職の相談を頂いたエンジニアの方もpaizaで就職を決められたようで、名前だけは知っていました。
早速チャレンジしてみたところ、一番簡単なレベルの問題なのに、まさかの1問解くだけで1時間かかってしまいました。。
paizaのチュートリアル問題はあくまでスキルチェックの要素が強いようで、模範解答や解説がなくなかなか自分で進めていくのは難しいなと思ったので、明日はAtCoderという競技プログラミングを行うサービスのサンプル問題を見てみようと思いました。
次に、今週末ずっとつまずいている問題「最終出力を複数出す方法」を考えていく作業です。まずは@Sueken51さんに下記コード解読の課題を頂きました。
package main
import (
"fmt"
)
type X struct {
Name string
}
func main() {
result := run()
fmt.Println(result)
}
func run() []X {
names := []string{"hello", "world", "!!"}
xs := make([]X, 0)
for _, n := range names {
x := X{Name: n}
xs = append(xs, x)
}
一通りググりまくって何が起こっているのか説明できるようになり、且つ、これで配列を作ることで複数の結果を表示できることが分かりました。
package main
import (
"fmt"
)
//構造体。Xという構造体を定義。(X型を定義したとも言える。)
//Nameというstring型のフィールドがX型に含まれている。
type X struct {
Name string
}
func main() {
//result変数を宣言し、run関数のリターンであるxs変数をresult変数に代入。
result := run()
fmt.Println(result)
}
//Xという構造体の配列型を定義。→それをrun関数で処理してリターンのxs変数を得る。
func run() []X {
//names、xs、xはXの配列型。
//namesという変数が宣言され、string型の"hello", "world", "!!"が代入された。
names := []string{"hello", "world", "!!"}
//makeでいきなりスライス(xs変数)を作れる。Xの配列型に入る要素は今のところ0個。
xs := make([]X, 0)
//names変数に代入された値の分だけループ処理されて、nに代入される。
for _, n := range names {
//Xという構造体に定義されたNameフィールドにnを代入して、X{Name: n}をXの配列型であるx変数に代入することで、同じXの配列型であるxsに代入することができる。
x := X{Name: n}
//appendはスライス(xs変数)の末尾に要素(x)を追加するための命令
xs = append(xs, x)
}
return xs
}
その後、「fruitsの配列の変数を作って、それを` return c.JSON(http.StatusOK, fruits)` するようにしてみましょう」という課題が出たのですが、全然できていないことがバレ、例が送られてきました。
package main
import (
"fmt"
"net/http"
_ "github.com/go-sql-driver/mysql"
"github.com/labstack/echo"
)
//Fruit 構造体
type Fruit struct {
ID int `json:"id"`
Name string `json:"name"`
Price int `json:"price"`
}
func main() {
//Echo立ち上げる
e := echo.New()
//GETリクエスト(ルーティング)
e.GET("/show", show)
//サーバー起動
e.Start(":9000")
}
func show(c echo.Context) error {
fruits := []*Fruit{
{
ID: 1,
Name: "no1",
Price: 10,
},
{
ID: 2,
Name: "no2",
Price: 20,
},
{
ID: 3,
Name: "no3",
Price: 30,
},
}
fmt.Println(fruits)
return c.JSON(http.StatusOK, fruits)
}
fruits := []*Fruit{} は、ひとまずポインタ変数ということは置いておいて、Fruitの配列の変数(ここで言うfruits)を作るとはこういうことだと覚えてしまえばOKということで、暗記しました。
これで複数のデータを表示させる方法は分かったので、DBにあるデータを取ってきてそれらを複数反映させたいのですが、
{
ID: 1,
Name: "no1",
Price: 10,
},
ここを変えれば良いのか?変えるとしたらどう変えれば良いのか?それとも他に方法があるのか?結局分からずもやもやしたまま1日が終わってしまいました。悔しい。。
今日できるようになったこと
・配列を使って最終出力を複数出す
さいごに
今が人生の中で一番パソコンの前にいる時間が長いかもしれません。笑
ここ数日は煮詰まっている時間が長く、なかなか自分のやりたいことを反映させることができないですが、粘り強くいきたいと思います。
それではまた!