<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/">
	<channel>
		<title>Building Web Apps with GO | Infinum</title>
		<atom:link href="https://infinum.com/blog/building-web-apps-with-go/feed/" rel="self" type="application/rss+xml" />
		<link>https://infinum.com/blog/building-web-apps-with-go/</link>
		<description>Building digital products</description>
		<lastBuildDate>Thu, 30 Apr 2026 13:44:05 +0000</lastBuildDate>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>

					<item>
				<image>
					<url>8002https://infinum.com/uploads/2017/02/building-web-apps-with-go-0.webp</url>
				</image>
				<title>Building Web Apps with GO</title>
				<link>https://infinum.com/blog/building-web-apps-with-go/</link>
				<pubDate>Tue, 04 Oct 2016 18:00:00 +0000</pubDate>
				<dc:creator>Ivan Lučin</dc:creator>
				<guid isPermaLink="false">https://infinum.com/the-capsized-eight/building-web-apps-with-go/</guid>
				<description>
					<![CDATA[<p>GO is a newcomer to the world of programming. Google's open source, statically typed programming language that provides you with some nice features.</p>
<p>The post <a href="https://infinum.com/blog/building-web-apps-with-go/">Building Web Apps with GO</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</description>
				<content:encoded>
					<![CDATA[<div
	class="wrapper"
	data-id="es-224"
	 data-animation-target='inner-items'>
		
			<div class="wrapper__inner">
			<div class="block-blog-content js-block-blog-content">
	
<div class="block-blog-content-sidebar" data-id="es-92">
	</div>

<div class="block-blog-content-main">
	
<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-95"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-93">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-94'
	>
	GO is a newcomer to the world of programming. An open source, statically typed programming language developed by Google that provides you with some nice features like garbage collection, memory safety and facilities for writing concurrent programs.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-98"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-96">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-97'
	>
	If you’re a developer, you’ve probably heard about it and you’re interested in a more personal opinion. Well, it’s a <strong>“C(++) like” language with an improved, simplified syntax and a few unusual features</strong> that make it stand out. It is a pretty controversial language in my opinion, taken some of its core design decisions. For example:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-101"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-99">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-100'
	>
	<li>You expose a public method from the module by naming it so that the first letter is uppercase</li><li>It enforces a specific directory structure of packages by using domain names as directory names</li><li>It doesn’t allow you to expose an undocumented public API</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-104"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-102">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-103'
	>
	Upon first encounter, developers are usually horrified by this, but the philosophy behind the language is clear. To provide simple but powerful constructs with well-defined conventions, <strong>making developers more productive</strong> (and happier).</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-107"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-105">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-106'
	>
	Okay, let’s make a quick overview of the GO ecosystem and dive a bit deeper.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-110"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-108">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-109'
	>
	About the language</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-113"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-111">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-112'
	>
	The first thing everybody notices while learning a new language is its syntax. GO has a pretty simple and concise syntax, making it a great language to start with. You’re probably familiar with the overwhelming feeling when you’re just figuring out a new programming language. After I did “<a href="https://tour.golang.org/welcome/1">A Tour of GO</a>” I wasn’t terrified. On the contrary, I felt like everything just made sense. Authors of the language gave their best to <strong>keep things simple</strong>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-116"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-114"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-stretch" data-id="es-115">
	<picture class="image__picture block-media__image-picture">
												<img
					src="https://infinum.com/uploads/2017/02/building-web-apps-with-go-1.webp"
					class="image__img block-media__image-img"
					alt=""
										height="308"
															width="710"
										loading="lazy"
					 />
					</picture>

			<figcaption class="image__figcaption block-media__image-figcaption">
			Gopher, GO’s lovable mascot		</figcaption>
	</figure></div></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-119"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-117">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-118'
	>
	In the world of GO, everything is made out of packages which are usually designed following the main <a href="https://en.wikipedia.org/wiki/Unix_philosophy">UNIX philosophy</a> – <strong>“Do one thing and do it well”</strong>. This leads to reusable and understandable code which is a great thing, especially if you’re still learning how to program.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-122"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-120">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-121'
	>
	GO’s type system is also pretty straightforward. It revolves around structs (data objects) and methods (behavior) usually attached to those data structs. A data struct with a set of methods can satisfy an interface which is used elsewhere to achieve decoupling. This is similar to the concept of “class” most developers are familiar with, but it is done quite differently. One thing I really like about GO’s type system is that <strong>it enforces good object-oriented practices</strong> like <a href="https://en.wikipedia.org/wiki/Composition_over_inheritance">“Composition over inheritance”</a>. On the other hand, people starting with GO often complain that it’s missing object-oriented features and feel constrained with its approach. You’ve probably heard similar remarks made about JavaScript’s prototype inheritance.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-125"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-123">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-124'
	>
	One cool GO feature I really like is function closure. You can use it just like you would in JavaScript. Check out this Fibonacci calculator using a function closure to encapsulate the last iteration state:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-127"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-go github-light" data-language="go" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">package</span><span class="token"> </span><span class="token" style="color: #6f42c1;">main</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #6f42c1;">fmt</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> fibonacci returns a function that returns fibonacci numbers </span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token" style="color: #6a737d;">//</span><span class="token" style="color: #6a737d;"> from each successive call</span><span class="token" style="color: #6a737d;">
</span></span><span class="line"><span class="token" style="color: #d73a49;">func</span><span class="token"> </span><span class="token" style="color: #6f42c1;">fibonacci</span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">func</span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">int</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #24292e;">first</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #24292e;">second</span><span class="token"> </span><span class="token" style="color: #d73a49;">:=</span><span class="token"> </span><span class="token">0</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #005cc5;">1</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #d73a49;">return</span><span class="token"> </span><span class="token" style="color: #d73a49;">func</span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token" style="color: #d73a49;">int</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #24292e;">ret</span><span class="token"> </span><span class="token" style="color: #d73a49;">:=</span><span class="token"> </span><span class="token" style="color: #24292e;">first</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #24292e;">first</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #24292e;">second</span><span class="token"> </span><span class="token" style="color: #d73a49;">=</span><span class="token"> </span><span class="token" style="color: #24292e;">second</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #24292e;">first</span><span class="token" style="color: #d73a49;">+</span><span class="token" style="color: #24292e;">second</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #d73a49;">return</span><span class="token"> </span><span class="token" style="color: #24292e;">ret</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">func</span><span class="token"> </span><span class="token" style="color: #6f42c1;">main</span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #24292e;">f</span><span class="token"> </span><span class="token" style="color: #d73a49;">:=</span><span class="token"> </span><span class="token">fibonacci</span><span class="token">(</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #d73a49;">for</span><span class="token"> </span><span class="token" style="color: #24292e;">i</span><span class="token"> </span><span class="token" style="color: #d73a49;">:=</span><span class="token"> </span><span class="token">0</span><span class="token">;</span><span class="token"> </span><span class="token" style="color: #24292e;">i</span><span class="token"> </span><span class="token" style="color: #d73a49;">&lt;</span><span class="token"> </span><span class="token" style="color: #005cc5;">10</span><span class="token">;</span><span class="token"> </span><span class="token" style="color: #24292e;">i</span><span class="token" style="color: #d73a49;">++</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">        </span><span class="token" style="color: #24292e;">fmt</span><span class="token">.</span><span class="token">Println</span><span class="token">(</span><span class="token">f</span><span class="token">(</span><span class="token">)</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-130"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-128">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-129'
	>
	Since GO is a statically typed language, you can expect a minimal amount of runtime errors. At Infinum, we’re mostly working with dynamic languages so runtime errors are the only errors we’re dealing with. Because of that, writing GO programs felt like a pretty relaxed job, once you get a piece of code to compile, it just works.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-133"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-131">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-132'
	>
	GO is all about concurrency, but <strong>writing concurrent programs is hard</strong>. To create a concurrent program one would usually run a thread that communicates with other threads through shared data or message passing mechanisms. GO tries to simplify this process by introducing two new concepts right into the language:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-136"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-134">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-135'
	>
	<li><a href="https://gobyexample.com/goroutines">GO routines</a> &#8211; a lightweight thread of execution</li><li><a href="https://gobyexample.com/channels">Channels</a> &#8211; a connection facility between GO routines</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-139"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-137">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-138'
	>
	Go ahead and <a href="https://tour.golang.org/concurrency">try them out</a>. It’s really simple.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-142"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-140">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-141'
	>
	GO comes with a nice set of development tools like a blazing fast compiler, code formatter, debugger, package manager etc. For example, there’s <a href="https://golang.org/cmd/gofmt/">GOfmt</a> which formats your code according to standard rules. This is not optional → you have to obey GO’s conventions. You can easily integrate GO tools with any popular text editor/IDE like Atom, Sublime, Vim or others.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-145"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-143">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-144'
	>
	Web development with GO</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-148"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-146">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-147'
	>
	GO is well suited for web development. Its standard library is backed by a great <a href="https://golang.org/pkg/net/http/">net/http</a> package providing you with everything you need to implement a simple, concurrent web server in just a few lines of code.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-151"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-149">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-150'
	>
	Here’s a simple web server example:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-153"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-code">
	<pre class="phiki language-go github-light" data-language="go" style="background-color: #fff;color: #24292e;"><code><span class="line"><span class="token" style="color: #d73a49;">package</span><span class="token"> </span><span class="token" style="color: #6f42c1;">main</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">import</span><span class="token"> </span><span class="token">(</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #6f42c1;">io</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #6f42c1;">net/http</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">
</span></span><span class="line"><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">func</span><span class="token"> </span><span class="token" style="color: #6f42c1;">hello</span><span class="token">(</span><span class="token" style="color: #e36209;">w</span><span class="token"> </span><span class="token" style="color: #6f42c1;">http</span><span class="token">.</span><span class="token" style="color: #6f42c1;">ResponseWriter</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #e36209;">r</span><span class="token"> </span><span class="token" style="color: #d73a49;">*</span><span class="token" style="color: #6f42c1;">http</span><span class="token">.</span><span class="token" style="color: #6f42c1;">Request</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #24292e;">io</span><span class="token">.</span><span class="token">WriteString</span><span class="token">(</span><span class="token" style="color: #24292e;">w</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">Hello world!</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span><span class="line"><span class="token" style="color: #d73a49;">func</span><span class="token"> </span><span class="token" style="color: #6f42c1;">main</span><span class="token">(</span><span class="token">)</span><span class="token"> </span><span class="token">{</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #24292e;">mux</span><span class="token"> </span><span class="token" style="color: #d73a49;">:=</span><span class="token"> </span><span class="token" style="color: #24292e;">http</span><span class="token">.</span><span class="token">NewServeMux</span><span class="token">(</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #24292e;">mux</span><span class="token">.</span><span class="token">HandleFunc</span><span class="token">(</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">/</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #24292e;">hello</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">    </span><span class="token" style="color: #24292e;">http</span><span class="token">.</span><span class="token">ListenAndServe</span><span class="token">(</span><span class="token" style="color: #032f62;">&quot;</span><span class="token" style="color: #032f62;">:8000</span><span class="token" style="color: #032f62;">&quot;</span><span class="token">,</span><span class="token"> </span><span class="token" style="color: #24292e;">mux</span><span class="token">)</span><span class="token">
</span></span><span class="line"><span class="token">}</span><span class="token">
</span></span><span class="line"><span class="token">
</span></span></code></pre></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-156"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-154">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-155'
	>
	But you probably need something more than just a standard library for your web projects, you’re probably looking for a framework.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-159"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-157">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-158'
	>
	A few popular ones are:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-162"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-160">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-161'
	>
	<li><a href="https://github.com/gorilla/mux">gorrilla/mux</a>, <a href="https://github.com/go-martini/martini">martini</a>, <a href="https://github.com/urfave/negroni">negroni</a>, <a href="https://github.com/gin-gonic/gin">gin</a> &#8211; routing with extendable middleware</li><li><a href="https://github.com/revel/revel">revel</a>, <a href="https://github.com/kataras/iris">iris</a> &#8211; full frameworks with routing, view rendering, sessions, REST APIs, websockets etc.</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-165"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-163">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-164'
	>
	While some give you just basic routing support, others are trying to solve all standard problems in backend web development. In the GO ecosystem, you won’t find massive MVC frameworks (like <a href="http://rubyonrails.org/">Ruby on Rails</a>) that solve just about everything, since that doesn’t fit well with the core philosophy of the language. You’ll find <strong>simpler and more focused packages</strong> because <a href="https://blog.golang.org/gopher">Gophers</a> believe that’s the way software should be built.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-168"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-166">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-167'
	>
	While developing backend apps, you usually need a data persistence layer of some sort. A quick Google search will give you something like:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-171"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-169">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-170'
	>
	<li><a href="https://github.com/jinzhu/gorm">gorm</a> &#8211; full ORM library</li><li><a href="https://github.com/go-gorp/gorp">gorp</a> &#8211; simpler persistence layer</li><li><a href="https://github.com/jmoiron/sqlx">sqlx</a> &#8211; a low-level extension to GO’s standard <a href="https://golang.org/pkg/database/sql/">database/sql</a> package</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-174"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-172">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-173'
	>
	And what about view rendering? Well, there’s a cool <a href="https://golang.org/pkg/html/template/">html/template</a> package giving you basic building blocks for connecting HTML templates with your program, or <a href="https://golang.org/pkg/encoding/json/">encoding/json</a> if you’re building an API and need to render some JSONs. If you want a complete view renderer that abstracts a few things, you can check out the <a href="https://github.com/unrolled/render">render</a> package that plays nicely with many middleware libraries mentioned above.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-177"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-175">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-176'
	>
	So, if you want to do web development in GO you can find a package for almost everything. Here’s a <a href="https://github.com/avelino/awesome-go">long list of libraries</a> that might prove useful. Be cautious, this is a pretty <strong>young ecosystem</strong> and you could encounter a lack of documentation or support while using some of those packages.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-180"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-178">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-179'
	>
	Personal experience</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-183"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-181">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-182'
	>
	At Infinum, we constantly explore new technologies. A great way to do that is to organize an internal <a href="https://en.wikipedia.org/wiki/Hackathon">hackathon</a> where everybody has to build something with a completely new language, framework or library. We did that about a year ago and my friend <a href="https://twitter.com/kantolic">Krešo</a> and <a href="https://twitter.com/lucinivan">I</a> decided to give GO a shot.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-186"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-184">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-185'
	>
	The idea was to create a web app that’s simple, useful and covers standard problems in web development (routing, database, connecting to other APIs). The result was an app called <a href="https://github.com/ilucin/go-mdm">“Managing dependency management”</a>. It scans public GitHub repositories, analyses root package.json files and prints out which dependencies (npm packages) are out of date. We used martini web framework, postgres database, gorm data layer, GitHub’s library and managed to <strong>make everything work in just under 8 hours</strong>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-189"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-187">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-188'
	>
	GO in action</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-192"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-190">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-191'
	>
	After our test run proved to be successful, we decided to incorporate GO in our client work. We’re working with <a href="https://www.startupthreads.com/">Startup Threads</a>, a US company that prints and sends custom T-shirts worldwide.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-195"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-193"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-stretch" data-id="es-194">
	<picture class="image__picture block-media__image-picture">
												<img
					src="https://infinum.com/uploads/2017/02/building-web-apps-with-go-2.webp"
					class="image__img block-media__image-img"
					alt=""
										height="562"
															width="1000"
										loading="lazy"
					 />
					</picture>

			<figcaption class="image__figcaption block-media__image-figcaption">
			Need a T-shirt with a gopher?		</figcaption>
	</figure></div></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-198"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-196">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-197'
	>
	We’ve built a fast web server in GO that does image analysis on user-uploaded print art. It’s a scalable, Heroku-based architecture which was fairly easy to setup. In the end, GO made automatic deployment really fast and reliable.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-201"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-199">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-200'
	>
	Wait! But why GO?</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-204"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-202">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-203'
	>
	You’re probably asking yourself this question. Why should I use GO when there are other, more established and mature ecosystems for web development? GO’s main selling point is its right <strong>combination of productivity, performance and built-in concurrency support</strong>. So, if you’re building a simple CMS-like website, GO is not the best tool for the job, but if you need in order to build a high-performance server that handles thousands of requests per second, then GO might be the right fit.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-207"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-media">
	<div	class="media block-media__media media__border--none media__align--center-center"
	data-id="es-205"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-stretch" data-id="es-206">
	<picture class="image__picture block-media__image-picture">
												<img
					src="https://infinum.com/uploads/2017/02/building-web-apps-with-go-3.gif"
					class="image__img block-media__image-img"
					alt=""
										height="160"
															width="180"
										loading="lazy"
					 />
					</picture>

	</figure></div></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-210"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-208">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-209'
	>
	Playing with GO was a great experience and I’ll definitely try building more complex systems with it. The most important benefit is the productivity and easy collaboration achieved through its simplicity and well-defined conventions. Of course, it is not meant to be used for everything, so before you decide to use GO for your next project, research whether it is <strong>the right tool for the job</strong>.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-213"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-211">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-212'
	>
	<strong>Have a cool GO project you need help on? <a href="https://infinum.com/contact/">Contact us.</a></strong></p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-216"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-214">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-215'
	>
	Want to know more?</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-219"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-217">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-218'
	>
	Check out these useful links:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-222"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-220">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-221'
	>
	<li><a href="https://golang.org/doc">Official GO documentation &amp; guides</a></li><li><a href="https://astaxie.gitbooks.io/build-web-application-with-golang/content/en">Book about web &amp; GO</a></li><li><a href="https://blog.carlmjohnson.net/post/google-go-the-good-the-bad-and-the-meh">Google GO, the good, the bad and the meh (article)</a></li><li><a href="https://peter.bourgon.org/go-best-practices-2016/">GO best practices (article)</a></li></ul></div>	</div>
</div>
</div>		</div>
	</div><p>The post <a href="https://infinum.com/blog/building-web-apps-with-go/">Building Web Apps with GO</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</content:encoded>
			</item>
		
	</channel>
</rss>