vikkeの趣味やらなんやらのごった煮blog

趣味の技術や音楽やバイクや写真のページ

goのモジュールの話

go言語でモジュールやディレクトリの情報を操作する方法。みたいな感じ?
gRPCで上手くhoge.pb.goが読めなくて、 vim-jpのslackで教えてもらった方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
proj
├── Makefile
├── README.md
├── go.mod
├── go.sum
├── idl
│   ├── go.mod
│   ├── hermes.pb.go
│   └── hermes.proto
└── src
├── client.go
├── hermes
└── main.go

こんなdirectory構成の時に src/main.go

1
2
3
4
5
6
7
8
9
import (
"context"
"log"
"net"

pb "proj/idl"

"google.golang.org/grpc"
)

と書くと、 proj/idl を読んでくれない。

解決方法としては、

  1. idlの下にgo.modを作り、 module proj/idl と記述する。
  2. rootのgo.modにreplace proj/idl => ./idl/ を追加する。

だ。

意味は、

  1. idlという名のディレクトリだけど、proj/idlだという指定。
  2. ディレクトリはidlだけどパッケージ名は、proj/idlだ。

だそうだ。

パッとは出て来ないので、ここにメモする。