型を理解する!静的型付け言語のGoでは重要です

Go言語
この記事は約12分で読めます。
Go初学者
Go初学者

Go言語でよく使用される型について知りたいです。

この記事ではGo言語でよく使用される型の基本について知ることができます!
  • int型 string型 float型 bool型 で知っておきたいこと
  • 型のデータ量の最小値と最大値について
  • 簡易的(出力結果のみ)な型変換について

Go言語は静的型付け言語で、Go言語でプログラムを書く場合は「型」を常に意識する必要があります。

この記事では、Go言語でよく使用される型の基本的に知っておきたいことをお伝えします。

当ブログの変数宣言に関する記事を読むことで、より理解が深まることでしょう。

もりぴ
この記事を書いた人

XHTML1.0時代にHTML&CSSを勉強した経験あり。無趣味だった私が2020年5月からプログラミング学習を開始し現在も挫折せずに趣味で学習を楽しんでいる51歳。プログラミングの楽しさをブログを通してお伝えしていきます。

もりぴをフォローする

【Go言語の型】int型(整数型)

int型は整数値を代入することができる型です。

int型の種類と最小値と最大値

int型は通常使用で int を多く使用していますが、実はint型だけでもたくさんの型の種類があります。

int型の種類と扱える整数値を表でまとめてみました。

ビット数最小値最大値
uint88bit0255
uint1616bit065535
uint3232bit04294967295
uint6464bit018446744073709551615
int88bit-128127
int1616bit-3276832767
int3232bit-21474836482147483647
int6464bit-92233720368547758089223372036854775807

上記のようにint型には種類があり、それぞれ扱えるデータ量に違いがあります。

もりぴ
もりぴ

覚える必要はありません。とりあえず「こういうのがあるんだ…」くらいの認識でいいですよ。

int型で変数宣言してみよう

int型で変数宣言する時は int のみで型を宣言するのが一般的です。

int型はパソコン環境に依存し、あなたのパソコンのOS(オペレーションシステム)が64ビットであればint64と同じ整数値を扱うことができます。

もちろん int64 のように型を宣言することもできます。

// int型で変数宣言
package main

import "fmt"

func main(){
    // intで変数宣言
    var i int = 1
    // 値を出力
    fmt.Println(i)
    // 型を確認
    fmt.Printf("%T\n", i)

    // int64で変数宣言
    var i64 int64 = 10
    fmt.Println(i64)
    // 型を確認
    fmt.Printf("%T\n", i64)
}
// 出力結果
$ go run main.go 
1
int
10
int64

int型の演算で注意したい点

先程のプログラムコードで ii64 を足し算したらどうなると思いますか?

i はint型で i64 はint64型でどちらもint型です。

では、実際に計算してみましょう。

// int型で変数宣言
package main

import "fmt"

func main(){
    // intで変数宣言
    var i int = 1
    fmt.Println(i)
    fmt.Printf("%T\n", i)

    // int64で変数宣言
    var i64 int64 = 10
    fmt.Println(i64)
    fmt.Printf("%T\n", i64)

    // 足し算してみる
    fmt.Println(i + i64)
}
// 出力結果
$ go run main.go 
# command-line-arguments
./main.go:20:19: invalid operation: i + i64 (mismatched types int and int64)

「i + i64は型がミスマッチです」というエラーが出力されます。

同じint型ですが、別の型と識別されて演算できません。

では、このミスマッチするエラーを解消していきましょう。

型変換してエラーを回避しよう

演算結果を出力するときに、どちらかの型を合わせて演算します。

今回は i64 をint型に型変換してみましょう。

// int型で変数宣言
package main

import "fmt"

func main(){
    // intで変数宣言
    var i int = 1
    fmt.Println(i)
    fmt.Printf("%T\n", i)

    // int64で変数宣言
    var i64 int64 = 10
    fmt.Println(i64)
    fmt.Printf("%T\n", i64)

    // 型変換して足し算してみる
    fmt.Println(i + int(i64))  // int(i64)で型変換

    // 型を調べる
    fmt.Printf("%T\n", i64)  // 確認のために型を調べる
}
// 出力結果
$ go run main.go 
1
int
10
int64
11  // 演算結果が出力される
int64  // 変数自体の型は変わらない

無事にエラーを出さずに足し算することができました。

ただし、今回は出力結果を表示する時に型変換を行っているだけで、実際の i64 の型はint64型のままだということを確認しておきましょう。

型変換の詳細は、別の記事でお伝えしていますので参考にしてください。

【Go言語の型】float型(浮動小数点型)

float型は小数(実数)の値を代入することができる型です。

float型の種類

float型は通常使用で float64 を使用することが多いですが、その他にも float32 があります。

float型で変数宣言してみよう

float型で変数を宣言してみます。

// float型(浮動小数点型)で変数宣言
package main

import "fmt"

func main()  {
    var fl64 float64 = 1.2
    fmt.Println(fl64)

    // 暗黙型の変数宣言ではfloat64になる
    fl := 3.4
    fmt.Println(fl)

    fmt.Println(fl64 + fl)
    // どちらも型が一緒なので計算できる
    fmt.Printf("%T %T\n", fl64, fl)

    // float32で変数宣言
    var fl32 float32 = 5.6
    fmt.Printf("%T\n", fl32)

    // 型変換
    // fl32をfloat64に型変換
    fmt.Printf("%T\n", float64(fl32))
}
// 出力結果
$ go run main.go 
1.2
3.4
4.6
float64 float64
float32
float64

float型での注意点

float型で注意したい点は2点あります。

