簡體   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