ynk800のメモ帳

イベントの参加記録や備忘録などを書いていきます。

A Tour of Goのメモ1

前書き

普段はJavaエンジニア(と言いつつDockerやらミドルウェアやらをせっせと準備するお仕事)をしているのだが、ちょうど手が空いた折に社内で「Golangを使ってみよう」という勉強会の告知があり、飛び入りで参加してきた。 「毎年1つは新しい言語を学べ」と偉い人も言っていたわけだし、いい機会なので公式チュートリアルをおさらいしつつ気になった点をメモしておく。 本記事は「Welcome」と「Packages, variables, and functions.」までのメモ。 あくまで自分の勉強のためのメモ書きなので、文法の解説には触れない。文法を勉強したければ本家のA Tour of Goを参照してほしい。

A Tour of Go

変数の型宣言

https://go-tour-jp.appspot.com/basics/4

Javaやその他多くの言語とは違い、変数名と型の宣言が逆になっている

func add (x, y int) int{
    return x+ y
}

今までC,Java,Groovy,C#,Ruby,Python等、いろんな言語を触ってきたがこのパターンは初めて。 なぜこのような言語仕様なのかは別ページにまとまっていた。

https://blog.golang.org/gos-declaration-syntax

日本語に翻訳した記事:https://qiita.com/m0a/items/2b03b189d746ae231756

「宣言部を読むときに左から順番に読めば済むからわかりやすいだろ?」という主張のようだ。

主張は理解できるし判ってしまえば何ということはない。けど、これは慣れるまでは気持ち悪さがあるかな。。。

関数の複数戻り値

https://go-tour-jp.appspot.com/basics/6

最近のC#ではメソッドが複数の戻り値を返せるようになったと小耳に挟んだりしたけれど、Golangでも関数から複数の戻り値を返せるようだ。

func swap (a string, b string) (string, string){
    return b, a
}

Javaではどうしても複数の値を返したければ何がしかのクラスを作ってラップしてやるしかなかった。 オブジェクト指向でキチンと設計するためには意味のある単位でクラスを作って返却したほうがわかりやすいと思うが、 一方でサクッと簡単なツールを作りたいときにいちいちクラスを作るのが面倒だったりもする。 重宝しそうだが、めんどくさがって何でもかんでもこれで返却するのは禁物かなぁというのが今のところの感想。

関数定義時の名前付き戻り値

https://go-tour-jp.appspot.com/basics/7

関数定義の戻り値部分に変数名を明示してやると、当該関数内での変数の宣言とreturn文の記述がある程度省略できるらしい。 これは結構便利かな。元ページにも書いてあるけど、関数が長くなると可読性下がりそうなのでやりすぎは禁物。

Goで扱える組み込み型

標準で複素数が扱えるらしい。 業務では複素数扱う機会がなかったのでそんなに困ったことはないが…Javaでやるなら外部ライブラリを使うことになる。 Complex (Apache Commons Math 4.0-SNAPSHOT API) 標準で複素数が扱えるということは、組み込みの数値計算系処理も充実しているのかな?