在golang中声明指向通道的指针会产生什么影响?

时间:2014-04-05 19:31:44

标签: go

type Stuff {
    ch chan int
}

type Stuff {
    ch *chan int
}

我知道频道是参考类型&因此在函数或参数返回时是可变的。什么时候是真实世界节目中有用的频道地址?

1 个答案:

答案 0 :(得分:1)

也许您的频道用于旋转日志,您想要旋转(交换)日志;交换通道(日志)指针而不是值。

例如,

package main

import "fmt"

func swapPtr(a, b *chan string) {
    *a, *b = *b, *a
}

func swapVal(a, b chan string) {
    a, b = b, a
}

func main() {
    {
        a, b := make(chan string, 1), make(chan string, 1)
        a <- "x"
        b <- "y"
        swapPtr(&a, &b)
        fmt.Println("swapped")
        fmt.Println(<-a, <-b)
    }
    {
        a, b := make(chan string, 1), make(chan string, 1)
        a <- "x"
        b <- "y"
        swapVal(a, b)
        fmt.Println("not swapped")
        fmt.Println(<-a, <-b)
    }
}

输出:

swapped
y x
not swapped
x y