Before using protoc-gen-go-hessian2, make sure you have the following prerequisites installed on your system:
- Go (version 1.17 or higher)
- Protocol Buffers (version 3.0 or higher)
To install protoc-gen-go-hessian2, you can use go install:
go install github.com/dubbogo/protoc-gen-go-hessian2Or you can clone this repository and build it manually:
git clone github.com/dubbogo/protoc-gen-go-hessian2
cd protoc-gen-go-hessian2
go buildTo generate Hessian2 code using protoc-gen-go-hessian2, you can use the following command:
protoc -I ./ \
--go-hessian2_out=./ --go-hessian2_opt=paths=source_relative \
./greet.protoThe --go-hessian2_out option specifies the output directory for the generated code,
and --go-hessian2_opt=paths=source_relative sets the output path to be relative to the source file.
To generate Hessian2 code for a simple message, you can create a .proto file with the following content:
syntax = "proto3";
package greet;
option go_package = "some_path/greet;greet";
import "unified_idl_extend/unified_idl_extend.proto";
message GreetRequest {
string name = 1;
option (unified_idl_extend.message_extend) = {
java_class_name: "org.apache.greet.GreetRequest";
};
}
message GreetResponse {
string greeting = 1;
option (unified_idl_extend.message_extend) = {
java_class_name: "org.apache.greet.GreetResponse";
};
}Note that you need to import the unified_idl_extend package and extend the message with the message_extend option
and set java_class_name to the corresponding Java class name.
Then, you can run the following command to generate the Hessian2 code:
protoc -I ./ \
--go-hessian2_out=./ --go-hessian2_opt=paths=source_relative \
./greet.protoThis will generate the greet.hessian2.go file in the same directory as your greet.proto file:
.
├── greet.hessian2.go
├── greet.proto
└── unified_idl_extend
├── unified_idl_extend.pb.go
└── unified_idl_extend.protoThe content of the greet.hessian2.go file will be:
// Code generated by protoc-gen-go-dubbo. DO NOT EDIT.
// Source: greet.proto
// Package: greet
package greet
import (
dubbo_go_hessian2 "github.com/apache/dubbo-go-hessian2"
)
type GreetRequest struct {
Name string
}
func (x *GreetRequest) JavaClassName() string {
return "org.apache.greet.GreetRequest"
}
func (x *GreetRequest) String() string {
e := dubbo_go_hessian2.NewEncoder()
err := e.Encode(x)
if err != nil {
return ""
}
return string(e.Buffer())
}
func (x *GreetRequest) GetName() string {
if x != nil {
return x.Name
}
return ""
}
type GreetResponse struct {
Greeting string
}
func (x *GreetResponse) JavaClassName() string {
return "org.apache.greet.GreetResponse"
}
func (x *GreetResponse) String() string {
e := dubbo_go_hessian2.NewEncoder()
err := e.Encode(x)
if err != nil {
return ""
}
return string(e.Buffer())
}
func (x *GreetResponse) GetGreeting() string {
if x != nil {
return x.Greeting
}
return ""
}
func init() {
dubbo_go_hessian2.RegisterPOJO(new(GreetRequest))
dubbo_go_hessian2.RegisterPOJO(new(GreetResponse))
}