i++

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

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.Println(err)
    return
}
val, ok := constant.Int64Val(tv.Value)
if !ok {
    fmt.Println("Failed to get Int64Val")
    return
}
fmt.Println(val)

// 結果は 3。

(Go 言語で プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問 をトライ中に 2問目を解くために方法を探しただけで、中身はあまりよくわかっていません。)