@@ -29,18 +29,35 @@ import (
29
29
30
30
"google.golang.org/grpc"
31
31
"google.golang.org/grpc/credentials/insecure"
32
+ "google.golang.org/grpc/metadata"
32
33
33
34
pb "google.golang.org/grpc/examples/features/proto/echo"
34
35
)
35
36
36
37
var addr = flag .String ("addr" , "localhost:50051" , "the address to connect to" )
37
38
38
39
func callUnaryEcho (ctx context.Context , client pb.EchoClient ) {
39
- resp , err := client .UnaryEcho (ctx , & pb.EchoRequest {Message : "hello world" })
40
+ var header , trailer metadata.MD // variable to store header and trailer
41
+ resp , err := client .UnaryEcho (
42
+ ctx ,
43
+ & pb.EchoRequest {Message : "hello world" },
44
+ grpc .Header (& header ),
45
+ grpc .Trailer (& trailer ))
46
+
40
47
if err != nil {
41
48
log .Fatalf ("UnaryEcho: %v" , err )
42
49
}
43
50
fmt .Println ("UnaryEcho: " , resp .Message )
51
+
52
+ fmt .Println ("Received headers:" )
53
+ for k , v := range header {
54
+ fmt .Printf ("%s: %v\n " , k , v )
55
+ }
56
+
57
+ fmt .Println ("Received trailers:" )
58
+ for k , v := range trailer {
59
+ fmt .Printf ("%s: %v\n " , k , v )
60
+ }
44
61
}
45
62
46
63
func callBidiStreamingEcho (ctx context.Context , client pb.EchoClient ) {
@@ -54,6 +71,16 @@ func callBidiStreamingEcho(ctx context.Context, client pb.EchoClient) {
54
71
}
55
72
c .CloseSend ()
56
73
74
+ header , err := c .Header ()
75
+ if err != nil {
76
+ log .Fatalf ("Receiving headers: %v" , err )
77
+ } else {
78
+ fmt .Println ("Received headers:" )
79
+ for k , v := range header {
80
+ fmt .Printf ("%s: %v\n " , k , v )
81
+ }
82
+ }
83
+
57
84
for {
58
85
resp , err := c .Recv ()
59
86
if err == io .EOF {
@@ -64,6 +91,12 @@ func callBidiStreamingEcho(ctx context.Context, client pb.EchoClient) {
64
91
}
65
92
fmt .Println ("BidiStreaming Echo: " , resp .Message )
66
93
}
94
+
95
+ trailer := c .Trailer ()
96
+ fmt .Println ("Received tailers:" )
97
+ for k , v := range trailer {
98
+ fmt .Printf ("%s: %v\n " , k , v )
99
+ }
67
100
}
68
101
69
102
func main () {
0 commit comments