<story><title>How to start a Go project in 2023</title><url>https://boyter.org/posts/how-to-start-go-project-2023/</url></story><parent_chain><item><author>jzelinskie</author><text>Things I can&amp;#x27;t live without in a new Go project in no particular order:&lt;p&gt;- &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;golangci&amp;#x2F;golangci-lint&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;golangci&amp;#x2F;golangci-lint&lt;/a&gt; - meta-linter&lt;p&gt;- &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;goreleaser.com&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;goreleaser.com&lt;/a&gt; - automate release workflows&lt;p&gt;- &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;magefile.org&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;magefile.org&lt;/a&gt; - build tool that can version your tools&lt;p&gt;- &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;godoc.org&amp;#x2F;github.com&amp;#x2F;ory&amp;#x2F;dockertest&amp;#x2F;v3&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;godoc.org&amp;#x2F;github.com&amp;#x2F;ory&amp;#x2F;dockertest&amp;#x2F;v3&lt;/a&gt; - run containers for e2e testing&lt;p&gt;- &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;ecordell&amp;#x2F;optgen&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;ecordell&amp;#x2F;optgen&lt;/a&gt; - generate functional options&lt;p&gt;- &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;golang.org&amp;#x2F;x&amp;#x2F;tools&amp;#x2F;cmd&amp;#x2F;stringer&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;golang.org&amp;#x2F;x&amp;#x2F;tools&amp;#x2F;cmd&amp;#x2F;stringer&lt;/a&gt; - generate String()&lt;p&gt;- &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;mvdan.cc&amp;#x2F;gofumpt&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;mvdan.cc&amp;#x2F;gofumpt&lt;/a&gt; - stricter gofmt&lt;p&gt;- &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;stretchr&amp;#x2F;testify&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;stretchr&amp;#x2F;testify&lt;/a&gt; - test assertion library&lt;p&gt;- &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;rs&amp;#x2F;zerolog&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;rs&amp;#x2F;zerolog&lt;/a&gt; - logging&lt;p&gt;- &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;spf13&amp;#x2F;cobra&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;spf13&amp;#x2F;cobra&lt;/a&gt; - CLI framework&lt;p&gt;FWIW, I just lifted all the tools we use for &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;authzed&amp;#x2F;spicedb&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;authzed&amp;#x2F;spicedb&lt;/a&gt;&lt;p&gt;We&amp;#x27;ve also written some custom linters that might be useful for other folks: &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;authzed&amp;#x2F;spicedb&amp;#x2F;tree&amp;#x2F;main&amp;#x2F;tools&amp;#x2F;analyzers&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;authzed&amp;#x2F;spicedb&amp;#x2F;tree&amp;#x2F;main&amp;#x2F;tools&amp;#x2F;analyzers&lt;/a&gt;</text></item></parent_chain><comment><author>donatj</author><text>Cobra is just so… intense and complicated. It has it&amp;#x27;s place but  Google&amp;#x27;s Subcommands is enough for 99.9% of projects I&amp;#x27;ve worked on&lt;p&gt;- &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;google&amp;#x2F;subcommands&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;google&amp;#x2F;subcommands&lt;/a&gt;</text></comment>
<story><title>How to start a Go project in 2023</title><url>https://boyter.org/posts/how-to-start-go-project-2023/</url></story><parent_chain><item><author>jzelinskie</author><text>Things I can&amp;#x27;t live without in a new Go project in no particular order:&lt;p&gt;- &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;golangci&amp;#x2F;golangci-lint&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;golangci&amp;#x2F;golangci-lint&lt;/a&gt; - meta-linter&lt;p&gt;- &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;goreleaser.com&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;goreleaser.com&lt;/a&gt; - automate release workflows&lt;p&gt;- &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;magefile.org&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;magefile.org&lt;/a&gt; - build tool that can version your tools&lt;p&gt;- &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;godoc.org&amp;#x2F;github.com&amp;#x2F;ory&amp;#x2F;dockertest&amp;#x2F;v3&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;godoc.org&amp;#x2F;github.com&amp;#x2F;ory&amp;#x2F;dockertest&amp;#x2F;v3&lt;/a&gt; - run containers for e2e testing&lt;p&gt;- &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;ecordell&amp;#x2F;optgen&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;ecordell&amp;#x2F;optgen&lt;/a&gt; - generate functional options&lt;p&gt;- &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;golang.org&amp;#x2F;x&amp;#x2F;tools&amp;#x2F;cmd&amp;#x2F;stringer&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;golang.org&amp;#x2F;x&amp;#x2F;tools&amp;#x2F;cmd&amp;#x2F;stringer&lt;/a&gt; - generate String()&lt;p&gt;- &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;mvdan.cc&amp;#x2F;gofumpt&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;mvdan.cc&amp;#x2F;gofumpt&lt;/a&gt; - stricter gofmt&lt;p&gt;- &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;stretchr&amp;#x2F;testify&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;stretchr&amp;#x2F;testify&lt;/a&gt; - test assertion library&lt;p&gt;- &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;rs&amp;#x2F;zerolog&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;rs&amp;#x2F;zerolog&lt;/a&gt; - logging&lt;p&gt;- &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;spf13&amp;#x2F;cobra&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;spf13&amp;#x2F;cobra&lt;/a&gt; - CLI framework&lt;p&gt;FWIW, I just lifted all the tools we use for &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;authzed&amp;#x2F;spicedb&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;authzed&amp;#x2F;spicedb&lt;/a&gt;&lt;p&gt;We&amp;#x27;ve also written some custom linters that might be useful for other folks: &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;authzed&amp;#x2F;spicedb&amp;#x2F;tree&amp;#x2F;main&amp;#x2F;tools&amp;#x2F;analyzers&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;authzed&amp;#x2F;spicedb&amp;#x2F;tree&amp;#x2F;main&amp;#x2F;tools&amp;#x2F;analyzers&lt;/a&gt;</text></item></parent_chain><comment><author>etxm</author><text>You’ve gotta check out Charm’s  tools for CLI&amp;#x2F;TUI dev. They are doing some great work.&lt;p&gt;&lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;charm.sh&amp;#x2F;&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;charm.sh&amp;#x2F;&lt;/a&gt;</text></comment>