Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Go入門 / introduction-go-20180530

Go入門 / introduction-go-20180530

以下の勉強会の発表資料です。

【5/30東京】Vue.js/React/Go/Rails5.2のリアル★ShuuuMai #04
https://connpass.com/event/86508/

補足や、スライド内で紹介されている参考リンクなどは以下の記事にまとめてあります。
https://budougumi0617.github.io/2018/05/30/go-introduction/

Yoichiro Shimizu

May 30, 2018
Tweet

More Decks by Yoichiro Shimizu

Other Decks in Technology

Transcript

  1. • 清水 陽一郎 @budougumi0617 • freee 株式会社 アプリケーションエンジニア ◦ Go

    / Ruby on Rails / .NET(WPF/UWP) / Xamarin.Mac ◦ 前職ではC/C++/.NET(WPF) • Blog ◦ https://budougumi0617.github.io/ 自己紹介
  2. • 2009年に公開 ◦ (v1.0は2012年) • Google製 • Gopherくんがマスコット Goとは The

    Go gopher was designed by Renee French. gopher-front.png was created by Takuya Ueda. 01. What is Go?
  3. { Goのデザインポリシー Go is an open source programming language that

    enables the production of simple, efficient and reliable software at scale. 01. What is Go?
  4. シンプルな文法・言語仕様 break default func interface select case defer go map

    struct chan else goto package switch const fallthrough if range type continue for import return var あとは演算子とプリミティブ型を覚えるだけ。 02. Features
  5. リッチな標準ライブラリ package main import ( "fmt" "log" "net/http" ) func

    handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:]) } func main() { http.HandleFunc("/", handler) log.Fatal(http.ListenAndServe(":8080", nil)) } 02. Features
  6. CSP由来の並行処理 package main import ( "fmt" "time" ) func say(s

    string) { for i := 0; i < 5; i++ { time.Sleep(100 * time.Millisecond) fmt.Println(s) } } func main() { go say("world") say("hello") } 02. Features
  7. Gowayという名のレール 03. In Development func main() { fmt.Println("Hello World") }

    syntax error: unexpected semicolon or newline before { func main() { fmt.Println("Hello World") } Correct format
  8. Gowayという名のレール 03. In Development func main() { fmt .Println("Hello World")

    } syntax error: unexpected semicolon or newline before { func main() { fmt. Println("Hello World") } Correct format
  9. Table Driven Test 03. In Development func TestFizzBuzz(t *testing.T) {

    tests := []struct { subject string input int want string }{ {subject: "num", input: 2, want: "2"}, {subject: "multi3", input: 3, want: "Fizz"}, {subject: "multi5", input: 5, want: "Buzz"}, ... } for _, tt := range tests { t.Run(tt.subject, func(t *testing.T) { got, err := FizzBuzz(tt.input) if got != tt.want { t.Errorf("want %d, but %s:", tt.want, got) } } } • Found bug ◦ Add case ◦ Start TDD • Maintainable • Reusability
  10. 標準Interfaceとダックタイピング 03. In Development type Writer interface { Write(p []byte)

    (n int, err error) } // ProxyWriter has Write method type ProxyWriter struct {} func (p *ProxyWriter) Write(p []byte) (int, error) { // Some doing... } func Save(buf []byte, w io.Writer) { // Some doing... } Save(buff, &ProxyWriter{}) • Goはダックタイピング • なるべく標準Interfaceを実装する ◦ io.Writer ◦ io.Reader ◦ fmt.Stringer ◦ sync.Locker • OSSも標準interfaceの実装が多い • ReplaceやOSSの利用がしやすい • 自分で定義するとしても単一責務の 原則を守ること
  11. • A Tour of Go ◦ https://tour.golang.org/ • A Tour

    of Go日本語版 ◦ https://go-tour-jp.appspot.com/ Webでカジュアルに試す 04. Start Go
  12. • 主要なEditorにプラグインあり ◦ Visual Studio Code ◦ Atom ◦ Vim

    ◦ Emacs • JetbrainsからIDEも公開 ◦ Goland • (自分はVimで書いてます) Goの開発環境 04. Start Go
  13. • delve ◦ https://github.com/derekparker/delve ◦ GDBライクなデバッガ • gore ◦ https://github.com/motemen/gore

    ◦ irb, iexなどのようなREPL • richgo ◦ https://github.com/kyoh86/richgo ◦ go testの結果出力をカラフルに (公式以外の)便利なツール 04. Start Go
  14. • golang.tokyo ◦ https://golangtokyo.connpass.com/ • Goビギナー ◦ https://go-beginners.connpass.com/ • Women

    Who Go ◦ https://womenwhogo-tokyo.connpass.com/ • 横浜Go読書会 ◦ https://yokohama-go-reading.connpass.com/ • GoCon ◦ https://gocon.connpass.com/ • Akiba.go ◦ https://akihabarago.connpass.com/ • kamakura.go ◦ https://twitter.com/kamakura_golang 関東のGoの勉強会 04. Start Go
  15. • Goはシンプルさを追求した言語 ◦ 迷わず書ける ◦ 迷わず読める • Web開発、CLIツールの開発で人気 ◦ コンテナー化に向いている

    ◦ マルチプラットフォーム対応がラク • 興味をもった方はA Tour of Go/そしてインストール • コミュニティに入れば初心者でも大丈夫 Summaries