これまでGoの変数宣言やPrintf()での出力を扱いましたが、その中でint型やfloat64型などを見てきました。
ここでは、その基本型の1つである数値型(Numeric types)について見ていこうと思います。
数値型
数値型は、整数値または浮動小数点値のセットを表します。
以下のGoのドキュメントで数値型の一覧を確認することができます。
代表的な数値型を出力してみましょう。
次のようなコードで確認してみます。
package main
import "fmt"
var x int
var y float64
func main() {
x = 100
y = 42.195
var (
i int64 = 9223372036854775807
ui uint32 = 4294967295
f float32 = 3.14
c complex64 = 2 + 3i
)
fmt.Println(x)
fmt.Printf("%T\n", x)
fmt.Println(y)
fmt.Printf("%T\n", y)
fmt.Println(i)
fmt.Printf("%T\n", i)
fmt.Println(ui)
fmt.Printf("%T\n", ui)
fmt.Println(f)
fmt.Printf("%T\n", f)
fmt.Println(c)
fmt.Printf("%T\n", c)
}
特に意味はありませんが、main()関数の外と中で変数を宣言しています。
順に、int型、float64型、int64型、uint32型、float32型、complex64型(複素数)で変数を初期化して、Println()とPrintf()で値と型を表示しています。
実行結果は次のようになります。
100
int
42.195
float64
9223372036854775807
int64
4294967295
uint32
3.14
float32
(2+3i)
complex64
順にそれぞれの値と型が出力されているのがわかります。
四則演算
Goの数値型を扱ったので、ついでに四則演算の計算について見ていきましょう。
このあたりの計算方法は、他のプログラミングと同じですので理解は容易だと思います。
順に四則演算のコードを書いてみましょう。
package main
import "fmt"
func main() {
fmt.Println("5 + 3 =", 5+3)
fmt.Println("5 - 3 =", 5-3)
fmt.Println("5 * 3 =", 5*3)
fmt.Println("5 / 3 =", 5/3)
fmt.Println("5.0 / 3 =", 5.0/3)
fmt.Println("5 % 3 =", 5%3)
}
順に、足し算(+)、引き算(-)、掛け算(*)、割り算(/)、割り算した余り(%)を行っています。割り算はint型だと小数点以下は無視されます。
実行結果は次のようになります。
5 + 3 = 8
5 - 3 = 2
5 * 3 = 15
5 / 3 = 1
5.0 / 3 = 1.6666666666666667
5 % 3 = 2
ここで、計算のコードを書く時のフォーマットについて、ちょっと見ておきましょう。
次の足し算のコードを見てみましょう。
package main
import "fmt"
func main() {
x := 5 + 3
fmt.Println(x)
fmt.Println("5 + 3 =", 5+3)
}
足し算の出力を2つ行っています。(結果はもちろんどちらも同じ値が出力されます)
ここで、xの省略宣言て初期化した計算式は、「5 + 3」と数字と演算子の間に半角スペースが入っています。
一方、もうひとつのPrintln()の中で実際に計算される部分は「5+3」と半角スペースが間に入ってません。
この書き方がGoでのフォーマットになるということを頭に入れておきましょう。
では、次のように上のフォーマットを無視したコードを入力した場合どうすればいいか?
package main
import "fmt"
func main() {
x := 5+3
fmt.Println(x)
fmt.Println("5 + 3 =", 5 + 3)
}
これは、VScodeでGoの拡張機能を入れて設定していれば、保存時にキチンとフォーマットされます。
Go Playgroundでコードを入力した場合は、以前にも書いたようにFormatボタンを押せばフォーマットが修正されます。
また、エディタに自動でフォーマットする機能がなくても、ターミナルから次のコマンドでgoファイルを実行してみましょう。
gofmt [goファイル名]
すると、次のように修正されたコードが実行結果として表示されます。
gofmt lesson.go
package main
import "fmt"
func main() {
x := 5 + 3
fmt.Println(x)
fmt.Println("5 + 3 =", 5+3)
}
修正の表示ではなく、実際にコードをフォーマットする場合は、次のコマンドを実行します。
gofmt -w [goファイル名]
これで、ファイルが修正されるはずです。(使ってるエディタによっては挙動が違うかもしれません)
Pythonコードで書いてみると…
基本的にPython(Python3系)では、数値型はintとfloat、complexの3種類です。(uint型などを使う場合は、numpyなどのライブラリを使用する必要があります)
def main():
i = 9223372036854775807
f = 42.195
c = 2 + 3j
print(type(i), i)
print(type(f), f)
print(type(c), c)
if __name__ == "__main__":
main()
Pythonの複素数は、Goでは虚数部分をiではなくjで記述するという違いがあります。
次のように出力されます。
<class 'int'> 9223372036854775807
<class 'float'> 42.195
<class 'complex'> (2+3j)
四則演算も同様に次のコードでやってみましょう。
def main():
print("5 + 3 =", 5 + 3)
print("5 - 3 =", 5 - 3)
print("5 * 3 =", 5 * 3)
print("5 / 3 =", 5 / 3)
print("5.0 / 3 =", 5.0 / 3)
print("5 % 3 =", 5 % 3)
if __name__ == "__main__":
main()
実行結果は以下のとおり。
5 + 3 = 8
5 - 3 = 2
5 * 3 = 15
5 / 3 = 1.6666666666666667
5.0 / 3 = 1.6666666666666667
5 % 3 = 2
Goとの違いは、int型の割り算でも小数点以下を処理しているというところですね。
Pythonでは、数式の間の半角スペースは気にしなくても実行できますが、二項演算子の両側に半角スペースを入れて読みやすくするという慣習になっています。
最後に
ここでは、Go言語の基本型のひとつである数値型についてみてきました。
Pythonと違って、数値型のセットは細かく分けて定義されています。
四則演算については、他の言語とほぼ同様の扱いです。
数値の演算のコードを書く場合、変数への代入と、Println()の中での処理とでは、値と演算子の間に半角スペースの有無の違いがフォーマットとしてあります。
コードのフォーマットは、エディタの拡張機能やターミナルでのgofmtコマンドが利用できます。