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

🐭 Goに入門しよう

🐭 Goに入門しよう

社内LTにて、Goを布教しようと試みましたʕ◔ϖ◔ʔ

More Decks by 長谷川広樹 (俺です)

Other Decks in Programming

Transcript

  1. Goの基本文法(1) package <パッケージ名> // 名前空間の宣言 import "<パッケージ名>" // パッケージの読み込み func

    Xxx(x string) string { // 関数 } ・一つのディレクトリ内では一つのパッケージ名のみ. ・関数名は,頭文字が大文字だとパブリック,小文字だとプライベートになる. ・引数と返却値に型付けが必要.
  2. Goの基本文法(3) ▪ 構造体 ・クラスのようなもの ・データのみを保持 ・頭文字の大小で  パブリック/プライベートを制御 ▪ 構造体と関数の関連付け ・構造体に関数を持たせる

    ・構造体から関数をコールできる  (メソッド化) ・継承の廃止については後述 // 構造体 type Name struct { FirstName string LastName string } // コンストラクタ func NewName(firstName string, lastName string) *Name { return &Name{ FirstName: firstName, LastName: lastName, } } // フルネームを返却するメソッドを関連付ける func (name *Name) fullName() string { return fmt.Sprintf("%s %s", name.FirstName, name.LastName) }
  3. Goのよいところ(4) 言語名
 1回目
 2回目
 3回目
 Go
 541.38秒
 546.18秒
 543.36秒
 C言語


    563.23秒
 563.32秒
 561.96秒
 Java
 543.91秒
 543.08秒
 541.13秒
 Python
 18時間程度
 18時間程度
 18時間程度
 ihttps://github.com/meideru/PrimeSpeedTest ▪ コンパイルが速い ・他の静的型付けや動的型付けよりもコンパイルが速い ・Javaは中間言語に一度変換する必要があるが,Goでは直接機械語に翻訳可能 指定した数値範囲内の素数を出力するプログラムでのコンパイル速度検証
  4. Goのよいところ(6) func Division(x int, y int) (int, int) { //

    商を計算する. quotient := x / y // 余りを計算する. remainder := x % y // 商と余りを返却する. return quotient, remainder } ▪ 複数の返却値 ・複数の値をシンプルに返却可能. ・並列処理を組み合わせると可能性∞
  5. Goへの批判(1-2)※悪いところではない // Nameから処理を委譲された type MyName struct { *Name } //

    コンストラクタ func NewMyName(name *Name) *MyName { return &MyName{ Name: name, } } type Name struct { FirstName string LastName string } func NewName(firstName string, lastName string) *Name { return &Name{ FirstName: firstName, LastName: lastName, } } // フルネームを返却 func (name *Name) fullName() string { return fmt.Sprintf("%s %s", name.FirstName, name.LastName) } 埋め込む側(委譲元) 埋め込まれる側(委譲先)
  6. Goへの批判(1-3)※悪いところではない func main() { // 埋め込む側の構造体の初期化 name := NewName("Hiroki", "Hasegawa")

    // コンストラクタインジェクション myName := NewMyName(name) // Name構造体のメソッドをコールできる. fmt.Printf("%#v\n", myName.fullName()) // "Hiroki Hasegawa" } ・埋め込んだ側の構造体が,埋め込まれた構造体にメソッドを託す ・MyName構造体はfullNameメソッドを使用できる