# Go at OSCON
20 Aug 2014
Tags: conference, oscon
Summary: Reporting from OSCON 2014.

Francesc Campoy

## Introduction

What happens in Portland in July? [OSCON](http://www.oscon.com/oscon2014)! At
this year's conference, Go was more present than ever before, with five talks,
two workshops, a
[Birds of a Feather](http://en.wikipedia.org/wiki/Birds_of_a_feather_(computing))
session, and a meetup.

## Talks

[Matt Stine](http://twitter.com/mstine) talked about his experience switching
from Java to Go with
[A recovering Java developer learns Go](http://www.slideshare.net/mstine/java-devlearnstogooscon)
while [Steve Francia](https://twitter.com/spf13) presented
[Painless Data Storage with MongoDB and Go](http://spf13.com/presentation/MongoDB-and-Go).
Steve also presented
[Go for Object Oriented Programmers](http://spf13.com/presentation/go-for-object-oriented-programmers),
where he explained how some object oriented concepts can be implemented in Go.

.image osconreport/talks.png _ 800

Finally, [Josh Bleecher Snyder](http://twitter.com/offbymany) talked about his
experience writing tools to work with Go source code in
[Gophers with hammers](https://talks.golang.org/2014/hammers.slide#1),
and [Francesc Campoy](http://twitter.com/francesc) talked about all the things
that could have gone wrong and what the Go team did to prevent them
[Inside the Go playground](https://talks.golang.org/2014/playground.slide).

## Workshops

At the beginning of OSCON's workshop day, Steve Francia presented how to build a
web application and a CLI tool during
[Getting started with Go](http://spf13.com/presentation/first-go-app) to a big
room full of Gophers.

.image osconreport/workshops.png _ 800

In the afternoon, [Chris McEniry](https://twitter.com/mmceniry) gave his
[Quick introduction to system tools programming with Go](http://cdn.oreillystatic.com/en/assets/1/event/115/A%20Quick%20Introduction%20to%20System%20Tools%20Programming%20with%20Go%20Presentation.pdf) where he went over some useful skills to
write system tools using Go and its standard library.

## Additional events

To take advantage of the increased Gopher population in Portland during OSCON, we
organized two extra events: the first [PDXGolang](https://twitter.com/pdxgolang)
meetup and a
[Birds of a Feather session](http://www.oscon.com/oscon2014/public/schedule/detail/37775).

.image osconreport/meetup.png _ 800

At the meetup Francesc Campoy talked about
[Go Best Practices](https://talks.golang.org/2013/bestpractices.slide) and
[Kelsey Hightower](https://twitter.com/kelseyhightower) gave a great
introduction to [Kubernetes](https://github.com/GoogleCloudPlatform/kubernetes),
a container management system for clusters written in Go by Google. If you live
in Portland, make sure you [join the group](http://meetup.com/pdx-go) and come
along to the next meeting.

The "Birds of a Feather" (or, more aptly, "Gophers of a Feather") was a lot of
fun for everyone involved. We hope to see more of you there next year.

## In conclusion

.image osconreport/random.png _ 800

Thanks to all the gophers that participated in OSCON. After the successes of
this year we look forward to more Go fun at OSCON 2015.
