1. package と module を区別する
package はソースをまとめる単位です。module は go.mod で管理するパッケージのまとまりです。一つの module に複数の package を置けるので、各ディレクトリに go.mod を作る必要はありません。公式の モジュール構成の例 で、ディレクトリと import パスの関係を確認できます。
同じディレクトリの通常の Go ファイルは、一般に同じパッケージに属します。外部テストでは xxx_test パッケージを使う場合があります。main パッケージの main() が実行開始点です。
最小の構成を示します。
hello/
├── go.mod
├── main.go
└── greeting/
└── greeting.go
次のコマンドを hello ディレクトリで実行します。
go mod init example.com/hello
greeting/greeting.go:
package greeting
func Message() string {
return "hello, Go"
}
main.go:
package main
import (
"example.com/hello/greeting"
"fmt"
)
func main() {
fmt.Println(greeting.Message())
}
プロジェクト直下で go run . を実行すると、hello, Go が出力されます。import パスは module のパスとサブディレクトリから構成され、ローカルのディスクパスではありません。
2. import の形式
通常の import では、パッケージ名を使って公開された名前へアクセスします。名前の衝突には別名を使えます。
import myjson "encoding/json"
ほかに二つの形式があります。import _ "包路径" は初期化などの副作用だけを利用し、import . "包路径" は公開名を現在のファイルのスコープに取り込みます。後者は名前の出所が分かりにくくなるため、普通の業務コードではあまり必要ありません。
詳しい規則は Go の仕様のパッケージと import。
3. go.mod と go.sum
go.mod は module のパス、Go のバージョン要件、依存などを記録します。go.sum は取得したモジュールの内容のチェックサムを保存します。依存の選択全体を固定する、従来型のロックファイルではありません。
通常は両方をコミットします。依存の選択や各指令の意味は、Go Modules Reference を参照します。

4. 依存管理コマンドの役割
まず 公式の依存管理ガイド に沿って、依存の変更とツールの導入を区別します。
| コマンド | 用途 |
|---|---|
go mod init 模块路径 | モジュールを作る |
go mod tidy | ソースとテストに合わせて依存を追加・整理する |
go get 包路径@版本 | 現在のモジュールの依存バージョンを変更する |
go mod download | 依存モジュールを取得する |
go list -m all | 依存モジュールの一覧を表示する |
go mod graph | 依存グラフを表示する |
go mod verify | ローカルキャッシュの改変を調べる |
go install 工具路径@版本 | 指定バージョンの実行ツールを導入する |
CLI の導入には通常 go install ...@版本 を使い、go get を汎用的なツール導入コマンドと考えないようにします。module を変更したら go mod tidy と go test ./... を実行し、差分を確認して不要な大量更新を避けます。
5、GOPROXY
まず現在の値を確認します。
go env GOPROXY
必要なら、例えば次のように設定します。
go env -w GOPROXY=https://goproxy.cn,direct
これは現在のターミナルだけでなく、Go ツールチェーンの永続設定を変更します。プロキシはネットワークと組織の要件に合わせて選びます。
カンマ区切りのリストは通常、404 または 410 の場合に次の取得先を試します。すべての失敗で切り替わるわけではありません。ネットワークの調査では、この違いが重要です。モジュールの取得規則。

6. replace の正しい使い方
replace はモジュールをローカルディレクトリや別のバージョンに置き換えます。go.mod 内の指令で、コマンドから編集するには go mod edit -replace を使います。go mod replace というコマンドはありません。
二つのモジュールを同時に開発する例です。
module example.com/hello
go 1.24
require example.com/common v0.0.0
replace example.com/common => ../common
プロジェクト内で、次のようにも実行できます。
go mod edit -replace=example.com/common=../common
go mod tidy
置換先のディレクトリも、モジュールである必要があります。replace だけでは依存は追加されません。また、主モジュールのローカル置換は、そのライブラリの利用者へ自動では適用されません。公開前にローカルパスの置換を確認します。go.mod の replace の説明。
7. プロジェクトを整える
ソースは gofmt で整形し、コミット前にテストします。必要な依存だけを追加します。依存にはコードの削減だけでなく、更新や保守の作業も伴います。
以前の規約のスクリーンショットは記録として残します。実際の規則は、公式文書と現在のプロジェクトの約束を優先します。


