经历了数十年发展的C语言,各种各样的现成的库已经非常丰富。通过cgo,可以在Go语言中使用C语言代码,充分利用好现有的“轮子”。本文介绍使用C语言变量、函数、结构体、联合体、回调函数的方法,动态链接库(Dynamic Link Library,dll)的调用欢迎补充。 我要晨读
通常情况下,socket如果被客户端正常close,服务器是能检测到的,但是如果客户端突然拔掉网线,或者是断电,那么socket的状态在服务器看来可能仍然是established,而实际上该socket已经不可用了。在Go中,我们会使用timer来定时检测。本文介绍了一种优化方法。 我要晨读
go提供了一套统一操作database的sql接口,任何第三方都可以通过实现相应的driver来访问感兴趣的数据库。go提供了一套很好的机制来处理数据库的查询操作,但发现当sql query语句过多,如果每一个查询都按照官方例子代码写,代码量太大了。本文介绍如何对这种情况进行封装。 我要晨读
Sourcegraph号称通过分析全球的开源项目来真正地展现相关项目之间的关联。它主要提供以下两个功能:根据代码查找文档与使用用例;选择正确的库或函数来使用。本文展示如何开始使用 Sourcegraph 这个网站来作为 Go 语言学习和开发的辅助工具。 我要晨读
当我发现 beego 框架时感觉非常激动。我只用了大约 4 个小时就将一个现有的 Web 应用程序移植到了该框架上并做了一些端对端测试的调用扩展。本文介绍 使用 Beego 与 Mgo 开发的示例程序。 我要晨读
Go 语言中的 Array,Slice,Map 和 Set,这些都是使用很频繁很重要的数据结构,各种资料也不断的介绍、讲解它们。本文将它们放在一起,介绍它们的内部机制、初始化、使用和特性。对于 Set,并非Go内置,而是自己实现的。 我要晨读
go语言的逆袭。本次晨读介绍的不是学习Go技术的,而是Go的一些情况介绍,相信看完后,你会庆幸自己当初做出了学习Go的决定。本文主要介绍了:Go 语言的哪些特点最吸引您?有哪些常见的应用场景?成功的开源项目、哪些公司在使用Go等。 我要晨读
Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常。在Go语言中,使用多值返回来返回错误。不要用异常代替错误,更不要用来控制流程。本文介绍Go中引入的Exception处理:defer, panic, recover。 我要晨读
Go对web服务器的编写提供了非常好的支持,标准库中提供了 net/http 包来方便编写服务器。写一个最简单的hello world服务器,代码简短,那么 http.ListenAndServe() 到底做了什么?本文带你分析它是如何工作的。 我要晨读
在面向对象盛行的年代,新的编程语言,自然会有人问,是否是面向对象的。面向对象的三大特点:封装、继承、多态。Go是否支持这三大特征?是否可以模拟实现?如果你对Go面向对象方面的知识感到迷惑,不妨看看别人是怎么理解的。 我要晨读
学习别人的经验,是一种快速学习的方法。你可能不知道的十个技巧。本文总结了 Go 语言使用的一些技巧,包括:匿名结构体、嵌套结构体、godoc命令、使用统一个Channel发送和接收消息 等。 我要晨读
go的gc还不完善但也不算不靠谱,关键看怎么用,尽量不要创建大量对象,也尽量不要频繁创建对象,这个道理其实在所有带gc的编程语言也都通用。想知道如何提前预防和解决问题的,请耐心看下去。本文带来 Go程序GC优化经验分享。 我要晨读
Go Playground,这是一个完全由Go代码组成和返回程序运行结果的web服务器。你很可能已经通过阅读Go教程或执行Go文档中的示例程序的途径使用过Go Playground了。本文我们将学习Go playground是如何实现并与其它服务整合的。 我要晨读
Golang的原子并发特性使得它很容易构造流数据管道,这使得Golang可有效的使用I/O和多CPU特性。本文提出一些关于管道的示例,在这个过程中突出了操作失败的微妙之处和介绍处理失败的具体技术。 我要晨读
让我们假设你有一golang 程序,想改善其性能。有几种工具可以帮我们完成这个任务。这些工具可以帮我们识别程序中的热点(cpu,io,memory), 热点即是那些需要我们集中精力于其上,能显著改善改善性能的地方。golang 核心开发者 Dmitry Vyukov(1.1 调度器作者) 关于性能剖析。 我要晨读
抢占式多任务和一般共享状态结合导致软件开发过程不可管理的复杂性,开发人员可能更喜欢保持自己的一些理智以此避免这种不可管理的复杂性。抢占式调度对于那些真正的并行任务是好的,但是当可变状态通过多并发线程共享时,明确的多任务合作更招人喜欢 。本文介绍 在 Go 语言中,正确的使用并发。 我要晨读
几乎每一个程序员都赞同测试是重要的,但测试以多种方式让写测试的人员打退堂鼓。它们可能运行慢,可能使用重复的代码,可能一次测试得太多导致难以定位测试失败的根源。本文介绍如何 构建一个可测试的 Go Web 应用。 我要晨读
Golang 性能忽然增加变慢10倍的现象,推测是编译器在spilt stack,导致的问题。对于这个测试和测试结果,你有什么看法、意见,欢迎大家讨论讨论。本文是14年5月发布的,因此,你使用的Go版本可能结果不一样。 我要晨读
温故而知新,可以为师矣!在 Go 语言中,如果一个结构体和一个嵌入字段同时实现了相同的接口会发生什么呢?也许你早就知道答案,也许你还不知道。不管怎样,我们一起来温习一下:Go 语言中的方法,接口和嵌入类型,相信会有新的收获。 我要晨读