
golang
kjfcpua
这个作者很懒,什么都没留下…
展开
-
goroutine背后的系统知识
Go语言从诞生到普及已经三年了,先行者大都是Web开发的背景,也有了一些普及型的书籍,可系统开发背景的人在学习这些书籍的时候,总有语焉不详的感觉,网上也有若干流传甚广的文章,可其中或多或少总有些与事实不符的技术描述。希望这篇文章能为比较缺少系统编程背景的Web开发人员介绍一下goroutine背后的系统知识。1. 操作系统与运行库2. 并发与并行 (Concurrency and Pa转载 2013-12-20 17:59:35 · 1794 阅读 · 0 评论 -
golang test测试实例
本文的目的是对mymysql进行单元测试和性能测试准备工作:1 go get github.com/ziutek/mymysql/thrsafe2 在mysql建表和初始化数据(db是test)123456789101112drop转载 2014-01-13 17:00:55 · 4646 阅读 · 0 评论 -
Golang:有趣的 channel 应用
严格意义上说,本文是我另外一片文章《Golang Funny: Play with Channel》的中文版本。不过,毕竟是用中文当母语的,所以就不翻译了,重新按照那个内容写过吧。channel 是 golang 里相当有趣的一个功能,在我使用 golang 编码的经验里,大部分事件都会是在享受 channel 和 goroutine 配合的乐趣。所以本文主要介绍 channel 的一转载 2014-01-14 15:11:52 · 5140 阅读 · 0 评论 -
绝妙的 channel
绝妙的 channel在 Go 编程语言中,channel 是一个闪耀的特性。它提供了一种强大的、在不使用锁或临界区的情况下,从某个 goroutine 向其他 goroutine 发送数据流的方法。今天我想讨论关于 channel 的两个重要的特性,这些特性不但使其在控制数据流方面极为有用,而且用在流程控制方面也十分有效。一个已经被关闭的 channel 永远转载 2014-01-14 15:12:32 · 2679 阅读 · 0 评论 -
Go语言并发与并行学习笔记(一)
如果不是我对真正并行的线程的追求,就不会认识到Go有多么的迷人。Go语言从语言层面上就支持了并发,这与其他语言大不一样,不像以前我们要用Thread库 来新建线程,还要用线程安全的队列库来共享数据。以下是我入门的学习笔记。首先,并行!=并发, 两者是不同的,可以参考:http://concur.rspace.googlecode.com/hg/talk/concur.htm转载 2014-01-14 16:09:09 · 35086 阅读 · 19 评论 -
Go语言并发与并行学习笔记(二)
Go语言的并发和并行不知道你有没有注意到一个现象,还是这段代码,如果我跑在两个goroutines里面的话:var quit chan int = make(chan int)func loop() { for i := 0; i 10; i++ { fmt.Printf("%d ", i) } quit 0}func mai转载 2014-01-14 16:09:45 · 13867 阅读 · 7 评论 -
Go语言并发与并行学习笔记(三)
Go语言并发的设计模式和应用场景以下设计模式和应用场景来自Google IO上的关于Goroutine的PPT:https://talks.golang.org/2012/concurrency.slide本文的示例代码在: https://github.com/hit9/Go-patterns-with-channel生成器在Python中我们可以使用yield关转载 2014-01-14 16:10:28 · 5408 阅读 · 2 评论 -
Go中error类型的nil值和nil
先看C语言中的类似问题:空字符串。1const char* empty_str0 = "";2const char* empty_str1 = "\0empty";3const char* empty_str2 = NULL;转载 2014-01-22 15:23:23 · 3989 阅读 · 0 评论 -
golang: 类型转换和类型断言
类型转换在程序设计中都是不可避免的问题。当然有一些语言将这个过程给模糊了,大多数时候开发者并不需要去关注这方面的问题。但是golang中的类型匹配是很严格的,不同的类型之间通常需要手动转换,编译器不会代你去做这个事。我之所以说通常需要手动转换,是因为interface类型作为一个特例,会有不同的处理方式。golang Comma-ok switch测试 类型转换 类型断言类转载 2014-01-22 17:20:38 · 40880 阅读 · 2 评论 -
golang: 详解interface和nil
golang的nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值。nil是预先说明的标识符,也即通常意义上的关键字。在golang中,nil只能赋值给指针、channel、func、interface、map或slice类型的变量。如果未遵循这个规则,则会引发panic。对此官方文档有明确的说明:http://pkg.golang.org/pkg/builtin/转载 2014-01-22 16:16:33 · 4107 阅读 · 0 评论 -
GoLang之Concurrency再讨论
0 goroutine是否并发的问题GoLang通过go关键字实现并发操作(真的并发吗?),一个最简单的并发模型:package main import ( "fmt" "math/rand" "time" ) func routine(name string, delay time.D转载 2014-01-23 17:45:40 · 1534 阅读 · 0 评论 -
Go语言内存模型
目录:名词定义背景介绍Happens BeforeHappens-before 定义同步方法初始化创建Goroutine销毁GoroutineChannel通信锁Once参考链接名词定义执行体 - Go里的Goroutine或Java中的Thread背景介绍内存模型的目的是为了定义清楚变量的读写在不同执行体里的可见性。理解内存转载 2014-02-15 11:29:42 · 1742 阅读 · 0 评论 -
golang test说明解读
go test是go语言自带的测试工具,其中包含的是两类,单元测试和性能测试通过go help test可以看到go test的使用说明:格式形如:go test [-c] [-i] [build flags] [packages] [flags for test binary]参数解读:-c : 编译go test成为可执行的二进制文件,但是不运行测试。转载 2014-01-13 17:00:22 · 2178 阅读 · 0 评论 -
Go的异常处理 defer, panic, recover
Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱。因为开发者很容易滥用异常,甚至一个小小的错误都抛出一个异常。在Go语言中,使用多值返回来返回错误。不要用异常代替错误,更不要用来控制流程。在极个别的情况下,也就是说,遇到真正的异常的情况下(比如除数为0了)。才使用Go中引入的转载 2014-01-13 16:59:58 · 1483 阅读 · 0 评论 -
golang里channel的实现原理
channel是消息传递的机制,用于多线程环境下lock free synchronization.它同时具备2个特性:1. 消息传递2. 同步golang里的channel的性能,可以参考前一篇:http://blog.sina.com.cn/s/blog_630c58cb01016xur.html此外,自带的runtime package里已转载 2013-12-31 10:28:28 · 4340 阅读 · 0 评论 -
并发协程goroutine
1. 操作系统与运行库“运行库”这个词其实不止包括用于和编译后的目标执行程序进行链接的库文件,也包括了脚本语言或字节码解释型语言的运行环境,譬如Python,C#的CLR,Java的JRE。对系统调用的封装只是运行库的很小一部分功能,运行库通常还提供了诸如字符串处理、数学计算、常用数据结构容器等等不需要操作系统支持的功能,同时,运行库也会对操作系统支持的功能提供更易用更高级的封装,譬如带缓转载 2013-12-31 15:38:21 · 1721 阅读 · 0 评论 -
golang 里goroutine产生的线程数量
import "os"func main() { for i:=0; i go func() { for { b:=make([]byte, 10) os.Stdin.Read(b) // will block转载 2013-12-31 15:51:59 · 9855 阅读 · 0 评论 -
eclipse cdt mingw
操作系统:Windows1. 下载Eclipse CDT和MinGW(1)下载Eclipse:http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/indigo/R/eclipse-cpp-indigo-incubation-win32.zip&u转载 2014-01-08 15:30:19 · 806 阅读 · 0 评论 -
成为主流语言,Golang急需解决的几个问题
最近编程语言当中,golang无疑是风生水起,年度语言,服务器端语言,并发语言,皇冠可谓不少。golang开发的初衷是替换掉c/c++,作为系统级语言,加上在1.3版本中打算将编译系统从原来c语言开发的plan 9编译器,改为golang实现,可谓野心勃勃。golang最令人赞美的就是简单的语法,你可能花不了一天就能掌握golang的语法,关键字。golang的goroutine和channel给转载 2014-01-08 10:23:26 · 9040 阅读 · 2 评论 -
Go语言并发之美
EMC中国研究院 颜开简介 多核处理器越来越普及,那有没有一种简单的办法,能够让我们写的软件释放多核的威力?答案是:Yes。随着Golang, Erlang, Scale等为并发设计的程序语言的兴起,新的并发模式逐渐清晰。正如过程式编程和面向对象一样,一个好的编程模式需要有一个极其简洁的内核,还有在此之上丰富的外延,可以解决现实世界中各种各样转载 2014-01-10 17:28:05 · 1660 阅读 · 0 评论 -
goroutine与调度器
我们都知道Go语言是原生支持语言级并发的,这个并发的最小逻辑单元就是goroutine。goroutine就是Go语言提供的一种用户态线程,当然这种用户态线程是跑在内核级线程之上的。当我们创建了很多的goroutine,并且它们都是跑在同一个内核线程之上的时候,就需要一个调度器来维护这些goroutine,确保所有的goroutine都使用cpu,并且是尽可能公平的使用cpu资源。这个调度转载 2014-01-13 15:03:39 · 2113 阅读 · 0 评论 -
论go语言中goroutine的使用
go中的goroutine是go语言在语言级别支持并发的一种特性。初接触go的时候对go的goroutine的欢喜至极,实现并发简便到简直bt的地步。但是在项目过程中,越来越发现goroutine是一个很容易被大家滥用的东西。goroutine是一把双面刃。这里列举一下goroutine使用的几宗罪:1 goroutine的指针传递是不安全的12转载 2014-01-13 15:06:54 · 2941 阅读 · 0 评论 -
无辜的goroutine
本文主要是针对一些对于goroutine的“指控”提出我自己的看法,特别是轩脉刃的一篇博客文章《论go语言中goroutine的使用》提出了goroutine的几宗罪。实际上goroutine确实有增加程序复杂度而容易导致问题之处,特别是死锁;但是另外的一些指控,我认为实际上goroutine是没有直接责任的。以下就《论go语言中goroutine的使用》的内容一一提出我的观点转载 2014-01-13 15:07:35 · 1076 阅读 · 0 评论 -
关于Go,十件你可能不知道的事
1. 匿名结构体全局组合12345var config struct {//定义一个用于全局配置结构体 APIKey string OAuthConfig oauth.Config}config.APIKey = "BADC0C0A"数据模板12转载 2014-01-21 17:32:46 · 1988 阅读 · 1 评论 -
Go的List操作上的一个小“坑”
一直想不清楚一个问题,简单设计的东西到底是“坑多”还是“坑少”呢? 复杂的设计,考虑的太全面,使用起来更麻烦,使用者容易陷入乱,落入自身的陷阱;而简单的设计呢,在许多方面上又顾及不周,如果使用者对其“设计”没仔细研究,或者其实现本身又是一个黑盒子,也容易掉入到设计本身遗留下来的“陷阱”。下面是我刚开始使用Go写代码时碰到的一个小“坑”,这个“坑”的原因我归结为后者。这个“小坑”来自于go的转载 2014-01-21 17:34:38 · 3841 阅读 · 0 评论 -
Go语言中反射包的实现原理(The Laws of Reflection)
前言过去只是知道某些语言带有反射,但是一直没机会使用这种高级功能,所以也没有深入了解过。昨天看golang时里面提到reflection,既然这么多语言支持这个性质,那就深入了解下好了。这篇文档翻译自官方文档的The Laws of Reflection,翻译目的不是为了翻译,而是加深自己记忆以及理解,所以有些地方可能不会直译,因为我没那么高水平,有时自己能看懂,但是按着原话翻译出来给别人转载 2015-01-04 13:09:12 · 3185 阅读 · 0 评论