Goにおける型変換の理解
Min-jun Kim
Dev Intern · Leapcell

Key Takeaways
- Goは、型安全性を維持するために明示的な型変換を必要とします。
- 文字列と数値型は、特殊な変換関数を必要とします。
- 型アサーションは、インターフェース変換に使用されます。
Goプログラミングでは、型変換(他の言語では「キャスト」と呼ばれることが多い)は、あるデータ型から別のデータ型に値を変換するために不可欠です。Goは型安全性を重視しているため、異なるデータ型を扱う場合には明示的な型変換が必要です。
基本的な型変換
整数や浮動小数点数などの基本型の間で変換するには、次の構文を使用できます。
package main import ( "fmt" ) func main() { var i int = 42 var f float64 = float64(i) var u uint = uint(f) fmt.Println(i, f, u) }
この例では、整数 i
がfloat64 f
に変換され、その後、符号なし整数 u
に変換されます。各変換は、型安全性を確保するために明示的な型変換を必要とします。
文字列変換
文字列と他の型との間で変換するには、特定の関数が必要です。
-
数値型を文字列に変換するには、
fmt.Sprintf
またはstrconv.Itoa
(整数の場合)を使用します。package main import ( "fmt" "strconv" ) func main() { var i int = 42 var s1 string = strconv.Itoa(i) var s2 string = fmt.Sprintf("%d", i) fmt.Println(s1, s2) }
-
文字列を数値型に変換するには、
strconv.Atoi
(整数の場合)またはstrconv.ParseFloat
のような関数を使用します。package main import ( "fmt" "strconv" ) func main() { var s string = "42" i, err := strconv.Atoi(s) if err != nil { fmt.Println(err) } else { fmt.Println(i) } }
インターフェース変換
Goでは、空のインターフェースinterface{}
は任意の型の値を保持できます。元の値を取得するには、型アサーションを実行する必要があります。
package main import ( "fmt" ) func main() { var i interface{} = 42 if v, ok := i.(int); ok { fmt.Println(v) } else { fmt.Println("Type assertion failed") } }
ここで、型アサーションi.(int)
は、i
がint
を保持しているかどうかを確認します。もしそうなら、v
に値が割り当てられ、ok
はtrueになります。そうでなければ、ok
はfalseになり、アサーションは正常に失敗します。
ポインタ変換
Goでは、同じ基になる型を持つ型の間でポインタ変換が可能です。
package main import ( "fmt" ) type MyInt int func main() { var i int = 42 var p *int = &i var mp *MyInt = (*MyInt)(p) fmt.Println(*p, *mp) }
この場合、MyInt
はint
を基になる型として持つ定義済みの型です。int
へのポインタは、MyInt
へのポインタに変換でき、その逆も可能です。
結論
Goでの型変換は、型安全性と明確さを維持するために明示的な構文を必要とします。これらの変換を実行する方法を理解することは、効果的なGoプログラミングに不可欠です。
FAQs
Goは、予期しない動作やエラーを防ぐために型安全性を強制します。
単純な場合はstrconv.Atoi
を使用し、より詳細な制御が必要な場合はstrconv.ParseInt
を使用します。
適切に処理されない場合、ランタイムパニックが発生します。ok
パターンを使用すると、これを防ぐことができます。
GoプロジェクトのホスティングにはLeapcellをご利用ください。
Leapcellは、Webホスティング、非同期タスク、Redis向けの次世代サーバーレスプラットフォームです。
多言語サポート
- Node.js、Python、Go、またはRustで開発。
無制限のプロジェクトを無料でデプロイ
- 使用量に応じてのみ支払い - リクエストも料金もなし。
比類なき費用対効果
- アイドル料金なしの従量課金制。
- 例:25ドルで平均応答時間60ミリ秒で694万リクエストをサポート。
合理化された開発者エクスペリエンス
- 簡単なセットアップのための直感的なUI。
- 完全に自動化されたCI/CDパイプラインとGitOps統合。
- 実行可能な洞察を得るためのリアルタイムのメトリクスとロギング。
簡単なスケーラビリティと高いパフォーマンス
- 高い同時実行性を容易に処理するための自動スケーリング。
- 運用オーバーヘッドはゼロ - 構築に集中するだけ。
詳細はドキュメントをご覧ください。
Xでフォローしてください:@LeapcellHQ