go語言中的強制型別轉換有三種語法形式:1、型別斷言,語法「value, ok := x.(需要轉換的型別)」;2、使用「type (a)」形式進行的型別轉換,語法「型別B的值= 類型B(型A的值)」;3、指標型別轉換,語法「(*指標型別)(unsafe.Pointer(值))」。
本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。
golang是強型別語言,有強制型別轉換,但有別於Java語言所使用的強制型別轉換。
golang語言中分為型別轉換(type conversion)、型別斷言(type assertion)和指標型別轉換。
1、類型斷言
類型斷言(Type Assertion)是使用在介面值上的操作,用於檢查介面類型變數所持有的值是否實現了期望的介面或具體的類型。
語法格式如下:
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) 就是第二種強制型別轉換, 普通變數型別int,float,string 都可以使用type (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) }
這樣的程式碼是錯誤的,編譯器會提示 cannot convert p (type *int) to 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) }
golang中的強制型別轉換有三種語法形式,分別是型別斷言,型別轉換,指標型別轉換,文法上型別斷言和指標型別轉換和Java比較像。
golang和Java的強制型別轉換可以對比著理解,但是不同語言設計思想不同,不能硬類比。
以上是go語言怎麼進行強制型別轉換的詳細內容。更多資訊請關注PHP中文網其他相關文章!