golang 高效字符串拼接

摘要:
返回值n为len,err总是nil。如果缓冲变得太大,Write会采用错误值ErrTooLarge引发panic。

https://blog.csdn.net/u012210379/article/details/45110705

虽然方便,但是使用+=操作符并不是在一个循环中往字符串末尾追加字符串最有效的方式,一个有效的方式是准备好一个字符串切片([]string),然后使用strings.Join()函数一次性将所有字符串串联起来。但是在go中还有一个更好的方法,其原理类似于java中的stringBuilder

1 package main
2 
3 import (
4     "bytes"
5     "fmt"
6 )
7 
8 func main() {
9     var buffer bytes.Buffer //Buffer是一个实现了读写方法的可变大小的字节缓冲
10 
11     for{
12         if piece, ok :=getNextString(); ok {
13             /*
14 func (b *Buffer) WriteString(s string) (n int, err error)
15 Write将s的内容写入缓冲中,如必要会增加缓冲容量。返回值n为len(p),err总是nil。如果缓冲变得太大,Write会采用错误值ErrTooLarge引发panic。
16             */
17 buffer.WriteString(piece)
18         } else{
19             break
20 }
21 }
22 
23     fmt.Println("拼接后的结果为-->", buffer.String())
24 }

经测试,连接100万个字符串,使用buffer消耗的时间约为77毫秒,使用+=消耗的时间为.....抱歉,我等了5分钟结果没跑出来,减小数量级后,连接10万字符串的时间为3312毫秒

另外,golang中的字符串输出是有长度限制的,不知道具体限制有多少,过1000万长度就不显示了,过1000亿liteIDE崩溃了。。。

免责声明:文章转载自《golang 高效字符串拼接》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇四层板学习(二)java爬虫(六)分析AJAX接口获取网页动态内容下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【逆向】Yara规则编写安装与使用教程

前言 Yara是一个能够帮助恶意软件研究人员识别和分类恶意软件样本的工具(类似正则表达式)。规则可以通过文本或二进制的模式被创建,并且每个规则均由一组字符串和一个布尔表达式组成。 1 //示例规则 2 rule Test : Trojan 3 { 4 //规则描述 5 meta: 6 author = "Sunset" 7...

C+++string类如何判断字符串为空

string类是C++STL类之一,有很丰富的接口。 string类为空,实际也就是元素为0个。 可以按照如下方式判断: 1、string类有自己的成员函数empty, 可以用来判断是否为空。 string s; if(s.empty())//成立则为空 ... 2、判断字符串长度。如果长度为0,则为空。 string s; if(s.length()==...

SQL 字符串处理函数大全

     select语句中只能使用sql函数对字段进行操作(链接sql server),select 字段1 from 表1 where 字段1.IndexOf("云")=1;这条语句不对的原因是indexof()函数不是sql函数,改成sql对应的函数就可以了。left()是sql函数。select 字段1 from 表1 where charinde...

SQL Server日期与字符串之间的转换

一、日期转换为字符串、日期格式 1、使用函数CONVERT: CONVERT ( data_type [ ( length ) ] , expression [ , style ] ) 2、参数 expression :是任何有效的 sql 表达式。。 data_type:目标系统所提供的数据类型,包括 bigint 和 sql_variant。不能使用用...

python模块介绍- binascii:二进制和ASCII互转以及其他进制转换

20.1 binascii:二进制和ASCII互转作用:二进制和ASCII互相转换。 Python版本:1.5及以后版本 binascii模块包含很多在二进制和ASCII编码的二进制表示转换的方法。通常情况不会直接使用这些功能,而是使用像UU,base64编码,或BinHex封装模块。 binascii模块包含更高级别的模块使用的,用C语言编写的低级高效功...

DataTable需要注意点整理

获取两个DataTable的交集(Intersect:返回同时出现在两个表中的数据)          var dt3=dt1.AsEnumerable().Intersect(dt2.AsEnumerable(), DataRowComparer.Default).CopyToDataTable();获取DataTable的并集(Union 方法返回这...