サーバーサイドの勉強がしたくてGo言語をやってみようかなと思った。
試しにどんなもんかとGo言語で遊んでいたらGUIが作りたくなったので
BMI計算機を作った。
lxn/walkというGUIを作るライブラリ(Go言語風に言うとパッケージ)を使用したが
情報が少なく地味に面倒だった。
困った時にググっても何も見つからなかったらRedditで聞くという
潔く誰かに助けを請う戦法が必要だと思われる。
あとGoという普遍的な英単語が名前につけられているのもよくない。
全く関係ないウェブサイトがヒットしまくる。
Walkについてもそう。作成者はそこら辺のことを考慮しないアホなのか。
RXMNA言語みたいな絶対他の単語と被らない名前をつけてほしい。
コマンドプロンプトにおける基本的なコマンド
go get - パッケージをインストール
go run - 実行
go build - exeファイルを作る
exeを起動する場合には同じ場所にマニフェストファイルがないといけない。
name.exe.manifestという感じで名前をつけておく
中身は書き換える必要ない
以下マニフェストファイル
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="SomeFunkyNameHere" type="win32"/> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/> </dependentAssembly> </dependency> </assembly>
以下BMI計算機
package main import ( "strconv" "github.com/lxn/walk" . "github.com/lxn/walk/declarative" ) func main() { var heightTE, weightTE *walk.LineEdit var outTE *walk.LineEdit var BMI float64 var BMIre string var josuu float64 var komento string MainWindow{ Title: "BMI計算機", MinSize: Size{150, 150}, Size : Size{250,250}, Layout: VBox{}, Children: []Widget{ Label{Text: "身長(cm)"}, LineEdit{AssignTo: &heightTE}, Label{Text: "体重(kg)"}, LineEdit{AssignTo: &weightTE}, Label{Text: "BMI"}, LineEdit{AssignTo: &outTE, ReadOnly: true}, PushButton{ Text: "BMI計算", OnClicked: func() { hm, err := strconv.ParseFloat(heightTE.Text(), 64) if err != nil { } hm = hm*0.01 weight, err := strconv.ParseFloat(weightTE.Text(), 64) if err != nil { } josuu = hm*hm BMI = weight/josuu BMIre = strconv.FormatFloat(BMI, 'f', 2,64) if BMI<=17.0 {komento="痩せています。" } else if 17.0 < BMI && BMI < 18.5 {komento="やや痩せています。" } else if 18.5 <= BMI && BMI <= 25.0 {komento="普通体型です。" } else if 25.0 < BMI && BMI < 30.0 {komento="やや肥満です。" } else {komento="肥満です。" } outTE.SetText("あなたのBMIは、"+BMIre+"です。"+komento) }, }, }, }.Run() }
パッケージ使うときはエラー処理
err := strconv.ParseFloat(heightTE.Text(), 64)
if err != nil {
}
の部分を書かないと
「返り値を2つ返したい」というエラーが出ることに注意。
クソデカ入力欄が作りたければTextEditを使う。
今回は一行だけの入力欄でよかったのでLineEditを使った。