golang 简单的 channel

package main

import(
        "fmt"
        "os"
        "bufio"
        )

func main(){
in :=make(chan string)

out :=make(chan string)

reader := bufio.NewReader(os.Stdin)

        go func(){
                for {
                        a:= <-in
                        out <- a
                        fmt.Println("in",a)
                }
        }()

        go func(){
                for {

                        b:=<-out
                        fmt.Println("out",b)
                    }

        }()

for{
        line, _:= reader.ReadString(‘\n‘)
        fmt.Println("<----------------------------->")
        in <- line
}

}
时间: 2024-11-10 14:54:06

golang 简单的 channel的相关文章

golang的缓冲channel简单使用

目录 golang的缓冲channel简单使用 阻塞型 非阻塞 golang的缓冲channel简单使用 我们常用的是无缓冲channel : make(chan type) 其实make() 创建chan的第二个参数可设置缓冲channel的大小. 上述语句等价于 make(chan type, 1) 即创建了一个缓冲区大小为1channel 下面看有缓冲channel的两个例子. 阻塞型 demo : 协程1 :每隔1s 往有10个缓冲的channel里面写一条msg, 协程2:每隔3s 取

Golang并发中channel的分析

问题:面对并发问题,是用channel解决,还是用Mutex解决? 如果自己心里还没有清晰的答案,那就读下这篇文章,你会了解到: 使用channel解决并发问题的核心思路和示例 channel擅长解决什么样的并发问题,Mutex擅长解决什么样的并发问题 一个并发问题该怎么入手解解决 一个重要的plus思维 前戏 前面很多篇的文章都在围绕channel介绍,而只有前一篇sync的文章介绍到了Mutex,不是我偏心,而是channel在Golang是first class级别的,设计在语言特性中的,

Golang 简单爬虫实现,爬取小说

为什么要使用Go写爬虫呢? 对于我而言,这仅仅是练习Golang的一种方式. 所以,我没有使用爬虫框架,虽然其很高效. 为什么我要写这篇文章? 将我在写爬虫时找到资料做一个总结,希望对于想使用Golang写爬虫的你能有一些帮助. 爬虫主要需要解决两个问题: 获取网页 解析网页 如果这两个都无法解决的话就没法再讨论其他了. 开发一个爬取小说网站的爬虫会是一个不错的实践. 这是两个实例: Golang 简单爬虫实现 golang 用/x/net/html写的小爬虫,爬小说 这是需要的两个项目: go

golang 如何查看channel通道中未读数据的长度

可以通过内建函数len查看channel中元素的个数. 内建函数len的定义如下: func len(v Type) int The len built-in function returns the length of v, according to its type: Array: the number of elements in v.数组中元素的个数 Pointer to array: the number of elements in *v (even if v is nil).数组中

golang 简单web服务

1.golang print输入 package main import "fmt" func main() { fmt.Printf("Hello World!\n") } 执行如下命令go build print.go 2. go web 服务端 Go语言标准库 - net/http Go Web服务器的搭建就需要用到Go语言官方提供的标准库 net/http,通过http包提供了HTTP客户端和服务端的实现.同时使用这个包能很简单地对web的路由,静态文件,模

golang goroutine、channel和select

goroutine package main import "fmt" import "time" func printn(id int){ for i := 0;i<10;i++ { fmt.Println(id,":",i) } } func main(){ for i :=0;i<5;i++ { go printn(i) } fmt.Println("waiting...") time.Sleep(time.

golang for thread channel routine consumer and producer

package main import "time" func testThread(){ i:=3 go func(a int){ println(a) println("this is go func!") }(i) time.Sleep(1*time.Second) println("hello main thread!") } func testChannel(){ //read write channel ch:=make(chan i

Golang简单日志类

实现简单的日志写入文件功能运行环境:golang1.4.2+win7x64golang1.4.2+centos6.5×64 1 package Helper 2 3 import ( 4 “fmt” 5 “log” 6 “os” 7 “time” 8 ) 9 10 /*简单日志类*/ 11 /*注意,这个类不是线程安全的*/ 12 type LogFile struct { 13 mFile *os.File 14 mLogger *log.Logger 15 } 16 17 //创建日志对象

Golang中的channel代码示例----无缓冲、有缓冲、range、close

// code_043_channel_unbuffered project main.go package main import ( "fmt" "time" ) func main() { c := make(chan int, 0) //无缓冲的通道 //内置函数 len 返回未被读取的缓冲元素数量, cap 返回缓冲区大小 fmt.Printf("len(c)=%d, cap(c)=%d\n", len(c), cap(c)) go f