diff --git a/.github/workflows/github-actions.yml b/.github/workflows/github-actions.yml
index 458aefa..459f4f8 100644
--- a/.github/workflows/github-actions.yml
+++ b/.github/workflows/github-actions.yml
@@ -69,6 +69,10 @@
         chmod u+x /tmp/tools/license/license-header-checker
         /tmp/tools/license/license-header-checker -v -a -r -i vendor  /tmp/tools/license/license.txt . go  && [[ -z `git status -s` ]]
 
+    - name: format
+      run: |
+        gofmt -l -w . && [[ -z `git status -s` ]]
+        
     - name: Install go ci lint
       run: curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.27.0
 
diff --git a/boolean.go b/boolean.go
index ea303de..467eb8d 100644
--- a/boolean.go
+++ b/boolean.go
@@ -25,7 +25,7 @@
 // ::= 'T'
 // ::= 'F'
 func encBool(b []byte, v bool) []byte {
-	var c = BC_FALSE
+	c := BC_FALSE
 	if v {
 		c = BC_TRUE
 	}
diff --git a/codec.go b/codec.go
index 886e5f0..2df9e58 100644
--- a/codec.go
+++ b/codec.go
@@ -118,35 +118,35 @@
 // UnpackInt16 unpacks int16 from byte array
 //(0,2).unpack('n')
 func UnpackInt16(b []byte) int16 {
-	var arr = b[:2]
+	arr := b[:2]
 	return int16(binary.BigEndian.Uint16(arr))
 }
 
 // UnpackUint16 unpacks int16 from byte array
 //(0,2).unpack('n')
 func UnpackUint16(b []byte) uint16 {
-	var arr = b[:2]
+	arr := b[:2]
 	return binary.BigEndian.Uint16(arr)
 }
 
 // UnpackInt32 unpacks int32 from byte array
 //(0,4).unpack('N')
 func UnpackInt32(b []byte) int32 {
-	var arr = b[:4]
+	arr := b[:4]
 	return int32(binary.BigEndian.Uint32(arr))
 }
 
 // UnpackInt64 unpacks int64 from byte array
-//long (0,8).unpack('q>')
+// long (0,8).unpack('q>')
 func UnpackInt64(b []byte) int64 {
-	var arr = b[:8]
+	arr := b[:8]
 	return int64(binary.BigEndian.Uint64(arr))
 }
 
 // UnpackFloat64 unpacks float64 from byte array
-//Double (0,8).unpack('G)
+// Double (0,8).unpack('G)
 func UnpackFloat64(b []byte) float64 {
-	var arr = b[:8]
+	arr := b[:8]
 	return math.Float64frombits(binary.BigEndian.Uint64(arr))
 }
 
@@ -159,14 +159,14 @@
 	return v
 }
 
-//PackPtr pack a Ptr value
+// PackPtr pack a Ptr value
 func PackPtr(v reflect.Value) reflect.Value {
 	vv := reflect.New(v.Type())
 	vv.Elem().Set(v)
 	return vv
 }
 
