golang定义了一套很丰富的数据类型及数据结构,这些类型和结构或者是直接映射为C的数据类型,或者是用C struct来实现。了解golang的数据类型和数据结构的底层实现,将有助于我们更好的理解golang并写出质量更好的代码。 我要晨读

已有966人晨读

sync.Pool 是 Go1.3 增加的内容,虽然 Go1.4 都快要发布了,但了解增加 sync.Pool 类型的一些情况还是有用处的。一方面可以加深理解;另一方面可以了解当初设计的初衷或一些思路。golang sync.Pool试用说明及注意事项。 我要晨读

已有952人晨读

依赖注入(Dependency Injection)和控制反转(Inversion of Control)。熟悉 Java 的 Spring 框架的人应该知道这两个概念。在依赖注入模式中,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者实例的工作通常由注入器来完成,然后注入调用者,因此也称为依赖注入。Go 的第三方库:inject,实现了依赖注入。 我要晨读

已有1106人晨读

golang的unsafe包很强大,基本上很少会去用它。它可以像C一样去操作内存。unsafe.Pointer其实就是类似C的void *,在golang中是用于各种指针相互转换的桥梁。uintptr是golang的内置类型,是能存储指针的整型,uintptr的底层类型是int,它和unsafe.Pointer可相互转换。本文讲解如何 利用unsafe操作未导出变量。 我要晨读

已有1021人晨读

类型转换在程序设计中都是不可避免的问题。当然有一些语言将这个过程给模糊了,大多数时候开发者并不需要去关注这方面的问题。但是golang中的类型匹配是很严格的,不同的类型之间通常需要手动转换,编译器不会代你去做这个事。 我要晨读

已有1279人晨读

进程、线程、协程,这些概念你是否都了解?那么 goroutine 又是什么?虽然这些都是偏向概念性的知识,但真正掌握理解才能写出更好的程序。了解这些知识,相信对理解Go语言也会很有帮助。本文讨论 进程、线程、轻量级进程、协程和go中的Goroutine 那些事儿。 我要晨读

已有796人晨读

日志是一个项目不必可少的。因为重要,所以对日志库的要求也会比较多。很多其他语言的日志库都是第三方库,而Go语言标准库就有日志包。该日志包能满足大部分需求,一般的项目使用它就足够了。本文介绍该包的基本使用。 我要晨读  相关阅读: 网页链接 

已有1303人晨读

Windows下,以".py"为扩展名的Python程序可以双击运行,用起来很爽;那么玩go语言,也想这样,能否做到呢?本文介绍了配置方式,go单文件双击直接运行。 我要晨读

已有839人晨读

用Golang这样带GC的语言编写长期运行的网络服务有一个很大的挑战,那就是内存管理。长期以来,Go的GC一直是大家关注的问题(虽然GC一直在优化)。本文分析了一种场景,采用重用内存的方式来避免GC。本文原文来自 CloudFlare 的实战经验,大家可以结合原文一起阅读。 我要晨读

已有1445人晨读

Go语言 channel 的别样用法,包括:返回值使用channel;参数使用channel;并发循环;利用channel计算素数;共享变量的读写等。其中有些用法还蛮新颖的,比如用一个结构体来保存sql以及查询的结果,而这两者使用的都是channel,可以思考思考每种用法。 我要晨读

已有988人晨读

由省略(_)函数返回值造成: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人晨读