6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Go言語紹介

Posted at

この記事は社内にてGo言語のプレゼンを行うために作成した資料です。

ちなみに、自分はUDPで通信するデバイスのエミュレーションをするのにGo言語を使っていました。

Go言語とは?

The Go Programming Language

  • Googleによって開発されている
  • Go、Go言語、golangなどと呼ばれる
  • 発表されたのは2009年であり、かなり"若い"言語である
  • マスコットはGopher君

Go言語のすごいところ

  • 静的型付け
  • コンパイル速度が速い

生産性が高くシンプルな文法

package main

import "fmt"

func main() {
    var m string = "Hello, world"
    fmt.Println(m)
}
  • セミコロンなし
  • 型は後置
  • 多値返却できる
  • 型推論
    • 上記のvar m string = "Hello, world"m := "Hello, world"とも書ける

標準のパッケージや言語仕様による機能が便利

  • HTTP、TCP、UDP、正規表現等を扱うパッケージが標準で用意されている
  • goルーチンと呼ばれる軽量スレッド実行機能により並行処理が簡単に行える
package main

import (
    "fmt"
    "time"
)

func readword(ch chan string) {
    fmt.Println("Type a word, then hit Enter.")
    var word string
    fmt.Scanf("%s", &word)
    ch <- word
}

func timeout(t chan bool) {
    time.Sleep(5 * time.Second)
    t <- true
}

func main() {
    t := make(chan bool)
    go timeout(t)

    ch := make(chan string)
    go readword(ch)

    select {
    case word := <-ch:
        fmt.Println("Received", word)
    case <-t:
        fmt.Println("Timeout.")
    }
}
  • goをつけて実行された関数は非同期で実行され、結果はchannelを介して受け取る
    • C#などのasync/awaitと異なるMessage passing型の並行処理モデル

標準のツールが便利

  • go fmt
    • コード整形
  • go vet
    • 静的解析

サードパーティ製の開発用ツールも豊富。

クロスコンパイル/ワンバイナリ

  • ビルドするとひとつのバイナリファイルになり、他のランタイムライブラリ等は不要
  • Windows/Linux/macOS向けのクロスコンパイルが可能

いまいちなところ

Go言語の採用例

参考: Go言語を採用している有名なオープンソースのプロダクト - write.kogu

始めるには?

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?