我正在Golang寫一個RESTful API,它也有一個gRPC API。 API連接到MongoDB數據庫,並使用結構來映射實體。我也有一個.proto的定義,就像我用於MongoDB的結構一樣。將protoc生成的結構體從bson結構體轉換爲最佳方法是什麼?
我只是想知道是否有一種方法來共享,或重新使用MongoDB調用.proto定義的代碼也。我注意到protoc產生具有JSON標籤爲每個字段strucs,但顯然不會有bson
標籤等
我有類似...
// Menu -
type Menu struct {
ID bson.ObjectId `json:"id" bson"_id"`
Name string `json:"name" bson:"name"`
Description string `json:"description" bson:"description"`
Mixers []mixers.Mixer `json:"mixers" bson:"mixers"`
Sections []sections.Section `json:"sections" bson:"sections"`
}
但是,我也有產生protoc代碼...
type Menu struct {
Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"`
Description string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"`
Mixers []*Mixer `protobuf:"bytes,4,rep,name=mixers" json:"mixers,omitempty"`
Sections []*Section `protobuf:"bytes,5,rep,name=sections" json:"sections,omitempty"`
}
目前我不得不根據我在做什麼在兩個結構之間進行轉換。這是乏味的,我可能相當大的表現。那麼是否有更好的方法在兩者之間進行轉換,或者將兩個任務中的一個重新用於其中一個?
可能只需手動添加'bson'標記。你是否試過它作爲測試?如果它可行,那麼你可以編寫一個腳本來處理它。 – RayfenWindspear
使用'bson.ObjectId',你可以將兩者都放在struct(或embed)中,然後只要確保從任一源檢索到一個,就填充空的一個。我想這仍然暴露了一些單調乏味的工作,但不如轉換整個結構。 – RayfenWindspear
問題是,我正計劃在構建或其他代碼上自動生成代碼,因此它會覆蓋它。我想我可以不這樣做,手動更新它,但感覺應該有一個標準的方式來做到這一點。當然,大量的人正在向Golang中的gRPC吐出mongodb查詢?嵌入ID實際上可以工作!你仍然很棘手,但你提到 –