1週間Go言語を勉強して登壇してみた vol.1

Go言語

「Go」は2009年にGoogleによって発表されたコンパイラ型のプログラミング言語である。

YouTubeDropboxUberなどでもサービスのクリティカルな部分にGo言語を採用されている界隈で有名な言語となっている 特にGo言語は処理速度がとても速いため、APIのバックエンドやバッチ処理など「パフォーマンスがネックとなる部分」に採用されることが多いです。Androidの開発にも使える。

Goを始めた理由

  • もともとGoに興味があったがしていなかった。
  • 社外の人との合同LT会(勉強会)で登壇することに
  • LTまでの1週間の間に新言語をどれだけ習得できるのかやってみたかった(5日間は別仕事してるので仕事を終えてからです)

GoTour始めてみた(LT登壇まであと7日)

先輩エンジニアの人に勧めていただいたGoTourを3日で終わらようと決意

A Tour of Go

f:id:suga-tech3:20160827163406p:plain

phpと違うなと感じたこと(LT登壇まであと6日)

GoTourを文法を一通り終わらせてbasicまでやってみて気づいたことを書いてみる。

  • コンパイル型であること
  • 並列処理ができること
  • 変数名の 後ろ に型名を書く
  • 変数に暗黙的な型宣言ができる etc.(k := 3)
  • Goはポインタを扱うことができる
  • defer ステートメントという呼び出し元の関数の終わり(returnする)まで遅延させるものがあること。
  • 特有の構造体を持っていること

goにwhile文がなくfor文でループすることができる。

  • 標準のfor文
func main() {
        for i := 0; i < 10; i++ {
        }
}
  • whileのfor文での記述
func main() {
        for sum < 1000 {
        }
}

  • 並列処理とは
func main() {
        go func() {
        //このブロックは並列して実行される
        }()
        //このブロックは上の記述と同時に実行される
}

go特有の構造体

Goはクラスや継承の機能がないが以下のこれらを用いることでオブジェクト指向プログラミングが可能になる。

  • メソッドの定義
  • 構造体埋め込み

構造体の定義と初期化 - Goの場合、大文字から始まる名前 (関数名、型名、フィールド名) は、他のパッケージからアクセス可能になる

//構造体定義
type User struct {
  name string
  age  int
}
 
//User構造体にアクセス
var u User
u.name = "taro"             
u.age = 30                  
fmt.Printf("name:%s", u.name)
  • Goの構造体は以下のような初期化関数を作るのが一般的である
func newUser(name string, age int) *User {
    u := new(User)
    u.name = name
    u.age = age
    return u
}
 
var user *User = newUser("taro",30)

急いで学ぶGo lang#5 構造体 | Developers.IO

Goで何を作ろうか考える(LT登壇まであと4日)

長くなってきたので次の記事へ続く...。