Go言語のリテラル記述方法について解説
Go言語を使ったリテラル記述について、数値や文字列、配列、マップなど各種データ型の具体的な書き方を紹介します。
実際のコード例を交え、日常の開発シーンでの使い方に役立つ情報を簡潔に解説していきます。
数値リテラルの記述方法
整数リテラル
10進数、8進数、16進数の記法
Goでは整数リテラルを表す場合、10進数、8進数、16進数を利用できます。
10進数はそのままの数字を記述し、8進数は先頭に0
、16進数は先頭に0x
または0X
を付けます。
例えば、以下のサンプルコードでは各進数の記法例を示しています。
package main
import "fmt"
func main() {
// 10進数リテラル
var base10 int = 123
// 8進数リテラル (先頭の0を付ける)
var base8 int = 075 // 10進数では 61 と同じ
// 16進数リテラル (先頭に0xを付ける)
var base16 int = 0x7B // 10進数では 123 と同じ
fmt.Println("10進数:", base10)
fmt.Println("8進数:", base8)
fmt.Println("16進数:", base16)
}
10進数: 123
8進数: 61
16進数: 123
浮動小数点リテラル
Goでは浮動小数点リテラルをfloat32
またはfloat64
として扱います。
小数点を含む数値や、指数表記を利用することができます。
例えば、3.14や1.0e-2
のような記述が可能です。
以下のサンプルコードで、2種類の表現方法を確認できます。
package main
import "fmt"
func main() {
// 小数点表記の例
var pi float64 = 3.14
// 指数表記の例
var exp float64 = 1.0e-2
fmt.Println("pi:", pi)
fmt.Println("exp:", exp)
}
pi: 3.14
exp: 0.01
複素数リテラル
Goでは複素数リテラルは実部と虚部を持つ形式で直接記述できます。
形式はa+bi
となります。
なお、虚部は必ずi
をつけ、数学的に表す複素数と同様に扱えます。
サンプルコードでは、複素数リテラルを利用し、演算結果も出力しています。
package main
import (
"fmt"
)
func main() {
// 複素数リテラルの例
var c1 complex128 = 3 + 4i
// 別の複素数リテラル
var c2 complex128 = 1 - 2i
// 複素数の足し算
var sum complex128 = c1 + c2
fmt.Println("c1:", c1)
fmt.Println("c2:", c2)
fmt.Println("sum:", sum)
}
c1: (3+4i)
c2: (1-2i)
sum: (4+2i)
文字列リテラルの表記方法
生文字列リテラル
生文字列リテラルは、バッククォート`
で囲むことで記述できます。
改行や特殊文字がそのままの形で保持されるため、複数行に渡る文字列や、エスケープが多用される場合に便利です。
以下はサンプルコードです。
package main
import "fmt"
func main() {
// 生文字列リテラルの例
var rawString string = `これは生文字列です。
改行もそのまま保持されます。
特別なエスケープ処理は不要です。`
fmt.Println(rawString)
}
これは生文字列です。
改行もそのまま保持されます。
特別なエスケープ処理は不要です。
解釈付き文字列リテラル
解釈付き文字列リテラルは、ダブルクォート" "
で囲まれ、エスケープシーケンスが利用可能です。
文字列中に特殊文字を挿入したい場合に利用され、例えば改行やタブ、Unicode文字を記述できます。
エスケープシーケンスとUnicodeの利用
エスケープシーケンスを使用すると、\n
で改行、\t
でタブ、\\
でバックスラッシュ自体を表現できます。
また、Unicodeコードポイントは\uXXXX
や\UXXXXXXXX
で表すことができます。
次のサンプルコードで、エスケープシーケンスとUnicodeの利用例を示します。
package main
import "fmt"
func main() {
// 解釈付き文字列リテラルの例
var interpretedString string = "Hello, 世界!\nこれはタブ:\t->\u2192" // \u2192 は右向き矢印
fmt.Println(interpretedString)
}
Hello, 世界!
これはタブ: ->→
ブール値とnilリテラル
真偽値リテラル
Goでは真偽値リテラルとして、true
とfalse
が用意されています。
論理演算や条件分岐で頻繁に利用され、シンプルに結果が導かれます。
以下のサンプルコードでは、真偽値の基本的な利用例を示します。
package main
import "fmt"
func main() {
// 真偽値リテラルの例
isActive := true
isComplete := false
fmt.Println("isActive:", isActive)
fmt.Println("isComplete:", isComplete)
}
isActive: true
isComplete: false
nilリテラルの扱い
Goにおけるnil
リテラルは、ポインタ、スライス、マップ、チャネル、関数などの参照型の初期状態や無効な状態を示すために使用されます。
以下のサンプルコードでは、ポインタとマップでnil
を扱う例を示します。
package main
import "fmt"
func main() {
// ポインタのnilチェック
var ptr *int = nil
if ptr == nil {
fmt.Println("ptr is nil")
}
// マップのnilチェック
var dict map[string]int = nil
if dict == nil {
fmt.Println("dict is nil")
}
}
ptr is nil
dict is nil
コンポジットリテラルの記述例
配列リテラル
配列リテラルは、固定長の配列を初期化する方法です。
要素をカンマで区切って記述することで、配列の初期状態を簡単に定義できます。
以下のサンプルコードでは、整数型の配列リテラルを利用しています。
package main
import "fmt"
func main() {
// 整数型の配列リテラル
var numbers = [5]int{1, 2, 3, 4, 5}
fmt.Println("配列:", numbers)
}
配列: [1 2 3 4 5]
スライスリテラル
スライスリテラルは、動的な長さのリストを初期化するために利用されます。
配列リテラルに似ていますが、サイズ指定が不要な点が特徴です。
以下は、スライスリテラルの使用例です。
package main
import "fmt"
func main() {
// スライスリテラルの例
fruits := []string{"apple", "banana", "cherry"}
fmt.Println("スライス:", fruits)
}
スライス: [apple banana cherry]
マップリテラル
マップリテラルは、キーと値のペアを使って連想配列を初期化する方法です。
以下のサンプルコードでは、文字列をキー、整数を値とするマップを定義しています。
package main
import "fmt"
func main() {
// マップリテラルの例
salary := map[string]int{
"Alice": 50000,
"Bob": 60000,
"Carol": 55000,
}
fmt.Println("マップ:", salary)
}
マップ: map[Alice:50000 Bob:60000 Carol:55000]
構造体リテラル
構造体リテラルは、構造体型の変数を初期化するために利用されます。
フィールド名と値を指定することで、わかりやすく初期化できます。
以下のサンプルコードでは、シンプルな構造体を定義し、そのリテラル記述例を示しています。
package main
import "fmt"
// Person構造体を定義
type Person struct {
Name string
Age int
}
func main() {
// 構造体リテラルの例 (フィールド名を指定して初期化)
person := Person{
Name: "Taro",
Age: 30,
}
fmt.Println("構造体:", person)
}
構造体: {Taro 30}
まとめ
この記事では、Go言語のリテラル記述方法について、整数、浮動小数点、複素数、文字列、真偽値、nil、そしてコンポジットリテラルの各種表現方法を具体例とともに解説しました。
全体を通して、各リテラルの記法とその活用法が理解できる内容です。
ぜひ実際にコードを書いて、あなた自身のプロジェクトで応用してみてください。