Skip to content

Effective Go

Top Reference Material🔗

Here's the reference material I use to help guide me on basic style, design, and general idiomatic Go practices.

Resource Description
Go Style Guide A guide to writing Go code.
Uber Go Styleguide A thorough stylistic guide (opinionated, but great explanations on why)
Practical Go - Dave Cheney A great practical guide from a well-respected authority in the Go community

Effective Go🔗

Principles I've gleaned over-time and am quoting or bookmarking.

Don't hide the cost🔗

Source: Bill Kennedy in Ultimate Go [^readability]

If we are doing construction to a variable, we use value construction. Avoid pointer semantic construction if not in the return.

Example:

// clear visible cost of the allocation by value construction and passing of pointer back up the call stack
func createSomething() *something {
  u := something{
    name: "example",
  }
  return &u // <--- This makes clear the cost and allocation back up the callstack.
}
// cost is obscured by construction being a pointer
// and returning a value that is not clear to reader if value or pointer
func createSomething()*something {
  u := &something{
    name: "example",
  }
  return u // <--- Not good. Hides the cost, and require reading function further to find that this is a pointer.
}

Making cost obvious and visible is a big priority for readable maintainable code with a team.