Go/type literal
表示
< Go
Goにおける型リテラル (type literal) とは、名前を持たない型を直接記述する方法のことです。既存の型名を参照するのではなく、型の構造そのものをコード中に記述します。
型リテラルは、主に以下の種類の型を記述する際に用いられます。
- 配列型
[n]T(nは配列の要素数、Tは要素の型)var a [3]int // 長さ3のint型配列
- スライス型
[]T(Tは要素の型)var s []string // string型のスライス
- マップ型
map[K]V(Kはキーの型、Vは値の型)var m map[string]int // キーがstring型、値がint型のマップ
- 構造体型
struct { フィールド名 型 ... }var p struct { Name string Age int }
- ポインタ型
T(Tは指し示す型)var ptr *int // int型へのポインタ
- 関数型
func(引数型...) 戻り値型var f func(int, int) int // int型を2つ受け取り、int型を返す関数
- チャネル型
chan T,chan<- T,<-chan T(Tはチャネルで送受信する型)var ch chan int // int型の送受信が可能なチャネル var sendCh chan<- string // string型の送信専用チャネル var recvCh <-chan bool // bool型の受信専用チャネル
- インターフェース型
interface { メソッド名(引数型...) 戻り値型 ... }var i interface { Read(p []byte) (n int, err error) Write(p []byte) (n int, err error) }
型リテラルの利点:
[編集]- 匿名性
- 一度しか使わないような型にわざわざ名前をつける必要がないため、コードを簡潔に保てます。
- その場での定義
- 型の定義とその型の変数の宣言を同時に行うことができ、コードの局所性を高めます。
型リテラルの例:
[編集]package main import "fmt" func main() { // 配列型リテラル var array [5]int array[0] = 1 // スライス型リテラル slice := []string{"apple", "banana", "cherry"} // マップ型リテラル m := map[string]int{"Alice": 30, "Bob": 25} // 構造体型リテラル person := struct { Name string Age int }{Name: "Charlie", Age: 35} // 関数型リテラル add := func(a, b int) int { return a + b } fmt.Println(array) fmt.Println(slice) fmt.Println(m) fmt.Println(person) fmt.Println(add(5, 3)) }
このように、型リテラルを使うことで、必要な型の構造をその場で直接記述し、コードをより柔軟かつ簡潔に記述することができます。名前付きの型定義 (type NewTypeName ExistingType) と合わせて、Goの型システムを理解する上で重要な概念です。