Struct tags are a great feature of Go, but in the general Go community they receive almost no attention. In this talk we want to show you some of the cleverest and weirdest uses of struct tags we’ve seen. Specifying json and xml fields in struct tags is commonplace, but have you thought about using tags for object-relational mapping, validation functions, defining middleware, or command line options? Come join us for a tour of our favorite practical and impractical uses of an underutilized part of Go.
Long garbage collection (GC) pauses stand directly in the way of Go’s growth. It is an important, and often times the only, technical reason practitioners give for not migrating to managed runtimes such as Go. If Go is to live up to its promise of providing a better place for developers it must eliminate long GC pauses. This talk presents and discusses the new 1.5 low latency concurrent GC. Motivations will be given, performance numbers will be presented, we will deep dive into some technical challenges, but more importantly we will discuss why this approach fits well with the Go language.
Every once in a while, a new programming language comes up that fundamentally changes how we think about computing. But even more so often, the core ideas behind a “new” language are hinged upon ideas that were first propounded by languages or systems which are much older.
Often our understanding of a language’s features and the intentions thereof are limited by our understanding of its roots.
In this talk, BG will talk about the origins of the core ideas behind Go and will take you on a “language-archeology” tour where we’ll trace the roots of Go.
Maintaining consistency within a growing project is a challenge. I have struggled with my company’s Go web API as it has grown over the past two years, trying to find a nice solution to this intra-project consistency problem without resorting to a large-scale framework.
In my mind, there are three general layers to project consistency:
consistency in implementation among similar bits of code
consistency in black-box behavior among similar endpoints or commands
consistency between actual behavior and documented behavior (documentation accuracy)
This talk will outline how I have leveraged small-scale code and documentation generator tools for each of the three layers outlined above, specifically for the sake of consistency in a growing Go application without using a large-scale framework.
Dynamic tools can provide significant value for small time investment. But frequently they are underappreciated by developers. In this talk I will describe three dynamic tools for Go: data race detector, fuzzing system and execution tracer. The first two tools are related to bug finding, and the tracer can give insights into performance and latency issues of Go programs. I will also share our experiences of systematically applying such tools at scale.
Communicating Sequential Processes (CSP) are a foundational element of writing Go code. Our Go application, Pillar, processes 15 gigabits per second, packages over 3000 channels, serves millions of users, and runs on more than 450 servers nationwide.
While writing Pillar, we developed five guidelines for the use of Go and CSP. Guidelines that helped us prevent deadlocks, prevent resource leaks, and simplified our code. Go developers will find lasting value in these battle-tested guidelines.
Go has emerged as the language of the server, but it remains underrepresented in large, consumer-focused companies like Facebook, Twitter, Netflix, and SoundCloud. These organizations have largely adopted JVM-based tech stacks for their business logic, owing in large part to libraries and ecosystems that directly support their service-oriented architectures.
To reach its next level of success, Go needs more than simple primitives and idioms. It needs a comprehensive toolkit, for coherent distributed programming in the large. This talk describes Go kit, a toolkit for Go in the modern SOA.
Written in Go, Cayley is a graph database based on technology behind Freebase.com. Starting with a short history of the inspirations behind Cayley, this talk will deep-dive into the moving parts of building a graph database, between the various query languages, the storage engines, and the iterator trees.
How cool would it be to write an app for your Android or iOS phone in your favorite language, Go?
Since Go 1.4, Android on ARM is one of the officially supported platforms, and Go 1.5 will include iOS support for ARM. I will present the status of Android/iOS support in Go 1.5, and the efforts around the golang.org/x/mobile repository, which hosts tools and libraries for mobile app development in Go.