2016-08-02 18 views
4

Ich habe eine Golang-Struktur, die Verweise auf einige andere Strukturen enthält. Gibt es eine automatisierte Möglichkeit, die .proto-Datei aus den Strukturen zu generieren?Generiere Proto-Datei von Golang-Struktur

Zum Beispiel:

type A struct { 
a int 
b B 
} 

type B struct { 
c []C 
} 

type C struct { 
x int 
} 

sollte erzeugen:

message A, B, C usw. proto3 bevorzugt.

https://github.com/kubernetes/kubernetes/tree/master/cmd/libs/go2idl scheint etwas zu haben, aber ist undokumentiert. Irgendwelche Optionen?

+0

Das klingt wie ein Witz. Normalerweise wird aus Proto generiert und ich kann mir keinen sinnvollen Fall vorstellen, es auf den Kopf zu stellen.Für solch einen primitiven Fall ist das kein Problem, schreibe * .proto direkt. Und für kompliziertere Fälle (enums, oneof, ...) ist jedes Werkzeug nutzlos. – lofcek

Antwort

3

Ich bin finden Sie das Paket, generieren .proto Dateien aus Go-Quellcode: proteus (https://github.com/src-d/proteus)

Proteus/proʊtiəs/ist ein Werkzeug zur Erzeugung Protokoll puffert Version 3 kompatibel .proto Dateien von Ihrem Go structs, Typen und Funktionen.

Die Motivation hinter dieser Bibliothek besteht darin, Go als Wahrheitsquelle für Ihre Modelle zu verwenden und nicht umgekehrt den Go-Code aus einer .proto-Datei, die keinen idiomatischen Code generiert.

generieren protobuf Nachrichten

//proteus:generate 
    type User struct { 
     Model 
     Username string 
    } 

    type Model struct { 
     ID int 
     CreatedAt time.Time 
    } 

diesem Beispiel wird die folgende protobuf Meldung.

message User { 
      int32 id = 1; 
      google.protobuf.Timestamp created_at = 2; 
      string username = 3; 
    } 

Installieren

go get -v gopkg.in/src-d/proteus.v1/... 

Anforderungen

Es gibt zwei Anforderungen für den vollständigen Prozess.

protoc binary installed on your path 
go get -u github.com/gogo/protobuf/... 

Nutzungs

Sie die Proto-Dateien erzeugen können, der Marschall/Abstellungs und der Rest von protobuf Sachen für Ihre Go-Typen, der RPC-Client und Server-Schnittstelle und die RPC-Server-Implementierung für Ihre Pakete . Das heißt, der ganze Prozess.

proteus -f /path/to/protos/folder \ 
    -p my/go/package \ 
    -p my/other/go/package 

Sie können Proto-Dateien nur mithilfe des Befehlszeilenprogramms erstellen, das mit Proteus bereitgestellt wird.

Sie können auch nur gRPC-Server-Implementierungen für Ihre Pakete generieren.

proteus rpc -p my/go/package \ 
    -p my/other/go/package 

HINWEIS: Natürlich, wenn die Standardeinstellungen nicht Ihren Anforderungen entspricht, bis Proteus über Plugins erweiterbar ist, können Sie hacken zusammen Ihren eigenen Generator Befehl die zur Verfügung gestellten Komponenten. Schauen Sie sich die godoc-Dokumentation des Pakets an.

+0

Um nicht abgelehnt zu werden, sollten Sie mehr als nur einen Link setzen. Geben Sie die wesentlichen Informationen ein, so dass die Antwort immer gültig ist, wenn die Verbindung unterbrochen wird. – Jonathan

+1

Es tut mir leid, Dies ist das erste Mal, dass ich eine Antwort geschrieben habe. Ich werde später darauf achten –

+0

Toller Job auf der Bearbeitung! Leider weiß ich nicht, ob das wirklich die Frage beantwortet, da ich Go nicht kenne, aber hoffentlich wer auch immer abstimmte wird dein update sehen und einziehen/upvote wenn es gut ist. – Jonathan