初めに
どうやらサーバーサイドではGoを採用するケースが増えてきているようです。年収も比較的ほかの言語よりも高く将来性がある言語のため、チュートリアルを一通りやって何か作れるように基本的なスキルを身に着けようと思います。
今回実施するのは公式チュートリアルの一つである「Tutorial: Get started with Go」です。
筆者は事前にもう一つのチュートリアル「A Tour of Go」を一通り実施したうえで、今回のチュートリアルで学習を続けています。
筆者は所学者なので基本的にチュートリアルの翻訳と自身の認識を記録していくため、情報が間違っている可能性がありますので、ご承知おきください。
それでは早速始めていきましょう!
ダウンロードとインストール
まずは公式のダウンロードページからインストーラーをダウンロードします。
ダウンロードした MSI ファイルを開き、インストーラーに従って Go をインストールしましょう。デフォルトでは、インストール先にProgram Files
またはProgram Files (x86)
を指定しますが、 必要に応じて場所を変更することもできます。
インストールが完了したらコマンドプロンプトを起動し、go version
と入力してみましょう。Goのバージョンが出力されたらインストール成功です。
新しいモジュールの初期化
作業ディレクトリに移動したらhello
フォルダを作成して、コマンドプロンプトで作成されたフォルダのディレクトリに移動します。その後go mod init example/hello
を入力して実行します。
以下の内容が出力されたら成功です。
go: creating new go.mod: module example/hello
go: to add module requirements and sums:
go mod tidy
go mod init
コマンドとは
go mod init
コマンドは指定されたモジュール名をパラメータとして受け取り、その名称で新しいモジュールを生成します。その際にgo.mod
というファイルを生成し、モジュール名の依存関係などの情報が含まれることになります。先ほどのコマンドをを実行するとexample/hello
という名前の新しいモジュールが作成されます。
ほかの方がダウンロードして使用できるように公開する場合は、ダウンロードできるようにgithub.com/mymodule
の様のようなダウンロードできる場所を入力してください。
今回はチュートリアルを実行するだけなので、example/hello
という名称を指定しています。
まずはHello World!を出力する
hello
フォルダの中にhello.go
ファイルを作成して、以下のコードを追加しましょう。
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}
このコードは以下の要素を表しています。
main
パッケージを宣言fmt
パッケージをインポート- main関数
パッケージは同じディレクトリのファイルから構成され、関数をグループ化したものです。fmt
パッケージはコマンドプロンプト出力やテキストフォーマットなどが含まれている基本的なパッケージです。main
パッケージを実行すると自動でmain
関数が実行されます。
それでは実行してみましょう。コマンドプロンプトでgo run .
と入力してください。Hello, World!
と出力されたら成功です。
go runコマンドとは
Goはコンパイルが必要なコンパイル言語です。go run
(doc)コマンドはコンパイル+実行ができるコマンドとなります。
似たようなコマンドでgo build
(doc)というコマンドがありますが、こちらはコンパイルのみとなります。
外部パッケージの呼び出し
先ほどはfmt
パッケージをインポートしてPrintln
関数を使用しました。このように他の誰かが実装した関数をインポートすることで使用できるのです。
新しいパッケージをインポートする前に、まずは軽くパッケージについて調べてみましょう。以下の方法で公開されているパッケージについて調べることができます。
- pkg.go.devで
quote
パッケージを検索してみます。 rsc.io/quote
を見つけたらクリックして開きましょう。Functions
セクションには関数のリストがあり、パッケージの中身を確認できます。今回はGo
関数を使用してみましょう。
以下の様にパッケージをインポートして、Go
関数を使用するように変更してみましょう。
package main
import "fmt"
import "rsc.io/quote"
func main() {
fmt.Println(quote.Go())
}
新しくrsc.io/quote
パッケージをインポートしましたが、このままでは実行できません。コードを変更してもパッケージが手元にないからです。
モジュールの整備
go mod tidy
(doc)を実行してパッケージをダウンロードしましょう。このコマンドは不足モジュールの追加と未使用モジュールの削除を行ってくれます。その際、go.sumにエントリが不足していれば追加を不要であれば削除をしてくれます。
再度go run .
コマンドを実行して以下の内容が出力されているかを確認してみましょう。
Don't communicate by sharing memory, share memory by communicating.
まとめ
go mod init
でパッケージを初期化できるgo build
でコンパイル、go run
でコンパイル+実行ができるgo mod tidy
で依存関係を整理でき、不足しているものがあれば取得、不要であれば削除ができる- 以下の内容が基本構文
package xxx
が作成するパッケージ名を宣言import "xxx"
が外部パッケージのインポートfunc xxx() {}
が関数の構文main
パッケージは必ず一つは必要となるmain
パッケージの中でmain
関数があれば初めに呼ばれる- 行末に
;
(セミコロン)は不要