繁体   English   中英

在Go中处理悬空指针

[英]Handling Dangling Pointers in Go

我一直在并行阅读Rust和Go,在这两种语言处理悬空指针及其引起的问题上,我看到了细微的差别。 例如,这是Rust中的一个版本:

fn main() {
    let reference_to_nothing = dangle();
}

fn dangle() -> &String {
    let s = String::from("hello");

    &s
}

上面的错误会说在函数dangles超出范围,我无法返回对其的引用! 但是在Go中,这似乎是允许的吗?

Go中如何处理这样的事情? 在Go中创建悬挂指针容易吗? 如果是这样,我必须采取什么措施来控制它们?

在Go中,由于转义分析的工作方式,悬空指针不是问题。 假设您有如下代码:

func CreateUser(name string) *User {
    return &User{Name: name}
}

编译器将理解,由于可以在函数退出后访问指针,因此应在堆上分配结构。 正如有效围棋说的:

注意,与C语言不同,返回本地变量的地址是完全可以的。 函数返回后,与变量关联的存储将保留。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM