每门编程语言都会有一些地方容易出错,大部分时候可能想当然的是这样,然而实际结果并不是这样。对这种情况,大家习惯称之为“坑“。Go语言有哪些你认为是”坑“的呢?本文作者汇总了一些”坑“的集合。欢迎补充。 我要晨读
函数在go中是一等公民。函数使用的方方面面,你是否都了解?本文从函数声明、参数(变参、使用)、匿名函数和闭包、defer、函数作为值、函数作为类型、panic和recover、main和init函数,到 内置的函数,对函数进行了全面的介绍、学习。 我要晨读
golang定义了一套很丰富的数据类型及数据结构,这些类型和结构或者是直接映射为C的数据类型,或者是用C struct来实现。了解golang的数据类型和数据结构的底层实现,将有助于我们更好的理解golang并写出质量更好的代码。 我要晨读
sync.Pool 是 Go1.3 增加的内容,虽然 Go1.4 都快要发布了,但了解增加 sync.Pool 类型的一些情况还是有用处的。一方面可以加深理解;另一方面可以了解当初设计的初衷或一些思路。golang sync.Pool试用说明及注意事项。 我要晨读
依赖注入(Dependency Injection)和控制反转(Inversion of Control)。熟悉 Java 的 Spring 框架的人应该知道这两个概念。在依赖注入模式中,创建被调用者的工作不再由调用者来完成,因此称为控制反转;创建被调用者实例的工作通常由注入器来完成,然后注入调用者,因此也称为依赖注入。Go 的第三方库:inject,实现了依赖注入。 我要晨读
golang的unsafe包很强大,基本上很少会去用它。它可以像C一样去操作内存。unsafe.Pointer其实就是类似C的void *,在golang中是用于各种指针相互转换的桥梁。uintptr是golang的内置类型,是能存储指针的整型,uintptr的底层类型是int,它和unsafe.Pointer可相互转换。本文讲解如何 利用unsafe操作未导出变量。 我要晨读
类型转换在程序设计中都是不可避免的问题。当然有一些语言将这个过程给模糊了,大多数时候开发者并不需要去关注这方面的问题。但是golang中的类型匹配是很严格的,不同的类型之间通常需要手动转换,编译器不会代你去做这个事。 我要晨读
进程、线程、协程,这些概念你是否都了解?那么 goroutine 又是什么?虽然这些都是偏向概念性的知识,但真正掌握理解才能写出更好的程序。了解这些知识,相信对理解Go语言也会很有帮助。本文讨论 进程、线程、轻量级进程、协程和go中的Goroutine 那些事儿。 我要晨读
Windows下,以".py"为扩展名的Python程序可以双击运行,用起来很爽;那么玩go语言,也想这样,能否做到呢?本文介绍了配置方式,go单文件双击直接运行。 我要晨读
用Golang这样带GC的语言编写长期运行的网络服务有一个很大的挑战,那就是内存管理。长期以来,Go的GC一直是大家关注的问题(虽然GC一直在优化)。本文分析了一种场景,采用重用内存的方式来避免GC。本文原文来自 CloudFlare 的实战经验,大家可以结合原文一起阅读。 我要晨读
Go语言 channel 的别样用法,包括:返回值使用channel;参数使用channel;并发循环;利用channel计算素数;共享变量的读写等。其中有些用法还蛮新颖的,比如用一个结构体来保存sql以及查询的结果,而这两者使用的都是channel,可以思考思考每种用法。 我要晨读
由省略(_)函数返回值造成:MySql的too many connection错误;造成严重的内存泄漏……本文的结论可能没有太多参考价值,不过,对于初学者,需要明白 Go GC 是不会处理资源泄露的,文件描述符(磁盘文件或Socket)需要程序显示的 Close,否则会出现本文所说的问题。 我要晨读
Beego是 astaxie 开发的 Go 语言 Web 框架。它有标准的MVC模式,完善的功能模块,和优异的调试和开发模式等特点。并且beego在国内企业用户较多,社区发达和Q群,文档齐全,特别是 astaxie 本人对bug和issue等回复和代码修复很快,非常敬业。本文源码分析基于 Beego 1.1.4。 我要晨读
并发编程是 Go 语言永恒的话题。在官方 effective_go 文档中,有专门介绍 Go 的并发编程,主要有:goroutine、channel 等,当然也介绍了并行的概念以及 Go 如何使用多核 CPU 进行并行计算。如果之前没有读过 effective_go,那这次结合这篇译文好好学习下吧。 我要晨读
平时工作中可能需要文件共享,所以有必要了解文件共享。文件共享有很多方法,大致分为以下几类:系统共享(windows共享或samba等);ftp共享(ftp软件);http共享(web服务器)。本文介绍了几种共享的方法,同时用 Go 实现了一个文件共享服务(几行代码)。 我要晨读
select可以用来管理多个channel的读写,以及实现channel读写timeout等。select并不是以库的形式提供,而是语言级支持的语法特性,因此select的实现主要由编译器和runtime共同完成,本文将重点关注runtime部分,包括:创建select对象,注册所有的case条件,执行select语句,最后释放select对象 我要晨读
hash table 是计算机科学中最重要的数据结构之一。许多hash table的实现有着千差万别的特性,但是总体上他们都提供了快速查询,添加和删除功能。go语言提供了内置数据类型map。本文是Go官网blog的一篇文章(翻译):Go maps in action。详细介绍了 map 的使用和技巧。 我要晨读