简体   繁体   English

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

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

type Stuff {
    ch chan int
}

versus

type Stuff {
    ch *chan int
}

I know that channels are reference types & thus is mutable when returned by functions or as arguments. 我知道通道是引用类型,因此在通过函数或作为参数返回时是可变的。 When is an address of a channel useful in a real world program ? 频道的地址在实际程序中什么时候有用?

Perhaps your channel is used for rotating logs and you want to rotate (swap) logs; 也许您的频道用于轮换日志,而您想轮换(交换)日志; swap channel (log) pointers not values. 交换通道(日志)指针而不是值。

For example, 例如,

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)
    }
}

Output: 输出:

swapped
y x
not swapped
x y

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

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