gpt4 book ai didi

go - 推迟现场分配是竞争条件吗?

转载 作者:IT王子 更新时间:2023-10-29 02:02:42 24 4
gpt4 key购买 nike

考虑以下代码:

type foo struct {
bar string
}

func f() *foo {
ret := &foo{"before"}
defer func() { ret.bar = "after" }()
return ret
}

func main() {
fmt.Println(f()) // prints "&{after}"
}

动机是必须返回一个结构,但一些字段只需要在返回之前设置(例如,函数完成时间的时间戳)。

推迟现场分配是竞争条件吗?它是惯用语吗?有没有更好的办法?

最佳答案

使用 defer 语句与在从函数或例程返回之前调用某些东西的主要好处是,即使在返回之前发生 panic ,defer 也会运行该语句。

因此它通常用于清理资源(例如关闭文件或网络连接)而不是设置状态。

下面的函数不会打印或返回“hello”

func f() string {
panic("omg")
fmt.Println("hello")
return "hello"
}

此代码将打印但不会返回“hello”

func f() string {
defer fmt.Println("ello")
panic("omg")
return "hello"
}

回答您的问题:不,它不会导致比赛。除了上面的区别,它相当于在 return 语句之前调用了一些东西。

关于go - 推迟现场分配是竞争条件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46692603/

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