<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Go on Brave New Geek</title><link>https://bravenewgeek.com/tag/go/</link><description>Recent content in Go on Brave New Geek</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 29 Oct 2020 15:05:18 -0500</lastBuildDate><atom:link href="https://bravenewgeek.com/tag/go/index.xml" rel="self" type="application/rss+xml"/><item><title>Are We There Yet: The Go Generics Debate</title><link>https://bravenewgeek.com/are-we-there-yet-the-go-generics-debate/</link><pubDate>Mon, 24 Jul 2017 21:50:25 -0500</pubDate><guid>https://bravenewgeek.com/are-we-there-yet-the-go-generics-debate/</guid><description>&lt;p&gt;At GopherCon a couple weeks ago, Russ Cox gave a talk titled &lt;a href="https://www.youtube.com/watch?v=0Zbh_vmAKvk&amp;amp;index=4&amp;amp;list=PL2ntRZ1ySWBdD9bru6IR-_WXUgJqvrtx9"&gt;&lt;em&gt;The Future of Go&lt;/em&gt;&lt;/a&gt;, in which he discussed what the Go community might want to change about the language—particularly for the so-called &lt;em&gt;Go 2.0&lt;/em&gt; milestone—and the process for realizing those changes. Part of that process is identifying real-world use cases through &lt;a href="https://github.com/golang/go/wiki/ExperienceReports"&gt;experience reports&lt;/a&gt;, which turn an abstract problem into a concrete one and help the core team to understand its significance. Also mentioned in the talk, of course, were generics. Over the weekend, Dave Cheney posted &lt;a href="https://dave.cheney.net/2017/07/22/should-go-2-0-support-generics"&gt;&lt;em&gt;Should Go 2.0 support generics?&lt;/em&gt;&lt;/a&gt; Allow me to add to the noise.&lt;/p&gt;</description></item><item><title>So You Wanna Go Fast?</title><link>https://bravenewgeek.com/so-you-wanna-go-fast/</link><pubDate>Wed, 24 Feb 2016 19:30:14 -0600</pubDate><guid>https://bravenewgeek.com/so-you-wanna-go-fast/</guid><description>&lt;p&gt;I originally proposed this as a &lt;a href="https://www.gophercon.com/"&gt;GopherCon&lt;/a&gt; talk on writing “high-performance Go”, which is why it may seem rambling, incoherent, and—at times—not at all related to Go. The talk was rejected (probably because of the rambling and incoherence), but I still think it’s a subject worth exploring. The good news is, since it was rejected, I can take this where I want. The remainder of this piece is mostly the outline of that talk with some parts filled in, some meandering stories which may or may not pertain to the topic, and some lessons learned along the way. I think it might make a good talk one day, but this will have to do for now.&lt;/p&gt;</description></item><item><title>Breaking and Entering: Lose the Lock While Embracing Concurrency</title><link>https://bravenewgeek.com/breaking-and-entering-lose-the-lock-while-embracing-concurrency/</link><pubDate>Sun, 27 Dec 2015 19:12:53 -0600</pubDate><guid>https://bravenewgeek.com/breaking-and-entering-lose-the-lock-while-embracing-concurrency/</guid><description>&lt;p&gt;&lt;em&gt;This article originally appeared on Workiva’s engineering blog as a &lt;a href="https://techblog.workiva.com/tech-blog/breaking-and-entering-lose-lock-while-embracing-concurrency-part-i"&gt;two-part series&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Providing robust message routing was a priority for us at Workiva when building our distributed messaging infrastructure. This encompassed directed messaging, which allows us to route messages to specific endpoints based on service or client identifiers, but also topic fan-out with support for wildcards and pattern matching.&lt;/p&gt;
&lt;p&gt;Existing message-oriented middleware, such as RabbitMQ, provide varying levels of support for these but don’t offer the rich features needed to power Wdesk. This includes transport fallback with graceful degradation, tunable qualities of service, support for client-side messaging, and pluggable authentication middleware. As such, we set out to build a new system, not by reinventing the wheel, but by repurposing it.&lt;/p&gt;</description></item><item><title>Go Is Unapologetically Flawed, Here’s Why We Use It</title><link>https://bravenewgeek.com/go-is-unapologetically-flawed-heres-why-we-use-it/</link><pubDate>Wed, 20 May 2015 11:46:16 -0500</pubDate><guid>https://bravenewgeek.com/go-is-unapologetically-flawed-heres-why-we-use-it/</guid><description>&lt;p&gt;Go is decidedly polarizing. While many are &lt;a href="https://sendgrid.com/blog/convince-company-go-golang/"&gt;touting&lt;/a&gt; their &lt;a href="https://www.youtube.com/watch?v=bAQ9ShmXYLY"&gt;transition&lt;/a&gt; to Go, it has become equally fashionable to &lt;a href="http://nomad.so/2015/03/why-gos-design-is-a-disservice-to-intelligent-programmers/"&gt;criticize&lt;/a&gt; and &lt;a href="http://tmikov.blogspot.com/2015/02/you-dont-like-googles-go-because-you.html"&gt;mock&lt;/a&gt; the language. As Bjarne Stroustrup so eloquently put it, “There are only two kinds of programming languages: those people always bitch about and those nobody uses.” This adage couldn’t be more true. I apologize in advance for what appears to be just another in a long line of diatribes. I’m not really sorry, though.&lt;/p&gt;</description></item><item><title>Fast, Scalable Networking in Go with Mangos</title><link>https://bravenewgeek.com/fast-scalable-networking-in-go-with-mangos/</link><pubDate>Sat, 10 Jan 2015 17:21:19 -0600</pubDate><guid>https://bravenewgeek.com/fast-scalable-networking-in-go-with-mangos/</guid><description>&lt;p&gt;In the past, I’ve looked at nanomsg and why it’s a formidable alternative to the well-regarded &lt;a href="http://www.bravenewgeek.com/distributed-messaging-with-zeromq/"&gt;ZeroMQ&lt;/a&gt;. Like ZeroMQ, nanomsg is a native library which markets itself as a way to build fast and scalable networking layers. I won’t go into detail on how nanomsg accomplishes this since my analysis of it already covers that fairly extensively, but instead I want to talk about a Go implementation of the protocol called &lt;a href="https://github.com/gdamore/mangos"&gt;Mangos&lt;/a&gt;. ((Full disclosure: I am a contributor on the Mangos project, but only because I was a user first!)) If you’re not familiar with nanomsg or Scalability Protocols, I recommend reading my &lt;a href="http://www.bravenewgeek.com/a-look-at-nanomsg-and-scalability-protocols/"&gt;overview&lt;/a&gt; of those first.&lt;/p&gt;</description></item><item><title>Iris Decentralized Cloud Messaging</title><link>https://bravenewgeek.com/iris-decentralized-cloud-messaging/</link><pubDate>Tue, 22 Jul 2014 22:34:31 -0600</pubDate><guid>https://bravenewgeek.com/iris-decentralized-cloud-messaging/</guid><description>&lt;p&gt;A couple weeks ago, I published a rather extensive &lt;a href="http://www.bravenewgeek.com/dissecting-message-queues/"&gt;analysis&lt;/a&gt; of numerous message queues, both brokered and brokerless. Brokerless messaging is really just another name for peer-to-peer communication. As we saw, the difference in message latency and throughput between peer-to-peer systems and brokered ones is several orders of magnitude. ZeroMQ and nanomsg are able to reliably transmit &lt;em&gt;millions&lt;/em&gt; of messages per second at the expense of guaranteed delivery.&lt;/p&gt;
&lt;p&gt;Peer-to-peer messaging is decentralized, scalable, and fast, but it brings with it an inherent complexity. There is a dichotomy between how brokerless messaging is conceptualized and how distributed systems are actually &lt;em&gt;built&lt;/em&gt;. Distributed systems are composed of services like applications, databases, caches, etc. Services are composed of instances or nodes—individually addressable hosts, either physical or virtual. The key observation is that, conceptually, the unit of interaction lies at the &lt;em&gt;service level&lt;/em&gt;, not the instance level. We don’t care about &lt;em&gt;which&lt;/em&gt; database server we interact with, we just want to talk to &lt;em&gt;a&lt;/em&gt; database server (or perhaps multiple). We’re concerned with logical groups of nodes.&lt;/p&gt;</description></item><item><title>Dissecting Message Queues</title><link>https://bravenewgeek.com/dissecting-message-queues/</link><pubDate>Mon, 07 Jul 2014 00:33:53 -0500</pubDate><guid>https://bravenewgeek.com/dissecting-message-queues/</guid><description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;Disclaimer (10/29/20)&lt;/strong&gt; – The benchmarks and performance analysis presented in this post should not be relied on. This post was written roughly six years ago, and at the time, was just the result of my exploration of various messaging systems. The benchmarks are not implemented in a meaningful way, which I discussed in a &lt;a href="https://bravenewgeek.com/benchmark-responsibly/"&gt;follow-up post&lt;/a&gt;. This post will remain for posterity and learning purposes, but I do not claim that this information is accurate or useful.&lt;/em&gt;&lt;/p&gt;</description></item></channel></rss>