-//UnpackPtrType unpack pointer type to original type
+// UnpackPtrType unpack pointer type to original type
 func UnpackPtrType(typ reflect.Type) reflect.Type {
 	for typ.Kind() == reflect.Ptr {
 		typ = typ.Elem()
@@ -268,7 +268,7 @@
 	return in, nil
 }
 
-//EnsureRawValue pack the interface with value, and make sure it's not a ref holder
+// EnsureRawValue pack the interface with value, and make sure it's not a ref holder
 func EnsureRawValue(in interface{}) reflect.Value {
 	if v, ok := in.(reflect.Value); ok {
 		if v.IsValid() {
@@ -295,7 +295,7 @@
 			return
 		}
 	}
-	//temporary process, only handle the same type of situation
+	// temporary process, only handle the same type of situation
 	if v.IsValid() && UnpackPtrType(dest.Type()) == UnpackPtrType(v.Type()) && dest.Kind() == reflect.Ptr && dest.CanSet() {
 		for dest.Type() != v.Type() {
 			v = PackPtr(v)
@@ -381,7 +381,7 @@
 	return v1.Pointer() == v2.Pointer()
 }
 
-//SetSlice set value into slice object
+// SetSlice set value into slice object
 func SetSlice(dest reflect.Value, objects interface{}) error {
 	if objects == nil {
 		return nil
@@ -422,7 +422,7 @@
 	return nil
 }
 
-//ConvertSliceValueType convert to slice of destination type
+// ConvertSliceValueType convert to slice of destination type
 func ConvertSliceValueType(destTyp reflect.Type, v reflect.Value) (reflect.Value, error) {
 	if destTyp == v.Type() {
 		return v, nil
diff --git a/codec_test.go b/codec_test.go
index 21c706f..a4cdd1b 100644
--- a/codec_test.go
+++ b/codec_test.go
@@ -25,7 +25,7 @@
 func TestPackUint16(t *testing.T) {
 	// var arr []byte
 	// t.Logf("0X%x\n", UnpackUint16(PackUint16(uint16(0xfedc), arr)))
-	var v = uint16(0xfedc)
+	v := uint16(0xfedc)
 	if r := UnpackUint16(PackUint16(v)); r != v {
 		t.Fatalf("v:0X%d, pack-unpack value:0X%x\n", v, r)
 	}
@@ -34,7 +34,7 @@
 func TestPackInt16(t *testing.T) {
 	// var arr []byte
 	// t.Logf("0X%x\n", UnpackInt16(PackInt16(int16(0x1234), arr)))
-	var v = int16(0x1234)
+	v := int16(0x1234)
 	if r := UnpackInt16(PackInt16(v)); r != v {
 		t.Fatalf("v:0X%d, pack-unpack value:0X%x\n", v, r)
 	}
@@ -43,7 +43,7 @@
 func TestPackInt32(t *testing.T) {
 	// var arr []byte
 	// t.Logf("0X%x\n", UnpackInt32(PackInt32(int32(0x12344678), arr)))
-	var v = int32(0x12344678)
+	v := int32(0x12344678)
 	if r := UnpackInt32(PackInt32(v)); r != v {
 		t.Fatalf("v:0X%d, pack-unpack value:0X%x\n", v, r)
 	}
@@ -52,7 +52,7 @@
 func TestPackInt64(t *testing.T) {
 	// var arr []byte
 	// t.Logf("0X%x\n", UnpackInt64(PackInt64(int64(0x1234567890abcdef), arr)))
-	var v = int64(0x1234567890abcdef)
+	v := int64(0x1234567890abcdef)
 	if r := UnpackInt64(PackInt64(v)); r != v {
 		t.Fatalf("v:0X%d, pack-unpack value:0X%x\n", v, r)
 	}
diff --git a/date.go b/date.go
index 2dae3b3..0b5329a 100644
--- a/date.go
+++ b/date.go
@@ -36,7 +36,6 @@
 // ::= x4a b7 b6 b5 b4 b3 b2 b1 b0
 // ::= x4b b3 b2 b1 b0       # minutes since epoch
 func encDateInMs(b []byte, i interface{}) []byte {
-
 	value := UnpackPtrValue(reflect.ValueOf(i))
 	vi := value.Interface().(time.Time)
 	if vi == ZeroDate {
diff --git a/date_test.go b/date_test.go
index c700cf5..7e1d36a 100644
--- a/date_test.go
+++ b/date_test.go
@@ -40,7 +40,7 @@
 	Date3   ***time.Time
 }
 
-//JavaClassName  java fully qualified path
+// JavaClassName  java fully qualified path
 func (DateDemo) JavaClassName() string {
 	return "test.model.DateDemo"
 }
@@ -135,7 +135,6 @@
 	assert.Equal(t, ZeroDate, *res.(*DateDemo).Date1)
 	assert.Equal(t, tz.Local().String(), (*res.(*DateDemo).Date2).String())
 	assert.Equal(t, tz.Local().String(), (*(*res.(*DateDemo).Date3)).String())
-
 }
 
 func TestDateNulJavaDecode(t *testing.T) {
@@ -147,7 +146,6 @@
 }
 
 func TestDateNilDecode(t *testing.T) {
-
 	doTestDateNull(t, "customReplyTypedFixedDateNull")
 }
 
diff --git a/encode.go b/encode.go
index 224d35d..b6d9aed 100644
--- a/encode.go
+++ b/encode.go
@@ -40,7 +40,7 @@
 
 // NewEncoder generate an encoder instance
 func NewEncoder() *Encoder {
-	var buffer = make([]byte, 64)
+	buffer := make([]byte, 64)
 
 	return &Encoder{
 		buffer: buffer[:0],
@@ -50,7 +50,7 @@
 
 // Clean clean the Encoder (room) for a new object encoding.
 func (e *Encoder) Clean() {
-	var buffer = make([]byte, 64)
+	buffer := make([]byte, 64)
 	e.classInfoList = nil
 	e.buffer = buffer[:0]
 	e.refMap = make(map[unsafe.Pointer]_refElem, 7)
diff --git a/encode_test.go b/encode_test.go
index c7f444a..d8f1aaa 100644
--- a/encode_test.go
+++ b/encode_test.go
@@ -59,7 +59,6 @@
 	}()
 
 	out, err := cmd.Output()
-
 	if err != nil {
 		t.Logf("get java result error: %v", err)
 		return "", err
diff --git a/hessian.go b/hessian.go
index cd9ab70..5686a1e 100644
--- a/hessian.go
+++ b/hessian.go
@@ -104,7 +104,6 @@
 
 // ReadHeader uses hessian codec to read dubbo header
 func (h *HessianCodec) ReadHeader(header *DubboHeader) error {
-
 	var err error
 
 	if h.reader.Size() < HEADER_LENGTH {
@@ -166,12 +165,10 @@
 	}
 
 	return perrors.WithStack(err)
-
 }
 
 // ReadBody uses hessian codec to read response body
 func (h *HessianCodec) ReadBody(rspObj interface{}) error {
-
 	if h.reader.Buffered() < h.bodyLen {
 		return ErrBodyNotEnough
 	}
diff --git a/hessian_test.go b/hessian_test.go
index 90cd4c4..9ee1469 100644
--- a/hessian_test.go
+++ b/hessian_test.go
@@ -53,7 +53,7 @@
 	return "com.test.casea"
 }
 
-//JavaClassName  java fully qualified path
+// JavaClassName  java fully qualified path
 func (c Case) JavaClassName() string {
 	return "com.test.case"
 }
diff --git a/java8_time.go b/java8_time.go
index 2b80121..ed19a7f 100644
--- a/java8_time.go
+++ b/java8_time.go
@@ -35,5 +35,4 @@
 	RegisterPOJO(&java8_time.OffsetDateTime{DateTime: java8_time.LocalDateTime{Date: java8_time.LocalDate{Year: 2020, Month: 6, Day: 16}, Time: java8_time.LocalTime{Hour: 6, Minute: 5, Second: 4, Nano: 3}}, Offset: java8_time.ZoneOffSet{Seconds: 7200}})
 	RegisterPOJO(&java8_time.OffsetTime{LocalTime: java8_time.LocalTime{Hour: 6, Minute: 5, Second: 4, Nano: 3}, ZoneOffset: java8_time.ZoneOffSet{Seconds: 7200}})
 	RegisterPOJO(&java8_time.ZonedDateTime{DateTime: java8_time.LocalDateTime{Date: java8_time.LocalDate{Year: 2020, Month: 6, Day: 16}, Time: java8_time.LocalTime{Hour: 6, Minute: 5, Second: 4, Nano: 3}}, Offset: java8_time.ZoneOffSet{Seconds: 7200}, ZoneId: "Z"})
-
 }
diff --git a/java8_time/period.go b/java8_time/period.go
index a95df3c..f9a413d 100644
--- a/java8_time/period.go
+++ b/java8_time/period.go
@@ -16,7 +16,7 @@
  */
 package java8_time
 
-//java8-time java.time.Period
+// java8-time java.time.Period
 type Period struct {
 	Days   int32 `hessian:"days"`
 	Months int32 `hessian:"months"`
diff --git a/java8_time/year.go b/java8_time/year.go
index 041e242..3f36b07 100644
--- a/java8_time/year.go
+++ b/java8_time/year.go
@@ -16,7 +16,7 @@
  */
 package java8_time
 
-//java8-time java.time.Year
+// java8-time java.time.Year
 type Year struct {
 	Year int32 `hessian:"year"`
 }
diff --git a/java8_time/year_month.go b/java8_time/year_month.go
index 3f07a13..73f6892 100644
--- a/java8_time/year_month.go
+++ b/java8_time/year_month.go
@@ -16,7 +16,7 @@
  */
 package java8_time
 
-//java8-time java.time.YearMonth
+// java8-time java.time.YearMonth
 type YearMonth struct {
 	Month int32 `hessian:"month"`
 	Year  int32 `hessian:"year"`
diff --git a/java8_time_test.go b/java8_time_test.go
index 9529c95..4851456 100644
--- a/java8_time_test.go
+++ b/java8_time_test.go
@@ -18,8 +18,9 @@
 package hessian
 
 import (
-	"github.com/apache/dubbo-go-hessian2/java8_time"
 	"testing"
+
+	"github.com/apache/dubbo-go-hessian2/java8_time"
 )
 
 func TestJava8Time(t *testing.T) {
diff --git a/java_collection.go b/java_collection.go
index d669d12..46a5c9f 100644
--- a/java_collection.go
+++ b/java_collection.go
@@ -58,13 +58,10 @@
 	return getCollectionSerialize(name) != nil
 }
 
-type JavaCollectionSerializer struct {
-}
+type JavaCollectionSerializer struct{}
 
 func (JavaCollectionSerializer) EncObject(e *Encoder, vv POJO) error {
-	var (
-		err error
-	)
+	var err error
 	v, ok := vv.(JavaCollectionObject)
 	if !ok {
 		return perrors.New("can not be converted into java collection object")
@@ -89,7 +86,7 @@
 }
 
 func (JavaCollectionSerializer) DecObject(d *Decoder, typ reflect.Type, cls *classInfo) (interface{}, error) {
-	//for the java impl of hessian encode collections as list, which will not be decoded as object in go impl, this method should not be called
+	// for the java impl of hessian encode collections as list, which will not be decoded as object in go impl, this method should not be called
 	return nil, perrors.New("unexpected collection decode call")
 }
 
diff --git a/java_exception/duplicate_format_flags_exception.go b/java_exception/duplicate_format_flags_exception.go
index b3358ae..c9f0759 100644
--- a/java_exception/duplicate_format_flags_exception.go
+++ b/java_exception/duplicate_format_flags_exception.go
@@ -34,7 +34,6 @@
 	} else {
 		return e.DetailMessage + " flags=" + e.Flags
 	}
-
 }
 
 // JavaClassName  java fully qualified path
diff --git a/java_exception/exception.go b/java_exception/exception.go
index f5a00e9..b8a8866 100644
--- a/java_exception/exception.go
+++ b/java_exception/exception.go
@@ -50,7 +50,7 @@
 	return e.DetailMessage
 }
 
-//JavaClassName  java fully qualified path
+// JavaClassName  java fully qualified path
 func (Throwable) JavaClassName() string {
 	return "java.lang.Throwable"
 }
@@ -80,7 +80,7 @@
 	return e.DetailMessage
 }
 
-//JavaClassName  java fully qualified path
+// JavaClassName  java fully qualified path
 func (Exception) JavaClassName() string {
 	return "java.lang.Exception"
 }
@@ -101,7 +101,7 @@
 	LineNumber     int32
 }
 
-//JavaClassName  java fully qualified path
+// JavaClassName  java fully qualified path
 func (StackTraceElement) JavaClassName() string {
 	return "java.lang.StackTraceElement"
 }
@@ -114,7 +114,7 @@
 	Name string
 }
 
-//JavaClassName  java fully qualified path
+// JavaClassName  java fully qualified path
 func (Method) JavaClassName() string {
 	return "java.lang.reflect.Method"
 }
diff --git a/java_exception/invalid_class_exception.go b/java_exception/invalid_class_exception.go
index ca97120..593b407 100644
--- a/java_exception/invalid_class_exception.go
+++ b/java_exception/invalid_class_exception.go
@@ -31,8 +31,10 @@
 
 // NewInvalidClassException is the constructor
 func NewInvalidClassException(classname string, detailMessage string) *InvalidClassException {
-	return &InvalidClassException{DetailMessage: detailMessage, StackTrace: []StackTraceElement{},
-		Classname: classname}
+	return &InvalidClassException{
+		DetailMessage: detailMessage, StackTrace: []StackTraceElement{},
+		Classname: classname,
+	}
 }
 
 // Error output error message
@@ -41,7 +43,6 @@
 		return e.DetailMessage
 	}
 	return fmt.Sprintf("%+v; %+v", e.Classname, e.DetailMessage)
-
 }
 
 // JavaClassName  java fully qualified path
diff --git a/java_exception/utf_data_format_exception.go b/java_exception/utf_data_format_exception.go
index 8c6d22f..cb8c86d 100644
--- a/java_exception/utf_data_format_exception.go
+++ b/java_exception/utf_data_format_exception.go
@@ -17,7 +17,7 @@
 
 package java_exception
 
-//UTFDataFormatException represents an exception of the same name in java
+// UTFDataFormatException represents an exception of the same name in java
 type UTFDataFormatException struct {
 	SerialVersionUID     int64
 	DetailMessage        string
@@ -31,12 +31,12 @@
 	return &UTFDataFormatException{DetailMessage: detailMessage}
 }
 
-//Error output error message
+// Error output error message
 func (e UTFDataFormatException) Error() string {
 	return e.DetailMessage
 }
 
-//JavaClassName  java fully qualified path
+// JavaClassName  java fully qualified path
 func (UTFDataFormatException) JavaClassName() string {
 	return "java.io.UTFDataFormatException"
 }
diff --git a/java_exception/write_aborted_exception.go b/java_exception/write_aborted_exception.go
index bbaa1e2..681d266 100644
--- a/java_exception/write_aborted_exception.go
+++ b/java_exception/write_aborted_exception.go
@@ -29,8 +29,10 @@
 
 // NewWriteAbortedException is the constructor
 func NewWriteAbortedException(detailMessage string, detail Throwabler) *WriteAbortedException {
-	return &WriteAbortedException{DetailMessage: detailMessage, StackTrace: nil,
-		Detail: detail}
+	return &WriteAbortedException{
+		DetailMessage: detailMessage, StackTrace: nil,
+		Detail: detail,
+	}
 }
 
 // Error output error message
diff --git a/java_sql_time.go b/java_sql_time.go
index 51e3abf..ab4c022 100644
--- a/java_sql_time.go
+++ b/java_sql_time.go
@@ -44,12 +44,10 @@
 }
 
 // JavaSqlTimeSerializer used to encode & decode java.sql.Time & java.sql.Date
-type JavaSqlTimeSerializer struct {
-}
+type JavaSqlTimeSerializer struct{}
 
 // nolint
 func (JavaSqlTimeSerializer) EncObject(e *Encoder, vv POJO) error {
-
 	var (
 		i         int
 		idx       int
@@ -117,7 +115,6 @@
 
 // nolint
 func (JavaSqlTimeSerializer) DecObject(d *Decoder, typ reflect.Type, cls *classInfo) (interface{}, error) {
-
 	if typ.Kind() != reflect.Struct {
 		return nil, perrors.Errorf("wrong type expect Struct but get:%s", typ.String())
 	}
diff --git a/java_unknown_exception.go b/java_unknown_exception.go
index 0663c4f..035fb94 100644
--- a/java_unknown_exception.go
+++ b/java_unknown_exception.go
@@ -29,7 +29,6 @@
 var exceptionCheckMutex sync.Mutex
 
 func checkAndGetException(cls *classInfo) (*structInfo, bool) {
-
 	if len(cls.fieldNameList) < 4 {
 		return nil, false
 	}
@@ -37,7 +36,7 @@
 		throwable *structInfo
 		ok        bool
 	)
-	var count = 0
+	count := 0
 	for _, item := range cls.fieldNameList {
 		if item == "detailMessage" || item == "suppressedExceptions" || item == "stackTrace" || item == "cause" {
 			count++
@@ -77,7 +76,7 @@
 	return fmt.Sprintf("throw %v : %v", e.name, e.DetailMessage)
 }
 
-//JavaClassName  java fully qualified path
+// JavaClassName  java fully qualified path
 func (e UnknownException) JavaClassName() string {
 	return e.name
 }
diff --git a/java_unknown_exception_test.go b/java_unknown_exception_test.go
index 20c8e6c..8f2743e 100644
--- a/java_unknown_exception_test.go
+++ b/java_unknown_exception_test.go
@@ -20,6 +20,7 @@
 import (
 	"testing"
 )
+
 import (
 	"github.com/stretchr/testify/assert"
 )
diff --git a/list.go b/list.go
index 938d567..c3c761c 100644
--- a/list.go
+++ b/list.go
@@ -29,6 +29,7 @@
 import (
 	perrors "github.com/pkg/errors"
 )
+
 import (
 	"github.com/apache/dubbo-go-hessian2/java_exception"
 )
@@ -148,9 +149,7 @@
 // ::= 'V' type int value*   # fixed-length list
 // ::= [x70-77] type value*  # fixed-length typed list
 func (e *Encoder) writeTypedList(v interface{}) error {
-	var (
-		err error
-	)
+	var err error
 
 	value := reflect.ValueOf(v)
 
@@ -162,7 +161,7 @@
 
 	value = UnpackPtrValue(value)
 	totype := UnpackPtrType(value.Type().Elem()).String()
-	var typeName = getListTypeName(totype)
+	typeName := getListTypeName(totype)
 	if typeName == "" {
 		return perrors.New("no this type name: " + totype)
 	}
@@ -185,9 +184,7 @@
 // ::= x58 int value*        # fixed-length untyped list
 // ::= [x78-7f] value*       # fixed-length untyped list
 func (e *Encoder) writeUntypedList(v interface{}) error {
-	var (
-		err error
-	)
+	var err error
 
 	value := reflect.ValueOf(v)
 
@@ -260,7 +257,7 @@
 	return tag == BC_LIST_FIXED_UNTYPED || tag == BC_LIST_VARIABLE_UNTYPED || listFixedUntypedLenTag(tag)
 }
 
-//decList read list
+// decList read list
 func (d *Decoder) decList(flag int32) (interface{}, error) {
 	var (
 		err error
@@ -378,7 +375,7 @@
 	return holder, nil
 }
 
-//readUntypedList read untyped list
+// readUntypedList read untyped list
 // Include 3 formats:
 //      ::= x57 value* 'Z'        # variable-length untyped list
 //      ::= x58 int value*        # fixed-length untyped list
diff --git a/list_test.go b/list_test.go
index 7fe9668..0e96ae6 100644
--- a/list_test.go
+++ b/list_test.go
@@ -68,7 +68,6 @@
 	res, err = d.Decode()
 	assert.NoError(t, err)
 	assert.True(t, reflect.DeepEqual(res, list_2))
-
 }
 
 func TestList(t *testing.T) {
@@ -112,14 +111,20 @@
 	testDecodeFramework(t, "customReplyTypedFixedList_boolean", []bool{true, false, true})
 	testDecodeFramework(t, "customReplyTypedVariableList_boolean", []bool{true, false, true})
 
-	testDecodeFramework(t, "customReplyTypedFixedList_date", []time.Time{time.Unix(1560864, 0),
-		time.Unix(1560864, 0), time.Unix(1560864, 0)})
-	testDecodeFramework(t, "customReplyTypedVariableList_date", []time.Time{time.Unix(1560864, 0),
-		time.Unix(1560864, 0), time.Unix(1560864, 0)})
+	testDecodeFramework(t, "customReplyTypedFixedList_date", []time.Time{
+		time.Unix(1560864, 0),
+		time.Unix(1560864, 0), time.Unix(1560864, 0),
+	})
+	testDecodeFramework(t, "customReplyTypedVariableList_date", []time.Time{
+		time.Unix(1560864, 0),
+		time.Unix(1560864, 0), time.Unix(1560864, 0),
+	})
 
 	testDecodeFramework(t, "customReplyTypedFixedList_arrays", [][][]int32{{{1, 2, 3}, {4, 5, 6, 7}}, {{8, 9, 10}, {11, 12, 13, 14}}})
-	testDecodeFramework(t, "customReplyTypedFixedList_A0arrays", [][][]*A0{{{new(A0), new(A0), new(A0)}, {new(A0), new(A0), new(A0), nil}},
-		{{new(A0)}, {new(A0)}}})
+	testDecodeFramework(t, "customReplyTypedFixedList_A0arrays", [][][]*A0{
+		{{new(A0), new(A0), new(A0)}, {new(A0), new(A0), new(A0), nil}},
+		{{new(A0)}, {new(A0)}},
+	})
 
 	testDecodeFramework(t, "customReplyTypedFixedList_Test", &TypedListTest{A: &A0{}, List: [][]*A0{{new(A0), new(A0)}, {new(A0), new(A0)}}, List1: [][]*A1{{new(A1), new(A1)}, {new(A1), new(A1)}}})
 
@@ -170,12 +175,16 @@
 	testJavaDecode(t, "customArgTypedFixedList_boolean_7", []bool{true, false, true, false, true, false, true})
 
 	testJavaDecode(t, "customArgTypedFixedList_date_0", []time.Time{})
-	testJavaDecode(t, "customArgTypedFixedList_date_3", []time.Time{time.Unix(1560864, 0),
-		time.Unix(1560864, 0), time.Unix(1560864, 0)})
+	testJavaDecode(t, "customArgTypedFixedList_date_3", []time.Time{
+		time.Unix(1560864, 0),
+		time.Unix(1560864, 0), time.Unix(1560864, 0),
+	})
 
 	testJavaDecode(t, "customArgTypedFixedList_arrays", [][][]int32{{{1, 2, 3}, {4, 5, 6, 7}}, {{8, 9, 10}, {11, 12, 13, 14}}})
-	testJavaDecode(t, "customArgTypedFixedList_A0arrays", [][][]*A0{{{new(A0), new(A0), new(A0)}, {new(A0), new(A0), new(A0), nil}},
-		{{new(A0)}, {new(A0)}}})
+	testJavaDecode(t, "customArgTypedFixedList_A0arrays", [][][]*A0{
+		{{new(A0), new(A0), new(A0)}, {new(A0), new(A0), new(A0), nil}},
+		{{new(A0)}, {new(A0)}},
+	})
 
 	testJavaDecode(t, "customArgTypedFixedList_Test", &TypedListTest{A: new(A0), List: [][]*A0{{new(A0), new(A0)}, {new(A0), new(A0)}}, List1: [][]*A1{{new(A1), new(A1)}, {new(A1), new(A1)}}})
 
@@ -188,7 +197,7 @@
 	List1 [][]*A1
 }
 
-//JavaClassName  java fully qualified path
+// JavaClassName  java fully qualified path
 func (*TypedListTest) JavaClassName() string {
 	return "test.TypedListTest"
 }
diff --git a/map.go b/map.go
index 2b26d30..0d83d4e 100644
--- a/map.go
+++ b/map.go
@@ -158,7 +158,7 @@
 		entryValue interface{}
 	)
 
-	//tag, _ = d.readBufByte()
+	// tag, _ = d.readBufByte()
 	tag, err = d.ReadByte()
 	// check error
 	if err != nil {
@@ -179,7 +179,7 @@
 	case BC_MAP:
 		d.decString(TAG_READ) // read map type , ignored
 	case BC_MAP_UNTYPED:
-		//do nothing
+		// do nothing
 	default:
 		return perrors.Errorf("expect map header, but get %x", tag)
 	}
@@ -189,7 +189,7 @@
 	m = PackPtr(m)
 	d.appendRefs(m)
 
-	//read key and value
+	// read key and value
 	for {
 		entryKey, err = d.DecodeValue()
 		if err != nil {
diff --git a/map_test.go b/map_test.go
index b63827d..3a84aef 100644
--- a/map_test.go
+++ b/map_test.go
@@ -81,11 +81,11 @@
 	testDecodeFramework(t, "replyTypedMap_0", map[interface{}]interface{}{})
 	testDecodeFramework(t, "replyTypedMap_1", map[interface{}]interface{}{"a": int32(0)})
 	testDecodeFramework(t, "replyTypedMap_2", map[interface{}]interface{}{int32(0): "a", int32(1): "b"})
-	//testDecodeFramework(t, "replyTypedMap_3", []interface{}{})
+	// testDecodeFramework(t, "replyTypedMap_3", []interface{}{})
 	testDecodeFramework(t, "replyUntypedMap_0", map[interface{}]interface{}{})
 	testDecodeFramework(t, "replyUntypedMap_1", map[interface{}]interface{}{"a": int32(0)})
 	testDecodeFramework(t, "replyUntypedMap_2", map[interface{}]interface{}{int32(0): "a", int32(1): "b"})
-	//testDecodeFramework(t, "replyTypedMap_3", []interface{}{})
+	// testDecodeFramework(t, "replyTypedMap_3", []interface{}{})
 }
 
 func TestMapEncode(t *testing.T) {
diff --git a/null_test.go b/null_test.go
index e75d900..2e0bab8 100644
--- a/null_test.go
+++ b/null_test.go
@@ -22,7 +22,7 @@
 )
 
 func TestEncNull(t *testing.T) {
-	var e = NewEncoder()
+	e := NewEncoder()
 	e.Encode(nil)
 	if e.Buffer() == nil {
 		t.Fail()
diff --git a/object.go b/object.go
index 451cd54..0172162 100644
--- a/object.go
+++ b/object.go
@@ -646,7 +646,7 @@
 			return nil, perrors.Wrap(decErr, "decObject->decClassDef byte double")
 		}
 		cls, _ = clsDef.(*classInfo)
-		//add to slice
+		// add to slice
 		d.appendClsDef(cls)
 
 		return d.DecodeValue()
diff --git a/object_test.go b/object_test.go
index 7e59157..ebc5b5d 100644
--- a/object_test.go
+++ b/object_test.go
@@ -194,8 +194,8 @@
 		Person: person,
 		CurJob: JOB{Title: "cto", Company: "facebook"},
 		Jobs: []JOB{
-			JOB{Title: "manager", Company: "google"},
-			JOB{Title: "ceo", Company: "microsoft"},
+			{Title: "manager", Company: "google"},
+			{Title: "ceo", Company: "microsoft"},
 		},
 	}
 
@@ -611,7 +611,7 @@
 	DogName string `hessian:"-"`
 }
 
-//JavaClassName  java fully qualified path
+// JavaClassName  java fully qualified path
 func (dog Dog) JavaClassName() string {
 	return "test.Dog"
 }
@@ -622,7 +622,7 @@
 	Gender string
 }
 
-//JavaClassName  java fully qualified path
+// JavaClassName  java fully qualified path
 func (dog *DogAll) JavaClassName() string {
 	return "test.DogAll"
 }
@@ -655,6 +655,7 @@
 		}
 	})
 }
+
 func TestIssue150_EmbedStructJavaDecode(t *testing.T) {
 	RegisterPOJO(&Dog{})
 	RegisterPOJO(&Animal{})
diff --git a/ref.go b/ref.go
index 9900a7a..09cd380 100644
--- a/ref.go
+++ b/ref.go
@@ -84,7 +84,7 @@
 	return holder
 }
 
-//encRef encode ref index
+// encRef encode ref index
 func encRef(b []byte, index int) []byte {
 	return encInt32(append(b, BC_REF), int32(index))
 }
@@ -169,7 +169,7 @@
 
 		if len(d.refs) <= int(i) {
 			return nil, nil
-			//return nil, ErrIllegalRefIndex
+			// return nil, ErrIllegalRefIndex
 		}
 		// return the exact ref object, which maybe a _refHolder
 		return d.refs[i], nil
diff --git a/ref_test.go b/ref_test.go
index b3cb62f..59adcbf 100644
--- a/ref_test.go
+++ b/ref_test.go
@@ -32,7 +32,7 @@
 	Next     *circular
 }
 
-//JavaClassName  java fully qualified path
+// JavaClassName  java fully qualified path
 func (circular) JavaClassName() string {
 	return "circular"
 }
@@ -76,7 +76,7 @@
 	Tags      map[string]*personT
 }
 
-//JavaClassName  java fully qualified path
+// JavaClassName  java fully qualified path
 func (personT) JavaClassName() string {
 	return "person"
 }
@@ -181,7 +181,7 @@
 	assert.Equal(t, "p5", d5.Name)
 	assert.Equal(t, "p6", d6.Name)
 
-	//value equal
+	// value equal
 	assert.True(t, reflect.DeepEqual(d3.Relations, d4.Relations))
 
 	if d4.Marks == nil {
diff --git a/request.go b/request.go
index 032fbc8..6d0b9ee 100644
--- a/request.go
+++ b/request.go
@@ -265,7 +265,6 @@
 
 // hessian decode request body
 func unpackRequestBody(decoder *Decoder, reqObj interface{}) error {
-
 	if decoder == nil {
 		return perrors.Errorf("@decoder is nil")
 	}
diff --git a/response.go b/response.go
index 68f7c6b..2202c86 100644
--- a/response.go
+++ b/response.go
@@ -66,9 +66,7 @@
 // https://github.com/apache/dubbo/blob/dubbo-2.7.1/dubbo-remoting/dubbo-remoting-api/src/main/java/org/apache/dubbo/remoting/exchange/codec/ExchangeCodec.java#L256
 // hessian encode response
 func packResponse(header DubboHeader, ret interface{}) ([]byte, error) {
-	var (
-		byteArray []byte
-	)
+	var byteArray []byte
 
 	response := EnsureResponse(ret)
 
@@ -148,7 +146,6 @@
 	// byteArray{body length}
 	binary.BigEndian.PutUint32(byteArray[12:], uint32(pkgLen-HEADER_LENGTH))
 	return byteArray, nil
-
 }
 
 // hessian decode response body
@@ -361,7 +358,7 @@
 	if len(version) == 0 {
 		return 0
 	}
-	var v = 0
+	v := 0
 	varr := strings.Split(version, ".")
 	length := len(varr)
 	for key, value := range varr {
diff --git a/response_test.go b/response_test.go
index 7299389..7632657 100644
--- a/response_test.go
+++ b/response_test.go
@@ -92,7 +92,7 @@
 	var s1r []string
 	doTestReflectResponse(t, s1, &s1r)
 
-	s2 := []rr{rr{"dubbo", 666}, rr{"go", 999}}
+	s2 := []rr{{"dubbo", 666}, {"go", 999}}
 	var s2r []rr
 	doTestReflectResponse(t, s2, &s2r)
 
@@ -217,5 +217,4 @@
 
 	v = version2Int("2.1.3.4.5")
 	assert.Equal(t, 201030405, v)
-
 }
diff --git a/serialize_test.go b/serialize_test.go
index f521a18..4d602c5 100644
--- a/serialize_test.go
+++ b/serialize_test.go
@@ -66,7 +66,7 @@
 
 func TestEncodeDecodeInteger(t *testing.T) {
 	var bigInt bigInteger
-	//bigInt := new(bigInteger)
+	// bigInt := new(bigInteger)
 	_ = bigInt.FromString("100256")
 	e := NewEncoder()
 	err := e.Encode(bigInt)
diff --git a/string_test.go b/string_test.go
index fe034be..dbac7c5 100644
--- a/string_test.go
+++ b/string_test.go
@@ -195,7 +195,6 @@
 
 		decodePool.Put(d)
 	}
-
 }
 
 func TestStringEmoji(t *testing.T) {
