PR

Go言語(Golang)でよく使われるパッケージまとめ

2. 基礎

こんにちは。Tomoyuki(@tomoyuki65)です。

Go言語(Golang)にはimportすることで使用できる標準パッケージが色々とありますが、その中でもよく使われるものもあります。

そこでこの記事では、Go言語(Golang)でよく使われるパッケージについてまとめます。

 

Go言語(Golang)でよく使われるパッケージまとめ

基本パッケージ

fmt

書式付きのI/O(入力/出力)を扱うための基本的なパッケージで、コンソール出力やフォーマット指定での文字列生成、そしてエラー情報のラップなど、デバッグからエラー処理まで幅広く利用されます。

 

・文字列「Hello World !!」を出力する例

package main

import (
    "fmt"
)

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

 

実行結果

Hello World !!

 

errors

エラー値を扱うための基本的な機能が利用できます。Goのバージョン1.13以降ではerrors.Isやerrors.Asを使ってエラーの比較や特定の型への変換などによって堅牢なエラーハンドリングが可能です。

 

・固定メッセージのエラーを生成し、ログ出力する例

package main

import (
    "errors"
    "fmt"
)

func main() {
    // エラー生成
    err := errors.New("固定メッセージのエラー")

    // ログ出力
    fmt.Println(err)
}

 

実行結果

固定メッセージのエラー

 

関連記事

Go言語(Golang)の基本的なエラーハンドリングについて
こんにちは。Tomoyuki(@tomoyuki65)です。実務ではシステムを運用していく必要がありますが、そういった場合は適切なエラーハンドリングをしながらプログラムを書く必要があります。この記事では、Go言語(Golang)の基本的なエ...

 

log/slog

Goのバージョン1.21で追加された標準ライブラリのロガーで、ログレベル(Info、Warn、Errorなど)を持ちながら構造化ログ(キーと値のペア)を簡単に出力できます。

 

・情報ログ、警告ログ、エラーログを出力する例

package main

import (
    "log/slog"
)

func main() {
    slog.Info("情報ログ", "attribute", "追加の補足")
    slog.Warn("警告ログ", "attribute", "追加の補足")
    slog.Error("エラーログ", "attribute", "追加の補足")
}

 

実行結果

2009/11/10 23:00:00 INFO 情報ログ attribute=追加の補足
2009/11/10 23:00:00 WARN 警告ログ attribute=追加の補足
2009/11/10 23:00:00 ERROR エラーログ attribute=追加の補足

 

関連記事

Go言語(Golang)のログ出力ではslogが使える!コンテキストの引き回しも忘れずに。
こんにちは。Tomoyuki(@tomoyuki65)です。Go言語(Golang)でログ出力をする際にはfmt.Printlnなどを使うことがありますが、Goのv1.21からは標準ライブラリとして"log/slog"が使えます。この記事で...
Go言語(Golang)のslogでソース情報も合わせて出力する方法
こんにちは。Tomoyuki(@tomoyuki65)です。以前にGo言語(Golang)のログ出力において「log/slog」が使えるのをご紹介しましたが、ログ出力時に合わせてソース情報も出力させることが可能です。この記事では、slogで...

 

strings

文字列の分割、結合、検索、置換など、文字列を操作するための便利な関数が利用できます。

 

・文字列を大文字変換してログ出力する例

package main

import (
    "fmt"
    "strings"
)

func main() {
    // 文字列の設定
    text := "hello"
    
    // 文字列を大文字変換してログ出力
    fmt.Println(strings.ToUpper(text))
}

 

実行結果

HELLO

 

関連記事

Go言語(Golang)の動的な文字列結合にはstrings.Builderを使う!
こんにちは。Tomoyuki(@tomoyuki65)です。Go言語(Golang)で文字列結合をする際はいくつか方法がありますが、動的な文字列結合をしたい場合は"strings.Builder"を使うのが最適です。この記事では、そんなst...

 

strconv

文字列型と数値型との相互変換をするために利用できます。特にAPIのレスポンス結果やファイルから読み取った文字列を数値変換する際に使用されます。

 

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // 文字列で数値を設定
    numStr := "123"

    // 文字列を数値変換してログ出力
    num, err := strconv.Atoi(numStr)
    if err != nil {
        fmt.Println("変換エラー:", err)
    } else {
        fmt.Println(num)
    }
}

 

実行結果

123

 

time

現在時刻の取得、時刻のフォーマット変換、時間計算、タイマー、スリープなど、時間に関するあらゆる操作に利用します。

 

・現在日時を日本時間でログ出力する例

package main

import (
    "fmt"
    "time"
)

func main() {
    // タイムゾーンを明示的に日本時間に設定
    loc, err := time.LoadLocation("Asia/Tokyo")
    if err != nil {
        fmt.Println("タイムゾーンの設定に失敗しました。")
    }

    // 現在日時をフォーマット変換してログ出力
    now := time.Now().In(loc)
    fmt.Println(now.Format("2006-01-02 15:04:05"))
}

 

実行結果(環境や実行タイミングによります)

2025-11-13 00:07:22

 

OS・ファイル操作

os

オペレーティングシステムの機能とやり取りするためのインターフェースを提供しています。

 

・環境変数の値を取得してログ出力する例

package main

import (
    "fmt"
    "os"
)

func main() {
    // 環境変数「PATH」の値を取得
    path := os.Getenv("PATH")

    // ログ出力
    fmt.Println("PATH:", path)
}

 

