Goをそれなりに理解しながら動かしてみる -環境構築-
Tutorial: Get started with Goをやってみました。
個人的に「うーん、どゆこと???」ってなった箇所を、チュートリアルの流れに差し込んでいます。
誰かの助けになれば幸いです。
疑問リスト
- GOPATHって何?
- go.modって何?
- モジュールって何?
動作環境
- OS:macOS Ventura 13.0.1
- プロセッサ:2 GHz クアッドコアIntel Core i5
- IDE:Visual Studio Code
- Go 1.19.3
References
以下のサイトを参考にした。
※他にも思い出したら追記する。
Go SDKのインストール
-
公式のインストーラでインストールする。
Macの場合、プロセッサがIntelなのかApple Siliconなのかによって、ダウンロードするインストーラが異なるので注意。Homebrewを使う方法もありますが、筆者のPCではなんかうまくいきませんでした。
(いつか原因と解決策を書くかも) -
インストーラを開いてインストールする。
画面のデフォルト設定でOK。ターミナルを開いて、Goのバージョン確認コマンドが実行できることを確認できたらOK。
$ go version
go version go1.19.3 darwin/amd64
Visual Studio Codeのインストール
公式のインストーラをダウンロードしてインストールする。
特に詰まらないはず。
GOPATHの確認
以下のコマンドを実行して、環境変数GOPATH
の設定を確認する。
$ go env GOPATH
/Users/[ユーザー名]/go
ただ、おそらくこのディレクトリは実際に存在しないので、手動で作るべし。
【疑問1】GOPATHって何?
以下の記事が非常に大変わかりやすい。
これからは、 Goのプロジェクトを作るときは、GOPATH
の中に作るべし
Goのプロジェクトを作成
-
GOPATH
内にいい感じのディレクトリを作成する。 - Tutorial: Get started with Goの記載通りにやればできる。
- 筆者のディレクトリ構造は以下。
他のGoプロジェクトも作るだろうとのことで、go-tutorialディレクトリの配下にhelloディレクトリを作った。
Users
∟ [ユーザー名]
∟ go
∟ hello
- Tutorial: Get started with Goに沿って、go.modとmain.goを作成する。
【疑問2】go.modって何?
$ go mod init example/hello
go: creating new go.mod: module example/hello
Tutorial: Get started with Goにある↑のgo.mod作成(初期化)コマンドって結局何してるの?go.modって何なの?と思ったので、調査。
A module is identified by a module path, which is declared in a go.mod file, together with information about the module’s dependencies. The module root directory is the directory that contains the go.mod file. The main module is the module containing the directory where the go command is invoked.
- モジュールってやつを一括管理するファイル
- ルートディレクトリに置いてね
- mainモジュールは...(よくわからんけど、完全に理解した。)
とりあえず、
Goプロジェクトを作るときは、最初にルートディレクトリ(ここではhelloディレクトリ)で
go mod init [モジュール名] を実行してgo.modファイルをつくらないといけない
と理解しておく。
【疑問3】モジュールって何?
モジュールってのがいまいち理解できてない感覚。
go.mod作成コマンドの"example/hello"が気になる。"example"ってどっからきた?。
調査。
module path: A path that identifies a module and acts as a prefix for package import paths within the module. For example, "golang.org/x/net".
- packageってやつをimportする時のprefixとして使うらしい。
- つまり、packageの上位階層にmoduleという概念、という位置付け。
- packageで定義したfunctionとかstructとかを他のmoduleで使うには、packageをimportすればよさそう。
したがって、疑問3のざっくり回答は、
-
moduleとはpackageをまとめたもの (packageはfunctionとか諸々をまとめたもの)
-
モジュールには好きな名前を定義していい
(多分ここの命名規則にはある程度のセンスが問われるやーつ、公開されてるmoduleを研究してみた方がいいかも)
と理解しておくことにする。
Goのプログラムを実行
Users
∟ [ユーザー名]
∟ go
∟ hello
∟ hello.go
∟ go.mod
Tutorial: Get started with Goに話を戻す。
作成したhelloプロジェクトを実行してみる。
$ go run .
Hello, World!
動いたのでOK.
以降のチュートリアルもそのうち執筆します。
シリーズ風に。
※執筆初心者につき、内容に不備・補足があればコメントください。
Discussion