導入
2022年5月28日開催の 「STEP UP GO」 というメルカリさん主催の学生・第二新卒向けのイベントに参加させていただきました。
5月から7月にかけて行われる全3回の勉強会の第1回では、
前半でGolangの基本情報をメルカリのtenntennさんに紹介していただきつつ、
後半ではメルカリUSに所属されているNSEGAさんとのパネルディスカッションを拝聴しました。
Qiitaの記事にするほど綺麗にまとめられているわけではないですが、
自分が知って勉強になったことなどをメモ書き程度に書き留めておこうと思います!
学び
インプットは良質なアウトプットするために行う。
勉強をやみくもにするのではなく、アウトプットが前提にあるべきということを再確認した
Goについて
-
使っていないimport宣言を許していないのは、ビルドが遅くなる要因を排除する目的があるから
- なんで許さないのか → 開発のスケールしやすくなることをGo自体が目指しているから。
-
言語ごとの開発の背景を学ぶべきである
- 「Goに入ってはGoに従え」
-
ソースコードだけで解析が可能
- C言語だとどのソースコードを使ってプログラムをビルドするかはMakefileに書いている。
- ただし、Makefileの形式が自由すぎたり、そもそもC言語のソースコードだけで分からないから見るところが増えて困る
- 一方でGoでは、例えば、カスタム型がコードに出てくる時に「どこからimportされた型なんだ...?」とならなくて済む
-
機能がたくさんあれば「良い言語」というわけではない、安定した開発が行われたのかというのがより大切
- プロダクトのユーザーからすればちゃんと使えるかが一番大事なことだから
-
go toolとしてtestの標準コードが用意されているなど、会社によるブレがないのが素晴らしい
-
gofmtの素晴らしいところは、高機能なフォーマッターが使えるというところよりも、例えば、半角スペースを空ける空けないなど、クリエイティブじゃないところで宗教戦争が起きない仕組みが作られているのが素晴らしい。
-
tenntennさんはif文の中かっこを必須にしたのが1番の功績だとお考え
-
GOPATHやGOROOTの設定は不要。なんならネットの記事で「GOPATHの設定しましょう」とかは2022年現在では閉じてしまっていい。
- Go Modulesを今は使えるため。
ハンズオン
-
println()
は標準エラーに出力。fmt.Println()
は標準出力に出力。fmtと違ってimportを必要としないため、初学者にGoを説明する時に使う場合は有用。 -
go build -o myprogram .
-o の後の名前で実行ファイルを作成できる
NSEGA(セガさん)とのパネルディスカッション
-
新しい言語に移行することのメリット
- 既存のシステムの見直しができるから、無駄な機能の削減や深い理解に繋げられる
-
Goを採用することで、他の言語であれば並行処理を使わない場面でも並行処理で書くことは増えるのか?(Goを採用することで並行処理は増えるのか)
- Goであってもなるべくシリアルで書くべきだと思う。
- 並行処理は複雑になって処理を追いづらくなるから、手段の1つとして適切である場合は使う。
- ただしミドルウェアに関しては並行処理にしている箇所は比較的多い
-
メルカリにインターン生として採用される時に必要な技術力
- atcoderの緑ならGood, 茶色でも可
-
fatalやpanicは使うなというが使うケースはあるか
- fatal (exit code 1 で固定になってしまう), panicはプログラム自体が終了するからまず使わない
- 「この機能が動かないならプログラム全部落ちてしかるべき」くらいのことがありえるなら使うこともあり得るかもだけど... (DBに繋げない時とか)
-
エンジニア1年目にやってよかったこと →
- 技術的なコミュニティに参加した
- 炎上案件につっこんだ
-
オススメの勉強リソース
- 本は情報が遅いから読む頻度は少ない(代わりにオフィシャルドキュメントを英語で読むことが多い)
- 枯れた情報を体系的に学ぶのであれば本はOK
- エンジニアのロードマップに沿って勉強
-
e34のポッドキャストを聞いてキャッチアップ
-
エンジニアとして成長が早い人の特徴
- レジリエンスがある(立ち直りが早い、失敗してもへこたれない、PDCA回す)
- コツコツやる人(毎日勉強している)