google protobuf 时间戳未定义

问题描述 投票:0回答:1

我正在尝试使用服务器和客户端之间的 grpc 通信来实现简单的聊天。当接受来自客户端的消息时,服务器响应一个简单的原始消息,其中包含当前时间。我的原型文件如下所示:

syntax = "proto3";

import "google/protobuf/empty.proto";
import "google/protobuf/timestamp.proto";

package mes_grpc;

option go_package = "proto/;mes_grpc";

service MessengerServer {
    rpc SendMessage(UserMessage) returns (SendResponse) {}
}

message UserMessage {
    string Author = 1;
    string Text = 2;
}

message SendResponse {
    google.protobuf.Timestamp SendTime = 1;
}

main.go 中服务器处理程序的代码:

package main

import (
    "context"
    "fmt"
    "log"
    "net"
    "os"
    "sync"

    mes_grpc "mes_grpc"

    empty "github.com/golang/protobuf/ptypes/empty"
    timestamp "github.com/golang/protobuf/ptypes/timestamp"

    "google.golang.org/grpc"
    "google.golang.org/grpc/reflection"
)

type MessengerServer struct {
    mes_grpc.UnimplementedMessengerServerServer
    messages []chan *mes_grpc.ReadResponse
    mu       sync.Mutex
}
func (s *MessengerServer) SendMessage(ctx context.Context, msg *mes_grpc.UserMessage) (*mes_grpc.SendResponse, error) {
    var read_msg mes_grpc.ReadResponse
    read_msg.Author = msg.Author
    read_msg.Text = msg.Text
    read_msg.SendTime = *timestamp.Timestamp.Now()
    s.mu.Lock()
    for _, topic := range s.messages {
        topic <- (&read_msg)
    }
    s.mu.Unlock()

    var response mes_grpc.SendResponse
    response.SendTime = read_msg.SendTime
    return &response, nil
}

但是,该代码不会编译并显示以下输出:

开始构建
主要的 ./main.go:30:43: timestamp.Timestamp.Now 未定义(类型 timestamppb.Timestamp 现在没有字段或方法)

什么可能导致此问题?

我尝试重新安装 protoc 和 go protobuf 插件,但没有帮助。

go time protocol-buffers grpc
1个回答
0
投票

您使用的是旧版本的 protobuf 模块,没有该功能。您可能也在使用旧版本的协议。更新您的内容,并将时间戳导入更改为 google.golang.org/protobuf/types/known/timestamppb。然后

timestamppb.Now()
(不是
timestamppb.Timestamp.Now()
——它是一个函数,而不是一个方法)就会起作用。

© www.soinside.com 2019 - 2024. All rights reserved.