原文链接:Protocol Buffer Basics: Go | Protocol Buffers | Google Developers 本教程使用proto3语言为Go程序员介绍了protocol buffers的基本使用。通过一步步创建一个简单的示例应用,你将会了解到: 在.proto文件中定义消息格式 使用protocol buffer编译器 使用Go protocol buffer API读写消息 这不是一个使用protocol buffers的完全手册。更多更细节的信息,请参看:Language Guide (proto3)、Go API Reference、Go Generated Code和Encoding …
阅读更多原文链接:Language Guide (proto3) | Protocol Buffers | Google Developers 本指导文档描述了如何使用protocol buffer语言来构建你的protocol buffer数据,包括.proto文件的语法规则,包括如何从你的.proto文件中生成数据访问类。本文介绍的是proto3版本的语言规则,关于proto2版本的信息,请参考: Proto2 Language Guide。 本文是一个指导性的参考文档,关于如何使用本文中提及的特性的例子,请参考tutorial 并选择你想要的特定编程语言的例子。 定义一个消息类型 首先让我们来看一个非常简单的例子。比如说你想要定义一个 …
阅读更多原文链接:Concurrency Trap #2: Incomplete Work (ardanlabs.com) 简介 在我的上一篇博文[译]Goroutine Leaks - The Forgotten Sender中,我提到了并发是一个非常有用的工具,但是并发往往伴随着特定的陷阱,而这些不会在同步编程中出现。本文会继续这个主题,在本文中我将介绍一个名为未完成的工作的陷阱。未完成的工作发生于在仍然有未完成的Goroutine(非main goroutine)存在的时候程序终止退出了。发生这种情况时,Goroutine的本质使得它会被强制退出,这可能是一个严重的问题。 未完成的工作 为了说明什么是未完成的工作,请观察下面的例子。 …
阅读更多Dave Cheney 2019年在QCon上分享的一些Go编程的原则很有参考价值。我摘录了关于并发的部分,这部分是关于Go编发编程的一些原则和思想。 原文链接:Practical Go: Real world advice for writing maintainable Go programs (cheney.net) 通常选择Go来做项目,往往是因为它的并发特性。Go团队已经不遗余力的让Go在并发方面即能节省资源又能满足性能要求。然而,使用Go的并发特性写出低性能或者不稳定的代码是完全可能的。在最后我想留给你们一些我关于如何避免使用Go并发特定带来的一些隐患的建议。 支持并发特性的语句channel,select和go在Go特 …
阅读更多原文链接:Goroutine Leaks - The Forgotten Sender (ardanlabs.com) 简介 并发编程可以让程序员以多个执行路径来解决问题,而且通常是试图提高程序性能。并发并不意味着这些执行路径是以并行的方式执行,而是说这些执行路径以无序异步的方式执行而不是同步顺序执行。历史上这种编程模型是通过标准款或者第三方库来实现的。 Go语言中,并发特性是通过语言内置的Goroutine和channel来实现,这样就减少了对库的依赖。这容易给人一种错觉,觉得使用Go来编写并发程序会很简单。你得非常小心,因为如果你没有正确的使用Go的并发特性,往往会引入特定的边界效应或者调入陷阱。一不小心,这些陷阱就会给你程序带 …
阅读更多