gpt4 book ai didi

arrays - 使用字节 slice (或数组)时优化 go (golang) 代码的一些技巧是什么?

转载 作者:IT王子 更新时间:2023-10-29 02:05:57 24 4
gpt4 key购买 nike

关闭。这个问题需要更多focused .它目前不接受答案。












想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post .

7年前关闭。




Improve this question




我想知道初学者在编写 Go 代码时可能会陷入的一些常见陷阱(无意中减慢了 Go 代码)。

1)首先,我知道在python中进行字符串连接可以(或曾经很昂贵),在尝试将一个元素添加到字符串时在go中是否相同?就像“你好”+“世界”一样。

2)另一个问题是我发现自己经常不得不用更多字节的列表(而不是一次 1 个字节)扩展我的 slice 。通过执行以下操作,我有一种“肮脏”的附加方式:
newStr := string(arrayOfBytes) + string(newBytesToAppend)
这种方式比做类似的事情慢吗?

for _, b := range newBytesToAppend{
arrayOfBytes = append(arrayOfBytes, b)
}

或者是否有更好的方法将整个 slice 附加到其他 slice 或内置方式?在我看来,我什至不得不编写自己的扩展函数(甚至对其进行基准测试),这似乎有点奇怪

此外,有时我最终不得不遍历字节 slice 的每个元素,为了可读性,我将当前字节的类型更改为字符串。如:
for _, b := range newBytesToAppend{
c := string(b)
//some more logic on c
logic(c) //logic
}

3) 我想知道,如果 转换类型 in go 很昂贵(特别是在字符串到数组之间),如果这可能是导致代码变慢的因素之一。顺便说一句,有时我会更改类型(到字符串) 非常通常,几乎每次迭代。

但更一般地说,我试图在网络上搜索一个提示列表,其中列出了导致 go 代码变慢的原因,并试图对其进行更改以使其不会(但没有那么幸运)。我非常清楚这取决于应用程序到应用程序,但想知道是否有任何关于通常使“新手”代码变慢的“专家”建议。

4) 我能想到的最后一件事是,有时我确实事先知道 slice 的长度,所以我可以只使用固定长度的数组。这能改变什么吗?

5)我也制作了自己的类型,如:
type Num int

或者
type Name string

这些会影响性能吗?

6) 在代码优化过程中是否有需要注意的启发式一般列表?例如,是否可以像在 C 中那样取消引用问题?

最佳答案

使用 bytes.Buffer/Buffer.Write ,它会为您处理重新调整内部 slice 的大小,这是迄今为止管理多个 []byte 的最有效方式。 s。

关于第二个问题,使用简单的基准测试很容易回答。

关于arrays - 使用字节 slice (或数组)时优化 go (golang) 代码的一些技巧是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25254553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com