Someone asked a question on the forum today on how to gain the benefits of inheritance without embedding. It is really important for everyone to think in terms of Go and not the languages they are leaving behind. I can’t tell you much code I removed from my early Go implementations because it wasn’t necessary. The language designers have years of experience and knowledge. Hindsight is helping to create a language that is fast, lean and really fun to code in.
Continue readingMulti-threaded applications are very complicated, especially when your code is not organized and consistent with how resources are accessed, managed and maintained. If you want to minimize bugs you need philosophies and rules to live by. Here are some of mine:
Resource allocation and de-allocation should be abstracted and managed within the same type. Resource thread safeness should be abstracted and managed within the same type. A public interface should be the only means to accessing shared resources.
Continue readingSince I started writing code in Go it has been a mystery to me how best to organize my code and use the package keyword. The package keyword is similar to using a namespace in C#, however the convention is to tie the package name to the directory structure.
Go has this web page that attempts to explain how to write Go Code.
http://golang.org/doc/code.html
When I started programming in Go this was one of the first documents I read.
Continue readingI have been writing Windows services in C/C++ and then in C# since 1999. Now that I am writing server based software in Go for the Linux OS I am completely lost. What is even more frustrating, is that for the first time the OS I am developing on (Mac OSX) is not the operating system I will be deploying my code on. That will be for another blog post.
Continue readingI was really surprised how easy it was to read an XML document using the encoding/xml package that comes with the standard library. The package works by defining structs that map the XML document. If you need more flexibility then use Gustavo Niemeyer’s xmlpath package (found here).
Here is the XML document we are going to read and de-serialize:
<straps>
<strap key="CompanyName" value="NEWCO" />
<strap key="UseEmail" value="true" />
Continue readingI wanted to send an email from my TraceLog package when a critical exception occurred. Fortunately Go’s standard library has a package called smpt which can be found inside the net package. When you look at the documentation you are left wanting.
I spent 20 minutes researching how to use this package. After fighting through the parameters and bugs, I came up with this sample code:
package main
import (
Continue readingI have been struggling with using the Time package that comes in the Go standard library. My struggles have come from two pieces of functionality. First, trying to capture the number of milliseconds between two different time periods. Second, comparing that duration in milliseconds against a pre-defined time span. It sounds like a no brainier but like I said, I have been struggling.
In the Time package there is a custom type called Duration and a set of helper constants:
Continue readingI am building my TraceLog package and it is really important that the package logs any internal exceptions and prevents panics from shutting down the application. The TraceLog package must never be responsible for shutting down an application. I also have internal go routines that must never terminate until the application is shut down gracefully.
Understanding how to use Defer and Recover in your application can be a bit tricky at first, especially if you are used to using try/catch blocks.
Continue readingAs you know if you read my blog, I have been building a set of new utility packages so I can start developing an application server I need for a new project. I am brand new to Go and the Mac OS. Needless to say it has been one hell of an education over the past month. But I don’t miss Windows or C# at all.
I made some progress in my coding and wanted to build documentation for the code.
Continue readingCheck out my new installtion document:
https://www.ardanlabs.com/blog/2016/05/installing-go-and-your-workspace.html
I removed the sections about gocode and GDB. These are not necessary any longer. I also added links for more editors.
Windows
This is a great post by Wade Wegner for installing Go on your Windows Machine:
http://www.wadewegner.com/2014/12/easy-go-programming-setup-for-windows/
Mac OS X
The following instructions will guide you through installing Go on your Mac. Step 1: Download Go Open your favorite browser and go to the following website:
Continue reading