データ型とは
メモリ上に保存されたデータにアクセスするための変数名を通じて、コンピュータはデータを適切に解釈する必要がある。以下のようなコード例:
package main
import "fmt"
var (
x int = 32
)
func main() {
fmt.Println(x)
}
コンピュータ内部では0と1の組み合わせでデータを表現するが、型情報により:
- 数値や文字列などの解釈方法を明確化
- メモリ領域の使用目的を確定
整数型
符号付き・無符号型の種類
| 型 | 用途 |
|---|---|
| int8/int16/int32/int64 | 符号付き整数 |
| uint8/uint16/uint32/uint64 | 符号無し整数 |
特殊型
- uint/int: アーキテクチャ依存(32bit/64bit)
- uintptr: ポインタ格納用の無符号整数型
進数表記の例
package main
import "fmt"
var (
a int = 0b1010 // 2進数
b int = 037 // 8進数
c int = 0x1A2B3C // 16進数
)
func main() {
fmt.Println(a, b, c)
}
浮動小数点型
IEEE 754規格に準拠したfloat32/float64が利用可能
package main
import "fmt"
var (
pi float64 = 3.141592653589793
)
func main() {
fmt.Println(pi)
}
複素数型
package main
import "fmt"
func main() {
z := 5 + 3i
fmt.Println(real(z), imag(z)) // 実部:5, 虚部:3
}
ブール型
true/falseのみを取る専用型。型変換や数値演算は不可。
文字列操作
エンコーディング
- UTF-8をネイティブサポート
- シングルクォート(')はrune型として扱われる
特殊文字のエスケープ
| シーケンス | 意味 |
|---|---|
| \n | 改行 |
| \t | タブ |
| \\" | ダブルクォート |
文字列操作関数
package main
import (
"strings"
"fmt"
)
func main() {
s := "Go言語プログラミング"
fmt.Println(strings.Contains(s, "言語")) // true
fmt.Println(strings.Split(s, " ")) // ["Go言語" "プログラミング"]
}
文字の扱い
package main
import "fmt"
func main() {
var b byte = 'G'
var r rune = '語'
fmt.Printf("%T, %T\n", b, r) // uint8, int32
}
型変換
package main
import "fmt"
func main() {
var f float64 = 3.14
i := int(f)
fmt.Printf("%T -> %T\n", f, i) // float64 -> int
}
フォーマット出力
package main
import "fmt"
func main() {
fmt.Printf("10進:%d, 2進:%b, 16進:%x\n", 255, 255, 255)
fmt.Printf("小数:%.2f\n", 3.14159265) // 3.14
}