diff --git a/lib/go/test/fuzz/go.mod b/lib/go/test/fuzz/go.mod
index b7ddd5f..f22b622 100644
--- a/lib/go/test/fuzz/go.mod
+++ b/lib/go/test/fuzz/go.mod
@@ -1,6 +1,6 @@
 module github.com/apache/thrift/lib/go/test/fuzz
 
-go 1.21
+go 1.22.0
 
 require github.com/apache/thrift v0.0.0-00010101000000-000000000000
 
diff --git a/lib/go/test/go.mod b/lib/go/test/go.mod
index 0c032b7..541bffc 100644
--- a/lib/go/test/go.mod
+++ b/lib/go/test/go.mod
@@ -1,6 +1,6 @@
 module github.com/apache/thrift/lib/go/test
 
-go 1.21
+go 1.22.0
 
 require (
 	github.com/apache/thrift v0.0.0-00010101000000-000000000000
diff --git a/lib/go/test/tests/equals_test.go b/lib/go/test/tests/equals_test.go
index b8adc77..f56d0cb 100644
--- a/lib/go/test/tests/equals_test.go
+++ b/lib/go/test/tests/equals_test.go
@@ -255,7 +255,7 @@
 
 func genInt64Slice(length int) []int64 {
 	ret := make([]int64, length)
-	for i := 0; i < length; i++ {
+	for i := range ret {
 		ret[i] = int64(length - i)
 	}
 	return ret
@@ -263,7 +263,7 @@
 
 func genStringSlice(length int) []string {
 	ret := make([]string, length)
-	for i := 0; i < length; i++ {
+	for i := range ret {
 		ret[i] = strconv.Itoa(length - i)
 	}
 	return ret
@@ -271,7 +271,7 @@
 
 func genBytesSlice(length int) [][]byte {
 	ret := make([][]byte, length)
-	for i := 0; i < length; i++ {
+	for i := range ret {
 		ret[i] = []byte(strconv.Itoa(length - i))
 	}
 	return ret
@@ -279,7 +279,7 @@
 
 func genInt64StringMap(length int) map[int64]string {
 	ret := make(map[int64]string, length)
-	for i := 0; i < length; i++ {
+	for i := range length {
 		ret[int64(i)] = strconv.Itoa(i)
 	}
 	return ret
diff --git a/lib/go/test/tests/string_parse_allocation_test.go b/lib/go/test/tests/string_parse_allocation_test.go
index 12790c4..56163b7 100644
--- a/lib/go/test/tests/string_parse_allocation_test.go
+++ b/lib/go/test/tests/string_parse_allocation_test.go
@@ -42,7 +42,7 @@
 	b.StopTimer()
 	numEscapedQuotes := 1000
 	var sb strings.Builder
-	for i := 0; i < numEscapedQuotes; i++ {
+	for range numEscapedQuotes {
 		sb.WriteString(`\"`)
 	}
 
@@ -51,7 +51,7 @@
 	transport := thrift.NewTMemoryBuffer()
 	p := thrift.NewTJSONProtocol(transport)
 
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		transport.Reset()
 		transport.WriteString(testString)
 		transport.Flush(context.Background())
diff --git a/lib/go/test/tests/validate_test.go b/lib/go/test/tests/validate_test.go
index 957a8df..52e059a 100644
--- a/lib/go/test/tests/validate_test.go
+++ b/lib/go/test/tests/validate_test.go
@@ -107,7 +107,7 @@
 	}
 	bt = validatetest.NewBasicTest()
 	bt.Map1 = make(map[string]string)
-	for i := 0; i < 11; i++ {
+	for i := range 11 {
 		bt.Map1[strconv.Itoa(i)] = strconv.Itoa(i)
 	}
 	if err := bt.Validate(); err == nil {
@@ -149,7 +149,7 @@
 		t.Errorf("Error cannot be unwrapped into *ValidationError: %v", err)
 	}
 	bt = validatetest.NewBasicTest()
-	for i := 0; i < 11; i++ {
+	for range 11 {
 		bt.Set1 = append(bt.Set1, "0")
 	}
 	if err := bt.Validate(); err == nil {
@@ -272,7 +272,7 @@
 	frt = validatetest.NewFieldReferenceTest()
 	frt.MaxSize = 8
 	frt.Map0 = make(map[string]string)
-	for i := 0; i < 9; i++ {
+	for i := range 9 {
 		frt.Map0[strconv.Itoa(i)] = strconv.Itoa(i)
 	}
 	if err := frt.Validate(); err == nil {
@@ -289,7 +289,7 @@
 	}
 	frt = validatetest.NewFieldReferenceTest()
 	frt.MaxSize = 8
-	for i := 0; i < 9; i++ {
+	for range 9 {
 		frt.List0 = append(frt.List0, "0")
 	}
 	if err := frt.Validate(); err == nil {
@@ -306,7 +306,7 @@
 	}
 	frt = validatetest.NewFieldReferenceTest()
 	frt.MaxSize = 8
-	for i := 0; i < 9; i++ {
+	for range 9 {
 		frt.Set0 = append(frt.Set0, "0")
 	}
 	if err := frt.Validate(); err == nil {
diff --git a/lib/go/thrift/binary_protocol_test.go b/lib/go/thrift/binary_protocol_test.go
index 88bfd26..67f9923 100644
--- a/lib/go/thrift/binary_protocol_test.go
+++ b/lib/go/thrift/binary_protocol_test.go
@@ -112,7 +112,7 @@
 	return func(b *testing.B) {
 		data := make([]byte, dataSize)
 		b.ResetTimer()
-		for i := 0; i < b.N; i++ {
+		for range b.N {
 			safeReadBytes(askedSize, bytes.NewReader(data))
 		}
 	}
diff --git a/lib/go/thrift/exception.go b/lib/go/thrift/exception.go
index e2f1728..5b4cad9 100644
--- a/lib/go/thrift/exception.go
+++ b/lib/go/thrift/exception.go
@@ -121,20 +121,20 @@
 //
 // For a endpoint defined in thrift IDL like this:
 //
-//     service MyService {
-//       FooResponse foo(1: FooRequest request) throws (
-//         1: Exception1 error1,
-//         2: Exception2 error2,
-//       )
-//     }
+//	service MyService {
+//	  FooResponse foo(1: FooRequest request) throws (
+//	    1: Exception1 error1,
+//	    2: Exception2 error2,
+//	  )
+//	}
 //
 // The thrift compiler generated go code for the result TStruct would be like:
 //
-//     type MyServiceFooResult struct {
-//       Success *FooResponse `thrift:"success,0" db:"success" json:"success,omitempty"`
-//       Error1 *Exception1 `thrift:"error1,1" db:"error1" json:"error1,omitempty"`
-//       Error2 *Exception2 `thrift:"error2,2" db:"error2" json:"error2,omitempty"`
-//     }
+//	type MyServiceFooResult struct {
+//	  Success *FooResponse `thrift:"success,0" db:"success" json:"success,omitempty"`
+//	  Error1 *Exception1 `thrift:"error1,1" db:"error1" json:"error1,omitempty"`
+//	  Error2 *Exception2 `thrift:"error2,2" db:"error2" json:"error2,omitempty"`
+//	}
 //
 // And this function extracts the first non-nil exception out of
 // *MyServiceFooResult.
@@ -144,7 +144,7 @@
 		return nil
 	}
 	typ := v.Type()
-	for i := 0; i < v.NumField(); i++ {
+	for i := range v.NumField() {
 		if typ.Field(i).Name == "Success" {
 			continue
 		}
diff --git a/lib/go/thrift/framed_transport_test.go b/lib/go/thrift/framed_transport_test.go
index d23ec59..e5aa470 100644
--- a/lib/go/thrift/framed_transport_test.go
+++ b/lib/go/thrift/framed_transport_test.go
@@ -42,7 +42,7 @@
 	writer := NewTFramedTransport(trans)
 
 	t.Run("pair", func(t *testing.T) {
-		for i := 0; i < n; i++ {
+		for i := range n {
 			// write
 			if _, err := io.Copy(writer, strings.NewReader(content)); err != nil {
 				t.Fatalf("Failed to write on #%d: %v", i, err)
@@ -64,7 +64,7 @@
 
 	t.Run("batched", func(t *testing.T) {
 		// write
-		for i := 0; i < n; i++ {
+		for i := range n {
 			if _, err := io.Copy(writer, strings.NewReader(content)); err != nil {
 				t.Fatalf("Failed to write on #%d: %v", i, err)
 			}
@@ -74,7 +74,7 @@
 		}
 
 		// read
-		for i := 0; i < n; i++ {
+		for i := range n {
 			const (
 				size = len(content)
 			)
diff --git a/lib/go/thrift/header_transport.go b/lib/go/thrift/header_transport.go
index 8148796..d6d6416 100644
--- a/lib/go/thrift/header_transport.go
+++ b/lib/go/thrift/header_transport.go
@@ -494,7 +494,7 @@
 		)
 		t.frameReader = reader
 		transformIDs := make([]THeaderTransformID, transformCount)
-		for i := 0; i < int(transformCount); i++ {
+		for i := range int(transformCount) {
 			id, err := hp.readVarint32()
 			if err != nil {
 				return err
@@ -536,7 +536,7 @@
 			if err != nil {
 				return err
 			}
-			for i := 0; i < int(count); i++ {
+			for range int(count) {
 				key, err := hp.ReadString(ctx)
 				if err != nil {
 					return err
diff --git a/lib/go/thrift/header_transport_test.go b/lib/go/thrift/header_transport_test.go
index 125a5fd..09a0331 100644
--- a/lib/go/thrift/header_transport_test.go
+++ b/lib/go/thrift/header_transport_test.go
@@ -316,7 +316,7 @@
 	writer := NewTHeaderTransport(trans)
 
 	t.Run("pair", func(t *testing.T) {
-		for i := 0; i < n; i++ {
+		for i := range n {
 			// write
 			if _, err := io.Copy(writer, strings.NewReader(content)); err != nil {
 				t.Fatalf("Failed to write on #%d: %v", i, err)
@@ -338,7 +338,7 @@
 
 	t.Run("batched", func(t *testing.T) {
 		// write
-		for i := 0; i < n; i++ {
+		for i := range n {
 			if _, err := io.Copy(writer, strings.NewReader(content)); err != nil {
 				t.Fatalf("Failed to write on #%d: %v", i, err)
 			}
@@ -348,7 +348,7 @@
 		}
 
 		// read
-		for i := 0; i < n; i++ {
+		for i := range n {
 			const (
 				size = len(content)
 			)
diff --git a/lib/go/thrift/json_protocol_test.go b/lib/go/thrift/json_protocol_test.go
index 39e52d1..1680532 100644
--- a/lib/go/thrift/json_protocol_test.go
+++ b/lib/go/thrift/json_protocol_test.go
@@ -451,7 +451,7 @@
 	if len(v) != len(value) {
 		t.Fatalf("Bad value for %s value length %v, wrote: %v, received length: %v", thetype, len(value), s, len(v))
 	}
-	for i := 0; i < len(v); i++ {
+	for i := range v {
 		if v[i] != value[i] {
 			t.Fatalf("Bad value for %s at index %d value %v, wrote: %v, received: %v", thetype, i, value[i], s, v[i])
 		}
diff --git a/lib/go/thrift/lowlevel_benchmarks_test.go b/lib/go/thrift/lowlevel_benchmarks_test.go
index e173655..b389388 100644
--- a/lib/go/thrift/lowlevel_benchmarks_test.go
+++ b/lib/go/thrift/lowlevel_benchmarks_test.go
@@ -41,7 +41,7 @@
 		b.Fatal(err)
 	}
 	p := binaryProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteBool(b, p, trans)
 	}
 }
@@ -52,7 +52,7 @@
 		b.Fatal(err)
 	}
 	p := binaryProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteByte(b, p, trans)
 	}
 }
@@ -63,7 +63,7 @@
 		b.Fatal(err)
 	}
 	p := binaryProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteI16(b, p, trans)
 	}
 }
@@ -74,7 +74,7 @@
 		b.Fatal(err)
 	}
 	p := binaryProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteI32(b, p, trans)
 	}
 }
@@ -84,7 +84,7 @@
 		b.Fatal(err)
 	}
 	p := binaryProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteI64(b, p, trans)
 	}
 }
@@ -94,7 +94,7 @@
 		b.Fatal(err)
 	}
 	p := binaryProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteDouble(b, p, trans)
 	}
 }
@@ -104,7 +104,7 @@
 		b.Fatal(err)
 	}
 	p := binaryProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteString(b, p, trans)
 	}
 }
@@ -114,7 +114,7 @@
 		b.Fatal(err)
 	}
 	p := binaryProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteBinary(b, p, trans)
 	}
 }
@@ -125,7 +125,7 @@
 		b.Fatal(err)
 	}
 	p := binaryProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteBool(b, p, trans)
 	}
 }
@@ -136,7 +136,7 @@
 		b.Fatal(err)
 	}
 	p := binaryProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteByte(b, p, trans)
 	}
 }
@@ -147,7 +147,7 @@
 		b.Fatal(err)
 	}
 	p := binaryProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteI16(b, p, trans)
 	}
 }
@@ -158,7 +158,7 @@
 		b.Fatal(err)
 	}
 	p := binaryProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteI32(b, p, trans)
 	}
 }
@@ -168,7 +168,7 @@
 		b.Fatal(err)
 	}
 	p := binaryProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteI64(b, p, trans)
 	}
 }
@@ -178,7 +178,7 @@
 		b.Fatal(err)
 	}
 	p := binaryProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteDouble(b, p, trans)
 	}
 }
@@ -188,7 +188,7 @@
 		b.Fatal(err)
 	}
 	p := binaryProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteString(b, p, trans)
 	}
 }
