go-mysql-driver のアロケーションを調査していて気づいた小ネタ。 --- a/benchmark_test.go +++ b/benchmark_test.go @@ -423,9 +423,9 @@ func BenchmarkReceiveMassiveRows(b *testing.B) { b.Errorf("failed to select: %v", err) return } + var i int + var s sql.RawBytes for rows.Next() { - var i int - var s sql.RawBytes err = rows.Scan(&i, &s) if err != nil { b.Errorf("failed to scan: %v", err) こう言うふうに、Scanに渡す変数は rows.Next() ループの外