protoc-gen-go/grpc: inline errUnimplemented function (#818)

Avoid using an errUnimplemented function, which requires us to
give a name to it, causing possible conflicts.
Instead, just inline it's functionality.
diff --git a/protoc-gen-go/grpc/grpc.go b/protoc-gen-go/grpc/grpc.go
index 9266fba..7d05dac 100644
--- a/protoc-gen-go/grpc/grpc.go
+++ b/protoc-gen-go/grpc/grpc.go
@@ -118,10 +118,6 @@
 	g.P("var _ ", contextPkg, ".Context")
 	g.P("var _ ", grpcPkg, ".ClientConn")
 	g.P()
-	g.P("func errUnimplemented(methodName string) error {")
-	g.P("\treturn ", errorPkg, ".Errorf(codes.Unimplemented, \"method %s not implemented\", methodName)")
-	g.P("}")
-	g.P()
 
 	// Assert version compatibility.
 	g.P("// This is a compile-time assertion to ensure that this generated file")
@@ -294,23 +290,22 @@
 	g.P()
 	// Unimplemented<service_name>Server's concrete methods
 	for _, method := range service.Method {
-		g.P(g.generateServerMethodConcrete(servName, method))
+		g.generateServerMethodConcrete(servName, method)
 	}
 	g.P()
 }
 
 // generateServerMethodConcrete returns unimplemented methods which ensure forward compatibility
-func (g *grpc) generateServerMethodConcrete(servName string, method *pb.MethodDescriptorProto) string {
+func (g *grpc) generateServerMethodConcrete(servName string, method *pb.MethodDescriptorProto) {
 	header := g.generateServerSignatureWithParamNames(servName, method)
-	implementation := fmt.Sprintf("func (*Unimplemented%sServer) %s {\n", servName, header)
-	implementation += fmt.Sprintf("\treturn ")
+	g.P("func (*Unimplemented", servName, "Server) ", header, " {")
+	var nilArg string
 	if !method.GetServerStreaming() && !method.GetClientStreaming() {
-		implementation += "nil, "
+		nilArg = "nil, "
 	}
-	origMethName := method.GetName()
-	methName := generator.CamelCase(origMethName)
-	implementation += fmt.Sprintf("errUnimplemented(%q)\n}", methName)
-	return implementation
+	methName := generator.CamelCase(method.GetName())
+	g.P("return ", nilArg, errorPkg, `.Errorf(codes.Unimplemented, "method `, methName, ` not implemented")`)
+	g.P("}")
 }
 
 // generateClientSignature returns the client-side signature for a method.
diff --git a/protoc-gen-go/testdata/deprecated/deprecated.pb.go b/protoc-gen-go/testdata/deprecated/deprecated.pb.go
index 9268b4c..2515c99 100644
--- a/protoc-gen-go/testdata/deprecated/deprecated.pb.go
+++ b/protoc-gen-go/testdata/deprecated/deprecated.pb.go
@@ -196,10 +196,6 @@
 var _ context.Context
 var _ grpc.ClientConn
 
-func errUnimplemented(methodName string) error {
-	return status.Errorf(codes.Unimplemented, "method %s not implemented", methodName)
-}
-
 // This is a compile-time assertion to ensure that this generated file
 // is compatible with the grpc package it is being compiled against.
 const _ = grpc.SupportPackageIsVersion4
@@ -247,7 +243,7 @@
 }
 
 func (*UnimplementedDeprecatedServiceServer) DeprecatedCall(ctx context.Context, req *DeprecatedRequest) (*DeprecatedResponse, error) {
-	return nil, errUnimplemented("DeprecatedCall")
+	return nil, status.Errorf(codes.Unimplemented, "method DeprecatedCall not implemented")
 }
 
 // Deprecated: Do not use.
diff --git a/protoc-gen-go/testdata/grpc/grpc.pb.go b/protoc-gen-go/testdata/grpc/grpc.pb.go
index 871ae72..76c9a20 100644
--- a/protoc-gen-go/testdata/grpc/grpc.pb.go
+++ b/protoc-gen-go/testdata/grpc/grpc.pb.go
@@ -181,10 +181,6 @@
 var _ context.Context
 var _ grpc.ClientConn
 
-func errUnimplemented(methodName string) error {
-	return status.Errorf(codes.Unimplemented, "method %s not implemented", methodName)
-}
-
 // This is a compile-time assertion to ensure that this generated file
 // is compatible with the grpc package it is being compiled against.
 const _ = grpc.SupportPackageIsVersion4
@@ -332,16 +328,16 @@
 }
 
 func (*UnimplementedTestServer) UnaryCall(ctx context.Context, req *SimpleRequest) (*SimpleResponse, error) {
-	return nil, errUnimplemented("UnaryCall")
+	return nil, status.Errorf(codes.Unimplemented, "method UnaryCall not implemented")
 }
 func (*UnimplementedTestServer) Downstream(req *SimpleRequest, srv Test_DownstreamServer) error {
-	return errUnimplemented("Downstream")
+	return status.Errorf(codes.Unimplemented, "method Downstream not implemented")
 }
 func (*UnimplementedTestServer) Upstream(srv Test_UpstreamServer) error {
-	return errUnimplemented("Upstream")
+	return status.Errorf(codes.Unimplemented, "method Upstream not implemented")
 }
 func (*UnimplementedTestServer) Bidi(srv Test_BidiServer) error {
-	return errUnimplemented("Bidi")
+	return status.Errorf(codes.Unimplemented, "method Bidi not implemented")
 }
 
 func RegisterTestServer(s *grpc.Server, srv TestServer) {