LoginSignup
0
0

More than 1 year has passed since last update.

【Go】protoc-gen-validateを含めたprotoファイルでコード出力時に`protoc-gen-go: invalid Go import path`が発生

Posted at

概要

GoのgRPCで、バリデートを実装する際に便利なのが、protoc-gen-validateです。【Go】gRPCのリクエストバリデータを自動生成するの記事で紹介されている通り、protoファイルでバリデートの定義を設定することで、バリデートのコードを自動生成してくれます。
今回はprotoc-gen-validateを含めたprotoファイルで、コード出力時にprotoc-gen-go: invalid Go import pathというエラーが発生したので、対応方法などをメモ書きします。

事象発生時の状況

エラーが発生したprotoファイルは以下の通りです。
なお、使用したProtocol Buffersのバージョン3.19.4はです。

src/proto/authenticationUser.proto
syntax = "proto3";

option go_package = "pb";

import "validate/validate.proto";

package pb;

// ユーザ認証用のサービス
service AuthenticationUserService {
  // Google認証コードの検証
  rpc VerifyGoogleAuthCode (VerifyGoogleAuthCodeRequest) returns (UserResponse) {}
}

message VerifyGoogleAuthCodeRequest {
  string googleAuthCode = 1 [(validate.rules).string.min_len = 1];
}

message UserResponse {
  string id = 1;
  string name = 2;
  string authToken = 3;
}

実行したコマンドは以下です。

protoc -I=. -I=${GOPATH}/pkg/mod -I=${GOPATH}/pkg/mod/github.com/envoyproxy/protoc-gen-validate@v0.6.7 --go_out="plugins=grpc:./src" --validate_out="lang=go:./src" ./src/proto/*.proto

対応

import pathの設定に問題がありそうということで、go_package部分を修正する必要がありそうです。このパス部分の解説はWARNING: Missing 'go_package' option が出る時の対処法の記事が詳しいです。
今回の場合はgo_packageで指定した名前とpackage名は同じにしていますが、protoc-gen-validateを含めると上手くいかないことから、セミコロン(;)を使ってパスを置き換えると上手く出力できました。

src/proto/authenticationUser.proto
syntax = "proto3";

// パスの置き換えを行うよう修正
option go_package = "pb/;pb";

import "validate/validate.proto";

package pb;

// ユーザ認証用のサービス
service AuthenticationUserService {
  // Google認証コードの検証
  rpc VerifyGoogleAuthCode (VerifyGoogleAuthCodeRequest) returns (UserResponse) {}
}

message VerifyGoogleAuthCodeRequest {
  string googleAuthCode = 1 [(validate.rules).string.min_len = 1];
}

message UserResponse {
  string id = 1;
  string name = 2;
  string authToken = 3;
}
0
0
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
0
0