diff --git a/client/rowrecord_test.go b/client/rowrecord_test.go
index 145633e..a827f62 100644
--- a/client/rowrecord_test.go
+++ b/client/rowrecord_test.go
@@ -38,13 +38,13 @@
 			name: "GetFields",
 			fields: fields{
 				timestamp: 0,
-				fields: []*Field{&Field{
+				fields: []*Field{{
 					dataType: FLOAT,
 					name:     "temperature",
 					value:    0.1,
 				}},
 			},
-			want: []*Field{&Field{
+			want: []*Field{{
 				dataType: FLOAT,
 				name:     "temperature",
 				value:    0.1,
diff --git a/client/rpcdataset.go b/client/rpcdataset.go
index 829c15a..6601dca 100644
--- a/client/rpcdataset.go
+++ b/client/rpcdataset.go
@@ -115,23 +115,18 @@
 			case BOOLEAN:
 				s.values[i] = valueBuffer[:1]
 				s.queryDataSet.ValueList[i] = valueBuffer[1:]
-				break
 			case INT32:
 				s.values[i] = valueBuffer[:4]
 				s.queryDataSet.ValueList[i] = valueBuffer[4:]
-				break
 			case INT64:
 				s.values[i] = valueBuffer[:8]
 				s.queryDataSet.ValueList[i] = valueBuffer[8:]
-				break
 			case FLOAT:
 				s.values[i] = valueBuffer[:4]
 				s.queryDataSet.ValueList[i] = valueBuffer[4:]
-				break
 			case DOUBLE:
 				s.values[i] = valueBuffer[:8]
 				s.queryDataSet.ValueList[i] = valueBuffer[8:]
-				break
 			case TEXT:
 				length := bytesToInt32(valueBuffer[:4])
 				s.values[i] = valueBuffer[4 : 4+length]
@@ -445,7 +440,14 @@
 		return false, errClosed
 	}
 	s.rowsIndex = 0
-	req := rpc.TSFetchResultsReq{s.sessionId, s.sql, s.fetchSize, s.queryId, true, s.timeoutMs}
+	req := rpc.TSFetchResultsReq{
+		SessionId: s.sessionId,
+		Statement: s.sql,
+		FetchSize: s.fetchSize,
+		QueryId:   s.queryId,
+		IsAlign:   true,
+		Timeout:   s.timeoutMs,
+	}
 	resp, err := s.client.FetchResults(context.Background(), &req)
 
 	if err != nil {
@@ -478,7 +480,8 @@
 			QueryId:   &s.queryId,
 		}
 
-		status, err := s.client.CloseOperation(context.Background(), closeRequest)
+		var status *rpc.TSStatus
+		status, err = s.client.CloseOperation(context.Background(), closeRequest)
 		if err == nil {
 			err = VerifySuccess(status)
 		}
diff --git a/client/rpcdataset_test.go b/client/rpcdataset_test.go
index c5c736f..a8a493d 100644
--- a/client/rpcdataset_test.go
+++ b/client/rpcdataset_test.go
@@ -539,27 +539,27 @@
 			want: &RowRecord{
 				timestamp: 0,
 				fields: []*Field{
-					&Field{
+					{
 						name:     "root.ln.device1.restart_count",
 						dataType: INT32,
 						value:    int32(1),
-					}, &Field{
+					}, {
 						name:     "root.ln.device1.price",
 						dataType: DOUBLE,
 						value:    float64(1988.2),
-					}, &Field{
+					}, {
 						name:     "root.ln.device1.tick_count",
 						dataType: INT64,
 						value:    int64(3333333),
-					}, &Field{
+					}, {
 						name:     "root.ln.device1.temperature",
 						dataType: FLOAT,
 						value:    float32(12.1),
-					}, &Field{
+					}, {
 						name:     "root.ln.device1.description",
 						dataType: TEXT,
 						value:    string("Test Device 1"),
-					}, &Field{
+					}, {
 						name:     "root.ln.device1.status",
 						dataType: BOOLEAN,
 						value:    bool(true),
diff --git a/client/session.go b/client/session.go
index 43fae9d..794c028 100644
--- a/client/session.go
+++ b/client/session.go
@@ -39,7 +39,7 @@
 	DefaultFetchSize = 1024
 )
 
-var lengthError = errors.New("deviceIds, times, measurementsList and valuesList's size should be equal")
+var errLength = errors.New("deviceIds, times, measurementsList and valuesList's size should be equal")
 
 type Config struct {
 	Host      string
@@ -54,7 +54,6 @@
 	config             *Config
 	client             *rpc.TSIServiceClient
 	sessionId          int64
-	isClose            bool
 	trans              thrift.TTransport
 	requestStatementId int64
 }
@@ -484,7 +483,7 @@
 	timestamps []int64) (*rpc.TSInsertRecordsReq, error) {
 	length := len(deviceIds)
 	if length != len(timestamps) || length != len(measurements) || length != len(values) {
-		return nil, lengthError
+		return nil, errLength
 	}
 	request := rpc.TSInsertRecordsReq{
 		SessionId:        s.sessionId,
@@ -550,12 +549,11 @@
 				return nil, fmt.Errorf("values[%d] %v(%v) must be float64", i, v, reflect.TypeOf(v))
 			}
 		case TEXT:
-			switch v.(type) {
+			switch s := v.(type) {
 			case string:
-				text := v.(string)
-				size := len(text)
+				size := len(s)
 				binary.Write(buff, binary.BigEndian, int32(size))
-				binary.Write(buff, binary.BigEndian, []byte(text))
+				binary.Write(buff, binary.BigEndian, []byte(s))
 			default:
 				return nil, fmt.Errorf("values[%d] %v(%v) must be string", i, v, reflect.TypeOf(v))
 			}
diff --git a/client/tablet.go b/client/tablet.go
index 20050c4..4a89835 100644
--- a/client/tablet.go
+++ b/client/tablet.go
@@ -84,77 +84,77 @@
 
 func (t *Tablet) SetValueAt(value interface{}, columnIndex, rowIndex int) error {
 	if value == nil {
-		return errors.New("Illegal argument value can't be nil")
+		return errors.New("illegal argument value can't be nil")
 	}
 
 	if columnIndex < 0 || columnIndex > len(t.measurementSchemas) {
-		return fmt.Errorf("Illegal argument columnIndex %d", columnIndex)
+		return fmt.Errorf("illegal argument columnIndex %d", columnIndex)
 	}
 
 	if rowIndex < 0 || rowIndex > int(t.rowCount) {
-		return fmt.Errorf("Illegal argument rowIndex %d", rowIndex)
+		return fmt.Errorf("illegal argument rowIndex %d", rowIndex)
 	}
 
 	switch t.measurementSchemas[columnIndex].DataType {
 	case BOOLEAN:
 		values := t.values[columnIndex].([]bool)
-		switch value.(type) {
+		switch v := value.(type) {
 		case bool:
-			values[rowIndex] = value.(bool)
+			values[rowIndex] = v
 		case *bool:
-			values[rowIndex] = *value.(*bool)
+			values[rowIndex] = *v
 		default:
-			return fmt.Errorf("Illegal argument value %v %v", value, reflect.TypeOf(value))
+			return fmt.Errorf("illegal argument value %v %v", value, reflect.TypeOf(value))
 		}
 	case INT32:
 		values := t.values[columnIndex].([]int32)
-		switch value.(type) {
+		switch v := value.(type) {
 		case int32:
-			values[rowIndex] = value.(int32)
+			values[rowIndex] = v
 		case *int32:
-			values[rowIndex] = *value.(*int32)
+			values[rowIndex] = *v
 		default:
-			return fmt.Errorf("Illegal argument value %v %v", value, reflect.TypeOf(value))
+			return fmt.Errorf("illegal argument value %v %v", value, reflect.TypeOf(value))
 		}
 	case INT64:
 		values := t.values[columnIndex].([]int64)
-		switch value.(type) {
+		switch v := value.(type) {
 		case int64:
-			values[rowIndex] = value.(int64)
+			values[rowIndex] = v
 		case *int64:
-			values[rowIndex] = *value.(*int64)
+			values[rowIndex] = *v
 		default:
-			return fmt.Errorf("Illegal argument value %v %v", value, reflect.TypeOf(value))
+			return fmt.Errorf("illegal argument value %v %v", value, reflect.TypeOf(value))
 		}
 	case FLOAT:
 		values := t.values[columnIndex].([]float32)
-		switch value.(type) {
+		switch v := value.(type) {
 		case float32:
-			values[rowIndex] = value.(float32)
+			values[rowIndex] = v
 		case *float32:
-			values[rowIndex] = *value.(*float32)
+			values[rowIndex] = *v
 		default:
-			return fmt.Errorf("Illegal argument value %v %v", value, reflect.TypeOf(value))
+			return fmt.Errorf("illegal argument value %v %v", value, reflect.TypeOf(value))
 		}
 	case DOUBLE:
 		values := t.values[columnIndex].([]float64)
-		switch value.(type) {
+		switch v := value.(type) {
 		case float64:
-			values[rowIndex] = value.(float64)
+			values[rowIndex] = v
 		case *float64:
-			values[rowIndex] = *value.(*float64)
+			values[rowIndex] = *v
 		default:
-			return fmt.Errorf("Illegal argument value %v %v", value, reflect.TypeOf(value))
+			return fmt.Errorf("illegal argument value %v %v", value, reflect.TypeOf(value))
 		}
 	case TEXT:
 		values := t.values[columnIndex].([]string)
-		switch value.(type) {
+		switch v := value.(type) {
 		case string:
-			values[rowIndex] = value.(string)
+			values[rowIndex] = v
 		case []byte:
-			values[rowIndex] = string(value.([]byte))
+			values[rowIndex] = string(v)
 		default:
-			return fmt.Errorf("Illegal argument value %v %v", value, reflect.TypeOf(value))
+			return fmt.Errorf("illegal argument value %v %v", value, reflect.TypeOf(value))
 		}
 	}
 	return nil
@@ -166,11 +166,11 @@
 
 func (t *Tablet) GetValueAt(columnIndex, rowIndex int) (interface{}, error) {
 	if columnIndex < 0 || columnIndex > len(t.measurementSchemas) {
-		return nil, fmt.Errorf("Illegal argument columnIndex %d", columnIndex)
+		return nil, fmt.Errorf("illegal argument columnIndex %d", columnIndex)
 	}
 
 	if rowIndex < 0 || rowIndex > int(t.rowCount) {
-		return nil, fmt.Errorf("Illegal argument rowIndex %d", rowIndex)
+		return nil, fmt.Errorf("illegal argument rowIndex %d", rowIndex)
 	}
 
 	schema := t.measurementSchemas[columnIndex]
@@ -188,7 +188,7 @@
 	case TEXT:
 		return t.values[columnIndex].([]string)[rowIndex], nil
 	default:
-		return nil, fmt.Errorf("Illegal datatype %v", schema.DataType)
+		return nil, fmt.Errorf("illegal datatype %v", schema.DataType)
 	}
 }
 
@@ -236,7 +236,7 @@
 				binary.Write(buff, binary.BigEndian, []byte(s))
 			}
 		default:
-			return nil, fmt.Errorf("Illegal datatype %v", schema.DataType)
+			return nil, fmt.Errorf("illegal datatype %v", schema.DataType)
 		}
 	}
 	return buff.Bytes(), nil
@@ -270,7 +270,7 @@
 		case TEXT:
 			tablet.values[i] = make([]string, rowCount)
 		default:
-			return nil, fmt.Errorf("Illegal datatype %v", schema.DataType)
+			return nil, fmt.Errorf("illegal datatype %v", schema.DataType)
 		}
 	}
 	return tablet, nil
diff --git a/client/tablet_test.go b/client/tablet_test.go
index 13c397d..09fc6ca 100644
--- a/client/tablet_test.go
+++ b/client/tablet_test.go
@@ -26,7 +26,7 @@
 
 func createTablet(size int) (*Tablet, error) {
 	tablet, err := NewTablet("root.ln.TestDevice", []*MeasurementSchema{
-		&MeasurementSchema{
+		{
 			Measurement: "restart_count",
 			DataType:    INT32,
 			Encoding:    RLE,
@@ -34,17 +34,17 @@
 			Properties: map[string]string{
 				"owner": "Mark Liu",
 			},
-		}, &MeasurementSchema{
+		}, {
 			Measurement: "price",
 			DataType:    DOUBLE,
 			Encoding:    GORILLA,
 			Compressor:  SNAPPY,
-		}, &MeasurementSchema{
+		}, {
 			Measurement: "tick_count",
 			DataType:    INT64,
 			Encoding:    RLE,
 			Compressor:  SNAPPY,
-		}, &MeasurementSchema{
+		}, {
 			Measurement: "temperature",
 			DataType:    FLOAT,
 			Encoding:    GORILLA,
@@ -52,7 +52,7 @@
 			Properties: map[string]string{
 				"owner": "Mark Liu",
 			},
-		}, &MeasurementSchema{
+		}, {
 			Measurement: "description",
 			DataType:    TEXT,
 			Encoding:    PLAIN,
@@ -61,7 +61,7 @@
 				"owner": "Mark Liu",
 			},
 		},
-		&MeasurementSchema{
+		{
 			Measurement: "status",
 			DataType:    BOOLEAN,
 			Encoding:    RLE,
@@ -92,7 +92,7 @@
 			fields: fields{
 				deviceId: "root.ln.device5",
 				measurementSchemas: []*MeasurementSchema{
-					&MeasurementSchema{
+					{
 						Measurement: "restart_count",
 						DataType:    INT32,
 						Encoding:    RLE,
@@ -100,17 +100,17 @@
 						Properties: map[string]string{
 							"owner": "Mark Liu",
 						},
-					}, &MeasurementSchema{
+					}, {
 						Measurement: "price",
 						DataType:    DOUBLE,
 						Encoding:    GORILLA,
 						Compressor:  SNAPPY,
-					}, &MeasurementSchema{
+					}, {
 						Measurement: "tick_count",
 						DataType:    INT64,
 						Encoding:    RLE,
 						Compressor:  SNAPPY,
-					}, &MeasurementSchema{
+					}, {
 						Measurement: "temperature",
 						DataType:    FLOAT,
 						Encoding:    GORILLA,
@@ -118,7 +118,7 @@
 						Properties: map[string]string{
 							"owner": "Mark Liu",
 						},
-					}, &MeasurementSchema{
+					}, {
 						Measurement: "description",
 						DataType:    TEXT,
 						Encoding:    PLAIN,
@@ -127,7 +127,7 @@
 							"owner": "Mark Liu",
 						},
 					},
-					&MeasurementSchema{
+					{
 						Measurement: "status",
 						DataType:    BOOLEAN,
 						Encoding:    RLE,
diff --git a/client/utils_test.go b/client/utils_test.go
index 6b08e52..9727ac5 100644
--- a/client/utils_test.go
+++ b/client/utils_test.go
@@ -218,7 +218,7 @@
 					Code:    MultipleError,
 					Message: &errMsg,
 					SubStatus: []*rpc.TSStatus{
-						&rpc.TSStatus{
+						{
 							Code:    ShutDownError,
 							Message: &errMsg,
 						},
@@ -263,7 +263,7 @@
 			name: "InternalServerError",
 			args: args{
 				statuses: []*rpc.TSStatus{
-					&rpc.TSStatus{
+					{
 						Code:      InternalServerError,
 						Message:   &internalServerError,
 						SubStatus: []*rpc.TSStatus{},
@@ -275,7 +275,7 @@
 			name: "SuccessStatus",
 			args: args{
 				statuses: []*rpc.TSStatus{
-					&rpc.TSStatus{
+					{
 						Code:      SuccessStatus,
 						Message:   &success,
 						SubStatus: []*rpc.TSStatus{},
diff --git a/example/session_example.go b/example/session_example.go
index 7e356b2..0def366 100644
--- a/example/session_example.go
+++ b/example/session_example.go
@@ -20,7 +20,6 @@
 package main
 
 import (
-	"errors"
 	"flag"
 	"fmt"
 	"log"
@@ -178,19 +177,14 @@
 			switch sessionDataSet.GetColumnDataType(i) {
 			case client.BOOLEAN:
 				fmt.Print(sessionDataSet.GetBool(columnName))
-				break
 			case client.INT32:
 				fmt.Print(sessionDataSet.GetInt32(columnName))
-				break
 			case client.INT64:
 				fmt.Print(sessionDataSet.GetInt64(columnName))
-				break
 			case client.FLOAT:
 				fmt.Print(sessionDataSet.GetFloat(columnName))
-				break
 			case client.DOUBLE:
 				fmt.Print(sessionDataSet.GetDouble(columnName))
-				break
 			case client.TEXT:
 				fmt.Print(sessionDataSet.GetText(columnName))
 			default:
@@ -365,33 +359,33 @@
 
 func createTablet(rowCount int) (*client.Tablet, error) {
 	tablet, err := client.NewTablet("root.ln.device1", []*client.MeasurementSchema{
-		&client.MeasurementSchema{
+		{
 			Measurement: "restart_count",
 			DataType:    client.INT32,
 			Encoding:    client.RLE,
 			Compressor:  client.SNAPPY,
-		}, &client.MeasurementSchema{
+		}, {
 			Measurement: "price",
 			DataType:    client.DOUBLE,
 			Encoding:    client.GORILLA,
 			Compressor:  client.SNAPPY,
-		}, &client.MeasurementSchema{
+		}, {
 			Measurement: "tick_count",
 			DataType:    client.INT64,
 			Encoding:    client.RLE,
 			Compressor:  client.SNAPPY,
-		}, &client.MeasurementSchema{
+		}, {
 			Measurement: "temperature",
 			DataType:    client.FLOAT,
 			Encoding:    client.GORILLA,
 			Compressor:  client.SNAPPY,
-		}, &client.MeasurementSchema{
+		}, {
 			Measurement: "description",
 			DataType:    client.TEXT,
 			Encoding:    client.PLAIN,
 			Compressor:  client.SNAPPY,
 		},
-		&client.MeasurementSchema{
+		{
 			Measurement: "status",
 			DataType:    client.BOOLEAN,
 			Encoding:    client.RLE,
@@ -493,16 +487,3 @@
 		}
 	}
 }
-
-func validate(tablet *client.Tablet) (err error) {
-	temperatureColumn := 2
-	for i := 0; i < tablet.GetRowCount(); i++ {
-		if v, err := tablet.GetValueAt(temperatureColumn, i); err == nil {
-			temperature := v.(float32)
-			if temperature > 42.5 || temperature < 35.1 {
-				return errors.New("The temperature must be in [35..42]")
-			}
-		}
-	}
-	return err
-}
