text: package main
  
  import (
  	"context"
  	"io"
  	"log"
  	"net"
  
  	"google.golang.org/grpc/reflection"
  
  	"google.golang.org/grpc"
  
  	hs "../HelloService"
  )
  
  type HelloServiceImpl struct{}
  
  func (p *HelloServiceImpl) Hello(
  	ctx context.Context, args *hs.String,
  ) (*hs.String, error) {
  	reply := &hs.String{Value: "hello:" + args.GetValue()}
  	return reply, nil
  }
  
  //grpc stream
  func (p *HelloServiceImpl) Channel(stream hs.HelloService_ChannelServer) error {
  	for {
  		args, err := stream.Recv()
  		if err != nil {
  			if err == io.EOF {
  				return nil
  			}
  			return err
  		}
  
  		reply := &hs.String{Value: "hello:" + args.GetValue()}
  
  		err = stream.Send(reply)
  		if err != nil {
  			return err
  		}
  	}
  }
  
  func main() {
  	grpcServer := grpc.NewServer()
  	hs.RegisterHelloServiceServer(grpcServer, new(HelloServiceImpl))
  
  	//Register reflection service on gRPC server.
  	reflection.Register(grpcServer)
  
  	lis, err := net.Listen("tcp", ":1234")
  	if err != nil {
  		log.Fatal(err)
  	}
  
  	grpcServer.Serve(lis)
  }
  