Help us understand the problem. What is going on with this article?

Goモジュールモードでモジュール内に作ったモジュールを扱う

More than 1 year has passed since last update.

GoModule、大変便利ですね。
便利なのですがちょっと大きめのシステムを組もうとした時に頭を悩ませることが出てくるかと思います。

ちょっと大きめのシステムになると機能別にディレクトリを作って構成を分割したいという要求が出てくるかと思うのですが、
素直にGoModuleを利用するとこういったケースを上手く対応することができないのです。

想定する構成

sampleモジュールの中に、module1、module2というsampleモジュールから利用するためのサブモジュールが定義されています。

sample/
  module1/
    module1.go
    go.mod
  module2/
    module2.go
    go.mod
  main.go
  go.mod

importする

このような構成にした時、このモジュール内にあるモジュールは呼び出し側からは以下のようにインポートします。

main.go
package main

import (
    "github.com/sample/module1"
    "github.com/sample/module2"
)

このように書くとサブモジュールのコードを取得するためにgithub1へアクセスしてコードを取得してきます。
githubにアクセスするということはgithubへコミットされていないコードは反映されないということです。

一般的に、サブモジュールはその場で変更したら即座に利用側へ反映されてほしいはずです。

モジュール内モジュールは、ローカルのコードを参照するようにする

この問題は、go.modファイルにreplaceというキーワードを利用してモジュール名とパスの関連をつくることで解決することができます。

go.mod
replace (
    github.com/sample/module1 => ./module1
    github.com/sample/module2 => ./module2
)

このように書いておくと、GoModuleは以下のようなrequire文を追記してくれ、無事モジュール内モジュールのコードはローカルのコードを参照してビルドしてくれるようになります。

go.mod
replace (
    github.com/sample/module1 => ./module1
    github.com/sample/module2 => ./module2
)

require (
    github.com/sample/module1  v0.0.0-00010101000000-000000000000
    github.com/sample/module2  v0.0.0-00010101000000-000000000000
)

参考リンク


  1. この例はgithubを利用しているため、githubと記述しています。 

k-motoyan
プログラミング楽しいよ
diverse
結婚支援事業を中心に、友達・恋人探しのマッチング事業を展開。深刻化する恋愛離れ、未婚率の上昇を解決すべくWEB・アプリサービスを展開。すべての人へ出会いのプラットフォームを提供しています。
http://diverse-inc.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした