0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Go言語について

Last updated at Posted at 2024-04-29

Go言語についての概要と学習内容について

go言語を勉強にするにあたり、ますはgo言語についての概要をまとめていく
調べてヒットした特徴をコピペし、それぞれの感想を書いてみた

概要

・シンプルで読みやすい構文: Go言語は、C言語のような伝統的な構文を持ちながら、冗長さを排除し、シンプルで読みやすいコードを書くことができます。
→まあ分かる

・効率的な並行処理: Go言語は、ゴルーチン(Goroutine)とチャネル(Channel)という仕組みを使って並行処理をサポートしています。これにより、軽量で効率的なスレッドの生成と通信が可能になります。
→並行処理に関する知見が不足しているため正直ぱっとイメージが沸かない(要調査)

・静的型付けと型推論: Go言語は静的型付け言語ですが、変数の型を推論する機能も持っています。これにより、型の記述が簡潔になります。
→いいね

・ガベージコレクション: Go言語はガベージコレクションをサポートしており、メモリ管理を開発者が手動で行う必要がありません。これにより、安全で信頼性の高いコードを書くことができます。
→いいね

・クロスプラットフォーム: Go言語は、Linux、Windows、macOSなどのさまざまなプラットフォームで動作します。また、CPUアーキテクチャにも対応しています。
→へー(正直あまり恩恵がわかっていない、、)(要調査)

・豊富な標準ライブラリ: Go言語には豊富な標準ライブラリが含まれており、ネットワーク、HTTP、JSON処理、暗号化などのさまざまな機能を提供しています。
→いいね

・ツールのサポート: Go言語には、コードのフォーマット、静的解析、テスト、ドキュメント生成などをサポートする豊富なツールがあり、開発者の生産性を高めます。
→いいね

といった感じだった。
いいことばかり書いてあるようだったのでデメリットがないかも調べてみた

デメリット

ジェネリクスの不足: Go言語は、ジェネリクスのサポートが限られています。これは、汎用的なデータ構造やアルゴリズムを書く際に制約をもたらす場合があります。ただし、将来のバージョンで改善される可能性もあります。
→そんな気にしなくてよい?(筆者がジェネリクスのパワーを理解できていないから思うだけかも、、)

→ジェネリクスはすでに実装済み(v1.18以降)(追記:2024/4/29)

・静的解析ツールの不足: 一部の開発者は、Go言語向けの静的解析ツールが他の言語に比べて少ないと感じるかもしれません。これにより、一部のエラーや問題を早期に検出するのが難しい場合があります。
→大規模だと困りそう

・速度よりもメモリ効率: Go言語は一般的に高速ですが、他の言語と比較してメモリ効率が低い場合があります。これは、ガベージコレクタのオーバーヘッドやランタイムの特性によるものです。
→ざっくりしすぎてよく分からない。というかメモリ効率についてちゃんと勉強していないからよくわからない。。(今後勉強するかも)

・成熟度とエコシステムの不足: Go言語は比較的若い言語であり、一部の成熟したエコシステムやライブラリが他の言語と比較して少ないことがあります。しかし、この点はGoの急速な成長と共に改善されつつあります。
→じゃあ早めに手を付けておこう。。

・学習曲線: Go言語の構文やコンセプトは比較的シンプルですが、新しい開発者にとっては学習曲線があるかもしれません。特に、並行処理の概念やチャネルの使用方法など、独自の機能を理解するのに時間がかかることがあります。
→まさにその通りで並行処理の概念やチャネルの使用方法は理解しきれていなそう。。

上記のようになったが
これから学習していくにあたり、学習コストは高くなりそうだが価値はありそうだと感じた。(goを使わないにしてもCS的な意味合いで)

学習順序

以下の順で学習していく
①基本構文の理解: Go言語の基本構文やデータ型、変数、制御構造などの基本的な要素
②関数とパッケージ: 関数の定義や呼び出し、パッケージの作成やインポートなど、Go言語での関数とパッケージの基本的な使い方
③データ構造とコレクション: 配列、スライス、マップなどのデータ構造やコレクション
④ポインタとメモリ管理: ポインタの概念やメモリ管理
⑤並行処理とゴルーチン: ゴルーチンやチャネルを使った並行処理の概念
⑥エラーハンドリング: エラーハンドリングの方法や、エラーを適切に処理する技術
⑦テストとデバッグ: ユニットテストや統合テストの書き方、デバッグの方法など、テストとデバッグの基本的な技術
⑧標準ライブラリの活用: HTTP、JSON、暗号化、データベース等活用する方法
⑨実践的なプロジェクト: 実際に作ってみる

以下をモチベーションに勉強していく
・若い言語ができるとかっこよい
・単価アップ(銭ゲバです。。)
・名前が好き(これは筆者が北〇子様の回胴機に脳を焼かれてるからかもしれませんが ペカッ)

不純な動機しかありませんが単純におもしろそうだなと思っています。
どこまでやれるかわかりませんが頑張ってみます。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?