いっきのblog

技術とか色々

LaravelerがGoを初めてさわって見る

ここ最近LaravelPythonしか書いてないので、技術のアップデートをしよう思ったのがきっかけ。
なぜGoなのかと言われると、以下の理由で決めて見た。

  • Laravel(PHP)が動的型付け言語なので、静的型付け言語を学び直したい
  • 流行っている風のものをやりたいため(流行る理由があると思うので)
  • Laravel(PHP)Webサービス用、Pythonは分析用、Goはちょっとしたツール用という立ち位置にしやすいので、継続しやすいと思っているため
  • 毎日お世話になっているpecoみたいなのを作って見たい

学び方の順序などは、こちらの記事を参考にさせてもらった。 qiita.com

Goの背景や網羅的な使い方などを学ぶ

こちらの記事が全体感を掴むにはちょうどいいと思う。 gihyo.jp

細かいところや、理解が深まらない箇所が必ずでてくるのでその場合はこちらから細かいやり方を学ぶ。 go-tour-jp.appspot.com

大体の理解なら技評の記事 <-> A Tour Goを行き来すればできるけど、部分的にググったりして学んでいく。

忘れている箇所やつまった点をまとめる。

静的型付けと動的型付けの違い

Wikipediaがわかりやすい。 動的型付け - Wikipedia

とても極端に分かれているが、PHP8ではJITコンパイラの採用が可決されたみたいで、IDEとの組み合わせで静的型付けみたいなこともできるんじゃないかなと考えてる。
この記事が面白い。どっちもいいとこ取りはし始めてる。

jp.quora.com

関数とメソッドの違い

自分の頭の中で関数 = メソッドと勝手に認識してるせいで、途中こいつらは何を言っているんだ・・と思ってしまった。
関数

func sum(i, j int) int {
    return i + j
}

func main() {
    fmt.Println(sum(1,2)) // 3
}

関数の方はPHPとほぼ同じなのでわかりやすい。
メソッドの方は構造体(ここだとData)と言われる入れ物に、sumという振る舞いが追加されてるかのように扱える。
GoにはClassがないため、ここらへんで色々工夫するのかな。

type Data struct {
    i int
    j int
}

func (d *Data) sum() int {
    return d.i + d.j
}

func main() {
    data := Data {1, 2}
    fmt.Println(data.sum()) // 3
}

エラー処理

Goでは、errorインターフェースがあって、それを使ってエラーを通知するが、それとは別に例外処理が存在する。
どこまで深く勉強したいところだけど、以下の方の記事がすごく腑に落ちそう。

blog.amedama.jp

終わりに

インターフェースや、醍醐味の一つである並列処理などを書きたかったが、久々のブログで体力がないので次回。