Slide 1

Slide 1 text

今日から始めるGo 2023/06/15 Go言語/最新情報・活用事例セミナー Yoichiro Shimizu @budougumi0617

Slide 2

Slide 2 text

● Go歴7年(実務では5年ほど) ● 株式会社LayerX ソフトウェアエンジニア ○ Goで法人カードを作っています ● 一般社団法人Gophers Japan 理事 ○ Go Conference、Gopher道場運営etc ● 2022年7月Goの書籍を単著で発売 ○ 詳解Go言語Webアプリケーション開発 ○ 好評につき韓国語に翻訳予定 清水 陽一郎 @budougumi0617 2 https://twitter.com/lucky_CandR/status/1656541418595434496

Slide 3

Slide 3 text

3 株式会社LayerX

Slide 4

Slide 4 text

© 2023 LayerX Inc. 4 * 経費精算のSlack連携は申請内容の通知のみ 稟議・支払申請・経費精算・ワークフロー ・AIが領収書を5秒でデータ化 ・承認はスマホのアプリから ・領収書の重複申請などミス防止機能 仕訳・支払処理効率化 ・AIが請求書を5秒でデータ化 ・仕訳データを自動学習、 手入力ゼロへ ・スキャン代行も実施 ・利用料無料 ・即時追加発行 ・最大1億円決済可能 法人カードの発行・管理 ・無料で始められる ・手入力ゼロで証憑管理 ・改正電子帳簿保存法に対応 帳票保存・ストレージ 「バクラク」シリーズラインナップ

Slide 5

Slide 5 text

© 2023 LayerX Inc. 5 経理担当者の法人カード支払業務をバクラクに! 最大 2% 還元 最大

Slide 6

Slide 6 text

Goとは

Slide 7

Slide 7 text

Goとは ● Googleで2007年に考案(OSS化は2009年) ○ Robert Griesemer ○ Rob Pike ○ Ken Thompson ● 半年に1度のリリース ○ 2023年6月現在1.20.5が最新 7 The Go gopher was designed by Renee French.

Slide 8

Slide 8 text

Goとは ● 強い静的型付け、型推論 ● コンパイル言語 ● 手続き型 ● オブジェクト指向ではない ● ポインタがある 8

Slide 9

Slide 9 text

Goで作られたOSS ● Docker ● Kubernetes ● Terraform ● TiDB ● Prometheus ● etc... 9

Slide 10

Slide 10 text

● Google ● NETFLIX ● Meta ● Microsoft ● Uber ● saleforce ● 国内 ○ https://github.com/golang/go/wiki/GoUsers#japan 利用企業 10

Slide 11

Slide 11 text

誕生背景・設計思想

Slide 12

Slide 12 text

Goは何を目的に作られたのか? ● プログラミング言語には生まれた背景・言語哲学がある ● 例えばHaskell ○ 当時乱立していた関数型言語を統一するため ● 例えばRuby ○ ストレスなくプログラミングできる 12

Slide 13

Slide 13 text

Goは何を目的に作られたのか? ● Go ○ ソフトウェア開発の中で発生していた課題解決のため ● Go登場以前のGoogleのソフトウェア開発 ○ C++, Java, Python ○ ビルド時間のコスト ○ プログラミングコードの安全性 13 https://talks.golang.org/2012/splash.article

Slide 14

Slide 14 text

Goは何を目的に作られたのか? ● コンパイル速度が速いこと ● 安全に書けること ● 本質にフォーカスした開発ができること 14 https://talks.golang.org/2012/splash.article

Slide 15

Slide 15 text

● スクリプト言語のプログラミングの容易さ ● コンパイル言語の効率と安全性 ● ネットワークプログラミング ● マルチコアコンピューティング Goは何を目的に作られたのか? 15 https://golang.org/doc/faq#creating_a_new_language

Slide 16

Slide 16 text

Simplicity - 徹底的な簡潔性 ● GoのMission ○ Creating software at scale ○ Running software at scale ● システムは成長する際に、デザインの簡潔性を通してのみ、 安定し、安全であり、首尾一貫したままでいられる 16 Go's New Brand の Mission, プログラミング言語 Go まえがき より

Slide 17

Slide 17 text

安定した言語仕様 ● Goは1.0(10年前)から言語仕様がほとんど変わらない ○ 予約語も25個から増えない ● 今後もGo1.Xのうちは言語仕様は変わらない ○ Genericsが入るときにGo2になると言われていたが、 Go1のまま導入された 17

Slide 18

Slide 18 text

