gpt4 book ai didi

pointers - 在 Go 中处理悬挂指针

转载 作者:IT王子 更新时间:2023-10-29 01:48:44 25 4
gpt4 key购买 nike

我一直在同时阅读 Rust 和 Go,我发现这两种语言在处理悬垂指针及其引起的问题的方式上存在细微差别。例如,这是 Rust 中的一个版本:

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

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

&s
}

上面的代码会出错,说在函数 dangle 中,s 超出范围,我无法返回对它的引用!但是在 Go 中,这似乎是允许的?

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

最佳答案

在 Go 中,悬挂指针不是问题,因为它的方式 escape analysis作品。假设您有这样的代码:

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

编译器会理解,因为函数退出后可以访问指针,所以结构应该分配在堆上。作为Effective Go说:

Note that, unlike in C, it's perfectly OK to return the address of a local variable; the storage associated with the variable survives after the function returns.

关于pointers - 在 Go 中处理悬挂指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46987513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com