9
6

More than 3 years have passed since last update.

【Golang】Modules環境で相対パスimport (Go:1.13)

Last updated at Posted at 2020-03-02

ちょっとハマったので自分用メモ。
Go Modules環境でローカルに配置した共有packageと、子packageを使う場合の指定の仕方。

TL;DR

別moduleならgo.modにreplaceで相対パスを記載する。
同一moduleならimport 自module名/ディレクトリ名で指定する。

フォルダ構成

project_root
  ├── module_a
  │    ├── go.mod
  │    └── main.go ... ここで common_module/common を使いたい
  │
  ├── module_b
  │    ├── go.mod
  │    ├── main.go ... ここで common_module/common と sub_package を使いたい
  │    └── sub_package
  │         └── sub.go
  │
  └── common_module
       ├── go.mod
       └── common.go

ソースコード

module_a

module_a/go.mod
module module_a

go 1.13

require common_module/common v0.0.0

replace common_module/common => ../common_module
module_a/main.go
package main

import (
    "common_module/common"
)

func main() {
    common.Test()
}

module_b

module_b/go.mod
module module_b

go 1.13

require common_module/common v0.0.0

replace common_module/common => ../common_module
module_b/main.go
package main

import (
    "common_module/common"
    sub "module_b/sub_package"
)

func main() {
    common.Test()
    sub.Sub()
}

参考

以下のサイトを参考にしました。

モノレポ(mono repository)内でgoのmoduleを相対パスで利用する方法
http://chidakiyo.hatenablog.com/entry/2019/07/04/%E3%83%A2%E3%83%8E%E3%83%AC%E3%83%9D%EF%BC%88mono_repository%EF%BC%89%E5%86%85%E3%81%A7go%E3%81%AEmodule%E3%82%92%E7%9B%B8%E5%AF%BE%E3%83%91%E3%82%B9%E3%81%A7%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B

ローカル環境のみでの Go Modules と自作パッケージ
https://qiita.com/tkj06/items/a5f79417935100045650

Go Modulesとマルチモジュール構成でGo Homeする方法
https://qiita.com/hinastory/items/336c2d944fdb8ae11efb

そもそもマルチモジュールって非推奨なんですね

9
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6