hakeの日記

Windows環境でプログラミングの勉強をしています。

golang

Go言語 - ソート

sortパッケージで、int,float64,stringのスライスについての小さい順のソートが可能。 逆順が欲しい場合は予め定義されているスライス型(intならIntSlice)にしてからsort.Sort(sort.Reverse(x))とする必要がある。でも、普通にソートして並べ替えた方が単…

Go言語 - 日本語文字列の操作

stringはバイト列なので、日本語文字列をインデックス指定で取り出しても文字単位の指定とはならない。文字単位で指定する場合には一旦runeのスライスに変換すると、インデックスが文字単位と一致する。 また、rangeを使用したforの中でも文字単位(rune)で…

Go言語 - マップ

rubyでいうところのハッシュ。 for rangeで取り出す場合は、キーのみと、キー&値のペアの取り出しができる。 キーを指定して値を読みだす場合、そのキーに対応する値が無い場合は二番目の戻り値がfalseになり、値(最初の戻り値)はゼロ値になる。 package …

Go言語 - 関数を引数にする関数

関数MyMapIntの第一引数は、一つのintを引数にして、intを返す関数。 package main import ( "fmt" ) func MyMapInt(fn func(int) int, sl []int) (ret []int) { ret = make([]int, 0, len(sl)) for _, n := range sl { ret = append(ret, fn(n)) } return }…

Go言語 - 埋め込みによる構造体の継承

構造体Fooを構造体Barに埋め込む(フィールド名をつけないメンバとする)ことで、継承の様なことができる。 package main import "fmt" type Foo struct { name string } func(f *Foo)hello() { fmt.Println("Hello", f.name) } type Bar struct{ Foo } func…

Go言語 - スライス

Go言語では一旦作成された配列の要素数は変更できない。スライスは配列への参照だけれども要素数の変更は可能。スライスに要素が追加されて、配列のキャパシティを超えた場合には、より大きなキャパシティを持った配列と、そのスライスが作成されて要素の値…

Go言語 - 構造体とメソッド

Go言語1.5が公開されたので入替。 構造体とメソッド使用方法の勉強。 注意点として、ポインタ経由で参照渡しされた構造体のフィールドへのアクセス時に *p.hoge のようにアスタリスクをつけるとエラーになる。 package main import "fmt" type Test struct{ …

Go言語 - インターフェース

インターフェースの使用方法の勉強。 いまひとつ理解できていないような気がしますが…… あるインターフェース型で宣言した変数や関数の仮引数は、そのインターフェース型で定義したメソッドを持つデータ型のみ代入可能ということで良いのかな? あるインター…

Go言語 - Shift_JISファイルの読み書き

Windowsでの使用ではSJISのテキストを扱うことが多くなります。SJISファイルの読み書きには以下のパッケージを使用します。 参考サイト ・Go で euc-jp や sjis の csv ファイルを読み込むには変換用のリーダーを1つかませるだけでよかった 入手先 ・https:/…

Go言語でGUIプログラム on Windows

VisualuRubyが使用できなくなってから、exeファイル単体で動作して、かつ、ファイルサイズが巨大にならないGUIアプリ制作環境を探していましたが、Go言語+WALKライブラリがなかなか良さげなのでメモ。 後述のhello.exeの実行ファイルのサイズは5MB弱で、Wind…