Slide 1

Slide 1 text

Go言語ってどんな感じ?

Slide 2

Slide 2 text

言語とは 読みやすい無駄のないシンプルなコードで記述を 行い、並列処理を得意としておりCPUへの負荷が 少なく軽量であること、そして高速コンパイルによ る実行速度が速い - 2009年Googleが公開したプログラミング言語 - 特徴「軽量・高速・シンプル」 - さらに詳しく特徴↓↓↓

Slide 3

Slide 3 text

因みにこの子の名前は「Gopher(ごーふぁー)」といいます Gopherを日本語でホリネズミ

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

Go言語が影響を受けている言語 - C言語 - Pascal - Modula - Oberonファミリー - Newsqueak - Limbo - Python など

Slide 7

Slide 7 text

2019年 2020年 世界100カ国
 71281人
 世界162カ国
 116648人
 エンジニアが学びたい言語ランキング <米HackerRank社より>

Slide 8

Slide 8 text

言語のシェアランキングは??? 信頼できるページあります http://pypl.github.io/PYPL.html

Slide 9

Slide 9 text

Go言語のメリット - 静的コード分析
 - コードを実行せずに行なう検証
 
 - 組み込みテストおよびプロファイリングフレームワーク - テスト駆動開発 - UNIXのパイプライクチャネルの概念に基づく軽量のマシンコード言語 - こんな感じ seq(10) | fizzbuzz | stdout - 高速コンパイル機能 - Go言語から機械語に直接コンパイルする - Generics、継承、例外処理、while文やdo-whileがない - 安全性が高いシンプルな構造を保つ。 - 初心者でも理解しやすい、コード編集が用意、コードエラーが容易に理解できる

Slide 10

Slide 10 text

- 継承がない
 - classがない。拡張し辛い。java、scala脳だとハマる
 - シンプルな構造にするため
 - genericsがない - メソッドの引数に特定の型を決め打ちしないといけない→型クラスが使えない - 同じような処理をつくるのにわざわざ、型の異なったものを作ったりする必要がある - セキュアなメモリ管理を達成するために切り捨てられた機能 - ソースファイルに名前空間がない - scalaみたいにファイル単位でimportしてメソッドを使ったりできない - package単位でimportする - 同じpackage内に同じメソッド名は作れない - 標準関数が貧弱 - JavaでいうLinkedHashMapのように順番を保証したmapを作れない - 大体自作かパッケージを探すことが多い Go言語のデメリット

Slide 11

Slide 11 text

Go言語のまめちしき - Go言語設計者の3人は共通してC++が好きじゃない - Go言語、Golangではなく正しくはGo - go.orgのドメインが欲しかったが当時先約がいたらしい (今は空いてるhttps://go.org/) - なのでgolang.orgを取得した - ちなみにhttp://go.com/

Slide 12

Slide 12 text

Go言語書いて実行して遊んでみました

Slide 13

Slide 13 text

Go言語動かしてみた一覧 - hello world - 並行処理 - goroutine(ゴルーチン) - channel - その他 - select - 例外 - testing

Slide 14

Slide 14 text

hello worldと実行確認 https://play.golang.org/p/E0G6CLUF8cx

Slide 15

Slide 15 text

goroutine - goroutineは軽量スレッドでGoステートメントで関数を指定することで並行実行される - 並列ではなく並行処理です - goroutineを使わない - 6秒かかるコード - https://play.golang.org/p/sYdSexXloBs - goroutineを使う - 3秒にするコード - https://play.golang.org/p/AwvbPW5cvsA

Slide 16

Slide 16 text

channel - channelはgoroutineで並行実行してる中で値を受信待ちをしてくれる - 非同期処理が帰ってくるまで待ってくれる - channelを使ってみる - 基本 - https://play.golang.org/p/G7hhkkPAl39 - goroutineで使う - https://play.golang.org/p/7Ys1_uRHOmT

Slide 17

Slide 17 text

select - selectはswitch文と同じ - https://play.golang.org/p/pODGsdGxAwT

Slide 18

Slide 18 text

例外処理 - errors.New - throw e的なやつ - https://play.golang.org/p/L9AfvW1UOMu - fmt.errorf - Scalaでいうf補完子 - https://play.golang.org/p/4FDlKp_0tPk - 複数のエラーハンドリング - https://play.golang.org/p/eLSp9qYrqyy

Slide 19

Slide 19 text

testing - テストコードです - https://play.golang.org/p/aM67XOsGs-Z - テスト成功 - テスト失敗 $ go test -v === RUN TestHello --- PASS: TestHello (0.00s) hello_test.go:15: TestHello終了 PASS ok _/C_/workspace/tech_do/hello 0.061s $ go test --- FAIL: TestHello (0.00s) hello_test.go:12: 実際: こんにちは、筋肉くん! 理想: こんにちは、鈴木くん! ! hello_test.go:15: TestHello終了 FAIL exit status 1 FAIL _/C_/workspace/tech_do/hello 0.042s

Slide 20

Slide 20 text

FIN