精华内容
下载资源
问答
  • 基于golang语言开发一个个人博客项目
  • 我为什么放弃Go语言

    万次阅读 多人点赞 2014-04-14 19:24:19
    我为什么放弃Go语言?有好几次,当我想起来的时候,总是会问自己:这个决定是正确的吗?是明智和理性的吗?其实我一直在认真思考这个问题。开门见山地说,我当初放弃Go语言,就是因为两个“不爽”:第一,对Go语言...

    我为什么放弃Go语言

    作者:庄晓立(Liigo)

    日期:2014年3月

    原创链接:http://blog.csdn.net/liigo/article/details/23699459

    转载请注明出处:http://blog.csdn.net/liigo

    有好几次,当我想起来的时候,总是会问自己:我为什么要放弃Go语言?这个决定是正确的吗?是明智和理性的吗?其实我一直在认真思考这个问题。

    开门见山地说,我当初放弃Go语言(golang),就是因为两个“不爽”:第一,对Go语言本身不爽;第二,对Go语言社区里的某些人不爽。毫无疑问,这是非常主观的结论。但是我有足够详实的客观的论据,用以支撑这个看似主观的结论。

    第-1节:更新日志(倒叙)

    Liigo 2021-07-13 补记14:今日HN热帖上大伙普遍吐槽channel,要用好真的很难。judofyr: "Channels are extremely subtle in my experience". laumars: "It took me a loooong time to fully wrap my head around channels. They’re definitely not explicit and full of subtle yet devastating bugs when used inappropriately (which is all to easy to do too)." 💡 另将本文更新日志从文末移至文首作为第-1节,并改为按日期倒叙排列。

    Liigo 2020-2-19 补记13:本文末尾增加Golang 2.0泛型相关信息。

    Liigo 2016-5-15 补记12:文中第2节(我为什么对Go社区的人不爽)增加netroby和D语言联合创始人的现身说法。补充说明Go 1.5后不再使用C语言开发。

    Liigo 2016-3-3 补记11:文中1.5节(垃圾回收器/GC)末尾增加一段,再次提示开发者重视Go语言GC的潜在问题。

    Liigo 2015-7-17 补记10:文中1.11节(泛型)增加来自HN的延伸阅读链接,开发者们抱怨Go欠缺泛型支持。

    Liigo 2015-7-3 补记9:文中1.5节(垃圾回收器/GC)增加 “Stop the world” 相关的三个链接。

    Liigo 2015-7-2 补记8:前两天网上出现了一篇本文的驳文,《驳狗屎文 "我为什么放弃Go语言"》,作者是chai2010,请读者们参照阅读,顺便领略一下本文后半部分描述过的Go粉的"风采"。(这篇驳文至少有两个好处:1 它全文引用了本文(便于读者参照);2 使用了本文当时的最新版(包含了补记7)。)

    Liigo 2015-6-2 补记7:补充两篇英文:Why Go Is Not Good(作者Will Yager重点批评了Go语言的设计不佳甚至是倒退),Leaving Go(作者Danny Gratzer放弃Go语言的原因主要是:没有泛型,充满黑魔法)。这两篇文章都是针对具体问题做具体分析的,与本文写作精神一致,务实不务虚。其中提到的对Go语言不满的地方,本文也多有涉及,结论类似。

    Liigo 2015-5-29 补记6:补充说明Go语言直到2015年下半年1.5发布后才将GOMAXPROCS设置为大于1的默认值(HN),他们文中承认之前一直默认设置为1是因为调度器不完善(与我此文最初发表时的猜测一致)。

    Liigo 2015-4-1 补记5:文中1.10(黑魔法)和1.12(接口)章节增加了两处“延伸阅读”链接,被引用的链接后面均有大量网友评论。此举主要是为了说明本文观点并非一家之言。

    Liigo 2015-1-31 补记4:全世界认为Go语言不好的可不只是我Liigo一个人。国外著名的问答网站Quora上面有个人气很高的提问,“为什么不要用Go语言”(英文网页),看看那排名最前的两个答案,以及广大程序员们给这两个答案的数百个“赞”,都足以说明Go语言自身的问题是客观存在的。人民群众的眼睛是雪亮的。

    Liigo 2014-4-29 补记3:Go语言的拥护者们,似乎连Go语言的“核心优势”都说不出几条。知乎上很有人气的一条问答《为什么要使用 Go 语言,Go 语言的优势在哪里》,连静态编译、GC、跨平台都拿出来说了(无视C/C++/Java),甚至连简单易学(无视Python/易语言)、“丰富的”标准库(跟谁比?敢跟Java/C#/Python比么?)、好用的工具链(gofmt)都扯出来了,可见除了“并发、网络”之外,他们也讲不出另外的什么核心优势了,只能靠一些周边的东西凑数。

    Liigo 2014-4-29 补记2:著名的编程语言研究专家王垠写了一篇《对 Go 语言的综合评价》(晚于本博文发表约三五天),也是总体上持批判态度,看衰Go语言。读者们可以对照阅读。

    Liigo 2014-4-29 补记1:Go语言社区还有一个很奇特的现象,就是中国社区独大,国外社区要小的多。有外国网友还专门写了一篇文章研究《为什么Golang中国社区独大》这个问题(文中也提到了我这篇博文)。通常来说,在IT和软件领域,向来都是国外先进国家引领技术潮流,然后国内缓慢跟进。而到了Go语言这里,恰恰反过来了,似乎暗示着在国外的主流软件开发技术人员并不怎么待见Go语言,Go只是在国内受到一帮人的盲目推崇而已,至于这帮人的眼光如何,反正我不看好。

    第0节:我的Go语言经历

    先说说我的经历吧,以避免被无缘无故地当作Go语言的低级黑。

    2009年底,Go语言(golang)第一个公开版本发布,笼罩着“Google公司制造”的光环,吸引了许多慕名而来的尝鲜者,我(Liigo)也身居其中,笼统的看了一些Go语言的资料,学习了基础的教程,因对其语法中的分号和花括号不满,很快就遗忘掉了,没拿它当一回事。

    两年之后,2011年底,Go语言发布1.0的计划被提上日程,相关的报道又多起来,我再次关注它,[重新评估][1]之后决定深入参与Go语言。我订阅了其users、nuts、dev、commits等官方邮件组,坚持每天阅读其中的电子邮件,以及开发者提交的每一次源代码更新,给Go提交了许多改进意见,甚至包括[修改Go语言编译器源代码][2]直接参与开发任务。如此持续了数月时间。

    到2012年初,Go 1.0发布,语言和标准库都已经基本定型,不可能再有大幅改进,我对Go语言未能在1.0定型之前更上一个台阶、实现自我突破,甚至带着诸多明显缺陷走向1.0,感到非常失望,因而逐渐疏远了它(所以Go 1.0之后的事情我很少关心)。后来看到即将发布的Go 1.1的Release Note,发现语言层面没有太大改变,只是在库和工具层面有所修补和改进,感到它尚在幼年就失去成长的动力,越发失望。外加Go语言社区里的某些人,其中也包括Google公司负责开发Go语言的某些人,其态度、言行,让我极度厌恶,促使我决绝地离弃Go语言。

    在上一个10年,我(Liigo)在我所属的公司里,深度参与了两个编程语言项目的开发。我想,对于如何判断某个编程语言的优劣,或者说至少对于如何判断某个编程语言是否适合于我自己,我应该还是有一点发言权的。

    [1]: https://plus.google.com/+LiigoZhuang/posts/CpRNPeDXUDW

    [2]: http://blog.csdn.net/liigo/article/details/7467309

    第1节:我为什么对Go语言不爽?

    Go语言有很多让我不爽之处,这里列出我现在还能记起的其中一部分,排名基本上不分先后。读者们耐心地看完之后,还能淡定地说一句“我不在乎”吗?

    1.1 不允许左花括号另起一行

    关于对花括号的摆放,在C语言、C++、Java、C#等社区中,十余年来存在持续争议,从未形成一致意见。在我看来,这本来就是主观倾向很重的抉择,不违反原则不涉及是非的情况下,不应该搞一刀切,让程序员或团队自己选择就足够了。编程语言本身强行限制,把自己的喜好强加给别人,得不偿失。无论倾向于其中任意一种,必然得罪与其对立的一群人。虽然我现在已经习惯了把左花括号放在行尾,但一想到被禁止其他选择,就感到十分不爽。Go语言这这个问题上,没有做到“团结一切可以团结的力量”不说,还有意给自己树敌,太失败了。

    1.2 编译器莫名其妙地给行尾加上分号

    对Go语言本身而言,行尾的分号是可以省略的。但是在其编译器(gc)的实现中,为了方便编译器开发者,却在词法分析阶段强行添加了行尾的分号,反过来又影响到语言规范,对“怎样添加分号”做出特殊规定。这种变态做法前无古人。在左花括号被意外放到下一行行首的情况下,它自动在上一行行尾添加的分号,会导致莫名其妙的编译错误(Go 1.0之前),连它自己都解释不明白。如果实在处理不好分号,干脆不要省略分号得了;或者,Scala和JavaScript的编译器是开源的,跟它们学学怎么处理省略行尾分号可以吗?

    1.3 极度强调编译速度,不惜放弃本应提供的功能

    程序员是人不是神,编码过程中免不了因为大意或疏忽犯一些错。其中有一些,是大家集体性的很容易就中招的错误(Go语言里的例子我暂时想不起来,C++里的例子有“基类析构函数不是虚函数”)。这时候编译器应该站出来,多做一些检查、约束、核对性工作,尽量阻止常规错误的发生,尽量不让有潜在错误的代码编译通过,必要时给出一些警告或提示,让程序员留意。编译器不就是机器么,不就是应该多做脏活累活杂活、减少人的心智负担么?编译器多做一项检查,可能会避免数十万程序员今后多年内无数次犯同样的错误,节省的时间不计其数,这是功德无量的好事。但是Go编译器的作者们可不这么想,他们不愿意自己多花几个小时给编译器增加新功能,觉得那是亏本,反而减慢了编译速度。他们以影响编译速度为由,拒绝了很多对编译器改进的要求。典型的因噎废食。强调编译速度固然值得赞赏,但如果因此放弃应有的功能,我不赞成。

    1.4 错误处理机制太原始

    在Go语言中处理错误的基本模式是:函数通常返回多个值,其中最后一个值是error类型,用于表示错误类型极其描述;调用者每次调用完一个函数,都需要检查这个error并进行相应的错误处理:if err != nil { /*这种代码写多了不想吐么*/ }。此模式跟C语言那种很原始的错误处理相比如出一辙,并无实质性改进。实际应用中很容易形成多层嵌套的if else语句,可以想一想这个编码场景:先判断文件是否存在,如果存在则打开文件,如果打开成功则读取文件,如果读取成功再写入一段数据,最后关闭文件,别忘了还要处理每一步骤中出现错误的情况,这代码写出来得有多变态、多丑陋?实践中普遍的做法是,判断操作出错后提前return,以避免多层花括号嵌套,但这么做的后果是,许多错误处理代码被放在前面突出的位置,常规的处理逻辑反而被掩埋到后面去了,代码可读性极差。而且,error对象的标准接口只能返回一个错误文本,有时候调用者为了区分不同的错误类型,甚至需要解析该文本。除此之外,你只能手工强制转换error类型到特定子类型(静态类型的优势没了)。至于panic - recover机制,致命的缺陷是不能跨越库的边界使用,注定是一个半成品,最多只能在自己的pkg里面玩一玩。Java的异常处理虽然也有自身的问题(比如Checked Exceptions),但总体上还是比Go的错误处理高明很多。

    1.5 垃圾回收器(GC)不完善、有重大缺陷

    在Go 1.0前夕,其垃圾回收器在32位环境下有内存泄漏,一直拖着不肯改进,这且不说。Go语言垃圾回收器真正致命的缺陷是,会导致整个进程不可预知的间歇性停顿(Stop the World)。像某些大型后台服务程序,如游戏服务器、APP容器等,由于占用内存巨大,其内存对象数量极多,GC完成一次回收周期,可能需要数秒甚至更长时间,这段时间内,整个服务进程是阻塞的、停顿的,在外界看来就是服务中断、无响应,再牛逼的并发机制到了这里统统失效。垃圾回收器定期启动,每次启动就导致短暂的服务中断,这样下去,还有人敢用吗?这可是后台服务器进程,是Go语言的重点应用领域。以上现象可不是我假设出来的,而是事实存在的现实问题,受其严重困扰的也不是一家两家了(2013年底ECUG Con 2013京东的刘奇提到了Go语言的GC、defer、标准库实现是性能杀手,最大的痛苦是GC;美团的沈锋也提到Go语言的GC导致后台服务间隔性停顿是最大的问题。更早的网络游戏仙侠道开发团队也曾受Go垃圾回收的沉重打击)。在实践中,你必须努力减少进程中的对象数量,以便把GC导致的间歇性停顿控制在可接受范围内。除此之外你别无选择(难道你还想自己更换GC算法、甚至砍掉GC?那还是Go语言吗?)。跳出圈外,我近期一直在思考,一定需要垃圾回收器吗?没有垃圾回收器就一定是历史的倒退吗?(可能会新写一篇博客文章专题探讨。)

    2016年3月3日Liigo补记:直到2015年底,Go 1.5新GC发布后数月,仍获知有大陆圈内知名团队因为GC的原因考虑换掉Go语言,颇有感触。当软件系统逐步发展到更庞大更复杂的时候,Go语言的垃圾回收器(GC)就变成了指不定啥时候会出现的拦路虎,让人进退两难。进,暂时没有确切有效的技术手段对付响应延迟和内存暴涨;退,多年开发付出的心血付之东流损失惨重。语言选型之前多做调查分析,如果一定要用Go语言开发,控制系统规模和复杂度,避开底层的核心业务,可能是比较明智的选择。

    1.6 禁止未使用变量和多余import

    Go编译器不允许存在被未被使用的变量和多余的import,如果存在,必然导致编译错误。但是现实情况是,在代码编写、重构、调试过程中,例如,临时性的注释掉一行代码,很容易就会导致同时出现未使用的变量和多余的import,直接编译错误了,你必须相应的把变量定义注释掉,再翻页回到文件首部把多余的import也注释掉,……等事情办完了,想把刚才注释的代码找回来,又要好几个麻烦的步骤。还有一个让人蛋疼的问题,编写数据库相关的代码时,如果你import某数据库驱动的pkg,它编译给你报错,说不需要import这个未被使用的pkg;但如果你听信编译器的话删掉该import,编译是通过了,运行时必然报错,说找不到数据库驱动;你看看程序员被折腾的两边不是人,最后不得不请出大神:`import _`。对待这种问题,一个比较好的解决方案是,视其为编译警告而非编译错误。但是Go语言开发者很固执,不容许这种折中方案。

    1.7 创建对象的方式太多令人纠结

    创建对象的方式,调用new函数、调用make函数、调用New方法、使用花括号语法直接初始化结构体,你选哪一种?不好选择,因为没有一个固定的模式。从实践中看,如果要创建一个语言内置类型(如channel、map)的对象,通常用make函数创建;如果要创建标准库或第三方库定义的类型的对象,首先要去文档里找一下有没有New方法,如果有就最好调用New方法创建对象,如果没有New方法,则退而求其次,用初始化结构体的方式创建其对象。这个过程颇为周折,不像C++、Java、C#那样直接new就行了。

    1.8 对象没有构造函数和析构函数

    没有构造函数还好说,毕竟还有自定义的New方法,大致也算是构造函数了。没有析构函数就比较难受了,没法实现RAII。额外的人工处理资源清理工作,无疑加重了程序员的心智负担。没人性啊,还嫌我们程序员加班还少吗?C++里有析构函数,Java里虽然没有析构函数但是有人家finally语句啊,Go呢,什么都没有。没错,你有个defer,可是那个defer问题更大,详见下文吧。

    1.9 defer语句的语义设定不甚合理

    Go语言设计defer语句的出发点是好的,把释放资源的“代码”放在靠近创建资源的地方,但把释放资源的“动作”推迟(defer)到函数返回前执行。遗憾的是其执行时机的设置似乎有些不甚合理。设想有一个需要长期运行的函数,其中有无限循环语句,在循环体内不断的创建资源(或分配内存),并用defer语句确保释放。由于函数一直运行没有返回,所有defer语句都得不到执行,循环过程中创建的大量短暂性资源一直积累着,得不到回收。而且,系统为了存储defer列表还要额外占用资源,也是持续增加的。这样下去,过不了多久,整个系统就要因为资源耗尽而崩溃。像这类长期运行的函数,http.ListenAndServe()就是典型的例子。在Go语言重点应用领域,可以说几乎每一个后台服务程序都必然有这么一类函数,往往还都是程序的核心部分。如果程序员不小心在这些函数中使用了defer语句,可以说后患无穷。如果语言设计者把defer的语义设定为在所属代码块结束时(而非函数返回时)执行,是不是更好一点呢?可是Go 1.0早已发布定型,为了保持向后兼容性,已经不可能改变了。小心使用defer语句!一不小心就中招。

    1.10 许多语言内置设施不支持用户定义的类型

    for in、make、range、channel、map等都仅支持语言内置类型,不支持用户定义的类型(?)。用户定义的类型没法支持for in循环,用户不能编写像make、range那样“参数类型和个数”甚至“返回值类型和个数”都可变的函数,不能编写像channel、map那样类似泛型的数据类型。语言内置的那些东西,处处充斥着斧凿的痕迹。这体现了语言设计的局限性、封闭性、不完善,可扩展性差,像是新手作品——且不论其设计者和实现者如何权威。延伸阅读:Go语言是30年前的陈旧设计思想,用户定义的东西几乎都是二等公民(Tikhon Jelvis)。

    1.11 没有泛型支持,常见数据类型接口丑陋

    没有泛型的话,List、Set、Tree这些常见的基础性数据类型的接口就只能很丑陋:放进去的对象是一个具体的类型,取出来之后成了无类型的interface{}(可以视为所有类型的基础类型),还得强制类型转换之后才能继续使用,令人无语。Go语言缺少min、max这类函数,求数值绝对值的函数abs只接收/返回双精度小数类型,排序接口只能借助sort.Interface无奈的回避了被比较对象的类型,等等等等,都是没有泛型导致的结果。没有泛型,接口很难优雅起来。Go开发者没有明确拒绝泛型,只是说还没有找到很好的方法实现泛型(能不能学学已经开源的语言呀)。现实是,Go 1.0已经定型,泛型还没有,那些丑陋的接口为了保持向后兼容必须长期存在着。延伸阅读:HN网友抱怨Go没有泛型

    1.12 实现接口不需要明确声明

    这一条通常是被当作Go语言的优点来宣传的。但是也有人不赞同,比如我。如果一个类型用Go语言的方式默默的实现了某个接口,使用者和代码维护者都很难发现这一点(除非仔细核对该类型的每一个方法的函数签名,并跟所有可能的接口定义相互对照),自然也想不到与该接口有关的应用,显得十分隐晦,不直观。支持者可能会辩解说,我可以在文档中注明它实现了哪些接口。问题是,写在文档中,还不如直接写到类型定义上呢,至少还能得到编译器的静态类型检查。缺少了编译器的支持,当接口类型的函数签名被改变时,当实现该接口的类型方法被无意中改变时,实现者可能很难意识到,该类型实现该接口的隐含约束事实上已经被打破了。又有人辩解说,我可以通过单元测试确保类型正确实现了接口呀。我想说的是,明明可以通过明确声明实现接口,享受编译器提供的类型检查,你却要自己找麻烦,去写原本多余的单元测试,找虐很爽吗?Go语言的这种做法,除了减少一些对接口所在库的依赖之外,没有其他好处,得不偿失。延伸阅读:为什么我不喜欢Go语言式的接口(老赵)。

    1.13 省掉小括号却省不掉花括号

    Go语言里面的if语句,其条件表达式不需要用小括号扩起来,这被作为“代码比较简洁”的证据来宣传。可是,你省掉了小括号,却不能省掉大括号啊,一条完整的if语句至少还得三行吧,人家C、C++、Java都可以在一行之内搞定的(可以省掉花括号)。人家还有x?a:b表达式呢,也是一行搞定,你Go语言用if else写至少得五行吧?哪里简洁了?

    1.14 编译生成的可执行文件尺寸非常大

    记得当年我写了一个很简单的程序,把所有系统环境变量的名称和值输出到控制台,核心代码也就那么三五行,结果编译出来把我吓坏了:EXE文件的大小超过4MB。如果是C语言写的同样功能的程序,0.04MB都是多的。我把这个信息反馈到官方社区,结果人家不在乎。是,我知道现在的硬盘容量都数百GB、上TB了……可您这种优化程度……怎么让我相信您在其他地方也能做到不错呢。(再次强调一遍,我所有的经验和数据都来自Go 1.0发布前夕。)

    1.15 不支持动态加载类库

    静态编译的程序当然是很好的,没有额外的运行时依赖,部署时很方便。但是之前我们说了,静态编译的文件尺寸很大。如果一个软件系统由多个可执行程序构成,累加起来就很可观。如果用动态编译,发布时带同一套动态库,可以节省很多容量。更关键的是,动态库可以运行时加载和卸载,这是静态库做不到的。还有那些LGPL等协议的第三方C库受版权限制是不允许静态编译的。至于动态库的版本管理难题,可以通过给动态库内的所有符号添加版本号解决。无论如何,应该给予程序员选择权,让他们自己决定使用静态库还是动态库。一刀切的拒绝动态编译是不合适的。

    1.16 其他

    • 不支持方法和函数重载(overload)
    • 导入pkg的import语句后边部分竟然是文本(import ”fmt”)
    • 没有enum类型,全局性常量难以分类,iota把简单的事情复杂化
    • 定义对象方法时,receiver类型应该选用指针还是非指针让人纠结
    • 定义结构体和接口的语法稍繁,interface XXX{} struct YYY{} 不是更简洁吗?前面加上type关键字显得罗嗦。
    • 测试类库testing里面没有AssertEqual函数,标准库的单元测试代码中充斥着if a != b { t.Fatal(...) }
    • 语言太简单,以至于不得不放弃很多有用的特性,“保持语言简单”往往成为拒绝改进的理由。
    • 标准库的实现总体来说不甚理想,其代码质量大概处于“基本可用”的程度,真正到企业级应用领域,往往就会暴露出诸多不足之处。
    • 版本都发展到1.2了,goroutine调度器依旧默认仅使用一个系统线程。GOMAXPROCS的长期存在似乎暗示着官方从来没有足够的信心,让调度器正确安全地运行在多核环境中。这跟Go语言自身以并发为核心的定位有致命的矛盾。(直到2015年下半年1.5发布后才有改观
    • 官方发行版中包含了一个叫oracle的辅助程序,与Oracle数据库毫无关系,却完全无视两者之间的名称混淆。

    上面列出的是我目前还能想到的对Go语言的不爽之处,毕竟时间过去两年多,还有一些早就遗忘了。其中一部分固然是小不爽,可能忍一忍就过去了,但是很多不爽积累起来,总会时不时地让人难受,时间久了有自虐的感觉。程序员的工作生活本来就够枯燥的,何必呢。

    必须要说的是,对于其中大多数不爽之处,我(Liigo)都曾经试图改变过它们:在Go 1.0版本发布之前,我在其官方邮件组提过很多意见和建议(甚至包括提交代码CL),极力据理力争,可以说付出很大努力,目的就是希望定型后的Go语言是一个相对完善的、没有明显缺陷的编程语言。结果是令人失望的,我人微言轻、势单力薄,不可能影响整个语言的发展走向。1.0之前,最佳的否定自我、超越自我的机会,就这么遗憾地错过了。我最终发现,很多时候不是技术问题,而是技术人员的问题。

    第2节:我为什么对Go语言的某些人不爽?

    这里提到的“某些人”主要是两类:一、负责专职开发Go语言的Google公司员工;二、Go语言的推崇者和脑残粉丝。我跟这两类人打过很多交道,不胜其烦。再次强调一遍,我指的是“某些”人,而不是所有人,请不要对号入座。

    Google公司内部负责专职开发Go语言的核心开发组某些成员,他们倾向于闭门造车,固执己见,对第三方提出的建议不重视。他们常常挂在嘴边的口头禅是:现有的做法很好、不需要那个功能、我们开发Go语言是给Google自己用的、Google不需要那个功能、如果你一定要改请fork之后自己改、别干提意见请提交代码。很多言行都是“反开源”的。通过一些具体的例子,还能更形象的看清这一层。就留下作为课后作业吧。

    我最不能接受的就是他们对1.0版本的散漫处理。那时候Go还没到1.0,初出茅庐的小学生,有很大的改进空间,是全面翻新的最佳时机,彼时不改更待何时?1.0是打地基的版本,基础不牢靠,等1.0定型之后,处处受到向后兼容性的牵制,束手缚脚,每前进一步都阻力重重。急于发布1.0,过早定型,留下诸多遗憾,彰显了开发者的功利性强,在技术上不追求尽善尽美。

    Go语言的核心开发成员,他们日常的开发工作是使用C语言——Go语言的编译器和运行时库,包括语言核心数据结构和算法map、channel、scheduler,都是C开发的——真正用自己开发的Go语言进行实际的大型应用开发的机会并不多。虽然标准库是用Go语言自己写的,但他们却没有大范围使用标准库的经历。实际上,他们缺少使用Go语言的实战开发经验,往往不知道处于开发第一线的用户真正需要什么,无法做到设身处地为程序员着想。缺少使用Go语言的亲身经历,也意味着他们不能在日常开发中,及时发现和改进Go语言的不足。这也是他们往往自我感觉良好的原因。(2016年5月15日补记:2015年8月Go 1.5版本之后不再使用C语言开发。)

    Go语言社区里,有一大批Go语言的推崇者和脑残粉丝,他们满足于现状,不思进取,处处维护心中的“神”,容不得批评意见,不支持对语言的改进要求。当年我对Go语言的很多批评和改进意见,极少得到他们的支持,他们不但不支持还给予打击,我就纳闷了,他们难道不希望Go语言更完善、更优秀吗?我后来才意识到,他们跟乔帮主的苹果脑残粉丝们,言行一脉相承,具有极端宗教倾向,神化主子、打击异己真是不遗余力呀。简简单单的技术问题,就能被他们上升到意识形态之争。现实的例子是蛮多的,有兴趣的到网上去找吧。正是因为他们的存在,导致更多理智、清醒的Go语言用户无法真正融入整个社区。

    如果一个项目、团队、社区,到处充斥着赞美、孤芳自赏、自我满足、不思进取,排斥不同意见,拒绝接纳新方案,我想不到它还有什么前进的动力。逆水行舟,是不进反退的。

    2016年5月15日补记:@netroby:“Golang社区的神经病和固执,我深有体会。我曾经发过Issue,请求Golang官方,能为doc加上高亮,这样浏览器阅读文档的时候,能快速阅读代码参考。但是被各种拒绝. 他们的理由是很多开发者不喜欢高亮。” https://github.com/golang/go/issues/13178

    2016年5月15日补记:C++天才人物、D语言联合创始人Andrei Alexandrescu:“Go所走的路线在一些问题上持有极其强硬和死板态度,这些问题有大有小。在比较大的方面,泛型编程被严格控制,甚至贬低到只有"N"个字;有关泛型编程的讨论都是试图去劝阻任何有意义的尝试,这已经足够让人觉得耻辱。从长远来看,技术问题的政治化是一种极其有害的模式,所以希望Go社区能够找到修正它的方法。”  http://www.csdn.net/article/2015-12-20/2826517

    第3节:还有比Go语言更好的选择吗?

    我始终坚持一个颇有辩证法意味的哲学观点:在更好的替代品出现之前,现有的就是最好的。失望是没有用的,抱怨是没有用的,要么接受,要么逃离。我曾经努力尝试过接受Go语言,失败之后,注定要逃离。发现更好的替代品之后,无疑加速了逃离过程。还有比Go语言更好的替代品吗?当然有。作为一个屌丝程序员,我应该告诉你它是什么,但是我不说。现在还不是时候。我现在不想把这两门编程语言对立起来,引发另一场潜在的语言战争。这不是此文的本意。如果你非要从现有信息中推测它是什么,那完全是你自己的事。如果你原意等,它或许很快会浮出水面,也未可知。

    第4节:写在最后

    我不原意被别人代表,也不愿意代表别人。这篇文章写的是我,一个叫Liigo的80后屌丝程序员,自己的观点。你完全可以主观地认为它是主观的,也完全可以客观地以为它是客观的,无论如何,那是你的观点。

    这篇文字是从记忆里收拾出来的。有些细节虽可考,而不值得考。——我早已逃离,不愿再回到当年的场景。文中涉及的某些细节,可能会因为些许偏差,影响其准确性;也可能会因为缺少出处,影响其客观性。如果有人较真,非要去核实,我相信那些东西应该还在那里。

    Go语言也非上文所述一无是处,它当然有它的优势和特色。读者们判断一件事物,应该是优劣并陈,做综合分析,不能单听我一家负面之言。但是它的那些不爽之处,始终让我不爽,且不能从其优秀处得以完全中和,这是我不得不放弃它的原因。


    关于对作者倾向性质疑的声明

    读者看到本文全都是Go语言负面性的内容,没有涉及一点Go语言好的地方,因而质疑作者的盲目倾向。出现这种结果完全是因为文章主题所限。此前本文末尾也简单提到过,评估一件事物,应当优劣并陈,优势项加分,劣势项减分,做综合评估分析。如果有突出的重大优势,则可以容忍一些较大的劣势;但如果有致命的劣势或多项大劣势,则再大的优势也无法与之中和。中国乒乓球界讲领军人物必须做到“技术全面,特长突出,没有明显弱点”,我甚为赞同。用这句话套用Go语言,可以说“技术不全面(人家自己说成简洁),有一点特长(并发),有明显的弱点(包括但不限于本文列出的这些)”。如此一来,优势都被劣势中和了,劣势还是那么突出,自然是得负分,自然是弃用,自然是没有好印象。我在这里可以说观点鲜明、态度明确,不和稀泥。与其看那些盲目推崇Go语言的人和文章,笼统的说“好”,不如也顺便看看本文,具体到细节地说“不好”。凡是具体到细节的东西,都是容易证实或证伪的,比笼统的东西(无论是"黑"还是"粉")可信性更高一些。

    关于对作者阴谋论的声明

    有某些阴谋论者(例如谢某),说我因一个Pull Request被Go开发者拒绝而“怀恨至今”,暗示此文是故意报复、抹黑Go语言。我对Golang有恨吗?当然是有的,那是一个不爽接一个不爽(如本文一一罗列的那些),逐步累积,由量变形成质变的结果,是我对Golang综合客观评估之后的主观态度,并非由哪一个单独的事件所主导。要说Pull Request被拒绝,Rust开发者拒绝我的PR次数还少吗?比如 https://github.com/mozilla/rust/pull/13014 和 https://github.com/liigo/rust/tree/xp (https://github.com/rust-lang/rust/issues/12842),要是再算上被拒的Issues,那就多的数不清了。我显然不可能因为某些个别的事件,影响到我对某个事物的综合评估(参见前文)。那本文是“故意抹黑”Go语言吗?我觉得不是,理由有二:1、这是作者的主观感受,2、这些感受是以许多客观事实为基础的。如果本文一一列出的那些现象,是不存在的,是虚构出来的,是凭空生成的,那么作者一定是“低级黑”。问题是,那些都是客观存在的事实。把事实说出来,怎么能叫“黑”呢?欢迎读者客观而详细的指正本文中的所有错误。

    关于Golang 2.0的泛型

    今天(2020年2月19日)看到HN的一篇关于 Go2 Generics 的讨论。有网友说到:

    Ken Thompson and Rob Pike are mostly out not at all involved with Go anymore. They are 2/3 of the original creators. It’s different people making the decisions now.

    我找到如下两个链接基本证实了Rob Pike确实已经淡出Golang的核心开发组:

    Rob Pike最近两年仅提交了4k行无关紧要的代码;Ken Thompson就更不用说了,许多年前就已经淡出;Russ Cox似乎也不太参与Go2相关的决策。如此看来,对于Go2的泛型而言,非技术方面的障碍已不存在,剩下只是技术性障碍。

    Ian Lance Taylor 上周(2020年2月13日)说到

    We're working on it. Some things take time.

    展开全文
  • go语言开源项目

    2017-03-07 16:24:06
    谷歌官方维护了一个基于go语言的开源项目列表:https://github.com/golang/go/wiki/Projects其中有非常多的优秀项目值得学习,有几百行代码适合新手阅读的项目,也有大型如nsq、docker等的项目。下面推荐几款适合...

    谷歌官方维护了一个基于go语言的开源项目列表:

    https://github.com/golang/go/wiki/Projects

    其中有非常多的优秀项目值得学习,有几百行代码适合新手阅读的项目,也有大型如nsq、docker等的项目。

    下面推荐几款适合学习的项目:

    1、cache2go

    https://github.com/muesli/cache2go

    比较简单的一个缓存库,代码量很少,适合新手学习,可以学习到锁、goroutines等。

    2、groupcache

    https://github.com/golang/groupcache

    与memcached同一作者,相当于是memcached的go语言实现。

    3、nsq

    https://github.com/bitly/nsq

    消息分发平台,阅读代码可以了解到很多分布式、负载均衡等方面的编程。

    4、docker

    https://github.com/docker/docker

    时下很火的项目,个人感觉适合应用,不适合入门阅读学习,待成为了高手后可以研究下其实现。

    展开全文
  • 原文来自 go语言中文网 http://studygolang.com/articles/2233 在Go的官网文档How to Write Go Code中,已经介绍了Go的项目目录一般包含以下几个: src 包含项目的源代码文件; pkg 包含编译后生成的包/库...

    原文来自 go语言中文网 http://studygolang.com/articles/2233


    Go的官网文档How to Write Go Code中,已经介绍了Go的项目目录一般包含以下几个:

    • src 包含项目的源代码文件;
    • pkg 包含编译后生成的包/库文件;
    • bin 包含编译后生成的可执行文件。

    可以通过下面的例子来说明工程目录的组织管理。(Windows 7 64位,go version go1.3.3 windows/amd64)

    1. 创建一个库文件

    创建一个库文件a.go并保存在src目录的一个子目录下面。

    package myfunc
    
    import "fmt"
    
    func Afunc(str string) {
    	fmt.Println("a.go is package mufunc.")
    	fmt.Println(str)
    }

    这时候目录结构如下:

    <dirtest>
         |--<src>
              |--<mufunc>
                     |--a.go

    2. 创建main

    注意,如果用LITEIDE创建go项目,要编译的主函数必须放在main包下面,否则既不提示出错原因,也不会生成可执行文件,比较操蛋,还好最后发现了。

    关于main包的位置,可以参照参考资料2,个人建议放在scr/main下面,毕竟官方推荐包名和文件存放的文件夹名称最好相同(虽然包名和文件夹名可以不相同,也就是说一个文件夹下可以包含多个包的.go文件)。

    package main
    
    import "myfunc"
    
    func main() {
    	myfunc.Afunc("b.go is package main.")
    }

    这时候目录结构如下:

    <dirtest>
         |--<src>
              |--<mufunc>
                     |--a.go
              |--<main>
                     |--b.go

    3. 使用go build

    如果这时候使用go build,你会发现下面的输出:

    E:\dirtest>go build src\main\b.go
    
    src\main\b.go:3:8: cannot find package "myfunc" in any of:
            C:\Program Files\go\src\pkg\myfunc (from $GOROOT)
            D:\GoLang\src\myfunc (from $GOPATH)

    从输出中我们可以看到,Go先是从$GOROOT中查找包myfunc,如果没找到就从$GOPATH中查找,结果都没有找到,我们可以使用go env输出Go的环境变量设置:

    E:\dirtest>go env
    
    set GOARCH=amd64
    set GOBIN=
    set GOCHAR=6
    set GOEXE=.exe
    set GOHOSTARCH=amd64
    set GOHOSTOS=windows
    set GOOS=windows
    set GOPATH=D:\GoLang
    set GORACE=
    set GOROOT=C:\Program Files\go
    set GOTOOLDIR=C:\Program Files\go\pkg\tool\windows_amd64
    set CC=gcc
    set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0
    set CXX=g++
    set CGO_ENABLED=1

    显然E:\dirtest这个目录没有加到$GOPATH中,在环境变量中添加该目录:

    GOPATH

    保存后,重新执行(可能需要重新打开控制台,让环境变量生效)go build,就在当前目录生成了一个可执行文件b.exe

    E:\dirtest\src\main>go env
    set GOARCH=amd64
    set GOBIN=
    set GOCHAR=6
    set GOEXE=.exe
    set GOHOSTARCH=amd64
    set GOHOSTOS=windows
    set GOOS=windows
    set GOPATH=D:\GoLang;E:\dirtest
    set GORACE=
    set GOROOT=C:\Program Files\go
    set GOTOOLDIR=C:\Program Files\go\pkg\tool\windows_amd64
    set CC=gcc
    set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0
    set CXX=g++
    set CGO_ENABLED=1
    
    E:\dirtest>go build src\main\b.go
    E:\dirtest>dir
    
     E:\dirtest 的目录
    
    2015/01/13  23:11    <DIR>          .
    2015/01/13  23:11    <DIR>          ..
    2015/01/13  23:11    1,958,912      b.exe
    2015/01/13  22:52    <DIR>          src
    
    E:\dirtest>b.exe
    a.go is package mufunc.
    b.go is package main.

    虽然成功运行,但是没有按照期待的那样生成在bin目录下面。为了达到这样的效果,你需要go install。注意go install是针对package,而不是针对单个.go文件。

    但是如果是当前状态执行go install,虽然可以成功,但你会发现,并没有在项目根目录E:\dirtest中创建bin\main.exe,反而是在D:\GoLang中创建了。

    如果对main包执行go install呢?

    E:\dirtest\src\main>go install
    go install: no install location for E:\dirtest\src\main: hidden by D:\GoLang\src
    \main

    可以看到,输出提示当前目录被隐藏。显然这个顺序是对应$GOPATH的设置的,把$GOPATH中的路径顺序改一下:

    GOPATH

    然后在执行go install myfunc,发现成功地在pkg目录下面生成了myfunc.a。同样执行go install main,也成功的在bin目录下生成了main.exe。此时的目录结构如下:

    <dirtest>
         |--<src>
              |--<mufunc>
                     |--a.go
              |--<main>
                     |--b.go
         |--<pkg>
              |--<windows_amd64>
                     |--myfunc.a
         |--<bin>
              |--main.exe

    现在就算是成功完成了一个示例“项目”吧...

    4. 常见错误

    除了上面的步骤中出现的错误,其实工程目录管理稍有不慎,就会出现其他问题,例如:

    1. 一个文件夹下面包含多个不同包的源文件。也就是把a.gob.go都放到myfunc目录下面会是什么情况呢?

    这时候的目录结构如下:

    <dirtest>
         |--<src>
              |--<mufunc>
                     |--a.go
                     |--b.go

    那么执行go installgo build,甚至go run都会是相同的错误:

    E:\dirtest\src\myfunc>go install
    can't load package: package myfunc: found packages myfunc (a.go) and main (b.go)
     in E:\dirtest\src\myfunc
    
    E:\dirtest\src\myfunc>go build
    can't load package: package myfunc: found packages myfunc (a.go) and main (b.go)
     in E:\dirtest\src\myfunc
    
    E:\dirtest\src\myfunc>go run b.go
    b.go:3:8: found packages myfunc (a.go) and main (b.go) in E:\dirtest\src\myfunc

    从参考资料3中可以看到,每个子目录中只能存在一个package,否则编译时会报错,所以一个子目录下面不能包含多个不同包的源文件。

    2. 一个项目能包含多个main()吗?

    简单测试下,创建一个c.go,并使用myfunc包(没有导入其他包的情况类似):

    package main
    import "fmt"
    import "myfunc"
    
    func main() {
    	fmt.Println("This is single c.go")
    	myfunc.Afunc("c.go is also package main.")
    }

    执行相应的命令,结果如下:

    E:\dirtest\src\main>go build
    # main
    .\c.go:4: main redeclared in this block
            previous declaration at .\b.go:5
    
    E:\dirtest\src\main>go build c.go 
    # 成功,当前目录下生成了c.exe
    
    E:\dirtest\src\main>go install
    # main
    .\c.go:4: main redeclared in this block
            previous declaration at .\b.go:5
    
    E:\dirtest\src\main>go install c.go
    go install: no install location for .go files listed on command line (GOBIN not
    set)
    
    E:\dirtest\src\main>go run c.go
    This is single c.go
    a.go is package mufunc.
    c.go is also package main.

    显然只能是go rungo build c.go可行。如果把c.go移到单独的目录下面呢:

    E:\dirtest\src\cmain>dir
    
     E:\dirtest\src\cmain 的目录
    
    2015/01/14  11:27    <DIR>          .
    2015/01/14  11:27    <DIR>          ..
    2015/01/14  11:24               147 c.go
    
    E:\dirtest\src\cmain>go build
    
    E:\dirtest\src\cmain>go install

    均可以执行成功。go installbin目录下面生成了对应的exe文件。看来还是目录管理的问题。

    3. go install: no install location for .go files listed on command line (GOBIN not set)

    从上面的示例输出中就能看到,使用go install针对单个文件时,就会出现这个错误。默认情况下如果设置了$GOROOT$GOPATH,就会依次寻找$GOROOT/bin$GOPATH/bin。那么我们如果自定义设置了$GOBIN=E:\dirtest\bin之后会怎样?

    GOPATH

    E:\dirtest\src\cmain>go env
    set GOARCH=amd64
    set GOBIN=E:\dirtest\bin
    set GOCHAR=6
    set GOEXE=.exe
    set GOHOSTARCH=amd64
    set GOHOSTOS=windows
    set GOOS=windows
    set GOPATH=E:\dirtest;D:\GoLang
    set GORACE=
    set GOROOT=C:\Program Files\go
    set GOTOOLDIR=C:\Program Files\go\pkg\tool\windows_amd64
    set CC=gcc
    set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0
    set CXX=g++
    set CGO_ENABLED=1
    
    E:\dirtest\src\cmain>go install c.go
    # 成功在 E:\dirtest\bin 下面生成 c.exe

    虽然成功了,但是go install应该是作用于包级别,而非单个文件。

    4. go build、go install 和 go run 的区别

    详细的可以查看参考资料4,这里简单说一下:

    • go build (相当于编译) 编译包,如果是main包则在当前目录生成可执行文件,其他包不会生成.a文件;
    • go instal (要设置GOBIN)编译包,同时复制结果到$GOPATH/bin$GOPATH/pkg等对应目录下;
    • go run gofiles...(相当于编译并运行) 编译列出的文件,并生成可执行文件然后执行。注意只能用于main包,否则会出现go run: cannot run non-main package的错误。

    此外,go run是不需要设置$GOPATH的,但go buildgo install必须设置。go run常用来测试一些功能,这些代码一般不包含在最终的项目中。

    5. 总结

    1. 一定要管理好目录
    2. 多个项目最好都在一个$GOPATH下面,即src/proj1src/proj2,etc
    3. 尽量使用go install,这样能够规范项目整体结构

    6. 参考资料

    1. Golang项目目录结构组织
    2. 关于main包放在哪的问题
    3. 关于golang中包(package)的二三事儿
    4. Running multi-file main package

    本文来自:博客园

    展开全文
  • Golang优秀开源项目汇总(持续更新。。。)我把这个汇总放在github上了, 后面更新也会在github上更新。 https://github.com/hackstoic/golang-open-source-projects  。 欢迎fork, star , watch, 提issue。  ...

     

    Golang优秀开源项目汇总(持续更新。。。)
    我把这个汇总放在github上了, 后面更新也会在github上更新。 https://github.com/hackstoic/golang-open-source-projects  。 欢迎fork, star , watch, 提issue。 

     

    资料参考来源:http://studygolang.com/projects


    监控系统

    序号名称项目地址简介
    1OpenFalconhttp://github.com/open-falcon/of-releaseOpenFalcon是一款小米监控系统。功能:*数据采集免配置:agent自发现、支持Plugin、主动推送模式; *容量水平扩展:生产环境每秒50万次数据收集、告警、存储、绘图,可持续水平扩展。*告警策略自发现:Web界面、支持策略模板、模板继承和覆盖、多种告警方式、支持回调动作。*告警设置人性化:支持最大告警次数、告警级别设置、告警恢复通知、告警暂停、不同时段不同阈值、支持维护周期,支持告警合并。*历史数据高效查询:秒级返回上百个指标一年的历史数据。*Dashboard人性化:多维度的数据展示,用户自定义Dashboard等功能。*架构设计高可用:整个系统无核心单点,易运维,易部署。
    2bansheehttp://github.com/eleme/banshee周期性指标的监控系统.
    3Kapacitorhttp://github.com/influxdata/kapacitorKapacitor 是一个开源框架,用来处理、监控和警告时间序列数据。
    4Pomehttp://github.com/rach/pomePome 是 Postgres Metrics 的意思。Pome 是一个 PostgreSQL 的指标仪表器,用来跟踪你的数据库的健康状况。
    5pingdhttp://github.com/pinggg/pingdpingd 是世界上最简单的监控服务,使用 golang 编写。软件支持 IPv6,但是服务器不支持. pingd 允许同时 ping 上千个 IPs,在此期间还可以管理监控的主机。用户提供主机名或者 IP,还有用户邮箱地址,就可以使用 3 个生成 URLs 来开启,停止或者删除你的追踪。每当你的服务器停机或者后台在线都会发送通知,还包含控制 URLs。
    6actiontech zabbix mysql monitor percona monitoring plugins zabbix 的 Go 语言版本,是由 爱可生 公司开源的 MySQL 监控插件和模板,整合上百个性能监控指标,支持Low Level Discovery 自动发现多实例环境,支持performance_schema
    7rtophttp://github.com/rapidloop/rtoptop 是一个简单的无代理的远程服务器监控工具,基于 SSH 连接进行工作。无需在被监控的服务器上安装任何软件。rtop 直接通过 SSH 连接到待监控服务器,然后执行命令来收集监控数据。rtop 每几秒钟就自动更新监控数据,类似其他 *top 命令
    8Prometheushttp://github.com/prometheus/prometheusPrometheus 是一个开源的服务监控系统和时间序列数据库, 提供监控数据存储,展示,告警等功能
    9bosunhttp://github.com/bosun-monitor/bosun专业的跨平台开源系统监控项目,go语言编写,灵活的模板和表达式配合上各种collector可以监控任何应用或系统级的运行数据,比 zabbix更轻量级、更易入手和更适合定制。

    容器技术

    序号名称项目地址简介
    1SwarmKithttps://github.com/docker/swarmkitSwarmKit 是Docker公司开源的Docker集群管理和容器编排工具,其主要功能包括节点发现、基于raft算法的一致性和任务调度等。
    2DaoliNethttps://github.com/daolinet/daolinetDaoliNet是一个软件定义网络(SDN)系统,其设计目的是为Docker容器提供动态、高效的链接。在Docker容器中,微服务工作负载具有轻量且短暂的性质,DaoliNet恰好适用于这种性质。
    3Harborhttp://github.com/vmware/harbor容器应用的开发和运行离不开可靠的镜像管理。从安全和效率等方面考虑,部署在私有环境内的Registry是非常必要的。Project Harbor是由VMware公司中国团队为企业用户设计的Registry server开源项目,包括了权限管理(RBAC)、LDAP、审计、管理界面、自我注册、HA等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能
    4REX-Rayhttps://github.com/emccode/rexrayREX-Ray 是一个 EMC {code} 团队领导的开源项目,为 Docker、Mesos 及其他容器运行环境提供持续的存储访问。其设计旨在囊括通用存储、虚拟化和云平台,提供高级的存储功能。
    5Clairhttp://github.com/coreos/clairClair 是一个容器漏洞分析服务。它提供一个能威胁容器漏洞的列表,并且在有新的容器漏洞发布出来后会发送通知给用户。
    6Weavehttp://github.com/zettio/weaveWeave 创建一个虚拟网络并连接到部署在多个主机上的 Docker 容器。
    7Rockethttp://github.com/coreos/rktRocket (也叫 rkt)是 CoreOS 推出的一款容器引擎,和 Docker 类似,帮助开发者打包应用和依赖包到可移植容器中,简化搭环境等部署工作。Rocket 和 Docker 不同的地方在于,Rocket 没有 Docker 那些为企业用户提供的“友好功能”,比如云服务加速工具、集群系统等。反过来说,Rocket 想做的,是一个更纯粹的业界标准。
    8libnetworkhttp://github.com/docker/libnetworkLibnetwork 提供一个原生 Go 实现的容器连接,是容器的网络。libnetwork 的目标是定义一个健壮的容器网络模型(Container Network Model),提供一个一致的编程接口和应用程序的网络抽象。
    9Wormholehttps://github.com/vishvananda/wormholeWWormhole 是一个能识别命名空间的由 Socket 激活的隧道代理。可以让你安全的连接在不同物理机器上的 Docker 容器。可以用来完成一些有趣的功能,例如连接运行在容器本机的服务或者在连接后创建按需的服务。
    10Shipyardhttp://github.com/shipyard/shipyardShipyard 是一个基于 Web 的 Docker 管理工具,支持多 host,可以把多个 Docker host 上的 containers 统一管理;可以查看 images,甚至 build images;并提供 RESTful API 等等。 Shipyard 要管理和控制 Docker host 的话需要先修改 Docker host 上的默认配置使其支持远程管理。
    11Dockerhttp://github.com/docker/dockerDocker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包装系统。

    PaaS工具

    序号名称项目地址简介
    1Kelhttp://github.com/kelprojectKel 是一个开源的基于 Kubernetes 构建的 PaaS 系统,采用 Python 和 Go 语言开发。Kel 可简化管理 Web 应用发布和托管整个软件生命周期。Kel 帮助开发和运维人员轻松管理他们的应用架构,通过一组工具和组件让 K8S 使用非常简单。
    2CloudFoundry-Mesoshttp://github.com/mesos/cloudfoundry-mesosCloud Foundry-Mesos框架由华为与Mesosphere的工程师合作完成,能够为应用提供安全可靠的、可伸缩、可扩展的云端运行环境,并且应用能够 享用Cloud Foundry生态圈内各类丰富的服务资源。企业能够通过Cloud Foundry开发云应用,并通过Cloud Foundry-Mesos将应用部署到DCOS上,使应用能够与DCOS上安装的其他服务及应用框架共享资源,实现资源利用率最大化,能够大幅降低企业 数据中心运营成本。DCOS能够运行在虚拟和物理环境上,能够支持Linux(以及很快支持Windows),并可适用于私有云、公有云及混合云环境。
    3Flynnhttp://github.com/github/flynnFlynn 是一个开源的 PaaS 系统,由 Docker 开发。采用 Go 语言编写。支持数据库包括 Postgres、Redis 和 MongoDB. Flynn 使用完全组件化模块化的设计,任何一个组件和模块都可以独立的进行替换。
    4DINPhttp://git.oschina.net/cnperl/dinp-serverDINP是又一个基于Docker开发的PaaS平台。
    5Kuberneteshttp://github.com/GoogleCloudPlatform/kubernetesKubernetes 是来自 Google 云平台的开源容器集群管理系统。基于 Docker 构建一个容器的调度服务。该系统可以自动在一个容器集群中选择一个工作容器供使用。其核心概念是 Container Pod。
    6Tsuruhttp://github.com/tsuru/tsuru在 Tsuru 的 PaaS 服务下,你可以选择自己的编程语言,选择使用 SQL 或者 NoSQL 数据库,memcache、redis、等等许多服务,甚至与你可以使用 Git 版本控制工具来上传你应用。

    大数据

    序号名称项目地址简介
    1MLFhttps://github.com/huichen/mlf弥勒佛项目是一个大数据机器学习框架。具有为处理大数据优化,可随业务增长scale up,模型的训练和使用都可以作为library或者service整合到在生产系统中,具有丰富的模型,高度可扩展,高度可读性,适合初学者进行大数据模型的学习等特点
    2Glowhttp://github.com/chrislusf/glowlow 是使用 Go 编写的易用分布式计算系统,是 Hadoop Map Reduce,Spark,Flint,Samza 等等的替代品。Glow 的目标是提供一个库,可以在并行线程或者分布式集群机器中进行更简单计算。

    数据库技术

    序号名称项目地址简介
    1BuntDBgithub.com/tidwall/buntdb是纯Go开发的、低层级的(low-level)的、可嵌入的key/value内存数据库(IMDB),数据持久化存储,遵从ACID,支持自定义索引和geospatial 数据。
    2Cockroachhttp://github.com/cockroachdb/cockroachCockroachDB (蟑螂数据库)是一个可伸缩的、支持地理位置处理、支持事务处理的数据存储系统。CockroachDB 提供两种不同的的事务特性,包括快照隔离(snapshot isolation,简称SI)和顺序的快照隔离(SSI)语义,后者是默认的隔离级别。
    3qb-gohttp://github.com/aacanakinqb是用来让使更容易使用数据库的go语言的数据库工具包。它受Python最喜欢的ORM SQLAlchemy的启发,既是一个ORM,也是一个查询生成器。它在表达api和查询构建东西的情形下是相当模块化的。
    4GoshawkDBhttp://github.com/goshawkdbGoshawkDB 是一个采用 Go 语言开发支持多平台的分布式的对象存储服务,支持事务以及容错。GoshawkDB 的事务控制是在客户端完成的。GoshawkDB 服务器端使用 AGPL 许可,而 Go 语言客户端使用 Apache 许可证
    5Codishttp://github.com/wandoulabs/codisodis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务.
    6Cayleyhttp://github.com/google/cayleyCayley 是 Google 的一个开源图(Graph)数据库,其灵感来自于 Freebase 和 Google 的 Knowledge Graph 背后的图数据库。
    7Redigohttp://github.com/garyburd/redigoRedigo 是 Redis 数据库的 Go 客户端。
    8redis-go-clusterhttp://github.com/chasex/redis-go-clusterredis-go-cluster 是基于 Redigo 实现的 Golang Redis 客户端。redis-go-cluster 可以在本地缓存 slot 信息,并且当集群修改的时候会自动更新。此客户端管理每个节点连接池,使用 goroutine 来尽可能的并发执行,达到了高效,低延迟。
    9Dgraphhttp://github.com/dgraph-io/dgraphdgraph 是可扩展的,分布式的,低延迟图形数据库。DGraph 的目标是提供 Google 生产水平的规模和吞吐量,在超过TB的结构数据里,未用户提供足够低延迟的实时查询。DGraph 支持 GraphQL 作为查询语言,响应 JSON。
    10DegDBhttp://github.com/degdb/degdbDegDB 是分布式的经济图数据库。
    11Vitesshttps://github.com/youtube/vitessoutube出品的开源分布式MySQL工具集Vitess,自动分片存储MySQL数据表,将单个SQL查询改写为分布式发送到多个MySQL Server上,支持行缓存(比MySQL本身缓存效率高),支持复制容错,已用于Youtube生产环境
    12xuncachehttp://github.com/sun8911879/xuncachexuncache 是免费开源的NOSQL(内存数据库) 采用golang开发,简单易用而且 功能强大(就算新手也完全胜任)、性能卓越能轻松处理海量数据,可用于缓存系统.
    13pgwebhttp://github.com/sosedoff/pgwebgweb 是一个采用 Go 语言开发的基于 Web 的 PostgreSQL 管理系统。
    14Orchestratorhttp://github.com/outbrain/orchestratorMySQL 复制拓扑可视化工具
    15mysql-schema-sync暂无mysql-schema-sync 是一款使用go开发的、跨平台的、绿色无依赖的 MySQL 表结构自动同步工具。用于将线上(其他环境)数据库结构变化同步到测试(本地)环境!
    16TiDBhttp://github.com/pingcap/tidbTiDB 是国内 PingCAP 团队开发的一个分布式 SQL 数据库。其灵感来自于 Google 的 F1, TiDB 支持包括传统 RDBMS 和 NoSQL 的特性。

    存储技术

    序号名称项目地址简介
    1Torushttp://github.com/coreos/torusTorus是一种针对容器集群量身打造的存储系统,可以为通过Kubernetes编排和管理的容器集群提供可靠可扩展的存储。这是继etcd、rkt、flannel,以及CoreOS Linux之后CoreOS发布的另一个开源产品。
    2Aferohttp://github.com/spf13/aferoAfero 是一个文件系统框架,提供一个简单、统一和通用的 API 和任何文件系统进行交互,作为抽象层还提供了界面、类型和方法。Afero 的界面十分简洁,设计简单,舍弃了不必要的构造函数和初始化方法。Afero 作为一个库还提供了一组可交互操作的后台文件系统,这样在与 Afero 协作时,还可以保留 os 和 ioutil 软件包的功能和好处。
    3REX-Rayhttps://github.com/emccode/rexrayREX-Ray 是一个 EMC {code} 团队领导的开源项目,为 Docker、Mesos 及其他容器运行环境提供持续的存储访问。其设计旨在囊括通用存储、虚拟化和云平台,提供高级的存储功能。
    4SeaweedFShttp://github.com/chrislusf/seaweedfsSeaweedFS 是简单,高伸缩性的分布式文件系统,包含两部分:存储数十亿的文件;快速为文件服务。SeaweedFS 作为支持全 POSIX 文件系统语义替代,Seaweed-FS 选择仅实现 key-file 的映射,类似 "NoSQL",也可以说是 "NoFS"。
    5bfshttp://github.com/Terry-Mao/bfsbfs 是使用 Go 编写的分布式文件系统(小文件存储)。
    6IPFShttp://github.com/ipfs/go-ipfsIPFS 是分布式文件系统,寻求连接所有计算机设备的相同文件系统。在某些方面,这很类似于原始的 Web 目标,但是 IPFS 最终会更像单个比特流群交换的 git 对象。IPFS = InterPlanetary File System

    分布式系统

    序号名称项目地址简介
    1Confdhttp://github.com/kelseyhightowerConfd是一个轻量级的配置管理工具。通过查询Etcd,结合配置模板引擎,保持本地配置最新,同时具备定期探测机制,配置变更自动reload。
    2zerghhttp://github.com/huichen/zerg基于docker的分布式爬虫服务
    3Doormanhttps://github.com/youtube/doormanDoorman 是一个客户端速率限制的解决方案,客户端与共享资源进行通讯,包括数据库、gRPC 服务、RESTful API 等等可使用 Doorman 来限制对资源的调用。Doorman 使用 Go 语言开发,使用 gRPC 的通讯协议。其高可用特性需要一个分布式的锁管理器,当前支持 etcd,也可使用 Zookeeper 替代。
    4Go-kithttp://github.com/go-kit/kitGo-kit 是一个 Go 语言的分布式开发包,用于开发微服务。
    5Hprosehttp://github.com/andot/hproseHprose 是高性能远程对象服务引擎(High Performance Remote Object Service Engine)的缩写 —— 微服务首选引擎。它是一个先进的轻量级的跨语言跨平台面向对象的高性能远程动态通讯中间件。它不仅简单易用,而且功能强大。你只需要稍许的时间去学习,就能用它轻松构建跨语言跨平台的分布式应用系统了。
    6Gizmohttp://github.com/NYTimes/gizmo纽约时报开源的go微服务工具.提供如下特性:* 标准化配置和日志;* 可配置策略的状态监测端点;* 用于管理 pprof 端点和日志级别的配置;* 结构化日志,提供基本请求信息;* 端点的有用度量;* 优雅的停止服务;* 定义期待和词汇的基本接口
    7mgmthttp://github.com/purpleidea/mgmtmgmt 是一个分布式的,事件驱动的配置管理工具。该工具支持并行执行,其 librarification 作为新的及已存在的软件的基础管理工具。
    8Yokehttp://github.com/nanopack/yokeYoke 是 Postgres 的高可用集群,具有自动切换和自动集群恢复。Postgres冗余/自动故障转移解决方案,提供一个高可用PostgreSQL集群的简单管理。
    9SeaweedFShttp://github.com/chrislusf/seaweedfsSeaweedFS 是简单,高伸缩性的分布式文件系统,包含两部分:存储数十亿的文件;快速为文件服务。SeaweedFS 作为支持全 POSIX 文件系统语义替代,Seaweed-FS 选择仅实现 key-file 的映射,类似 "NoSQL",也可以说是 "NoFS"。
    10Glowhttp://github.com/chrislusf/glowlow 是使用 Go 编写的易用分布式计算系统,是 Hadoop Map Reduce,Spark,Flint,Samza 等等的替代品。Glow 的目标是提供一个库,可以在并行线程或者分布式集群机器中进行更简单计算。
    11Nomadhttp://github.com/hashicorp/nomadNomad 是一个集群管理器和调度器,专为微服务和批量处理工作流设计。Nomad 是分布式,高可用,可扩展到跨数据中心和区域的数千个节点。

    消息系统

    序号名称项目地址简介
    1KiteQhttp://github.com/blackbeans/kiteqKiteQ 是一个基于 go + protobuff 实现的多种持久化方案的 mq 框架(消息队列)。
    2NSQhttp://github.com/bitly/nsqNSQ 是无中心设计、节点自动注册和发现的开源消息系统。可作为内部通讯框架的基础,易于配置和发布。
    3kingtaskhttps://github.com/kingsoft-wps/kingtaskkingtask是一个由Go开发的轻量级的异步定时任务系统。支持定时的异步任务。 支持失败重试机制,重试时刻和次数可自定义。 任务执行结果可查询。
    4Go Machineryhttp://github.com/RichardKnop/machineryMachinery 是一个 Go 语言的异步任务队列和作业队列,基于分布式消息传递。类似 Python 的 Celery 框架。
    5kacahttp://github.com/scottkiss/kacakaca 是用 golang 语言开发的基于 websocket 协议的消息发布/订阅系统。

    服务器管理

    序号名称项目地址简介
    1Sharkeyhttps://github.com/square/sharkeySharkey 是OpenSSH管理证书使用的服务。Sharkey 分为客户端组件和服务端组件,服务端负责发布已签署的主机证书,客户端负责在机器上安装主机证书。
    2OSinstallhttp://github.com/idcos/osinstallCloudBoot”(OSinstall)云装机平台,是金融云初创公司杭州云霁科技推出的一款X86服务器全自动装机工具,遵循Apache协议,完全开源免费。全自动构建物理机资源池,像创建虚拟机一样方便的安装物理机。
    3ssh2gohttp://github.com/karfieldssh2go 是对libssh的golang 封装。libssh是SSH的代码库,同时支持服务端和客户端,日常所见的ssh, sshd, scp, sftp均基于libssh。ssh2go是对libssh的Go语言绑定, 100%的libssh接口都可用,同时集成示例,方便参考。
    4Gooversshhttps://github.com/scottkiss/gooversshgooverssh 是基于gosshtool的一个ssh开发包开发的一个基于ssh本地端口转发服务小应用,可以方便突破一些网络限制,如通过ssh代理访问内网数据库服
    5gosshtoolhttp://github.com/scottkiss/gosshtoolgosshtool provide some useful functions for ssh client in golang.implemented using golang.org/x/crypto/ssh.go语言中提供ssh相关操作,支持ssh本地端口转发服务
    6WebConsolehttp://git.oschina.net/shibingli/webconsole基于Golang、WebSocket、TermJS的SSH远程终端,主要应用到隔离网络内,SSH远程终端的访问问题。
    7GoWebSSHhttp://github.com/who246/GoWebSSHGoWebSSH -golang 语言开发的 web server manager 服务器及命令管理/beego开源框架/WebSocket技术

    安全工具

    序号名称项目地址简介
    1gomitmproxyhttps://github.com/sheepbao/gomitmproxyGomitmProxy是想用golang语言实现的mitmproxy,主要实现http代理,目前实现了http代理和https抓包功能。
    2Hyperfoxhttp://github.com/xiam/hyperfoxHyperfox 是一个安全的工具用来代理和记录局域网中的 HTTP 和 HTTPS 通讯。
    3Gryffinhttp://github.com/yahoo/gryffinGryffin 是雅虎开发的一个大规模 Web 安全扫描平台。它不是另外一个扫描器,其主要目的是为了解决两个特定的问题 —— 覆盖率和伸缩性。
    4ngrokhttp://github.com/inconshreveable/ngrokngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。

    网络工具

    序号名称项目地址简介
    1DaoliNethttps://github.com/daolinet/daolinetDaoliNet是一个软件定义网络(SDN)系统,其设计目的是为Docker容器提供动态、高效的链接。在Docker容器中,微服务工作负载具有轻量且短暂的性质,DaoliNet恰好适用于这种性质。
    2Seesawhttp://github.com/google/seesawSeesaw 是 Google 开源的一个基于 Linux 的负载均衡系统。Seesaw 包含基本的负载均衡特性,同时支持一些高级的功能,诸如:anycast, Direct Server Return (DSR), 支持多个 VLANs 和集中式配置。同时其设计的宗旨是易于维护。需要注意的是,尽管该项目挂靠在 Google 名下,但并非 Google 官方产品。
    3TcpRoute2http://github.com/GameXG/TcpRoute2TcpRoute, TCP 层的路由器。对于 TCP 连接自动从多个线路(允许任意嵌套)、多个域名解析结果中选择最优线路。TcpRoute2 是 golang 重写的版本。通过 socks5 代理协议对外提供服务。代理功能拆分成了独立的库,详细代理url格式级选项请参见 ProxyClient,目前支持直连、socks4、socks4a、socks5、http、https、ss 代理线路
    4Gorhttp://github.com/buger/gorGor 是用 Go 编写的简单 HTTP 流量复制工具,主要是为了从生产服务器返回流量到开发环境。使用 Gor 可以在实际的用户会话中测试代码。
    5Traefikhttps://github.com/containous/traefikTræfɪk 是一个新型的http反向代理、负载均衡软件,能轻易的部署微服务. 它支持多种后端 (Docker, Swarm, Mesos/Marathon, Consul, Etcd, Zookeeper, BoltDB, Rest API, file...) ,可以对配置进行自动化、动态的管理.
    6TChannelhttp://github.com/uber/tchannelTChannel 是用于 RPC 的网络复用和成帧协议。

    Web工具

    序号名称项目地址简介
    1Tykhttp://github.com/lonelycode/tykTyk 是一个开源的、轻量级的、快速可伸缩的 API 网关,支持配额和速度限制,支持认证和数据分析,支持多用户多组织,提供全 RESTful API。
    2Shortmehttp://github.com/andyxning用Golang编写的URL短链接服务。
    3WuKongSearchhttp://github.com/huichen/wukongWuKong 是一个全文搜索引擎。功能特性有:高效索引和搜索(1M条微博500M数据28秒索引完,1.65毫秒搜索响应时间,19K搜索QPS);支持中文分词(使用sego分词包并发分词,速度27MB/秒);支持计算关键词在文本中的紧邻距离(token proximity);支持计算BM25相关度;支持自定义评分字段和评分规则;支持在线添加、删除索引;支持持久存储;可实现分布式索引和搜索等
    4Pholcushttp://github.com/henrylee2cn/pholcusPholcus(幽灵蛛)是一款纯Go语言编写的高并发、分布式、重量级爬虫软件,支持单机、服务端、客户端三种运行模式,拥有Web、GUI、命令行三种操作界面;规则简单灵活、批量任务并发、输出方式丰富(mysql/mongodb/csv/excel等)、有大量Demo共享;同时她还支持横纵向两种抓取模式,支持模拟登录和任务暂停、取消等一系列高级功能。
    5Codetainerhttp://github.com/codetainerapp/codetainerCodetainer 可以让你创建基于浏览器上的代码运行沙箱,可方便的嵌入到你的 Web 应用中。你可以把它当成是 codepicnic.com 的开源克隆) .
    6GoTTYhttp://github.com/yudai/gottyGoTTY 是个简单的命令行工具,可以把 CLI 工具共享成 Web 应用。GoTTY 可以把终端作为 Web 应用共享。
    7TermUIhttp://github.com/gizak/termuiGo语言编写的终端仪表盘
    8Houndhttp://github.com/etsy/hound快如闪电的代码搜索开源工具
    9goimhttp://github.com/Terry-Mao/goimgoim 是一个支持集群的im及实时推送服务(支持websocket,http和tcp协议)
    10fasthttphttp://github.com/valyala/fasthttpasthttp 是 Go 的快速 HTTP 实现,当前在 1M 并发的生产环境使用非常成功,可以从单个服务器进行 100K qps 的持续连接。HTTP 服务器性能与 net/http 比较,fasthttp 比 net/http 快 10 倍
    11netgraphhttp://github.com/ga0/netgraphnetgraph 是一个 Go 语言编写的跨平台的 B/S 架构的 HTTP 抓包工具,方便在 Linux 服务器上直接查看 HTTP 包。
    12gohttphttp://github.com/codeskyblue/gohttpgohttp是一个http的文件服务器,功能有:各种文件的预览功能,实时的目录zip打包下载,二维码扫描下载的支持,苹果应用的在线安装,文件上传等
    13API-front暂无API front是 HTTP API 前端,可进行请求代理转发、协议抓包分析、流量复制。主要是用于开发测试环境,用来解决开发测试环境多变等问题

    Web框架

    序号名称项目地址简介
    1Iris-Go暂无通过Iris-Go,可以方便的帮助你来开发基于web的应用。简单来说:Iris-Go与国内大牛的BeeGo类似,但从其官方介绍的资料来看,Iris-Go的性能更优!
    2Baahttp://github.com/go-baa/baaBaa 一个简单高效的Go web开发框架。主要有路由、中间件,依赖注入和HTTP上下文构成。
    3Orivilhttp://github.com/orivil/orivilOrivil 是由 golang 开发的全新 web 框架,灵感来源于 Laravel 及 Symfony。
    4ecgohttp://github.com/tim1020/ecgoecgo 是一个易学、易用、易扩展的go web开发框架
    5Ginhttp://github.com/gin-gonic/ginGin 是一个用 Go 语言开发的 Web 框架,提供类 Martini 的 API,但是性能更好。因为有了 httprouter 性能提升了 40 倍之多。
    6Melodyhttp://github.com/olahol/melodyMelody 是一个 Go 语言的微型 WebSocket 框架,基于 github.com/gorilla/websocket 开发,
    7utronhttp://github.com/gernest/utronutron 是一个 Go 语言轻量级的 MVC 框架,用于快速构建可伸缩以及可靠的数据库驱动的 Web 应用。
    8Lessgohttp://github.com/lessgo/lessgoLessgo 是一款 Go 语言编写的简单、稳定、高效、灵活的 web 完全开发框架。它的项目组织形式经过精心设计,实现前后端分离、系统与业务分离,完美兼容MVC与MVVC等多种开发模式,非常利于企业级应用与API接口的开发。当然,最值得关注的是它突破性地支持了运行时路由重建,开发者可在Admin后台轻松实现启用/禁用模块与操作,添加/移除中间件等功能!同时,它推荐以HandlerFunc与MiddlewareFunc为基础的函数式编程,也令开发变得更加灵活富有趣味性。
    9Hopenhttp://github.com/who246/hopenGolang web极速开发框架。
    10ThinkGohttp://github.com/henrylee2cn/thinkgoThinkGo 是一款 Go 语言编写的 web 快速开发框架。它基于开源框架 Gin 进行二次开发,旨在实现一种类 ThinkPHP 的高可用、高效率的 web 框架。在此感谢 Gin 和 httprouter。它最显著的特点是模块、控制器、操作三段式的标准 MVC 架构,且模块与插件的目录结构完全一致,令开发变得非常简单灵活。
    11beegohttp://github.com/astaxie/beegobeego是一个用Go开发的应用框架,思路来自于tornado,路由设计来源于sinatra,
    12Revelhttp://github.com/robfig/revelRevel 是 Go 语言的框架,其思路完全来自 Java 的 Play Framework。
    13Martinihttp://github.com/codegangsta/martiniMartini 是一个非常新的 Go 语言的 Web 框架,使用 Go 的 net/http 接口开发,类似 Sinatra 或者 Flask 之类的框架,你可使用自己的 DB 层、会话管理和模板。
    14Tangohttp://github.com/lunny/tangoTango,微内核可扩展的Go语言Web框架。同时支持函数和结构体作为执行体,插件丰富。
    15Macaronhttps://github.com/go-macaron/macaronMacaron 是一个具有高生产力和模块化设计的 Go Web 框架。框架秉承了 Martini 的基本思想,并在此基础上做出高级扩展。
    16Web.gohttp://github.com/hoisie/webeb.go 跟 web.py 类似,但使用的是 Go 编程语言实现的 Web 应用开发框架。Go发布没多久该框架就诞生了,差不多是最早的Go框架。目前已经有段时间没有更新了。不过,该框架代码不多,其源码可以读一读。

    区块链技术

    序号名称项目地址简介
    1fabrichttps://github.com/hyperledger/fabricFabric是一个开源区块链实现,开发环境建立在VirtualBox虚拟机上,部署环境可以自建网络,也可以直接部署在BlueMix上,部署方式可传统可docker化,共识达成算法插件化,支持用Go和JavaScript开发智能合约,尤以企业级的安全机制和membership机制为特色。你要是不知道这些术语什么意思,就记住一点,Fabric之于区块链,很可能正如Hadoop之于大数据。

    其它

    序号名称项目地址简介
    1Meizarhttp://github.com/qibin0506golang实现抓取妹子图。默认图片来源网站:http://jandan.net。 也可以自定义规则抓取其它网站的图片
    2KodeRunrhttps://github.com/jaxi/koderunrKodeRunr (读作 code runner) 是款我在闲暇时间用Go语言编写的应用。顾名思义,你可以用它在网页上、命令行里写程序,贴代码,与此同时无需在本地安装任何编程语言。支持Ruby, Python, GO, Swift, C, Elixir等
    3godaemonhttp://github.com/tim1020/godaemongodaemon是用来为应用增加daemon和graceful的。
    4Gomobilehttp://github.com/golang/mobileGomobile是一个应用于iOS和Android的优秀跨平台开发库,为开发者提供用于创建Android和iOS 移动平台代码的工具。
    5gojiebahttp://github.com/yanyiwu/gojieba"结巴"中文分词的Golang语言版本。
    6Cherryhttp://github.com/rafael-santiago/cherryCherry 是一个使用 Go 语言开发的 Web 聊天引擎。
    7MailSlurperhttp://github.com/mailslurper/mailslurperMailSlurper 是一个便携的 SMTP 邮件服务器,对本地和团队应用开发来说非常有用。MailSlurper 体积小运行快速,支持 SQLite, MSSQL 和 MySQL. 数据库。
    8RobustIRChttp://github.com/robustirc/robustircRobustIRC 是不会有网络中断情况的 IRC。RobustIRC 主要特性:* 服务器不可用的时候不会有网络中断;* 可以使用标准 IRC 客户端;* 健壮,可以很好处理客户端和网络的连接问题
    9Qorhttp://github.com/qor/qorQor 是基于 Golang 开发的的CMS 一系列工具库,基于 Qor可以快速搭建网站的后台管理系统。Qor 的工作库包含:1,后台管理:可以对数据库进去 CURD 管理,支持一对一,一对多,多对多关联关系维护等等; 2,支持上传图片到云以及 filesystem,resize、crop 图片等等 ;3,Publish 发布系统,可以修改数据,并且经过检查后,再发布到正式环境中; 4,状态机,可以用于开发工作流的系统; 5,I18n,翻译,可以通过在 WEB 界面翻译,并将翻译保存到数据库中; 6,L10n,本地化,不同于翻译,他可以针对某个地区来对内容,或者数据结构进行本地化。7,Roles,权限管理; 8,Exchange,通过 Excel,CSV 导入导出数据; 9,Worker,后台任务管理,可用于跑定时任务等等
    10FishChathttp://github.com/oikomi/FishChatServerFishChat(鱼传——鱼传尺素)分布式可伸缩 IM 服务器,是一款纯 golang 编写优秀的即时通讯软件(IM), 它集合了市面上已有产品的优点, 并具备 智能硬件网关管理(学习QQ物联思想, 构思中)。
    11goRBAChttp://github.com/mikespook/gorbacgoRBAC 为 Go 语言应用提供了轻量级的基于角色的访问控制。
    12boomhttp://github.com/rakyll/boomBoom 是 google 一女工程师使用 Go 语言开发的类似 apache ab 的性能测试工具。相比 ab,boom跨平台性更好,而且更容易安装。
    13Mattermosthttp://github.com/mattermost/platformattermost 是一个 Slack 的开源替代品。Mattermost 采用 Go 语言开发,这是一个开源的团队通讯服务。为团队带来跨 PC 和移动设备的消息、文件分享,提供归档和搜索功能。
    14glothttp://github.com/prasmussen/glotglot 是可以可以在线运行各种编程语言代码片段的平台,项目采用 Haskell Script 、Go、Erlang 和 Shell 开发,运行环境基于 Docker 容器进行。
    15Lanternhttp://github.com/getlantern/lanternLantern是一个点对点科学上网软件。
    16dog-tunnelhttp://github.com/vzex/dog-tunnel狗洞是一个高速的 P2P 端口映射工具,同时支持Socks5代理。 0.5版后开始开源,UDP底层基于开源库KCP重写,效率大大提高,在恶劣环境下优势明显。 同时提供非P2P版本(Lite版本),两端连接过程完全不依赖中间服务器,支持加密和登陆认证,自动重连,但是需要人为确保两端能正常连通(否则请使用默认的P2P版本)
    17GRPChttps://github.com/grpcGRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持.GRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。
    18LiteIDEhttps://github.com/visualfc/liteide

    LiteIDE是一款开源、跨平台的轻量级Go语言集成开发环境(IDE)。

     
     
     
     
     
    10大Go语言开源项目推荐
    2014年11月,Golang官方博客发布Go语言核心开发组成员Andrew Gerrand文章 《 Half a decade with Go》,以纪念Go语言发布5周年。Andrew Gerrand在文章中称,Go语言在工业界向云计算转型时代找到了自己的位置,目前一些重量级的云计算项目比如有名的Docker等都是用Go语言开发的,并预言“2015年将是Go语言急剧发展之年”(“ 2015 will be Go's biggest year yet.”)。 
    从国内Go语言发展和应用来看,七牛算是国内第一家选Go语言做服务端的公司。在前段时间,《技术人攻略》对七牛CEO许式伟所做的一篇深度采访( 采访原文)中,许式伟对“为何早在2011年Go语法还没完全稳定下来的情况下选择Go作为存储服务端的主体语言”给出自己的解释。许式伟谈到说: 
    编程哲学的重塑是Go语言独树一帜的根本原因,其它语言仍难以摆脱OOP或函数式编程的烙印,只有Go完全放弃了这些,对编程范式重新思考,对热门的 面向对象编程提供极度简约但却完备的支持。Go是互联网时代的C语言,不仅会制霸 云计算,10年内将会制霸整个IT领域。

    前不久,Facebook也开源了很多Go语言库,可前往 GitHub托管地址查看。  

    10大流行Go语言开源项目 

    适逢Go语言诞生5周年之际,外媒JavaWorld也 发布文章,整理了由Go语言开发的10大流行开源项目。Go语言目前从虚拟化到Git代码托管服务等方面,都有重量级项目现身,越发凸现Go语言在 云计算时代的重要性。 

    1. Docker 

    到现在,Docker几乎是Go再难找到也难以复制的一个成功案例。Docker项目在2014年9月份就拿到了C轮4000万美元融资,版本迭代速度超快,目前从GitHub看到已有78个版本,而它仅仅是再2013年初才正式开始的一个项目而已。目前,国内Docker技术推广也进行的如火如荼,比如  Docker中文社区,CSDN也建立了  Docker专区。CSDN CODE也将在近期与Docker中文社区合作,推出Docker技术文章翻译活动,届时也请大家多多关注,及时关注与参与。 

    Docker团队之所以喜欢用Go语言,主要是Go具有强大的标准库、全开发环境、跨平台构建的能力。  

    GitHub托管地址:  https://github.com/docker/docker 

    2. Kubernetes 

    Kubernetes是2014年夏天Google推出的Kubernetes,基于Docker,其目的是让用户通过Kubernetes集群来进行云端容器集群的管理,而无需用户进行复杂的设置工作。系统会自动选取合适的工作节点来执行具体的容器集群调度处理工作。其核心概念是Container Pod(容器仓)。 

    GitHub托管地址:  https://github.com/GoogleCloudPlatform/kubernetes 

    3. Etcd & Fleet 

    etcd是由CoreOS开发并维护键值存储系统,它使用Go语言编写,并通过Raft一致性算法处理日志复制以保证强一致性。目前,Google的容器集群管理系统Kubernetes、开源PaaS平台Cloud Foundry和CoreOS的Fleet都广泛使用了etcd。详情,可了解 《 Etcd:用于服务发现的键值存储系统》。 Fleet则是一个 分布式的初始化系统。它们之所以选择使用Go语言,则是因为Go语言对跨平台的良好支持,以及其背后的强大社区。 

    GitHub托管地址:  https://github.com/coreos/etcd 

    4. Deis 

    Deis是一个基于Docker和CoreOS的开源PaaS平台,旨在让部属和管理服务器上的应用变得轻松容易。它可以运行在AWS、GCE以及Openstack平台下。详情,可了解 《 Deis v1.0正式发布!》。  

    GitHub托管地址:  https://github.com/deis/deis 

    5. Flynn 

    Flynn是一个使用Go语言编写的开源PaaS平台,可自动构建部署任何应用到Docker容器集群上运行。Flynn项目受到Y Combinator的支持,目前仍在开发中,被称为是下一代的开源PaaS平台。 

    GitHub托管地址:  https://github.com/flynn/Flynn 

    6. Lime 

    相对上面的几款Go语言在云端和 服务器端之外,Lime则显得比较特殊。Lime,则是一款用Go语言写的桌面编辑器程序,被看做是著名编辑器Sublime Text的 开源实现。  

    GitHub 托管地址:  https://github.com/limetext/lime 

    7. Revel 

    Revel是一个高生产力的Go语言Web框架。Revel框架支持热编译,当编辑、保存和刷新 源码时,Revel会自动编译代码和模板;全栈特性,支持路由、参数解析、缓存、测试、国际化等功能。  

    GitHub托管地址:  https://github.com/revel/revel 

    8. InfluxDB 

    一个Go语音编写的开源分布式的时序、事件和指标数据库,无需外部依赖。其设计目标是实现 分布式和水平伸缩扩展。  

    GitHub托管地址:  https://github.com/influxdb/influxdb 

    9. Syncthing 

    一款用Go语言编写的开源云存储和同步服务工具,用户的数据将由自己完全控制,所有的通信全都加密,每个访问节点都用加密证书验证。该项目被认为是Dropbox和 BitTorrent Sync的开源替代,  详情。Syncthing之所以选择Go语言,也是出于跨平台考虑。  

    GitHub托管地址:  https://github.com/syncthing/syncthing 

    10. Gogs 

    Gogs则是一款由国人无闻( GitHub)开发的自助Git服务项目。Gogs的目标是打造一个最简单、最快速和最轻松的方式搭建自助Git服务。据作者称,之所以选择使用Go语言开发,就是Go允许Gogs可以通过独立的二进制分发,且对跨平台有良好支持。  

    GitHub 托管地址:  https://github.com/gogits/gogs 

    除了上面的10款流行Go语言项目外,我们这里另外外大家推荐几款Go语言相关的项目,如国人开发的Go Web应用框架  Beego、开源的Go语言开发环境  LiteIDE等,它们也都很流行,希望大家多多关注并支持国人 开源项目。

    本文来自:ITEYE资讯

     

     

     

     

    golang 开源项目全集

    一直更新中,地址:https://github.com/golang/go/wiki/Projects#zeromq

    Indexes and search engines

    These sites provide indexes and search engines for Go packages:

    • awesome-go - A community curated list of high-quality resources.
    • Awesome Go @LibHunt - Your go-to Go Toolbox.
    • godoc.org - A documentation browser for any Go open source package.
    • go-hardware - Curated list of resources for using Go on non-standard hardware.
    • go-patterns - Commonly used patterns and idioms for Go.
    • gopm.io - Download Go packages by version
    • go-search - Search engine dedicated to Go projects and source.
    • gowalker - API documentation generator and search.
    • Golang Data Science - Curated list of data science libraries for Go.
    • Go Report Card - Code quality summaries for any Go project.
    • Sourcegraph - Source indexing, analysis and search.

    Dead projects

    If you find a project in this list that is dead or broken, please either mark it as such or mention it in the #go-nuts IRC channel.

    Table of Contents

    Astronomy

    • go-fits - FITS (Flexible Image Transport System) format image and data reader
    • astrogo/fitsio - Pure Go FITS (Flexible Image Transport System) format image and data reader/writer
    • gonova - A wrapper for libnova -- Celestial Mechanics, Astrometry and Astrodynamics Library
    • meeus - Implementation of "Astronomical Algorithms" by Jean Meeus
    • novas - Interface to the Naval Observatory Vector Astrometry Software (NOVAS)

    Build Tools

    • colorgo - Colorize go build output
    • dogo - Monitoring changes in the source file and automatically compile and run (restart)
    • fileembed-go - This is a command-line utility to take a number of source files, and embed them into a Go package
    • gb - A(nother) build tool for go, with an emphasis on multi-package projects
    • gg - A tiny multi golang projects env/make management tool.
    • GG - A build tool for Go in Go
    • godag - A frontend to the Go compiler collection
    • goenv - goenv provides Go version and Go workspace management tools
    • gopei - Simple Go compiler and LiteIDE installer for Unix/Linux that adds many features like github support and presenter.
    • go-pkg-config - lightweight clone of pkg-config
    • goscons - Another set of SCons builders for Go
    • gotgo - An experimental preprocessor to implement 'generics'
    • gows - Go workspace manager
    • goxc - A build tool with a focus on cross-compiling, packaging, versioning and distribution
    • GVM - GVM provides an interface to manage Go versions
    • Realize - A Go build system with file watchers, output streams and live reload. Run, build and watch file changes with custom paths.
    • SCons Go Tools - A collection of builders that makes it easy to compile Go projects in SCons

    Caching

    • cache - LevelDB style LRU cache for Go, support non GC object cache.
    • cache2go - Concurrency-safe caching library with expiration capabilities and access counters
    • go-cache - An in-memory key:value store/cache (similar to Memcached) library for Go, suitable for single-machine applications
    • golibs/cache - A tiny cache package
    • gomemcached - A memcached server in go
    • gomemcache - a memcached client
    • go-slab - Slab allocator for go.
    • groupcache - Caching and cache-filling library, intended as a replacement for memcached in many cases
    • libmemcache - Fast client and server libraries speaking memcache protocol
    • memcached-bench - Benchmark tool for memcache servers
    • memcached - Fast memcache server, which supports persistence and cache sizes exceeding available RAM
    • memcache - go memcached client, forked from YouTube Vitess
    • rend - A memcached proxy that manages data chunking and L1/L2 caches
    • YBC bindings - Bindings for YBC library providing API for fast in-process blob cache

    Cloud Computing

    • LXD Daemon based on liblxc offering a REST API to manage containers
    • Docker - The Linux container runtime. Developed by dotCloud.
    • Enduro/X ASG Application Server for Go. Provides application server and middleware facilities for distributed transaction processing. Supports microservices based application architecture. Developed by ATR Baltic.
    • Kubernetes - Container Cluster Manager from Google.
    • flamingo - A Lightweight Cloud Instance Contextualizer.
    • gocircuit - A distributed operating system that sits on top of the traditional OS on multiple machines in a datacenter deployment. It provides a clean and uniform abstraction for treating an entire hardware cluster as a single, monolithic compute resource. Developed by Tumblr.
    • gosync - A package for syncing data to and from S3.
    • juju - Orchestration tool (deployment, configuration and lifecycle management), developed by Canonical.
    • mgmt - Next Generation Configuration Management tool (parallel, event driven, distributed system) developed by @purpleidea, (a Red Hat employee) and the mgmt community.
    • rclone - "rsync for cloud storage" - Google Drive, Amazon Drive, S3, Dropbox, Backblaze B2, One Drive, Swift, Hubic, Cloudfiles, Google Cloud Storage, Yandex Files
    • ShipBuilder - ShipBuilder is a minimalist open source platform as a service, developed by Jay Taylor.
    • swift - Go language interface to Swift / Openstack Object Storage / Rackspace cloud files
    • Tsuru - Tsuru is an open source polyglot cloud computing platform as a service (PaaS), developed by Globo.com.
    • aws-sdk-go - AWS SDK for the Go programming language.

    Command-line Option Parsers

    • argcfg - Use reflection to populate fields in a struct from command line arguments
    • autoflags - Populate go command line app flags from config struct
    • cobra - A commander for modern go CLI interactions supporting commands & POSIX/GNU flags
    • command - Add subcommands to your CLI, provides help and usage guide.
    • docopt.go - An implementation of docopt in the Go programming language.
    • getopt - full featured traditional (BSD/POSIX getopt) option parsing in Go style
    • getopt - Yet Another getopt Library for Go. This one is like Python's.
    • gnuflag - GNU-compatible flag parsing; substantially compatible with flag.
    • go-commander - Simplify the creation of command line interfaces for Go, with commands and sub-commands, with argument checks and contextual usage help. Forked from the "go" tool code.
    • go-flags - command line option parser for go
    • goopt - a getopt clone to parse command-line flags
    • go-options - A command line parsing library for Go
    • options - Self documenting CLI options parser
    • opts.go - lightweight POSIX- and GNU- style option parsing
    • pflag - Drop-in replacement for Go's flag package, implementing POSIX/GNU-style --flags.
    • subcommands - A concurrent, unit tested, subcommand library
    • uggo - Yet another option parser offering gnu-like option parsing. This one wraps (embeds) flagset. It also offers rudimentary pipe-detection (commands like ls behave differently when being piped to).
    • writ - A flexible option parser with thorough test coverage. It's meant to "just work" and stay out of the way.
    • cli - A Go library for implementing command-line interfaces.
    • cmdline - A simple parser with support for short and long options, default values, arguments and subcommands.

    Command-line Tools

    • awless - A Mighty command-line interface for Amazon Web Services (AWS).
    • boilr - A blazing fast CLI tool for creating projects from boilerplate templates.
    • coshell - A drop-in replacement for GNU 'parallel'.
    • DevTodo2 - A small command-line per-project task list manager.
    • enumeration - Easy enumeration code generation.
    • fzf - A command-line fuzzy finder
    • gich - A cross platform which utility written in Go
    • git-time-metric - Simple, seamless, lightweight time tracking for Git
    • gister - Manage your github gists from the command-line
    • gmail2go - Simple gmail multiple accounts cli mail checker
    • gocreate - Command line utility that create files from templates.
    • godocdoc - Start godoc and open it in your browser to the project in the current directory.
    • gojson - Command-line tool for manipulating JSON for use in developing Go code.
    • GoPasswordCreator - A small tool, which creates random passwords
    • GoNote - Command line SimpleNote client.
    • Grozilla - File downloader utility with resume capability.
    • jsonpp - A fast command line JSON pretty printer.
    • lsp - A human-friendlier alternative to ls
    • ltst - View the latest news of your choosing right in your terminal
    • passhash - Command-line utility to create secure password hashes
    • passman - A command-line password manager
    • pjs - Pretty print and search through JSON data structures fast.
    • project - Very simple CLI tool to setup new projects from boilerplate templates.
    • pwdgen - A small tool, which generate human password, written in Go.
    • redis-view - A tree like tool help you explore data structures in your redis server
    • restic - A fast, efficient and secure backup program
    • runtemplate - A very simple command-line tool for executing Go templates, useful for use with go generate.
    • runtemplate - A simple tool for executing Go templates to support generating Go code for your types.
    • sift - A fast and powerful open source alternative to grep
    • tecla - Command-line editing library
    • wlog - A simple logging interface that supports cross-platform color and concurrency.
    • wmenu - An easy to use menu structure for cli applications that prompts users to make choices.
    • comb-go - A CLI tool implemented by Golang to manage CloudComb resources.
    • JayDiff - A JSON diff utility written in Go.

    Compression

    • compress - Faster drop in replacements for gzip, zip, zlib, deflate
    • dgolzo - LZO bindings
    • dictzip - A reader and writer for files in the random access dictzip format
    • fast-archiver - Alternative archiving tool with fast performance for huge numbers of small files
    • gbacomp - A Go library to (de)compress data compatible with GBA BIOS
    • go-lz4 - Port of LZ4 lossless compression algorithm to Go.
    • go-lzss - Implementation of LZSS compression algorithm in Go
    • go-sevenzip - Package sevenzip implements access to 7-zip archives (wraps C interface of LZMA SDK)
    • go-zip - A wrapper around C library libzip, providing ability to modify existing ZIP archives.
    • lzma - compress/lzma package for Go
    • pgzip - Multicore gzip, compatible with the standard library
    • snappy-go - Google's Snappy compression algorithm in Go
    • yenc - yenc decoder package
    • zappy - Package zappy implements the zappy block-based compression format. It aims for a combination of good speed and reasonable compression.
    • ppmd-go - Golang bindings for the LZMA SDK library. (Only binded PPMD)

    Concurrency and Goroutines

    • grpool - Lightweight Goroutine pool.
    • pool - Go consumer goroutine pool for easy goroutine handling + time saving.
    • tunny - A goroutine pool.
    • worker - An easy and lightweight concurrent job framework.

    Configuration File Parsers

    • awsenv - a small binary that loads Amazon (AWS) environment variables for a profile
    • confl - nginx config syntax, lenient, encode/decode, custom marshaling
    • flagfile - Adds parsing and serialization support to the standard library flag package (adds a --flagfile option)
    • gcfg - read INI-style configuration files into Go structs; supports user-defined types and subsections
    • globalconf - Effortlessly persist to and read flag values from an ini config file
    • goconf - a configuration file parser
    • hjson - Human JSON, a configuration file format for humans. Relaxed syntax, fewer mistakes, more comments.
    • jsonconfig - a JSON configuration file parser with comments support
    • properties - Library for reading and writing properties files
    • scribeconf - Facebook Scribe server configuration file parser
    • toml:
      • go-toml-config - TOML-based config for Go
      • go-toml - Go library for the TOML language
      • gp-config - Subset of TOML syntax with basic and reflection APIs
      • toml-go - An easy-to-use Go parser for the Toml format
      • toml - TOML parser for Go with reflection
      • tom-toml - TOML parser for Go, support comments/formatter/apply.
    • viper - a complete configuration solution supporting YAML, TOML & JSON and integration with command line flags
    • yaml:
      • yaml - YAML support for the Go language, by Canonical
      • goyaml - A port of LibYAML to Go

    Console User Interface

    • ansi - Easily create ansi escape code strings and closures to format, color console output
    • ansiterm - pkg to drive text-only consoles that respond to ANSI escape sequences
    • cons - A simple package for building interactive console tools.
    • gnureadline - GNU Readline bindings
    • go-ansiout - Another ANSI escape code sequence tool for use with command-line applications.
    • gockel - a Twitter client for text terminals
    • gocui - Minimalist library aimed at creating Console User Interfaces
    • gocurse - Go bindings for NCurses
    • gocurses - NCurses wrapper
    • go-ibgetkey - "hot key" type user input package for use in processing keystrokes in command-line applications.
    • go.linenoise - Linenoise bindings (simple and easy readline with prompt, optional history, optional tab completion)
    • goncurses - An ncurses library, including the form, menu and panel extensions
    • gopass - Allows typing of passwords without echoing to screen
    • go-pullbarz - Fancy "light bar" menus like in Lotus 123 from the DOS days. Dependent on go-ibgetkey and go-ansiout.
    • go.sgr - Terminal/console colors and text decoration (bold,underlined,etc).
    • go-stfl - a thin wrapper around STFL, an ncurses-based widget toolkit
    • goterminal - A go library that lets you write and then re-write the text on terminal, to update progress. It works on Windows too!
    • go-web-shell - Remote web shell, implements a net/http server.
    • igo - A simple interactive Go interpreter built on exp/eval with some readline refinements
    • oh - A Unix shell written in Go
    • pty - obtain pseudo-terminal devices
    • readline - A pure go implementation for GNU-Readline kind library
    • termbox-go - A minimalist alternative to ncurses to build terminal-based user interfaces
    • termios - Terminal support
    • termon - Easy terminal-control-interface for Go.
    • uilive - uilive is a go library for updating terminal output in realtime.
    • uiprogress - A library to render progress bars in terminal applications.
    • uitable - A library to improve readability in terminal apps using tabular data.
    • yandex-weather-cli - Command line interface for Yandex weather service

    Continuous Integration

    • goveralls - Go integration for Coveralls.io continuous code coverage tracking system.
    • overalls - Multi-Package go project coverprofile for tools like goveralls

    Cryptography

    • BLAKE2b - Go implementation of BLAKE2b hash function
    • cryptogo - some useful cryptography-related functions, including paddings (PKCS7, X.923), PBE with random salt and IV
    • cryptoPadding - Block padding schemes implemented in Go
    • dkeyczar - Go port of Google'e Keyczar cryptography library
    • dkrcrypt - Korean block ciphers: SEED and HIGHT
    • dskipjack - Go implementation of the SKIPJACK encryption algorithm
    • go-cs - concurrent ssh client.
    • go-ed25519 - CGO bindings for Floodberry's ed25519-donna. Fast batch verification.
    • go-hc128 - Go implementation of HC-128, an eSTREAM stream cipher
    • go-jose - Go implementation of the JOSE standards
    • go-minilock - Go implementation of the minilock file encryption system.
    • GoSkein - Implementation of Skein hash and Threefisch crypto for Go
    • keccak - A keccak (SHA-3) implementation
    • ketama.go - libketama-style consistent hashing
    • kindi - encryption command line tool
    • openssl - openssl bindings for go
    • otrcat - a general purpose command-line tool for communicating using the Off-The-Record protocol
    • scrypt - Go implementation of Colin Percival's scrypt key derivation function
    • simpleaes - AES encryption made easy
    • siphash - SipHash: a fast short-input pseudorandom function
    • SRP - SRP: Secure Remote Password - Implementation in go
    • ssh.go - SSH2 Client library
    • ssh-vault - encrypt/decrypt using ssh keys
    • tiger - Tiger cryptographic hashing algorithm
    • whirlpool - whirlpool cryptographic hashing algorithm
    • go-lioness - Lioness wide-block cipher using Chacha20 and Blake2b
    • go-sphinxmixcrypto - Sphinx mix network cryptographic packet format operations

    Data Processing

    • automi - Compose process and integration flows on Go channels
    • gostatsd - Statsd server and library.
    • Heka - Real time data and log file processing engine.
    • Kapacitor - Framework for processing, monitoring and alerting on timeseries data.
    • pipe - Several functional programming supporting in golang (Map/Reduce/Filter)
    • proto - Map/Reduce/Filter etc. for Go using channels as result streams.
    • regommend - Recommendation engine.
    • rrd - Bindings for rrdtool.
    • XConv - Convert any value between types (base type, struct, array, slice, map, etc.)

    Data Structures

    Collections

    • collections - Several common data structures
    • data-structures - A collection of data-structures (ArrayList, SortedList, Set, AVL Tree, Immutable AVL Tree, B+Tree, Ternary Search Trie, Hash Table (Separate Chaining), Linear Hash Table)
    • ps - Persistent data structures
    • Tideland golib - A collections library

    Hashtables

    • gohash - A simple linked-list hashtable that implements sets and maps
    • go-maps - Go maps generalized to interfaces

    Lists

    • fs2/mmlist - A memory mapped list.
    • GoArrayList - GoArrayList is a Go language substitute for the Java class ArrayList, with very nearly all features.
    • goskiplist - A skip list implementation in Go.
    • itreap - An immutable ordered list, internally a treap.
    • ListDict - Python List and Dict for Go
    • skip - A fast position-addressable ordered map and multimap.
    • Skiplist - A fast indexable ordered multimap.
    • skiplist - A skip list implementation. Highly customizable and easy to use.
    • skiplist - Skiplist data structure ported from Redis's Sorted Sets.
    • stackgo - A fast slice-based stack implementation.

    Queues

    • fifo_queue - Simple FIFO queue
    • figo - A simple fifo queue with an optional thread-safe version.
    • go.fifo - Simple auto-resizing thread-safe fifo queue.
    • gopqueue - Priority queue at top of container/heap
    • go-priority-queue - An easy to use heap implementation with a conventional priority queue interface.
    • golibs/stack - A LIFO and ringbuffer package
    • gringo - A minimalist queue implemented using a stripped-down lock-free ringbuffer
    • heap - A general heap package without converting elements to interface{} and back.
    • queued - A simple network queue daemon
    • queue - A queue manager on top of Redis

    Graphs

    • graph - Library of basic graph algorithms
    • graphs - Implementation of various tree, graph and network algorithms

    Sets

    • disjoint - Disjoint sets (union-find algorithm with path compression)
    • golang-set - A full thread-safe and unsafe set implementation for Go.
    • goset - A simple, thread safe Set implementation
    • set - Set data structure for Go

    Trees

    • b - Package b implements B+trees with delayed page split/concat and O(1) enumeration. Easy production of source code for B+trees specialized for user defined key and value types is supported by a simple text replace.
    • btree - Package btree implements persistent B-trees with fixed size keys, http://en.wikipedia.org/wiki/Btree
    • btree - In-memory (not persistent) B-tree implementation, similar API to GoLLRB
    • go-avltree - AVL tree (Adel'son-Vel'skii & Landis) with indexing added
    • go-btree - Simple balance tree implementation
    • go-darts - Double-ARray Trie System for Go
    • GoLLRB - A Left-Leaning Red-Black (LLRB) implementation of 2-3 balanced binary search trees in Google Go
    • go-merkle - Merkle-ized binary (search) trees with proofs.
    • go-stree - A segment tree implementation for range queries on intervals
    • go-radixgo-radix-immutable - Radix tree implementations.
    • gtreap - Persistent treap implementation.
    • rbtree - Yet another red-black tree implementation, with a C++ STL-like API
    • rtreego - an R-Tree library
    • triego - Simple trie implementation for storing words
    • prefixmap - Simple trie-based prefix-map for string-based keys

    Other

    • bigendian - binary parsing and printing
    • deepcopy - Make deep copies of data structures
    • dgobloom - A Bloom Filter implementation
    • epochdate - Compact dates stored as days since the Unix epoch
    • etree - Parse and generate XML easily
    • fsm - Minimalistic state machine for use instead of booleans
    • go-algs/ed - Generalized edit-distance implementation
    • go-algs/maxflow - An energy minimization tool using max-flow algorithm.
    • go-extractor - Go wrapper for GNU libextractor
    • gocrud - Framework for working with arbitrary depth data structures.
    • Gokogiri - A lightweight libxml wrapper library
    • GoNetCDF - A wrapper for the NetCDF file format library
    • goop - Dynamic object-oriented programming support for Go
    • gopart- Type-agnostic partitioning for anything that can be indexed in Go.
    • gotoc - A protocol buffer compiler written in Go
    • govalid - Data validation library
    • goxml - A thin wrapper around libxml2
    • hyperloglog - An implementation of the HyperLogLog and HyperLogLog++ algorithms for estimating cardinality of sets using constant memory.
    • itertools - Provides generic iterable generator function along with functionality similar to the itertools python package.
    • jsonv - A JSON validator
    • libgob - A low level library for generating gobs from other languages
    • ofxgo - A library for querying OFX servers and/or parsing the responses (and example command-line client).
    • Picugen - A general-purpose hash/checksum digest generator.
    • tribool - Ternary (tree-valued) logic for Go
    • Tuple - Tuple is a go type that will hold mixed types / values
    • vcard - Reading and writing vcard file in go. Implementation of RFC 2425 (A MIME Content-Type for Directory Information) and RFC 2426 (vCard MIME Directory Profile).
    • mxj - Marshal/Unmarshal XML doc from/to map[string]interface{} or JSON
    • xlsx - A library to help with extracting data from Microsoft Office Excel XLSX files.
    • goxlsxwriter - Golang bindings for libxlsxwriter for writing XLSX (Excel) files
    • simple-sstable - A simple, no-frills SSTable format and implementation in Go.

    Databases

    See also SQLDrivers page.

    CockroachDB

    • cockroachdb - A Scalable, Survivable, Strongly-Consistent SQL Database

    MongoDB

    • mgo - Rich MongoDB driver for Go
    • rocks-stata - MongoDB Backup Utility

    MySQL

    • Go-MySQL-Driver - A lightweight and fast MySQL-Driver for Go's database/sql package
    • MyMySQL - MySQL Client API written entirely in Go.
    • TiDB - MySQL compatible distributed database modeled after Google's F1 design.
    • vitess - Scaling MySQL databases for the web
    • mysqlsuperdump - Generate partial and filtered dumps of MySQL databases

    ODBC

    • go-odbc - ODBC Driver for Go
    • odbc3-go - This package is wrapper around ODBC (version 3).

    PostgreSQL

    • go-libpq - cgo-based Postgres driver for Go's database/sql package
    • go-pgsql - A PostgreSQL client library for Go
    • pgsql.go - PostgreSQL high-level client library wrapper
    • pgx - Go PostgreSQL driver that is compatible with database/sql and has native interface for more performance and features
    • pq - Pure Go PostgreSQL driver for database/sql
    • yoke - Postgres high-availability cluster with auto-failover and automated cluster recovery

    QL

    • ql - A pure Go embedded (S)QL database.

    Redis

    • godis - Simple client for Redis
    • Go-Redis - Client and Connectors for Redis key-value store
    • go-redis - Redis client built on the skeleton of gomemcache
    • Redigo - Go client for Redis.
    • redis - Redis client for Go

    RethinkDB

    SQLite

    ORM

    • beedb - beedb is an ORM for Go. It lets you map Go structs to tables in a database
    • FilterXorm - Build conditions for xorm project.
    • go-modeldb - A simple wrapper around sql.DB for struct support.
    • gorm - An ORM library for Go, aims for developer friendly
    • gorp - SQL mapper for Go
    • go-store - Data-store library for Go that provides a set of platform-independent interfaces to persist and retrieve key-value data.
    • hood - Database agnostic ORM for Go. Supports Postgres and MySQL.
    • qbs - Query By Struct. Supports MySQL, PostgreSQL and SQLite3.
    • sqlgen - Go code generation for SQL interaction.
    • structable - Struct-to-table database mapper.
    • xorm - Simple and Powerful ORM for Go.
    • reform - A better ORM for Go, based on non-empty interfaces and code generation.

    Multiple wrappers

    • gosexy/db - an abstraction of wrappers for popular third party SQL and No-SQL database drivers.

    Key-Value-Stores

    • bolt - Persistent key/value store inspired by LMDB.
    • dbm - Package dbm (WIP) implements a simple database engine, a hybrid of a hierarchical and/or a key-value one.
    • fs2/bptree - A memory mapped B+Tree with duplicate key support. Appropriate for large amounts of data (aka +100 GB). Supports both anonymous and file backed memory maps.
    • Diskv - Home-grown, disk-backed key-value store
    • etcd - Highly-available key value store for shared configuration and service discovery
    • gkvlite - Pure go, simple, ordered, atomic key-value persistence based on append-only file format.
    • gocask - Key-value store inspired by Riak Bitcask. Can be used as pure go implementation of dbm and other kv-stores.
    • goleveldb - Another implementation of LevelDB key/value in pure Go.
    • kv - Yet another key/value persistent store. Atomic operations, two phase commit, automatic crash recovery, ...
    • leveldb-go - This is an implementation of the LevelDB key/value database.
    • levigo - levigo provides the ability to create and access LevelDB databases.
    • persival - Programatic, persistent, pseudo key-value storage

    Graph Databases

    • cayley - 100% Go graph database, inspired by Freebase and the Google Knowledge Graph.
    • Dgraph - Fast, Distributed Graph DB with a GraphQL-like API.
    • go-gremlin - A Go client for the Apache TinkerTop Graph analytics framework (Gremlin server).

    NoSQL

    • influxdb - Scalable datastore for metrics, events, and real-time analytics
    • ledisdb - A high performance NoSQL like Redis.
    • nodb - A pure Go embed Nosql database with kv, list, hash, zset, bitmap, set.
    • tiedot - A NoSQL document database engine using JSON for documents and queries; it can be embedded into your program, or run a stand-alone server using HTTP for an API.

    Other

    • cabinet - Kyoto Cabinet bindings for go
    • camlistore - Personal distributed storage system for life.
    • cdb.go - Create and read cdb ("constant database") files
    • go-clickhouse - Connector to Yandex Clickhouse (column-oriented database)
    • CodeSearch - Index and perform regex searches over large bodies of source code
    • couch-go - newer maintained CouchDB database binding
    • couchgo - The most feature complete CouchDB Adapter for Go. Modeled after couch.js.
    • dbxml - A basic interface to Oracle Berkeley DB XML
    • drive - A Google drive command line client
    • Event Horizon - Toolkit for Command Query Responsibility Segregation and Event Sourcing (CQRS/ES)
    • go-db-oracle - GO interface to Oracle DB
    • gographite - statsd server in go (for feeding data to graphite)
    • gokabinet - Go bindings for Kyoto Cabinet DBM implementation
    • go-notify - GO bindings for the libnotify
    • goprotodb - A binding to Berkeley DB storing records encoded as Protocol Buffers.
    • go-rexster-client - Go client for the Rexster graph server (part of the TinkerPop suite of graph DB tools)
    • goriak - Database driver for riak database (project homepage is now on bitbucket.org)
    • goriakpbc - Riak driver using Riak's protobuf interface
    • gotyrant - A Go wrapper for tokyo tyrant
    • go-wikiparse - mediawiki dump parser for working with wikipedia data
    • hdfs - go bindings for libhdfs
    • JGDB - JGDB stands for Json Git Database
    • mig - Simple SQL-based database migrations
    • mongofixtures - A Go quick and dirty utility for cleaning MongoDB collections and loading fixtures into them.
    • Neo4j-GO - Neo4j REST Client in Go
    • neoism - Neo4j graph database client, including Cypher and Transactions support.
    • null - Package for handling null values in SQL
    • Optimus Cache Prime - Smart cache preloader for websites with XML sitemaps.
    • piladb - Lightweight RESTful database engine based on stack data structures.
    • pravasan - Simple Migration Tool (like rake db:migrate with more flexibility)
    • riako - High level utility methods for interacting with Riak databases
    • sqlbuilder - SQL query builder with row mapping
    • squirrel - Fluent SQL generation for Go
    • Sublevel - Separate sections of the same LevelDB
    • Weed File System - fast distributed key-file store
    • whisper-go - library for working with whisper databases

    Date

    • now - Now is a time toolkit for golang.
    • date - A package for working with dates.
    • date - For dates, date ranges, time spans, periods, and time-of-day.
    • gostrftime - strftime(3) like formatting for time.Time
    • tai64 - tai64 and tai64n parsing and formatting
    • Tideland golib - Timex extensions

    Development Tools

    • cwrap - Go wrapper (binding) generator for C libraries.
    • demand - Download, build, cache and run a Go app easily.
    • glib - Bindings for GLib type system
    • gocog - A code generator that can generate code using any language
    • godepgraph - Create a dependency graph for a go package
    • godev - Recompiles and runs your Go code on source change. Also watches all your imports for changes.
    • godiff - diff file comparison tool with colour html output
    • gonew - A tool to create new Go projects
    • go-play - A HTML5 web interface for experimenting with Go code. Like http://golang.org/doc/play but runs on your computer
    • gore - A Go REPL. Featured with line editing, code completion, and more
    • gorun - Enables Go source files to be used as scripts.
    • go-spew - Implements a deep pretty printer for Go data structures to aid in debugging
    • goven - Easily copy code from another project into yours
    • gowatcher - Reload a specified go program automatically by monitoring a directory.
    • GoWatch - GoWatch watches your dev folder for modified files, and if a file changes it restarts the process.
    • goweb - Literate programming tools for Go based on CWEB by Donald Knuth and Silvio Levy.
    • hopwatch - simple debugger for Go
    • hsandbox - Tool for quick experimentation with Go snippets
    • Inject - Library for dependency injection in Golang (from Facebook)
    • liccor - A tool for updating license headers in Go source files
    • liteide - An go auto build tools and qt-based ide for Go
    • Livedev - Livedev is a development proxy server that enables live code reloading.
    • Martian - HTTP proxy designed for use in E2E testing.
    • nvm-windows - Node.js version manager for Windows
    • prettybenchcmp - Store and compare benchmarks history locally.
    • rerun - Rerun watches your binary and all its dependencies so it can rebuild and relaunch when the source changes.
    • syntaxhighlighter - language-independent code syntax highlighting library
    • toggle - A feature toggle library with built in support for environment variable backed toggling. pluggable backing engine support.
    • trace - A simple debug tracing

    Emacs Tags

    • egotags - ETags generator
    • tago1 - etags generator for go that builds with go 1
    • tago - Emacs TAGS generator for Go source

    Distributed/Grid Computing

    • celeriac - A library for adding support for interacting and monitoring Celery workers, tasks and events in Go
    • donut - A library for building clustered services in Go
    • libchan - Go-like channels over the network
    • locker - A distributed lock service built on top of etcd.
    • dlock - A native Go distributed lock manager (client and server) using gRPC.
    • mangos - An implementation of the Scalable Protocols based on nanomsg
    • redsync - Redis-based distributed mutual exclusion lock implementation
    • Skynet - Skynet is distributed mesh of processes designed for highly scalable API type service provision.
    • Tideland golib - Includes a map/reduce library

    Documentation

    • examplgen - Insert code from .go files to documents (examples to project's readme, for instance).
    • godocdown - Format package documentation (godoc) as GitHub friendly Markdown
    • GoDoc.org - GoDoc.org generates documentation on the fly from source on Bitbucket, Github, Google Project Hosting and Launchpad.
    • golangdoc - Godoc for Golang, support translate.
    • Mango - Automatically generate unix man pages from Go sources
    • redoc - Commands documentation for Redis
    • sphinxcontrib-golangdomain - Sphinx domain for Go
    • test2doc - Generate documentation for your go units from your unit tests.

    Editors

    • Conception - Conception is an experimental research project, meant to become a modern IDE/Language package. demo video
    • Go-bbpackage - BBEdit package for Go development
    • goclipse - An Eclipse-based IDE for Go.
    • Go conTEXT - Highlighter plugin
    • godev - Web-based IDE for the Go language
    • godit - A microemacs-like text editor written in Go.
    • gofinder - (code) search tool for acme
    • go-gedit - Google Go language plugin for gedit
    • golab - go local application builder - a web-based Go ide
    • Google Go for Idea - Google Go language plugin for Intellij IDEA
    • micro - A modern and intuitive terminal-based text editor.
    • tabby - Source code editor
    • ViGo - A vim-like text editor.
    • Wide - A Web-based IDE for Teams using Golang.

    Email

    • Hectane - Lightweight SMTP client including a built-in mail queue backed by on-disk storage.
    • gmail - Simple library for sending emails from a Gmail account, for people not interested in dealing with protocol details.
    • go-mail - Email utilities including RFC822 messages and Google Mail defaults.
    • Gomail - A simple and efficient package to send emails.
    • go-ses - Amazon AWS Simple Email Service (SES) API client
    • Inbucket - Inbucket is an email testing service; it will accept messages for any email address and make them available to view via a web interface.
    • mail.go - Parse email messages
    • MailHog - Email testing service, inspired by MailCatcher.
    • MailSlurper - A handy SMTP mail server useful for local and team application development. Slurp mail into oblivion!
    • chasquid - SMTP server written in Go.

    Error handling

    • errgo - Error tracing and annotation.
    • errors - The juju/errors package provides an easy way to annotate errors without losing the original error context, and get a stack trace back out of the error for the locations that were recorded.
    • goerr - Allows to make a separate(modular) and reusable error handlers. Exception-like panic() recover() mechanism using Return(error) and catching err := OR1(..)
    • panicparse - Parse panics with style.
    • Space Monkey errors - Go's missing errors library - stack capture, error hierarchies, error tags
    • Tideland golib - Detailed error values

    Encodings and Character Sets

    • base58 - Human input-friendly base58 encoding
    • bencode-go - Encoding and decoding the bencode format used by the BitTorrent peer-to-peer file sharing protocol
    • bsonrpc - BSON codec for net/rpc
    • chardet - Charset detection library ported from ICU
    • charmap - Character encodings in Go
    • codec-msgpack-binc High Performance and Feature-Rich Idiomatic Go Library providing encode/decode support for multiple binary serialization formats: msgpack
    • colfer - high-performance binary codec
    • gobson - BSON (de)serializer
    • go-charset - Conversion between character sets. Native Go.
    • go.enmime - MIME email parser library for Go (native)
    • go-msgpack - Comprehensive MsgPack library for Go, with pack/unpack and net/rpc codec support (DEPRECATED in favor of codec )
    • gopack - Bit-packing for Go
    • go-simplejson - a Go package to interact with arbitrary JSON
    • go-wire - Binary and JSON codec for structures and more
    • go-xdr - Pure Go implementation of the data representation portion of the External Data Representation (XDR) standard protocol as specified in RFC 4506 (obsoletes RFC 1832 and RFC 1014).
    • iconv-go - iconv wrapper with Reader and Writer
    • magicmime -- Mime-type detection with Go bindings for libmagic
    • Mahonia - Character-set conversion library in Go
    • mimemagic - Detect mime-types automatically based on file contents with no external dependencies
    • msgpack - Msgpack format implementation for Go
    • msgpack-json - Command-line utilities to convert between msgpack and json
    • nnz - String and Int primitives that serialize to JSON and SQL null
    • storable - Write perl storable data
    • TNetstring - tnetstrings (tagged Netstrings)

    File Systems

    • afero - A File Sytem abstraction system for Go
    • go.fs - A virtual file system abstraction layer.
    • poller - Package poller is a file-descriptor multiplexer. It allows concurent Read and Write operations from and to multiple file-descriptors.
    • vfsgen - Generates a vfsdata.go file that statically implements the given virtual filesystem.

    Games

    • Bampf - Arcade style game based on the Vu 3D engine.
    • bloxorz - Solver for bloxorz basic levels
    • ChessBuddy - Play chess with Go, HTML5, WebSockets and random strangers!
    • Fergulator - An NES emulator, using SDL and OpenGL
    • FlappyBird - A simple flappy bird clone written in golang.
    • godoku - Go Sudoku Solver - example of "share by communicating"
    • Gongo - A program written in Go that plays Go
    • gospeccy - A ZX Spectrum 48k Emulator
    • Ludo Game - Ludo Board game powered by Go on Appengine
    • pinkman - command line based chess interface to UCI compatible chess engines
    • Pong - A simple Pong clone written in golang
    • pong-command - Joke command,ping-like pong.
    • Steven - A Minecraft client in Go
    • WolfenGo - A Wolfenstein3D clone in Go, using OpenGL 2.1

    GIS

    • geojson - Go package to quick and easy create json data in geojson format. description
    • go-geom - Efficient Open Geo Consortium-style geometries with native Go GeoJSON and WKB encoding and decoding (work-in-progress)
    • go.geo - Geometry/geography library targeted at online mapping
    • go.geojson - Marshalling and Unmarshalling of GeoJSON objects
    • gogeos - Go library for spatial data operations and geometric algorithms
    • go-proj-4 - An interface to the Cartographic Projections Library PROJ.4
    • go-kml - Google Earth KML generation
    • go-polyline - Google Maps polyline encoding and decoding
    • UTM - Bidirectional UTM-WGS84 converter

    Go Implementations

    • llgo - LLVM-based Go compiler, written in Go

    Graphics and Audio

    • AnsiGo - Simple ANSi to PNG converter written in pure Go
    • Arclight - Arclight is a tool for rendering images
    • bild - A collection of image processing algorithms in pure Go
    • bimg - Small Go library for fast image resize and transformation using libvips
    • blend - Image processing library and rendering toolkit for Go.
    • bpg - BPG decoder for Go.
    • chart - Library to generate common chart (pie, bar, strip, scatter, histogram) in different output formats.
    • draw2d - This package provide an API to draw 2d geometrical form on images. This library is largely inspired by postscript, cairo, HTML5 canvas.
    • egl - egl bindings
    • es2 - es2 bindings
    • freetype-go - a Go implementation of FreeType
    • gltf - library for marshaling and unmarshaling glTF
    • glfw 3 - Go bindings for GLFW 3 library
    • glfw - bindings to the multi-platform library for opening a window, creating an OpenGL context and managing input
    • glh - OpenGL helper functions to manage text, textures, framebuffers and more
    • gl - OpenGL bindings using glew
    • glu - bindings to the OpenGL Utility Library
    • gmask - Go adaptation of the Cmask utility for Csound
    • goalsa - Go bindings for ALSA capture and playback
    • go-cairo - Go wrapper for the cairo graphics library
    • gocl - Go OpenCL (gocl) binding, support OpenCL 1.1/1.2/2.0 on Mac/Linux/Windows/Android
    • go-csnd6 - Go binding to the Csound6 API
    • go-csperfthread - Go binding to the CsoundPerformanceThread helper class of the Csound6 API
    • goexif - Retrieve EXIF metadata from image files
    • goflac - Go bindings for decoding and encoding FLAC audio with libFLAC
    • go-gd - Go bingings for GD
    • GoGL - OpenGL binding generator
    • go-gnuplot - go bindings for Gnuplot
    • go-gtk3 - gtk3 bindings for go
    • go-heatmap - A toolkit for making heatmaps
    • GoHM - H.265/HEVC HM Video Codec in Go
    • goHorde - Go Bindings for the Horde3d Rendering engine.
    • GoMacDraw - A mac implementation of go.wde
    • go-openal - Experimental OpenAL bindings for Go
    • go-opencl - A go wrapper to the OpenCL heterogeneous parallel programming library
    • go-opencv - Go bindings for OpenCV / 2.x API in gocv / 1.x API in opencv
    • Go-OpenGL - Go bindings for OpenGL
    • Goop - Audio synthesizer engine
    • goray - Raytracer written in Go, based on Yafaray
    • gosc - Pure Go OSC (Open Sound Control) library
    • go-taglib - Go wrapper for TagLib, an audio meta-data parser
    • go-tmx - A Go library that reads Tiled's TMX files
    • GoVisa - H265/HEVC Bitstream Analyzer in Go
    • go-vlc - Go bindings for libVLC
    • go.wde - A windowing/drawing/event interface
    • goxscr - Go rewrites of xscreensaver ports
    • gst - Go bindings for GStreamer
    • gumble - Client library for the Mumble VoIP protocol
    • hgui - Gui toolkit based on http and gtk-webkit.
    • imaginary - Simple and fast HTTP microservice for image resizing and manipulation
    • imaging - Package imaging provides basic image manipulation functions (resize, rotate, flip, crop, etc.) as well as simplified image loading and saving.
    • netpbm - Read and write Netpbm images from Go programs
    • opencv - Go bindings for OpenCV
    • osmesa - Go bindings for osmesa.
    • Plotinum - An API for creating plots
    • portaudio - A Go binding to PortAudio
    • pulsego - Go binding for PulseAudio
    • pulse-simple - Go bindings for PulseAudio's Simple API, for easy audio capture and playback.
    • resize - Image resizing with different interpolations.
    • RiGO - RenderMan Interface implementation in Go.
    • smartcrop - Content aware image cropping
    • starfish - A simple Go graphics and user input library, built on SDL
    • stl - library for reading, writing, and manipulating Stereolithography (.stl) files used in 3D printing
    • svgo - a library for creating and outputting SVG
    • tag - a library for reading tag metadata and creating metadata-invariant checksums for audio files: FLAC, all IDv3 variants, and MP4 (ACC, ALAC)
    • tga - TARGA image format encoding/decoding library
    • tiff - Rich TIFF/BigTIFF/GeoTIFF decoder/encoder for Go.
    • twilio-go - Go client for the Twilio API.
    • videoinput - Go bindings for VideoInput (Windows).
    • vu - Virtual Universe. A skeleton 3D engine.
    • vulkan - Golang Bindings for Vulkan API.
    • webp - WebP decoder and encoder for Go.
    • wg - Web Graphics, display real time go graphics in browser, with user input.
    • window - Optimized moving window for real-time data
    • wingo - A fully-featured window manager written in Go.
    • Winhello - An example Windows GUI hello world application
    • wxGo - Go Wrapper for the wxWidgets GUI
    • xgb - A fork of the x-go-binding featuring support for thread safety and all X extensions.
    • xgbutil - A utility library to make use of the X Go Binding easier. (Implements EWMH and ICCCM specs, key binding support, etc.)
    • x-go-binding - bindings for the X windowing system

    GUIs and Widget Toolkits

    • go-fltk - FLTK2 GUI toolkit bindings for Go
    • go-gtk - Bindings for GTK
    • go-qt5 - QT5 bindings for go
    • gothic - Tcl/Tk Go bindings
    • gotk3 - Go bindings for GTK3, requires GTK version 3.8
    • go.uik - A UI kit for Go, in Go. (project is closed)
    • go-webkit2 - Go bindings for the WebKitGTK+ v2 API (w/headless browser & JavaScript support)
    • Gowut - Gowut (Go Web UI Toolkit) is a full-featured, easy to use, platform independent Web UI Toolkit written in pure Go, no platform dependent native code is linked or called.
    • GXUI - A Go cross platform UI library.
    • iup - Bindings for IUP
    • mdtwm - Tiling window manager for X
    • qml - QML support for the Go language
    • ui - Platform-native GUI library for Go

    Hardware

    • go.hid - Provides communication with USB Human Interface Devices.
    • gortlsdr - A librtlsdr wrapper, which turns certain USB DVB-T dongles into a low-cost, general purpose software-defined radio receiver.
    • hwio - Hardware I/O library for SoC boards including BeagleBone Black and Raspberry Pi.
    • stressdisk - Stress test your disks / memory cards / USB sticks before trusting your valuable data to them
    • gobot - Golang framework for robotics, drones, and the Internet of Things (IoT).

    Language and Linguistics

    • alpinocorpus-go - A reader and a writer for Alpino corpora.
    • go-aspell - GNU Aspell spell checking library bindings for Go.
    • go-language - A simple language detector using letter frequency data.
    • goling - String Similarity(Cosine Similarity, Levenshtein Distance), Spell Check, Segmentation
    • go.stringmetrics - String distance metrics implemented in Go
    • inflect - Word inflection library (similar to Ruby ActiveSupport::Inflector). Singularize(), Pluralize(), Underscore() etc.
    • libtextcat - A Go wrapper for libtextcat.
    • sego - Chinese language segmenter.
    • textcat - N-gram based text categorization, with support for utf-8 and raw text

    Logging and Monitoring

    • colog - CoLog is a prefix-based leveled execution log for Go
    • cue - Fast and flexible contextual logger. Supports output to file, syslog, structured syslog, stdout/stderr, socket, Loggly, Honeybadger, Opbeat, Rollbar, and Sentry.
    • epazote - Automated Microservices Supervisor.
    • factorlog - Really fast, featureful logging infrastructure (supports colors, verbosity, and many formats)
    • vlog - Leveled log on std log for Go
    • glog - Leveled execution logs for Go
    • go-logging - Supports different logging backends like syslog, file and memory. Multiple backends can be utilized with different log levels per backend and logger.
    • gomol - A multi-output logging library designed for outputs that support additional metadata with log messages.
    • graylog-golang - graylog-golang is a full implementation for sending messages in GELF (Graylog Extended Log Format) from Google Go (Golang) to Graylog
    • jWalterWeatherman - Seamless terminal printing and file logging that’s as easy to use as fmt.Println
    • immortal - A *nix cross-platform (OS agnostic) supervisor
    • log4go - Go logging package akin to log4j
    • logger - Go logging with buffered output and multiple writers
    • logrus - Structured, pluggable logging for Go with built-in hooks for third-party loggers: Airbrake, Papertrail, Loggly, Sentry...
    • MailJet Live Event Dashboard - API monitoring in real time.
    • monkit - A flexible process data collection, metrics, monitoring, instrumentation, and tracing library for Go
    • Prometheus - Monitoring system and time-series database.
    • rfw - Rotating file writer - a 'logrotate'-aware file output for use with loggers
    • sd - Writes to the systemd journal, supports user defined systemd journal fields
    • seelog - Flexible dispatching, filtering, and formatting
    • snap - Telemetry framework
    • spacelog - Hierarchical, leveled, and structured logging library for Go
    • statsgod - A rewrite of StatsD in Go.
    • syslog - With this package you can create your own syslog server with your own handlers for different kind of syslog messages
    • Tideland golib - Flexible logging
    • timber - Configurable Logger for Go

    Machine Learning

    • bayesian - A naive bayes classifier.
    • ctw - Context Tree Weighting and Rissanen-Langdon Arithmetic Coding
    • evo - a framework for implementing evolutionary algorithms in Go.
    • go-algs/maxflow Maxflow (graph-cuts) energy minimization library.
    • go-galib - Genetic algorithms.
    • golinear - Linear SVM and logistic regression.
    • go_ml - Linear Regression, Logistic Regression, Neural Networks, Collaborative Filtering, Gaussian Multivariate Distribution.
    • gorgonia - Neural network primitives library (like Theano or Tensorflow but for Go)
    • go-porterstemmer - An efficient native Go clean room implementation of the Porter Stemming algorithm.
    • go-pr - Gaussian classifier.
    • ntm - Neural Turing Machines implementation
    • paicehusk - Go implementation of the Paice/Husk Stemmer
    • snowball - Snowball stemmer
    • go-mind - A neural network library built in Go
    • Anna - Artificial Neural Network Aspiration, aims to be self-learning and self-improving software.

    Mathematics

    • bayesian - Naive Bayesian Classification for Go
    • blas - Go implementation of BLAS (Basic Linear Algebra Subprograms)
    • cartconvert - cartography functions for the Go programming language
    • clp - Go bindings for the COIN-OR Linear Programming (CLP) library
    • Cvx - Convex optimization package, port of CVXOPT python package
    • dice - Dice rolling library
    • evaler - A simple floating point arithmetic expression evaluator
    • fixed - A fixed point (Q32.32 format) math library
    • geom - 2d geometry
    • gini - SAT Solver/Boolean Logic Tools
    • gochipmunk - Go bindings to the Chipmunk Physics library
    • gocomplex - a complex number library
    • godec - multi-precision decimal arithmetic
    • gofd - concurrent finite domain constraint solver.
    • go-fftw - Go bindings for FFTW - The Fastest Fourier Transform in the West
    • go-fn - Special functions that would not fit in "math" pkg
    • gographviz - Graphviz DOT language parser for Go
    • go-gt - Graph theory algorithms
    • go-humanize - Formatting numbers for humans.
    • golibs/xmath - a collection of math functions (mostly mean algorithms)
    • go-lm - Linear models in Go. Provides WLS and regression with t residuals via a cgo -> BLAS/LAPACK interface.
    • go.mahalanobis - Naive implementation of the Mahalanobis distance using go.matrix
    • gomat - lightweight FAST matrix and vector math
    • go_matrix_cuda - GPU-Accelerated Linear Algebra Libraries based in CUDA
    • go.matrix - a linear algebra package
    • gonum - Scientific packages (linear algebra, BLAS, LAPACK, differentiation, plots, linear programming, statistics, ...)
    • go-symexpr - Symbolic math as an AST with derivatives, simplification, and non-linear regression
    • gsl - GNU Scientific Library bindings
    • interval - Package interval handles sets of ordered values laying between two, possibly infinite, bounds.
    • mathutil - Package mathutil provides utilities supplementing the standard 'math' and 'rand' packages.
    • mt19937_64 - Mersenne Twister int64 random source
    • permutation - Package permutation generates permutations of the indices of a slice
    • polyclip.go - Go implementation of algorithm for Boolean operations on 2D polygons
    • primes - Simple functionality for working with prime numbers.
    • prime - Go version of Segmented Sieve and non Segmented sieve to produce prime numbers
    • primegen.go - Sieve of Atkin prime number generator
    • pso-go - A library of PSO (Particle Swarm Optimization) for Go.
    • rand - 64-bit version of the math/rand package with Mersenne twister support.
    • roger - A Go client for the RServer, allowing you to invoke R programs from Go.
    • stats - A statistics package with common functions missing from the Golang standard library.
    • statistics - GNU GSL Statistics (GPLv3)
    • Tideland golib - Numerics package for statistcal analysis
    • Units - Implements types, units, converter functions and some mathematics for some common physical types. lib
    • vector - A small vector lib.
    • humanize - formats large numbers into human readable small numbers

    Microservices

    • gokit - The Go Kit microservice framework (and author interview).
    • go-micro - Go Micro is a microservices library which provides the fundamental building blocks for writing fault tolerant distributed systems at scale.
    • kite - RPC server and client framework.

    Miscellaneous

    • atexit - Simple atexit library
    • bíogo - Basic bioinformatics functions for the Go language.
    • Breaker - Breaker enables graceful degraded mode operations by means of wrapping unreliable interservice interface points with circuit breaker primitives.
    • btcrpcclient - A Websocket-enabled Bitcoin JSON-RPC client.
    • cast - Safe and easy casting from one type to another in Go
    • CGRates - Rating system designed to be used in telecom carriers world
    • cpu - A Go package that reports processor topology
    • cron - A library for running jobs (funcs) on a cron-formatted schedule
    • daemonigo - A simple library to daemonize Go applications.
    • dbus-go - D-Bus Go library
    • desktop - Open file/uri with default application (cross platform)
    • devboard - Kanban board application based on Simple-Khanban
    • dioder-api - An API to IKEA dioder LED-strips
    • dump - An utility that dumps Go variables, similar to PHP's var_dump
    • env - Easily pull environment variables with defaults
    • epub - Bindings for libepub to read epub content.
    • EventBus - Lightweight event bus with async compatibility for Go .
    • faker - Generate fake data, names, text, addresses, etc.
    • fsnotify - File system notifications for Go
    • functional - Functional programming library including a lazy list implementation and some of the most usual functions.
    • GCSE - Go code search engine. source
    • generate - runs go generate recursively on a specified path or environment variable and can filter by regex.
    • go-amiando - Wrapper for the Amiando event management API
    • go-bit - An efficient and comprehensive bitset implementation with utility bit functions.
    • go-bitops - common bit operations for 32/64 bit integer
    • go-business-creditcard - Validate/generate credit card checksums/names.
    • gochem - A computational chemistry/biochemistry library.
    • gocsv - Library for CSV parsing and emitting
    • go.dbus - Native Go library for D-Bus
    • go-ean - A minimal utility library for validating EAN-8 and EAN-13 and calculating checksums.
    • go-eco - Functions for use in ecology
    • go-erx - Extended error reporting library
    • go-eventsocket - An event socket client/server library for the FreeSWITCH telephony platform.
    • GoFakeIt - Fake Data Generator. 65+ different variations and examples for each
    • go-fann - Go bindings for FANN, library for artificial neural networks
    • GoFlow - Flow-based and dataflow programming library for Go
    • goga - A genetic algorithm framework
    • gogobject - GObject-introspection based bindings generator
    • go-idn - a project to bring IDN support to Go, feature compatible with libidn
    • GoLCS - Solve Longest Common Sequence problem in go
    • golibs/as - Converting data types
    • golife - Implementation of Game of Life for command line
    • go-magic - A Go wrapper for libmagic
    • go-magic - Simple interface to libmagic for Go Programming Language
    • go-metrics - Go port of Coda Hale's Metrics library
    • gommap - gommap enables Go programs to directly work with memory mapped files and devices in a very efficient way
    • gomusicbrainz - MusicBrainz WS2 client library
    • goneuro - Go driver for NeuroSky devices.
    • goNI488 - A Go wrapper around National Instruments NI488.2 General Purpose Interface Bus (GPIB) driver.
    • go-osx-plist - CoreFoundation Property List support for Go
    • go-papi - Go interface to the PAPI performance API
    • go.pcsclite - Go wrapper for pcsc-lite
    • Go-PhysicsFS - Go bindings for the PhysicsFS archive-access abstraction library.
    • go.pipeline - Library that emulates Unix pipelines
    • go-pkg-mpd - A library to access the MPD music daemon
    • go-pkg-xmlx - Extension to the standard Go XML package. Maintains a node tree that allows forward/backwards browser and exposes some simpel single/multi-node search functions
    • goplan9 - libraries for interacting with Plan 9
    • goPromise - Scheme-like delayed evaluation for Go
    • go-qrand - Go client for quantum random bit generator service at random.irb.hr
    • goraphing - A tool to generate a simple graph data structures from JSON data files
    • go-selenium - Selenium WebDriver client for Go
    • go-semvar - Semantic versions (see http:/semver.org)
    • go-serial - Go binding to libserialport for serial port functionality (cgo).
    • goST - A steam properties (steam table) library written for Go. This was designed as a native go equivalent to XSteam.
    • go-taskstats - Go interface for Linux taskstats
    • gotenv - Loads environment variables from .env file
    • Gotgo - A Go preprocessor that provides an implementation of generics
    • go-translate - Google Language Translate library
    • go-uuid - Universal Unique IDentifier generator and parser
    • gouuid - Pure Go UUID v3, 4 and 5 generator compatible with RFC4122
    • go-villa - Some miscellaneous wrapper and small algorithms.(wrappers to slices, priority queues, path related apis, a string set type)
    • Hranoprovod - Command-line calorie tracking
    • lineup - A minimalistic message queue server
    • mitigation - Package mitigation provides the possibility to prevent damage caused by bugs or exploits.
    • nma.go - A NotifyMyAndroid client for go.
    • notify - File system event notification library with API similar to os/signal.
    • passwd - A parser for the /etc/passwd file
    • pool - A generic worker pool
    • procfile - A Procfile parser
    • Prometheus Instrumentation/Metrics Client - This is a whitebox instrumentation framework for servers written in Go. It exposes programmatically-generated metrics automatically for use in the Prometheus time series collection and post-processing environment.
    • randat - Devel tool for generating random bytestrings and encoding files in code-friendly forms
    • recycler - A more flexible object recycling system than sync.Pool. Provides constructors and destructors for the objects as well as control over the length the free.
    • replaykit - A library for replaying time series data.
    • serial - Serial ports API (pure Go)
    • sio - Package sio lets you access old serial junk. It's a go-gettable fork and modification of dustin's rs232 package.
    • stats - Monitors Go MemStats + System stats such as Memory, Swap and CPU and sends via UDP anywhere you want for logging etc...
    • symutils - Various tools and libraries to handle symbolic links
    • toktok - Creates and resolves unique, typo & error-resilient, human-readable tokens
    • twitterfetcher - A tool to make Twitter API requests using the Application-only authentication
    • udis86 - Go bindings for libudis86
    • ugo - underscore.js like toolbox for Go
    • Vboxgo - user-like access to VirtualBox VMs from Go.
    • Wukong - A highly extensible full-text search engine written in Go.
    • xplor - Files tree browser for p9p acme
    • yubigo - Yubikey OTP validation and auhtentication API client.

    Music

    • gmask - Go adaptation of the Cmask utility for Csound
    • go-csnd6 - Go binding to the Csound6 API
    • go-csperfthread - Go binding to the CsoundPerformanceThread helper class of the Csound6 API
    • go-libshout - Go bindings for libshout
    • gompd - A client interface for the MPD (Music Player Daemon)
    • launchpad - A Go client for Novation Launchpad
    • portmidi - Go bindings for libportmidi

    Networking

    DNS

    • bitz - BitMessage client node and library
    • dingo - A DNS client in Go that supports Google DNS over HTTPS
    • dns - A DNS library in Go
    • dnsimple - an interface to the DNSimple API
    • dyndnscd - a configurable dyndns client
    • GeoDNS - geo-aware authoritative DNS server
    • grong - Small authoritative DNS name server
    • mdns - Multicast DNS library for Go
    • hostsfile - /etc/hostsfile reverse lookup IP => names
    • dnss - DNS secure proxy, supports DNS over HTTPS and GRPC
    • domainerator - Command line tool to combine wordlist and suffixes/TLDs into domain names and check if they are registered or not.

    FTP

    • ftp4go - An FTP client for Go, started as a port of the standard Python FTP client library
    • ftp - Package ftp provides a minimal FTP client as defined in RFC 959
    • ftps - An implementation of the FTPS protocol
    • goftp - A FTP client library

    HTTP

    • apiproxy - proxy for HTTP/REST APIs with configurable cache timeouts
    • boom - HTTP(s) benchmarking tool, Apache Benchmark replacement
    • eventsource - Server-sent events for net/http server.
    • fasthttp - Fast HTTP package for Go
    • gbench - HTTP(s) Load Testing And Benchmarking Tool inspired by Apache Benchmark and Siege.
    • gobench - HTTP/HTTPS load test and benchmark tool
    • go-curl - libcurl bingding that supports go func callbacks
    • goproxy - a programmable HTTP proxy.
    • handlers - Collection of useful HTTP middlewares.
    • gostax - A Streaming API for XML (StAX) in go

    IMAP

    • go-imap - An IMAP library for clients and servers.
    • go-imap - IMAP client library
    • go-imap - Implementation of IMAP4rev1 client, as described in RFC 3501

    Instant Messaging

    • hanu - Framework for writing Slack bots
    • gobir - Extensible IRC bot with channel administration, seen support, and go documentation querying
    • goexmpp - XMPP client implementation
    • goirc - event-based stateful IRC client framework
    • go-irc - Simple IRC client library
    • gorobot - a modular IRC bot
    • go-xmpp - XMPP client library
    • ircflu - IRC bot with support for commands, scripting and web-hooks
    • irc.go - Go IRC bot framework
    • sirius - A fast and ultra-lightweight chat server written in Go
    • xmpp-client - an XMPP client with OTR (off-the-record) support

    NNTP

    • go-nntp - An NNTP client and server library for go

    Protocol Buffers

    • gogoprotobuf - another Go implementation of Protocol Buffers, but with extensions and code generation plugins.
    • golang_protobuf_extensions - Protocol Buffer extensions to support streaming message encoding and decoding.
    • goprotobuf - the Go implementation of Google's Protocol Buffers
    • protorpc - Google Protocol Buffers RPC for Go and C++

    rsync

    • replican-sync - An rsync algorithm implementation in Go
    • Rsync - Rsync algorithm as a Go library

    Telnet

    • telnet - Package telnet provides TELNET and TELNETS client and server implementations, for the Go programming language, in a style similar to the "net/http" library (that is part of the Go standard library) including support for "middleware"; TELNETS is secure TELNET, with the TELNET protocol over a secured TLS (or SSL) connection.
    • telnet - A simple interface for interacting with Telnet connection
    • telnets - A client for the TELNETS (secure TELNET) protocol.

    VNC

    • glibvnc - Go wrapper using CGO for the libvnc library.

    Websockets

    • Gorilla WebSocket - WebSocket protocol implementation
    • websocketd - HTTP server that converts STDIN/STDOUT program into WebSockets service. Also handles HTML and CGI.
    • wst - A dead simple WebSocket tester
    • ws-cli - WebSocket command line client

    ZeroMQ

    • goczmq - Wrapper for the CZMQv3 interface - blog post
    • gozmq - Go Bindings for 0mq (zeromq/zmq)
    • zmq2 - A Go interface to ZeroMQ (zmq, 0MQ) version 2.
    • zmq3 - A Go interface to ZeroMQ (zmq, 0MQ) version 3.
    • zmq4 - A Go interface to ZeroMQ (zmq, 0MQ) version 4.

    Misc Networking

    • betwixt - Betwixt implements the OMA Lightweight M2M (LWM2M) protocol for Device Management and Monitoring
    • canopus - CoAP Client/Server implementation (RFC 7252)
    • chunkedreader - A light weight library for reading continuous fixed sized messages from TCP streams.
    • circle - Go interface to the libcircle distributed-queue API
    • createsend-go - API client for Monitor http://www.campaignmonitor.com (email campaign service)
    • dmrgo - Library for with Hadoop Streaming map/reduce
    • doozerconfig - Go package for managing json-encoded configuration in Doozer
    • doozerd - A consistent distributed data store
    • endless Zero downtime restarts for go servers (Drop in replacement for http.ListenAndServe/TLS)
    • gearman-go - A native implementation for Gearman API with Go.
    • Glue - Robust Go and Javascript Socket Library (Alternative to Socket.io)
    • goagain - zero-downtime restarts in Go
    • Go Ajax - Go Ajax is a JSON-RPC implementation designed to create AJAX powered websites.
    • gobeanstalk - Go Beanstalkd client library
    • go-camo - Go http image proxy (camo clone) to route images through SSL
    • go-dbus - A library to connect to the D-bus messaging system
    • go-diameter - Diameter stack and Base Protocol (RFC 6733)
    • go-smpp - SMPP 3.4 protocol implementation
    • go-flowrate - Data transfer rate control (monitoring and limiting)
    • gogammu - Library for sending and receiving SMS
    • go-icap - ICAP (Internet Content Adaptation Protocol) server library
    • gonetbench - Simple TCP benchmarking tool
    • gonetcheck - package for checking general internet access
    • goodhosts - Simple hosts file (/etc/hosts) management in Go
    • gopacket - Packet encoding/decoding, pcap/pfring/afpacket support, TCP assembly, and more!
    • gopcap - A simple wrapper around libpcap
    • goq - A persistent message queue written in Go.
    • goradius - A Radius client written in Go
    • go-rpcgen - ProtoBuf RPC binding generator for net/rpc and AppEngine
    • gorpc - RPC optimized for high load
    • GoRTP - RTP / RTCP stack implementation for Go
    • GoSIPs - SIP (Session Initiation Protocol) Stack in Go
    • mqtt - MQTT stack in Go
    • gosndfile - Go binding for libsndfile
    • gosnmp - an SNMP library written in GoLang.
    • go-socket.io - A Socket.IO backend implementation written in Go
    • gosocks - A SOCKS (SOCKS4, SOCKS4A and SOCKS5) proxy client library in Go.
    • go-sslterminator - SSL terminator proxy
    • go-statsd-client - Go statsd client library
    • Grumble - Mumble (VoIP) server implementation
    • handlersocket-go - Go native library to connect to HandlerSocket interface of InnoDB tables
    • HomeControl - an implementation of Apple's HomeKit Accessory Protocol (HAP)
    • Hprose - Hprose is a High Performance Remote Object Service Engine.
    • httpfstream - streaming append and follow of HTTP resources (using WebSockets)
    • ipaddress - Convenient ip address functions: ip -> int, int -> ip, and IPNet broadcast address
    • iris-go - Go binding for the Iris decentralized messaging framework.
    • iris - Peer-to-peer messaging for back-end decentralization.
    • kafka.go - Producer & Consumer for the Kafka messaging system
    • lcvpn - Decentralized VPN implementation
    • ldap - Basic LDAP v3 functionality for the GO programming language.
    • mbxchan - An easy communication between distributed Go applications using standard Go channels and remote procedure calls.
    • nagiosplugin - package for writing Nagios/monitoring plugins
    • NATS - NATS distributed messaging system client for Go
    • netsnail - A low-bandwidth simulator
    • netutils - Simple interface for turning TCP Sockets into channels.
    • npipe - a pure Go wrapper for Windows named pipes
    • norm - reliable UDP using multicast and unicast sockets
    • opendap - Go wrapper for Openldap
    • pusher-http-go - Go library for interacting with the Pusher Realtime API
    • QRP - QRP is a simple packet-based RPC protocol designed as a simple alternative to Go's rpc, that can run over UDP
    • remotize - A remotize package and command that helps remotizing methods without having to chaneg their signatures for rpc
    • rs232 - Serial interface for those of us who still have modems (or arduinos)
    • rss - RSS parsing library.
    • seamless - Reverse TCP Proxy with HTTP management API
    • shell2http - Executing shell commands via simple http server
    • sockjs-go - Implements server side counterpart for the SockJS-client browser library.
    • SOCKS5 Server - Scalable SOCKS5 server with Access Control Lists
    • spark - Emergency web server (for static files)
    • spdy - SPDY library, wired into net/http, currently supporting servers only.
    • statsd-go - Statsd implementation in Go, forked from gographite, which submits to Ganglia
    • stompngo_examples - Examples for stompngo.
    • stompngo - A Stomp 1.1 Compliant Client
    • tcp_fallback - A TCP proxy implementing a simple fallback mechanism.
    • tcpmeter - A TCP throughput measuring tool
    • toxiproxy - Framework for simulating network conditions.
    • traceroute - A traceroute implementation
    • traefik - Modern, reverse proxy in Go
    • Uniqush - A free and open source software which provides a unified push service for server-side notification to apps on mobile devices.
    • uritemplates - A level 4 implementation of URI Templates (RFC 6570)
    • VDED - Vector Delta Engine Daemon - track deltas in ever-increasing values (written in Go)
    • zero-downtime-daemon - Configurable zero downtime daemon (Hot Update) framework for any kind of TCP,HTTP,FCGI services
    • zeroupgrade - Upgrades network servers with zero downtime
    • cwmp-proxy - Reverse cwmp proxy
    • netstat-nat - Display NAT entries on Linux systems
    • go-nat-pmp - A client for the NAT-PMP protocol used in Apple and open-source routers
    • humanize-bytes - Command-line utilities to convert "MiB" etc to raw numbers, and back

    Operating System Interfaces

    • Go FUSE file system library - From-scratch implementation of the kernel-userspace communication protocol based on Russ Cox'.
    • Go-fuse - Library to write FUSE filesystems in Go
    • go-osx-xattr - Package xattr wraps OS X functions to manipulate the extended attributes of a file, directory and symbolic link.
    • inspect/os - Metrics library for operating system measurements (Linux/MacOSX)
    • service - Service will install / un-install, start / stop, and run a program as a service (daemon) on Windows/Linux and OSX.
    • go-nbd - Library to write block devices for Linux in Go.

    Other Random Toys, Experiments and Example Code

    P2P and File Sharing

    • DHT - Kademlia DHT node used by Taipei-Torrent, compatible with BitTorrent
    • ed2kcrawler - eDonkey2000 link crawler
    • gop2p - A simple p2p app to learn Go
    • go-p2p - P2P module for blockchains and more
    • GoTella - A Go implementation of the Gnutella Protocol
    • Taipei-Torrent - A BitTorrent client
    • Tendermint - P2P Byzantine-Fault-Tolerant consensus & blockchain stack
    • wgo - A simple BitTorrent client based in part on the Taipei-Torrent and gobit code

    Programming

    Resource Embedding

    • fileb0x - Simple tool to embed files in go with focus on "customization" and ease to use.
    • go-bindata - Package that converts any file into managable Go source code.
    • go-resources - Unfancy resources embedding with Go.
    • go.rice - go.rice is a Go package that makes working with resources such as html,js,css,images and templates very easy.
    • statics - Embeds static resources into go files for single binary compilation + works with http.FileSystem + symlinks.

    RPC

    • gowsdl - WSDL code generation
    • gRPC - Google's multi-language RPC framework with Go support

    Scanner and Parser Generators

    • ebnf2y - Utility for converting EBNF grammars into yacc compatible skeleton .y files.
    • gocc - Go Compiler Compiler
    • golex - Lex/flex like fast (DFA) scanners generator.
    • gopp - Go Parser Parser
    • goyacc - Goyacc is a version of yacc generating Go parsers.
    • y - Package y converts .y (yacc) source files to data suitable for a parser generator.
    • yy - yacc to yacc compiler.
    • flexgo - A version of flex that can produce Go code.
    • fsm - FSM (NFA, DFA) utilities.
    • Ragel - State Machine Compiler
    • lexmachine - Lexical Analysis Framework for Golang

    Security

    • acme - ACME certificate acquisition tool
    • casbin - An authorization library that supports access control models like MAC, RBAC, ABAC
    • gryffin - A large scale security scanner by Yahoo!
    • hyperfox - a security tool for proxying and recording HTTP and HTTPs communications on a LAN
    • lego - Let's Encrypt client and ACME library
    • webseclab - a sample set of web security test cases and a toolkit to construct new ones

    Simulation Modeling

    • godes - Library for building discrete event simulation models

    Sorting

    • funnelsort - Lazy funnel sort -- a cache-oblivious sorting algorithm
    • Sortutil - Nested, case-insensitive, and reverse sorting for Go.
    • sortutil - Utilities supplemental to the Go standard "sort" package
    • tarjan - Graph loop detection function based on Tarjan's algorithm
    • timsort - Fast, stable sort, uses external comparator or sort.Interface

    Source Code Management

    • Gitfile - A lightweight package manager for installing git repos
    • go-deps - Analyzes and recursively installs Go package deps (library functionality similar to go get)
    • go-diff - A diff command for go languange showing semantic differences of two go source files.
    • gogitver - Embeds a git tag (version string) into your application
    • go-many-git - Manage and run commands across multiple git repositories
    • go-pkgs - Finds all matching packages in all of the GOPATH trees (library functionality similar to go list all)
    • go-vcs - clone and check out revs of VCS repositories (git and hg support)
    • go-vcsurl - Lenient VCS repository URL parsing library
    • hggofmt - A Mercurial/hg extension with a hook to
    • nut - Nut is a tool to manage versioned Go source code packages, called "nuts".
    • vcstool - VCS abstraction tool

    Storage

    • Minio - Object Storage compatible with Amazon S3 API
    • libStorage - an open source, platform agnostic, storage provisioning and orchestration framework, model, and API
    • OpenEBS - Containerized, Open source block storage for your containers,integrated tightly into K8S and other environments and based on distributed block storage and containerization of storage control

    Strings and Text

    • allot - Placeholder and wildcard text parsing for CLI tools and bots
    • awk - Easy AWK-style text processing in Go
    • binarydist - Binary diff and patch
    • Black Friday - A markdown processor
    • codename-generator - A codename generator meant for naming software releases
    • columnize - format slice or array into aligned columns
    • csvplus - Extends the standard Go encoding/csv package with fluent interface, lazy stream operations, indices and joins.
    • csvutil - A heavy duty CSV reading and writing library.
    • dgohash - Collection of string hashing functions, including Murmur3 and others
    • douceur - A simple CSS parser and inliner in Go.
    • dsv - A library for working with delimited separated value (DSV).
    • flux - Fluent Regular Expressions in golang
    • genex - Expansion of Regular Expressions
    • gettext-go - GNU's gettext support, written in pure Go
    • gettext - Golang bindings for gettext; Feature complete, cgo
    • go-colortext - Change the color of the text and background in the console, working both in Windows and other systems.
    • go-guess - Go wrapper for libguess
    • goagrep - fast fuzzy string matching using precomputation
    • goini - A go library to parse INI files
    • golorem - lorem ipsum generator
    • go-migemo - migemo extension for go (Japanese incremental text search)
    • go-ngram N-gram index for Go
    • goregen - A Go library for generating random strings from regular expressions.
    • goskirt - Upskirt markdown library bindings for Go
    • gosphinx - A Go client interface to the Sphinx standalone full-text search engine
    • govalidator - Package of string validators and sanitizers
    • gpKMP - String-matching in Go using the Knuth–Morris–Pratt algorithm
    • hangul - Handy tools to manipulate Korean character
    • html2text - Golang HTML to text conversion library
    • intern - Map strings to symbols for constant-time comparisons
    • kasia.go - Templating system for HTML and other text documents
    • kview - Simple wrapper for kasia.go templates. It helps to modularize content of a website
    • logparse - Parser for most common log formats
    • NTemplate - Nested Templates
    • parse - PEG parser that uses reflection to define grammar
    • peg - Parsing Expression Grammer Parser
    • plural - No-fuss plurals for formatting both countable and continuous ranges of values.
    • polyglot - String translation utilities for Go
    • pretty.go - Pretty-printing for go values
    • raymond - A complete handlebars implementation in Go.
    • rubex - A simple regular expression library that supports Ruby's regex syntax. It is faster than Regexp.
    • sanitize - Package sanitize provides functions for sanitizing html and text.
    • scanner - A text scanner that parses primitive types, analogous to Java's
    • segment - An implementation of Norvig's recursive word segmentation algorithm
    • sprig - Template functions for Go templates.
    • strftime - strftime implementation
    • strit - Package strit introduces a new type of string iterator, as well as a number of iterator constructors, wrappers and combinators.
    • strogonoff - Stenography with Go
    • strutil - Package strutil collects utils supplemental to the standard strings package.
    • text - Text paragraph wrapping and formatting
    • Tideland golib - Stringex package for statistcal analysis
    • useragent - User agent string parser
    • xurls - Extract urls from text

    Testing

    • assert - Basic Assertion Library used along side native go testing, with building blocks for custom assertions

    • assert - Assert for go test.

    • assert - Handy assert package.

    • assert - JUnit-like asserts with excellent error messages

    • conex - Docker containers for integration tests

    • counterfeiter - Tool for generating self-contained and type-safe mocks.

    • downtest - Automatically run tests for all known downstream consumers of a Go package.

    • ginkgo - BDD Testing Framework for Go.

    • go2xunit - Convert "go test -v" output to xunit XML output

    • go-assert - Testing utils for Go.

    • goautotest - Automatically run unit tests when code changes are made

    • goblin - Minimal and Beautiful Go testing framework

    • Gocheck - Rich test framework with suites, fixtures, assertions, good error reporting, etc

    • GoConvey - Browser-based reporting, uses go test, supports traditional Go tests, clean DSL

    • gocov - Code coverage testing/analysis tool

    • gomega - Ginkgo's Preferred Matcher Library.

    • gomock - a mocking framework for Go.

    • GoSpec - a BDD framework

    • gospecify - another BDD framework

    • go-stat - performant instrumentation/profiling for Go

    • go-tap - TAP (Test Anything Protocol) parser in Go

    • gounit - xunit for Go

    • GSpec - Expressive, reliable, concurrent and extensible Go test framework that makes it productive to organize and verify the mind model of software.

    • httpexpect - Concise, declarative, and easy to use end-to-end HTTP and REST API testing

    • Nitro - A quick and simple profiler For Go

    • mspec - BDD framework that frees you to Stub and Spec your code first with natural BDD language.

    • muxy - Simulating real-world distributed system failures.

    • Pegomock - a mocking framework based on golang/mock, but uses a DSL closely related to Mockito.

    • terst - A terse, easy-to-use testing library for Go

    • test2doc - Generate documentation for your go units from your unit tests.

    • testfixtures - Rails' like test fixtures for testing database driven apps.

    • testflight - Painless http testing in Go

    • Testify - A set of packages that provide many tools for testifying that your code will behave as you intend.

    • ut - Awesome mocks without magic.

    Validation

    • validator - Go Struct and Field validation, including Cross Field, Cross Struct, Map, Slice and Array diving
    • validation - Simple independent struct/key-value validation

    Version Control

    • git (in go) - Minimal working git client in Go
    • gogs - Self-hosting Git Server in Go
    • semver - Semantic Versioning (SemVer) library

    Virtual Machines and Languages

    • agora - A dynamically typed, garbage collected, embeddable programming language built with Go
    • anko - Scriptable interpreter written in golang
    • forego - Forth virtual machine
    • Gelo - Extensible, embeddable interpreter
    • GoEmPHP - This package is built for Embedding PHP into Go
    • goenv - Create an isolated environment where you install Go packages, binaries, or even C libraries. Very similar to virtualenv for Python.
    • GoForth - A simple Forth parser
    • golemon - A port of the Lemon parser-generator
    • GoLightly - A flexible and lightweight virtual machine with runtime-configurable instruction set
    • goll1e - An LL(1) parser generator for the Go programming language.
    • Golog - Prolog interpreter in Go
    • go-lua - Shopify's lua interpreter
    • golua - A fork of GoLua that works on current releases of Go
    • gomruby - mruby (mini Ruby) bindings for Go
    • gopher-lua - A Lua 5.1 VM and compiler written in Go
    • go-php - PHP bindings for Go
    • go-python - go bindings for CPython C-API
    • gotcl - Tcl interpreter in Go
    • v8 - V8 JavaScript engine bindings for Go (supports V8 builds at least up to 5.8.244)
    • go-v8 - V8 JavaScript engine bindings for Go
    • LispEx - A dialect of Lisp extended to support for concurrent programming, written in Go.
    • meme - Scheme interpreter in Go
    • Minima - A language implemented in Go
    • ngaro - A ngaro virtual machine to run retroForth images
    • otto - A JavaScript parser and interpreter written natively in Go
    • RubyGoLightly - An experimental port of TinyRb to Go

    Web Applications

    • Presento - The simplest possible cross-platform remote control for the presentations
    • Caddy - A fast, capable, general-purpose HTTP/2 web server that's easy to use
    • Digestw - A Web Application - Twitter's Timeline Digest
    • fabio - A fast zero-conf load balancing HTTP router for microservices.
    • fourohfourfound - A fallback HTTP server that may redirect requests with runtime configurable redirections
    • Fragmenta - A CMS built in Go
    • freegeoip - IP geolocation web service (web server of freegeoip.net)
    • goals-calendar - A web-based Seinfeld calendar implemented in Go
    • goblog - A static blog engine
    • gocrawl - A polite, slim and concurrent web crawler.
    • goflash - Flash player implementation in Go language
    • gogallery - simple web server with an emphasis on easily browsing images
    • goof - A simple http server to exchange files over http (upload/download)
    • gopages - A php-like web framework that allows embedding Go code in web pages
    • go_spider - A flexible ,modularization and concurrent web crawler framework.
    • GoURLShortener - A frontend for the http://is.gd/ URL shortener
    • gowall - A website and user system
    • httpfolder - A http server to exchange files over http with basic authentication (upload/download)
    • Hugo - A fast and flexible static site generator implemented in Go
    • Já Vai Tarde - Unfollows monitoring for Twitter
    • kurz.go - a url shortener based on web.go and redis
    • Monsti - Resource friendly flat file CMS for private and small business sites.
    • now.go - A simple HTTP-based to-do queue.
    • Peach - A web server for multi-language, real-time synced and searchable documentation.
    • rabbitmq-http - REST API for RabbitMQ
    • serve-files - Far-future and gzip wrapper around the standard net/http server.
    • sf_server - a tiny send file server and client
    • Tideland golib - Web package for REST request handling
    • Vantaa - A modular blogging API engine written in Go, Neo4j and Polymer.
    • websiteskeleton - Simple net/http website skeleton
    • webtf - Web app to graphical visualization of twitter timelines using the HTML5
    • Wikifeat - Extensible wiki system using CouchDB written in Golang
    • Freyr - Server for storing and serving readings from plant environment sensors. Integrates Golang API with ReactJS web app; uses Docker for testing/deployment.
    • Rickover - Job queue with a HTTP API, backed by Postgres

    Web Libraries

    Authentication

    • goth - Package goth provides a simple, clean, and idiomatic way to write authentication packages for Go web applications
    • authcookie - Package authcookie implements creation and verification of signed authentication cookies.
    • dgoogauth - Go port of Google's Authenticator library for one-time passwords
    • goauth - A library for header-based OAuth over HTTP or HTTPS.
    • GOAuth - OAuth Consumer
    • go-http-auth - HTTP Basic and HTTP Digest authentication
    • Go-OAuth - OAuth 1.0 client
    • goha - Basic and Digest HTTP Authentication for Go http client
    • hero - OAuth server implementation - be an OAuth provider with Go
    • httpauth-go - Package httpauth provides utilities to support HTTP authentication policies. Support for both the basic authentication scheme and the digest authentication scheme are provided.
    • httpauth - HTTP session (cookie) based authentication and authorization
    • oauth1a - OAuth 1.0 client library
    • OAuth Consumer - OAuth 1.0 consumer implementation
    • otp - HOTP and TOTP library with command line replacement for Google Authenticator
    • totp - Time-Based One-Time Password Algorithm, specified in RFC 6238, works with Google Authenticator
    • go-otp - Package go-otp implements one-time-password generators used in 2-factor authentication systems like RSA-tokens. Currently this supports both HOTP (RFC-4226), TOTP (RFC-6238) and Base32 encoding (RFC-3548) for Google Authenticator compatibility

    DOM handling

    • Cascadia - CSS selector library
    • GoQuery - jQuery-like DOM manipulation library, using Go's experimental HTML package.
    • goq - jQuery-like declarative struct tag scraping and unmarshaling based on GoQuery.
    • html-query - A fluent and functional approach to querying HTML.
    • HTML Transform - A CSS selector based html scraping and transformation library

    Frameworks and Toolkits

    • Air - An ideal RESTful web framework for Go.
    • alien - A lightweight and fast http router
    • app.go - Web framework for google app engine
    • arasu - A Lightning Fast Web Framework written in Go & Dart
    • Beego - Beego is an open source version of the scalable, non-blocking web framework.
    • browserspeak - Generate HTML templates, CSS or SVG without writing < or >
    • httpcoala - Library for request coalescing - handy for reverse proxies.
    • falcore - Modular HTTP server framework
    • fcgi_client - Go fastcgi client with fcgi params support
    • florest - High-performance workflow based REST API framework in Go
    • forgery - A clone of the superb Node.js web framework Express.
    • Gin Web Framework - Martini-like API and httprouter gives it good performance.
    • Goal - A toolkit for high productivity web development in Go language built around the concept of code generation.
    • Go-Blog - Blog framework written in Go
    • go-fastweb - aims to be a simple, small and clean MVC framework for go
    • goku - a Web Mvc Framework for Go, mostly like ASP.NET MVC.
    • Golanger - Golanger Web Framework is a lightweight framework for writing web applications in Go.
    • Goldorak.Go - a web miniframework built using mustache.go, web.go and Go-Redis
    • go-restful - lean package for building REST-style Web Services
    • GoRest - An extensive configuration(tags) based RESTful style web-services framework.
    • go-rest - A small and evil REST framework for Go
    • gorilla - Gorilla web toolkit
    • GoSrv - A Go HTTP server that provides simple command line functionality, config loading, request logging, graceful connection shutdown, and daemonization.
    • go-start - A high level web-framework for Go
    • go-urlshortener - interface to google's urlshorten API
    • goweb - Lightweight RESTful web framework for Go providing Ruby on Rails style routing
    • go-webproject - Modular web application framework and app server
    • Gowut - Go Web UI Toolkit is a full-featured, easy to use, platform independent Web UI Toolkit written in pure Go.
    • HttpRouter - A high performance HTTP request router that scales well
    • limiter - Simple rate limter middleware for Go
    • Macaron - Modular web framework in Go
    • mango - Mango is a modular web-application framework for Go, inspired by Rack, and PEP333.
    • Martini deprecated - Martini is a popular, lightweight, extensible package for writing modular web apps/services in Go
    • Negroni - Idiomatic middleware for Go
    • restclient - Client library for interacting with RESTful APIs.
    • resty - REST client library inspired by Ruby rest-client.
    • Revel - High productivity web framework modeled on Play! Framework
    • Ringo - Lighweight MVC web framework inspired by Rails, Gin.
    • sawsij - Provides a small, opinionated web framework.
    • Tango - Micro-kernel & pluggable web framework for Go
    • Tiger Tonic - framework for building JSON web services inspired by Dropwizard
    • trinity - MVC framework
    • Utron - MVC Framework
    • Violetear - HTTP router
    • web.go - a simple framework to write webapps
    • wfdr - Simple web framework designed for and written in go. Works with other languages as well, but not as well.
    • xweb - A web framework for Go. Just like Struts for Java.

    HTML forms

    • form - Complete bidirectional HTML form encoder & decoder (x-www-form-urlencoded) for arbitrary data (package encoding compatible)
    • gforms - HTML forms for Go
    • Go-FORM-it - Go library for easy and highly-customizable forms creation and template rendering.
    • GoForms - Form data validation, cleaning and error reporting - a la django.forms
    • htmlfiller - Fills in html forms with default values and errors a la Ian Bicking's htmlfill for Python
    • MonstiForm - HTML form generator and validator library
    • revel-csrf - Cross-Site Request Forgery (CSRF) attacks prevention for the Revel framework
    • xsrftoken - A package for generating and validating tokens used in preventing XSRF attacks

    Public API Wrappers

    • adn - Interface to the App.net API
    • anaconda - Client library for the Twitter 1.1 API
    • ddg - DuckDuckGo API interface
    • facebook - Up-to-date facebook graph API client. Handy and flexible
    • filepicker-go - Go library for the Filepicker's REST API
    • firebase - Client library for the Firebase REST API
    • gh - Scriptable server and net/http middleware for GitHub Webhooks API
    • github - Go library for accessing the GitHub REST API v3
    • githubql - Go library for accessing the GitHub GraphQL API v4
    • gobo - Client library for Sina Weibo
    • gocaptcha - gocaptcha provides easy access to the reCaptcha API in go
    • go-dealmap - Go library for accessing TheDealMap's API
    • go-dropbox - API library for dropbox
    • go-flickr - A wrapper for Flickr's API
    • go-get-youtube - A simple library+client for fetching meta data of, and downloading Youtube videos
    • go-gravatar - Wrapper for the Gravatar API
    • go-hummingbird - Go library for accessing the Hummingbird.me API
    • go-libGeoIP - GO Lib GeoIP API for Maxmind
    • gominatim - Go library to access nominatim geocoding services
    • gomojo - Instamojo API wrapper
    • gomwapi - Access mediawiki contents like wikipedia, wiktionary in golang
    • go-myanimelist - Go library for accessing the MyAnimeList API
    • googtrans - unofficial go bindings for Google Translate API v2
    • go-recaptcha - Handles reCaptcha form submissions in Go
    • gorecurly - A Client app to use with Recurly's api
    • go.strava - Official client library for the Strava V3 API
    • go.stripe - a simple credit card processing library for Go using the Stripe API
    • Gotank - Searchify's Go client for the IndexTank full-text search API
    • go-tripit - Go API library for the TripIt web services
    • GoTwilio - Twilio library for Go (golang). Very basic at the moment
    • gravatar - Gravatar image/profile API library
    • jsonapi - Generate JSON API from Go structs
    • postmark - Access postmark API from Go
    • reddit.go - Client library for Reddit API
    • shorturl - Generic implementation for interacting with various URL shortening services
    • Stack on Go - Go wrapper for Stack Exchange API
    • stripe - Official Stripe client library
    • SocialSharesCount - Wrapper API on multiple social websites to get URL share statistics
    • twilio - Simple Twilio API wrapper
    • twittergo - Client library for Twitter's API
    • cloudcomb-go-sdk - Go client library for CloudComb

    Other

    • adhoc-http - Quick & dirty HTTP static file server
    • assets - Helps prepares CSS and JS files for development and production of Go web apps.
    • bwl - a set of libraries to help build web sites
    • captcha - Image and audio captcha generator and server
    • gaerecords - Lightweight wrapper around appengine/datastore providing Active Record and DBO style management of data
    • get2ch-go - a library to access the 2channel Japanese web bulletin board
    • gofeed - Parse RSS and Atom feeds in Go
    • go-gzip-file-server - A net.http.Handler similar to FileServer that serves gzipped content
    • gohaml - An implementation of the popular XHTML Abstraction Markup Language using the Go language.
    • go-httpclient - a Go HTTP client with timeouts
    • gojwt - Json Web Tokens for Go
    • go-pkg-rss - a packages that reads RSS and Atom feeds
    • gorefit - A library for theming existing websites
    • goreman - foreman clone
    • GoRequest - Simplified HTTP client with rich features such as proxy, timeout, and etc. ( inspired by nodejs SuperAgent )
    • goroute - A very simple URL router based on named submatches of regular expression that works well with http.Handler .
    • gorouter - Simple router for go to process url variables
    • go-rss - Simple RSS parser and generator
    • go-rss - Simple RSS parser, tested with Wordpress feeds.
    • goscribble - An MPD Audioscrobble
    • go-twitter - another Twitter client
    • go-twitter-oauth - a simple Twitter client (supports OAuth)
    • grender - Go static site generator
    • halgo - HAL-compliant API client and serialisation library.
    • http-gonsole - Speak HTTP like a local. (the simple, intuitive HTTP console, golang version)
    • httprpc - HTTP RPC codecs (json2, soap, rest)
    • HypeCMS - A flexible CMS built with Go and MongoDb.
    • Kontl - A client for kon.tl's URL shortening service
    • mustache.go - an implementation of the Mustache template language
    • muxer - Simple muxer for a Go app without regexp
    • Optimus Sitemap Generator - A universal XML sitemap generator
    • passwordreset - Creation and verification of secure tokens useful for implementation of "reset forgotten password" feature in web applications.
    • pat - A Sinatra style pattern muxer
    • persona - remote verification API for persona
    • plex - simple, small, light, regexp http muxer with chaining
    • purell - tiny Go library to normalize URLs
    • pusher.go - HTTP Server Push module for the standard http package
    • rest2go - Based on rest.go, forked for improvements and REST consistency
    • rest.go (forked) - forked rest.go for improvements and REST consistency
    • robotstxt - The robots.txt exclusion protocol implementation. Allows to parse and query robots.txt file.
    • seshcookie - A web session library inspired by Beaker
    • soy - A Go implementation for Soy templates (Google Closure templates). High performance and i18n.
    • user_agent - An HTTP User-Agent parser
    • webtestutil - Web and HTTP functional testing utilities. Includes Gorilla testing support.
    • aop - Aspect Oriented Programming For Go.
    • yt2pod - Daemon that monitors YouTube channels and publishes audio podcasts of them

    Windows

    • gform - An easy to use Windows GUI toolkit for Go
    • go-ole - win32 ole implementation for golang
    • go-Windows-begin - for the absolute Windows-Go beginner
    • w32 - Windows API wrapper for Go.
    • walk - "Windows Application Library Kit" for the Go Programming Language
    • Windows Command Line Shutdow - A tool to shutdown Windows Computer from Command Prompt

    Unix

    • inspect - Linux and MacOSX systems monitoring and diagnostics
    • unixsums - Legacy Unix checksums: cksum, sum

    Unsorted; please help!

    The following entries have not been filed. Please help by putting these in relevant categories.

    • GoBot - PoC Go HTTP Botnet
    • ebml-go - EBML decoder
    • go-bindata - Converts any file into manageable Go source code for embedding binary data into a Go program.
    • goconsistenthash - Consistent hashing library (based on http://www.lexemetech.com/2007/11/consistent-hashing.html)
    • go-cron - A small cron job system to handle scheduled tasks, such as optimizing databases or kicking idle users from chat. The cron.go project was renamed to this for go get compatibility.
    • godebiancontrol - Golang debian control file parser
    • go-gmetric - Ganglia gmetric protocol support
    • gographviz - Graphviz DOT language parser for golang
    • godotviz - Rendering graphics files from "DOT language". Written in golang
    • dotviz-server - WebBased DOT language visualization tool written in go
    • goseq - command line tool, written in Go, for creating sequence diagrams using a text-based description language.
    • golor - golor is a command line tool for golang source code coloring
    • gopcapreader - Presents realtime pcap data as io.Reader objects
    • go.psl - Go regdom-libs/public suffix list
    • go-webfinger - Simple Client Implementation of WebFinger
    • httptail - tools push stdout/stderr to http chunked
    • img-LinuxFr.org - A reverse-proxy cache for external images used on LinuxFr.org
    • seed - Easily seed PRNGs with some entropy
    • spellabc - Package spellabc implements spelling alphabet code word encoding.
    • Twackup - Backs up your tweets into local files
    • Tasks - A simplistic todo list manager written in Go

     

     

    golang优秀实用开源项目收集

    golang很多开源项目,铺天盖地,却很少有官方版。有时候真是选择乏力,选择一个优秀的流行的组件,能少走很多弯路。

    整理一些最为出名和好用的开源组件(持续更新)

    1.web框架

    • beego

      go get github.com/astaxie/beego

      http://beego.me

     

    2.数据库

    • mongo(极有可能成为官方pkg)

      go get gopkg.in/mgo.v2

      http://labix.org/mgo

    • mysql

      go get github.com/go-sql-driver/mysql

      https://godoc.org/github.com/go-sql-driver/mysql

     

    3.缓存

    • redis

      go get github.com/garyburd/redigo/redis

      https://godoc.org/github.com/garyburd/redigo/redis

    •  

      redis-cluster(redis3.0以后支持集群)

      go get github.com/chasex/redis-go-cluster

      https://godoc.org/github.com/chasex/redis-go-cluster

    • memcache

      go get github.com/bradfitz/gomemcache/memcache

      https://godoc.org/github.com/bradfitz/gomemcache/memcache

     

    4.MQ

    • go-nsq

      go get github.com/nsqio/go-nsq

      https://godoc.org/github.com/nsqio/go-nsq

      go-nsq是nsq的golang client包,nsq集群更多资料 http://nsq.io/

     

    5.书籍

    • 入门

      《Go语言程序设计》

      中规中矩的教科书套路,附有习题,详细全面,适合入门,但新手很难看出什么是重点

      《学习Go语言》快速入门,不如上一本全面

    • 进阶

     

                《Go语言圣经》重点突出,例子很到位,除了错别字比较多(不会影响阅读),堪称圣经

     

     

    几款适合学习的项目:

    1、cache2go

    https://github.com/muesli/cache2go

    比较简单的一个缓存库,代码量很少,适合新手学习,可以学习到锁、goroutines等。

    2、groupcache

    https://github.com/golang/groupcache

    与memcached同一作者,相当于是memcached的go语言实现。

    3、nsq

    https://github.com/bitly/nsq

    消息分发平台,阅读代码可以了解到很多分布式、负载均衡等方面的编程。

    4、docker

    https://github.com/docker/docker

    时下很火的项目,个人感觉适合应用,不适合入门阅读学习,待成为了高手后可以研究下其实现。

     

     

     

     

     

    GitHub上优秀的Go开源项目

    近一年来,学习和研究Go语言,断断续续的收集了一些比较优秀的开源项目,这些项目都非常不错,可以供我们学习和研究Go用,从中可以学到很多关于Go的使用、技巧以及相关工具和方法。我把他们整理发出来,大家有兴趣可以根据自己的爱好选择一些进行研究和阅读,提升自己的能力,更好的使用Go语言,开发出更优秀的项目。

    docker

    无人不知的虚拟华平台,开源的应用容器引擎,借助该引擎,开发者可以打包他们的应用,移植到任何平台上。

    golang

    go本身,也是用go语言实现的,包括他的编译器,要研究go源代码的可以看此项目录

    lantern

    蓝灯,一款P2P的过墙软件,他和SS不一样的是,他是分布式的,P2P的,通过蓝灯,你可以和自由上网的用户共享网络,对方可以自由上网,你也就自由了。

    kubernetes

    Google出品,用于调度和管理docker的开源容器管理系统,利用他,可以方便的管理你的docker实例,哪怕非常多,也是目前最流行的docker管理系统。

    awesome-go

    这不是一个go项目,他是一个学习go的资料网站,属于著名的awesome系列,里面关于go的资源非常详细。

    gogs

    一款基于git的代码托管系统,类似于github和gitlab,不过其小巧易用,功能强大,部署方便,也有不少用户在使用。

    syncthing

    开源的文件同步系统,它使用了其独有的对等自由块交换协议,速度很快,据说可以替换BitTorrent Sync。

    hugo

    一款极速的静态页面生成器,让你可以很快的搭建个人网站,提供了多套主题可供使用,并且可以自己定制,和NodeJS的Hexo是一样的。

    grafana

    一款开源监控度量的看板系统,可以接Graphite,Elasticsearch,InfluxDB等数据源,定制化很高。

    etcd

    一款分布式的,可靠的K-V存储系统,使用简单,速度快,又安全。

    hub

    一款更便捷使用github的工具,包装并且扩展了git,提供了很多特性和功能,使用和git差不多。

    influxdb

    可伸缩的数据库,使用场景主要用来存储测量数据,事件点击以及其他等实时分析数据,用来做监控性能很不错。

    caddy

    快速的,跨平台的HTTP/2 Web服务器。

    beego

    国产开源的高性能Web框架,让你快速的开发Go Web应用服务,谢大主笔。

    martini

    也是一款不错的Web框架。

    cayley

    Google开源的图数据库,这是一个NoSql数据库,适合处理复杂的,但是结构化低的数据,适用于社交网络,推荐系统等。

    nsq

    一款开源的实时的,分布式的消息中间件系统。

    codis

    Codis是一个分布式Redis解决方案,其实就是一个数据库代理,让你在使用Redis集群的时候,就像使用单机版的Redis是一样的,对开发者透明。

    delve

    这个Go开发者都知道,一款go应用开发的调试工具。

    cobra

    cobra是一个命令行go库,可以让你创建非常强大的,现代的CLI命令行应用。

    shadowsocks-go

    go版本的shadowsocks,大家都懂的。

    pholcus

    Pholcus(幽灵蛛)是一款纯Go语言编写的支持分布式的高并发、重量级爬虫软件,定位于互联网数据采集,为具备一定Go或JS编程基础的人提供一个只需关注规则定制的功能强大的爬虫工具。

    展开全文
  • 目录 监控系统 容器技术 PaaS工具 ...项目 简介 OpenFalcon OpenFalcon是一款小米开源的监控系统。功能:数据采集免配置:agent自发现、支持Plugin、主动推送模式; 容量水平扩展:生产环境每秒50...
  • go语言打造个人博客系统(一)

    千次阅读 2019-01-15 14:23:24
    go语言打造个人博客系统(一) 为什么选择go语言?   听说go语言是在几年前,但真正深入了解他却是在2017年,因为当时作为讲师 ,需要准备go语言的课程,结果稍一接触立刻就喜欢上这门语言了,作为长期的c/c++...
  • go语言打造个人博客系统(二)   在上篇文章go语言打造个人博客系统(一)中,我们了解了go语言的优点和go语言的数据库操作,本次我们会完成博客系统的后端开发。 博客系统后端接口开发 路由测试 http.HandleFunc(&...
  • 最近对 go 语言有了兴趣,一直想找一个机会学习并实践这门有趣的语言。手头刚好有一个之前用 PHP 写的账号密码管理小工具,我决定用 go 重构这个小工具来入门 go 语言的 web 场景开发。同时我也希望自己这个实践和...
  • GO语言开源项目TOP 100

    千次阅读 2019-05-09 10:33:27
    目录 监控系统 容器技术 PaaS工具 大数据 微服务 CI/CD 数据库技术 存储技术 ...项目 简介 OpenFalcon OpenFalcon是一款小米开源的监控系统。功能:数据采集免配置:agent自发现、支持Plugin、...
  • 随着Oracle宣布JDK收费,Go语言席卷全球,云计算等各种新技术。Go作为后起之秀吸引了我的注意力。 鄙人一直Java语言开发已有5年,写过多个Java优秀项目。希望维护管理此仓库,记录学习Go语言部分心得,与其他同行...
  • 记得问一个已经在工作的师兄哪些语言需要是大势所趋需要掌握,他说他只会C、C++和Go,当时感到很震惊,我们在学校学的基本都是C、Java、Python之类的,Go语言很少接触,也不知道它的优势在哪。学了近一学期Go语言,...
  • 以前给 Go 语言项目源码提交过一些 commits,期间阅读他们的官方指导文档的时候觉得这篇指导文档可以作为绝佳的关于大型软件项目的规范管理的参考,因为最近又提交了几个 commits,就又把这篇文档再看了一遍,有感于...
  • go语言值得学习的开源项目推荐

    千次阅读 2017-11-09 14:11:25
    谷歌官方维护了一个基于go语言的开源项目列表: https://github.com/golang/go/wiki/Projects   其中有非常多的优秀项目值得学习,有几百行代码适合新手阅读的项目,也有大型如nsq、docker等的项目。 ...
  • 项目是掘金小册的项目《基于 Go 语言构建企业级的 RESTful API 服务》 是以gin为框架开发Restful接口的API高并发项目,实现的功能如下图: 这里将该项目fork下来实战研究下,这里只是记录下实战笔记,如果有需要...
  • Go SDK 1.13.5 package main import ( "bufio" "fmt" "io" "io/ioutil" "os" "strings" ) //一次性将全部数据读入内存 func main1() { contentBytes,err := ioutil.ReadFile("d:/golang/src/g...
  • 区块链的应用:版权保护 区块链用于版权保护的方式: ...在超级账本中,我们用Go语言,或者Java语言,来创建类。 在比赛中,用超级账本开发产品的相对来说比较多。以太坊因为需要花费gas,因此成本有些大。
  • go语言学习路径

    2019-06-01 18:05:59
    个人记录 go语言如何连接数据库:增删改查 Go语言爬虫项目将结果写入MySql数据库
  • Go语言编译github上的项目遇到的坑

    千次阅读 2019-06-04 19:15:38
    C++和JAVA都有类似的工具软件,但是Go语言只有通过github上的一个开源项目来搞。中间遇到了很多坑,于是乎记下这篇文章。 首先根据网上的文章,搞这个项目的第一步是go get **********(项目路径),但是第一步就没迈...
  • golang go语言I’ve been programming using PHP professionally since 10 years now. After my Computer Engineering degree, all I knew was that Java was not my piece of cake any more (after 6+ years using ...
  • 所以我准备从身边的一个项目入手,实践并学习一下 go 语言。目前已完成了项目功能梳理和 go 语言开发环境的搭建,有兴趣的朋友可以翻看下前面的文章。今天将要开始实现前端界面。这个小项目主要涉及三个页面:登录,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 30,988
精华内容 12,395
关键字:

go语言个人项目