Go 言語入門基礎学習ノートの Go 言語紹介
紹介#
Go 言語、または Golang は、Google によって開発された静的強型、コンパイル型のオープンソースプログラミング言語です。2007 年に Robert Griesemer、Rob Pike、Ken Thompson によって設計され、2009 年に正式に公開されました。Go 言語の設計目標は、プログラミング効率を向上させ、マルチコアプロセッサの並行プログラミングの問題を解決し、コードの可読性と保守性を向上させることです。Go 言語はその高性能、高並行性、シンプルな構文により、現代のソフトウェア開発でますます人気を集めています。
利点#
- 非常にシンプルなデプロイ方法
- 直接機械語にコンパイル可能
- 他のライブラリに依存しない(実行ファイルが大きく、必要なライブラリをすべて静的にコンパイル)
- 直接実行するだけでデプロイ可能
- 静的型言語
- コンパイル時に隠れたほとんどの問題をチェック
- 言語レベルの並行性
- 生まれつき並行性をサポート
- マルチコアを十分に活用
- 強力な標準ライブラリ
- runtime システムスケジューリングメカニズム
- 効率的な GC ガベージコレクションメカニズム
- 豊富な標準ライブラリ:ネットワーク通信、数学、ファイルシステム、データ構造、アプリケーション構築、暗号化・復号化、テスト、Email、入出力、圧縮、同期ロックメカニズム、プロセススレッドなど
- 簡単に学べる
- 25 のキーワード
- C 言語のシンプルな遺伝子、C 構文のサポート
- オブジェクト指向の特徴(継承、多態性、カプセル化)
- クロスプラットフォーム
- 「大企業」リーダー
- Google、Facebook
- テンセント、バイドゥ、京東
- シャオミ、七牛、滴滴、アリババ、新浪、ビリビリ、字節
フィボナッチ数列アルゴリズムを使って Go の性能を簡単に見てみましょう:
- コンパイル性能:
Go > C > Node.js > PHP > C++ > Java > Python 3
- 実行性能:
C++ > C > Go > Java > Node.js > PHP > Python 3
強み#
- クラウドコンピューティングインフラ分野。代表プロジェクト:docker、kubernetes、etcd、consul、cloudflare CDN、七牛クラウドストレージなど。
- 基盤バックエンドソフトウェア。代表プロジェクト:tidb、influxdb、cockroachdb など。
- マイクロサービス。代表プロジェクト:go-kit、micro、monzo bank の typhon、bilibili など。
- インターネットインフラ。代表プロジェクト:イーサリアム、hyperledger など。
スター製品:Docker、Kubernetes
欠点#
- パッケージ管理、大部分のパッケージは GitHub にあります。
- すべての Exception は Error で処理されます(かなり議論の余地があり、Java とは完全に逆です)
- C のダウングレード処理はシームレスではなく、C から asm へのダウングレードほど完璧ではありません(シリアライズの問題、C に取って代わることはできません)
環境インストール#
All releases - The Go Programming Language
Windows ではgo1.23.2.windows-amd64.zipまたはgo1.23.2.windows-amd64.msiをダウンロードし、その中のbin
フォルダを環境変数に追加します:
システム変数に新しい変数GOROOT
を作成し、変数値を Go インストールディレクトリのパスに設定します。次に新しい変数GOPATH
を作成し、変数値を Go のすべてのプロジェクトのルートディレクトリのパスに設定します。最後に、システム変数の path に%GOROOT\bin%
を追加します。
Go プロジェクトディレクトリにbin pkg src
の 3 つのディレクトリを作成し、その中でsrc
はプロジェクトのルートフォルダ、bin
とpkg
はそれぞれインストールしたサードパーティの依存関係とプラグインを格納します。
ターミナルでgo version
を入力し、バージョン番号go version go1.23.2 windows/amd64
が返されれば、インストール成功です。
VsCode を開き、Go 言語公式プラグインをインストールし、ターミナルを開いて以下のコマンドを実行して Go 開発ツールキットをインストールします。
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
VsCode でコマンドパレットCtrl+Shift+p
を開き、Go install
と入力し、Install/Update Tools
を選択して、すべてのツールにチェックを入れてインストールします。ツールは上記で設定したGOPATH
環境変数のbin pkg
フォルダにインストールされます。
インストールが完了したら、新しいプロジェクトフォルダtest
を作成し、main.go
ファイルを作成します。この時、必ずこのフォルダ内でgo mod init test
を入力する必要があります。test
はプロジェクトフォルダの名前と同じでなければなりません。完了するとgo.mod
が生成され、コードを書くことができます。
以上のすべての操作を完了しても、vscode でコードを書くとエラーが出る場合は、VsCode で再度GOPATH
とGOROOT
のパスを設定する必要があります。
言語構造#
Go 言語の基本構成は以下の部分から成ります:
- パッケージ宣言
- パッケージのインポート
- 関数
- 変数
- 文と式
- コメント
package main
import "fmt"
func main() {
/* これは最初のGo言語プログラムです */
fmt.Println("Hello, World!")
}
package main
はパッケージ名を定義します。ソースファイルの非コメントの最初の行で、このファイルがどのパッケージに属するかを示す必要があります。例えば:package main。package main は独立して実行可能なプログラムを示し、すべての Go アプリケーションは main という名前のパッケージを含みます。現在のプログラムには main 関数があり、これは main パッケージです。 これは現在のプログラムファイル名とは関係ありません。
import "fmt"
は Go コンパイラにこのプログラムが fmt パッケージを使用する必要があることを伝えます。fmt パッケージはフォーマットされた IO(入力 / 出力)の関数を実装しています。複数のパッケージをインポートする場合、以下の 2 つの方法を使用できますが、2 番目の方法が推奨されます。
import "fmt"
import "time"
import (
"fmt"
"time"
)
//
と/* */
はそれぞれ単一行コメントと複数行コメントで、C 言語と一致します。
func main()
はプログラムの実行が始まる関数です。main 関数はすべての実行可能プログラムに必ず含まれ、一般的には起動後に最初に実行される関数です(init()
関数がある場合は、その関数が最初に実行されます)。各パッケージには 1 つの main 関数しか存在できず、複数の main 関数の宣言はできません。
注意が必要なのは、Go 言語では関数の後の{
は関数名と同じ行に置かなければならず、そうでないとエラーになります。また、文の末尾の;
は付けても付けなくてもよく、付けないことが推奨されます。
func main(){
fmt.Println("hello Go!")
fmt.Println("hello Go!");
}
fmt.Println(...)
は文字列をコンソールに出力し、最後に自動的に改行\n
を追加します。fmt.Print(...)
も同様の効果があります。Print
とPrintln
の 2 つの関数は変数を使用することもサポートしており、例えばfmt.Println(arr)
のように、特に指定がなければ、デフォルトの印刷形式で変数 arr をコンソールに出力します。
識別子(定数、変数、型、関数名、構造体フィールドなど)が大文字で始まる場合、例えばGroup1
のように、その形式の識別子を使用するオブジェクトは外部パッケージのコードから使用可能です(クライアントプログラムはこのパッケージを先にインポートする必要があります)。これをエクスポートと呼びます(オブジェクト指向言語のpublicに似ています);
識別子が小文字で始まる場合、パッケージ外からは見えませんが、パッケージ内では可視であり使用可能です(オブジェクト指向言語のprotectedに似ています)。
Go 言語の実行には 2 つの方法があります:
go run hello.go
プログラムを直接コンパイルして実行go build hello.go
バイナリファイルにコンパイルした後、./hello.go
でバイナリファイルを実行
参考コース:8 時間で Golang エンジニアに転職