Skip to content
View NateDimick's full-sized avatar
😎
Wear sunscreen
😎
Wear sunscreen

Block or report NateDimick

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Please don't include any personal information such as legal names or email addresses. Maximum 100 characters, markdown supported. This note will be visible to only you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
NateDimick/README.md

I'm Nate and Sometimes I Actually Write Code

... And when I do, it's either on company time or it ends up here.

Key descriptors about me:

  • Gopher
    • party gopher
  • (Cult of the Party Parrot Follower)
  • Primarily a backend engineer, but 🧑 cool frontend technologies like Svelete, Wails and HTMX
  • I enjoy challenges and mastering new technologies
  • I think Java is icky
  • I think Python is icky without type hints
  • I prefer TS over JS but hate how complicated the build configs are
  • I have a little portfolio site with some other factoids: natedimick.com

Top Languages Card

Github Stats

Go Style Guide

These are my personal rules for writing good go. It will evolve over time.

Formatting

go fmt includes the only style rules for go that should be applied to any project. Additional rules add unnecessary pain. go fmt should always be applied to all checked-in code.

Style

  • new(type) is always preferred over &type{} when allocating an empty struct. When the struct is populated, &type{key: value} is preferred.

  • any is preferred over interface{} when defining types

  • When a function returns only an error, it should be checked for inline. Example:

if err := json.Unmarshal(myBytes, &myStruct); err != nil {
  //handle the error
}

This is also preferred for if/else statements where a value is returned by the function, but is not used outside of the if/else block

  • Struct comments should be inline with the field, not above.
  • Structs should never have getters or setters, unless they do something manipulative besides getting and setting
  • interface definitions should always include named parameters
  • named return values should only be used when a return value may be modified in a deferred statement.
  • never naked return with named returns

Patterns

  • The best way to apply configuration is through the functional configuration model. Example:
func NewThing(opts ...func(*Config) *Thing {
  cfg := defaultConfig
  for _, fn := range opts {
    fn(cfg)
  }
  // finish config and return
}
  • passing values through context.Context is a bad idea and should never be done. Use more explicit method of data transfer.

Pinned Loading

  1. funholidaysapi funholidaysapi Public

    Gin API with an Svelte frontend. Your one-stop shop for over 7000 of the most fun, obscure and useless annual holidays

    Go 5 1

  2. panda-game panda-game Public

    a .io online multiplayer game based on takenoko - eventually

    Go

  3. Sliggooey Sliggooey Public

    A custom desktop client for Pokemon Showdown

    Go

  4. thanos-tabs thanos-tabs Public

    chrome extension to snap away half your tabs

    JavaScript

  5. chupeverything chupeverything Public

    @chupeverything : a cursed twitterbot that nobody asked for

    Python

  6. jira-worklogger jira-worklogger Public

    one-click tool to make accurately logging your time on jira stories easier

    Go