Go言語の基本的なデータ型と型変換
Go言語は静的型付け言語であり、それぞれのデータ型には特定の操作が定義されています。以下に、Go言語の基本的なデータ型をいくつか紹介します。
- 整数型:
int
、int8
、int16
、int32
、int64
、uint
、uint8
、uint16
、uint32
、uint64
などがあります。これらは符号付きまたは符号なしの整数を表します。 - 浮動小数点型:
float32
、float64
があり、小数点以下の値を持つ数値を表します。 - 複素数型:
complex64
、complex128
があり、複素数を表します。 - ブール型:
bool
型はtrue
またはfalse
の値を持つ論理値を表します。 - 文字列型:
string
型は文字列を表します。
Go言語では、これらのデータ型間での変換(型変換)を行うことができます。型変換は以下のように行います。
var i int = 10
var f float64 = float64(i)
上記のコードでは、整数型の変数i
を浮動小数点型の変数f
に変換しています。このように、Go言語では明示的な型変換が必要です。
次のセクションでは、時間から文字列へ、整数から文字列への変換について詳しく見ていきましょう。
時間から文字列への変換
Go言語では、time
パッケージを使用して時間を操作します。このパッケージには、時間を文字列に変換するためのメソッドが含まれています。
例えば、現在の時間を取得し、それを文字列に変換するには以下のようにします。
package main
import (
"fmt"
"time"
)
func main() {
t := time.Now()
fmt.Println(t.String())
}
上記のコードでは、time.Now()
関数を使用して現在の時間を取得し、String()
メソッドを使用して時間を文字列に変換しています。
また、特定のフォーマットで時間を文字列に変換することも可能です。これにはFormat
メソッドを使用します。Format
メソッドは、時間を指定したレイアウトに従ってフォーマットします。
package main
import (
"fmt"
"time"
)
func main() {
t := time.Now()
fmt.Println(t.Format("2006-01-02 15:04:05"))
}
上記のコードでは、Format
メソッドを使用して時間を"2006-01-02 15:04:05"
の形式の文字列に変換しています。
次のセクションでは、整数から文字列への変換について詳しく見ていきましょう。
整数から文字列への変換
Go言語では、整数を文字列に変換するためにstrconv
パッケージのItoa
関数を使用します。この関数は整数を引数に取り、その整数を表す文字列を返します。
以下に、整数から文字列への変換の例を示します。
package main
import (
"fmt"
"strconv"
)
func main() {
i := 123
s := strconv.Itoa(i)
fmt.Println(s)
}
上記のコードでは、整数123
を文字列に変換し、その結果を出力しています。
また、FormatInt
関数を使用して、整数を任意の基数の文字列に変換することも可能です。この関数は2つの引数を取ります。1つ目の引数は変換する整数、2つ目の引数は基数(2から36まで)です。
package main
import (
"fmt"
"strconv"
)
func main() {
i := 123
s := strconv.FormatInt(int64(i), 16)
fmt.Println(s)
}
上記のコードでは、整数123
を16進数の文字列に変換し、その結果を出力しています。
次のセクションでは、時間と整数の相互変換について詳しく見ていきましょう。
時間と整数の相互変換
Go言語では、時間と整数の相互変換も可能です。これは、特定の時刻を表す整数値(通常はエポックタイムスタンプ)を取得したり、その逆の操作を行うために使用します。
時間から整数への変換
time.Time
型の値からエポックタイムスタンプ(1970年1月1日からの経過秒数)を取得するには、Unix
メソッドを使用します。
package main
import (
"fmt"
"time"
)
func main() {
t := time.Now()
fmt.Println(t.Unix())
}
上記のコードでは、現在の時間を取得し、そのエポックタイムスタンプを出力しています。
整数から時間への変換
逆に、エポックタイムスタンプからtime.Time
型の値を取得するには、time.Unix
関数を使用します。
package main
import (
"fmt"
"time"
)
func main() {
i := int64(1617181920)
t := time.Unix(i, 0)
fmt.Println(t)
}
上記のコードでは、エポックタイムスタンプを時間に変換し、その時間を出力しています。
これらの変換を理解することで、時間と整数の間で自由に変換することが可能になります。これは、時間を扱う多くのアプリケーションで非常に有用です。
次のセクションでは、これらの知識を活用した実践的な例と応用について見ていきましょう。
実践的な例と応用
これまでに学んだ知識を活用して、Go言語で時間と整数、文字列の変換を行う実践的な例を見てみましょう。
エポックタイムスタンプから日付文字列への変換
エポックタイムスタンプ(1970年1月1日からの経過秒数)を人間が理解しやすい日付文字列に変換する例を考えてみましょう。
package main
import (
"fmt"
"strconv"
"time"
)
func main() {
i := "1617181920"
timestamp, _ := strconv.ParseInt(i, 10, 64)
t := time.Unix(timestamp, 0)
fmt.Println(t.Format("2006-01-02 15:04:05"))
}
上記のコードでは、文字列から整数への変換、整数から時間への変換、時間から文字列への変換を一連の流れとして行っています。
現在の時間からエポックタイムスタンプへの変換
現在の時間をエポックタイムスタンプに変換し、それを文字列として出力する例を考えてみましょう。
package main
import (
"fmt"
"strconv"
"time"
)
func main() {
t := time.Now()
i := t.Unix()
s := strconv.FormatInt(i, 10)
fmt.Println(s)
}
上記のコードでは、時間から整数への変換、整数から文字列への変換を一連の流れとして行っています。
これらの例は、Go言語で時間と整数、文字列の変換を行う際の基本的なパターンを示しています。これらの知識を活用すれば、さまざまな問題に対応することが可能になります。