Slide 1

Slide 1 text

Step up Go for Students 2-2 @nsega The introduction of my way to learn Go for beginners

Slide 2

Slide 2 text

About Me ● Naoki Sega (Twitter/GitHub: @nsega ) ● Tech Lead, Backend Team in Mercari JP / Catalog Team ● Joined Mercari JP in November 2018. ● Go : About 1 year experience in coding as the Production Code. ● Community : Kubernetes Meetup, Cloud Native Meetup, … etc ● My current interests: Go, GCP, Kubernetes, Microservices, CNCF Products.

Slide 3

Slide 3 text

Agenda

Slide 4

Slide 4 text

Agenda ● My background ● My approach to learn Go ● The introduction of my 4 Tips ● Conclusion

Slide 5

Slide 5 text

My background

Slide 6

Slide 6 text

My background ● PHP, Java (Spring, Spring MVC, Spring Boot, ..etc) ● Experience developing and operating in large-scale service ● Experience with AWS, Sakura(cloud services) and On-premises ● More than 10 years experience in Backend/Infra Engineer

Slide 7

Slide 7 text

My approach to learn Go

Slide 8

Slide 8 text

INPUT OUTPUT PROCESS My Learning Flow - Overview Phase 1 Getting Started Phase 2 More practical Phase 3 practice, .. and practice through GitHub Issues/PRs Community, Social Media Code Code, Doc Code, Doc Code, Doc

Slide 9

Slide 9 text

INPUT Phase 1 : Getting started ● The Go Programming Language ○ Documentation https://golang.org/doc/ ○ A Tour of Go https://tour.golang.org/list ○ The Go Programming Language Specification https://golang.org/ref/spec ○ Packages https://golang.org/pkg/ My approach to learn Go (1/4)

Slide 10

Slide 10 text

INPUT Phase 2 : More practical ● Effective Go https://golang.org/doc/effective_go.html ● CodeReviewComments https://github.com/golang/go/wiki/CodeReviewComments ● Goに入ってはGoに従え https://ukai-go-talks.appspot.com/2014/gocon.slide ● Go at Google: Language Design in the Service of Software Engineering https://talks.golang.org/2012/splash.article ● Uber Go Style Guide https://github.com/uber-go/guide/blob/master/style.md My approach to learn Go (2/4)

Slide 11

Slide 11 text

My approach to learn Go (3/4) INPUT Phase 3: practice, practice and practice ● Practical Go: Real world advice for writing maintainable Go programs https://dave.cheney.net/practical-go/presentations/qcon-china.html ● High Performance Go Workshop https://dave.cheney.net/high-performance-go-workshop/sydney-2019.html ● Looking for Issues/PRs and Reading Code ○ in OSS ( Kubernetes, Docker, go and etc) ● Attending a study session/Go community ○ In my case, GoFriday, mercari.go

Slide 12

Slide 12 text

INPUT Optional (To catch up on latest information timely) ● The Go Blog ● go.dev, pkg.go.dev, learn.go.dev ● Go community ○ The Go Project https://golang.org/project/ ○ Gophers (gophers.slack.com) FYI: to join gophers.slack.com ○ golang.tokyo  , Go Conference , mercari.go and etc in Japan. ● reddit - r/golang ● Twitter Golang Weekly(@golangweekly), Go News(@golangnews), Go Time(@GoTimeFM) My approach to learn Go (4/4)

Slide 13

Slide 13 text

INPUT OUTPUT PROCESS My Learning Flow - Overview Phase 1 Getting Started Phase 2 More practical Phase 3 Practice,..and practice through Issues, PRs Community, Social Media Code Code, Doc Code, Doc Code, Doc

Slide 14

Slide 14 text

Tips

Slide 15

Slide 15 text

Tips 1 : Let’s use the go tool Go tool ● Many useful tools prepared in cmd package. ● e.g. go vet, go generate, go build, ...etc ● I frequently used go tool :) https://golang.org/cmd/go/ https://godoc.org/golang.org/x/tools https://godoc.org/golang.org/x/tools/cmd

Slide 16

Slide 16 text

Tips 2 : Use the Lint tools: reviewdog https://github.com/reviewdog/reviewdog https://link.medium.com/n9WDCXP3lV

Slide 17

Slide 17 text

Tips 2 : Let’s use the Lint tools: reviewdog ● govet golang.org/cmd/vet/ ● golint github.com/golang/lint ● misspell github.com/client9/misspell ● errcheck github.com/kisielk/errcheck ● staticcheck staticcheck.io/docs/staticcheck https://github.com/reviewdog/reviewdog

Slide 18

Slide 18 text

Tips 3 : Let’s use IDE and editor support plugin ● gofmt ● goimports ● Lookup Godoc ● Code completion/Code navigation ● Debugger FYI: My recommendation: GoLand “GoLand is an IDE by JetBrains aimed at providing an ergonomic environment for Go development.” GoLand 2019.3: Faster Than Ever Before with Improved Go Modules Support, New Quick-fixes, and Much More

Slide 19

Slide 19 text

The Go Playground play.golang.org ● You can build and run the programs easily on the Go Playground. ● e.g. Data Structures(Arrays, Slices, Maps), Concurrency Tips 4 : Let’s use the Go Playground

Slide 20

Slide 20 text

Conclusion

Slide 21

Slide 21 text

Conclusion ● Implementing INPUT => PROCESS => OUTPUT cycle repeatedly. ● Reflecting my output and others feedback constantly. ● Designing simply, Coding simply. ● Contributing to OSS, community. ● Practice, practice, and practice.

Slide 22

Slide 22 text

Any Questions??