Go Wiki: ExperienceReports

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://go.dev/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

App and Game Development

Casting

Concurrency

Context

Declarations

Dependencies

Diagnostics and Debugging

Documentation

Education and Teaching

Error Handling

(This section is about writing if err != nil.)

Error Values

(This section is about additional error semantics beyond the Error() string method.)

File System

Generics

GoMobile

Immutability

Inter Process Communication

Large-Scale Software Development

Literals

Logging

Misc / Multiple

Modules

Performance

Porting

Slices

Syntax

Time

Tooling

Type System

Typed nils

Vendoring


This content is part of the Go Wiki.