ひつじのにっき

mhidakaのにっきです。たまに長文、気が向いたとき更新。

【NT-4】プログラミング言語 Go

鵜飼 文敏

Go言語とは

新しいシステムプログラミング言語
Fast/Fun/Productive
コンパイルの遅さを解消するために。


すべてのソースがpackage行ではじまる
プログラムはmainというパッケージ

main.mainがエントリポイント

  • flag package でコマンドライン引数を扱う
  • 関数定義は func 関数名(){本体}
  • printfはfmt.Printf(s string)
  • gofmtで標準スタイルが自動適用。


変数宣言は var i int となる。
以下は等価

	var i int = 0
	i := 0

	var s string = "hello"
	s := "hello"

条件分はif、Go言語では改行で終わりを示すので
if{
は、大丈夫だけど
if
{
が書き型的にNG。

ループはforしかない。

  • for i:=0; i < n; i++{...}
  • for condition {...}
  • for {...}

文字列とバイト列は違う型

変なバイト列は文字としてはU+FFFD扱い。
相互にbyte(s), string(b)で変換可能。Stringは代入できない。

配列とスライス

スライスはある長さの領域を指したリファレンス。
配列はサイズが違えば代入ができない。sliceへの代入は参照扱い。

暗号Readerが必要とするもの:入力のためのReader。暗号に使うmap
sturctで構造体を定義、typeで型を定義
Readerはio packageのinterface。多値を返すことができる。

return nr,errなど。
受け方はnr,err := Fecth()で受け取れる。


mapがあります。mapの型は map[keyの型]値の型 となる
newとmake。new:型Tの値を作ってポインタ *Tを返す、makeはslice,map,chanをつくる。

マルチコア向け

スレッドより軽い。chanでメッセージパッシング、I/Oには向かない。
http://golang.org/

バイナリの実行速度高速、タイプセーフ、メモリセーフ(ポインタ演算なし)

includeがなく、パッケージはコンパイル時点で作ってしまい、
オブジェクト化されているため、コンパイル速い。
(Goにtemplate、Exceptionはない)