Golang は静的に型付けされたプログラミング言語であり、型変換は日常のプログラミングにおいて重要な役割を果たします。 Golang では、型変換により、値をある型から別の型に変換できます。この記事ではGolangにおける型変換について詳しく紹介します。
Golang では、自動型変換と強制型変換の両方を行うことができます。自動型変換とは、必要に応じてコンパイラがある型を別の型に自動的に変換することを意味します。たとえば、浮動小数点型の変数に整数型の値を代入する場合、自動的に型変換が行われます。キャストとは、プログラマが値をある型から別の型に明示的に変換することです。 Golang では、強制的な型変換は次のように記述されます: ターゲットの型 (変換された値)。
以下は基本的な型変換の例です:
var i int = 10 var f float64 = float64(i) // int to float64 var u uint = uint(f) // float64 to uint var s string = string(i) // int to string var b []byte = []byte(s) // string to []byte var r rune = rune(i) // int to rune, represents a Unicode code point
Golang では、インターフェイス型アサーションはインターフェイス型の変換を指します。値は別のインターフェイス タイプの値に変換されます。ただし、あるインターフェイス型から別のインターフェイス型への変換が安全でない場合、コンパイラはコンパイルに失敗します。したがって、インターフェイス型変換を実行する場合、初期型はターゲット型のスーパーセットである可能性がありますが、変換されたターゲット型は元の型のサブセットでなければならないことを満足する必要があります。
以下はインターフェイスの型変換の例です:
package main import "fmt" type Animal interface { Speak() string } type Cat struct{} func (c Cat) Speak() string { return "cat" } type Dog struct{} func (d Dog) Speak() string { return "dog" } func main() { animals := []Animal{Cat{}, Dog{}, Cat{}, Dog{}} for _, animal := range animals { fmt.Println(animal.Speak()) if v, ok := animal.(Dog); ok { fmt.Println(v, ok) } } }
Golang では、基本的な型の変換に加えて、インターフェイス型、カスタム型変換も可能です。新しい型を定義する変換は、新しい型を古い型に、またはその逆に変換するため、非常に便利です。 NewTypeで型として定義しないと変換関数が使えません。
以下はカスタム型変換の例です:
type Celsius float64 type Fahrenheit float64 const ( AbsoluteZeroC Celsius = -273.15 FreezingC Celsius = 0 BoilingC Celsius = 100 ) func CToF(c Celsius) Fahrenheit { return Fahrenheit(c*9/5 + 32) } func FToC(f Fahrenheit) Celsius { return Celsius((f - 32) * 5 / 9) } func main() { fmt.Printf("%g\n", BoilingC-FreezingC) // "100" °C boilingF := CToF(BoilingC) fmt.Printf("%g\n", boilingF-CToF(FreezingC)) // "180" °F }
概要
この記事では、基本型、インターフェイス型、カスタム型の変換を含む、Golang での型変換について紹介します。型変換を実行するときは、プログラムが正しいことを保証するために型変換の安全仕様に準拠する必要があります。型変換は多くのシナリオで必要です。適切な型変換設計はプログラムのパフォーマンスを向上させることができ、実際のプログラミングでは特に重要です。
以上がGolang での型変換の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。