🚲

Goをそれなりに理解しながら動かしてみる -環境構築-

2022/12/06に公開約3,400字

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って何?

以下の記事が非常に大変わかりやすい。

https://qiita.com/chano2/items/ea76cc503e651f07bfb0

これからは、 Goのプロジェクトを作るときは、GOPATHの中に作るべし

Goのプロジェクトを作成

  • GOPATH内にいい感じのディレクトリを作成する。
  • Tutorial: Get started with Goの記載通りにやればできる
  • 筆者のディレクトリ構造は以下。
    他のGoプロジェクトも作るだろうとのことで、go-tutorialディレクトリの配下にhelloディレクトリを作った。
Users
    ∟ [ユーザー名]
        ∟ go
            ∟ hello

【疑問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.

https://go.dev/ref/mod#modules-overview

  • モジュールってやつを一括管理するファイル
  • ルートディレクトリに置いてね
  • 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".

https://go.dev/ref/mod#glos-module-path

  • 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

ログインするとコメントできます