[go语言] golang的goroutine机制和runtime.GOMAXPROCS

之前对golang的goroutine机制和runtime.GOMAXPROCS不是很理解,今天抽空研究了一下,学习了其他大牛的文章。把自己的理解写下来。如有错误,请指正 golang的goroutine机制有点像线程池: 一、go 内部有三个对象: P对象(processor) 代表上下文(或者可以认为是cpu),M(work thread)代表工作线程,G对象(goroutine). 二、正常情况下一个cpu对象启一个工作线程对象,线程去检查并执行goroutine对象。碰到goroutin...阅读全文

2015-03-05 13:44 EthanDorisHope
阅读:28113 评论:0

golang判断文件或文件夹是否存在

golang判断文件或文件夹是否存在的方法为使用os.Stat()函数返回的错误值进行判断: 如果返回的错误为nil,说明文件或文件夹存在如果返回的错误类型使用os.IsNotExist()判断为true,说明文件或文件夹不存在如果返回的错误为其它类型,则不确定是否在存在 func PathExists(path string) (bool, error) { _, err := os.Stat(path) if err == nil { return true, nil } if os.IsN...阅读全文

2015-11-23 11:21 xielingyun
阅读:98020 评论:3

go中有缓存通道和无缓存通道区别

golang channel 有缓冲 与 无缓冲 是有重要区别的 我之前天真的认为 有缓冲与无缓冲的区别 只是 无缓冲的 是 默认 缓冲 为1 的缓冲式 其实是彻底错误的,无缓冲的与有缓冲channel有着重大差别 那就是一个是同步的 一个是非同步的 怎么说?比如 c1:=make(chan int) 无缓冲 c2:=make(chan int,1) 有缓冲 c1<-1 无缓冲的 不仅仅是 向 c1 通道放 1 而是 一直要有别的携程 <-c1 接手了 这个参数,那么c1<-1才会继续下去,要不...阅读全文

2016-04-18 11:45 Ellon-Daris
阅读:8254 评论:0

Golang优秀开源项目汇总(持续更新。。。)

Golang优秀开源项目汇总(持续更新。。。) 我把这个汇总放在github上了, 后面更新也会在github上更新。 https://github.com/hackstoic/golang-open-source-projects 。 欢迎fork, star , watch, 提issue。 资料参考来源:http://studygolang.com/projects 监控系统 序号 名称 项目地址 简介 1 OpenFalcon http://github.com/open-falcon/...阅读全文

2016-07-23 23:55 hackstoic
阅读:85347 评论:5

Go 语言编写单元测试

吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。登高而招,臂非加长也,而见者远;顺风而呼,声非加疾也,而闻者彰。假舆马者,非利足也,而致千里;假舟楫者,非能水也,而绝江河。君子生非异也,善假于物也。 -- 荀况 《劝学》 Go 语言对于单元测试是很重视的,且不说其他的作者的背景啊,开源库啊,第三方的支持之类的,有两点让我对 Go 语言关于单元测试的重视程度的有信心的点在于: Go 语言源代码和内置库自身的单元测试完备性 Go 语言自带单元测试命令 从这两点,我认为测试在 Go ...阅读全文

阅读:11393 评论:0

Go 代码重构:23 倍性能提升!

要说写代码是每位程序员的使命,那么写优秀的代码则是每位程序员的底线。本文作者分享基于 Go 语言的代码重构,使得性能提升 23 倍的快速方法。以下为译文:几周前,我读了一篇名为“Go 语言中的好代码与差代码”(https://medium.com/@teivah/good-code-vs-bad-code-in-golang-84cb3c5da49d)的文章,作者一步步地向我们介绍了一个实际业务用例的重构。文章的主旨是利用 Go 语言的特性将“差代码”转换成“好代码”,即更加符合惯例和更易读的代...阅读全文

2018-07-11 14:20:16 Val Deleplace
阅读:5656 评论:1

浏览器实时查看项目日志

# seelog > 有了seelog,妈妈再也不用担心我登录服务器查看日志le... 项目地址:https://github.com/xmge/seelog ### 项目介绍 * 与golang项目集成、提供浏览器实时查看日志的功能,类似 [tail -f xxx.log](https://www.cnblogs.com/fps2tao/p/7698224.html) * 支持多浏览器同时访问 * 支持浏览器websocket断线重连 * 支持暂停、清屏、截图功能 ...阅读全文

阅读:4420 评论:0

seelog源码阅读【笔记】

最近被后台日志弄的很烦,看到有个项目简简单单,又能满足需要,顺便试下看看效果,做下记录。只是记录下一部分内容,就不全部读了,关于源码可以去https://github.com/xmge/seelog。 结构设计 // websocket客户端 type client struct { id string socket *websocket.Conn send chan []byte } // 客户端管理 type clientManager struct { clients map[*clien...阅读全文

阅读:1232 评论:0

Golang学习笔记之日志log、zap

一、log日志包 log支持并发操作。其结构定义如下: type Logger struct { mu sync.Mutex // ensures atomic writes; protects the following fields prefix string // prefix to write at beginning of each line // ⽇志⾏前缀 flag int // properties // ⽇志打印格式标志,⽤于指定每⾏⽇志的打印格式 out io.Writer ...阅读全文

2018.12.18 20:19* 学生黄哲
阅读:1996 评论:2

golang 抢占式调度

这里说的 “golang 抢占式调度”,只是 goroutine 调度的一部分内容。个人对 go 的调度理解为:伪抢占 + working steal。 起因 Go在设计之初并没考虑将goroutine设计成抢占式的。用户负责让各个goroutine交互合作完成任务。一个goroutine只有在涉及到加锁,读写通道或者主动让出CPU等操作时才会触发切换。 垃圾回收器是需要stop the world的。如果垃圾回收器想要运行了,那么它必须先通知其它的goroutine合作停下来,这会造成较长时间...阅读全文

2018.12.25 11:49 小小吉他手
阅读:2636 评论:0

golang控制台字体的不同显示

编码含义 前景 背景 颜色 30 40 黑色 31 41 红色 32 42 绿色 33 43 黄色 34 44 蓝色 35 45 紫红色 36 46 青蓝色 37 47 白色 编码 含义 0 终端默认设置 1 高亮显示 4 使用下划线 5 闪烁 7 反白显示 8 不可见 举例 fmt.Printf("\x1b[42m%s\x1b[0m>\n", "aaa") // 使用分号组合 fmt.Printf("\x1b[4;42m%s\x1b[0m>\n", "aaa")阅读全文

阅读:1630 评论:0

go日志框架之logrus

本文转载自姜总 golang日志库 golang标准库的日志框架非常简单,仅仅提供了print,panic和fatal三个函数对于更精细的日志级别、日志文件分割以及日志分发等方面并没有提供支持。所以催生了很多第三方的日志库,但是在golang的世界里,没有一个日志库像slf4j那样在Java中具有绝对统治地位。golang中,流行的日志框架包括logrus、zap、zerolog、seelog等。 logrus是目前Github上star数量最多的日志库,目前(2018.08,下同)star数量...阅读全文

2019.02.26 10:46 哆啦在这A梦在哪
阅读:4200 评论:0

Gin(一):Hello Gin

更多文章 狂点 -> ISLAND 什么是 Gin Gin 是一个用 Golang 写的 http web 框架。 这是来自 Gin Github 上的描述。 开发环境 GoLand 2019.2 EAP GoLang 1.11.5 采用 Go Modules 进行管理 快速入门 用 GoLand 新建项目的时候,我们选择 Go Modules(vgo) ,填写我们的项目地址和项目名称,我们命名为 GinHello 。 点击 Create ,此时 Goland 为我们生成了项目目录,Go 项目的...阅读全文

2019年07月14日 youngxhui
阅读:2424 评论:0

无法go get golang.org

方法一 使用 go mod, 但golang版本要在1.11或以上 方法二 在github上clone 这些包 mkdir -p $GOPATH/src/golang.org/x/ cd $GOPATH/src/golang.org/x/ git clone https://github.com/golang/net.git git clone https://github.com/golang/sys.git git clone https://github.com/golang/tools....阅读全文

2019.07.27 15:52 GUIN蚂蚁
阅读:625 评论:0