在go中使用linked channels进行数据广播

在go中使用linked channels进行数据广播 原文在这里(需翻墙),为啥想要翻译这篇文章是因为在实际中也碰到过如此的问题,而该文章的解决方式很巧妙,希望对大家有用。 在go中channels是一个很强大的东西,但是在处理某些事情上面还是有局限的。其中之一就是一对多的通信。channels在多个writer,一个reader的模型下面工作的很好,但是却不能很容易的处理多个reader等待获取一个writer发送的数据的情况。 处理这样的情况,可能的一个go api原型如下: type B...阅读全文

CSDN博客 2014-03-30 21:57 siddontang

[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...阅读全文

CSDN博客 2014-10-11 15:09 jthmath

GO语言已经可以写Android项目了,你知道吗?

新的库名叫go.mobile,包含了Go for Android的库的工具 在go.mobile库的readme中有介绍开发环境的搭建,不过仅限于早期版本,整合进IDE的构建系统还没有呢。 首先需要Android SDK,和NDK。然后需要添加一个环境变量:NDK_ROOT=$HOME/android/ndk-toolchain配置NDK工具ndk/build/tools/make-standalone-toolchain.sh -platform=android-9 --install-dir...阅读全文

CSDN博客 2014-09-17 14:05 q26335804

go-mysql,一个易用的mysql接口框架实现

介绍 go-mysql是一个用go写的mysql driver,使用接口类似于go自身的database sql,但是稍微有一点不同,现阶段还不支持集成进go database/sql中,但实现难度并不大,后续可能会接入。 go-mysql最先开始于mixer(一个用go实现的mysql proxy)中,随着mixer的演化,我觉得有必要将其mysql模块独立出来使用。对于mixer,后续我会详细介绍。 为什么要自己实现一套新的接口,而不是go自身的sql接口呢?最主要的原因在于我很不习惯使用Q...阅读全文

CSDN博客 2014-02-24 13:44 siddontang

golang:使用timingwheel进行大量ticker的优化

Ticker 最近的项目用go实现的服务器需要挂载大量的socket连接。如何判断连接是否还存活就是我们需要考虑的一个问题了。 通常情况下面,socket如果被客户端正常close,服务器是能检测到的,但是如果客户端突然拔掉网线,或者是断电,那么socket的状态在服务器看来可能仍然是established。而实际上该socket已经不可用了。 为了判断连接是否可用,通常我们会用timer机制来定时检测,在go里面,这非常容易实现,如下: ticker := time.NewTicker(60 ...阅读全文

CSDN博客 2014-01-16 21:39 siddontang

WeTalk 是如何使用 beego 并实现实时本地化的?

什么是 WeTalk? WeTalk,作为一款当下比较流行的轻论坛类型程序,是目前为止使用 beego 开发的最重量级开源产品。该产品是由 beego 开发团队成员 slene 创建并维护的,因此可以说 WeTalk 涵盖了当下 beego 所有的高级用法,是一个学习使用 beego 的最佳实例。 什么是实时本地化? 本地化,简单地讲就是程序提供一个多语言的用户界面。那么什么是实时本地化?顾名思义,就是可以随时切换用户界面所使用的语言,像许多国际站点就提供多语言的选项并即时切换,而不是像一些桌面...阅读全文

无闻的博客 2014-03-10 无闻

my golib:db query Result

go提供了一套统一操作database的sql接口,任何第三方都可以通过实现相应的driver来访问感兴趣的数据库。譬如我们项目中使用的Go-MySQL-Driver。 go提供了一套很好的机制来处理数据库的查询操作,譬如官方的例子: age := 27 rows, err := db.Query("SELECT name FROM users WHERE age=?", age) if err != nil { log.Fatal(err) } for rows.Next() { var na...阅读全文

CSDN博客 2013-12-16 22:36 siddontang

Sourcegraph 简介

Sourcegraph 号称通过分析全球的开源项目来真正地展现相关项目之间的关联。它主要提供以下两个功能: 根据代码查找文档与使用用例。 选择正确的库或函数来使用。 那么,如何才能开始使用呢?首页一个孤零零的搜索框对于新手来说确实显得有些寂寥。不得不承认,当下的 Sourcegraph 还只能进行针对性比较强的搜索,还未达到很高层次的模糊搜索。不过,官方给出了三个新手可以考虑使用的方面: 查找您已经熟悉的库或函数。 通过 Sourcegraph 的功能来学习如何使用某个库或函数。 在 Sourc...阅读全文

无闻的博客 2014-01-16 无闻

使用 Beego 与 Mgo 开发的示例程序

本文为技术翻译,原文地址(需翻墙):http://www.goinggo.net/2013/12/sample-web-application-using-beego-and.html 简介 当我发现 beego 框架时感觉非常激动。我只用了大约 4 个小时就将一个现有的 Web 应用程序移植到了该框架上并做了一些端对端测试的调用扩展。我想要与你分享这个基于 beego 的站点。 我构建了一个具有以下功能的示例 Web 应用程序: 实现了 2 个通过 mgo 驱动拉取 MongoDB 数据的 W...阅读全文

无闻的博客 2014-01-16 无闻

Go语言http.Get()超时设置(更新)

上次写了一遍日志分享http.Get()设置超时的方案,后来自己过了一遍代码发现逻辑上有问题。 在Dail之后设置了Deadline,之后就没再重新设置。这对于不重用连接的http请求是没有问题的,但是Go的http库是支持keep-alive的,可以重用TCP/IP连接。这意味着一个连接过了超时时间后再被使用,就会出现超时错误,因为没有再重置超时时间。 拿上次的实验代码,在发送请求时加一个keep-alive头,然后每次发送请求前加个Sleep,就可以重新以上情况。 怎样做到每次使用一个连接发...阅读全文

达达的主页 2014-02-26 达达

Go语言 unsafe的妙用

unsafe.Pointer其实就是类似C的void *,在golang中是用于各种指针相互转换的桥梁。uintptr是golang的内置类型,是能存储指针的整型,uintptr的底层类型是int,它和unsafe.Pointer可相互转换。uintptr和unsafe.Pointer的区别就是:unsafe.Pointer只是单纯的通用指针类型,用于转换不同类型指针,它不可以参与指针运算;而uintptr是用于指针运算的,GC 不把 uintptr 当指针,也就是说 uintptr 无法持有对...阅读全文

CSDN博客 2014-04-20 09:57 abv123456789

Go语言并发与并行学习笔记(三)

Go语言并发的设计模式和应用场景 以下设计模式和应用场景来自Google IO上的关于Goroutine的PPT:https://talks.golang.org/2012/concurrency.slide 本文的示例代码在: https://github.com/hit9/Go-patterns-with-channel 生成器 在Python中我们可以使用yield关键字来让一个函数成为生成器,在Go中我们可以使用信道来制造生成器(一种lazy load类似的东西)。 当然我们的信道并不是...阅读全文

CSDN博客 2014-01-14 16:10 kjfcpua

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 main() { // 开两个goroutine跑函数loop, loop函数负责打印10个数 go loop() go loop() for i := 0;...阅读全文

CSDN博客 2014-01-14 16:09 kjfcpua

[翻译]编译器(5)-语言规格说明书

原文在此。 ————翻译分隔线———— 编译器(5)-语言规格说明书 第一部分:介绍 第二部分:编译、转译和解释 第三部分:编译器设计概览 第四部分:语言设计概述 这是最后一部分关于 Calc 的设计规格! 设计语言 我希望尽量让语言保持简单。我管这个语言叫 Calc。很明了,就是用于计算器(calculator)。聪明吗,聪明吗?好,嗯,继续! 我还希望有一个单一的基础类型。我决定做一些与这个语言名字一样聪明的事情,就叫它 Integer(整数)。我知道,聪明绝顶。你的赞赏将被载入史册。为了简...阅读全文

mikespook 的博客 2014/05/11 mikespook

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

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

mikespook 的博客 2014/06/27 mikespook

使用CGO进行GC优化的注意事项

前阵子我利用cgo对游戏内存数据库的数据存储方式做了优化,减少了对象数量。但是程序放到线上环境后出现了段错误,直接导致进程退出,只好临时又把优化的部分去掉,去掉后程序又继续稳定运行了两周。 优化代码撤下来后,我重新整理了代码。整理下来,我觉得对含有字符串字段的表的优化逻辑太过复杂了,并且很难控制边界情况。 这里举个例子: type MyTable struct { Name string } func InsertMyTable(myTable MyTable) { nameLen := C.s...阅读全文

达达的主页 2013-12-07 达达

Go语言http.Get()超时设置

本文中的方案是有缺陷的,本文目前只当成历史记录,完整方案请参考(这篇)[http://1234n.com/?post/mwsw2r] Go自带的http包中提供了很完整的HTTP客户端和服务端功能。最近项目有几个需求需要从游戏服务端发起HTTP请求来调用运营商提供的接口。用Go语言实现起来超简单,http.Get()调一下就行了。 但是,http.Get()是没提供参数让调用者设置连接和读写的超时,项目在线上就遇到了永久阻塞在http.Get()不返回的情况。 上网找了一下资料,最后解决了这个问...阅读全文

达达的主页 2014-02-22 达达