@@ -198,7 +198,7 @@
 		b.Fatal(err)
 	}
 	p := binaryProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteBinary(b, p, trans)
 	}
 }
@@ -209,7 +209,7 @@
 		b.Fatal(err)
 	}
 	p := binaryProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteBool(b, p, trans)
 	}
 }
@@ -220,7 +220,7 @@
 		b.Fatal(err)
 	}
 	p := binaryProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteByte(b, p, trans)
 	}
 }
@@ -231,7 +231,7 @@
 		b.Fatal(err)
 	}
 	p := binaryProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteI16(b, p, trans)
 	}
 }
@@ -242,7 +242,7 @@
 		b.Fatal(err)
 	}
 	p := binaryProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteI32(b, p, trans)
 	}
 }
@@ -252,7 +252,7 @@
 		b.Fatal(err)
 	}
 	p := binaryProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteI64(b, p, trans)
 	}
 }
@@ -262,7 +262,7 @@
 		b.Fatal(err)
 	}
 	p := binaryProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteDouble(b, p, trans)
 	}
 }
@@ -272,7 +272,7 @@
 		b.Fatal(err)
 	}
 	p := binaryProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteString(b, p, trans)
 	}
 }
@@ -282,7 +282,7 @@
 		b.Fatal(err)
 	}
 	p := binaryProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteBinary(b, p, trans)
 	}
 }
