KazuminEngine

プログラマーの日記

基礎からわかるGo言語を読んで

「基礎からわかるGo言語」を1日で読んでしまったので、初知りなど感想をまとめておく。

f:id:kazuminkun:20150802202618j:plain

1章

  • コンパイラ言語なので早い。

  • goの第一パラメータがコマンドらしい。(go runとか go buildなど)

2章

  • Goはfunc main() { みたいに{が横にないとエラーが起こるんだって。(宗教がなくなる

  • インクリメントは文。だから、変数に代入することはできない hoge := i++とか。あと、変数の前に++とかもできない。

  • 変数宣言時に初期化しないと0が入る。(perlではundefがはいる。)

  • Perlのコンテキストっぽいなー

var in int = 123

var ii = i

こうすると、iiの初期値のiはint型のためにiiも同様にint型になる。

  • :=はvarと型を省略するための代入。(変数の宣言も含まれているので、すでに宣言済みの変数には使用できません。どれか一つでも未定義ならいける。

  • 拡張子.aがライブラリ

  • forでwhileが賄える。(for 条件式{ のように)

  • forとifの条件式のカッコいらないんだってー。

  • Go言語書いてると型の方にを書かなくちゃいけないので、Goの後にc書く人は、int hogeとかできなさそう。

  • ポインタの演算できない。

  • 基本的に使用されないものが書かれていると、cより頑固に怒ってくれる。

三章

  • Go言語の関数の大きな特徴は、複数の戻り値を一度に返せること。

  • 可変長パラメータの宣言方法が独特

  • 関数リテラル(無名関数)ってのがクロージャー(Rubyクロージャーいっぱい出てくるので理解がすすむ)

  • 関数にも型があって、変数にも入る。初期化されていない関数型変数は、nilが入っている。 (関数リテラルには名前がないので、変数型変数経由で使用するのが一般的だったりするのかな。

  • Go言語では、型にメソッドを持たせることができる。(Haskellみたい。型クラスかな?よく知らないので省略) (Rubyのクラスを型とすると、クラスメソッド的な。)どちらにしても、ネームスペース的な隔たりかなー。

  • deferで関数の遅延実行

五章

  • Goのインターフェース読んでると、「haskellの型クラスはJavaのインターフェース」って言ってた意味がわかってきた。w

  • 型変換可能なのかを確認する「型アサーション」かっこいー(小並感

6章

  • 要素型がある。(配列型ってのはcでもあるけど、これは初めて。

  • Go言語では、配列型を直接使わず参照型のスライス型を使用する。

  • 連想配列がマップという名前(内部的にも違う

  • マップは、キーもバリューも型宣言しないといけない(結構、型型してる)

  • マップは、参照型なので高速っぽい。マップを変数などに代入してもコストがほとんどかからない

7章