● Goは身近なサービス・企業で使われている ○ 決済のようなミッションクリティカルなサービスにも ● Goはソフトウェア開発の課題解決を目指した言語 ○ Creating software at scale ○ Running software at scale ● 単純さの中に生産性を見出している(UNIX思考的) ここまでのまとめ 18

Slide 19

Slide 19 text

言語仕様

Slide 20

Slide 20 text

少ない予約語 20 https://golang.org/ref/spec#Keywords

Slide 21

Slide 21 text

スライスとrange ● 可変長配列 ● オブジェクトに対する反復処理 21 https://go-tour-jp.appspot.com/moretypes/16

Slide 22

Slide 22 text

ポインタ ● ちょっとゆるい ● (*p).Xと書かなくても良い 22 https://go-tour-jp.appspot.com/moretypes/1

Slide 23

Slide 23 text

interface ● ダックタイピングを採用 ● 実装提供者ではなく利用者が定義する ○ 実装に依存せずに独自の interfaceごしに利用できる 23 https://go-tour-jp.appspot.com/methods/9

Slide 24

Slide 24 text

goroutineとchannel ● ランタイムが管理する軽量スレッド ● goroutine間を通信するパイプ 24 https://go-tour-jp.appspot.com/concurrency/2

Slide 25

Slide 25 text

多値とエラー ● 関数・メソッドは複数の値を返しうる ● 例外機構はない 25 https://go-tour-jp.appspot.com/methods/19

Slide 26

Slide 26 text

Genereics ● Go1.18から導入 ● 型キャストの削減 ● 実行時の型チェックを減らしより安全なプログラミングが可能に 26 https://go.dev/doc/tutorial/generics

Slide 27

Slide 27 text

slog ● Go1.21から導入予定 ● ログレベル、構造化ログの出力などができるようになる ○ 現時点の標準パッケージは時刻を含んだ単純な文字列出力しかできない 27 https://pkg.go.dev/golang.org/x/exp/slog

Slide 28

Slide 28 text

Web開発とGo

Slide 29

Slide 29 text

● 並行処理が強力な標準パッケージ ○ プロダクションレディなマルチリクエスト処理が可能なnet/httpパッケージ ○ コネクションプールが実装されたdatabase/sqlパッケージ ● Goをインストールするだけでローカルに開発環境を構築できる ○ Dockerなしでも安定した開発環境 ○ go testですぐにテストが実行可能 ○ go modulesですぐに依存性管理が可能 ○ VSCodeでもリッチなIDE体験が可能(gopls) ○ Go本体のアップデートも容易 Web開発とGo 29

Slide 30

Slide 30 text

● SaaS上の様々なランタイム環境で実行可能 ○ 各コンテナ実行環境 ○ AWS ■ App Runner ■ Lambda ○ GCP ■ Cloud Run ■ Cloud Functions Web開発とGo 30

Slide 31

Slide 31 text

● 各スキーマ駆動開発も利用可能 ○ gRPC ○ Connect ○ GraphQL ○ OpenAPI Web開発とGo 31

Slide 32

Slide 32 text

Goを始める

Slide 33

Slide 33 text

● Gopher道場とは、実践的なGoを体系的に学べる場です。 ○ https://gopherdojo.org/ ● 動画 ○ https://www.youtube.com/@gopherdojo ● スライド ○ http://tenn.in/go ● Gopher道場の動画コンテンツを完全に公開しました ○ https://zenn.dev/gophersjp/articles/834d6382991674 Gopher道場 33

Slide 34

Slide 34 text

● 初めてのGo言語 ―他言語プログラマーのためのイディオマティックGo実践ガイド ● Go言語プログラミングエッセンス ● 実用 Go言語 ―システム開発の現場で知っておきたいアドバイス ● Go言語による分散サービス ―信頼性、拡張性、保守性の高いシステムの構築 ● エキスパートたちのGo言語 一流のコードから応用力を学ぶ ● Goならわかるシステムプログラミング 第2版 書籍 34

Slide 35

Slide 35 text

● Goはソフトウェア開発の課題解決を目指した言語 ○ Creating software at scale ○ Running software at scale ● 強力な並行処理と素朴な言語仕様 ● 2022年以降は日本語書籍・Web学習も豊富で始めやすい! まとめ 35

Slide 36

Slide 36 text

● 他にも聞いてみたい、話してみたいという方は TwitterでDMor雑談募集ページからご応募ください! ● https://twitter.com/budougumi0617 ● https://jobs.layerx.co.jp/b5e09accdac74482b8a7ebc33824e7df 終わりに 36