Goセットアップと基本構文(Basic Syntax) - Golang learning step 1-1
- 公開日
- 更新日
- カテゴリ:LearnTheBasics
- タグ:Golang,roadmap.sh,学習メモ
roadmap.sh > Go > Learn the Basics > Basic Syntax の学習を進めていきます。
※ 学習メモとしての記録ですが、反復学習の際の道しるべとなるよう、ですます調で記載しています。
contents
開発環境
- チップ: Apple M2 Pro
- OS: macOS Sonoma
- go version: go1.23.2 darwin/arm64
Basic Syntax(基本構文)
Go の基本的な構文についてのセクション。Go プログラムの実行方法、パッケージのインポート、main関数など。
Go の開発環境を整え、Hello world していくなかで、最も基本の構文を抑えましょう。までが学習範囲です。
- [official] Go Tutorial: Getting started
- [article] Go by Example: Hello World
- [article] W3schools: Go Syntax
環境設定
Go インストール
公式リファレンスでは、Golang 公式サイトのダウンロードとインストールの手順に従いインストールするようにアナウンスがありますが、本記事では goenv を使ってインストールします。goenv を用いれば、Go のバージョン管理について、バージョンアップや他のバージョンを利用したい時に簡単に対応できます。
goenv インストール
brew install goenv
goenv バージョン確認
goenv -v
-> goenv 2.2.7
goenv の初期化スクリプトを追記します。~/.zshrc に以下を追記
export GOENV_ROOT="$HOME/.goenv"
export PATH="$GOENV_ROOT/bin:$PATH"
eval "$(goenv init -)"
追記を反映させるためにシェルを再読み込みします。
source ~/.zshrc
インストール可能なバージョンを表示します。
goenv install -l
バージョンを指定して最新バージョンをインストールします。
goenv install 1.23.2
インストール済み Go バージョンを確認します。
goenv versions
インストールしたバージョンを使用するように設定します。
goenv global 1.23.2
ここまで実施すると、go コマンドが使用できるようになっています。
go コマンドで Go のバージョンを確認します。
go version
-> go version go1.23.2 darwin/arm64
go コマンドのパスが通っているか確認すると、goenv 経由であることがわかります。
which go
-> /Users/your_username/.goenv/shims/go
これでインストールは完了です。
プロジェクトの作成
Go アプリケーションを作成する場所と、アプリケーションをセットアップします。
ディレクトリを作成
プロジェクトは、簡単に言えば IDE(エディター)で開いて編集するディレクトリです。アプリケーションのルートディレクトリ。ここに Go のファイルを設置し、実装していきます。
Go 1.11 以降、Go Modules を使用することでプロジェクトを $GOPATH に依存せず、任意のディレクトリで管理可能になりました。
任意の場所にディレクトリを作成します。(UI上からディレクトリを作成してもOK)
mkdir myproject
Go モジュールを初期化
作成したディレクトリへ入ります。以下 go コマンドを実行し、Go モジュールを初期化します。go.mod が作成されます。
go mod init github.com/yourusername/myproject
Go では、インポートパスがユニークである(かぶってはいけない)必要があります。ソースコードを Github 管理している場合は上記のようなパスをつけるのが慣習です。
ただし、サンプルでローカルに作るだけなら、重複しなければ良いので以下のようなパスでも可能です。
go mod init myproject
これで、Go プログラムを実行していく環境が作成できました。
Hello World
Hello World を出力するプログラムを実装しつつ、基本構文を確認していきます。
main.go を作成し、以下を記述。これが最も基本的な構文です。
package main
import "fmt"
func main() {
fmt.Println("Hello, Go!")
}
- package
- Go では、すべてのプログラムがパッケージの一部。先頭に package キーワードを使用して定義する。今回の場合、このプログラムは main パッケージに属するという定義になる。
- Goアプリケーションの最もトップのファイルは必ず package main である必要がある
- Go では、すべてのプログラムがパッケージの一部。先頭に package キーワードを使用して定義する。今回の場合、このプログラムは main パッケージに属するという定義になる。
- import
- パッケージをインポートすることができる。ここでは fmt パッケージをインポートしている。fmtパッケージは、入出力の書式設定と文字列操作を行うための標準ライブラリ。
- func main() {}
- 関数。中括弧 {} 内のコードがすべて実行される。
- fmt.Println()
- fmt パッケージから利用可能な関数 Println() を実行している。テキストを出力/表示するために使用される。"Hello World!" を出力する。
go run コマンドで main.go を実行すると、hello world が出力されます。
% go run main.go
-> hello world
プログラムをバイナリにビルドするときは、go build で行います。
go build main.go
ここでは main.go をビルドしたので、main というビルドされたバイナリが作成されます。これを直接実行もできます。
./main
-> hello world
hello world を出力するまでができました。
複数パッケージの読み込み
import でパッケージを読み込む際に、複数のパッケージを読み込む時は 2 通りの方法があります。
まず 1 つは、import キーワードを羅列して 1 つずつ import していく方法。
package main
import "fmt"
import "math"
import "strings"
2 つ目は、ブロックインポート(グループ化されたインポート宣言)を使う方法です。
package main
import (
"fmt"
"math"
"strings"
)
一般的には後者のグループ化されたインポート宣言が推奨されています。前者の場合、多数のパッケージをインポートする際に冗長になる点や、go fmt コマンド(コードフォマットを自動で行ってくれる)を実行すると前者で書いてあっても後者のブロックインポートになる点などが挙げられます。
基本構文まとめ
- Go 1.11 以降なら、プロジェクトを作成する場所はどこでも良い
- プロジェクトを作成したら、Go モジュールを初期化する
- package は必ず宣言する必要がある
- Goアプリケーションの最もトップのファイルは必ず package main である必要がある
- 使用するパッケージは import 文で宣言
- 複数読み込む場合は、グループ化されたインポート宣言を使用するのがが望ましい