自己紹介
グーナーと申します!
今の企業に未経験で転職して半年が経過し、段々はじめの頃よりか時間の余裕ができ始めていました
ので、成長が鈍化している気がし、心の中でメンズコーチから叱咤を受けました
🙎♂️<弱いって
そこから決意を決めたグーナーはアウトプットへの道を歩き始めたのだった
Goのなかった時代
Wikiから引用
Googleなど、多くのIT企業ではソースコードの複雑さや肥大化が問題になっていた。他の言語がよく受ける批判を解決するとともに、それらの言語のよい特徴をできる限り損なわないようにすることを目指した。彼ら設計者たちは、新しい言語として、以下の特徴を持つものを構想していた。
1. JavaやC++のように、静的に型付けされ、巨大なシステムでもスケールする
2. RubyやPythonなどの動的な言語のように生産性(英語版)が高く、リーダブルであり、過度なボイラープレートが必要ない
3. IDEが必須ではない。ただし、十分にサポートする
4. ネットワークおよびマルチプロセッシングをサポートする
引用をGPTに投げてみました
今までのプログラミング言語は以下のような課題があったらしい!
1. 動的型付け言語のパフォーマンスが物足りない
RubyやPythonなどの動的型付け言語は、開発速度やコードの可読性に優れていますが、実行時のパフォーマンスが低く、大規模システムや高負荷環境での利用が難しいという欠点があります
また、動的型付けに伴う型エラーが実行時まで発見されないため、バグの潜在的なリスクが高まっていました
2. IDE依存とツールサポートがほしい
多くの言語では、効率的な開発を行うために高度な統合開発環境(IDE)が必要とされていました
しかし、これらのIDEは設定や学習が複雑であり、軽量なエディタとの連携が難しい場合が多かったため、開発環境の選択が開発効率に大きな影響を与えていました
3. 並行処理はどの言語でもムズイ
C++やJavaではスレッドベースの並行処理が一般的ですが、スレッドの管理や同期が複雑で、デッドロックやレースコンディションといった問題が発生しやすいという課題がありました
一方、動的言語では並行処理のサポートが不十分であり、高度な並行プログラミングが困難でした
4. 標準ライブラリにガタが来た。。
多くの言語では、特定の用途に特化した標準ライブラリしか提供されておらず、外部ライブラリへの依存が避けられない状況でした
これにより、プロジェクトの依存関係が増加し、ビルドやデプロイが複雑化する傾向がありました
Goは何を提供してくれる?
1. コンパイルがはやいのとコスパのいい実行
Goのコンパイラは高速に動作し、大規模なコードベースでも迅速にコンパイルを完了できます
さらに、ネイティブバイナリ1を生成するため、実行時のパフォーマンスが高く、動的言語の欠点を克服しています
2. Go独自の並行処理
Goは、ゴルーチンとチャネル2という並行処理モデルを提供しています
ゴルーチンは軽量なスレッドとして動作し、チャネルを通じて安全にデータをやり取りできるため、並行プログラミングが容易かつ安全に行えます
3. 外部依存対策の標準ライブラリ
Goは、ネットワーキング、暗号化、I/O操作など、幅広い機能を標準ライブラリとして提供しています
これにより、外部依存を最小限に抑えつつ、安定した機能を利用することが可能です
4. クロスプラットフォームのサポート
Goは、主要なオペレーティングシステム(Windows、Linux、macOS)に対応しており、同一のコードベースで多様な環境下で動作するアプリケーションを容易に開発できます
また、クロスコンパイルも容易であり、異なるプラットフォーム向けのバイナリを簡単に生成できます
5. 強力なツールチェーン
Goは、標準で強力なツールチェーンを提供しています
これには、フォーマッタ(gofmt)、テストツール、ベンチマークツール、ドキュメンテーションツールなどが含まれており、開発プロセスを統一し効率化することができます
最後に
まだ曖昧な知識でGoを使っているので、調べないといけないことが溜まりに溜まっている!
どんどん記事に消化できるようがんばります
ゴルーチンやジェネリクスはまだリーディングしたことしかない。。
次はそういった技術について調べます