转自:http://colobu.com/2017/12/28/top-golang-articles-of-2017/
涵盖了go的方方面面,如果你能静下心来细细品味,相信定能有质的飞跃。
语言规范
- Close Channels Gracefully in Golang : 如何优雅地关闭channel?
- Compile-time assertions in Go : 编译时断言
- Why are slices sometimes altered when passed by value in Go? : Go不是按值传递么,怎么slice传入后被更改了呢?其实map也一样
- Bit Hacking with Go : Go的位操作
- Go Range Loop Internals : range内幕
- Blocks and Scopes in Golang : 代码块和作用域
- Address Alignments in Go :地址对齐
- Understand Go pointers in less than 800 words :回顾一下指针的概念
- Another Introduction to Pointers in Go :另一篇关于指针的介绍
- There is no pass-by-reference in Go : Go中没有引用传值
- Why golang garbage-collector not implement Generational and Compact gc? : 为什么不使用分代或者压缩的垃圾回收器?
- Modern garbage collection : Go的垃圾回收器
- Language Mechanics On Stacks And Pointers : William Kennedy写的系列, 一共四篇, 深入底层
- Structures : Go struct介绍
- Go调度详解 : 调度概览
- 也谈goroutine调度器 : 也谈谈Go的调度器
- 了解 Go 1.9 的类型别名 : Go 1.9中的类型别名
- Golang Internals Part 2 Nice benefits of named return values : 返回值采用命名方式的好处
- Go Interface 源码剖析 : interface源代码
- Survey of Rounding Implementations in Go : 四舍五入不简单
- Golang 热更新研究笔记 : 热更新笔记
- go empty interface :空接口
- 理解 go interface 的 5 个关键点 : 接口关键点
- Go汇编实战的坑 : 赞,国人给golang提patch
- golang语言编译的二进制可执行文件为什么比 C 语言大 :深入分析
- init functions in Go :init函数不简单
- Efficient Bit Manipulation in Go 1.9 : 有效的位操作
- Learn Go constants — A visual guide :可视化系列
- Go cheatsheet :小抄
- defer in go : 还有第二部分 part2
- Using named return variables to capture panics in Go : 返回panic的错误
- Go Reflection Creating Objects from Types :基本类型, part2 其它类型,
测试
- Go advanced testing tips & tricks : Go测试提示和技巧
- 5 simple tips and tricks for writing unit tests in #golang :写测试的5个技巧
- 5 Advanced Testing Techniques in Go : 5个测试的高级技术
调试和性能调优
- 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 包之内存布局 &version=12020810&nettype=WIFI&fontScale=100&pass_ticket=Dip3QhAoFuCXmvNUJBCqwg2%2FTrorNO8SzZpbc%2FtgnD4%3D): 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设计模式
- @L_404_106@ :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.RawMessage
和interface{}
开发技巧
- 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的
- 讨论 :当然不是go的bug,看看go的
- Access unexported fields in golang/reflect : 访问unexported的字段
- Why is port a string and not an integer :
- golang How the select worked when multiple channel involved :使用伪随机
- How to reuse request body of *http.Request : request.Body读完就不能再多了,如何重用?
面试题
- 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 前瞻 : 新特性