<?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>Author at Infinum</title>
		<atom:link href="https://infinum.com/blog/author/ivan-lucin/feed/" rel="self" type="application/rss+xml" />
		<link></link>
		<description>Building digital products</description>
		<lastBuildDate>Fri, 03 Apr 2026 12:58:20 +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>
					<item>
				<image>
					<url>8072https://infinum.com/uploads/2014/10/the-updateable-webview-on-android-5-lollipop-what-is-it-and-why-should-you-care-0.webp</url>
				</image>
				<title>The Updatable WebView on Android 5.0 Lollipop  What Is It and Why Should You Care?</title>
				<link>https://infinum.com/blog/the-updateable-webview-on-android-5-lollipop-what-is-it-and-why-should-you-care/</link>
				<pubDate>Tue, 21 Oct 2014 08:12:00 +0000</pubDate>
				<dc:creator>Ivan Lučin</dc:creator>
				<guid isPermaLink="false">https://infinum.com/the-capsized-eight/the-updateable-webview-on-android-5-lollipop-what-is-it-and-why-should-you-care/</guid>
				<description>
					<![CDATA[<p>Google released Android 5.0, code named Lollipop. It's the largest and most ambitious release of their mobile OS and includes the Updatable WebView feature.</p>
<p>The post <a href="https://infinum.com/blog/the-updateable-webview-on-android-5-lollipop-what-is-it-and-why-should-you-care/">The Updatable WebView on Android 5.0 Lollipop  What Is It and Why Should You Care?</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</description>
				<content:encoded>
					<![CDATA[<div
	class="wrapper"
	data-id="es-305"
	 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-225">
	</div>

<div class="block-blog-content-main">
	
<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-228"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-226">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-227'
	>
	Last week, Google released Android 5.0, code named Lollipop. It’s the largest and most ambitious release of their mobile OS. One of the new features is called Updatable WebView and it’s particularly interesting to us because we develop lots of hybrid apps.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-231"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-229">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-230'
	>
	Hybrid apps are regular native apps that you can install from the App Store or Google Play. They’re developed using web technologies and are run in a component called WebView. WebView is a HTML and Javascript engine that’s used to display websites. It’s like having a browser run in your mobile application, but there’s also a way to access stuff you can’t access from a regular mobile website like the phone’s camera, accelerometer, file system, etc.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-234"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-232">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-233'
	>
	The chronicles of a hybrid app developer</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-237"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-235">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-236'
	>
	The reason why we develop apps that way is that we get to write our code only once, and run it on various mobile and desktop platforms. However, native apps usually perform better and can be tested more easily. So we need to balance between these pros and cons when choosing a development strategy for a new project.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-240"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-238">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-239'
	>
	One of the problems with the hybrid approach is that, until now, the WebView component couldn’t compete with a modern mobile browser in terms of features and performance. WebView is offered as an internal component of the mobile OS itself, meaning that updates are only possible when the device’s actual OS is updated.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-243"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-241">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-242'
	>
	The main problem is the <a href="http://www-bgr-com.vimg.net/wp-content/uploads/2012/05/android-fragmentation-visualization.jpg" target="_blank" rel="noreferrer noopener nofollow">fragmentation</a> of the Android mobile OS. There are many different vendors creating their own versions of Android and often changing the way internal components work. This makes the hybrid development process more difficult because we have to carefully design and test our apps to run in various environments.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-246"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-244">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-245'
	>
	Moving the (hybrid) web forward</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-249"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-247">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-248'
	>
	Since the release of Android 4.4 KitKat, WebView has been based on Chromium, which means that it has the same rendering and Javascript engine as Chrome for Android. Although it doesn’t have the same features, this is a big thing because the consistency and performance in running web apps have been improved. Besides that, our apps are hardware accelerated by default and we also have an insanely awesome <a href="https://developer.chrome.com/devtools/docs/remote-debugging">remote debugging</a> feature.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-252"
	 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-250"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-stretch" data-id="es-251">
	<picture class="image__picture block-media__image-picture">
												<img
					src="https://infinum.com/uploads/2014/10/the-updateable-webview-on-android-5-lollipop-what-is-it-and-why-should-you-care-1.webp"
					class="image__img block-media__image-img"
					alt=""
										height="157"
															width="200"
										loading="lazy"
					 />
					</picture>

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

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-255"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-253">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-254'
	>
	WebView is now updatable… What’s so special about it?</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-258"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-256">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-257'
	>
	With the new Android 5 Lollipop, Google has pushed hybrid development even further. The Chromium layer behind the WebView component is now <a href="http://developer.android.com/about/versions/lollipop.html#WebView">updatable from Google Play</a>. This means that every mobile device with Android 5 or later should have not only the same but the latest browsing engine in the WebView. There are several reasons why this is good news:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-261"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-259">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-260'
	>
	<li>Users get better and more feature-rich experience in using their web apps,</li><li>Hybrid apps are now more consistent between devices and have better performance,</li><li>Users don’t have to update their OS to get the latest and best possible browser engine,</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-264"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-262">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-263'
	>
	… which gets us to the main point of this article:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-267"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-265">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-266'
	>
	<strong>Developing hybrid apps for Android devices is now much easier and more satisfactory.</strong></p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-270"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-268">
	<h3	class='typography typography--size-36-text js-typography block-heading__heading'
	data-id='es-269'
	>
	Other cool new features</h3></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-273"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-271">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-272'
	>
	Besides the update part, there are several more notable features (web APIs support) in the new Android WebView:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-276"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="lists" data-id="es-274">
	<ul	class='typography typography--size-16-text-roman js-typography lists__typography'
	data-id='es-275'
	>
	<li><a href="http://www.webrtc.org/">WebRTC</a> – Real-Time Communications capabilities via Javascript APIs</li><li><a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API">WebAudio</a> – a powerful and versatile system for controlling audio on the Web</li><li><a href="https://developer.mozilla.org/en-US/docs/Web/WebGL">WebGL</a> – Web API similar to OpenGL that provides 3D graphics</li></ul></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-279"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-277">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-278'
	>
	The bad parts</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-282"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-280">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-281'
	>
	Of course, all of this is not of much use at the moment because Android OS usage statistics look like this:</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-285"
	 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-283"
	 data-media-type='image'>

	<figure class="image block-media__image-figure image--size-stretch" data-id="es-284">
	<picture class="image__picture block-media__image-picture">
												<img
					src="https://infinum.com/uploads/2014/10/the-updateable-webview-on-android-5-lollipop-what-is-it-and-why-should-you-care-2.webp"
					class="image__img block-media__image-img"
					alt=""
										height="330"
															width="915"
										loading="lazy"
					 />
					</picture>

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

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-288"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-286">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-287'
	>
	And we still need to support older versions of Android in our hybrid apps, sometimes all the way to Gingerbread. The situation will probably change soon and this is really not that much of an issue in the long run.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-291"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-289">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-290'
	>
	But there’s still the problem with Android fragmentation and many different device manufacturers <a href="http://cdn.meme.am/instances/500x/55413937.jpg" target="_blank" rel="noreferrer noopener nofollow">&#8220;improving&#8221;</a> their own versions of Android. They can (and probably will) change the WebView and adjust it to their own needs. So I guess we’ll keep on fighting WebView device inconsistencies, but at least to a lesser extent.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-294"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-heading" data-id="es-292">
	<h2	class='typography typography--size-52-default js-typography block-heading__heading'
	data-id='es-293'
	>
	Is Apple also embracing hybrid development?</h2></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-297"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-295">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-296'
	>
	Apple has also included some interesting WebView updates in their new iOS 8 release. They’ve created another component (called WKWebView) whose performance will be equivalent to the performance of Safari, the native browser on iOS. To put this into perspective – WKWebView could be up to three times faster than a regular WebView iOS component (called UIWebView).</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-300"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-298">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-299'
	>
	But don’t get too excited, WKWebView is still <a href="http://www.techrepublic.com/article/why-ios-8-could-break-your-hybrid-mobile-app/">not ready</a> for running modern web apps.</p></div>	</div>

<div
	class="wrapper wrapper__use-simple--true"
	data-id="es-303"
	 data-animation='slideFade' data-animation-target='inner-items'>
		
			<div class="block-paragraph" data-id="es-301">
	<p	class='typography typography--size-16-text-roman js-typography block-paragraph__paragraph'
	data-id='es-302'
	>
	To summarize, although many of these features are not ready to be used in real-world scenarios, we can notice that things are getting much better in the field of hybrid app development.</p></div>	</div>
</div>
</div>		</div>
	</div><p>The post <a href="https://infinum.com/blog/the-updateable-webview-on-android-5-lollipop-what-is-it-and-why-should-you-care/">The Updatable WebView on Android 5.0 Lollipop  What Is It and Why Should You Care?</a> appeared first on <a href="https://infinum.com">Infinum</a>.</p>
]]>
				</content:encoded>
			</item>
		
	</channel>
</rss>