func (i *invocation) Recycle() {
	i.zero()
	invocationPool.Put(i)
}
Recycle reuses the invocation.
package rpcinfo
import (
	"sync"
	"sync/atomic"
)
var (
	invocationPool sync.Pool
	globalSeqID    int32 = 0
)
func init() {
	invocationPool.New = newInvocation
}
type InvocationSetter interface {
	SetPackageName(name string)
	SetServiceName(name string)
	SetMethodName(name string)
	SetSeqID(seqID int32)
}
type invocation struct {
	packageName string
	serviceName string
	methodName  string
	seqID       int32
}
func NewInvocation(service, method string, pkgOpt ...string) Invocation {
	ivk := invocationPool.Get().(*invocation)
	ivk.seqID = genSeqID()
	ivk.serviceName = service
	ivk.methodName = method
	if len(pkgOpt) > 0 {
		ivk.packageName = pkgOpt[0]
	}
	return ivk
}
func NewServerInvocation() Invocation {
	ivk := invocationPool.Get().(*invocation)
	return ivk
}
func genSeqID() int32 {
	id := atomic.AddInt32(&globalSeqID, 1)
	if id == 0 {
		id = atomic.AddInt32(&globalSeqID, 1)
	}
	return id
}
func newInvocation() interface{} {
	return &invocation{}
}
func (i *invocation) SeqID() int32 {
	return i.seqID
}
func (i *invocation) SetSeqID(seqID int32) {
	i.seqID = seqID
}
func (i *invocation) PackageName() string {
	return i.packageName
}
func (i *invocation) SetPackageName(name string) {
	i.packageName = name
}
func (i *invocation) ServiceName() string {
	return i.serviceName
}
func (i *invocation) SetServiceName(name string) {
	i.serviceName = name
}
func (i *invocation) MethodName() string {
	return i.methodName
}
func (i *invocation) SetMethodName(name string) {
	i.methodName = name
}