go語言怎麼進行強制型別轉換

2023-01-07 18:00:58

go語言中的強制型別轉換有三種語法形式:1、型別斷言,語法「value, ok := x.(需要轉換的型別)」;2、使用「type (a)」形式進行的型別轉換,語法「型別B的值 = 型別B(型別A的值)」;3、指標型別轉換,語法「(*指標型別)(unsafe.Pointer(值))」。

本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

golang是強型別語言,有強制型別轉換,但是不同於Java語言所使用的強制型別轉換。

golang強制型別轉換

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 型別來使用)
登入後複製

2、型別轉換

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語法中不屬於強制型別轉換。

3、指標型別轉換

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視訊教學、】

以上就是go語言怎麼進行強制型別轉換的詳細內容,更多請關注TW511.COM其它相關文章!