🔰

Go 言語を公式チュートリアルで始めてみる 1 (Tutorial: Get started with Go)

2022/10/08に公開

記事概要

Go入門者が公式チュートリアルのTutorial: Get started with Goを実施した時の手順と
調べたことを備忘録として残したものです。

チュートリアルの範囲はGoの導入、Hello Worldと外部パッケージを使うところまでです。

リポジトリはこちら
https://github.com/harusame0616/go-lang-official-tutorial


Goの導入

各環境向けにパッケージが用意されています。
環境に併せてインストールしてください。

https://go.dev/doc/install

私はdockerで環境を作ってvscodeのリモートコンテナ機能で
コンテナにアタッチして作業しました。

docker-compose.yml

version: '3.7'

services:
  go:
    image: golang:1.19.2-bullseye
    volumes:
      - ./:/projects/
    working_dir: /projects/go
    tty: true # コンテナが終了しないように

何はともあれ Hello World

まずはhello world用のディレクトリを作って移動します。

mkdir hello && cd hello

最初にモジュールの初期化を行います。

go mod init example/hello

ヘルプ(go help mod init)によると、カレントディレクトリに依存関係などを記載するgo.modファイルを作成し、
カレントディレクトリをルートとする新しいモジュールを作ることを意味するようです。

example/hello の部分はモジュールパスと呼ばれていて、一般的に以下の形をとるようです。

<prefix>/<descriptive-text>

<prefix> にはモジュールの起源を表す文字列(作者名、会社名、ドメインなど)を指定して、
descriptive-text にはプロジェクトの説明を指定するとのこと。

ただし、モジュール公開する場合は <prefix> にリポジトリを指定することが必須。

詳細はこちら

https://go.dev/doc/modules/managing-dependencies#naming_module

hello.goを作成

package main

import "fmt"

func main() {
	fmt.Println("Hello, World!")
}

hello.goを実行

> go run .
Hello, World!

無事表示されました。

go run コマンドでは main パッケージのmain関数がデフォルトで実行されるようです。


外部パッケージの探し方

Goパッケージの検索サイトにアクセス。

https://pkg.go.dev

テキストボックスに quote を入力して検索。

検索結果から quote (rsc.io/quote/v4) を探して、
Other major versions から v1 をクリックする。

過去のバージョンや機能一覧などがみられる。


外部パッケージを使ってみる

hello.go に rsc.io/quote のインポートの追加と、
quote のGo関数の呼び出しを追加する。

package main

import "fmt"
import "rsc.io/quote"

func main() {
	fmt.Println(quote.Go())
}

依存関係の更新する。

go mod tidy

なお tidy は ティディ じゃなくて タイディ とのこと。
英語「tidy」の意味・読み方・表現 | Weblio英和辞書

ヘルプ(go help mod tidy)によるとimport対象のモジュールの過不足があればダウンロードや削除を行い、
go.mod/go.sumも併せて更新してくれる模様。

npmみたいに一々明示的にパッケージを指定してインストールしたりアンインストールしなくていいのは便利!


一旦ここまでで Tutorial: Get started with Go は終わりとなります。
諸先輩方におかれましては間違っているところや補足などありましたらコメントお願いします。

続きの Tutorial: Create a module を実施した記事はこちらです。
Go 言語を公式チュートリアルで始めてみる 2 (Tutorial: Create a module)

GitHubで編集を提案

Discussion