我向你们中的Go程序员提问.我找不到有关Go内存模型细节的信息.我将尝试描述我的问题:
如果我在C中声明并定义一个变量或数组,我知道它存在于RAM的某个位置,只有一个特定的地址,直到我做了一些会改变它的东西.
这不是Python中的情况:Python为我做了整个内存管理,我不能确定我的数据总是位于一个位置.例如,字符串在实践中是不可变的,即使语言表明它们不是.这使得使用敏感数据的安全编程几乎不可能(或者至少非常不切实际).
我的问题是:Go如何从这个角度开展工作.它更像是C还是像Python一样?还是完全不同?是否可以像在C中一样舒适地处理敏感数据?
我正在尝试学习 Rust 并想编写一个简单的通用交换函数
fn swap<T>(i: &mut T, j: &mut T) {
let tmp: T = *i;
*i = *j;
*j = tmp;
}
fn main() {
let i: &int = &mut 5;
let j: &int = &mut 6;
println!("{} {}", i, j);
swap(i, j);
println!("{} {}", i, j);
}
Run Code Online (Sandbox Code Playgroud)
但是编译器会抛出错误消息:
helloworld.rs:2:18: 2:20 error: cannot move out of dereference of `&mut`-pointer
helloworld.rs:2 let tmp: T = *i;
^~
helloworld.rs:2:9: 2:12 note: attempting to move value to here
helloworld.rs:2 let tmp: T …Run Code Online (Sandbox Code Playgroud)