読者です 読者をやめる 読者になる 読者になる

ほげほげ

プログラミング、英会話、ヨガ、料理などの備忘録など。

Goツアーを読んだ その2

moretypesより

  • 配列は型の1部なので、サイズは変更できない
  • goにおいてスライスは配列より一般的
  • スライスは var s[]int = a[1:4] と書く(aは配列)
  • スライスは配列の参照になり、スライスの要素を変更したら配列の要素も変更される
  • 全範囲を表すスライスはa[:] ほかにもa[:10] a[0:] とか書ける
  • スライスの要素数と容量は動的に変更できlen(s),cap(s)で確認できる
  • スライスのゼロ値はnil
  • make関数でスライスが作れる.これが動的な配列を扱う方法になる。
  • スライスの要素にはスライスも含めてなんでも入れることが可能
  • スライスに要素を追加するときはappend関数を使う。 容量の調整も行われる。
  • イテレーションfor i,v := range s {} i:index, v:value, s: slice
  • 連想配列mapmake関数で作成できる。m := make(map[string]string)
  • キーの存在はelem, ok := m[key] でOKがtrue/falseで判別できる
  • 関数も変数。 fn := func(){} とかできるし、関数の引数にすることも可能

methods より

  • goにはclassは無い
  • 型にメソッドを定義することで似た仕組みを実現. func(v Vertex) hoge() {}でVertex型に新しくhoge関数を追加している
  • ポインタレシーバを使う事でいわゆるthisで値を操作するようにオブジェクト自体の値を操作できる(ポインタレシーバがインスタンス関数みたいな感じか)
  • ポインタレシーバーを使わないとレシーバーがコピーされるのでパフォーマンス的によくない。← staticと違う部分
  • インターフェースの実装は必要なメソッドを実装するだけ。implementsで指定する必要はない
  • var i interface{}iにどんな型でも代入できる. v,ok := i.(string)アサーションもできる
  • Stringerインターフェースがある。型を文字列で表現する関数String()を実装する。←javaのtoString()てきな?
  • 複数戻り値はerrorか否かの判別自体によく使われる。
  • ioパッケージでデータストリームの操作
  • imageパッケージで画像関連の操作