19日に更新してた

アフィリエイトはないよ

【golang】型無 const と 型有 const

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