我已经尝试了Go一段时间了,这个问题一直困扰着我.假设我在切片中构建了一个有点大的数据集(比如1000万个int64).
package main
import (
"math"
"fmt"
)
func main() {
var a []int64
var i int64;
upto := int64(math.Pow10(7))
for i = 0; i < upto; i++ {
a = append(a, i)
}
fmt.Println(cap(a))
}
Run Code Online (Sandbox Code Playgroud)
但后来我决定我不想要他们中的大多数,所以我想最终只得到其中的10个.我在Go的wiki上尝试了切片和删除技术,但它们似乎都没有减少切片的容量.
所以这就是我的问题:Go没有真正的方法来缩小切片的容量,这个切片的容量realloc()与使用较小尺寸参数相比,而不是之前对C中相同指针的调用吗?这是一个问题,应该如何处理它?
我一直在玩Python的subprocess模块,我想用python的bash做一个"交互式会话".我希望能够像在终端仿真器上一样从Python读取bash输出/写入命令.我猜一个代码示例更好地解释了它:
>>> proc = subprocess.Popen(['/bin/bash'])
>>> proc.communicate()
('user@machine:~/','')
>>> proc.communicate('ls\n')
('file1 file2 file3','')
Run Code Online (Sandbox Code Playgroud)
(显然,它不会那样工作.)这样的事情是可能的,怎么样?
非常感谢
看看Go标准库,有一个ConstantTimeByteEq函数,如下所示:
func ConstantTimeByteEq(x, y uint8) int {
z := ^(x ^ y)
z &= z >> 4
z &= z >> 2
z &= z >> 1
return int(z)
}
Run Code Online (Sandbox Code Playgroud)
现在,我理解需要恒定时间串(数组等)比较,因为常规算法可能会在第一个不等元素之后短路.但在这种情况下,是不是定期比较两个固定大小的整数已经在CPU级别进行恒定时间操作?