语言规范

- [Close Channels Gracefully in Golang]: 如何优雅地关闭channel? http://www.tapirgames.com/blog/golang-channel-closing

- [Compile-time assertions in Go]: 编译时断言 http://commaok.xyz/post/compile-time-assertions/

- [Why are slices sometimes altered when passed by value in Go?]: Go不是按值传递么,怎么slice传入后被更改了呢?其实map也一样 https://www.calhoun.io/why-are-slices-sometimes-altered-when-passed-by-value-in-go/

- [Bit Hacking with Go]: Go的位操作 https://dev.to/vladimirvivien/bit-hacking-with-go

- [Go Range Loop Internals]: range内幕 https://garbagecollected.org/2017/02/22/go-range-loop-internals/

- [Blocks and Scopes in Golang]: 代码块和作用域 http://www.tapirgames.com/blog/golang-block-and-scope

- [Address Alignments in Go]:地址对齐 http://www.tapirgames.com/blog/golang-memory-alignment

- [Understand Go pointers in less than 800 words]:回顾一下指针的概念 https://dave.cheney.net/2017/04/26/understand-go-pointers-in-less-than-800-words-or-your-money-back

- [Another Introduction to Pointers in Go]:另一篇关于指针的介绍 https://golangbot.com/pointers/

- [There is no pass-by-reference in Go]: Go中没有引用传值 https://dave.cheney.net/2017/04/29/there-is-no-pass-by-reference-in-go

- [Why golang garbage-collector not implement Generational and Compact gc?]: 为什么不使用分代或者压缩的垃圾回收器?https://groups.google.com/forum/#!msg/golang-nuts/KJiyv2mV2pU/wdBUH1mHCAAJ

- [Modern garbage collection]: Go的垃圾回收器 https://blog.plan99.net/modern-garbage-collection-911ef4f8bd8e

- [Language Mechanics On Stacks And Pointers]: William Kennedy写的系列, 一共四篇, 深入底层 https://www.goinggo.net/2017/05/language-mechanics-on-stacks-and-pointers.html

- [Structures]: Go struct介绍 https://golangbot.com/shttps://medium.com/golangspec/init-functions-in-go-eac191b3860atructs/

- [Go调度详解]: 调度概览 https://zhuanlan.zhihu.com/p/27056944

- [也谈goroutine调度器]: 也谈谈Go的调度器 http://tonybai.com/2017/06/23/an-intro-about-goroutine-scheduler/

- [了解 Go 1.9 的类型别名]: Go 1.9中的类型别名 http://colobu.com/2017/06/26/learn-go-type-aliases/

- [Golang Internals Part 2: Nice benefits of named return values]: 返回值采用命名方式的好处 https://blog.minio.io/golang-internals-part-2-nice-benefits-of-named-return-values-1e95305c8687

- [Go Interface 源码剖析]: interface源代码 http://legendtkl.com/2017/07/01/golang-interface-implement/

- [Survey of Rounding Implementations in Go]: 四舍五入不简单 https://www.cockroachlabs.com/blog/rounding-implementations-in-go/

- [Golang 热更新研究笔记]: 热更新笔记 http://www.cppblog.com/sunicdavy/archive/2017/07/06/215057.html

- [go empty interface]:空接口 https://flaviocopes.com/go-empty-interface/

- [理解 go interface 的 5 个关键点]: 接口关键点 http://sanyuesha.com/2017/07/22/how-to-understand-go-interface/

- [Go汇编实战的坑]: 赞,国人给golang提patch https://mzh.io/golang-asm-notes

- [golang语言编译的二进制可执行文件为什么比 C 语言大]:深入分析 http://www.cnxct.com/why-golang-elf-binary-file-is-large-than-c/

- [init functions in Go]:init函数不简单 https://medium.com/golangspec/init-functions-in-go-eac191b3860a

- [Efficient Bit Manipulation in Go 1.9]: 有效的位操作 http://herman.asia/bit-manipulation-in-go-1-9

- [Learn Go constants --- A visual guide]:可视化系列 https://blog.learngoprogramming.com/learn-golang-typed-untyped-constants-70b4df443b61

- [Go cheatsheet]:小抄 https://devhints.io/go

- [defer in go]: https://blog.learngoprogramming.com/gotchas-of-defer-in-go-1-8d070894cb01

还有第二部分 [part2] https://blog.learngoprogramming.com/5-gotchas-of-defer-in-go-golang-part-ii-cc550f6ad9aa

- [Using named return variables to capture panics in Go]: 返回panic的错误 https://www.calhoun.io/using-named-return-variables-to-capture-panics-in-go/

- [Go Reflection: Creating Objects from Types]:基本类型,https://medium.com/kokster/go-reflection-creating-objects-from-types-part-i-primitive-types-6119e3737f5d

