小编jus*_*nas的帖子

Go有没有真正的方法缩小切片?这是一个问题吗?

我已经尝试了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中相同指针的调用吗?这是一个问题,应该如何处理它?

go slice

19
推荐指数
3
解决办法
8993
查看次数

从python与bash交互

我一直在玩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)

(显然,它不会那样工作.)这样的事情是可能的,怎么样?

非常感谢

python bash subprocess

14
推荐指数
2
解决办法
2万
查看次数

为什么我们需要一个恒定时间*单字节*比较函数?

看看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级别进行恒定时间操作?

comparison cryptography equality go

14
推荐指数
2
解决办法
1119
查看次数

标签 统计

go ×2

bash ×1

comparison ×1

cryptography ×1

equality ×1

python ×1

slice ×1

subprocess ×1