Go编码规范指南

转自http://golanghome.com/post/550 Go编码规范指南 序言 看过很多方面的编码规范,可能每一家公司都有不同的规范,这份编码规范是写给我自己的,同时希望我们公司内部同事也能遵循这个规范来写Go代码。 如果你的代码没有办法找到下面的规范,那么就遵循标准库的规范,多阅读标准库的源码,标准库的代码可以说是我们写代码参考的标杆。 格式化规范 go默认已经有了gofmt工具,但是我们强烈建议使用goimport工具,这个在gofmt的基础上增加了自动删除和引入包. go get...阅读全文

2014-12-14 22:45 hittata
阅读:44865 评论:0

GO语言的开源库

Indexes and search engines These sites provide indexes and search engines for Go packages: godoc.org gowalker gosearch Sourcegraph Contributing To edit this page you must be a contributor to the go-wiki project. To get contributor access, send mail t...阅读全文

2015-02-16 09:47 chu888chu888
阅读:22605 评论:1

go语言的官方包sync.Pool的实现原理和适用场景

已经使用golang有一段时间,go的协程和gc垃圾回收特性的确会提高程序的开发效率。但是毕竟是一门新语言,如果对于它的机制不了解,用起来可能会蹦出各种潘多拉盒子。今天就讲讲我在项目中用到的sync包的Pool类的使用,以免大家混淆使用。 众所周知,go是自动垃圾回收的(garbage collector),这大大减少了程序编程负担。但gc是一把双刃剑,带来了编程的方便但同时也增加了运行时开销,使用不当甚至会严重影响程序的性能。因此性能要求高的场景不能任意产生太多的垃圾(有gc但又不能完全依赖它...阅读全文

2014-12-21 10:35 yongjian_lian
阅读:20759 评论:0

Go-类型断言

Java当中有instanceof这样的关键字判断类型 Go当中自然也有相应的方法来判断类型 即Comma-ok断言 写法为value, ok := em.(T) 如果确保em 是同类型的时候可以直接使用value:=em.(T)一般用于switch语句中下面将会讲解到 em代表要判断的变量 T代表被判断的类型 value代表返回的值 ok代表是否为改类型 类型断言应该一看就懂 在这里就不再介绍了主要是介绍我自己碰到的几个问题 1 em必须为initerface类型才可以进行类型断言 比如如下代...阅读全文

2014-06-11 14:30 u012807459
阅读:15159 评论:2

理解Go语言的nil

最近在油管上面看了一个视频:Understanding nil,挺有意思,这篇文章就对视频做一个归纳总结,代码示例都是来自于视频。 nil是什么 相信写过Golang的程序员对下面一段代码是非常非常熟悉的了: if err != nil { // do something.... } 当出现不等于nil的时候,说明出现某些错误了,需要我们对这个错误进行一些处理,而如果等于nil说明运行正常。那什么是nil呢?查一下词典可以知道,nil的意思是无,或者是零值。零值,zero value,是不是有点...阅读全文

阅读:16649 评论:0

Go调优神器trace介绍

你想知道你的Go程序在做什么吗? go tool trace可以向你揭示:Go程序运行中的所有的运行时事件。 这种工具是Go生态系统中用于诊断性能问题时(如延迟,并行化和竞争异常)最有用的工具之一。 在我之前的博客文章中,我提到我们在Pusher中使用go tool trace来跟踪为何Go垃圾收集器有很长的停顿时间。 在这篇博文中,我更加深入的介绍go toll trace。go tool trace 试用go tool trace可以显示大量的信息,所以从哪里开始是个问题。 我们首先简要介绍...阅读全文

阅读:23398 评论:0

Golang精编100题

能力模型 级别 模型 初级primary 熟悉基本语法,能够看懂代码的意图;在他人指导下能够完成用户故事的开发,编写的代码符合CleanCode规范; 中级intermediate 能够独立完成用户故事的开发和测试;能够嗅出代码的坏味道,并知道如何重构达成目标; 高级senior 能够开发出高质量高性能的代码;能够熟练使用高级特性,开发编程框架或测试框架; 选择题 [primary] 下面属于关键字的是()A. funcB. defC. structD. class 参考答案:AC [prima...阅读全文

2017.04.19 18:33* _张晓龙_
阅读:4577 评论:2

Go语言TCP网络编程(详细)

一、序言 Golang的主要 设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端 程序必不可少也是至关重要的一部分。在日常应用中,我们也可以看到Go中的net以及其subdirectories下的包均是“高频+刚需”,而TCP socket则是网络编程的主流,即便您没有直接使用到net中有关TCP Socket方面的接口,但net/http总是用到了吧,http底层依旧是用tcp socket实现的 网络编程方面,我们最常用的就是tcp socket编程了,在posix标准出来后,so...阅读全文

2017-05-16 11:00:28 徐学良
阅读:2940 评论:0

[译] 服务端I/O性能大比拼:Node、PHP、Java和Go

服务端I/O性能大比拼:Node、PHP、Java和Go 原文请见:Server-side I/O Performance: Node vs. PHP vs. Java vs. Go。 理解应用程序的输入/输出(I/O)模型,意味着其在计划处理负载与残酷的实际使用场景之间的差异。若应用程序比较小,也没有服务于很高的负载,也许它影响甚微。但随着应用程序的负载逐渐上涨,采用错误的I/O模型有可能会让你到处踩坑,伤痕累累。 正如大部分存在多种解决途径的场景一样,重点不在于哪一种途径更好,而是在于理解如...阅读全文

2017-05-19 23:00:19 暗夜在火星
阅读:2091 评论:0

CentOS6.8配置GO语言开发环境

鉴于越来越多的开源项目都采用Go为开发语言,本文介绍Linux(CentOS 6.8)下GO开发环境的搭建与使用。 一、Go安装使用 1、下载Go源码包 https://storage.googleapis.com/golang/go1.6.3.linux-amd64.tar.gz 上传到/usr/local/src目录下 2、编译安装Go到/usr/local tar zxvf go1.6.3.linux-amd64.tar.gz -C /usr/local/ #注:必须使用root账户或者使...阅读全文

2017-05-20 23:00:20 云端等你
阅读:1009 评论:0

仅需简单 5 步,给你的 Golang 程序添加 GUI (使用 Electron )

创建一个 Golang app 是一件简单又轻松的事情,但是有时候你想给你的应用锦上添花:创建一个 GUI! 在本篇文章中,我将通过使用 astilectron 工具中的 bootstrap 以及 bundler 给一个简单的 Golang 程序添加 GUI。 我们的带有 GUI 的 Golang app 能够打开一个文件夹并且展示其中的内容。 你可以在这里找到完成后的 [代码](https://github.com/asticode/go-astilectron-demo) ...阅读全文

2017-12-27 21:44:33 polaris
阅读:44898 评论:3

Golang命名规范

Golang命名规范 image 文件名 整个应用或包的主入口文件应当是 main.go 或与应用名称简写相同。例如:Gogs 的主入口文件名为 gogs.go。 函数或方法 若函数或方法为判断类型(返回值主要为 bool 类型),则名称应以 Has, Is, Can 或 Allow 等判断性动词开头: func HasPrefix(name string, prefixes []string) bool { ... } func IsEntry(name string, entries []s...阅读全文

2018.07.05 12:09 freelang
阅读:14076 评论:0

Go 函数调用 ━ 栈和寄存器视角

函数的调用过程主要要点在于借助寄存器和内存帧栈传递参数和返回值。虽然同为编译型语言,Go 相较 C 对寄存器和栈的使用有一些差别,同时,Go 语言自带协程并引入 defer 等语句,在调用过程上显得更加复杂。 理解Go函数调用在CPU指令层的过程有助于编写高效的代码,在性能优化、Bug排查的时候,能更迅速的确定要点。本文以简短的示例代码和对应的汇编代码演示了Go的调用过程,展示了不同数据类型的参数的实际传递过程,同时分析了匿名函数、闭包作为参数或者返回值传递时,在内存上的实际数据结构。对于协程对...阅读全文

2019-07-18 15:32:33 李说的对
阅读:1732 评论:0