<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Matronator</title>
    <description>The latest articles on DEV Community by Matronator (@matronator).</description>
    <link>https://dev.to/matronator</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F382156%2F9783bb58-bb7e-4c06-8dac-1da86923d0ae.png</url>
      <title>DEV Community: Matronator</title>
      <link>https://dev.to/matronator</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/matronator"/>
    <language>en</language>
    <item>
      <title>Why I Like Go</title>
      <dc:creator>Matronator</dc:creator>
      <pubDate>Tue, 29 Jul 2025 01:10:08 +0000</pubDate>
      <link>https://dev.to/matronator/why-i-like-go-225m</link>
      <guid>https://dev.to/matronator/why-i-like-go-225m</guid>
      <description>&lt;p&gt;A while back, I wrote an article titled &lt;a href="https://dev.to/matronator/why-i-dislike-go-27i1"&gt;Why I Dislike Go&lt;/a&gt;. It was an honest reflection of my frustrations at the time, after trying to use Go in some personal projects. I called out what I saw as shortcomings - verbose error handling, lack of generics (at the time), limited expressiveness, and a rigid design philosophy that felt like it was holding me back more than helping.&lt;/p&gt;

&lt;p&gt;But things change.&lt;/p&gt;

&lt;p&gt;I've since had the chance to use Go more extensively, and to explore some of its more modern evolutions, especially through &lt;strong&gt;XGo&lt;/strong&gt; (formerly Go+). With more experience under my belt, I feel it’s only fair to revisit my earlier stance and share how my perspective has evolved. This article is not a retraction, but rather a follow-up - a continuation of my journey with Go, and why I’ve come to &lt;em&gt;like&lt;/em&gt; it.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9l3ffj9j3lr1gnmeneyq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9l3ffj9j3lr1gnmeneyq.jpg" alt="Simple" width="270" height="255"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Paradox of Go: Restriction Breeds Simplicity
&lt;/h2&gt;

&lt;p&gt;One of the things that annoyed me the most originally was Go’s insistence on simplicity. It felt restrictive. I wanted tools for abstraction, generics, custom error types with stack traces, and all the bells and whistles I was used to in languages like TypeScript, C#, or even PHP.&lt;/p&gt;

&lt;p&gt;But over time, I started to appreciate what Go &lt;em&gt;doesn’t&lt;/em&gt; let you do. The simplicity isn’t just a constraint - it’s a design decision that leads to consistency, readability, and ease of onboarding for teams. The codebase is boring in the best possible way. After revisiting some Go projects months later, I found them easier to read and understand than many of my TypeScript or C# ones.&lt;/p&gt;

&lt;p&gt;Go’s philosophy grows on you - and once you start thinking in Go, the clarity is liberating.&lt;/p&gt;




&lt;h2&gt;
  
  
  Generics: A Game Changer
&lt;/h2&gt;

&lt;p&gt;Since I wrote that original post, generics have landed in Go. While they’re not as powerful or flexible as in Rust or C#, they &lt;em&gt;are&lt;/em&gt; very Go-like: simple, focused, and designed to solve specific use cases rather than introduce abstraction for abstraction's sake.&lt;/p&gt;

&lt;p&gt;They’ve enabled cleaner, more reusable code without sacrificing readability. I still wouldn’t use them everywhere - and Go doesn’t want you to - but when you need them, they’re there. And they work.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcyn2i25spiv0z83uwxpy.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcyn2i25spiv0z83uwxpy.jpg" alt="That one cousin" width="647" height="585"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  XGo (Go+): Go’s Friendly Cousin
&lt;/h2&gt;

&lt;p&gt;One big shift in my attitude came from discovering &lt;a href="https://github.com/goplus/xgo" rel="noopener noreferrer"&gt;XGo&lt;/a&gt;, the language formerly known as Go+. XGo is like Go’s more expressive younger sibling - it builds on Go’s foundation but does away with some of Go's more questionable or annoying syntax quirks.&lt;/p&gt;

&lt;p&gt;For instance compare these two snippets and tell me that XGo isn't just nicer to look at and much easier to write than regular Go:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="c"&gt;// XGo&lt;/span&gt;
&lt;span class="n"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;17&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;19&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"Hi"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"XGo"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="c"&gt;// Go&lt;/span&gt;
&lt;span class="n"&gt;arr&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;17&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;19&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="k"&gt;map&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"Hi"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"XGo"&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you’re coming from a scripting or dynamic language background, XGo feels more welcoming, without losing Go’s strong typing and performance. You can write Go-style code, but with less boilerplate and more flexibility. It’s especially great for educational purposes, prototyping, and scientific or data-heavy applications.&lt;/p&gt;

&lt;p&gt;For me, XGo rekindled my interest in Go by showing me what's possible with a slightly more expressive syntax, while still staying in the Go ecosystem.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tooling and Ecosystem: Fast, Reliable, and Getting Better
&lt;/h2&gt;

&lt;p&gt;One thing that never needed changing was Go’s tooling. &lt;code&gt;go build&lt;/code&gt;, &lt;code&gt;go test&lt;/code&gt;, and &lt;code&gt;go fmt&lt;/code&gt; remain some of the smoothest developer experiences I’ve had. Everything just works, and it works fast.&lt;/p&gt;

&lt;p&gt;The ecosystem has also matured. With the rise of microservices and containers, Go has firmly cemented itself as a go-to language for backend development. Libraries and frameworks are more plentiful and higher quality than when I first dipped my toes in.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts: From Critic to Convert
&lt;/h2&gt;

&lt;p&gt;So, do I take back everything I said in my old article?&lt;/p&gt;