実行結果(結果は環境によります)

PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

 

io

I/O処理(データの読み書き)の基本的なインターフェースを提供しています。

 

・新規のテキストファイルを作成し、ファイルに文字列を書き込む例

package main

import (
    "fmt"
    "os"
    "io"
)

func main() {
    // ファイル作成(存在したら上書き)
    file, err := os.Create("example.txt")
    if err != nil {
        fmt.Println("ファイル作成エラー:", err)
    }

    // ファイルに文字列を書き込む
    _, err = io.WriteString(file, "Hello World !!")
    if err != nil {
        fmt.Println("ファイル書き込みエラー:", err)
    }
}

 

実行結果

※テキストファイル「example.txt」が作成され、ファイルに文字列「Hello World !!」が書き込まれていること。

 

path/filepath

OSに依存しない形でファイルパスを操作するためのユーティリティを提供しており、パスの結合や分割、ディレクトリの走査などを安全に行えます。

 

・OSに依存しない形でファイルパスを設定してログ出力する例

package main

import (
    "fmt"
    "path/filepath"
)

func main() {
    // ファイルパスの設定
    path := filepath.Join("folder", "subfolder", "file.txt")

    // ログ出力
    fmt.Println(path)
}

 

実行結果

folder/subfolder/file.txt

 

関連記事

Go言語(Golang)でファイルパスを扱う場合は「path/filepath」を使え!
こんにちは。Tomoyuki(@tomoyuki65)です。Go言語(Golang)でファイルパスに関することを扱う場合は、標準ライブラリに「path/filepath」というのがあるのでこれを使います。例えばファイルパスを作る際に「fmt...

 

Web開発・ネットワーク

net/http

HTTPクライアントとサーバーの実装を提供しています。

 

・ステータスコードをログ出力する例

package main

import (
    "fmt"
    "net/http"
)

func main() {
    fmt.Println("リクエスト成功のステータスコード:", http.StatusOK)
    fmt.Println("不正リクエストのステータスコード:", http.StatusBadRequest)
    fmt.Println("サーバーエラーのステータスコード:", http.StatusInternalServerError)
}

 

実行結果

リクエスト成功のステータスコード: 200
不正リクエストのステータスコード: 400
サーバーエラーのステータスコード: 500

 

net/url

URLの解析・生成・操作を簡単に行うための機能を提供しています。

 

・文字列のURLをパースして各値をログ出力する例

package main

import (
    "fmt"
    "net/url"
)

func main() {
    // URLの設定
    targetUrl := "https://example.com/hello?lang=ja"

    // パース処理
    u, err := url.Parse(targetUrl)
    if err != nil {
        fmt.Println("URLのパースエラー", err)
    }

    // ログ出力
    fmt.Println("Scheme:", u.Scheme)
    fmt.Println("Host:", u.Host)
    fmt.Println("Path:", u.Path)

    // クエリパラメータを取得
    query := u.Query()

    // クエリパラメータ「lang」をログ出力
    fmt.Println("lang:", query.Get("lang"))
}

 

実行結果

Scheme: https
Host: example.com
Path: /hello
lang: ja

 

encoding/json

Goのデータ構造(構造体やマップ)とJSON形式のデータとの間で相互変換(エンコード/デコード)を行う機能を提供しています。

 

・構造体のデータをJSON形式に変換し、それを文字列変換してログ出力する例

package main

import (
    "encoding/json"
    "fmt"
)

// ユーザーの構造体を定義
type User struct {
    FirstName string `json:"first_name"`
    LastName  string `json:"last_name"`
    Email     string `json:"email"`
}

func main() {
    // ユーザーを定義
    user := User{
        FirstName: "太郎",
        LastName: "田中",
        Email: "t.tanaka@example.com",
    }

    // ユーザーをJSON形式のデータに変換
    jsonData, err := json.Marshal(user)
    if err != nil {
        fmt.Println("JSON変換エラー", err)
    }

    // JSON形式のデータを文字列に変換してログ出力
    fmt.Println(string(jsonData))
}

 

実行結果

{"first_name":"太郎","last_name":"田中","email":"t.tanaka@example.com"}

 

context

ゴルーチン間でキャンセル信号・タイムアウト・値の伝達を行うためのもので、HTTP サーバーや非同期処理でよく使われます。

 

・コンテキストを作成してキーバリューを設定し、それを別途取得してログ出力する例

package main

import (
    "context"
    "fmt"
)

func main() {
    // コンテキストを作成
    ctx := context.Background()

    // コンテキストにキー「RequestId」と値「XXXX-XXXX-XXXX-1234」を設定
    ctx = context.WithValue(ctx, "RequestId", "XXXX-XXXX-XXXX-1234")

    // コンテキストからRequestIdを取り出してログ出力
    if requestID, ok := ctx.Value("RequestId").(string); ok {
        fmt.Println("RequestID:", requestID)
    } else {
        fmt.Println("RequestIDは取得できませんでした。")
    }
}

 

実行結果

RequestID: XXXX-XXXX-XXXX-1234

 

スポンサーリンク

最後に

今回は、Go言語(Golang)でよく使われるパッケージをまとめました。

importすることで使用できる標準パッケージについて、まず最初に覚えておいた方がいいものをまとめたので、ぜひ参考にしてみて下さい。

 

コメント

タイトルとURLをコピーしました