gpt4 book ai didi

go - 方法调用与 channel 的使用

转载 作者:行者123 更新时间:2023-12-01 22:39:41 24 4
gpt4 key购买 nike

我越来越熟悉 Go 的并发模式,我想阐明最佳实践。

  • 我了解我们希望使用 channel 进行沟通
    goroutine 之间。话虽如此,是否存在结构
    方法调用有意义或 channel 将用于每个
    情况?
  • 通信处理的消息/结构时
    (不是传递/注册等的模块)最好通过
    它们按值进行,这样我们就不会冒险让两个 goroutine 修改
    同时呢?
  • 最佳答案

    您不能使用方法调用或函数调用与另一个 goroutine 通信。当您从 goroutine 调用函数时,该函数会在调用它的 goroutine 中执行。您只能使用 channel 与另一个 goroutine 通信,或者通过共享内存和使用同步包中的同步原语来防止竞争条件。

    问题的第二部分取决于具体情况。

    g1:
    y:=<-ch

    g2:
    ch<-x

    在上述场景中,g1 和 g2 是独立的 goroutine。比如说,g2 将值(不是指针)x 发送给 g1。然后 g1 得到 x 的副本,两个 goroutine 都可以在他们的副本上工作。如果 x 是一个指针,那么 g1 得到一个指向 x 的指针,然后 g1 和 g2 必须协调对该指针指向的值指针的访问。

    因此,如果 g2 在将值 x 发送给 g1 后没有读取或修改值 x,则可以发送指针以避免复制。

    关于go - 方法调用与 channel 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58849352/

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