hakeの日記

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

2015-09-01から1ヶ月間の記事一覧

Go言語 - データのランダムシャッフル

ライブラリにシャッフルがなさそうだったので作成。Fisher-Yates shuffleというアルゴリズムを使用しました。 package main import "fmt" import "time" import "math/rand" func shuffle(list []int){ for i := len(list); i > 1; i-- { j := rand.Intn(i) …

Go言語 - 巨大な数を扱う

math/bigライブラリを使用することで巨大な整数や有理数を扱うことができます。 フィボナッチ数列を表示するプログラム。 package main import ( "fmt" ) func main() { var f0 uint64 = 1 var f1 uint64 = 1 for i := 1; i < 100; i++ { fmt.Println(i,f0) …

Go言語 - 無名関数とクロージャ

ある関数foo内で定義された無名関数は、foo内のローカル変数にアクセスできる。 package main import "fmt" func foo() { var s string = "hello foo" f := func(){ fmt.Println(s) } f() } func main() { foo() //-> hello foo } 関数fooの戻り値として返さ…

Go言語 - EXCELファイル操作

xlsx形式のエクセルファイルを読んだり、新規作成したりできます。 ただし、xlsxファイルを開いて、そのファイルを変更保存する。あるいは変更した内容を別名保存すると、その保存したファイルをExcelで開くときに内容を修復する旨のメッセージがでます(Exc…

Go言語 - goyaccで構文解析

Go言語にはgoyaccという構文解析ツールがあるので一番単純な整数の四則演算を行うプログラムを作成してみました。 以下は作成のポイントとなるメモです。 参考サイト goyaccで構文解析を行う lex.Lexer(lex/lexer.go) 先日作成した字句解析プログラムを少…

Go言語 - Set(集合)

本日からGo言語の使用環境は、go version go1.5.1 windows/amd64 です。 Goでsetを扱う方法を見てSet型を作成してみました。

新PC購入 & Windows10アップグレード

前回のレッツノート購入から7年半ぶりの新PC購入です。 Windows10プリインストールモデルまで待とうかとも思いましたが、近場の家電量販店でWindows8.1モデルが底値かなということでモバイル用途のPC(レッツノートの後継)のみ購入しました。初64bit環境と…

Go言語 - WALKでGUI - ListBox

ListBoxの使用例。ウィンドウ上がListBox。 表示項目をstringのスライスにしてModelフィールドに置くことで表示させます。各項目はクリックおよびダブルクリックでイベントが発生します。 ボタンクリックで項目を追加しています。方法はListBox.Model()で項…

Go言語 - 字句解析プログラム

勉強がてら字句解析プログラムを作成してみました。 Lexser.Scan()を実行する毎に、sample.txtから一文字(rune)ずつ読み込み、1トークンを読み込んだら、そのトークンの書かれている行、桁、トークン種類、トークンリテラル文字列を表示します。 数字はNUM…

Go言語 - WALKでGUI - DialogBox

DialogBoxの使用例。 DialogBoxで入力した文字列をMain Windowに表示させています。 Main側と同様にDialogのレイアウトと実体用の構造体を用意します。一点だけ追加として、DefaultButtonとCancelButtonフィールドに各々対応するPushButtonの実体を割り当て…

Go言語 - WALKでGUI - MessageBox

MessageBoxの使用例。 ボタンクリックでMessageBoxを作成し表示させています。 4番目の引数でメッセージボックスのスタイルを指定しています。また各々のスタイルのボタン種類で戻り値が変わるので、戻り値に応じた処理が必要になります。

Go言語 - break先のラベルの位置

二重のforループからの脱出先として、forブロックの下にラベルを書いたらエラーになりました。どうやらforブロックの上に書くのが正解みたい。 感覚的にはブロックの下の方が正しいように思えます。何故上なのだろう? package main import "fmt" func main(…

Go言語 - WALKでGUI - FileDialog

FileDialogの使用例。 ボタンクリックでFileDialogを作成し表示させています。 walk.FileDialog構造体を作成して、ShowOpenメソッドで表示させます。ダイアログがキャンセルで閉じられた場合には戻り値のokがfalseになり、trueの場合はFilePathフィールドか…

Go言語 - WALKでGUI - 単独起動する実行ファイルの作成

WindowsでWALKライブラリを使用したGUIアプリケーションの起動には、マニフェストファイルを同じ場所に置いておく必要がありましたが、rsrcというツールでマニフェストファイル(とアイコンファイル)を実行ファイル内に取り込むことで単独起動するファイル…

Go言語 - WALKでGUI - Menu

Menuの使用例。以下の構造のメニューを作成しました。 File Else ├ Open └ About ├ SubMenu | └ SubItem1 └ ExitMainWinsdowのMenuItemsフィールドにMenuウィジェットを階層的に置いていき末端の項目にはActionウィジェットを置いています。 各ActionのOnTr…

Go言語 - WALKでGUI - RadioButton

RadioButtonの使用例。起動時にRadioButtonを選択してある状態にする方法がわからない。。。 RadioButtunをRadioButtonGroupBoxの中に配置することで、そのグループ内で排他選択ができるようになります。各RadioButtonウィジェットから、そのボタンが選択さ…

Go言語 - WALKでGUI - CheckBox

CheckBoxの使用例。 CheckBoxも状態を保持するので、MyMainWindow構造体に変数を追加し、実体としてアサインします。 二つのCheckBoxをGroupBoxの下に配置して、LayoutフィールドをHBoxにすることでCheckBoxを水平に並べています。また、Check1のCheckedフィ…

Go言語 - WALKでGUI - ComboBox

ComboBox(プルダウンメニュー)の使用例。 ComboBoxは状態を保持するので、MyMainWindow構造体に変数を追加し、実体としてアサインします。 Modelフィールドで表示する項目を、CurrentIndexフィールドで初期値を設定しています。 選択項目を変更すると、OnC…

Go言語 - 省略書式の変数宣言とスコープで悩んだ点(Go1.5)

以下のプログラムでは、forブロックの中で関数hogeの戻り値を取得しています。 このとき変数 err が初めて登場したため ' = ' ではなく ' := ' を使用したのですが、こうすると変数aもforブロック内のローカル変数と判断されてしまいます。このため、ループ…