I thought some folks would be interested to learn about a Go application I've developed and deployed into production at Novartis. It is a web application that allows scientists to order cell lines from an existing inventory system. I won't be giving away any confidential details here, as it's a proprietary application... but a little overview won't hurt anybody.

Scientists can use a web page to search for the cell line they are interested in, place an order (effectively arranging a pickup date), and then arrive at a predetermined location on that day to collect the vials. Scientists can also review all their orders, and cancel if desired. The other persona is the Gatekeeper who owns the freezers the cell lines are in, she marks each order as picked up or "no show" as appropriate using another web page. It's a fairly simple application with only a few web pages and hundreds of users.

Perhaps of interest is that it uses a CQRS architecture for the service layer (all written in Go). All Queries go against an in-memory cache of the inventory data. Commands are executed against the existing database and also update the Query cache. Google for CQRS if you are not familiar with this pattern.

Oracle is the existing database, probably also of interest. I seriously considered writing a Go Oracle driver to interact with the database, but to get it done faster (and with less risk) I ended up with PL/SQL scripts executed from within Go. The scripts do the updates on the database and output JSON strings which Go parses. It's old school, but it works, and it turned out to be a great way to separate concerns.

I did get a little demo running where I was using Oracle OCI and cgo to connect and interact with Oracle from Go, so that's the way to write a Go Oracle driver.

My experience with Go was fantastic. I found the learning curve smooth, the final code very elegant and expressive, and it was lots of fun.

To be honest, I think this application gets swallowed up by larger efforts we have this year and those services are ported to Java to make our codebase more consistent.. but for the time being, Go is being used in production at Novartis.
Shared publiclyView activity