go-admingo-admin
  • ガイド
  • GitHub
  • Changelog
⌘ K
概要
クイックスタート
Go 環境
Go Modules
環境変数
Node 環境
IDE 設定
コーディング規約
デプロイ
よくある質問
最終更新日時:
Open-source MIT Licensed | Copyright © 2020-present
Powered by go-admin-team

TABLE OF CONTENTS

‌
‌
‌
‌

Go Modules

Go Modules は Go 公式の依存パッケージ管理の仕組みで、Go 1.16 以降はデフォルトかつ唯一の推奨方式です。go-admin もこれを使って依存パッケージを管理しています。日常の開発で知っておくべきことをまとめます。

go.mod と go.sum

go.mod はプロジェクトの依存関係を記述するファイルで、次の 3 つの情報を含みます。

  1. モジュール名 — プロジェクト内のパッケージ同士が参照し合う際に使われます。go-admin のモジュール名は go-admin です;
  2. Go のバージョン — プロジェクトが要求する最低限の Go バージョンを宣言します。go-admin は現在 1.26 を要求しています;
  3. 依存パッケージの一覧 — 直接の依存パッケージと間接的な依存パッケージ(// indirect と表記)。

go.sum は各依存パッケージのチェックサムを記録し、ダウンロードしたコードが最初に導入したときと一致しているかを確認するために使われます。

WARNING

go.sum は必ずバージョン管理に含めてください。これは依存パッケージが改ざんされていないことを保証する根拠であり、削除しても「プロジェクトの整理」にはならず、単に検証が効かなくなるだけです。

よく使うコマンド

sh
# モジュールの初期化(新規プロジェクトのみ必要。go-admin にはすでに go.mod が同梱されています)
$ go mod init モジュール名
# 依存関係の整理:不足分の補完と、使われなくなったものの削除
$ go mod tidy
# 依存パッケージをローカルのモジュールキャッシュにダウンロード
$ go mod download
# あるパッケージがどこから導入されているか確認(依存関係の衝突調査に便利)
$ go mod why -m パッケージ名
# すべての依存パッケージとそのバージョンを一覧表示
$ go list -m all

このうち最もよく使うのが go mod tidy です。import の追加・削除のたびに実行すると、go.mod と go.sum が同期して更新されます。

依存パッケージの取得に失敗する場合

環境によってはモジュールの直接取得でタイムアウトが発生しやすいため、プロキシを設定します。

sh
$ go env -w GOPROXY=https://goproxy.cn,direct

詳しくは環境変数を参照してください。

依存パッケージがプライベートリポジトリにある場合は、GOPRIVATE も併せて宣言し、該当するモジュールがプロキシと検証をスキップするようにします。

sh
$ go env -w GOPRIVATE=git.yourcompany.com

ローカルの依存パッケージを使ったデバッグ

go-admin-core のような依存先のライブラリをデバッグしたい場合は、replace でローカルディレクトリを指すことで、変更のたびにリリースする手間を省けます。

replace (
github.com/go-admin-team/go-admin-core => ../go-admin-core
)

WARNING

replace はローカルでのデバッグ専用です。コミット前に必ず削除してください。これを残したままコミットすると、他の人や CI がコードを取得した際にビルドできなくなります。そのローカルパスは相手の環境には存在しないためです。

バージョンアップ

sh
# 単一の依存パッケージを最新バージョンに更新
$ go get -u パッケージ名
# 特定のバージョンに更新
$ go get パッケージ名@v1.2.3

フレームワークの依存パッケージを更新する前に、まず変更範囲を確認することをおすすめします。go-admin と go-admin-core にはバージョンの対応関係があり、core だけを単独で更新すると互換性のないインターフェースが混入する可能性があります。リポジトリの go.mod に固定されているバージョンを参考にしてください。

WARNING

サポートについて:

このガイドを読んでいて分からないことがあれば、Issue を作成してください。