Как использовать тип proto.Message в функции? - PullRequest
0 голосов
/ 09 мая 2018

Я использую golang и протокольные буферы. У меня есть два прото-сообщения, где одно импортирует другое. Я хотел бы выполнить некоторую обработку, используя тип proto.Message, но я получаю ошибку.

Это foo.proto

syntax = "proto3";
package foo;

message Page {
    string id = 1;
    string title = 2;
}

Это bar.proto, куда я импортирую foo.proto

syntax = "proto3";
package bar;

import "foo.proto";

message Book {
    string id = 1;
    string title = 2;
    repeated foo.Page pages = 3;
}

Я использую следующую функцию для обработки Book. Я хочу сохранить его универсальным, так как мой сценарий использования требует преобразования и других протологических сообщений.

func TransformArray (arrObj []proto.Message) {
    if len(proto) > 0 && !reflect.ValueOf(proto[0]).IsNil() {
        ...
    } 
}

Когда я использую вышеуказанную функцию в моем файле go следующим образом

package main

import (
    book_proto "book"
)

func main() {
    book = *book_proto.Book{Pages: ... }
    TransformArray(book.Pages)
}

Я получаю синтаксическую ошибку следующим образом

cannot use book.Pages (type []*"foo".Page) as type []proto.Message in argument to TransformArray 

Что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...