ExperienceReports

Sindre Røkenes Myren edited this page Jul 26, 2017 · 58 revisions
Clone this wiki locally

This page collects experience reports about problems with Go that might inform our design of solutions to those problems. These reports should focus on the problems: they should not focus on and need not propose solutions. To propose solutions, see the proposal process.

We hope to use these experience reports to understand where people are having trouble writing Go, to help us prioritize future changes to the Go ecosystem. (We do not promise to reply to these. If you need immediate help answering questions about Go, see https://golang.org/help/ for resources.)

The best experience reports tell: (1) what you wanted to do, (2) what you actually did, and (3) why that wasn’t great, illustrating those by real concrete examples, ideally from production use. Please write these reports about the problems most significant to you, post them on your own blog, or on Medium, or as a Github Gist (use a .md extension for Markdown), or as a publicly-readable Google doc, and then link them here. (Talk videos or slides are also welcome, although they are not as convenient for us to digest.)

If you do not have permission to edit the wiki to add an article to this list, please file an issue.

Please keep the overall page sorted alphabetically by section (Error Handling before Logging, and so on). Within a section, please keep articles sorted chronologically. It's helpful to include a one-phrase summary of the point of each article.

Add new sections as appropriate.

Table of Contents

Context

Declarations

Dependencies

Diagnostics and Debugging

Documentation

Error Handling

File System

Generics

Immutability

Large-Scale Software Development

Logging

Performance

  • Kevin Burke, "Real Life Go Benchmarking," trying to explain to the average developer how to use tools like pprof, maybe this could be easier. July 2016.
  • Nathan Kerr, "Concurrency Slower?", shows how to use Go's testing, benchmarking, and profiling tools to improve the performance of a concurrent implementation of a function. April 2017.

Porting

  • Shannon Pekary, "Why GOPP," an attempt to create a 'class' keyword that simply makes a struct to also be an interface to make porting code from object-oriented languages much easier.

Time

Type System