@@ -293,7 +293,7 @@
 		b.Fatal(err)
 	}
 	p := compactProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteBool(b, p, trans)
 	}
 }
@@ -304,7 +304,7 @@
 		b.Fatal(err)
 	}
 	p := compactProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteByte(b, p, trans)
 	}
 }
@@ -315,7 +315,7 @@
 		b.Fatal(err)
 	}
 	p := compactProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteI16(b, p, trans)
 	}
 }
@@ -326,7 +326,7 @@
 		b.Fatal(err)
 	}
 	p := compactProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteI32(b, p, trans)
 	}
 }
@@ -336,7 +336,7 @@
 		b.Fatal(err)
 	}
 	p := compactProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteI64(b, p, trans)
 	}
 }
@@ -346,7 +346,7 @@
 		b.Fatal(err)
 	}
 	p := compactProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteDouble(b, p, trans)
 	}
 }
@@ -356,7 +356,7 @@
 		b.Fatal(err)
 	}
 	p := compactProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteString(b, p, trans)
 	}
 }
@@ -366,7 +366,7 @@
 		b.Fatal(err)
 	}
 	p := compactProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteBinary(b, p, trans)
 	}
 }
@@ -377,7 +377,7 @@
 		b.Fatal(err)
 	}
 	p := compactProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteBool(b, p, trans)
 	}
 }
