<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Golang on Benny Simmonds</title>
    <link>https://www.bencode.io/tags/golang/</link>
    <description>Recent content in Golang on Benny Simmonds</description>
    <generator>Hugo -- 0.149.1</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 19 Aug 2021 21:59:35 +0000</lastBuildDate>
    <atom:link href="https://www.bencode.io/tags/golang/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>The Go Programming Lang</title>
      <link>https://www.bencode.io/posts/go/</link>
      <pubDate>Sat, 05 Oct 2019 19:02:44 +0000</pubDate>
      <guid>https://www.bencode.io/posts/go/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#gopath&#34;&gt;GOPATH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#run-build-and-install&#34;&gt;Run, build and install&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dependencies&#34;&gt;Dependencies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#formatting&#34;&gt;Formatting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#documentation&#34;&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#structuring-a-source-tree&#34;&gt;Structuring a source tree&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#the-lang&#34;&gt;The lang&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#variables&#34;&gt;Variables&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#control-structures-if-switch-and-for&#34;&gt;Control structures (if, switch and for)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#if&#34;&gt;if&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#switch&#34;&gt;switch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#for&#34;&gt;for&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#io&#34;&gt;I/O&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#fmt&#34;&gt;fmt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#cli&#34;&gt;CLI&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#args&#34;&gt;Args&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#flags&#34;&gt;Flags&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#basic-data-types&#34;&gt;Basic Data Types&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#type-conversion&#34;&gt;Type conversion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#strings&#34;&gt;Strings&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#unicode&#34;&gt;Unicode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#string-literals&#34;&gt;String literals&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#numbers&#34;&gt;Numbers&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#integers&#34;&gt;Integers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#bitwise-operations&#34;&gt;Bitwise operations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#floating-point&#34;&gt;Floating point&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#constants&#34;&gt;Constants&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#pointers&#34;&gt;Pointers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#functions&#34;&gt;Functions&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#grouped-parameters-types&#34;&gt;Grouped parameters types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#variadic-functions&#34;&gt;Variadic functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#multiple-return-values&#34;&gt;Multiple return values&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#named-return-values&#34;&gt;Named return values&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#recursion&#34;&gt;Recursion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#deferred-functional-calls&#34;&gt;Deferred functional calls&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#functions-as-values&#34;&gt;Functions as values&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#function-literals-anonymous-functions&#34;&gt;Function literals (anonymous functions)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#passing-functions-to-functions&#34;&gt;Passing functions to functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#closures&#34;&gt;Closures&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#error-handling&#34;&gt;Error Handling&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#error-handling-strategies&#34;&gt;Error handling strategies&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#propagate-to-caller&#34;&gt;Propagate to caller&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#retry&#34;&gt;Retry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#log-and-continue&#34;&gt;Log and continue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#log-and-exit&#34;&gt;Log and exit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#pkgerrors&#34;&gt;pkg/errors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#panic-and-recover&#34;&gt;Panic and Recover&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#packages-and-libraries&#34;&gt;Packages and Libraries&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#package-aliases&#34;&gt;Package aliases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#imported-unused-packages-for-side-effects&#34;&gt;Imported unused packages for side effects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#inspecting-a-package-api&#34;&gt;Inspecting a package API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#advanced-data-types&#34;&gt;Advanced Data Types&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#arrays&#34;&gt;Arrays&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#slices&#34;&gt;Slices&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#extending-slices&#34;&gt;Extending slices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#creating-a-slice-with-make&#34;&gt;Creating a slice with make&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#byte-slices&#34;&gt;Byte slices&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#maps&#34;&gt;Maps&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#creating-maps&#34;&gt;Creating maps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#crud-create-retrieve-update-delete-operations-with-maps&#34;&gt;CRUD (create retrieve update delete) operations with maps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#named-types-user-defined-types&#34;&gt;Named types (user defined types)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#function-named-type&#34;&gt;Function named type&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#type-aliases&#34;&gt;Type aliases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#struct&#34;&gt;Struct&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#struct-embedding&#34;&gt;Struct embedding&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#field-tags&#34;&gt;Field tags&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#struct-methods&#34;&gt;Struct methods&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#receiver-method-sets&#34;&gt;Receiver Method Sets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#interfaces&#34;&gt;Interfaces&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#interface-internals&#34;&gt;Interface internals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#warning---dont-assign-nil-variables-to-interfaces&#34;&gt;WARNING - dont assign nil variables to interfaces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#type-assertion&#34;&gt;Type assertion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#type-switches&#34;&gt;Type switches&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#cool-cool-cool&#34;&gt;Cool cool cool&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#stdlib&#34;&gt;stdlib&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#tools&#34;&gt;Tools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#make&#34;&gt;Make&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#vim-setup&#34;&gt;Vim setup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#libraries&#34;&gt;Libraries&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#data&#34;&gt;Data&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#middleware&#34;&gt;Middleware&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#web&#34;&gt;Web&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://golang.org/doc/effective_go.html&#34;&gt;Effective Go&lt;/a&gt; is a howto on writing idiomatic Go.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go Web Apps</title>
      <link>https://www.bencode.io/posts/2019-04-28-go-web/</link>
      <pubDate>Sun, 28 Apr 2019 17:13:10 +0000</pubDate>
      <guid>https://www.bencode.io/posts/2019-04-28-go-web/</guid>
      <description>&lt;p&gt;A quick tour of doing web with golang, all living off the land with Go&amp;rsquo;s built-in &lt;a href=&#34;https://golang.org/pkg/&#34;&gt;standard library&lt;/a&gt;.&lt;/p&gt;
&lt;h1 id=&#34;packages&#34;&gt;Packages&lt;/h1&gt;
&lt;p&gt;Working example, where the web server and templating code in source file &lt;code&gt;$GOPATH/src/github.com/bm4cs/gotime/web/server.go&lt;/code&gt;. It does lots of things, but exports function &lt;code&gt;StartServer&lt;/code&gt; (upper case first character means publically exported).&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;web&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;StartServer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The main func in &lt;code&gt;$GOPATH/src/github.com/bm4cs/gotime/myapp/app.go&lt;/code&gt; can import the web package:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;github.com/bm4cs/gotime/web&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;main&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;web&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;StartServer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;handling-requests&#34;&gt;Handling Requests&lt;/h1&gt;
&lt;p&gt;The &lt;a href=&#34;https://golang.org/pkg/net/http/&#34;&gt;http&lt;/a&gt; package from the standard library, provides a ton a out of the box functionality. &lt;a href=&#34;https://golang.org/doc/articles/wiki/&#34;&gt;Writing Web Applications&lt;/a&gt; on golang.org is a very pragmatic guide.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
