dtbrd80422 2014-04-05 19:31
浏览 9

在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 ?

  • 写回答

1条回答 默认 最新

  • dougu3591 2014-04-05 21:12
    关注

    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
    
    评论

报告相同问题?

悬赏问题

  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?