見出し画像

golang 型変換/キャストの方法について

今回はgolangの型変換/キャストの方法について紹介していきます。


型変換/キャストとは

型変換/キャストは名前の通り、ある型の値を別の型へと変換する方法です。
Go言語においては型の安全性が重視されるため、異なる型間の暗黙的な変換は行われません。そのため、明示的な型変換が必要となります。

型変換/キャストの書き方

型変換は互換性のある型間でのみ行うことができます。
整数型から浮動小数点型への変換は可能ですが、整数型から文字列型への直接的な変換はできません。

基本的な型変換の例をいくつか紹介していきます。

整数から浮動小数点

var i int = 100
var f float64 = float64(i)

浮動小数点から整数

var f float64 = 2.5
var i int = int(f)

整数から文字列

var i int = 100
var s string = strconv.Itoa(i)

文字列から整数

var s string = "100"
i, err := strconv.Atoi(s)
if err != nil {
	fmt.Println(err)
} else {
	fmt.Println(i)
}

文字列からバイトスライス

var s string = "hello" 
var b []byte = []byte(s)

論理値型から文字列型

var b bool = true
str := fmt.Sprintf("%t", b)

文字列型から論理値型

var str string = "true"
b, err := strconv.ParseBool(str)
if err != nil {
	fmt.Println(err)
} else {
	fmt.Println(b)
}


型変換/キャストの注意点

型変換は便利な機能ですが、使用する際にはいくつかの注意点を意識する必要があります。

データの精度と範囲

float64からintの変換など、大きい範囲の型から小さい範囲の型への変換では、データの精度の損失やオーバーフローが発生する可能性があります。


符号付きと符号なしの変換

符号付き整数を符号なし整数に変換する際に、負の値は予期せぬ大きな正の値に変換されることがあります。逆の変換でも同様の問題が発生します。


浮動小数点数と整数の変換

浮動小数点数から整数への変換は、小数点以下を切り捨てます。
これによってデータの損失が発生するので注意が必要です。


文字列と数値の変換

文字列から数値へ、またはその逆の変換を行う際には、strconvパッケージの関数を使用します。
変換できない文字列を数値に変換しようとするとエラーが発生するので、エラーハンドリングは必須と言えます。


ポインタ型との変換

ポインタ型との直接的な型変換は許されていません。unsafeパッケージを使うことで可能ではありますが、リスクが大きいためあまり使われることはありません。


golangをもっと詳しくなりたい方に

初めてのGo言語

Go言語の入門から応用まではこの一冊で網羅されています。説明も順序立てて説明されており完成度の高い参考書となっています。


詳解Go言語Webアプリケーション開発

こちらはGo言語の基礎知識を得たあとに読むことをすすめる本となっています。ハンズオン形式で手を動かしながら実装をしていくことができるため、実際の開発を意識しながらGo言語を学ぶことができます。

以下の記事では他にも筆者が実際に読んでおすすめしたい本をまとめています。


【Go入門】Golang基礎入門 + 各種ライブラリ + 簡単なTodoWebアプリケーション開発(Go言語)

まだGo言語の勉強を始めていない方、全くの初心者の方にはこちらのUdemy教材が最もおすすめです。

この教材ではgolangの基礎について網羅的に学ぶことができます。ただ見て学ぶだけでなく、講座の中でアプリ作成まで行うことで学んだことの理解をさらに深めることができます。


現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発

個人的に最も勉強になったのは「現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発」という教材です。
本格的なレクチャーに入る前に、なぜGoなのか、なぜFintechなのかについて説明されていることで、Goの概念や意味について大枠から理解することができます。

以下の記事では筆者が実際に受講したおすすめUdemy教材をまとめています。

※本ページではアフィリエイトリンク(PR)が含まれています


この記事が参加している募集

この経験に学べ

この記事が気に入ったらサポートをしてみませんか?