在本机测试为什么go循环这么慢? 如下代码循环要6-8秒,但是同样的代码写成php只要0.009秒左右,我哪里操作不对吗?
GO:
func main() {
st := time.Now().Unix()
str := ""
for i := 0; i < 100000; i++ {
str += "hello" + strconv.Itoa(i)
}
fmt.Println(time.Now().Unix() - st)
}
PHP:
$t1 = microtime(true);
$str = '';
for ($i = 0; $i < 100000; ++$i) {
$str .= "hello" . (string)$i;
}
echo microtime(true) - $t1;
有疑问加站长微信联系(非本文作者)

st := time.Now().Unix() var buffer bytes.Buffer for i := 0; i < 100000; i++ { buffer.WriteString("hello" + strconv.Itoa(i)) } fmt.Println(time.Now().Unix() - st) 用bytes.buffer string拼接本身是重新分配了对象,一个字符串是一个不可改变的字节序列 https://studygolang.com/articles/21629 原因看这个
用bytes.buffer string拼接本身是重新分配了对象,一个字符串是一个不可改变的字节序列 https://studygolang.com/articles/21629 原因看这个
变成了 0.011 秒左右了,小细节真多。
https://zhuanlan.zhihu.com/p/162998384
这些测试忽略了一个低调的大佬,webman,去测试下这个会有惊喜。
不知道你是怎么测的 直接复制你的代码秒改成纳秒换算就用时4毫秒
go run test.go
35
这个和测试的机器有关系,配置好速度就快些。
你用了最低效的方法做拼接
st := time.Now().Unix() var str strings.Builder for i := 0; i < 100000; i++ { str.WriteString("hello" + strconv.Itoa(i)) } fmt.Println(time.Now().Unix() - st)