CHECK POINT
float型で押さえておきたい注意点!
  • flaot型はint型と違いパソコン環境に依存しない
  • 省略形で変数宣言した時は float64 になる
もりぴ
もりぴ

float型では float64 を通常使用すると覚えておきましょう。

【Go言語の型】string型(文字列型)

string型は文字列を表現することができる型です。

string型で変数宣言してみよう

string型で変数宣言してみます。

// string型(文字列型)で変数宣言
package main

import "fmt"

func main()  {
    // string型はダブルクォートで文字列を囲んで代入
    var s string = "Hello World"
    fmt.Println(s)

    // 型を調べる
    fmt.Printf("%T\n", s)

    // 数値を文字列に変換(数字として扱う)
    // ダブルクォートで数字を囲む
    var si string = "100"
    fmt.Println(si)
    fmt.Printf("%T\n", si)
}
// 出力結果
$ go run main.go 
Hello World
string
100
string

string型の変数宣言は、 ダブルクォートで文字列を囲みます。

数字を文字列として値を代入したい時もダブルクォートで数字を囲みましょう。

string型の正体は?byte型の配列です

もりぴ
もりぴ

string型は、ちょっとだけややこしいんです…

string型はbyte型の配列で、文字列を1文字づつ取り出すことができます。

// string型(文字列型)で変数宣言
package main

import "fmt"

func main()  {
    // string型はダブルクォートで文字列を囲んで代入
    var s string = "Hello World"
    fmt.Println(s)

    // 型を調べる
    fmt.Printf("%T\n", s)

    // 数値を文字列に変換(数字として扱う)
    // ダブルクォートで数字を囲む
    var si string = "100"
    fmt.Println(si)
    fmt.Printf("%T\n", si)

    // "Hello World"の1文字目を取り出す
    // s[0]は1文字目。ちなみに2文字目はs[1]
    fmt.Println(s[0])
}
// 出力結果
$ go run main.go 
Hello Golang
string
100
string
72  // 1文字目を取り出した結果
 Go初学者
 Go初学者

あれっ!”H”じゃなくて72となってますね。

これがbyte型の正体です。

文字の”H”はアスキーコードで72となり、アスキーコードのままではわかりづらいので文字として表示してみましょう。

ここでも型変換を使用します。

// string型(文字列型)で変数宣言
package main

import "fmt"

func main()  {
    // string型はダブルクォートで文字列を囲んで代入
    var s string = "Hello World"
    fmt.Println(s)

    // 型を調べる
    fmt.Printf("%T\n", s)

    // 数値を文字列に変換(数字として扱う)
    // ダブルクォートで数字を囲む
    var si string = "100"
    fmt.Println(si)
    fmt.Printf("%T\n", si)

    // "Hello World"の1文字目を取り出す
    // s[0]は1文字目。ちなみに2文字目はs[1]
    fmt.Println(s[0])

    // アスキーコードを文字に変換
    fmt.Println(string(s[0]))
}
// 出力結果
$ go run main.go 
Hello Golang
string
100
string
72  // 1文字目を取り出した結果
H   // アスキーコードを文字に変換

【Go言語の型】byte型(参考までに)

string型はbyte型の配列とお伝えしてきました。

もちろんbyte型として変数宣言することができます。

// byte型 配列を表現できる型
package main

import "fmt"

func main()  {
    b := []byte{72, 73}
    fmt.Println(b)

    // byte型を文字列に変換
    fmt.Println(string(b))

    // 文字列をbyte型配列で表示する
    c := []byte("HI")
    fmt.Println(c)

    // 文字列で表示する
    fmt.Println(string(c))
}
// 出力結果
$ go run main.go
[72 73]
HI  // byte型を文字列に変換
[72 73]
HI  // byte型を文字列に変換

byte型の変数宣言で注意しなければいけないのが、アスキーコードの配列の場合は {} になり、文字の配列の場合は () になります。

【参考】アスキーコード

参考としてアスキーコードについて触れておきましょう。

ASCIIとは、アルファベットや数字、記号などを収録した文字コードの一つ。最も基本的な文字コードとして世界的に普及しており、他の多くの文字コードがASCIIの拡張になるよう実装されている。文字を7ビットの値(0~127)で表し、128文字が収録されている。

IT用語辞典 e-Words
もりぴ
もりぴ

表で見てみましょう。

アスキーコードの”H”10進数のところ見てみると72となっているのが確認できます。

【Go言語の型】bool型(真偽値)

bool型は true(真) false(偽)を表現できる型です。

条件分岐(if文)で多く使用される型となります。

// bool型で変数宣言
package main

import "fmt"

func main() {
    // bool型で変数宣言
    var t bool = true
    var f bool = false

    // 値を出力
    fmt.Println(t, f)

    // 型を調べる
    fmt.Printf("%T\n", t)
    fmt.Printf("%T\n", f)
}
// 出力結果
$ go run main.go 
true false
bool
bool

【まとめ】Go言語の型の基本を理解しよう

今回、Go言語でよく使用される型についてお伝えしてきました。

Go言語の型で押さえておくこと!
  • int型は整数値を代入できる型
  • int型はパソコン環境に依存する
  • 通常使用はintでOK
  • float型は小数(実数)を代入できる型
  • float型はパソコン環境に依存しない
  • 通常使用はfloat64でOK
  • string型は文字列を代入できる型
  • string型の正体はbyte型の配列である
  • bool型はtrue(真)またはfalse(偽)を表現でき、条件分岐で多用される
  • 出力結果の型変換は fmt.Println(変換したい型(変数)) でOK

Go言語は「型」に厳しいプログラミング言語です。

きちんと使いこなしていき、バグの少ないプログラムを目指していきましょう。

comment

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