STATUS: Draft / Writing Now based on work with Commento implementation

Go (or GOLAN or Go Language) is programming language, a set of packages and tools. Both the language and the tools have some characteristics that are signficantly different from our old curly friends { C / C++ / Java }.

This this provides a list of some of the things that new Go'ers need to be aware of as it will help you to get your head around Go's idioms and features and be productive quickly.

The Language

Object OrientiationGo does not support classic Obect Oriented class implementation inheritence (is-a).
It does however support a number of Object Oriented features including:
  • Types (rather then Classes),
  • Interfaces and Method Sets,
  • Functions (which can support Recieving instance as part of definition to provide Method / Message invocation style and
  • Composition by Containment which with Anonymous variables provides automatic delegation.
  • Hiding and Encapsulation via its lower/Upper case Private / Public visibility semantics
The impact if this is that Go does not generate automatic "self", "this", "super" handles for access to instance attributes/methods and traverse up the class.
Buts its delegation mechanism allows creation of polymorphic behavior.
Its features are sufficient to allow Go idiomatic OO code to be written
Scope and Visibility
Return TypesGo functions can return multiple values and types
Complex NumbersGo has native support for Complex numbers (square root of -1)

The Tools

CompilingGo does have a compiler, but generally everyting is done with the "go" commend tool. This does much more that just compile the code ..
It does builds, install and in a golang only project makes use of make unnessary
  • build
  • install
LibrariesGo has libraries, know is packages and modules but these are not like C/C++ .h/.a binary ones..
Object FilesGo functions can return multiple values and types
Environment VariablesGo has native support for Complex numbers (square root of -1)
Cache and Clearing it..The go tool is doing a lot work work in the background.The problems is that things can get mixed up, with libraries not resolving.
A give away is when it it trying to find packages that are in your local code base, but is treating them like external pkgs, with the following error: blah blah blah
If you have done a clean, reomved your ~/go directory and vendor generated diretory then you might need to reset the cache:
go clean -cache -modcache -i -r

Go & Make

If go automatically builds the binary then what is the role of Make ?