2017-12-13 13 views
1

Googleのprotobufを使用するコードがあります。これらは、ソースファイルです:同じパッケージを認識できません。

プロトファイル:

syntax = "proto3"; 

package my_package.protocol; 
option go_package = "protocol"; 

import "github.com/golang/protobuf/ptypes/empty/empty.proto"; 

... 

service MyService { 
    rpc Flush  (google.protobuf.Empty) returns (google.protobuf.Empty); 
} 

コンパイル、外出先ファイル:

package protocol 

import proto "github.com/golang/protobuf/proto" 
import fmt "fmt" 
import math "math" 
import google_protobuf "github.com/golang/protobuf/ptypes/empty" 

import (
    context "golang.org/x/net/context" 
    grpc "google.golang.org/grpc" 
) 

... 

type MyServiceClient interface { 
    Flush(ctx context.Context, in *google_protobuf.Empty, opts ...grpc.CallOption) (*google_protobuf.Empty, error) 
} 

そして私は最終的にこのようなコンパイルサービスを使用してみてください:

import (
    "golang.org/x/net/context" 

    pb "myproject/protocol" 

    google_protobuf "github.com/golang/protobuf/ptypes/empty" 
) 
... 
func Flush(sink pb.MyServiceClient) { 
    _, err = sink.Flush(context.Background(), *google_protobuf.Empty{}) 
    ... 
} 

次のエラーが発生します:

Cannot use '*google_protobuf.Empty{}' (type "myproject/vendor/github.com/golang/protobuf/ptypes/empty".Empty) as type "myproject/vendor/github.com/golang/protobuf/ptypes/empty".*google_protobuf.Empty

これは同じものです(同じファイルに解決さえします)。私はここで何が欠けていますか?

+0

をご利用くださいエラーと同じことがはっきりと示されます。 – Adrian

答えて

2

あなたのエラーは、この行にある:

_, err = sink.Flush(context.Background(), *google_protobuf.Empty{}) 

*google_protobuf.Empty{}は、構造体を参照解除しようとしているが、あなたの関数プロトタイプはgoogle_protobuf.Emptyへのポインタを期待しています。代わりに&google_protobuf.Empty{}を使用してください。あなたが本当のデータ構造ではなく、空の終わるとき、あなたはおそらくの線に沿って何かやるだろうと:GOでポインタ構文の概要については

req := google_protobuf.MyRequestStruct{} 
    _, err = service.Method(context.Background(), &req) 

を、彼らはありませんtour

関連する問題