Golang を開発に使用する場合、強制型変換または強制変換と呼ばれる型変換が必要な状況によく遭遇します。強制により、変数をある型から別の型に変換できます。これは、データを処理するときに非常に便利です。この記事では、Golangの強制転送に関するデータ型変換、ポインタ変換、インターフェース変換などの関連知識を紹介します。
データ型の強制変換
Golang では、データ型の強制変換では、括弧を使用して変数を含めてから、変換する必要があるデータ型の型名を追加する必要があります。目の前で変換されました。たとえば、文字列を整数にキャストする例は次のとおりです。
str := "123" num, err := strconv.Atoi(str) if err == nil { fmt.Println(num) }
この例では、strconv.Atoi
関数は文字列を整数に変換し、## を返します。 #int 型の値。
strconv.Atoi 関数に加えて、
strconv.ParseBool、
strconv.ParseFloat、## など、型変換を実行できる関数がいくつかあります。 #strconv .ParseInt
など型変換に関数を使用することに加えて、型変換に強制演算子を使用することもできます。たとえば、
型を int
型に変換する場合の例は次のとおりです。 <pre class="brush:php;toolbar:false">f := 1.2
i := int(f) // f 被强制转换为 int 类型
fmt.Println(i)</pre>
ポインタの強制変換
Golang の場合、ポインタ変数が格納される 変数のメモリ アドレスは、ポインタを介してアクセスまたは変更できます。ポインタ変数も強制転送できます。
ポインターをキャストするには、かっこを使用してポインター変数を含めてから、変換する必要があるポインター型の型名を前に追加する必要があります。たとえば、
*int 型のポインタ変数を *string
型のポインタ変数に変換するサンプル コードは次のとおりです。 <pre class="brush:php;toolbar:false">num := 123
ptr := &num //ptr 是一个 *int 类型的指针变量
str := (*string)(unsafe.Pointer(ptr)) // str 是一个 *string 类型的指针变量</pre>
この例では、を見ると、
がポインター型のキャストを実行するために使用されていることがわかります。 unsafe.Pointer
を使用すると非常に便利ですが、安全性が低いためお勧めできません。ポインタキャストに unsafe.Pointer
を使用する必要がある場合は、Golang の仕様と規則に従うように注意してください。 インターフェイスの強制転送
Golang では、インターフェイスはオブジェクト指向プログラミングをサポートするために使用される重要なメカニズムです。インターフェイス変数にはインターフェイスを実装する任意の型変数を格納でき、インターフェイス変数のメソッドを呼び出すと、その型に対応するメソッドが動的に解析されて呼び出されます。
インターフェイス変数は、インターフェイスを実装する型変数に強制できます。このプロセスは型アサーションと呼ばれます。 type アサーションの構文は
interface{}.(type) です。たとえば、インターフェイス変数 i
を強制的に文字列型に変換するサンプル コードは次のとおりです。 <pre class="brush:php;toolbar:false">var i interface{}
i = "hello, world"
str := i.(string) // i 被强制转换为 string 类型
fmt.Println(str)</pre>
インターフェイスの強制型変換を実行する場合、変換が失敗した場合、プログラム
例外が直接スローされます。これを回避するには、_, ok := i.(Type)
という形式を使用します。 概要
Golang の強制転送は、データを処理するときに非常に便利な機能です。データ型、ポインタ型、インターフェイス型の強制のいずれであっても、Golang の仕様と原則に従う必要があります。したがって、Golang を開発に使用する場合は、必ず Golang の開発仕様に従い、強制転送機能を慎重に使用してください。
以上がGolangの強制転送に関する知識を話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。