golang で型無 const がどんな感じなのか試してみた。お任せだとこんな感じ。
package main import ( "fmt" "reflect" ) func main() { const a = 1 const b = 0.1 const c = "1" const d = true fmt.Println(reflect.TypeOf(a), a) fmt.Println(reflect.TypeOf(b), b) fmt.Println(reflect.TypeOf(c), c) fmt.Println(reflect.TypeOf(d), d) }
int 1 float64 0.1 string 1 bool true
で、少しいじってみた。
const a = 1 const b = 3.0 fmt.Println(reflect.TypeOf(a), reflect.TypeOf(a/b), a/b, 1/3.0) fmt.Println(reflect.TypeOf(b), reflect.TypeOf(b/a), b/a, 3.0/1)
とすると、動いている環境が amd64 なので
int float64 0.3333333333333333 0.3333333333333333 float64 float64 3 3
になるのですが、型を付けて const a int =1 とか const a int64 =1 にすると
const a int = 1 const b = 3.0 fmt.Println(reflect.TypeOf(a), reflect.TypeOf(a/b), a/b, 1/3.0) fmt.Println(reflect.TypeOf(b), reflect.TypeOf(b/a), b/a, 3.0/1)
int int 0 0.3333333333333333 float64 int 3 3
const a int64 = 1 const b = 3.0 fmt.Println(reflect.TypeOf(a), reflect.TypeOf(a/b), a/b, 1/3.0) fmt.Println(reflect.TypeOf(b), reflect.TypeOf(b/a), b/a, 3.0/1)
int64 int64 0 0.3333333333333333 float64 int64 3 3
となりエラーが出ない。数字を直に入れてまとめて型指定をしたような感じ。
型無 const の場合は小数点以下が書いてなくても int int64 だけでなく float64 にもしてもらえるみたいです。
あまりないとは思うのですが、型無 const 同士の複雑な計算は試してみないとちょっと不安。
特記することもないのですが、追加で float32 を
const a float32 = 1 const b = 3.0 fmt.Println(reflect.TypeOf(a), reflect.TypeOf(a/b), a/b, 1/3.0) fmt.Println(reflect.TypeOf(b), reflect.TypeOf(b/a), b/a, 3.0/1)
float32 float32 0.33333334 0.3333333333333333 float64 float32 3 3