golang goroutine channel [fmt.Println=>String]

初识golang,这部分也不是很了解,百度了一下,做个小记录

goroutine是golang用来做并发处理的,使用起来很简单  go func(){...}(),就是看起来随便用一般而容易go的滥用,所以使用时要仔细斟酌才好。

channel 大约是用来在线程间传递数据的,主线程开通一个channel,goroutine往channel中存入内容

1.channel只能用make创建

c := make(chan int)

2.channel中存入数据

c<-2  //把2存入到channel中

3.获取channel中数据

<-c

无buffer的channel  c:=make(chan int)  或  c:=make(chan int,0) 先取内容后放入数据(也就是先执行的地方使用<-c,后面在使用c<-2)

有buffer的channel  c:=make(chan int,10) 先放入数据后取内容(也就是先执行的地方使用c<-2,然后在使用<-c)

使用fmt.Println()时,如果当前结构中有定义String()方法时,会默认调用此方法返回值用于输出

时间: 2024-10-13 16:17:52

golang goroutine channel [fmt.Println=>String]的相关文章

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(2)—channel

Channel 1. 概述 “网络,并发”是Go语言的两大feature.Go语言号称“互联网的C语言”,与使用传统的C语言相比,写一个Server所使用的代码更少,也更简单.写一个Server除了网络,另外就是并发,相对python等其它语言,Go对并发支持使得它有更好的性能. Goroutine和channel是Go在“并发”方面两个核心feature. Channel是goroutine之间进行通信的一种方式,它与Unix中的管道类似. Channel声明: ChannelType = (

golang控制channel的出入口

golang控制channel的出入口 我们常常使用channel来在多个goroutine之间做数据通讯,但是chan作为函数的入参我们应该怎么写呢?也许有人觉得这个问题比较傻,不过这个还真的是我今天才知道的. 首先我们看看下面的代码: func main() { c := make(chan int) go in(c) go out(c) time.Sleep(time.Second) } func in(c chan int) { for i := 0; i < 10; i++ { c <

Golang的channel使用以及并发同步技巧

在学习<The Go Programming Language>第八章并发单元的时候还是遭遇了不少问题,和值得总结思考和记录的地方. 做一个类似于unix du命令的工具.但是阉割了一些功能,这里应该只实现-c(统计total大小) 和-h(以human比较容易辨识的显示出来)的功能. 首先我们需要构造一个 能够返回FileInfo信息数组的函数,我们把它取名为dirEntries: func dirEntries(dir string) []os.FileInfo { entries, er

如何优雅的关闭golang的channel

How to Gracefully Close Channels,这篇博客讲了如何优雅的关闭channel的技巧,好好研读,收获良多. 众所周知,在golang中,关闭或者向已关闭的channel发送数据都会引发panic. 谨遵优雅关闭channel的原则 不要在接受一端关闭channel 不要在有多个并发的senders中关闭channel.反过来说,如果只有一个协程充当sender,那么我们可以在这个sender协程内关闭掉channel. 一个简单的方法 SafeClose type M

go14--并发concurrency,Goroutine ,channel

package main /** 并发concurrency 很多人都是冲着 Go 大肆宣扬的高并发而忍不住跃跃欲试,但其实从 源码的解析来看,goroutine 只是由官方实现的超级"线程池"而已. 不过话说回来,每个实例 4-5KB 的栈内存占用和由于实现机制而大幅 减少的创建和销毁开销,是制造 Go 号称的高并发的根本原因.另外, goroutine 的简单易用,也在语言层面上给予了开发者巨大的便利. 并发不是并行: 并发切换时间片,单核是没有并行的,只有一个线程,在并行则是直接

golang 的 channel 实现 生产者/消费者 模型

package main import ( "fmt" "math/rand" "time" ) func productor(channel chan<- string) { for { channel <- fmt.Sprintf("%v", rand.Float64()) time.Sleep(time.Second * time.Duration(1)) } } func customer(channel

[golang]单向channel的应用“生产消费者模型”

单向channel应用"生产消费者模型" 单向channel最典型的应用是"生产者消费者模型" 所谓"生产者消费者模型": 某个模块(函数等)负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类.函数.协程.线程.进程等).产生数据的模块,就形象地称为生产者:而处理数据的模块,就称为消费者. 单单抽象出生产者和消费者,还够不上是生产者/消费者模型.该模式还需要有一个缓冲区处于生产者和消费者之间,作为一个中介.生产者把数据放入

使用goroutine+channel和java多线程+queue队列的方式开发各有什么优缺点?

我感觉很多项目使用java或者c的多线程库+线程安全的queue数据结构基本上可以实现goroutine+channel开发能达到的需求,所以请问一下为什么说golang更适合并发服务端的开发呢?使用goroutine+channel和java多线程+queue队列的方式开发各有什么优缺点? 使用goroutine+channel和java多线程+queue队列的方式开发各有什么优缺点? >> golang 这个答案描述的挺清楚的:http://www.goodpm.net/postreply