【Go入門】Goの基本型 – 数値型(Numeric types)と四則演算

Go
スポンサーリンク

これまでGoの変数宣言やPrintf()での出力を扱いましたが、その中でint型やfloat64型などを見てきました。

ここでは、その基本型の1つである数値型(Numeric types)について見ていこうと思います。

スポンサーリンク

数値型

数値型は、整数値または浮動小数点値のセットを表します。

以下のGoのドキュメントで数値型の一覧を確認することができます。

The Go Programming Language Specification - The Go Programming Language

代表的な数値型を出力してみましょう。

次のようなコードで確認してみます。

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コマンドが利用できます。

Go
スポンサーリンク
CodeGraffitiをフォローする

タイトルとURLをコピーしました