Go 言語の開発はますます改善されており、多くの大手企業が Go を主要な開発言語として使用しており、多くの人が Go を学習し始め、Go 開発に切り替える準備ができています。
では、どうやってそれを学ぶのでしょうか?
インターネット時代の学習の難しさは、資料がないことではなく、資料が多すぎてどれを読んでどこから始めればよいかわからないことだとわかりました。
そこで、量で勝つのではなく効率化を目指した囲碁の学習ルートをまとめてみました。基礎から応用まで、理論から実戦まで、以下の内容が含まれています。
- 入門チュートリアル
- 高度なチュートリアル
- 本の推薦
- ウェブ開発
- ハンズオンプロジェクト
- 公共事業
- テクニカルコミュニティ
1. 入門チュートリアル
1.1. Go言語中国語ウェブサイト - Go言語入門チュートリアル
この Go 言語チュートリアルのセットは、理解しやすく、基礎のない読者がすぐに始めるのに適しているだけでなく、長年働いているプログラマーが知識のポイントを確認するのにも適しています。
1.2. Cainiao チュートリアル - Go 言語チュートリアル
この Web サイトについては説明の必要はありません。プログラミング言語の入門チュートリアルがここに多数あります。コードを書く過程で、ある知識ポイントを忘れた場合も、ここで確認することができます。
1.3. W3Cshcool - Go チュートリアル
また、非常に基本的な情報が多く、総合的なプログラミング入門チュートリアル Web サイトでもあります。
1.4、例に従ってみる
コード例が豊富で、基礎を学ぶのに役立ちます。このサイトを参考に理論を読みながらコードを書くとより効果的です。
1.5. Gopher のドキュメント
Goプログラミングのナビゲーションサイトともいえるサイトで、Go学習教材が数多く集められています。Web サイト、書籍、オープンソース ライブラリ、オープンソース プロジェクトなどが含まれます。
2. 上級チュートリアル
2.1. mojotv ブログ
非常に優れたブログで、高度な Go 記事やその他の技術的な記事が多数あり、読む価値があります。作者情報を調べてみましたが見つかりませんでした。
2.2. フライドフィッシュ - Go 言語の設計哲学
Jianyu Daxie のブログでは、公式情報と著者自身の理解を組み合わせて、Go 言語設計の概念と哲学に関連する一連の記事を整理しています。
2.3. 信仰指向プログラミング - Go 言語の設計と実装
Zuo Shen のブログは内容が濃いので、偉大な神になりたいなら必ず読む必要があります。
2.4. 夜の読書に出かける
これは、主に Go ソース コードを解釈するために、多くの上級 Gopher によって組織されたオープン ソース プロジェクトです。そしてオープンソースを主張し、関連リソースを GitHub にアップロードします。
3. おすすめの本
書籍リストには、初心者向け 5 冊と上級者向け 5 冊の合計 10 冊が含まれています。私はそのうちの 7 冊を読みました。残りの 3 冊はまだ読んでいませんが、ネット上ではそちらの方が勧められています。
入門編と上級編に分かれていますが、多くの本には両方の部分が含まれています。視聴すると、まず基礎をしっかり固めてから、自分の状況に応じて上級レベルに進むことができます。
一部の書籍はオープンソースでオンラインで直接読むことができ、一部の書籍には電子書籍が含まれています。ダウンロード方法はGitHubでこちらで 確認できます。条件が許せば純正品を購入するのがベストです。
3.1. はじめに
①、「Go言語おもしろガイド」
本書はGo言語初心者向けの本で、内容も比較的浅く入門には非常に適しています。
この本では、Go 言語を使用するために必要な知識を段階的に紹介し、生き生きとした興味深い例を多数示し、本で説明されている内容の読者の理解を深めるための演習を多数提供します。
②「スタートガイドへ」
この本の英語名は「The Way to Go」で、著者は空いた時間を使って翻訳作業を行っています。これは、原作者 Ivo Balbaert の許可を得てオープンソース化されています。
③「Go言語プログラミング」
本書は主に Go 言語の特徴を紹介しており、サンプルはあまり実用的な意味のない文法デモのサンプルではなく、著者の普段の実践を試みています。C++ と Java を横に比較すると、設計思想の違いがより直感的にわかります。
著者の Xu Shiwei は、Jinshan WPS の元チーフ アーキテクト、Shanda Innovation Institute の元研究員であり、現在は国内の Go 言語実践サークルで認められた Go 言語の専門家です。本書の執筆に参加した著者数名は、実際に Go 言語で開発されたプロジェクトの開発者であり、豊富な実務経験を持っています。
④「Go言語101」
これは、Go 構文セマンティクスとランタイム関連の知識ポイントに焦点を当てたプログラミング ガイドブック (Go 1.17 対応) です。この本の目的は、Go プログラマーが Go 言語をできるだけ深く包括的に理解できるようにすることです。
この本には、Go 言語と Go プログラミングに関する多くの詳細もまとめられていますが、その一部は公式ドキュメントでは決して言及されていません。
この本は、Go 初心者と経験豊富な Go プログラマーの両方に適しています。
⑤、「Go言語プログラミング」
この本は著者のカーニハン氏と、Google の Go チームのディレクターであるアラン・ドノバン氏の共著で、Go 言語を学習するためのガイドレベルの本です。基本的な内容を網羅した充実した内容となっており、読みごたえがあります。
3.2 高度な機能
①、「囲碁言語戦闘」
この本は他の専門書に比べて非常に薄いです。もちろん、これはすべてを網羅した本ではありませんが、要点を押さえています。
読書の過程で一番感じたのは、基礎知識を読む過程で遭遇した、検索エンジンではなかなか答えが見つからない多くの疑問がここで解決されているということです。
②、「Go Webプログラミング」
言語を学ぶことがゴールではなく、その言語を使って仕事をしてお金を稼げるようになることがゴールです。したがって、Web プログラミングにおける Go の応用を学ばなければなりません。
この本はHuang Jianhong氏の翻訳で、この訳者は「Redisの設計と実装」という本も執筆しており、Redisのデータ構造と設計思想をシンプルに分析した本で、非常に優れています。
③「Go言語応用プログラミング」
CGO、Go アセンブリ、RPC 実装、Web フレームワーク、分散システムなどの高度なトピックをカバーします。この本の各章間には強いつながりはなく、各章は独立した知識であり、必要に応じて読むことができます。
④「Go言語学習ノート」
著者は2015年の第1回GopherChinaカンファレンスで講師を務めたYuhen氏。
この本は 2 巻に分かれています。
上巻では言語仕様の詳細を丁寧に分析し、言語関連機能の利用方法や注意事項を深く理解できるようにしています。
第 2 巻では、ランタイム ソース コードを詳細に分析し、メモリ割り当て、ガベージ コレクション、同時スケジューリングなどの言語機能の背後にあるサポート環境とオペレーティング システムを読者が完全に理解できるようにガイドします。この本はプログラミング初心者には適していませんが、実際にプログラミングの経験がある人、または Go を使用している人にとっては参考資料として使用できます。
⑤「Go言語の基礎原理の分析」
本書は、Go 言語のコンパイル、型システム、文法的特徴、関数呼び出しの仕様、並行プログラミング、メモリ管理、ガベージ コレクションなどのモジュールの使い方と基本原理を、わかりやすい言葉と多数の図を使って詳しく紹介しています。 、および実行状態の監視。
Go の基礎となる原理を理解してソース コードを読みたい学生は、この本を読むこともできますが、本の内容を完全に理解するのは簡単ではありません。
3.3. 書籍リストの概要
- 「Go プログラミング言語」 --- アラン AA ドノバン、ブライアン W. コイニハン
- 「Go言語プログラミング」 --- Xu Shiwei
- 「Go in Action」 --- ウィリアム・ケネディ、ブライアン・ケッターソン、エリック・セント・マーティン
- 「Go 言語コア プログラミング」 --- Li Wenta
- 『Go言語学習ノート』 --- 雨の跡
- 「Go プログラミングの同時実行性の実践」 --- Hao Lin
- Go の入門
- 「Go言語標準ライブラリ」
- 「Go Web プログラミング」
- 「Go言語ブログ実践編」
- 『Go言語学習ノート』
- 「Go言語による高度なプログラミング」
- 《効果的な碁》
- 「Learning Go」英語版 => 「Learning Go」中国語版
- 「Goコマンドチュートリアル」
- 「Goによるネットワークプログラミング」 => 中国語版
- 《Goで実践暗号》
- 《Goプログラミング入門》
- 《ブートキャンプに行こう》
- 《Go における並行性の習得》 2014 年 7 月 Nathan Kozyra
- 《Go プログラミング ブループリント》 2015 年 1 月 23 日
- 《Go プログラミング言語》 2015 年 10 月 30 日発行、未発行
- 《実践的な Go: 保守可能な Go プログラムを作成するための現実世界のアドバイス》
- 『Go言語バイブル(中国語版)』
- 「Go言語による同時プログラミング」
- 「囲碁の徹底分析」
4. ウェブ開発
Go は、シンプルで信頼性が高く効率的なソフトウェアを簡単に構築できるオープンソース プログラミング言語です。また、そのシンプルさ、信頼性、効率性により、Go 言語を使用して Web アプリケーションを開発する場合には次のような利点があります。
- より単純な
- より強力なコンパイル能力
- より高いパフォーマンス
- 優れたIDEサポートとデバッグ機能
- 文法がシンプルで使いやすい
ここでは、GitHub のスターが多い、メンテナンスが活発である、使いやすい、情報が見つけやすいなどの基準で、オープンソース Web フレームワークを 5 つ紹介します。
4.1、ジン
プロジェクトアドレス: https://github.com/gin-gonic/gin
完全に Go 言語で記述された HTTP Web フレームワークで、より高速でパフォーマンスの高い Go 言語 Web 開発フレームワークを提供します。
初心者でも使いやすいフレームワークで、Webフレームワークの中でも最も多くの人が使っているフレームワークです。
4.2、規約
プロジェクトアドレス: https://github.com/beego/beego
Beego は、Go 言語開発の専門家 Asta Xie によって開発された、使いやすいエンタープライズ レベルの Go アプリケーション開発フレームワークで、中国語の公式 Web サイトとチュートリアルがあります。
他のフレームワーク言語とは異なり、Beego はグラフィック チュートリアルだけでなくビデオ チュートリアルも提供しており、国内の開発者にとって非常に親切です。
4.3、アイリス
プロジェクトアドレス:https: //github.com/kataras/iris
Iris フレームワークは、Go 開発用の最速の Web フレームワークとして公式 Web サイトで説明されており、複数のフレームワークと複数の言語間のパフォーマンスの比較が示されています。
パフォーマンスが良く、軽量で使いやすい Go 言語 Web 開発フレームワークを選択する場合は、Iris が良い選択です。
4.4、エコー
プロジェクトアドレス: https://github.com/labstack/echo
Echo は、高速 HTTP ルーター (動的メモリ割り当てゼロ) であり、Go 用の小さな Web フレームワークです。
高速 HTTP ルーターを備え、拡張ミドルウェアをサポートし、静的ファイル サービス、WebSocket もサポートし、バインディング関数の定式化、対応するレンダリング関数の定式化をサポートし、任意の HTML テンプレート エンジンの使用を可能にします。
4.5、ゴーフレーム
プロジェクトアドレス: https://github.com/gogf/gf
GoFrame は、モジュール式の高性能、エンタープライズ レベルの Go ベースの開発フレームワークです。GoFrame は WEB/RPC フレームワークではなく、汎用の基本開発フレームワークであり、共通のコア基本開発コンポーネントを含む、Golang 標準ライブラリの拡張拡張レベルです。
利点は、実戦、モジュール化、包括的なドキュメント、豊富なモジュール、高い使いやすさ、強力な汎用性、チーム指向です。
全体として、このプロジェクトには包括的な中国語のドキュメントと周辺開発ライブラリ、活発な問題ディスカッション領域、およびプロジェクトの適切なモジュール設計が含まれています。
これら 5 つのオープンソース プロジェクトには、それぞれ長所と短所があり、市場で検証され広く使用されているプロジェクトもあれば、新星で急速に発展しているプロジェクトもあります。
興味のあるものを選択して学習し、使用することができます。
5. ハンズオンプロジェクト
理論を学んだら、次は実戦でプロジェクトに取り組み始めます。Web 開発に加えて、db、キャッシュ、im など、選択できる方向はたくさんあります。そして、練習プロジェクトとして、それがあまりにも複雑であるべきではありません。そうしないと、まったく理解されず、自信を損ない、練習の効果が得られません。
ここでは5つのプロジェクトを選択しましたが、全体的にコード量はそれほど多くなく、難易度も中程度です。また、プロジェクトごとに異なる技術点を学ぶことができるので、興味のあるものを選択して試すことができます。
5.1、idメーカー
プロジェクトアドレス: https://github.com/yongxinz/id-maker
Go で開発された分散固有 ID 生成システム。
コード量が少なく、プロジェクト全体の難易度も低いため、このプロジェクトを通じて httpServer と gRPC に関する知識を学ぶことができます。
5.2、キャッシュ2go
プロジェクトアドレス: https://github.com/muesli/cache2go
コード量が少なく、初心者の学習に適した比較的シンプルなキャッシュ ライブラリです。このプロジェクトを通じて、ロックやゴルーチンなどの知識を学ぶことができます。
5.3
プロジェクトアドレス: https://github.com/flower-corp/rosedb
Rosedb は、安定した高性能、高速な組み込み KV ストレージ エンジンで、文字列、リスト、ハッシュ、セット、ソート セットなどの複数のデータ構造をサポートしており、インターフェイス名のスタイルは Redis に似ています。
このプロジェクトは純粋な Golang で実装されており、Go 言語の基本的な知識がほとんど含まれており、Golang を学び定着させるには非常に優れたプロジェクトであると思います。
また、コード内にはデータ構造の実装もいくつかあるので、データ構造についても同時に学ぶことができます。
5.4、wechat-go
プロジェクトアドレス: https://github.com/songtianyi/wechat-go
これは、WeChat Web バージョン API の Go 言語実装であり、WeChat Web バージョンのログイン/連絡先/メッセージ送受信機能をシミュレートし、WeChat で受信したメッセージを完全に引き継ぎ、独自の送信コンテンツをカスタマイズできます。
このプロジェクトは非常に興味深いと思います。WeChat を操作するのに使用でき、学習の楽しさをさらに体験できます。
5.5、gin-vue-admin
プロジェクトアドレス: https://github.com/flipped-aurora/gin-vue-admin
gin-vue-admin は、gin + vue を使用して非常に高速な開発を実現するフルスタックのバックグラウンド管理システムです。バックグラウンドには gin フレームワークが使用され、フロントエンドには主に vue が使用されます。
プロジェクトのディレクトリ構造は非常に明確で、パッケージ名はセマンティックであるため、すぐに学習できます。
このプロジェクトでは、次のような人気のある Go オープンソース ライブラリとミドルウェアも使用します。
- gin: 最も人気のある Go 言語 Web フレームワーク
- gorm: データベース操作ミドルウェア
- zap: Go 言語用の uber オープンソース ログ ライブラリ
- redis:kv キャッシュ
さらに、このプロジェクトには詳細な中国語ドキュメントとサポート教育ビデオも含まれており、学習する価値があります。
6. 実践的なツール
エディターがますます強力になるにつれて、いくつかの小さくて美しい Web サイトの機能がエディターに置き換えられましたが、それでも私はそれらの Web サイトが好きになるわけではないので、以下の皆さんにお勧めします。
6.1、JSON to Go構造体
Web サイトのリンク: JSON-to-Go: JSON を Go に瞬時に変換します
6.2、YAML to Go構造体
网站链接: YAML-to-Go: YAML を Go に瞬時に変換
6.3、Table to Go構造体
ウェブサイトリンク: https://github.com/gohouse/converter
使用方法は 2 つあり、コマンドラインから呼び出す方法と Go コードを記述する方法があります。
6.4、レゴ
ウェブサイトリンク: http://regoio.herokuapp.com/
Go言語の定期オンラインテスト。
6.5、プラントUML
ウェブサイトリンク: Dumels
このサイトは Go プロジェクトを分析し、インターフェイスと構造の UML 図を生成します。この図で、基本的にプロジェクト全体の関係性の基本的な概念を理解してから、ソース コードを読むと、比較的簡単になります。
6.6、遊び場
Web サイトのリンク: Go Playground - Go プログラミング言語
Go 言語コードはオンラインで実行されます。
7. 技術コミュニティ
現在、技術コミュニティに参加する人はますます少なくなり、それほど活発ではなくなりました。私の個人的な経験からも同様で、疑問があれば直接Googleで調べればよく、技術コミュニティに行って確認したり質問したりすることは基本的にはありません。
ここでは、私が非常に良いと思うものをいくつか紹介します。暇なときに閲覧してください。