GoSF Meetup – How to Go [Thurs, Mar 23rd]

![GoSF Meetup – How to Go [Thurs, Mar 23rd]](https://secure.meetupstatic.com/photos/event/8/e/b/f/highres_519096543.jpeg?w=750)
Details
Agenda
6:30 Networking | Food | Drink
7:00 Intros and Sharing of Tips and Tools
7:15 Speakers
• Talk 1: How to Build Better Go Libraries Quinn Slack
• Talk 2: How to Design Concurrent Data Structures, Konrad Reiche
• Talk 3: How to Structure Your Go Projects, William Kennedy
8:30 End
Talk 1: How to Build Better Go Libraries, Quinn Slack
Quinn Slack will, with the community's help, review and improve a specific Go library nominated by its author, in front of the live audience. Authors can nominate their project on the Go subreddit (https://www.reddit.com/r/golang/comments/5vwxyi/nominate_your_library_to_be_reviewed_improved_at/), and the top 1 or 2 projects will be chosen on March 9th. The talk will cover how to improve the API, implementation, and documentation of the project. It will include tips that any Go programmer can use to improve their own projects.
About the Speaker
https://a248.e.akamai.net/secure.meetupstatic.com/photos/event/3/a/d/6/600_298635062.jpeg
Quinn Slack is CEO and co-founder of Sourcegraph, code intelligence software that lets you ship better software faster. Prior to Sourcegraph, Quinn co-founded Blend Labs, an enterprise technology company with over 100 employees dedicated to improving home lending. At Palantir Technologies, he created a technology platform to help two of the top five U.S. banks recover from the housing crisis. He was the first employee and developer at Bleacher Report after graduating from high school. Quinn graduated with a BS in Computer Science from Stanford. (@sqs (https://twitter.com/sqs))
Talk 2: How to Design Concurrent Data Structures, Konrad Reiche
This tutorial will demonstrate ways to approach the design and implementation of concurrent data structures. In the process, it will clarify that there is no one size fits it all solution and different designs – such as shared variables and locks or communicating sequential processes – can make sense. It is not always obvious which approach is preferable but depending on the context, one solution can be simpler or more expressive to the specific problem domain than the other one.
The demo will use a cache as the sample project. It will fetch a handle which serves HTTP requests for computing a playlist dynamically based on existing media segments in a database. Calls to this endpoint are relatively expensive which makes it a reasonable use case for a cache.
Highlights of the tutorial include:
• Use the testing package to systematically investigate the cache implementation
• Use the race detector to uncover that the implementation is indeed not thread-safe
• 1. Amendment: monitor-based synchronization (sync.Mutex)
• 2. Amendment: non-blocking implementation (reduce critical section)
• 3. Amendment: duplicate suppression (pointer to value struct)
• Alternative design (monitor goroutine using channels)
• Additional feature: expiring keys with cleanup goroutine
About the Speaker
http://photos3.meetupstatic.com/photos/event/d/7/b/f/600_458515231.jpeg
Konrad Reiche is a back-end developer at Tape.tv, Berlin's largest music video streaming provider. Among his projects, he has implemented microservices in Go with Go Kit using PostgreSQL and Redis and created a distributed load testing tool to measure the performance of the video live streaming service by using Go and tools like JMeter and Bees with Machine Guns.
Talk 3: How To Structure Your Go Projects
Go is not like other languages in the sense that it is not practical to organize source code into folders within a project. If you do, a number of problems can arise. The reason is because each folder in a source tree represents a package i.e. a self-contained unit of compiled code. A better approach is to identify and organize the unique packages you will need, which in turn will make it easier to manage, support, and grow your applications over time.
William Kennedy's talk will provide an in-depth look at best practices for structuring projects using a package-oriented design approach. He will show how improving the design and structure of your packages and APIs can have positive impacts on developer productivity and increase the fun of programming in Go.
About the Speaker
http://photos1.meetupstatic.com/photos/event/1/2/2/f/600_458764655.jpeg
William Kennedy is a managing partner at Ardan Studio in Miami, Florida, a mobile, web, and systems development company. He is also a co-author of the book Go in Action, the author of the blog GoingGo.Net, and a founding member of GoBridge which is working to increase Go adoption through diversity. @goinggodotnet (https://twitter.com/goinggodotnet))
About the Host/Sponsor
http://photos2.meetupstatic.com/photos/event/1/e/f/4/600_457807924.jpeg
Yelp's mission is to connect people with great local businesses. (@yelp (https://twitter.com/Yelp))

Sponsors
GoSF Meetup – How to Go [Thurs, Mar 23rd]