年终盘点!2017年超有价值的Golang文章
2018-01-05 17:38
309 查看
转自:http://colobu.com/2017/12/28/top-golang-articles-of-2017/
马上就要进入2018年了,作为年终的盘点,本文列出了一些2017年的关于Go编程的一些文章,并加上简短的介绍。
文章排名不分先后, 文章也不一定完全按照日期来排列。我按照文章的大致内容分了类,便于查找。
文章主要从golangweekly、gocn每日新闻、medium、reddit、twitter、、知名博主的文章搜集而来。如果你发现好的2017年的Go文章没有列出来,欢迎在评论中粘帖出来,我会加入到文章正文中。
本文主要列出的是文章,2017年也涌现出来很多优秀的库和工具,但是不是本文要介绍的内容,所以没有列出来。
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设计模式
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: 使用
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:
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 前瞻: 新特性
马上就要进入2018年了,作为年终的盘点,本文列出了一些2017年的关于Go编程的一些文章,并加上简短的介绍。
文章排名不分先后, 文章也不一定完全按照日期来排列。我按照文章的大致内容分了类,便于查找。
文章主要从golangweekly、gocn每日新闻、medium、reddit、twitter、、知名博主的文章搜集而来。如果你发现好的2017年的Go文章没有列出来,欢迎在评论中粘帖出来,我会加入到文章正文中。
本文主要列出的是文章,2017年也涌现出来很多优秀的库和工具,但是不是本文要介绍的内容,所以没有列出来。
语言规范
CloseChannels 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其它类型
测试
Goadvanced testing tips & tricks: Go测试提示和技巧
5
simple tips and tricks for writing unit tests in #golang:写测试的5个技巧
5
Advanced Testing Techniques in Go: 5个测试的高级技术
调试和性能调优
Profilingand 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的优化
标准库
Pluginsin 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:使用模板
编程模式
FunctionalOptions 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.RawMessage和
interface{}
开发技巧
Addingcustom 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读完就不能再多了,如何重用?
面试题
golang面试题: 诺唯总结的11个面试题, 解答
Golang精编100题:选择题和填空题,试试看
第三方库
InfiniteSets 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建千亿级微服务的实践:今日头条的微服务
版本新特性
5things 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 前瞻: 新特性
相关文章推荐
- 年终盘点!2017年超有价值的Golang文章
- 年终盘点:2017年中国互联网的十个关键词 人工智能、大数据上榜
- 超有价值的Golang文章总结
- 5G年终盘点 | 2017年里的9个“万万没想到”
- 2017年大数据年终盘点:开源工具、MySQL和Python是最大赢家!
- 新手站长的建站经历,比SEO文章更有价值
- 盘点2017年晋升为Apache TLP的大数据相关项目
- 我的2017年文章汇总——机器学习篇
- 云计算平台2017年盘点——真正成为新技术新应用的基础架构
- 2017年AI技术盘点:关键进展与趋势
- 2017年AI关键技术盘点:AlphaGo/GAN/Capsule/基于DL的CTR预估/CV/NLP
- 2017年AI技术盘点:关键进展与趋势
- 盘点:2011年物联网最有价值的数据
- 年终盘点|知数堂2017年度好文
- 2017人工智能与机器学习年终盘点(重要工具资源汇总)
- 2017年数据库技术h5斗牛棋牌源码盘点
- 有价值的文章收录(好好学习,天天向上)
- 值得回味的文章:2004非主流搜索经济不完全盘点(转载)
- 八种创建等高布局的方法,非常有价值的文章