Browse Source

fasthttp: simplify sorting by using sort.Slice instead of sort.Sort (#3346)

Aliaksandr Valialkin 7 years ago
parent
commit
0cd4d5de27

+ 9 - 13
frameworks/Go/fasthttp/src/common/common.go

@@ -6,10 +6,10 @@ import (
 	"log"
 	"log"
 	"math/rand"
 	"math/rand"
 	"net"
 	"net"
+	"sort"
 	"sync"
 	"sync"
 
 
 	"github.com/valyala/fasthttp"
 	"github.com/valyala/fasthttp"
-
 	"templates"
 	"templates"
 )
 )
 
 
@@ -65,18 +65,6 @@ func GetQueriesCount(ctx *fasthttp.RequestCtx) int {
 	return n
 	return n
 }
 }
 
 
-type FortunesByMessage []templates.Fortune
-
-func (s FortunesByMessage) Len() int           { return len(s) }
-func (s FortunesByMessage) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }
-func (s FortunesByMessage) Less(i, j int) bool { return s[i].Message < s[j].Message }
-
-type WorldsByID []World
-
-func (w WorldsByID) Len() int           { return len(w) }
-func (w WorldsByID) Swap(i, j int)      { w[i], w[j] = w[j], w[i] }
-func (w WorldsByID) Less(i, j int) bool { return w[i].Id < w[j].Id }
-
 func GetListener() net.Listener {
 func GetListener() net.Listener {
 	ln, err := net.Listen("tcp4", *listenAddr)
 	ln, err := net.Listen("tcp4", *listenAddr)
 	if err != nil {
 	if err != nil {
@@ -84,3 +72,11 @@ func GetListener() net.Listener {
 	}
 	}
 	return ln
 	return ln
 }
 }
+
+func SortFortunesByMessage(fortunes []templates.Fortune) {
+	sort.Slice(fortunes, func(i, j int) bool { return fortunes[i].Message < fortunes[j].Message })
+}
+
+func SortWorldsByID(worlds []World) {
+	sort.Slice(worlds, func(i, j int) bool { return worlds[i].Id < worlds[j].Id })
+}

+ 4 - 4
frameworks/Go/fasthttp/src/server-mysql/server.go

@@ -5,7 +5,6 @@ import (
 	"flag"
 	"flag"
 	"log"
 	"log"
 	"runtime"
 	"runtime"
-	"sort"
 
 
 	_ "github.com/go-sql-driver/mysql"
 	_ "github.com/go-sql-driver/mysql"
 	"github.com/valyala/fasthttp"
 	"github.com/valyala/fasthttp"
@@ -94,9 +93,9 @@ func fortuneHandler(ctx *fasthttp.RequestCtx) {
 		log.Fatalf("Error selecting db data: %v", err)
 		log.Fatalf("Error selecting db data: %v", err)
 	}
 	}
 
 
+	var f templates.Fortune
 	fortunes := make([]templates.Fortune, 0, 16)
 	fortunes := make([]templates.Fortune, 0, 16)
 	for rows.Next() {
 	for rows.Next() {
-		var f templates.Fortune
 		if err := rows.Scan(&f.ID, &f.Message); err != nil {
 		if err := rows.Scan(&f.ID, &f.Message); err != nil {
 			log.Fatalf("Error scanning fortune row: %s", err)
 			log.Fatalf("Error scanning fortune row: %s", err)
 		}
 		}
@@ -105,7 +104,7 @@ func fortuneHandler(ctx *fasthttp.RequestCtx) {
 	rows.Close()
 	rows.Close()
 	fortunes = append(fortunes, templates.Fortune{Message: "Additional fortune added at request time."})
 	fortunes = append(fortunes, templates.Fortune{Message: "Additional fortune added at request time."})
 
 
-	sort.Sort(common.FortunesByMessage(fortunes))
+	common.SortFortunesByMessage(fortunes)
 
 
 	ctx.SetContentType("text/html; charset=utf-8")
 	ctx.SetContentType("text/html; charset=utf-8")
 	templates.WriteFortunePage(ctx, fortunes)
 	templates.WriteFortunePage(ctx, fortunes)
@@ -122,7 +121,8 @@ func updateHandler(ctx *fasthttp.RequestCtx) {
 	}
 	}
 
 
 	// sorting is required for insert deadlock prevention.
 	// sorting is required for insert deadlock prevention.
-	sort.Sort(common.WorldsByID(worlds))
+	common.SortWorldsByID(worlds)
+
 	txn, err := db.Begin()
 	txn, err := db.Begin()
 	if err != nil {
 	if err != nil {
 		log.Fatalf("Error starting transaction: %s", err)
 		log.Fatalf("Error starting transaction: %s", err)

+ 4 - 4
frameworks/Go/fasthttp/src/server-postgresql/server.go

@@ -5,7 +5,6 @@ import (
 	"fmt"
 	"fmt"
 	"log"
 	"log"
 	"runtime"
 	"runtime"
-	"sort"
 
 
 	"github.com/jackc/pgx"
 	"github.com/jackc/pgx"
 	"github.com/valyala/fasthttp"
 	"github.com/valyala/fasthttp"
@@ -82,9 +81,9 @@ func fortuneHandler(ctx *fasthttp.RequestCtx) {
 		log.Fatalf("Error selecting db data: %v", err)
 		log.Fatalf("Error selecting db data: %v", err)
 	}
 	}
 
 
+	var f templates.Fortune
 	fortunes := make([]templates.Fortune, 0, 16)
 	fortunes := make([]templates.Fortune, 0, 16)
 	for rows.Next() {
 	for rows.Next() {
-		var f templates.Fortune
 		if err := rows.Scan(&f.ID, &f.Message); err != nil {
 		if err := rows.Scan(&f.ID, &f.Message); err != nil {
 			log.Fatalf("Error scanning fortune row: %s", err)
 			log.Fatalf("Error scanning fortune row: %s", err)
 		}
 		}
@@ -93,7 +92,7 @@ func fortuneHandler(ctx *fasthttp.RequestCtx) {
 	rows.Close()
 	rows.Close()
 	fortunes = append(fortunes, templates.Fortune{Message: "Additional fortune added at request time."})
 	fortunes = append(fortunes, templates.Fortune{Message: "Additional fortune added at request time."})
 
 
-	sort.Sort(common.FortunesByMessage(fortunes))
+	common.SortFortunesByMessage(fortunes)
 
 
 	ctx.SetContentType("text/html; charset=utf-8")
 	ctx.SetContentType("text/html; charset=utf-8")
 	templates.WriteFortunePage(ctx, fortunes)
 	templates.WriteFortunePage(ctx, fortunes)
@@ -110,7 +109,8 @@ func updateHandler(ctx *fasthttp.RequestCtx) {
 	}
 	}
 
 
 	// sorting is required for insert deadlock prevention.
 	// sorting is required for insert deadlock prevention.
-	sort.Sort(common.WorldsByID(worlds))
+	common.SortWorldsByID(worlds)
+
 	txn, err := db.Begin()
 	txn, err := db.Begin()
 	if err != nil {
 	if err != nil {
 		log.Fatalf("Error starting transaction: %s", err)
 		log.Fatalf("Error starting transaction: %s", err)