Object Oriented Programming in Go

Object Oriented Programming in Go

Talk given at BostonGolang (bostongolang.org) to an audience of programmers looking to transition to Go from other OO languages. This gives a good overview of how Go does OO differently and how to do it idiomatically.


Johnny Boursiquot

February 24, 2015


  1. 2.

    About Me Johnny Boursiquot Principal Software Engineer 
 @ RBM

    T echnologies @jboursiquot on T witter, GitHub, etc Programing language enthusiast
  2. 3.

    About this talk Beginner to Intermediate level Basic understanding of

    OOP from another language for context Some familiarity with Go syntax expected but not mandatory
  3. 4.

    What we’ll cover What is OOP anyway? How does Go

    differ? What does OOP look and feel like in Go? Q&A
  4. 6.

    OOP OOP tends to model concepts as “objects” that interact

    with other objects within the world of your program Most are familiar with class-based OOP Java, C++, Objective-C, Ruby, Python and others, all embrace class-based OO
  5. 7.

    OOP “Objects” have both data (state) and behavior (code, often

    called “methods”) Behaviors access and often modify object state Objects tend to have the notion of “self” or “this”
  6. 8.

    OOP “Objects” represent “instances” of “classes” in common OO languages

    Class-based orientation commonly includes Inheritance and Polymorphism OO programmers have come to favor composition over inheritance
  7. 20.

    In a Nutshell Go has types and values rather than

    classes and objects Go provides many of the same features we're used to in classical- orientated languages: methods on any type automatic message delegation through embedding polymorphism through interfaces Go does not have inheritance, no "is-a" relationships between objects Go relies on composition for OO
  8. 22.

    Go-related https://www.youtube.com/watch?v=HqZQBmNVhBw http://spf13.com/post/is-go-object-oriented/ http://nathany.com/good/ https://www.youtube.com/watch?v=B-r3Wf_I2Lk http://www.goinggo.net/2014/05/methods-interfaces-and-embedded-types.html http://jordanorelli.com/post/32665860244/how-to-use-interfaces-in-go OOP in general:

    http://www.artima.com/lejava/articles/designprinciples.html http://en.wikipedia.org/wiki/Object-oriented_programming http://en.wikipedia.org/wiki/Composition_over_inheritance http://en.wikipedia.org/wiki/Polymorphism_(computer_science) http://en.wikipedia.org/wiki/Polymorphism_(computer_science) http://en.wikipedia.org/wiki/Class-based_programming Resources