-
著者はカモノハシ
- 批判を無視するために著者を無能だと決めつけるのは怠惰なやり方である。
- ジュニア開発者は新しい視点で問題を見ることができ、これは採用の重要な理由である。
- 著者はジュニア開発者ではなく、多様な経験を通じて言語設計への理解を持っている。
-
母親がタバコを吸っているから大丈夫
- 他社が使っている技術を無条件に追随するのは非効率である。
- 技術ブログには会社のイメージをよく見せようとする目的がある。
- Tailscaleのブログは率直だが、Goの問題を解決するには多くの努力が必要である。
-
良い点
- Goは非同期ランタイムとガベージコレクタが優れている。
- パッケージ管理、リファクタリング、クロスコンパイルなどのツールが使いやすい。
- しかしGoの欠点は無視できず、言語の設計が偶然の産物である点が問題である。
-
Goは島である
- Goは他の言語との相互運用性が乏しい。
- Goのツールチェーンは独特で、既存のアセンブリ言語やデバッガを使えない。
- ネットワーク境界を通じてGoと統合するのが最も簡単な方法である。
-
すべてか無か(だから何もしない)
- Goでは初期化されていない構造体フィールドが残りうる。
- ゼロ値に意味があるというのは素朴な考えであり、多くの場合は問題になる。
- Goの文化は問題を解決するよりも、注意しろという姿勢である。
-
「Rustは完璧で、お前らはみんなバカだ」
- Rustは段階的に導入でき、他の言語ともよく統合される。
- Rustの成功は部分的には安全な言語への移行が可能だという点にある。
- Rustにも問題点は存在するが、それらは段階的に解決されつつある。
-
Goをプロトタイプ/スターター言語として使う
- Goは学びやすい言語だと思われているが、実際には多くの経験が必要である。
- コードが間違っていることを明確に知らせる機能が不足している。
- Goの欠点は時間とともに表れ、簡単には移行できない言語である。
-
私たちがGolangを使い続ける理由についての嘘
- 他の人たちが使っているのだから、自分たちにも良いはずだという考え
- 言語設計の欠陥を個別または集団として許容できると考えること
- 注意深くやれば問題を乗り越えられるという考え
- 書きやすいのだから、本番用ソフトウェアの開発も簡単だという考え
- 言語が単純なのだから、すべてが単純だという考え
- あとでいつでも書き直せるという考え
2件のコメント
Go言語を集中的に触っている期間はほんの一瞬のようなものですが、そんなアマチュアが文章を書いてよいのかとも思います……。ただ、Go言語は長所と短所が本当にはっきりしているので、選ぶ人にも避ける人にも明確な理由があるように見えます。個人的にはRustと比較するものではなく、Kotlin(Java)と比較するのが適切な気がします。
Goのgoroutineは本当に素晴らしいですが、魔法ではありません。特にバックエンドでMySQLを1つだけ使う小さなプロジェクトでは、この並行性というものを管理するのが本当に厄介です。JS/TSランタイムではそこまで気にしなくてもよいMySQLのリソース枯渇やプール管理が、思った以上に難しいんです。結局この状況ではDBがボトルネックになるので、Go言語の並行性の利点は一部薄れてしまいます。(JS/TSランタイムの非同期I/Oやイベントループのほうが、むしろ適しているかもしれません)実際、heyのようなツールで
-c 100と流し込んでみれば分かります。それから優れたGCはありますが、だからといってむやみにオブジェクトをポインタだけ渡して使い、後始末は知らないというわけにはいきません。何事にもトレードオフはありますが、Go言語でも可能なら小さなオブジェクトは単に値コピーで渡して使い、関数が終わればすぐ処理されるようにしたほうがよいです。自分が古い考えに縛られているのかもしれませんが、C/C++のように効率の観点だけでポインタへ気軽に手を伸ばすべきではありませんでした。
関数のreturn時に
errorをほぼ毎回返し、それを毎回if err != nil {}でチェックしなければならないのは本当に面倒ですが、これは長所です。try catchよりコストが低いからです。そしてfinally {}のような役割をしてくれるdeferキーワードも素晴らしいです。リソース解放のタイミングを悩む必要がないのはよいですね。標準ライブラリだけで優れたバックエンドサーバー構成がすぐ可能な点も良いです(1.23以上)。何より、ターゲットOSに合わせてビルドすれば、他のランタイムや事前インストールが必要ない点が一番良いです。Go言語を長く使ってきたわけではないのに、あまりに個人的な意見を長々と書いている気がするので、この辺でやめておきます。笑 私はGo言語も好きですし、ほかの言語も好きです!
Hacker Newsのコメント
Go言語の欠点については多くの指摘があるが、明示的なエラー処理はその一つではない。例外処理は、あまりにも簡単にミスできてしまう「魔法」のような層を追加する。個人プロジェクトではRustを好むが、さまざまなレベルの開発者が参加する大規模プロジェクトでは、Goの哲学が現代世界で最も合理的なエラー処理アプローチだ。
RustとGoは大きく異なっており、人々が望む中間地点は今のところ存在しない。
シンプルな言語が好きだ。技術には常にトレードオフがあるため、バランスの取れた批判が重要だ。
言語を批判することがなぜそんなに重要なのか不思議だ。批判は建設的なスタイルで書かれていない。
Goへの批判を読むたびに、それでもGoを使い続けるだろうと思う。
他の言語を使うたびにGoに戻りたくなる。
より良いPythonを探していた。Goは明らかな選択だったが、文法が嫌いだ。
GoとRustがしばしば比較される理由がわからない。Javaと比較するほうが適切だ。