Open3

「Go言語はクソだ!」と言われがちなポイントを自分なりにまとめていくスレ

かわりくかわりく

最近Go言語が一気に推され始めている気がする。社内でも一気にGo推進の流れが始まっている。
が、Goを書き始めた人全員が一度は通る道
「Goクソじゃね...?何がいいんだ...?」
っていう感情をここで受け止めたい。

Goを初めて書く前に、このスクラップに立ち寄ると良い。
逆に何がクソポイントかを把握して、なんとなくベターな方法を知っていると拒絶反応は比較的少なくなるだろう。

Goは何ができるかよりも何ができないかを知ると良い。

かわりくかわりく

第一章「オプショナル型もユニオン型も存在しないからポインタでnullableを表すんだ!なんか危険そう!」

「新しくPrice型を定義することになったゾ。Priceは数値型か未定義(null)らしいからユニオン型でこうだな」

ts
type Price = number | null

「そういえば全く同じ仕様をGo言語のサービスにも実装する必要があったんだ!せっかくだから今一緒にやってしまうっちゃ」
「初めてGo書くから不安だけど、最近はAIさんに聞けば何でもわかるから大丈夫!」

go
type Price *int

「なんだ...?この違和感は...なんかよくない気がするな...」
「これだとポインタには参照とオプショナルの二つの責務があるように見えるけど...」
「とはいえ、モダンな静的型付け言語だから、ポインタがnil(null)かどうかをチェックせずに値を使おうとするとコンパイラさんに怒られるはずだから、問題ないか!」


ここでの問題はポインタに参照とオプショナルの二つの責務があるという点。
参照はあくまでメモリ効率の観点[1]から利用されるわけなので、基本的にはnull pointerを期待していない。一方でオプショナル型はnull or 値を期待している。

この両者が*という記号一つによって表されるため、どちらを期待するのか区別ができなくなっている。

まぁ実装上は彼が言ったように↓のはずなので問題ない。本当に...?本当か...?次章に続く...

「とはいえ、モダンな静的型付け言語だから、ポインタがnil(null)かどうかをチェックせずに値を使おうとするとコンパイラさんに怒られるはずだから、問題ないか!」

脚注
  1. 他にも理由はあります。 ↩︎

かわりくかわりく

第二章「今時null安全じゃない言語が流行っているなんて...この世界は終わりだ...!!!」