我正在同时阅读Rust和Go,我发现这两种语言在处理悬垂指针及其引起的问题方面存在微妙差异。例如,以下是Rust的一种版本:
fn main() {
let reference_to_nothing = dangle();
}
fn dangle() -> &String {
let s = String::from("hello");
&s
}
上述代码会出错,因为在函数dangle
中,s
超出了作用域,我不能返回对它的引用!但在Go语言中,这似乎是被允许的?
在Go中如何处理这种情况?创建悬空指针容易吗?如果是,我有什么控制它们的措施?