大家比较认同 Go 是云计算的最佳语言之一;同时也认为 Go 非常适合游戏服务端开发。手游服务端开发,涉及到socket编程,可能有长连接,也可能有http短链接,当然应该还需要操作数据库。本文探讨了作者手游框架设计时的两种方案。 我要晨读

已有1113人晨读

现在的程序,大部分或多或少都会涉及网络编程。学习 Go 语言,更应该掌握网络编程。Go 语言提供了 net 包,封装了 socket 相关的接口。可能你用过 net 包,但没有完整的学习过它。可以通过本文,完整的学习学习 net 包。 我要晨读

已有1421人晨读

Go 语言的 net/http 除了实现 HTTP 协议,还是支持 HTTPS,搭建一个 HTTP 服务很简单,同样的,搭建一个 HTTPS 服务也不难。本文提供了一个 Go支持 HTTPS 的简单例子,建议自己动手试试。 我要晨读

已有994人晨读

共享内存是靠操作系统提供的内存映射机制,让不同进程的一块地址空间映射到同一个虚拟内存区域上,使不同的进程可以操作到一块共用的内存块。本文对 mmap 函数进行了较详细的介绍,同时使用 cgo 封装了 mmap,提供 go 语言对共享内存读写的代码。 我要晨读

已有1331人晨读

个人觉得 Go 中的 defer 是一个好东西。然而,有些时候,因为使用 defer,导致一些“莫名其妙”的问题。本文通过三段代码引出对 defer 原理的讲解。在看 defer 原理前,你试着看看这三段代码你是否都知道答案,而且不是蒙的。 我要晨读

已有960人晨读

每门编程语言都会有一些地方容易出错,大部分时候可能想当然的是这样,然而实际结果并不是这样。对这种情况,大家习惯称之为“坑“。Go语言有哪些你认为是”坑“的呢?本文作者汇总了一些”坑“的集合。欢迎补充。 我要晨读

已有1838人晨读

函数在go中是一等公民。函数使用的方方面面,你是否都了解?本文从函数声明、参数(变参、使用)、匿名函数和闭包、defer、函数作为值、函数作为类型、panic和recover、main和init函数,到 内置的函数,对函数进行了全面的介绍、学习。 我要晨读

已有811人晨读

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人晨读