Go Conference 2017 Autumn Impressions & Digest
Tags: go, gocon
Published: 2022-06-01 11:20:46

I attended [Go Conference 2017 Autumn](https://gocon.connpass.com/event/66615/).

## Special Program: Panel Discussion w/ mattn
Normal Panel Discussion. Since the runtime update is easy with Go, the risk is low. No problem on Windows, Expectations to Go2, How to hire senior gophers etc.

No bug correction due to compatibility sounds hard. I didn't know [C compiler written in Go](https://github.com/cznic/99c). Aside from the main story, I learned BigQuery accepts JSON import.

## Keynote: Go at DigitalOcean / fatih
<script async class="speakerdeck-embed" data-id="f978bde172bf442e9a53b1d162529e38" data-ratio="1.77777777777778" src="//speakerdeck.com/assets/embed.js"></script>

Case study of Go at DigitalOcean.  Most infrastructure code has moved to Go. Since code sharing etc had issues, the repository moved to mono. However the other issue occurred then the structure is changing little by little every year.

I don't know why, but I misunderstood DigitalOcean was originally written in pure Python. Actually Chef(Ruby) was also used. Zero downtime is featured again. I feel the power of Go in infrastructure field.

## Sponsor session：Go + microservices at Mercari / deeeet
https://talks.godoc.org/github.com/tcnksm/talks/2017/11/gocon2017/gocon2017.slide

Build Microservices with Go. Firstly API Gateway, then moved little by little. Since gRPC is cached connection, load balancing is hard. DNS resolver was added last August.

Since the talk was based on the actual failures at work, the information was helpful. I'm motivated enough to try gRPC. I learned the middleware in HTTP is the interceptor in gRPC.

## Story of our own Monitoring Agent in golang / huydx
<iframe src="//www.slideshare.net/slideshow/embed_code/key/5Qa3gIX7cVlrQv" width="340" height="290" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/dxhuy88/gocon-autumn-story-of-our-own-monitoring-agent-in-golang" title="GOCON Autumn (Story of our own Monitoring Agent in golang)" target="_blank">GOCON Autumn (Story of our own Monitoring Agent in golang)</a> </strong> from <strong><a href="//www.slideshare.net/dxhuy88" target="_blank">Huy Do</a></strong> </div>

Talk about Monitoring Agent. fluentd sends log  as is, MA isn't.  Due to scalability,  to adopt to multiple environment and easy management, in-house making was chosen.  Not only making, the deploy is also difficult.

I didn't know LINE considered Rust then decided not to use it. Initial instinct was due to unique syntax. Actual reason of not adopt was the integrity of the format. 

## Consideration about Go logging / Takahito YAMATOYA
<iframe src="//www.slideshare.net/slideshow/embed_code/key/jkIIunPK5iCPnW" width="340" height="290" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/ssuser88ff5b/gocon2017go" title="Gocon2017：Goのロギング周りの考察" target="_blank">Gocon2017：Goのロギング周りの考察</a> </strong> from <strong><a href="//www.slideshare.net/ssuser88ff5b" target="_blank">貴仁 大和屋</a></strong> </div>

Comparison of Golang logging in OSS. Log package is simple. For example, no level feature. Prometheus is thin wrapper of go-kit, Hashicorp's log is with level etc

A lot of investigation. Awsome. When I create log with another language, I will probably refer to this.

## How to achieve parallel compilation ig Go 1.9 / niconegoto
<script async class="speakerdeck-embed" data-id="bb6ab2e63e9e48c59dec5d9544ebe105" data-ratio="1.77777777777778" src="//speakerdeck.com/assets/embed.js"></script>

Talk about complier parallelization since Go 1.9. The parallel compile is by default now. It can be turned off using flag. Internal changes are mainly the addition of mutex and unglobalization of global variables.

IMHO, Go build is fast enough. Now more faster with parallelization. I hope Deep Learning library build becomes faster using Go. I note c=4 is sweet spot.

## Async, Persistent, Fast, and Stable "Enough" Queue/Worker Using Go and PostgreSQL / _achiku
<script async class="speakerdeck-embed" data-id="a63dfb19111541ef8897a1d6157cfe75" data-ratio="1.33333333333333" src="//speakerdeck.com/assets/embed.js"></script>

que-go is based on kei written in ruby. You can set different priority in the same queue. Using PostgreSQL. Advisory lock is mature. 

I didn't know PostgreSQL advisory lock. Although queue was the main story, I learned a lot about DB.

## Diff algorithm in Go / cubicdaiya
Explanation about diff algorithm.  The order of dynamic programming isn't good. Git is based on Myer's algorithm etc.

Unfortunately, due to the lack of fundamental knowledge, I couldn't understand well from the middle.  Review is needed after the slide upload. I like the talk about pure algorithm. Small funnies were also good.

## Ebiten - Simple 2D Game Library in Go / hajimehoshi
https://docs.google.com/presentation/d/e/2PACX-1vSSbSxPObBZcJHjvUpAt-HEJVLaux2FQBpJbvbxInJgmEhxSn-lVxTVxUMmUNQwtJtC8w6_HkhuW2hk/pub?start=false&loop=false&delayms=3000&slide=id.p

Talk about Ebiten, 2D game library. The basic is depicting from rectangle to another rectangle. Although the domain is 2D, GPU is used for acceleration. With Cgo, compile time was slow. GopherJS is used on browser. Detecting distinct error reason on mobile is hard.

The book I bought at Gijutushoten was mainly about how to use library. This talk was about the internal of the library. I think the audio feature of the game library is sometimes weak. This library uses proper backend for each target . It looks good.

## reviewdog and static analysis for Go / haya14busa
https://docs.google.com/presentation/d/1_BWQXamZvIhL3l9ziL9zb25yP9RjpgXoxkWX-48ECss/mobilepresent?slide=id.p

Talk about reviewdog. Existing solution has the limitation. For example, we cannot use the analysis tools we like. Vim's errorformat feature is ported to Go. Currently only Github is supported, but adding GitLab support is also a target.

Using existing Vim's errorfromat to avoid the reinvention of the wheel looks smart. Are most Gophers Vimmer? Emacs users were slightly away probably due to the effect of VimConf.

## LT (Lightning Talks) Materials
* [Package structure is always concern](https://www.slideshare.net/keigosuda/20171105-go-con2017lt-81642440)
* [Consider better error handling for web apps](https://speakerdeck.com/izumin5210/consider-better-error-handling-for-web-apps)
* Go also needs performance tuning
* [Bioinformatics meets Go](https://speakerdeck.com/otiai10/bioinformatics-meets-go)
* [Let's code interpreter using Go](https://speakerdeck.com/knsh14/go-deintapuritawo-shu-itemiyou)

## Throughout Conference
I always lose the lotteries of Go Conference and this was the first time I attend. Although I initially thought the most of talks are about new features of Go,  actual talks were mainly how to do something using Go.

The contents were wide from network, monitoring to DB and game library etc. I learned a lot  and these will be definitely helpful when I consider the architecture.