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

i++

プログラム系のメモ書きなど

golang

golang : eval (数式の evaluation)を行う

go/token パッケージ、go/types パッケージ、go/constant パッケージを使用します。 import ( "fmt" "go/token" "go/types" "go/constant" ) fs := token.NewFileSet() tv, err := types.Eval(fs, nil, token.NoPos, "1 + 2 * 3 % 4") if err != nil { fmt.P…

golang : template の range で index を使う

以下の様なデータを template.Execute のデータに渡したとすると type data struct { Values []string OtherValues []string } テンプレートで <ul> {{range $i, $v := .Values}} <li>{{index $.OtherValues $i}} のようにするとインデックスでアクセスできる( Othe</li></ul>…

golang : コミット時に gofmt を実行する(pre-commit hook)

misc/git/pre-commit - The Go Programming Language を参考に作成しました。 オリジナルではフォーマットされていないコードがある場合にコミットを中断していますが、以下のスクリプトでは gofmt を実行して git add するところまでやっています。 #!/bin/…

golang : URL短縮サービス goo.gl を使う

URL Shortener API の使い方はこちら → URL Shortener。 ここでは API Key を使った方法を載せています。 type responseParam struct { Kind string `json:"kind"` Id string `json:"id"` LongUrl string `json:"longUrl"` } func GetShortenedUrlImpl(longU…

golang : 日本語(マルチバイト)文字を含む string の substring

go では string のスライスは byte として扱われるので、日本語のようにマルチバイト文字を含んだ文字列 str に対して str[start:start+length] のようなことをすると、思わぬ場所が切り取られてしまいます。 この問題を回避するために、一旦 rune にキャス…