@@ -388,7 +388,7 @@
 		b.Fatal(err)
 	}
 	p := compactProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteByte(b, p, trans)
 	}
 }
@@ -399,7 +399,7 @@
 		b.Fatal(err)
 	}
 	p := compactProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteI16(b, p, trans)
 	}
 }
@@ -410,7 +410,7 @@
 		b.Fatal(err)
 	}
 	p := compactProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteI32(b, p, trans)
 	}
 }
@@ -420,7 +420,7 @@
 		b.Fatal(err)
 	}
 	p := compactProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteI64(b, p, trans)
 	}
 }
@@ -430,7 +430,7 @@
 		b.Fatal(err)
 	}
 	p := compactProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteDouble(b, p, trans)
 	}
 }
@@ -440,7 +440,7 @@
 		b.Fatal(err)
 	}
 	p := compactProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteString(b, p, trans)
 	}
 }
@@ -450,7 +450,7 @@
 		b.Fatal(err)
 	}
 	p := compactProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteBinary(b, p, trans)
 	}
 }
@@ -461,7 +461,7 @@
 		b.Fatal(err)
 	}
 	p := compactProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteBool(b, p, trans)
 	}
 }
@@ -472,7 +472,7 @@
 		b.Fatal(err)
 	}
 	p := compactProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteByte(b, p, trans)
 	}
 }
