假设我在我的Player文件中定义了一个.proto。
message Player {
string first_name = 1;
string last_name = 2;
int32 user_id = 3;
}我使用https://github.com/twitchtv/twirp在Go后端和JavaScript前端之间进行通信。如果您不知道Twirp,那么它只是HTTP1.1上的JSON。
将Player消息转换为Go结构。
type Player struct {
FirstName string
LastName string
UserId int32
}众所周知,大写字段是公共的。但是,我希望保持UserId的私有性,即使其小写。我前面的用户不应该能够看到播放器的UserId。在我的后端,我需要这个信息,所以我不能简单地删除字段。
有什么办法处理这种情况吗?在我的.proto文件中有可能有私有字段吗?
发布于 2018-07-11 08:21:39
Protobuf用于通信,而不是用于数据库建模。您应该使用protobuf来描述您打算从客户端发送/接收的数据结构。
如果您不打算向客户端发送用户ID,则不要将其包括在protobuf Player定义中。
发送给客户端的Player和存储在数据库中的Player不必相同。更多的情况是,它们不一样,您通常存储其他字段,如创建时间、数据库ID等,这些字段不适合客户端。
因此,对于一个Player,您应该有两个单独的结构,一个是服务器使用的(存储)结构,另一个是客户端看到的结构。当然,在定义这两个结构时,您可以利用另一个结构来防止重复,例如服务器播放器可以嵌入客户端播放器,例如:
新proto Player
message Player {
string first_name = 1;
string last_name = 2;
}客户端Player
type Player struct {
FirstName string
LastName string
}服务器Player
type DBPlayer struct {
Player // Embed Player
UserId int32
}当您在服务器中加载DBPlayer时,您只会将DBPlayer.Player字段发送到客户端,其余的都是“私有”的。
https://stackoverflow.com/questions/51280221
复制相似问题