Go研修を修了しました
2017/11~2018/4の6ヶ月間、柴田先生のGo研修を受講しました。無事修了したので感想やメモをまとめておきます。
研修概要
こちらの研修を受講しました。 第5期Go言語研修を開講しました:柴田 芳樹 (Yoshiki Shibata):So-netブログ
「プログラミングGo」の書籍を半年間書けて読み、課題もすべて解いていくスタイルの研修になります。 予習時間はすべてプライベートの時間を使って行うこととなっており、私はプライベートの半分以上の時間はこのGo研修の予習に費やしたと思います。
第5期Go研修が終了しました:柴田 芳樹 (Yoshiki Shibata):So-netブログ
続きを読む3年が過ぎた
年度末は胃腸炎になったりバタバタしていて3月中に振り返りエントリを書けなかった。 完全にタイミングを逃したが未来の自分のためにやっぱりまとめておく。
[参考]
1年目 文系からエンジニアになって1年が経っちゃったよ - C-FRONT
続きを読む初めてのサンフランシスコ/海外カンファレンス〜KotlinConf2017に行ってきた〜
初めて海外カンファレンスに行ってきた。次行く機会に自分でも見直せるように書き残しておく。
きっかけ
- ちょうどGoogle IOがあった時でTLでtwitterでいつも見ている人が皆Google IOに行っていることを知る
- 自分の会社、他の部署・他の関連会社では同じ年くらいの人も行っていたのでいいなーと思う。
- 会社で行かせてもらうほど自分に技術やスキルに自信がなかったのですぐには行けないけど、いつか行きたいなと思っていた
- シリコンバレーや海外で働くことに対して漠然とした憧れはあったけど実際に何が良いのかうまく自分の中で説明できなかった。
- 「とにかく海外カンファレンス行ってみたい!」何が良いのかも一回行ってみないとわからないでしょう、一回行ったら気が済むのでは、と思っていた。
Groovy入門して躓きメモ
Java→Groovy初日で出会ったエラーたちやメモたち。 syntaxもよくわからない中で出会って、解決するのに慣れなかったのでメモしておく。
メソッドの呼び出し間違い
メソッドの呼び出しが間違った時
Caught: groovy.lang.MissingMethodException: No signature of method: hogepackage.hogefile.hogemethod() is applicable for argument types: (java.math.BigDecimal, java.util.ArrayList, groovy.sql.Sql) values: ...
特にクロージャの中でエラーが起きるとクロージャのどこでそれが起きているのかよくわからなくて慣れるまで時間がかかった。
変数の宣言のスコープ
http://d.hatena.ne.jp/Kazuhira/20120318/1332083318
before
def sql = Sql.newInstance() Map.each{k,v-> searchUuidByUser(k,v,sql) }
eachの中からsqlは呼び出せない。
Caught: groovy.lang.MissingPropertyException: No such property: sql for class: hogepackage.hogefile groovy.lang.MissingPropertyException: No such property: sql for class: hogepackage.hogefile
after
sql = Sql.newInstance() Map.each{k,v-> searchUuidByUser(k,v,sql) }
def をつけているとクロージャ内やメソッド内から呼び出せない。
列名が無効
before
def SELECT_USER_POINT_HISTORY = "SELECT ID,POINT,INSERT_AT from POINT_HISTORY where ID = $userId ORDER BY INSERT_AT" List<Point> pointList = new ArrayList() sql.eachRow(SELECT_USER_POINT_HISTORY){ Point dto = new Point() dto.type = it.type dto.point = it.point dto.insertAt = it.insert_at pointList.add(dto) }
警告: Failed to execute: SELECT ID,POINT,INSERT_AT from POINT_HISTORY where ID = ? AND TYPE != 0 ORDER BY INSERT_AT because: 列名が無効です。 Caught: java.sql.SQLException: 列名が無効です。 java.sql.SQLException: 列名が無効です。
てっきりSQLが悪いのかと思ってタイポかどうか必死に探したけどSQLが悪いわけじゃなかった
after
def SELECT_USER_POINT_HISTORY = "SELECT ID,POINT,TYPE,INSERT_AT from POINT_HISTORY where ID = $userId ORDER BY INSERT_AT" List<Point> pointList = new ArrayList() sql.eachRow(SELECT_USER_POINT_HISTORY){ Point dto = new Point() dto.type = it.type dto.point = it.point dto.insertAt = it.insert_at pointList.add(dto) }
eachRowの中で参照しているit.typeがselectするものに含まれてないため。 エラー行数をよく見るとit.typeを使っている行を指しているのでわかる
for文の抜けかた
https://stackoverflow.com/questions/3049790/can-you-break-from-a-groovy-each-closure 次のイテレートに入るならeachのままcontinueしてもOK そもそもループを中止したい時(Javaでいうbreakをしたい時)はfindにしてその中でtrueを返してループを終わりにする
pointList.find{ Data data = new Data(); if(nowPoint<it.point){ //breakと同じ。ループを抜ける return true; }else{ //continueと同じ。 return false; } }