github.com/nibnait/go-learn@v0.0.0-20220227013611-dfa47ea6d2da/src/test/chapter/ch9/04_concat_string_test.go (about)

     1  package concat_string
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"strconv"
     7  	"strings"
     8  	"testing"
     9  )
    10  
    11  const numbers = 100
    12  
    13  func BenchmarkSprintf(b *testing.B) {
    14  	b.ResetTimer()
    15  	for idx := 0; idx < b.N; idx++ {
    16  		var s string
    17  		for i := 0; i < numbers; i++ {
    18  			s = fmt.Sprintf("%v%v", s, i)
    19  		}
    20  	}
    21  	b.StopTimer()
    22  }
    23  
    24  func BenchmarkStringBuilder(b *testing.B) {
    25  	b.ResetTimer()
    26  	for idx := 0; idx < b.N; idx++ {
    27  		var builder strings.Builder
    28  		for i := 0; i < numbers; i++ {
    29  			builder.WriteString(strconv.Itoa(i))
    30  		}
    31  		_ = builder.String()
    32  	}
    33  	b.StopTimer()
    34  }
    35  
    36  func BenchmarkBytesBuf(b *testing.B) {
    37  	b.ResetTimer()
    38  	for idx := 0; idx < b.N; idx++ {
    39  		var buf bytes.Buffer
    40  		for i := 0; i < numbers; i++ {
    41  			buf.WriteString(strconv.Itoa(i))
    42  		}
    43  		_ = buf.String()
    44  	}
    45  	b.StopTimer()
    46  }
    47  
    48  func BenchmarkStringAdd(b *testing.B) {
    49  	b.ResetTimer()
    50  	for idx := 0; idx < b.N; idx++ {
    51  		var s string
    52  		for i := 0; i < numbers; i++ {
    53  			s += strconv.Itoa(i)
    54  		}
    55  
    56  	}
    57  	b.StopTimer()
    58  }