TIL

Goの基本構文を完全に理解した

仕事でGolangを触ることになりそうなので、メルペイ上田さんの神教材で基本構文を完全に理解することにした。

正確には、私自身はそこまで触らなそうだけどチームのメンバに触ってもらうことになりそうなので、先輩風の風速を維持する目的で完全に理解することにした。

とりあえず3章までサラッと読んだ。

https://engineering.mercari.com/blog/entry/goforbeginners/

この教材すごい

最初は公式チュートリアルの A Tour of Go で勉強しようかなと思っていたのだけど、言語仕様と基本構文(と競プロ的な演習)に特化している印象を受けたのでやめた。

メルペイさんの方は目次を見た時点でテストや静的解析、エラー処理など実務で必要になりそうなトピックが盛り込まれていることがわかったのでこれを使うことに決めた。

概観から入るの大事

1章の『Goに触れる』は、お決まりのHelloWorldを表示させるところからスタート...ではなく、Go言語がどんな課題を解決するために開発されたのか、Goそのものの開発プロセスや言語特徴の説明から入って100ページ以上にわたって概観が語られている。これはいい。

ところどころに設けられた演習問題も本質を考えさせる内容でとても有用そう。チームで新しい言語に触れていくにあたり、思想の共有だったり言語そのもののメリットやデメリットを共通認識として持てると良いので、勉強会のお題としてGolangを導入する意義についてディスカッションしてみたいと思った。

思ったこととかのメモを色々

ここからは思った事をメモ程度に残す。ちなみに今の職場は Ruby と Perl が主要言語なので静的型付け言語を欲してた。

開発環境系

  • gofmt最高。書式が標準で決められてるのはとても嬉しい
    • 「カスタマイズ? バカ言ってないで黙って従え」なのも良い
  • 開発現場では必ず欲しいツール達が標準搭載されてる
  • GoLand に課金するかは少々迷う
    • VSCode でも補完速度は割と優秀なので最初はこれで良いかも
  • IDEを使い始める前にコマンドラインで慣れておきたい
  • シングルバイナリはデプロイ容易性の面では結構メリットがありそう

基本構文

学生時代にCをちょっと使ってたので馴染みやすい印象。

  • 未使用変数、未使用インポートを許さないのは良い
    • 書いてる時は鬱陶しさあるだろうけど、バグの元になるよりはマシ
  • switchのデフォルトbreakは合理的
  • if文の条件式のところ(簡易ステートメント)で宣言した変数はelseブロックでも有効なのが罠
  • 繰り返しは全部for
    • doとかwhileは確かになくてもいいと思う
    • 実務ではほとんどrangeの繰り返しを使いそう
  • iotaは使いどころがまだわからない
  • ポインタの演算が不可なのはありがたい。怖くてやりたくない
  • スライスの理解は疎かにできなそう
    • 裏にいる固定長配列を、ポインタとlencapで参照するやつ
    • append使い慣れないと駄目そう
  • 構造体
    • ユーザ定義型としていっぱいお世話になりそう
  • 関数
    • 第一級関数をサポートしてる
    • 多値リターンできる
    • 名前付き戻り値・・・は好みではない
    • クロージャがある
  • メソッド
    • 関数とメソッドで明確に構文が違う
    • 構造体の外側にメソッドを定義するのは随分風変わり
    • メソッドの振る舞いをレシーバに影響させるにはレシーバをポインタで受ける

触った感じ文法の柔軟性は皆無だけど、業務プログラミングにおいては書く楽しさを増やすよりも読む辛さを減らす方が幸福度は高いと思う。教材の4章からはGoらしさがより学べそうなので楽しみである。


<< 記事一覧へ