golang的缓冲channel和无缓冲channel的区别

话说golang的channel同步的定义真是让人无力吐槽,码农的用户体验就这么难搞么,超耐磨阿,无缓冲和缓冲居然有这么大区别。。。。靠   转载一段网上的资料 -------------------------------------------------------------------------------------------------------------------------------------------------------- golang channel 有...阅读全文

2013-09-08 11:59 ziyouchutuwenwu
阅读:12137 评论:2

go channel的一些技巧

1. 一个已经被关闭的 channel 永远都不会阻塞。当一个 channel 一旦被关闭,就不能再向这个 channel 发送数据,但仍然可以尝试从 channel 中获取值。 2. 已经被关闭的 channel 会实时返回。 package main import ( "fmt" "sync" "time" ) func main() { const n = 100000 finish := make(chan bool) var done sync.Wai...阅读全文

2013-08-23 14:52 壬癸甲乙
阅读:6604 评论:1

golang手动管理内存

作者:John Graham-Cumming.   原文点击此处。翻译:Lubia Yang 前些天我介绍了我们对Lua的使用,implement our new Web Application Firewall.  另一种在CloudFlare (作者的公司)变得非常流行的语言是Golang。在过去,我写了一篇 how we use Go来介绍类似Railgun的网络服务的编写。 用Golang这样带GC的语言编写长期运行的网络服务有一个很大的挑战,那就是内存管理。 为...阅读全文

阅读:7956 评论:3

golang: 类型转换和类型断言

类型转换在程序设计中都是不可避免的问题。当然有一些语言将这个过程给模糊了,大多数时候开发者并不需要去关注这方面的问题。但是golang中的类型匹配是很严格的,不同的类型之间通常需要手动转换,编译器不会代你去做这个事。我之所以说通常需要手动转换,是因为interface类型作为一个特例,会有不同的处理方式。 golang中的所有类型都有自己的默认值,对此我做了个测试。 $GOPATH/src ----typeassert_test --------main.go main.go的代码如下...阅读全文

阅读:10921 评论:3

golang对共享内存的操作

不同进程间的内存是互相独立的,没办法直接互相操作对方内的数据,而共享内存则是靠操作系统提供的内存映射机制,让不同进程的一块地址空间映射到同一个虚拟内存区域上,使不同的进程可以操作到一块共用的内存块。共享内存是效率最高的进程间通讯机制,因为数据不需要在内核和程序之间复制。 共享内存用到的是系统提供的mmap函数,它可以将一个文件映射到虚拟内存的一个区域中,程序使用指针引用这个区域,对这个内存区域的操作会被回写到文件上,其函数原型如下: void *mmap(void *addr, siz...阅读全文

阅读:18758 评论:1

Golang:有趣的 channel 应用

严格意义上说,本文是我另外一片文章《Golang Funny: Play with Channel》的中文版本。不过,毕竟是用中文当母语的,所以就不翻译了,重新按照那个内容写过吧。 channel 是 golang 里相当有趣的一个功能,在我使用 golang 编码的经验里,大部分事件都会是在享受 channel 和 goroutine 配合的乐趣。所以本文主要介绍 channel 的一些有趣的用法。 这里有 Oling Cat 翻译的Go编程语言规范里关于 channel(信道)的描述: 信道...阅读全文

阅读:7575 评论:1

[翻译]绝妙的 channel

在编写 golang 程序的过程中,channel 会经常使用。本文对 channel 的使用的确很特别,同时也非常实用。 原文在此:http://dave.cheney.net/2013/04/30/curious-channels ————翻译分隔线———— 绝妙的 channel 在 Go 编程语言中,channel 是一个闪耀的特性。它提供了一种强大的、在不使用锁或临界区的情况下,从某个 goroutine 向其他 goroutine 发送数据流的方法。 今天我想讨论关于 channel...阅读全文

阅读:2098 评论:0

[翻译]Go 和汇编

使用 cgo 让 Go 跟 C 一起工作已经不是啥稀奇的了。有大量的第三方包直接对 C 的库做了封装,提供给 Go 使用。从 Go 项目本身的代码中可以看到,不但有 C 代码,还有汇编代码存在。那么在自己的项目中是否能跟汇编结合呢?这篇文章完整并清晰的解说了如何让 Go 和汇编协同工作。真得性能敏感?上汇编吧!! ————翻译分隔线———— Go 和汇编 关于 Go,我最喜欢的部分之一就是它那坚定不移的实用主义线路。有时我们过于强调语言的设计,而忘记了编程所包含的其他内容。例如: Go 的编译器...阅读全文

阅读:4396 评论:0

[翻译]冰激淋制造商和数据竞态

Dave 总是会给我们带来这种很浅显有趣,又意义深刻的文章。原文在此:Ice cream makers and data races。 ————翻译分隔线———— 冰激淋制造商和数据竞态 Dave Cheney 这是一篇关于数据竞态的文章。本文的相关代码在 Github 上:github.com/davecheney/benandjerry。 这个例子模拟了两个冰激淋制造商 Ben 和 Jerry 随机接待他们的客户。 package main import "fmt" type IceCrea...阅读全文

阅读:3018 评论:0

[Go语言]cgo用法演示

经历了数十年发展的C语言,各种各样的现成的库已经非常丰富。通过cgo,可以在Go语言中使用C语言代码,充分利用好现有的“轮子”。 本文所有代码,在下述环境中调试通过: Windows 8.1 64-bitGo 1.3.3 64-bitGCC 4.8.1 64-bit 要想使用cgo,要导入C“包”: import "C"这行代码的上方要紧挨着连续的若干行的注释,在这些注释中编写C代码。例如: /* int PlusOne(int n) { return n + 1; } */ import "C...阅读全文

2014-10-11 15:09 jthmath
阅读:12363 评论:2

golang指针与C指针的异同

总结一下golang中的指针与C语言的指针的用法。 总体一致: C的代码: ? 1 2 3 4 int *number; number = (int *) malloc(sizeof(int)); *number = 3; printf("%d\n", *number); golang的代码: ? 1 2 3 4 var pointer *int; pointer = new(int); *pointer = 3; fmt.Println(*pointer); 多重指针情况: C的代码: ? 1...阅读全文

阅读:11789 评论:3

Go中的make和new的区别

make用于内建类型(map、slice 和channel)的内存分配。new用于各种类型的内存分配。 内建函数new本质上说跟其它语言中的同名函数功能一样:new(T)分配了零值填充的T类型的内存空间,并且返回其地址,即一个*T类型的值。用Go的术语说,它返回了一个指针,指向新分配的类型T的零值。有一点非常重要:new返回指针。 内建函数make(T, args)与new(T)有着不同的功能,make只能创建slice、map和channel,并且返回一个有初始值(非零)的T类型,而不是*T。...阅读全文

阅读:17536 评论:0

Go项目的目录结构

项目目录结构如何组织,一般语言都是没有规定。但Go语言这方面做了规定,这样可以保持一致性 1、一般的,一个Go项目在GOPATH下,会有如下三个目录: |--bin |--pkg |--src 其中,bin存放编译后的可执行文件;pkg存放编译后的包文件;src存放项目源文件。一般,bin和pkg目录可以不创建,go命令会自动创建(如 go install),只需要创建src目录即可。对于pkg目录,曾经有人问:我把Go中的包放入pkg下面,怎么不行啊?他直接把Go包的源文件放入了pkg中。这显...阅读全文

2014-10-26 10:59 ghgyj
阅读:3172 评论:0

Go语言设计模式实践:组合(Composite)

关于本系列 这个系列首先是关于Go语言实践的。在项目中实际使用Go语言也有段时间了,一个体会就是不论是官方文档、图书还是网络资料,关于Go语言惯用法(idiom)的介绍都比较少,基本只能靠看标准库源代码自己琢磨,所以我特别想在这方面有一些收集和总结。 然后这个系列也是关于设计模式的。虽然Go语言不是一门面向对象编程语言,但是很多面向对象设计模式所要解决的问题是在程序设计中客观存在的。不管用什么语言,总是要面对和解决这些问题的,只是解决的思路和途径会有所不同。所以我想就以经典的设计模式作为切入点来...阅读全文

阅读:3720 评论:0