3kis commented on issue #11440:
URL: https://github.com/apache/apisix/issues/11440#issuecomment-2988194977

   it seems that this problem was solved in latest apisix.
   
   # proto file:
   ```proto
   syntax = "proto3";
   
   package user;
   
   option go_package = "grpc-test/proto";
   
   enum Gender {
     GENDER_UNSPECIFIED = 0;
     GENDER_MALE = 1;
     GENDER_FEMALE = 2;
   }
   
   message UserRequest {
     string name = 1;
     int32 age = 2;
   }
   
   
   message UserResponse {
     Gender gender = 1;
     repeated string items = 2;
     string message = 3;
   }
   
   
   service UserService {
     rpc GetUserInfo(UserRequest) returns (UserResponse) {}
   } 
   ```
   
   
   
   # grpc server code
   
   ## array containing values
   
   ```golang
   package main
   
   import (
        "context"
        "fmt"
        "log"
        "net"
   
        "google.golang.org/grpc"
   
        "grpc-test/proto"
   )
   
   type UserServiceServer struct {
        proto.UnimplementedUserServiceServer
   }
   
   
   func (s *UserServiceServer) GetUserInfo(ctx context.Context, req 
*proto.UserRequest) (*proto.UserResponse, error) {
        return &proto.UserResponse{
                Gender: proto.Gender_GENDER_MALE,
                Items:  []string{"1", "2"},
                Message: "Hello world, name: " + req.Name + ", age: " +  
fmt.Sprint(req.Age),
        }, nil
   }
   
   func main() {
        listener, err := net.Listen("tcp", ":50051")
        if err != nil {
                log.Fatalf("failed to listen: %v", err)
        }
        grpcServer := grpc.NewServer()
        proto.RegisterUserServiceServer(grpcServer, &UserServiceServer{})
        log.Println("gRPC server listening on :50051")
        if err := grpcServer.Serve(listener); err != nil {
                log.Fatalf("failed to serve: %v", err)
        }
   } 
   ```
   
   
   
   request result
   ![image.png](attachment:1108390d-3645-4227-a8d7-10b275bc42fb:image.png)
   
   
   ## array without values
   ```golang
   package main
   
   import (
        "context"
        "fmt"
        "log"
        "net"
   
        "google.golang.org/grpc"
   
        "grpc-test/proto"
   )
   
   // UserServiceServer 实现 proto 生成的接口
   type UserServiceServer struct {
        proto.UnimplementedUserServiceServer
   }
   
   // GetUserInfo 实现接口
   func (s *UserServiceServer) GetUserInfo(ctx context.Context, req 
*proto.UserRequest) (*proto.UserResponse, error) {
        return &proto.UserResponse{
                Gender: proto.Gender_GENDER_MALE,
                Items:  []string{},
                Message: "Hello world, name: " + req.Name + ", age: " +  
fmt.Sprint(req.Age),
        }, nil
   }
   
   func main() {
        listener, err := net.Listen("tcp", ":50051")
        if err != nil {
                log.Fatalf("failed to listen: %v", err)
        }
        grpcServer := grpc.NewServer()
        proto.RegisterUserServiceServer(grpcServer, &UserServiceServer{})
        log.Println("gRPC server listening on :50051")
        if err := grpcServer.Serve(listener); err != nil {
                log.Fatalf("failed to serve: %v", err)
        }
   } 
   ```
   
   request result
   ![image.png](attachment:10cfc0bd-1dbf-4b47-ba7a-9eb450151257:image.png)
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: notifications-unsubscr...@apisix.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to