@@ -483,7 +483,7 @@
 		b.Fatal(err)
 	}
 	p := compactProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteI16(b, p, trans)
 	}
 }
@@ -494,7 +494,7 @@
 		b.Fatal(err)
 	}
 	p := compactProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteI32(b, p, trans)
 	}
 }
@@ -504,7 +504,7 @@
 		b.Fatal(err)
 	}
 	p := compactProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteI64(b, p, trans)
 	}
 }
@@ -514,7 +514,7 @@
 		b.Fatal(err)
 	}
 	p := compactProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteDouble(b, p, trans)
 	}
 }
@@ -524,7 +524,7 @@
 		b.Fatal(err)
 	}
 	p := compactProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteString(b, p, trans)
 	}
 }
@@ -534,7 +534,7 @@
 		b.Fatal(err)
 	}
 	p := compactProtoF.GetProtocol(trans)
-	for i := 0; i < b.N; i++ {
+	for range b.N {
 		ReadWriteBinary(b, p, trans)
 	}
 }
diff --git a/lib/go/thrift/protocol.go b/lib/go/thrift/protocol.go
index 2ee14ca..68cfe4a 100644
--- a/lib/go/thrift/protocol.go
+++ b/lib/go/thrift/protocol.go
@@ -146,7 +146,7 @@
 		if err != nil {
 			return err
 		}
