Go 言語には、強制型変換の文法形式が 3 つあります: 1. 型アサーション、構文 "value, ok := x. (変換する必要がある型)"; 2. "型" を使用します。 (a)形式 型変換の場合、構文は「B型の値 = B型(A型の値)」、 3. ポインタ型変換の場合、構文は「(*ポインタ型)(unsafe.Pointer(value)」となります。 )」。
このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。
Golang は厳密に型指定された言語であり、強制的な型変換を備えていますが、Java 言語で使用される強制的な型変換とは異なります。
golang 言語は、型変換 (型変換)、型アサーション (型アサーション) に分かれています。 および ポインタ型変換。
1. 型アサーション
型アサーション (型アサーション) は、インターフェイスの値に対して使用される操作であり、インターフェイスの型変数をチェックするために使用されます。保持されている値は、予期されるインターフェイスまたは具象型を実装します。
構文形式は次のとおりです。
value, ok := x.(T)
このうち、x はインターフェイスのタイプを表し、T は特定のタイプ (インターフェイスのタイプでも可) を表します。
例:
package main import "fmt" func main() { var a interface{} =10 t,ok:= a.(int) if ok{ fmt.Println("int",t) } t2,ok:= a.(float32) if ok{ fmt.Println("float32",t2) } }
打印结果是:int 10 因为 golang 自动推断 a 是 int 类型。 (这个更像是Java的强制类型转换,认为变量 a 是 int 类型,就强转为 int 类型来使用)
package main import "fmt" func main() { var a float32 = 5.6 var b int = 10 fmt.Println (a * float32(b)) }
float32( と入力します。 b) は、強制的な型変換の 2 番目のタイプです。一般的な変数型 int、float、および string は、型 (a) を強制的に使用することができます。たとえば、
var a int32 = 10 var b int64 = int64(a) var c float32 = 12.3 var d float64 =float64(c)
この型変換形式は、Java が作成するコンストラクター クラスのコンストラクター メソッドを介して新しい型オブジェクトを取得します。これは Java 構文のキャストではありません。
package main func main() { var a int = 10 var p *int =&a var c *int64 c= (*int64)(p) }
このようなコードは間違っているため、コンパイラは変換できないことを示すプロンプトを表示します。 p (type *int) から type *int64 ポインターの強制型変換には、
unsafe パッケージの関数実装を使用する必要があります
package main import "unsafe" import "fmt" func main() { var a int =10 var b *int =&a var c *int64 = (*int64)(unsafe.Pointer(b)) fmt.Println(*c) }
型アサーション、型変換、ポインタ型変換です。 、文法 Type Assertion と Pointer Type Conversion は Java により似ています。
Golang と Java の強制型変換は比較的理解できますが、言語が異なれば設計思想も異なるため、一概に比較することはできません。 【関連する推奨事項:以上がGo言語で強制型変換を行う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。