由省略(_)函数返回值造成:MySql的too many connection错误;造成严重的内存泄漏……本文的结论可能没有太多参考价值,不过,对于初学者,需要明白 Go GC 是不会处理资源泄露的,文件描述符(磁盘文件或Socket)需要程序显示的 Close,否则会出现本文所说的问题。 我要晨读

已有1352人晨读

Beego是 astaxie 开发的 Go 语言 Web 框架。它有标准的MVC模式,完善的功能模块,和优异的调试和开发模式等特点。并且beego在国内企业用户较多,社区发达和Q群,文档齐全,特别是 astaxie 本人对bug和issue等回复和代码修复很快,非常敬业。本文源码分析基于 Beego 1.1.4。 我要晨读

已有936人晨读

并发编程是 Go 语言永恒的话题。在官方 effective_go 文档中,有专门介绍 Go 的并发编程,主要有:goroutine、channel 等,当然也介绍了并行的概念以及 Go 如何使用多核 CPU 进行并行计算。如果之前没有读过 effective_go,那这次结合这篇译文好好学习下吧。 我要晨读

已有790人晨读

平时工作中可能需要文件共享,所以有必要了解文件共享。文件共享有很多方法,大致分为以下几类:系统共享(windows共享或samba等);ftp共享(ftp软件);http共享(web服务器)。本文介绍了几种共享的方法,同时用 Go 实现了一个文件共享服务(几行代码)。 我要晨读

已有893人晨读

select可以用来管理多个channel的读写,以及实现channel读写timeout等。select并不是以库的形式提供,而是语言级支持的语法特性,因此select的实现主要由编译器和runtime共同完成,本文将重点关注runtime部分,包括:创建select对象,注册所有的case条件,执行select语句,最后释放select对象 我要晨读

已有1011人晨读

hash table 是计算机科学中最重要的数据结构之一。许多hash table的实现有着千差万别的特性,但是总体上他们都提供了快速查询,添加和删除功能。go语言提供了内置数据类型map。本文是Go官网blog的一篇文章(翻译):Go maps in action。详细介绍了 map 的使用和技巧。 我要晨读

已有1015人晨读

今天的晨读有点意思。有人指出了 goroutine 使用的几宗罪,主要包括:指针传递不安全;增加函数危险系数;滥用陷阱。同时给出了处理方法。针对这些观点,有人指出:无辜的 goroutine,很多问题并不能归咎于 goroutine,比如:导出函数特别需要明确函数调用约定;使用者不遵守函数调用约定;代码设计的一些问题等。 我要晨读  相关阅读: 网页链接 

已有809人晨读

有时候会碰到这样的需求:用 Go 语言调用外部命令,而且是多个命令的组合(即管道连接)。这样的需求,我们自然会想到 os/exec 包。第一次使用时,你可能会遇到一些问题。本文一步步介绍了遇到的问题以及相应的解决办法,复杂命令的组合也能较好的实现。 我要晨读  相关阅读: 网页链接 

已有1468人晨读

编程工作离不开重构。代码重构是指对软件代码做任何更动以增加可读性或者简化结构而不影响输出结果。重构既不修正错误,又不增加新的功能性。反而它是用于提高代码的可读性或者改变代码内部结构与设计,并且移除死代码,使其在将来更容易被维护。本文由 golang-nuts 上的一个提问引发 Go 代码是否过度重构的问题。 我要晨读

已有962人晨读

一般的,用 Go 开发Web程序部署时,会使用 Nginx 作为反向代理。如果程序中需要获取用户的 IP,直接使用 http.Request.RemoteAddr 获取到的是 Nginx 服务器的 IP。本文介绍了这种情况下如何获取用户的 IP。也欢迎提供其他获取 IP 的方案。 我要晨读

已有1482人晨读

在使用go的过程中,我们有时候会引入一些第三方库来使用,而通常的方式就是使用go get,但是这种方式有一个很严重的问题,如果第三方库更新了相关接口,很有可能你就无法使用了。当然,还有其他方式,比如:check下来放在工程目录;使用 godep 或 gpm 这样的管理工具。本文介绍 mgo 库使用的方式:gopkg,它引入了版本的概念。 我要晨读  相关阅读: 网页链接  网页链接 

已有830人晨读

并发编程,必然会遇到同步问题;虽然 Go 推崇通过 channel 来处理同步问题,然而,有些时候使用锁会更方便。本文分析了 Mutex 设计思想和演化过程,得出如下结论:理解一个程序如何工作很简单,但是,作者的设计思路才是关键,我们可以不断的看源代码,看别人的实现,我们能从中学到很多知识与技巧,当遇到相同的问题的时候,我们也能解决类似的问题。 我要晨读

已有933人晨读

Slice/array(以及字符串)是经常使用的数据类型,使用它们的地方,经常可以见到 append 内置函数的身影。你应该知道 append 的作用,然而,你知道 append 的运作机制吗?了解其原理,无疑对写出高质量的代码很有好处。该文原文来自Go官网博客,可以对照着原文看这篇译文。 我要晨读

已有1720人晨读

工欲善其事,必先利其器。进行开发工作,搭建一个好用的开发环境往往能加快开发速度。编辑器之争没有意义,每个人都会有自己喜爱的编辑器。如果你还在迷茫于Go开发环境的问题,不妨读读这篇文章:打造完美的go开发环境。另外,可以使用下 fswatch Golang 热编译工具。 我要晨读  相关阅读: 网页链接 

已有1019人晨读

上次晨读了 container/list 包的实现。然而光学不用,很容易就会忘记。如何使用 container/list 包来实现一个排序的链表;又如何使用 container/list 包来实现一个 Stack(栈)。当然,这两种数据结构也可以不使用 container/list 来实现。欢迎分享其他实现。 我要晨读  相关阅读: 网页链接 

已有880人晨读

container/list 包实现了一个双端链表,其实现(包括注释)一共就200多行代码。通过学习其实现复习链表等相关知识。本文不是带领大家学习list的内部实现,而是提到list使用时的一个“坑”,建议通过这个“坑”学习下list的内部实现。 我要晨读

已有1798人晨读

常听到的是Go是云时代的语言;同时,也经常听到:Go 适合网游服务器端开发。没涉及过网游开发的工作,不知道为啥 Go 适合。本文介绍了网游的一些基本情况,程序需要处理的核心工作、主要IO等,进而分析为什么Go语言适合开发网游服务器端。 我要晨读  相关阅读: 网页链接 

已有992人晨读

goroutine 是如此的重要,以至于学习、应用 goroutine 相关的文章层出不穷。本文简单介绍了并发、并行的知识,同时介绍了goroutine的一些基本知识,然后通过例子一步步学习实践goroutine的使用。建议阅读过程中实际动手实验,以加深理解。本序列一共分两篇。 我要晨读  相关阅读: 网页链接 

已有979人晨读

Goroutine 和 channel 可以说是Go语言的两大法宝。在学习Go语言的过程中,大家应该或多或少都会使用到 channel。然而,对 channel 你了解多少?本文介绍了 channel 的一些特性(或技巧),同时还提供了一个 http 请求优化的方案。 我要晨读

已有1197人晨读

对于Go初学者,可能对内置函数 new 和 make 的使用挺迷糊的:什么时候该使用 new,什么时候该使用 make?它们之间到底有啥区别?本文结合 C/C++ 分析了 new 和 make 所做的工作以及一些内部原理。相信看完后,你对两者的区别和使用应该不会有问题了。 我要晨读

已有880人晨读