From 8eb062f5885a7ed81379c504942f3546d8e34c8f Mon Sep 17 00:00:00 2001 From: ksco Date: Fri, 25 Nov 2022 14:08:57 +0800 Subject: [PATCH] perf(tx): use strings.Builder to avoid the overhead of []byte -> string conversion --- tx.go | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/tx.go b/tx.go index 840ba045..e57142a6 100644 --- a/tx.go +++ b/tx.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "strconv" + "strings" "github.com/jackc/pgx/v5/pgconn" ) @@ -52,22 +53,24 @@ func (txOptions TxOptions) beginSQL() string { return "begin" } - buf := make([]byte, 0, 64) // 64 - maximum length of string with available options - buf = append(buf, "begin"...) + var buf strings.Builder + buf.Grow(64) // 64 - maximum length of string with available options + buf.WriteString("begin") + if txOptions.IsoLevel != "" { - buf = append(buf, " isolation level "...) - buf = append(buf, txOptions.IsoLevel...) + buf.WriteString(" isolation level ") + buf.WriteString(string(txOptions.IsoLevel)) } if txOptions.AccessMode != "" { - buf = append(buf, ' ') - buf = append(buf, txOptions.AccessMode...) + buf.WriteByte(' ') + buf.WriteString(string(txOptions.AccessMode)) } if txOptions.DeferrableMode != "" { - buf = append(buf, ' ') - buf = append(buf, txOptions.DeferrableMode...) + buf.WriteByte(' ') + buf.WriteString(string(txOptions.DeferrableMode)) } - return string(buf) + return buf.String() } var ErrTxClosed = errors.New("tx is closed")