[part2]其它类型 https://medium.com/kokster/go-reflection-creating-objects-from-types-part-ii-composite-types-69a0e8134f20

测试

- [Go advanced testing tips & tricks]: Go测试提示和技巧 https://medium.com/@povilasve/go-advanced-tips-tricks-a872503ac859

- [5 simple tips and tricks for writing unit tests in #golang]:写测试的5个技巧 https://medium.com/@matryer/5-simple-tips-and-tricks-for-writing-unit-tests-in-golang-619653f90742

- [5 Advanced Testing Techniques in Go]: 5个测试的高级技术 https://segment.com/blog/5-advanced-testing-techniques-in-go/

调试和性能调优

- Profiling and optimizing Go web applications: 优化web程序,使用profiler

- go tool trace: trace工具介绍的很少,这是其中一篇

- Debugging Go core dumps:使用core dump调试

- Benchmarking Go programs: 测试和pprof, 第二部分

- GO APP MONITORING: EXPVAR, PROMETHEUS AND STATSD: 监控实践

- 一个内部API系统的性能优化: 国内用户的优化实践

- Profiler labels in Go:不常用但是有用的技巧

- diagnostics: 官方的介绍更准确,诊断。

- Go's work-stealing scheduler:rakyll的介绍

- 3倍性能的go程序优化实践: 国内的优化实践

- Seven steps to 100x faster: 100倍的性能提升

- A Million WebSockets and Go: 百万websocket连接和性能提升经验

- Golang 与系统调用: 根据演讲整理

- Performance comparison of regular expression engines:正则表达式库的性能比较

- Allocation Efficiency in High-Performance Go Services:有效的内存分配

- 使用 bcc/BPF 分析 go 程序: Brendan Gregg的文章

- Your pprof is showing: pprof,不想多说了

- Using the Go tracer to speed up fractal making:go tracer

- Profiling Go: 很好profile总结

- The new pprof user interface: go 1.10中已包含新界面

- High Performance Go:Dave Cheney在QComSF 2017上的演讲

- Go Profiler Internals:所谓的profile内幕

- Optimizing GoLang for High Performance with ARM64 Assembly: 针对ARM64的优化

标准库

- Plugins in Go 1.8: 对Go 1.8增加的plugin包的速览

- TCP/IP Networking: 网络编程入门

- Linux, Netlink, and Go --- Part 1: netlink:访问linux netlink,还有第二篇和第三篇

- Port Forwarding with Go: 端口转发

- Writing Modular Go Programs with Plugins: 插件

- Advanced command execution in Go with os/exec:学习os/exec

- expvar in action:知道这个标准包吗,用过吗?

- Golang 互斥锁内部实现: Go的锁实现

- Go unsafe 包之内存布局: unsafe的一些函数

- Go 1.9 sync.Map揭秘: sync.Map的实现揭秘

- Basic AST Traversal in Go: ast,做工具和代码分析的都需要

- A Go Programmer's Guide to Syscalls:Liz Rice的演讲

- Pitfalls of context values and how to avoid or mitigate them in Go: Context的陷阱以及如何避免它

- The 30 Most Popular Go String Functions: 最常用的strings的30个方法

- Serving HTTPS: 应用https

- How To Trust Extra CA Certs In Your Go App: 使用外部的CA

- GOLANG中time.After释放的问题: time.After使用的时候注意事项

- The new kid in town --- Go's sync.Map:sync.Map的性能

- The ultimate guide to writing a Go tool: Go工具开发终极手册,gomodifytags的作者

- Streaming IO in Go: io

- Things to know about HTTP in Go: Go HTTP

- Important interfaces that every Go developer should know: 重要接口

- Go Walkthrough: fmt: fmt详解

- Context API explained:context详解

- Basic AST Manipulation in Go:还是ast

- In-depth introduction to bufio.Scanner in Golang:深入介绍bufio.Scanner

- Go Slice vs Maps:性能比较

- Introduction to bufio package in Golang: bufio介绍

- TCP Socket Implementation On Golang: 从外部推断内部实现

- Understanding Go programs with go/parser: 带你学习go/parser

- unsafe.Pointer and system calls:理解 unsafe.Pointer和系统调用

- Using Go Templates:使用模板

编程模式

- Functional Options Pattern in Go: 介绍了参数以函数子的方式实现,更出名的是 Rob Pike提出的这种模式,以及Dave Cheney的进一步介绍。

- A Story of a Fat Go Binary: 使用gofat给Go程序瘦身

- a size profiler for binaries :瘦身瘦身,google出品

- How to ship production-grade Go:开发产品级的程序

- Go programming language secure coding practices guide:安全代码指南

- Error handling patterns in Go: Go的错误处理总是让人困惑

- Alternative Patterns for Method Overloading in Go: Go的方法重载的可选实现

- Go, without package scoped variables: 不推荐包级别的变量,但是怎么做呢

- Don't defer Close() on writable files: defer会忽略错误

- Go Patterns: Go设计模式

- Golang Concurrency Tricks:channel和goroutine技巧

- go make 和 new 的区别: 区别

- Context isn't for cancellation: Context目的不是为了cancel

- Inject build-time variables with Golang:

- go advices: Go建议清单

- Error handling in Upspin: Rob Pike的实践

- Dynamic JSON in Go: 使用*json.RawMessageinterface{}

开发技巧

- Adding custom data to Go binaries at compile time: 编译时给二进制文件加点料

- Go Quickstart Tips for Experienced Programmers: 给经验丰富的程序员的一些Go的小贴士

- Gracefully terminate a program in Go:优雅滴关闭程序

- Golang 中使用 JSON 的小技巧: JSON使用的小技巧

- How to find out which Go version built your binary: debug发现Go版本

- Generating good unique ids in Go:产生唯一的ID

- Fencing off Go Applied - A Practical Look at a Go Research Paper: 使用 dingo-hunter 和 Gong 编译时检查死锁和channel

- Go Tooling in Action: Go开发时的一些工具介绍

- How to use conditional compilation with the go build tool:条件编译

- Strace in 60 lines of Go: 实现strace

- 3 ways to iterate in Go:三种方式遍历

- RustGo: Calling Rust From Go with Little Overhead:高效的从Go调用Rust

- Version Constraints and Go:指定的Go版本才能编译

- 6 Go Tips You Should (probably not) Use: 6个Go小技巧,但是你不应该在代码中使用, :)

