小编fly*_*ger的帖子

通道是否隐式通过引用传递

go tour有这个例子用于频道:https://tour.golang.org/concurrency/2

package main

import "fmt"

func sum(a []int, c chan int) {
    sum := 0
    for _, v := range a {
        sum += v
    }
    c <- sum // send sum to c
}

func main() {
    a := []int{7, 2, 8, -9, 4, 0}

    c := make(chan int)
    go sum(a[:len(a)/2], c)
    go sum(a[len(a)/2:], c)
    x, y := <-c, <-c // receive from c

    fmt.Println(x, y, x+y)
}
Run Code Online (Sandbox Code Playgroud)

在sum函数中修改通道c,并且在函数终止后更改仍然存在.显然c是通过引用传递的,但没有创建指向c的指针.是否通过引用隐式传递了通道?

concurrency pass-by-reference go channels

49
推荐指数
2
解决办法
2万
查看次数

标签 统计

channels ×1

concurrency ×1

go ×1

pass-by-reference ×1