繁体   English   中英

在golang中声明指向通道的任何影响?

[英]Any repercussions from declaring a pointer to a channel in golang?

type Stuff {
    ch chan int
}

type Stuff {
    ch *chan int
}

我知道通道是引用类型,因此在通过函数或作为参数返回时是可变的。 频道的地址在实际程序中什么时候有用?

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

例如,

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM