Introduction to Extreme Go Language (Super Full and Super Detailed) - Basic
記事の目次
Golang の概要
Go 言語の 3 つの強み
Google が Golang を作った理由
Golang の発展
2007 年、Google のエンジニアである Rob Pike、Ken Thompson、Robert Griesemer が新しい言語の設計に着手しました。これが Go 言語の原型です。
2009 年 11 月 10 日、Google は Go 言語をオープンソースとして公開しました。
2015 年 8 月 19 日、Go 1.5 がリリースされ、このアップデートで「最後に残っていた C 言語コード」が排除されました。
2017 年 2 月 17 日、Go 1.8 がリリースされました。
2017 年 8 月 24 日、Go 1.9 がリリースされました。1.9.2 バージョン
2018 年 2 月 16 日、Go 1.10 がリリースされました。
Golang の言語的特徴
Go 言語は静的コンパイル言語の安全性と性能を確保しつつ、動的言語の開発効率も実現しています。Go 言語を表す式として「Go = C + Python」があり、C の静的言語プログラムに匹敵する実行速度と、Python の動的言語に匹敵する開発効率を兼ね備えていることを示しています。
C 言語から多くの設計思想を受け継いでいます。式の構文、制御構造、基本データ型、呼び出しパラメーターの値渡し、ポインターなどです。
また、C 言語と同様のコンパイル・実行方式を維持し、ポインターの機能を制限しています。
使用例:
//Go 言語におけるポインターの使用特徴
func testPtr(num *int) {
*num = 20
}
2. パッケージの概念を導入してプログラム構造を整理します。Go 言語のファイルは必ずパッケージに属し、独立して存在することはできません。
Package main//ファイルはパッケージに属する
import "fmt"
func main() {
fmt.Println("hello word")
}
ガーベッジコレクション機構によりメモリを自動回収し、開発者が管理する必要がありません。
ネイティブな同時実行(重要な特徴)
言語レベルで同時実行をサポートし、容易に実装できます。
軽量スレッドであるゴルーチンにより、大規模な並行処理を実現し、複数コアを効率的に活用できます。
CSP 同時実行モデル(Communicating Sequential Processes)に基づいて実装されています。
パイプライン通信機構を取り入れ、Go 言語固有のチャンネルを形成しました。
チャンネルを通じて、異なるゴルーチン間の相互通信を実現できます。
関数は複数の値を返すことができます。例:
//和と差を同時に返す関数
//Go の関数は複数の戻り値をサポート
func getSumAndSub(n1 int, n2 int) (int, int ) {
Sum:=n1+n2//Go の文の後にセミコロンは不要
sub := n1 - n2
return sum , sub
}
新しい革新:スライス、遅延実行など。
Go 言語の開発ツール
GoLand 開発ツールを使用しています。非常に使いやすいです。
GoLand は JetBrains が提供する Go 言語向け統合開発環境です。IntelliJ プラットフォームをベースに開発され、JetBrains のプラグインシステムに対応しています。
ダウンロード先:https://www.jetbrains.com/go/download/other.html
お好みのバージョンを選択し、対応するシステム用のものをダウンロードしてください。最新バージョンは推奨しません。2021.3.5 バージョンが安定して使用できます。
アカウントをお持ちの場合、Taobao で教育ライセンスを購入でき、登録後 1 年間使用できます。
または、プラグインを使用して 30 日間利用することも可能です(注意:2021 年以前のバージョンでのみ使用可能で、最新バージョンには対応していません)。関連ドキュメント:https://blog.csdn.net/qq_37699336/article/details/116528062
Go 開発環境の設定(SDK のダウンロードと設定)
SDK ダウンロード先:Golang China https://www.golangtc.com/download
SDK 設定に関する参考ドキュメント:https://blog.csdn.net/m0_49589654/article/details/127259754
開発ツールを使用して最初の Go プロジェクトを作成
プロジェクトを作成し、SDK のパスを選択します。
プロジェクトフォルダーを右クリックして Go ファイルを作成します。
次に hello world プログラムを作成します。
Package main//ファイルはパッケージに属する
import "fmt"
func main() {
fmt.Println("hello word")
}
関数
Go プログラム開発の注意点
Go のソースファイルの拡張子は「.go」です。
Go アプリケーションの実行エントリーポイントは `main()` 関数です。これは他のプログラミング言語(Java や C など)と同様です。
Go 言語は大文字と小文字を厳密に区別します。
Go のメソッドは文で構成され、各文の後にセミコロンは不要です(Go 言語が自動的に各行の後にセミコロンを追加します)。これも Golang の簡潔さを表しています。
Go コンパイラは 1 行ずつコンパイルするため、1 行に 1 つの文を記述します。同じ行に複数の文を書くことはできません。
書くとエラーになります。
Go 言語で定義した変数やインポートしたパッケージが使用されていない場合、コードをコンパイルできません。
括弧は必ず対になっており、省略できません。
公式リファレンスドキュメント
Golang 公式ウェブサイト(アクセスできない場合があります):https://golang.org
Golang 中文サイトのオンライン標準ライブラリドキュメント:https://studygolang.com/pkgdoc
Go の学習
Go の変数
概念:変数は、メモリ内のデータ格納領域を表すものです。変数を部屋の番号のように考えることができます。番号を使って部屋を見つけるのと同様に、変数名を使って変数の値にアクセスできます。
変数の使用手順:変数を宣言する(定義するとも言う)→ 変数に値を代入する → 変数を使用する
整数データ型
符号付きと符号なしの 2 種類に分かれます。
符号付き:int、int8、int16、int32、int64
符号なし:uint、uint8、uint16、uint32、uint64、byte
異なるビット数の整数型の違いは、格納できる整数値の範囲の大きさにあります。
符号付き型は任意の整数を格納でき、符号なし型は自然数のみを格納できます。
int と uint のサイズはシステムに依存します。32 ビットシステムでは int32 と uint32、64 ビットシステムでは int64 と uint64 になります。
byte は uint8 と同等で、通常 1 文字の格納に使用されます。
プログラムの正しい動作を確保した上で、できるだけ小さなデータ型を使用してください。
`fmt.Printf("%T", var_name)` で変数の型を出力します。
`unsafe.Sizeof(var_name)` で変数が占めるバイト数を確認します。
浮動小数点型
浮動小数点型は小数型とも呼ばれ、小数値を格納できます。たとえば 6.6、-12.34 などです。
1. マシン内での浮動小数点の格納形式の概要。浮動小数点数 = 符号ビット + 指数ビット + 仮数ビット
2. 仮数部の精度が失われる可能性があり、精度損失が発生します - 123.0000901
3. 浮動小数点の格納は符号ビット + 指数ビット + 仮数ビットの 3 部分に分かれます。格納時に精度が失われることがあります。
4. Golang の浮動小数点型のデフォルトは float64 です。
5. 通常は float64 を使用すべきです。float32 よりも精度が高いためです。
6. `0.123` は `.123` と略記できます。また、`5.1234e2`(= 512.34)のような指数表記もサポートしています。
文字
Golang には専用の文字型はありません。1 文字(英字)を格納する場合は、通常 byte を使用して保存します。
文字列は固定長の文字シーケンスです。Go の文字列はバイト単位で連結され、従来の文字列が文字で構成されるのに対し、Go の文字列はバイトで構成されます。
文字はシングルクォートでのみ囲むことができ、ダブルクォートは使用できません。ダブルクォートは文字列を囲むために使用します。
文字型の値を直接出力すると、対応する文字の ASCII コード値が出力されます。
対応する文字を出力する場合は、フォーマット出力を使用する必要があります。
Go 言語の文字は UTF-8 でエンコードされており、英文は 1 バイト、中文は 3 バイトを占めます。
Go 言語では、文字は本質的に整数です。直接出力すると、その文字に対応する UTF-8 エンコードのコード値が出力されます。
数値を直接変数に代入し、`%c` で出力することで、その数値に対応する Unicode 文字を出力できます。
文字型の演算が可能です。これは文字が整数として扱われるためで、それぞれ対応する Unicode コード値を持っています。
文字型の性質に関する考察
文字型がコンピュータに格納されるとき、文字に対応するコード値(整数)を介してバイナリに変換されて格納されます:文字 → コード値 → バイナリ → 格納。読み取り時は:バイナリ → コード値 → 文字 → 読み取り。
文字とコード値の対応関係は文字コード表によって定義されています(規格で規定)。
Go 言語のエンコーディングは UTF-8 に統一されており、非常に便利で整合性が取れています。エンコーディングに関する混乱は生じません。
ブール型
ブール型は bool 型とも呼ばれます。bool 型のデータは true または false のみです。
bool 型は 1 バイトを占有します。
bool 型は論理演算に適しており、主にフロー制御に使用されます。
文字列
文字列は固定長のバイトシーケンスです。Go の文字列はバイト単位で連結され、UTF-8 エンコーディングを使用して Unicode テキストを識別します。
1. 文字列は一度代入されると変更できません。Go では文字列はイミュータブルです。
2. 文字列の 2 つの識別形式
ポインター
基本データ型。変数は値そのものを格納し、値型とも呼ばれます。
変数のアドレスを取得するには `&` を使用します。たとえば `var num int` の場合、num のアドレスは `&num` です。
ポインター型。ポインター変数はアドレスを格納し、そのアドレスが指す先に値が格納されています。たとえば `var ptr *int = &num` です。
ポインター型が指す値を取得するには `*` を使用します。たとえば `var ptr *int` の場合、`*ptr` でポインターが指す値を取得できます。
ポインターの詳細:
値型には対応するポインター型があります。たとえば int のポインター型は `*int`、float64 のポインター型は `*float64` です。
値型には以下が含まれます:基本データ型、配列、構造体
値型と参照型
値型と参照型の特徴:
値型:変数に直接値を格納し、メモリは通常スタックに割り当てられます。
参照型:変数にアドレスを格納し、そのアドレスが指す先の領域に実際のデータが格納されます。メモリは通常ヒープに割り当てられます。どの変数からも参照されなくなったデータは、ガーベッジコレクションによって回収されます。
Golang における値型と参照型の区別
値型:基本データ型(int 系、float 系、bool、string)、配列、構造体
参照型:ポインター、スライス、マップ、チャネル、インターフェイスなど
識別子
概念
Golang で変数、メソッド、関数などに名前を付けるために使用される文字シーケンスを識別子と呼びます。名前を付けられる場所はすべて識別子と呼ばれます。
識別子の命名規則
26 文字の英字、0 〜 9、アンダースコアで構成されます。
数字から始めることはできません。`var num int` //有効 `var 3num int` //エラー
Golang は大文字と小文字を厳密に区別します。
Golang では `num` と `Num` は異なる変数です(`var num int`
、`var Num int`)
識別子に空白を含めることはできません。
アンダースコア `_` は Go における特殊な識別子で、ブランク識別子と呼ばれます。任意の識別子を表すことができますが、
対応する値は無視されます(たとえば戻り値を無視する場合など)。したがって、プレースホルダーとしてのみ使用でき、識別子としては使用できません。
システムの予約語を識別子として使用することはできません(全 25 個)。たとえば `break`、`if` などです。
詳細
リレーショナル演算子の結果は bool 型で、true または false のいずれかです。
リレーショナル演算子で構成された式をリレーショナル式と呼びます:`a > b`
比較演算子 `==` を代入演算子 `=` と混同しないでください。
論理演算子
複数の条件(通常はリレーショナル式)を接続するために使用され、最終結果も bool 値です。
1) `&&` はショートサーキット AND とも呼ばれます。最初の条件が false の場合、2 つ目の条件は評価されず、最終結果は **false** になります。
2) `||` はショートサーキット OR とも呼ばれます。最初の条件が true の場合、2 つ目の条件は評価されず、最終結果は true になります。
Golang の概要
Go 言語の 3 つの強み
Google が Golang を作った理由
Golang の発展
2007 年、Google のエンジニアである Rob Pike、Ken Thompson、Robert Griesemer が新しい言語の設計に着手しました。これが Go 言語の原型です。
2009 年 11 月 10 日、Google は Go 言語をオープンソースとして公開しました。
2015 年 8 月 19 日、Go 1.5 がリリースされ、このアップデートで「最後に残っていた C 言語コード」が排除されました。
2017 年 2 月 17 日、Go 1.8 がリリースされました。
2017 年 8 月 24 日、Go 1.9 がリリースされました。1.9.2 バージョン
2018 年 2 月 16 日、Go 1.10 がリリースされました。
Golang の言語的特徴
Go 言語は静的コンパイル言語の安全性と性能を確保しつつ、動的言語の開発効率も実現しています。Go 言語を表す式として「Go = C + Python」があり、C の静的言語プログラムに匹敵する実行速度と、Python の動的言語に匹敵する開発効率を兼ね備えていることを示しています。
C 言語から多くの設計思想を受け継いでいます。式の構文、制御構造、基本データ型、呼び出しパラメーターの値渡し、ポインターなどです。
また、C 言語と同様のコンパイル・実行方式を維持し、ポインターの機能を制限しています。
使用例:
//Go 言語におけるポインターの使用特徴
func testPtr(num *int) {
*num = 20
}
2. パッケージの概念を導入してプログラム構造を整理します。Go 言語のファイルは必ずパッケージに属し、独立して存在することはできません。
Package main//ファイルはパッケージに属する
import "fmt"
func main() {
fmt.Println("hello word")
}
ガーベッジコレクション機構によりメモリを自動回収し、開発者が管理する必要がありません。
ネイティブな同時実行(重要な特徴)
言語レベルで同時実行をサポートし、容易に実装できます。
軽量スレッドであるゴルーチンにより、大規模な並行処理を実現し、複数コアを効率的に活用できます。
CSP 同時実行モデル(Communicating Sequential Processes)に基づいて実装されています。
パイプライン通信機構を取り入れ、Go 言語固有のチャンネルを形成しました。
チャンネルを通じて、異なるゴルーチン間の相互通信を実現できます。
関数は複数の値を返すことができます。例:
//和と差を同時に返す関数
//Go の関数は複数の戻り値をサポート
func getSumAndSub(n1 int, n2 int) (int, int ) {
Sum:=n1+n2//Go の文の後にセミコロンは不要
sub := n1 - n2
return sum , sub
}
新しい革新:スライス、遅延実行など。
Go 言語の開発ツール
GoLand 開発ツールを使用しています。非常に使いやすいです。
GoLand は JetBrains が提供する Go 言語向け統合開発環境です。IntelliJ プラットフォームをベースに開発され、JetBrains のプラグインシステムに対応しています。
ダウンロード先:https://www.jetbrains.com/go/download/other.html
お好みのバージョンを選択し、対応するシステム用のものをダウンロードしてください。最新バージョンは推奨しません。2021.3.5 バージョンが安定して使用できます。
アカウントをお持ちの場合、Taobao で教育ライセンスを購入でき、登録後 1 年間使用できます。
または、プラグインを使用して 30 日間利用することも可能です(注意:2021 年以前のバージョンでのみ使用可能で、最新バージョンには対応していません)。関連ドキュメント:https://blog.csdn.net/qq_37699336/article/details/116528062
Go 開発環境の設定(SDK のダウンロードと設定)
SDK ダウンロード先:Golang China https://www.golangtc.com/download
SDK 設定に関する参考ドキュメント:https://blog.csdn.net/m0_49589654/article/details/127259754
開発ツールを使用して最初の Go プロジェクトを作成
プロジェクトを作成し、SDK のパスを選択します。
プロジェクトフォルダーを右クリックして Go ファイルを作成します。
次に hello world プログラムを作成します。
Package main//ファイルはパッケージに属する
import "fmt"
func main() {
fmt.Println("hello word")
}
関数
Go プログラム開発の注意点
Go のソースファイルの拡張子は「.go」です。
Go アプリケーションの実行エントリーポイントは `main()` 関数です。これは他のプログラミング言語(Java や C など)と同様です。
Go 言語は大文字と小文字を厳密に区別します。
Go のメソッドは文で構成され、各文の後にセミコロンは不要です(Go 言語が自動的に各行の後にセミコロンを追加します)。これも Golang の簡潔さを表しています。
Go コンパイラは 1 行ずつコンパイルするため、1 行に 1 つの文を記述します。同じ行に複数の文を書くことはできません。
書くとエラーになります。
Go 言語で定義した変数やインポートしたパッケージが使用されていない場合、コードをコンパイルできません。
括弧は必ず対になっており、省略できません。
公式リファレンスドキュメント
Golang 公式ウェブサイト(アクセスできない場合があります):https://golang.org
Golang 中文サイトのオンライン標準ライブラリドキュメント:https://studygolang.com/pkgdoc
Go の学習
Go の変数
概念:変数は、メモリ内のデータ格納領域を表すものです。変数を部屋の番号のように考えることができます。番号を使って部屋を見つけるのと同様に、変数名を使って変数の値にアクセスできます。
変数の使用手順:変数を宣言する(定義するとも言う)→ 変数に値を代入する → 変数を使用する
整数データ型
符号付きと符号なしの 2 種類に分かれます。
符号付き:int、int8、int16、int32、int64
符号なし:uint、uint8、uint16、uint32、uint64、byte
異なるビット数の整数型の違いは、格納できる整数値の範囲の大きさにあります。
符号付き型は任意の整数を格納でき、符号なし型は自然数のみを格納できます。
int と uint のサイズはシステムに依存します。32 ビットシステムでは int32 と uint32、64 ビットシステムでは int64 と uint64 になります。
byte は uint8 と同等で、通常 1 文字の格納に使用されます。
プログラムの正しい動作を確保した上で、できるだけ小さなデータ型を使用してください。
`fmt.Printf("%T", var_name)` で変数の型を出力します。
`unsafe.Sizeof(var_name)` で変数が占めるバイト数を確認します。
浮動小数点型
浮動小数点型は小数型とも呼ばれ、小数値を格納できます。たとえば 6.6、-12.34 などです。
1. マシン内での浮動小数点の格納形式の概要。浮動小数点数 = 符号ビット + 指数ビット + 仮数ビット
2. 仮数部の精度が失われる可能性があり、精度損失が発生します - 123.0000901
3. 浮動小数点の格納は符号ビット + 指数ビット + 仮数ビットの 3 部分に分かれます。格納時に精度が失われることがあります。
4. Golang の浮動小数点型のデフォルトは float64 です。
5. 通常は float64 を使用すべきです。float32 よりも精度が高いためです。
6. `0.123` は `.123` と略記できます。また、`5.1234e2`(= 512.34)のような指数表記もサポートしています。
文字
Golang には専用の文字型はありません。1 文字(英字)を格納する場合は、通常 byte を使用して保存します。
文字列は固定長の文字シーケンスです。Go の文字列はバイト単位で連結され、従来の文字列が文字で構成されるのに対し、Go の文字列はバイトで構成されます。
文字はシングルクォートでのみ囲むことができ、ダブルクォートは使用できません。ダブルクォートは文字列を囲むために使用します。
文字型の値を直接出力すると、対応する文字の ASCII コード値が出力されます。
対応する文字を出力する場合は、フォーマット出力を使用する必要があります。
Go 言語の文字は UTF-8 でエンコードされており、英文は 1 バイト、中文は 3 バイトを占めます。
Go 言語では、文字は本質的に整数です。直接出力すると、その文字に対応する UTF-8 エンコードのコード値が出力されます。
数値を直接変数に代入し、`%c` で出力することで、その数値に対応する Unicode 文字を出力できます。
文字型の演算が可能です。これは文字が整数として扱われるためで、それぞれ対応する Unicode コード値を持っています。
文字型の性質に関する考察
文字型がコンピュータに格納されるとき、文字に対応するコード値(整数)を介してバイナリに変換されて格納されます:文字 → コード値 → バイナリ → 格納。読み取り時は:バイナリ → コード値 → 文字 → 読み取り。
文字とコード値の対応関係は文字コード表によって定義されています(規格で規定)。
Go 言語のエンコーディングは UTF-8 に統一されており、非常に便利で整合性が取れています。エンコーディングに関する混乱は生じません。
ブール型
ブール型は bool 型とも呼ばれます。bool 型のデータは true または false のみです。
bool 型は 1 バイトを占有します。
bool 型は論理演算に適しており、主にフロー制御に使用されます。
文字列
文字列は固定長のバイトシーケンスです。Go の文字列はバイト単位で連結され、UTF-8 エンコーディングを使用して Unicode テキストを識別します。
1. 文字列は一度代入されると変更できません。Go では文字列はイミュータブルです。
2. 文字列の 2 つの識別形式
ポインター
基本データ型。変数は値そのものを格納し、値型とも呼ばれます。
変数のアドレスを取得するには `&` を使用します。たとえば `var num int` の場合、num のアドレスは `&num` です。
ポインター型。ポインター変数はアドレスを格納し、そのアドレスが指す先に値が格納されています。たとえば `var ptr *int = &num` です。
ポインター型が指す値を取得するには `*` を使用します。たとえば `var ptr *int` の場合、`*ptr` でポインターが指す値を取得できます。
ポインターの詳細:
値型には対応するポインター型があります。たとえば int のポインター型は `*int`、float64 のポインター型は `*float64` です。
値型には以下が含まれます:基本データ型、配列、構造体
値型と参照型
値型と参照型の特徴:
値型:変数に直接値を格納し、メモリは通常スタックに割り当てられます。
参照型:変数にアドレスを格納し、そのアドレスが指す先の領域に実際のデータが格納されます。メモリは通常ヒープに割り当てられます。どの変数からも参照されなくなったデータは、ガーベッジコレクションによって回収されます。
Golang における値型と参照型の区別
値型:基本データ型(int 系、float 系、bool、string)、配列、構造体
参照型:ポインター、スライス、マップ、チャネル、インターフェイスなど
識別子
概念
Golang で変数、メソッド、関数などに名前を付けるために使用される文字シーケンスを識別子と呼びます。名前を付けられる場所はすべて識別子と呼ばれます。
識別子の命名規則
26 文字の英字、0 〜 9、アンダースコアで構成されます。
数字から始めることはできません。`var num int` //有効 `var 3num int` //エラー
Golang は大文字と小文字を厳密に区別します。
Golang では `num` と `Num` は異なる変数です(`var num int`
、`var Num int`)
識別子に空白を含めることはできません。
アンダースコア `_` は Go における特殊な識別子で、ブランク識別子と呼ばれます。任意の識別子を表すことができますが、
対応する値は無視されます(たとえば戻り値を無視する場合など)。したがって、プレースホルダーとしてのみ使用でき、識別子としては使用できません。
システムの予約語を識別子として使用することはできません(全 25 個)。たとえば `break`、`if` などです。
詳細
リレーショナル演算子の結果は bool 型で、true または false のいずれかです。
リレーショナル演算子で構成された式をリレーショナル式と呼びます:`a > b`
比較演算子 `==` を代入演算子 `=` と混同しないでください。
論理演算子
複数の条件(通常はリレーショナル式)を接続するために使用され、最終結果も bool 値です。
1) `&&` はショートサーキット AND とも呼ばれます。最初の条件が false の場合、2 つ目の条件は評価されず、最終結果は **false** になります。
2) `||` はショートサーキット OR とも呼ばれます。最初の条件が true の場合、2 つ目の条件は評価されず、最終結果は true になります。
Related Articles
-
A detailed explanation of Hadoop core architecture HDFS
Knowledge Base Team
-
What Does IOT Mean
Knowledge Base Team
-
6 Optional Technologies for Data Storage
Knowledge Base Team
-
What Is Blockchain Technology
Knowledge Base Team
Explore More Special Offers
-
Short Message Service(SMS) & Mail Service
50,000 email package starts as low as USD 1.99, 120 short messages start at only USD 1.00