&lt;p&gt;Not entirely. I still believe some of the critiques I made were valid - at least for how I felt and coded at the time. But Go is a language that rewards patience. It’s not flashy, but it’s solid. And in a world of over-engineered abstractions, Go’s “boring” approach is starting to feel more like a breath of fresh air.&lt;/p&gt;

&lt;p&gt;If you bounced off Go in the past, I encourage you to give it another shot. Try it with a fresh mindset. Or better yet, dip your toes into &lt;a href="https://github.com/goplus/xgo" rel="noopener noreferrer"&gt;XGo&lt;/a&gt; and see how expressive Go’s future might be.&lt;/p&gt;

&lt;p&gt;You might be surprised - like I was.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have thoughts or similar experiences with Go or XGo? I’d love to hear about them in the comments!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>xgo</category>
      <category>programming</category>
    </item>
    <item>
      <title>Why I dislike Go</title>
      <dc:creator>Matronator</dc:creator>
      <pubDate>Wed, 17 May 2023 17:36:03 +0000</pubDate>
      <link>https://dev.to/matronator/why-i-dislike-go-27i1</link>
      <guid>https://dev.to/matronator/why-i-dislike-go-27i1</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Update March 2024&lt;/strong&gt; - Since this article was written, I have worked a bit more with Go and found to actually enjoy the language despite my initial dislike of some of its quirks mentioned here.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;As a programmer, I have worked with many programming languages over the years, and I have to say that Go (or golang) is probably one of my least favorite. In this article, I'll explain some of the reasons why I dislike Go, based on my own experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Syntax
&lt;/h2&gt;

&lt;p&gt;One of the most significant issues I have with Go is its syntax. While it may appear simple at first, it can be unintuitive and confusing. The way it handles errors and null values can be frustrating, and the use of the := operator for variable declaration can be hard to read, especially for those coming from other programming languages. Additionally, Go lacks some essential features that are available in other modern programming languages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lack of Object-Oriented Features
&lt;/h2&gt;

&lt;p&gt;Go's lack of proper object-oriented features is another significant issue that I have with the language. While it does use structs and interfaces to implement object-oriented concepts, it doesn't have traditional class hierarchies, which makes it challenging to write code that adheres to traditional object-oriented principles. The lack of classes and ability to extend them makes the language really hard to work with on more complex projects. This can be frustrating for developers who are used to working with other programming languages that have more robust object-oriented support.&lt;/p&gt;

&lt;h2&gt;
  
  
  Difficulty writing Object-Oriented code
&lt;/h2&gt;

&lt;p&gt;In addition, Go's approach to object-oriented programming can make it difficult to write expressive and reusable code. For example, it doesn't support inheritance, which limits the ability to reuse code and create class hierarchies. Furthermore, it doesn't have method overloading or default parameter values, which makes it challenging to write reusable code..&lt;/p&gt;

&lt;h2&gt;
  
  
  Error handling and no exceptions
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbuj2cxz02dhxe9q1bpmw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbuj2cxz02dhxe9q1bpmw.png" alt="Source: https://knowyourmeme.com/photos/1167690-oh-no-its-retarded" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another issue with Go is its error handling and lack of exceptions. While it's good that Go encourages checking errors, the way it handles it is a disaster. Instead of using exceptions like almost every other modern language, they went for checking errors with if conditions... This can make it difficult to handle errors gracefully and leads to (a lot) more code clutter. I would like Go much more if they added regular exceptions like any normal language, but I don't see that happening.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F26ooaikmidjz3rx2lf9w.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F26ooaikmidjz3rx2lf9w.jpg" alt="Source: https://mkfeuhrer.medium.com/handle-errors-the-right-way-golang-9d9fb3ea687e" width="702" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Organizing project
&lt;/h2&gt;

&lt;p&gt;Go's project organization is another area that I find frustrating. There's no standard way (that I know of) of organizing your project files. Every third-party library I checked has a different approach. This can make the project a mess and hard to navigate, especially for larger projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Aesthetics and lack of features
&lt;/h2&gt;

&lt;p&gt;Finally, I find the Go programming language to be aesthetically unappealing to put it mildly. Its naming conventions and package organization can be inconsistent and confusing, leading to frustration. Moreover, it lacks some of the elegant and expressive features found in other modern languages, making it feel cumbersome to use. Actually it lacks most of the features from other languages and the feature set it has is very limited (there's only one looping mechanism, no generics, no ternary operator, no default values for parameters, no function overloading, etc...).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqtrilofy334db2jxnde4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqtrilofy334db2jxnde4.png" alt="All about the looks..." width="800" height="815"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  It's not all bad
&lt;/h2&gt;

&lt;p&gt;I don't dislike everything about Go though. Some features are quite nice. Like multiple return values, easy concurrency, fast compile times, that it compiles to executable binaries on every platform and speed, performance and small file size of the compiled programs.&lt;/p&gt;

&lt;p&gt;In conclusion, while Go has its strengths, such as its built-in concurrency features and its focus on simplicity and performance, it's not a language that I enjoy working with. Go's syntax, lack of proper object-oriented features, difficulty in writing expressive and reusable code, error handling and lack of exceptions, messy project organization, and ugly syntax make it challenging for me to work with. Nonetheless, the choice of programming language ultimately depends on the specific needs of the project and the preferences of the developer.&lt;/p&gt;




&lt;p&gt;Be sure to check out my latest project &lt;a href="https://mtrgen.com" rel="noopener noreferrer"&gt;MTRGen&lt;/a&gt; - a PHP file generator.&lt;/p&gt;

&lt;p&gt;Visit my &lt;a href="https://matronator.com" rel="noopener noreferrer"&gt;portfolio&lt;/a&gt; if you want to see more projects like this and more.&lt;/p&gt;

</description>
      <category>go</category>
      <category>programming</category>
      <category>devjournal</category>
    </item>
  </channel>
</rss>
