初めに
どうやらサーバーサイドでは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関数があれば初めに呼ばれる- 行末に
;(セミコロン)は不要