- 15 Lessons in Golang:15个经验教训

- Using functional options instead of method chaining in Go: 使用函数式参数,而不是链式操作

- 合理配置GOMAXPROCS提升一倍以上的性能: 对于I/O密集型的程序,建议设置GOMAXPROCS大一些

- Lint your #golang code like a mad man!: 像牛人一样编写代码

- Rate Limiting Service Calls in Go:限流

- Sending HTML email using Go:发送html邮件

- Go Assembly 示例: Go使用汇编的例子

- go web examples:web开发例子

- Handling CORS In A Golang Web Application:CORS处理

- Understanding Go panic output: 理解Go的panic输出

- Go语言中实现基于 event-loop 网络处理:不同的思路

- Generating Go structs from JSON:5个json to gostruct的工具

- go语言死循环分析:当然不是go的bug,看看go的讨论

- Access unexported fields in golang/reflect: 访问unexported的字段

- Why is port a string and not an integer: URL.Port为什么是字符串而不是整数?

- golang: How the select worked when multiple channel involved:使用伪随机

- How to reuse request body of *http.Request: request.Body读完就不能再多了,如何重用?

https://dave.cheney.net/2014/10/17/functional-options-for-friendly-apis

面试题

- golang 面试题: 诺唯总结的11个面试题, 解答

- Golang精编100题:选择题和填空题,试试看

第三方库

- Infinite Sets in Go: 把set实现玩出花

- awesome-go-storage: 100多个Go语言实现的存储引擎,强不强大?

- Learn Web Programming in Go by Examples: 类似gobyexamples,这次奉上的是关于web开发的

- Visualizing Concurrency in Go:可视化goroutine

- Network Protocol Breakdown: Ethernet and Go: 学习底层网络协议处理

- 再谈谈获取 goroutine id 的方法: goroutine ID的获得,hacker方式

- Listen gRPC and HTTP requests on the same port: grpc和http共用端口

- gRPC-Go performance Improvements: gRPC近期的性能优化

- Building Blockchain in Go:使用Go编写区块链程序系列

- Minimal Perfect Hash Functions:完美的hash函数,极小

应用

- 今日头条Go建千亿级微服务的实践: 今日头条的微服务

版本新特性

- 5 things to watch in Go programming in 2017: G0 1.8新的特性介绍

- Go 1.8: 2016最后一天写的,也算做2017年的文章吧

- The State of Go - February 2017: 2017对Go的综评,来自Go团队

- What is new in Go 1.8: what's new?

- Logging, interfaces, and allocation: Go 1.9中的一点优化

- HTTP/2 Server Push: http2 push功能

- The State of Go - May 2017: The State of Go系列

- What's new in Google's Go 1.9: what's new

- Toward Go 2: 目标Go2

- Go 1.9中值得关注的几个变化: what's new in go 1.9

- improve timers scalability on multi-CPU systems: go 1.10提升timer性能

- Go 1.10 Release Notes: go 1.10先睹为快

- Golang 1.10 前瞻: 新特