How to use proto.Message type in a function?

4.5k Views Asked by At

I am using golang and protocolbuffers. I have two proto messages where one imports the other. I would like to do some processing using proto.Message type but I get an error.

This is foo.proto

syntax = "proto3";
package foo;

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

This is bar.proto where I am importing foo.proto

syntax = "proto3";
package bar;

import "foo.proto";

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

I am using the following function to process Book. I want to keep it generic as my usecase requires to transform other proto messages as well.

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

When I use the above function in my go file as follows

package main

import (
    book_proto "book"
)

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

I get a syntax error as follows

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

What am I doing wrong?

0

There are 0 best solutions below