-		for i := 0; i < size; i++ {
+		for range size {
 			err := Skip(ctx, self, keyType, maxDepth-1)
 			if err != nil {
 				return err
@@ -163,7 +163,7 @@
 		if err != nil {
 			return err
 		}
-		for i := 0; i < size; i++ {
+		for range size {
 			err := Skip(ctx, self, elemType, maxDepth-1)
 			if err != nil {
 				return err
@@ -175,7 +175,7 @@
 		if err != nil {
 			return err
 		}
-		for i := 0; i < size; i++ {
+		for range size {
 			err := Skip(ctx, self, elemType, maxDepth-1)
 			if err != nil {
 				return err
diff --git a/lib/go/thrift/protocol_test.go b/lib/go/thrift/protocol_test.go
index 1093c94..4fac801 100644
--- a/lib/go/thrift/protocol_test.go
+++ b/lib/go/thrift/protocol_test.go
@@ -45,7 +45,7 @@
 
 func init() {
 	protocol_bdata = make([]byte, PROTOCOL_BINARY_DATA_SIZE)
-	for i := 0; i < PROTOCOL_BINARY_DATA_SIZE; i++ {
+	for i := range PROTOCOL_BINARY_DATA_SIZE {
 		protocol_bdata[i] = byte((i + 'a') % 255)
 	}
 	BOOL_VALUES = []bool{false, true, false, false, true}
@@ -531,7 +531,7 @@
 	if len(v) != len(value) {
 		t.Errorf("%s: %T %T len(v) != len(value)... %d != %d", "ReadWriteBinary", p, trans, len(v), len(value))
 	} else {
-		for i := 0; i < len(v); i++ {
+		for i := range v {
 			if v[i] != value[i] {
 				t.Errorf("%s: %T %T %s != %s", "ReadWriteBinary", p, trans, v, value)
 			}
diff --git a/lib/go/thrift/serializer_test.go b/lib/go/thrift/serializer_test.go
index 425ce06..19879c5 100644
--- a/lib/go/thrift/serializer_test.go
+++ b/lib/go/thrift/serializer_test.go
@@ -328,7 +328,7 @@
 		b.Run(
 			c.Label,
 			func(b *testing.B) {
-				for i := 0; i < b.N; i++ {
+				for range b.N {
 					s := c.Serializer()
 					m := MyTestStruct{}
 					str, _ := s.WriteString(context.Background(), &m)
diff --git a/lib/go/thrift/serializer_types_test.go b/lib/go/thrift/serializer_types_test.go
index 4d1e992..d960016 100644
--- a/lib/go/thrift/serializer_types_test.go
+++ b/lib/go/thrift/serializer_types_test.go
@@ -319,7 +319,7 @@
 	}
 	tMap := make(map[string]string, size)
 	p.StringMap = tMap
-	for i := 0; i < size; i++ {
+	for range size {
 		var _key0 string
 		if v, err := iprot.ReadString(ctx); err != nil {
 			return PrependError("error reading field 0: ", err)
@@ -347,7 +347,7 @@
 	}
 	tSlice := make([]string, 0, size)
 	p.StringList = tSlice
-	for i := 0; i < size; i++ {
+	for range size {
 		var _elem2 string
 		if v, err := iprot.ReadString(ctx); err != nil {
 			return PrependError("error reading field 0: ", err)
@@ -369,7 +369,7 @@
 	}
 	tSet := make(map[string]struct{}, size)
 	p.StringSet = tSet
-	for i := 0; i < size; i++ {
+	for range size {
 		var _elem3 string
 		if v, err := iprot.ReadString(ctx); err != nil {
 			return PrependError("error reading field 0: ", err)
diff --git a/lib/go/thrift/simple_json_protocol.go b/lib/go/thrift/simple_json_protocol.go
index f7fe68c..ec12991 100644
--- a/lib/go/thrift/simple_json_protocol.go
+++ b/lib/go/thrift/simple_json_protocol.go
@@ -1306,7 +1306,7 @@
 
 // Safely peeks into the buffer, reading only what is necessary
 func (p *TSimpleJSONProtocol) safePeekContains(b []byte) bool {
-	for i := 0; i < len(b); i++ {
+	for i := range b {
 		a, _ := p.reader.Peek(i + 1)
 		if len(a) < (i+1) || a[i] != b[i] {
 			return false
diff --git a/lib/go/thrift/simple_json_protocol_test.go b/lib/go/thrift/simple_json_protocol_test.go
index 89753c6..002a231 100644
--- a/lib/go/thrift/simple_json_protocol_test.go
+++ b/lib/go/thrift/simple_json_protocol_test.go
@@ -497,7 +497,7 @@
 	if len(v) != len(value) {
 		t.Fatalf("Bad value for %s value length %v, wrote: %v, received length: %v", thetype, len(value), s, len(v))
 	}
-	for i := 0; i < len(v); i++ {
+	for i := range v {
 		if v[i] != value[i] {
 			t.Fatalf("Bad value for %s at index %d value %v, wrote: %v, received: %v", thetype, i, value[i], s, v[i])
 		}
diff --git a/lib/go/thrift/ssl_server_socket.go b/lib/go/thrift/ssl_server_socket.go
index 907afca..3f05ad9 100644
--- a/lib/go/thrift/ssl_server_socket.go
+++ b/lib/go/thrift/ssl_server_socket.go
@@ -93,6 +93,9 @@
 }
 
 func (p *TSSLServerSocket) Addr() net.Addr {
+	if p.listener != nil {
+		return p.listener.Addr()
+	}
 	return p.addr
 }
 
diff --git a/lib/go/thrift/transport_test.go b/lib/go/thrift/transport_test.go
index 309cc28..b6263b8 100644
--- a/lib/go/thrift/transport_test.go
+++ b/lib/go/thrift/transport_test.go
@@ -36,7 +36,7 @@
 
 func init() {
 	transport_bdata = make([]byte, TRANSPORT_BINARY_DATA_SIZE)
-	for i := 0; i < TRANSPORT_BINARY_DATA_SIZE; i++ {
+	for i := range TRANSPORT_BINARY_DATA_SIZE {
 		transport_bdata[i] = byte((i + 'a') % 255)
 	}
 	transport_header = map[string]string{"key": "User-Agent",
