<?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/category/go-2/</link><description>Recent content in Go on Brave New Geek</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 23 Jan 2018 21:15:17 -0600</lastBuildDate><atom:link href="https://bravenewgeek.com/category/go-2/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>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></channel></rss>