Personal Notes On Go Programming Language [Unofficial]

Notable Features of Go Programming Language

  • Support for Concurrent Networked programming (designed with modern trends in mind; others – Unicode support) – high level libraries for Concurrent Networked programs – feels like dynamic interpreted languages – even better
  • OO? interface? Seems to discourage complexities of OO Java, C++, Design Patterns. One of the design goals – Clutter free – you write code and it does stuffs – removing “incidental complexity”. More suitable to modern developers – Agile development; small teams using open source libraries and frameworks to build great products.
    • Interface

    • Struct
  • Support for Functional programming
  • Fast compilation – dependency graph
  • Pointers. Allocation – new, make. Systems programming. 
  • Strongly typed. Less Runtime errors. Efficient.
  • Garbage collected.
  • Concise syntax 
    • Readable code
    • Type inference 
    • Semicolon-less etc. 
    • Data Structures, Built-in Libraries – feels like dynamic interpreted languages.
  • Open source projects make languages popular these days. Seems to be good at that too.
  • Three design goals – the goods of Strongly typed popular Languages that feels like Dynamic Interpreted Languages with modern requirements in mind so that it is easy to write concurrent and networked programs.
  • Rob Pike, Ken Thompson (C, UNIX) in the design team among other notables.
  • Modular Code.
  • Less is more. You can keep everything in your head. (Lisp philosophy – The whole language is out there all the time.)
  • Panic – recover (in place of Exception Handling)
  • Concurrency
    • Goroutine, Channels (Unix process-pipe, lighter), Mutex lock-unlock, Atomic

    Operator Overloading
    Object-based / Protoype-based Programming

Rob Pike:

  • composition and coupling
    • interfaces
    • concurrency gives us the composition of independently executing computations.
    • embedding

Programming Languages I Am Learning / Working With

  1. C/C++
    • Systems (Linux, Android, Chrome) Programming 
    • Efficiency. Memory manipulation. Complete control over the environment. 
  2. Go 
    • Systems, Concurrent and Networked Programming 
    • Static Typing
    • Faster compilation 
  3. Java 
    • Managed Code
    • Android Application Development
    • Open Source Libraries and Frameworks
  4. Scala 
    • A blend of all the features you ever saw in different languages! 
    • Tries to answer “So, if we want to let programmers implement this feature as language library rather than language syntax, what features do we need to introduce in the language?” 
      • Features:
        • Actors Library 
        • Operators as Functions 
        • Flexible syntax (Prefix, Infix, Postfix mixing) 
      • Makes Scala DSL friendly and “scalable”.
      • Makes the core language small (rest of the features are implemented in the library). Lisp Philosophy. 
    • What happens when you try to fuse OOP and Functional Programming on JVM? 
    • Static Typing and Terse syntax
    • Concurrent and Distributed Programming
  5. Clojure 
    • Lisp on JVM
    • Metaprogramming (Programmable Language) 
    • Functional Programming
    • Concurrent Programming
  6. Python 
    • Rapid Development
    • Open Source Libraries and Frameworks
  7. JavaScript 
    • Web Front-end (with HTML5 & CSS)
    • Object-based Programming 
    • Node.JS
    • Statistical, Numerical Computing 
  8. Haskell
    • Purely Functional Programming
  9. Erlang
    • Fault-tolerant Real-time Parallel Distributed Computing
    • Modifiable without downtime

Current Preference

    If you need complete control over the environment, go down to C++. Otherwise, use Scala, Java, Clojure.