两种方式分别是buffer和array数组方式来拼接。
Buf()方法代表了buffer方式
join方法代表了arrary方式
package csvtomysqlximport ("bytes""fmt""strings")var count1 int64func getNextString1() (string, bool) {if count1 < 1000000 {count1++return "test", true}return "end", false}func Buf() {var buffer bytes.Bufferfor {if piece, ok := getNextString1(); ok {buffer.WriteString(piece)} else {break}}fmt.Println(len(buffer.String()) / 4)buffer.Reset()}var count2 int64func getNextString2() (string, bool) {if count2 < 1000000 {count2++return "test", true}return "end", false}func Join() {lagerslice := make([]string, 1000)for {if piece, ok := getNextString2(); ok {lagerslice = append(lagerslice, piece)} else {break}}join := strings.Join(lagerslice, "")fmt.Println(len(join) / 4)fmt.Println(len(lagerslice))}
测试代码:
package testimport ("csv/csvtomysqlx""testing")func TestBuf(t *testing.T) {csvtomysqlx.Buf()}func TestJoin(t *testing.T) {csvtomysqlx.Join()}
测试结果:

说明: 两种方式都是拼接100w个字符串,buffer的速度和array的速度是不在一个量级上的。而且数组的方式会带来更多的开销。所以对于超长的字符串拼接,建议使用buffer的方式。当然如果是少量的拼接。还是用fmt.Sprintf&+=的方式。