近所のブックオフにGoの本が300円で売られていたので購入
ちょうど仕事でGoを使うことになったため貴重な休日をつぶして勉強する
なぜ今更Go?
今までGoは使っていなかった
自分は元々社内に知見がないような技術を検証するチームで働いており、そのメンバは全員フルスタックエンジニアで超少数編成(多くて4人)であった
少人数かつフルスタックゆえに全員が画面もバックエンドもインフラも触る関係で、あらゆるコードをTypeScriptで統一しよう、という方針で仕事をしていた
そんなバリバリ技術やるぞやるぞやるぞなチームになぜか新卒の時からいたため、今まで積み上げたキャリアのほとんどはTypeScriptと戯れていた時間に
Goを使うチームへ
流石にずっとこのチームにいるとスキルセットが歪になると思ったためでかめのチームに合流させてもらうことに
そのチームで開発しているシステムは大規模でシンプルなRESTfulサービスであるため、画面、バックエンド、インフラとチームががっつり分けられている
そしてそれぞれのリーダが自由にチームビルディングをして...という感じの文化で、
自分が合流したバックエンドチームではプロパー、パートナー問わず大量のメンバが割と短期間で入れ替わりまくる環境ゆえ、比較的学習コストの低いGoを採用したとのこと
そんなこんなで全く触ってこなかったGoを勉強しなければならなくなった
GoでWebSocket使う
前置きはこれくらいにして、さっそく例の本を片手に勉強してみる
第一章ではWebSocket(最初はRESTじゃないんかい!)を使ったチャットアプリの解説がなされていたため手を動かしてみる
初めてのコード
package main import ( "log" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte(` <html> <head> <title>チャット</title> </head> <body> <h1>チャットアプリ</h1> </body> </html> `)) }) if err := http.ListenAndServe(":8080", nil); err != nil { log.Fatal("ListenAndServe", err) } }
localhost:8080
にアクセスした際にHTMLを返すだけのコード
http.HandleFuncがよくあるハンドラで、ResponseWriterに何かしら渡せばHTTPレスポンスを返せるんだなぁくらいは分かった
なにこれって思ったのは以下の部分で
if err := http.ListenAndServe(":8080", nil); err != nil { log.Fatal("ListenAndServe", err) }
Go特有のエラーハンドリングである、関数の戻り値として返される例外を検知してごにょごにょする、というのをやっているのわかったが...
どうやらif文の中でerr変数に例外を突っ込んでそのまま評価をしているっぽいが、こんな表現見たことないのでまあまあ混乱してしまった
とまあこんな感じで現在ミリ知らGolangの勉強中
とりあえずCleanArchitectureでSQLiteにでもCRUDできるREST APIを作れるようにはなろうと試行錯誤中
完成したらまたブログに書くかも