go protobuf: не удается найти пакет "." в github.com/gogo/protobuf/proto и m.TimeStamp.MarshalToSizedBuffer undefined - PullRequest
0 голосов
/ 12 апреля 2020

Вопрос по названию. Пытался скомпилировать 2 способами gogoproto и golangprotobuf. * ​​1001 *

Написал тесты для обоих, и оба не будут маршалировать.

msg.proto

syntax = "proto3";

import "google/protobuf/timestamp.proto";

package msg;

message Message {
    string Name = 1;
    google.protobuf.Timestamp TimeStamp = 2;
}

demo_test. go

package msg

import (
    "testing"
    "time"

    // gogo "github.com/gogo/protobuf/proto"
    "github.com/golang/protobuf/proto"
    "github.com/golang/protobuf/ptypes/timestamp"
)

var msg = Message{
    Name:      "demo",
    TimeStamp: &timestamp.Timestamp{Seconds: int64(time.Now().Second())},
}

//func TestGogoMessage_Marshal(t *testing.T) {
//  myBytes, err := gogo.Marshal(&msg)
//  if err != nil {
//      t.Fail()
//  }

//  _ = myBytes
//}

func TestProtoMessage_Marshal(t *testing.T) {
    myBytes, err := proto.Marshal(&msg)
    if err != nil {
        t.Fail()
    }

    _ = myBytes
}

скомпилировано с:

protoc --gofast_out=. ./demo/msg.proto работает, но работает тест:

# github.com/.../demo
package github.com/.../demo (test)
    imports github.com/gogo/protobuf/proto: cannot find package "." in:
    /Users/.../vendor/github.com/gogo/protobuf/proto

protoc --go_out=. ./demo/msg.proto работает, но работает тест:

# github.com/.../demo [github.com/.../demo.test]
./msg.pb.go:127:28: m.TimeStamp.MarshalToSizedBuffer undefined (type *timestamp.Timestamp has no field or method MarshalToSizedBuffer)
./msg.pb.go:169:18: m.TimeStamp.Size undefined (type *timestamp.Timestamp has no field or method Size)
./msg.pb.go:277:25: m.TimeStamp.Unmarshal undefined (type *timestamp.Timestamp has no field or method Unmarshal)

1 Ответ

0 голосов
/ 12 апреля 2020

Обе команды работают нормально для меня, поэтому, возможно, проблема в вашей среде.

Что касается ошибки undefine, похоже, вы используете Timestamp struct from github.com/golang/protobuf/ptypes/timestamp, которая имеет интерфейс отличается от Timestamp от https://github.com/gogo/protobuf/blob/master/types/timestamp.pb.go. Поэтому, если вы сгенерируете msg.pb.go с помощью protoc --gofast_out=. ./demo/msg.proto, вы получите эту ошибку.

...