TL; DR: Có ai đã xây dựng một dịch vụ với golang + protobuf + SQL không? Nếu bạn đã sử dụng thư viện ORM (hoặc ORM), cái nào?Bạn sử dụng ORM nào cho các dịch vụ golang sử dụng protobuf để tuần tự hóa dữ liệu?
Đọc cho bối cảnh nhiều hơn:
Tôi đang xây dựng một dịch vụ trong golang sử dụng protobuf serialize dữ liệu. Vì vậy, tất cả các loại và các cuộc gọi API của tôi được xác định trong tệp .proto và sau đó mã Go được tạo bằng protoc.
Tôi muốn sử dụng ORM để lưu trữ dữ liệu trong MySQL. Tôi google xung quanh và tìm thấy gorm, gorp và một loạt các thư viện khác. Dường như có một số loại thẻ hoặc chú thích trong cấu trúc của bạn là một mẫu chung với các thư viện này.
Ví dụ từ các tài liệu gorp:
type Post struct {
// db tag lets you specify the column name if it differs from the struct field
Id int64 `db:"post_id"`
Created int64
Title string `db:",size:50"` // Column size set to 50
Body string `db:"article_body,size:1024"` // Set both column name and size
}
Từ các tài liệu GORM:
type Profile struct {
gorm.Model
Name string
}
type User struct {
gorm.Model
Profile Profile `gorm:"ForeignKey:ProfileRefer"` // use ProfileRefer as foreign key
ProfileRefer int
}
Vì vậy, tôi cố gắng nhìn thấy nếu có một cách để thêm các chú thích để các thông điệp trong các tập tin .proto của tôi, và tìm thấy this github issue nói điều này sẽ không được hỗ trợ.
Vì vậy, tôi đến Stack Overflow để được tư vấn. Chắc chắn có ai đó ở đó bằng cách sử dụng protobufs trong golang với SQL, phải không? Và sử dụng ORM? Vậy bạn đang sử dụng cái nào?
tôi đề nghị bạn sẽ được tốt hơn trong thời gian dài nếu bạn tiếp tục giao thức mạng và mô hình cơ sở dữ liệu riêng biệt. Tôi sử dụng tiết kiệm (về cơ bản giống như protobuf) và SQL để lưu trữ trong một trong các dự án của tôi. Bằng cách giữ chúng riêng biệt, tôi có thể viết giao thức tiết kiệm của mình theo cách nó có lợi cho giao tiếp mạng và giữ cơ sở dữ liệu của tôi theo cách nó có lợi để lưu trữ và truy cập dữ liệu. Tôi có thể thay đổi một cái mà không chạm vào cái kia. Nó có vẻ giống như nhiều công việc hơn nhưng nó sẽ ngăn ngừa những vấn đề nghiêm trọng trong tương lai. – creker
Vì vậy, tôi đã xem xét việc có một bộ cấu trúc riêng biệt để sử dụng trong dịch vụ và sau đó chỉ sử dụng bất kỳ ORM của ol để lưu giữ các đối tượng trong phần cuối SQL của tôi. Nhưng tôi phải duy trì hai bộ đối tượng riêng biệt và giữ chúng đồng bộ. Tôi không muốn làm điều đó. Về mặt logic, các đối tượng tương tự tồn tại trong các thư protobuf của tôi là các đối tượng mà tôi muốn thao tác trong suốt dịch vụ và lưu trữ trong cơ sở dữ liệu. –
Tôi sẽ đề nghị tiết kiệm ... –