在将缓冲区清零并将其传递给另一个函数后检查(部分)缓冲区内容怎么样?例如:copy(privateKey, make([]byte, keySize))if privateKey[0] != 0 { // If you pass the buffer to another function, // this check and above copy() can't be optimized away: fmt.Println("Zeroing failed", privateKey[0])}为了绝对安全,您可以将传递的缓冲区内容与随机字节进行异或,但如果/由于归零未优化,则if永远不会到达主体。您可能认为一个非常智能的编译器可能会推断出上述copy()零privateKey[0],从而确定条件始终为假,并且仍然将其优化掉(尽管这不太可能)。解决这个问题的方法不是使用make([]byte, keySize)来自全局变量或函数参数的切片(其值只能在运行时确定),因此编译器不能足够聪明地推断条件将始终为假在编译时。